Lietuviškas Weblogas apie technologiją

Užklydęs į BlogShares (kuris pats savaime yra atskiras projektas, reikalaujantis atskiro aprašymo) tarp geriausiųjų žaidėjų pamačiau ir lietuvišką pavardę – Edmundas Mišeikis. Pasirodo jis vilnietis ir netgi turi savo internetinį dienoraštį pavadinimu Whispering, kuriame rašo apie su technologija susijusius dalykus. Tiesa, liūdna, kad jis angliškas (aš pastaruoju metu pastebiu kad vis tampu kažkokiu didesniu patriotu ir esu visom keturiom už lietuviško interneto gerinimą ;). Štai pačios svetainės pateiktas apibūdinimas:

Whispering consolidates some knowledge in development of web applications. A personal notebook and a wiki based reference for friends and colleagues.

Na, kiek supratau interneto programų kūrimas čia pateikiamas iš Java programuotojo pusės. Šiaip ar taip, tai lietuviška (emmm… angliška)

Mozillos Prefbar įrankių juosta

Šiandieną gavau elektroninio pašto laišką iš Artūro Šlajaus, kuris man priminė, kad niekur savo svetainėje nesu minėjęs Mozillos PrefBar įrankių juostos. Džiugu, kai tavo svetainę pradeda lankyti ir ja domėtis ne vien tavo gerai pažįstami žmonės.

Mozilla PrefBar yra naudinga įrankių juosta, pritaikyta daugiau paprastiems naršytojams nei interneto programuotojams (kaip kad jau anksčiau aprašytas pnhToolbar). Aš pats PrefBar naudojuosi jau geras mėnuo, ir jis tikrai man pravertė. Pagrindinis PrefBar privalumas manau yra jo galimybė prisitiaikyti jį savo reikmėms. PrefBar’e galima nurodyti kiek jam suteikti funkcionalumo, o tas labai patogu, nes jei retai naudojatės kokia nors funkcija, ją galite tiesiog paslėpti, kad nesimaišytų po akimis. PrefBar atlieka su naršymu susijusias funkcijas: juo galima išvalyti laikinąją atmintinę (cache), naršymo istoriją, vienu spragtelėjimu išjungti paveiksliukus, flash, JavaScript ir iššokančius langus.

Tikrai vertas dėmesio dalykas.

PHP FAQ idėja

Su Lakūnu sugalvojom, kad reikia labai dažnai užduodamų PHP klausimų sąrašo, nes tie patys klausimai dažnai kartojasi tie patys per tą patį. Idėja paprasta: rinkti užduodamus klausimus #php kanale ir sudėti juos į duomenų bazę. Jei vėl pasikartoja toks pats klausimas, užteks tik papastinti linką (na… mes tikimės kad užteks… Turbūt nelabai). Žodžiu turėtume palengvint sau gyvenimą nebeatsakinėdami į tą patį klausimą dešimtąjį kartą. Bent jau teoriškai turėtumėm palengvint sau gyvenimą. ;)

#php susitikimas

Šios dienos #php kanalo tema:

2003 gegužės 16 d. (penktadienis) – preliminari #PHP meeto data… Vieta? Rotušėlė? Preliminarûs dalyviai: MrTenente, Nightblade, scooox, moxliukas, … Veiksmo vietos, idejos labai priimamos ;]

Va #php susitikimo jau seniai trūko. O juk pernai kiekvieną penktadienį toks vykdavo. Tikiuosi į šį susitikimą ateis daug žmonių („daug“ – tai bent kokie 8-10), nes poreikis tam kaip ir yra ;)

Tiesa, nežinau kaip dėl „Rotušėlės“. Mane jos atžvilgiu kankina dvi prieštaringos mintys: viena vertus „Rotušėlė“ yra nekoks kabakas su nekokiu aptarnavimu ir panašiai, o kita vertus – tai #php tradicija.

PHP print revisited

Paskaitęs mano rašliavas apie PHP print() funkciją, Lakūnas nurodė man atitinkamą manualo skyrių ir pasirodo, kad print() yra operatorius. Va čia tai buvo netikėta. Jau man galvoj nebesutelpa viskas :/

Nors print() ir yra operatorius, echo() yra šiaip kalbos dalis. Štai <?php print print 'foo'; ?> spausdina „foo1“ – kaip ir tikėtasi, tuo tarpu <?php print echo 'foo'; ?> meta klaidą „Parse error: parse error, unexpected T_ECHO“

Vogtos idėjos iš CGI::Application

CGI::Application yra puikus modulis Perlui, kuris leidžia išvengti ilgų „if/elsif/else“ blokų pagrindinėje web programos byloje. Pagrindinės bylos (tarkim index.pl) tikslas yra nuspręsti, kurį kodą vykdyti. Tarkime, per HTTP GET kintamąjį op perduodama informaciją, koks kodas turi būti įvykdytas. Tokiu atveju paprastas index.pl atrodytų kažkaip taip:

#!/usr/bin/perl -w
use CGI;
my $r = new CGI;
if($r->param('op') eq 'forumas') {
	# forumo kodas
} elsif($r->param('op') eq 'naujienos') {
	# naujienų kodas
} ...
...

Žodžiu po truputį viskas tampa didele koše (šios svetainės kol kas būtent taip ir atrodo). Su CGI::Application viskas daug gražiau ir paprasčiau: kiekvienam svetainės „moduliui“ sukuriamas atskiras Perlo modulis, o index.pl tik automagiškai užkrauna tą modulį ir jį paleidžia.

Ar galima kažką panašaus padaryt su PHP? Taip. Šitokį automagišką klasių užkrovimą teko matyti Flexi kode, tad tai tikrai ne nauja idėja. Tiesa, aš pats nesu nieko panašaus daręs, tad čia daugiau teoriniai pamąstymai.

Pirma reiktų apsirašyti index.php. Jo tikslas – nuspręsti, kurią klasę užkrauti, ir kam perduoti kontrolę. Tad galbūt užtektų tokio kodo:

<?php 
$galimos_klases = array('foo', 'bar');  # Čia reiktų imti iš kokio nors konfigūracinio failo.
if(isset($_GET['op']) && 
   in_array($_GET['op'], $galimos_klases) &&
   is_file($_GET['op'].'.class.php')) {
	include_once($_GET['op'].'.class.php');
	$foo =& new $_GET['op']();
	print $foo->output();
}
?>

Šis kodas faktiškai turėtų inkludint atitinkamas bylas, jei $_GET['op'] yra foo arba bar. Po inkludinimo, ji inicijuoja atitinkamą klasę (per $foo = new $_GET['op']();) ir iškviečia tos klasės funkciją output(). O šta čia kažkas panašaus į pačią foo.class.php bylą:

<?php
class foo {
	function foo() { }
	function output() {
		return "Aš iš foo klasės";
	}
}
?>

Šioje klasėje aprašome konstruktorių (kurs nieko nedaro) ir funkciją output(), kuri atspausdina vieną sakinį. Jei viskas eina pagal planą, iškvietus index.php?op=foo turėtų paleisti šią klasę. Bet tai tik teoriniai samprotavimai, šis kodas realiai nebandytas ;)

CSS rolloveriai

Kažkas #php kanale paklausė, kaip įmanoma padaryti su CSS, kad pasikeistų lentelės langelio fonas. Šiek tiek pasikrapštęs (aišku galėjau paieškot internete, bet su GPRS gyvenu) sukurpiau panašų dalyką, visai be lentelių. Kiek bandžiau, jis veikia su IE6.0, Opera 7.0 ir Phoenix0.5 (tiksliau beveik 0.6 – kažkoks naktinis buildas). Štai šio dalyko kodas:

<style type="text/css">
.list { margin: 0ex; padding: 0ex; }
.list li { 
	border: 1px solid #333; 
	background: #999; 
	color: #333;
	display: block;
	float:left;
}
.list li a {
	padding:0.0em 1em 0.0em 1em;
	color: #333;
	background: #999;
	text-decoration: none;
}
.list li a:hover { background: #ccc; color: #333; }
</style>
<ul class="list">
<li><a href="foo">foo</a></li>
<li><a href="bar">bar</a></li>
<li><a href="baz">baz</a></li>
</ul>

W3C CSS validatorius sako, kad šiame CSS klaidų nėra. Visas šis dalykas padarytas su nesunumeruotu sąrašu (<ul> ir <li>. Tai iš HTML pusės). Klasei „list“ nustatytos nulinės paraštės (nes pagal nutylėjimą <ul> yra pridedama nemaža paraštė iš kairės). Visa magija, kurios pagalba <li> neišsidėsto vertikaliai yra eilutėse display: block; ir float: left;.

Visa problema su IE yra tame, kad jis leidžia uždėti :hover tik „<a>“ elementui. Lengviausia būtų uždėti skirtingą foną elementui .list li:hover, bet tai neveiks IE (o kad ir kaip ten būtų, visgi IE naudoja apie 80% piliečių). Todėl į <li> įdedam <a> ir su CSS jį praplatinam per visą plotį padidindami „padding“. Vienintelis dalykas, kurį liko padaryti – pakeisti foną, pelei užėjus ant nuorodos. Tai aprašoma .list li a:hover elemente.

Tikiuosi bent jau kam nors buvo šiek tiek naudos ;)

Ginant struktūrinį žymėjimą

Simon Willison išreiškė savo nuomonę apie HTML naudojimą tik dokumento struktūrai aprašyti. Jo nuomone, jei profesionaliai dirbate interneto rinkoje ir dar nepradėjote naudoti CSS, tai kenkiate ir sau, ir savo klientams ir savo kolegoms. CSS gal ir ne stebuklingas dalykas, kuris išsprendžia visas problemas, bet CSS padeda daryti efektyvesnes svetaines. „Efektyvesnes“ – tai matomas daugiau naršyklių, lengvesnes programuoti (ar keisti) ir užimančias mažiau vietos. CSS nėra super sudėtinga. Tiesa, svetainę perversti visiškai pilnai į CSS yra sudėtinga, bet CSS gali padėti išsikrapštyti iš lentelių lentelėse ir permatomų GIF’ų košės.

Pagrindinis dalykas, dėl kurio ginčyjasi Simon’as nėra „CSS prieš lenteles“, jis nori įtikinti, kad HTML turi būti naudojamas struktūrai, o ne dizainui. HTML atskyrimas nuo dizaino turi nemažų privalumų: sumažėjęs kodo dydis, lengviau keičiamas dizainas ir lengvas puslapio pritaikymas įvairioms naršyklėms. Taip, kai kuriuos dalykus kol kas labai sunku pernešti iš HTML į CSS, bet tai dažniausiai dėl prasto naršyklių CSS palaikymo. Tačiau šis palaikymas gerėja.