| |
laacz tagad
klausās:
Radio NABA
Autora domas ne vienmēr sakrīt ar autora domām. © spectatorIr pagājuši 24 gadi un 11 mēneši un 20 dienas kopš mana mūža laimīgākās dienas
Papildus 3355 maniem pļurkšķiem ir sapļurkstēti 33189 sveši pļurkšķi.
ICQ: #58279153 (very rarely)
MSN:
E-mail:
Mazās pustizlās ikoniņas aiz linkiem (ne visiem) arī šo to nozīmē.
|
|
<br />
<br />
<br />
2004 3. septembris piektdiena
2004 2. septembris ceturtdiena
2004 1. septembris trešdiena
|
 |
Kādu laiku atpakaļ, kad sāku lēnām rakties iekšā un censties saprast, kā un kāpēc dalīt struktūru no prezentācijas, to darīju ar zibošām acīm metodom naučnovo tika s primeņeņijem tikaķeļnavo aparata. Kāpēc? Tāpēc, ka tas bija kas jauns un interesants. Un man patīk pielietot visu jauno un interesanto jomā, kura manai sirsniņai ir vistuvākā - web izstrādē.
Tajā laikā es ij nedomāju, ka tas varētu vienkāršot izstrādi, uzturēšanu un, galu galā, lietošanu. Tagad, kad sāku par to domāt, nonāku pie secinājuma, ka tā nu tas arī ir. Kāpēc?
Daudzi aizvērtām acīm, turot augstu paceltus XHTML burtus ķērc par usability, semantic markup, structure + presenation + behaviout, kā arī daudz citām ne gluži saprotamām, bet tomēr skaistām lietām.
Tajā pašā laikā tiek aizmirsts par elementārāko - man ir viegli, lietotājam ir viegli. Šī pieeja atrisina milzumu problēmu. Sākot ar to, ka paātrina izstrādi un uzturēšanu un beidzot ar to, ka neierobežo lietotāju.
Par to paātrināto izstrādi un uzturēšanu runājot, ir jāmin tomēr viens moments. Ar šo pieeju var atvieglot savu darbu tikai tad, ja zin, kā, kur un ko izmantot. Jā, protams, sākotnēji ir milzums problēmu, ieskaitot savietojamību. Taču, kad pēc kāda laika Tu esi apguvis metodiku, ar kuras palīdzību minētās problēmas var atrisināt, ho-ho-hooo - Tu esi zirgā. Nodalot šos trīs slāņus - struktūra, prezentācija un funkcionalitāte, mēs iegūstam vienu milzīgu bonusu. Lai veiktu izmaiņas vienā no trijiem slāņiem, mums nav jāaiztiek pārējie divi.
Otrs, savukārt, ir lietotājs. Viņam ir pilnīgi vienalga, kāpēc Tava lapa nestrādā vai ne pēc kā neizskatās. Tu jau protams vari pieņemt, ka visiem ir javascript atbalsts. Ka visi redz attēlus. Bet tā nav. Un nestāsti, ka Tevi neinteresē šie desmit-piecpadsmit procenti. No sērijas - pasaki, vai Tu apzināti ignorē šos procentus un es pateikšu, cik pavirši Tu strādā. Dod nabaga lietotājam iespēju redzēt un lietot Tevis izveidoto lapu.
Tas, iespējams, nebūs viegli. Jo ir jāapgūst daudz jaunu lietu. Protams. Bet Tu takš nevēlies iet līdzi laikam un darīt savu darbu labāk, ne? Vai arī tomēr vēlies?
|
 |
 |
|
 |
Ienāca prātā, ka visā visumā turpmāk arī JavaScript funkcionalitāte ir jānodala no struktūras. Pirmām kārtām, tieši tāpat, kā mēs ar link rel piesaistām CSS, mēs pašā lapas kodā nebakstām JavaScript'u. Tas ir nepieciešams tikai tiem, kuru pārlūki atbalsta šo technoloģiju. Pārējiem tie ir lieki baiteļi.
<script type="text/javascript" src="script.js">
Bez structure un presentation ir vēl arī behavior
Otrām kārtām, bāzt lapas elementiem klāt notikumu apstrādāšanas funkcijas arī nav labi. Tieši tas pats iemesls, kas pirmāmkārtām - lietotājiem, kuriem nav JS atbalsta, šī lieta nav nepieciešama. Kā arī - dokumenta struktūrā notikumu apstrādes metodēm nav vietas. Tas ir t.s. behavior slānis.
Tāpēc, teiksim, lai atvērtu izlēcošo pēkšņlogu (šis, protams, nav oficiāls letiņiskojums ;) popupu), mums ir mazliet jāpaņemās, nodalot šo behavir no struktūras.
Par popupu usability runāsim citreiz, labi? Šoreiz tas ir vienkārši piemērs.
Sākumā mums bija šis:
<a href="/order/1234" onclick="wopen('1234'); return(false);"...
Tagadiņās mēs uzrakstām apmēram ko sekojošu:
<a href="/order/1234" class="popup" ...
Mums nu ir glauns un strukturāli vairāk vai mazāk pieņemams kods. Un ko tālāk? Kā likt šim linkam vērties popupā? Sekojošā funkcija paņem visus elementus, kuru klase ir popup un pievieno tiem eventu onclick, kura izpildes gadījienā mums izlec gaumīgs popup logs ;)
// Šī funkcija ir nepieciešama tālab, ka Tev var būt vēl
// arī citi skripti, kuriem nepieciešams izpildīties, teiksim,
// window.onLoad gadījienā. Tāpēc mēs izmantojam šo funkciju,
// nevis lai aizvietotu esošu handleri ar savējo, bet gan
// lai pievienotu pēc esošā savējo :)
function addEvent(obj, evType, fn){
if (obj.addEventListener){
obj.addEventListener(evType, fn, true);
return true;
} else if (obj.attachEvent){
var r = obj.attachEvent('on'+evType, fn);
return r;
} else {
return false;
}
}
// Funkcija, kura tiek izsaukta, kad ielādējas dokuments
// un visiem a elementiem ar klasi 'popup' piesaista
// onClick eventa apstrādes funkciju, kura atver popup
// loģeli
function initPopups() {
// Dabonam visus elementus 'a'
var elems = document.getElementsByTagName('a');
// Braucam cauri dabūto elementu masīvam
for (var i = 0; i < elems.length; i++) {
// Ja nu mums elementa klase ir 'popup'
if (elems[i].className == 'popup') {
// Te mēs neizmantojam addEvent, jo negribam,
// lai linki dara vēl kaut ko citu, kā tikai šo.
elems[i].onclick = function() {
// Atveram izlecošo pēkšņlogu
var popup = window.open(this.href,
'popup',
'toolbars=no,scrollbars=no,' +
'width=300,height=200,' +
'resizable=yes');
// Nodrošinam, lai pārlūks pēc loga atvēršanas
// nedodas tālāk (uz href'ā norādīto adresi).
return(false);
}
}
}
}
// Piebiedrojam esošajiem event handleriem
// (ja tādi ir) savējo
addEvent(window, 'load', initPopups);
Tas vairāk vai mazāk ir vēlamais virziens un nebūt ne vēlamā realizācija. 100% nodalīt struktūru, prezentāciju un prezentācijas procesu, diemžēl, nav iespējams. Vienmēr paliks kaut kas, kas visus trīs saistīs kopā.
|
 |
 |
2004 31. augusts otrdiena
2004 30. augusts pirmdiena
|
 |
Nu nenocietos padalīties neizmērojamajā priekā, ka vismaz lielākā daļa datu nekur nav pazudusi...
Izrādās, ka hardware RAID (mirror) tomēt nepalīdz gadījumos, ja nomirst viens no diviem cietajiem diskiem :) Teiksim tā - dotajā brīdī izskatās, ka viens (paldies dievam NE source disks) no spogulī esošajiem diskiem vienā brīdī vienkārši aizmidzis, kā rezultātā, nabaga linuksis, provējot kauč ko ierakstīt, ir atstiepies.
Izslēdzot/ieslēdzot kasti, RAID BIOSs saka, ka vot ir problēma ar RAIDU, ibo tas ir salīcis.
Tad nu izņemam disku, ieliekam atpakaļ, RAID BIOSs saka, ka nu viss ir bumbās. Linuksis, protams, saka, ka viss ir slikti. Nu, ko, rebuildojam RAID masīvu iekš to BIOSu. Pēc laika pārlādējam pickasteserveri (<g>).
Linuxis savukārt pieprasa reiserfsck --rebuild-tree. Darām. Paiet laiciņš, viš tur padzēš, pakoriģē, u.t.t.
Rebūts. Kaste tiešām ielādējas!!!
Un, kas dīvaini, strādā :) Taču, rodas nākamās problēmas. Viens no būtiskākajiem failiem - Cyrus mailboxes.db nehavo pareizu maģisko sākumu. Fiksi uzdibājam skripteli, kurš no direktoriju struktūras uztaisa man nepieciešamo teksta failu, kuru pēcāk var ieimportēt ar ctl_mboxlist:
TAB=`echo -e \\\t`
cd /var/spool/imap/user
find . -type d | grep ./ |
sed -e "s/\.\///" |
sed -e "s/\//\./g" |
sed -e "s/\([a-z]*\)\(.*\)/user\.\1\2${TAB}
default${TAB}\1${TAB}lrswipcda${TAB}
cyrus${TAB}lrswipcda${TAB}/"
# Pēdējās trīs rindiņas patiesībā ir viena rinda :)
Tālāk jau elementāri nokonvertējam to uz mailboxes.db: /usr/lib/cyrus/ctl_mboxlist -u -f /var/imap/mailboxes.db <mailboxes.txt
Viss it kā ir OK. Taču, izrādās, ka folderiem vēl owneršips ir dibinā. Fiksi uzducinām PHP skripteli. Pie kam, izrādījās, ka arī quotas ir nokritušas, kā rezultātā, saliekam defaultās un tad veicam izmaiņas tiem, kuriem tās bijušas lielākas (quotu izmaiņas tiek logotas iekš DB).
Un tagad atliek tāds viens sīkums, kā gaidīt to cilvēku zvanus, kuriem pastkastītes būs nobrukušas (lost direktoriju skaits ir 173, tad nu kā minimums tik pat varētu būt tādu lietotāju).
|
 |
 |
|