Panorama snimljena prošli vikend:
Još jedna i još jedna.
07 veljača, 2010
05 veljača, 2010
Gradina - Nigrignano
Već dugo nije bilo vertikalnih panorama...:
Mjesto je Gradina; brežuljak iznad izvora Gradole kod rijeke Mirne.
Mjesto je Gradina; brežuljak iznad izvora Gradole kod rijeke Mirne.
03 veljača, 2010
PHP HipHop
Facebook ima "kompajler" PHP-a u C++. U stvari, nije baš kompajler nego program koji PHP kod pretvara u C++ kod, a ovaj se zatim kompajlira.
Međutim, ima jedna sitnica koja meni pada u oči:
Međutim, ima jedna sitnica koja meni pada u oči:
With HipHop we've reduced the CPU usage on our Web servers on average by about fifty percent, depending on the page.Dakle, sve što su uspjeli dobiti je skraćivanje izvođenja stranice za samo 50%. OK, jasno da tvrtci koja ima tisuće servera na stalnom održavanju ovo ubrzanje puno znači. Međutim, oni koji tek razvijaju aplikaciju u PHP-u bi ovo moglo (trebalo?) značiti da se HipHop uopće ne isplati. Jednostavno, dodatna kompleksnost ni otprilike ne opravdava svu onu fleksibilnost klasičnog skriptnog jezika. Barem dok se aplikacija tek razvija i potrebne su česte izmjene u kodu.
21 siječanj, 2010
Google AppEngine: prvi dojmovi
Krajem prošle godine sam si dao zadatak napraviti jednostavnu aplikaciju u Google AppEngine-u. Ta aplikacija je više-manje gotova i svakodnevno ju koristim. Kad stignem, napisati ću par riječi i o tome (ali nemojte očekivati previše ;). Programirajući dotičnu stekoh kakvu-takvu sliku o GAE-u. Pa, evo par brzinskih digresija...
Administracija aplikacija
Jedna od najkorisnijih svari je administracija. Sve statistike na jednom mjestu i zorno prikazane. Preglednik logova je jako dobar.
Verzioniranje
Verzioniranje aplikacija je jednostavno. Svaki put kod uploada treba promijeniti verziju aplikacije u konfiguracijskoj datoteci. Ta aplikacija onda neće "pregaziti" postojeću nego radi paralelno s njome. Na posebnoj adresi se ona može testirati i, kad se odluči da su testovi prošli, označi se kao "default".
Cijena
Osnovna verzija GAE je besplatna i sasvim je dovoljna za manji sajt. S obzirom na to da prosječan web hosting inače košta 300-400 kuna godišnje ovo je sasvim OK alternativa za prosječnog korisnika. A, kad i ako, se zahtjevi povećaju - može se preći na plaćenu varijantu.
Podrška drugih aplikacija
Tu postoji mali problem zbog kojeg je klasični hosting u prednosti. Nema dovoljno gotovih aplikacija (CMS, blog, forum) za GAE. Slično je s frameworkovima. Ja sam htio koristiti GRails (na java platformi), ali ispostavilo se da na GAE ne radi isto kao i na drugim platformama. Dakle, treba pažljivo birati koji programski jezik i koji framework.
Ograničenja u jezicima
Java i Python na GAE u stvari nisu Java i Python. Neke stvari iz standardnih libraryija su izbačene. Ako, na primjer, trebate promijeniti veličinu slike - to se u Javi ne može jer su izbačene sve klase iz java.awt.* paketa. Klasični threadovi neće raditi, ne može se zapisivati na filesystem, isl...
"Baza"
Baza nije relacijska i zato sve one konstrukcije na koje smo naviknuti ovdje ne prolaze. Nema joinova, subselectova, uniona, isl. Za svaki iole složeniji upit treba ručno definirati indeks. S time da je razlika između jednostavnog i složenog upita takva da je:
Ograničenja u GQL-u provjeriti
Retci u "tablicama" nemaju točno definiranu strukturu. Može se desiti da jedan ima propertyije aaa, bbb i ccc. A drugi ccc, ddd i eee. Ukoliko imamo dva "retka" oblika:
Drugim riječima, cijela koncepcija baze podataka je potpuno drukčija i to treba imati na umu u trenutku kad se aplikacija dizajnira.
Izgradnja indeksa
Kad se nova verzija aplikacije postavi na GAE - njhov softver treba izgraditi te indekse koje mu ručno postavite u konfiguracijskoj datoteci. Ponekad to zna potrajati neočekivano dugo. Meni je jednom za "tablicu" s 30-tak redaka ta "izgradnja indeksa" potrajala preko 15 minuta! (Na kraju mi se nije više dalo čekati, pa sam ugasio PC i pogledao kasnije popodne i tada je sve bilo OK).
Razna druga ograničenja
Osim onih s jezicima, treba se nositi s raznim drugim ograničenjima. Na primjer, rezultat upita u bazi može imati najviše 1000 članova. Rezultat upita se ne smije vrtiti više od 30 sekundi. I slično.
Problemi s bazom
U mojoj aplikaciji se jedan cron job vrti svake dvije minute. I tada izvrši jednostavan upit. Dnevno mi se 4-5 puta desi Timeout exception. Drugim riječima, "baza" zna zakazati.
Lokalno okruženje
Jedan od žešćih problema je što se lokalno okruženje, (GAE SDK) u kojem se aplikacija izrađuje, dosta razlikuje od onog na serveru. Na primjer, nei GQL upiti će lokalno uredno proći, ali kad ga postavite na server - pasti će jer niste ručno definirali indekse.
Eto, ukratko...
Administracija aplikacija
Jedna od najkorisnijih svari je administracija. Sve statistike na jednom mjestu i zorno prikazane. Preglednik logova je jako dobar.
Verzioniranje
Verzioniranje aplikacija je jednostavno. Svaki put kod uploada treba promijeniti verziju aplikacije u konfiguracijskoj datoteci. Ta aplikacija onda neće "pregaziti" postojeću nego radi paralelno s njome. Na posebnoj adresi se ona može testirati i, kad se odluči da su testovi prošli, označi se kao "default".
Cijena
Osnovna verzija GAE je besplatna i sasvim je dovoljna za manji sajt. S obzirom na to da prosječan web hosting inače košta 300-400 kuna godišnje ovo je sasvim OK alternativa za prosječnog korisnika. A, kad i ako, se zahtjevi povećaju - može se preći na plaćenu varijantu.
Podrška drugih aplikacija
Tu postoji mali problem zbog kojeg je klasični hosting u prednosti. Nema dovoljno gotovih aplikacija (CMS, blog, forum) za GAE. Slično je s frameworkovima. Ja sam htio koristiti GRails (na java platformi), ali ispostavilo se da na GAE ne radi isto kao i na drugim platformama. Dakle, treba pažljivo birati koji programski jezik i koji framework.
Ograničenja u jezicima
Java i Python na GAE u stvari nisu Java i Python. Neke stvari iz standardnih libraryija su izbačene. Ako, na primjer, trebate promijeniti veličinu slike - to se u Javi ne može jer su izbačene sve klase iz java.awt.* paketa. Klasični threadovi neće raditi, ne može se zapisivati na filesystem, isl...
"Baza"
Baza nije relacijska i zato sve one konstrukcije na koje smo naviknuti ovdje ne prolaze. Nema joinova, subselectova, uniona, isl. Za svaki iole složeniji upit treba ručno definirati indeks. S time da je razlika između jednostavnog i složenog upita takva da je:
select * from objekti where a = 1..."jednostavan" upit, a već...
select * from objekti where a = 1 and b > 2 order by b asc...složen.
Ograničenja u GQL-u provjeriti
Retci u "tablicama" nemaju točno definiranu strukturu. Može se desiti da jedan ima propertyije aaa, bbb i ccc. A drugi ccc, ddd i eee. Ukoliko imamo dva "retka" oblika:
- aaa = 1, bbb = 2, ccc = 3
- ccc = 7, ddd = 8, eee = 11
Sljedeći GQL:
select * from object where aaa != 3Će naći samo prvi redak. Naviknuti smo pretpostaviti da je aaa implicitno postavljen na null (ili None) pa bi i drugi redak zadovoljavao kriterij. Međutim, kod GQL upita se koristi indeks, a u njemu se nalaze samo oni retci koji imaju postavljen neki property. Na primjer, ako je ondeks po "koloni" aaa, onda se tamo nalazi samo prvi redak.
Drugim riječima, cijela koncepcija baze podataka je potpuno drukčija i to treba imati na umu u trenutku kad se aplikacija dizajnira.
Izgradnja indeksa
Kad se nova verzija aplikacije postavi na GAE - njhov softver treba izgraditi te indekse koje mu ručno postavite u konfiguracijskoj datoteci. Ponekad to zna potrajati neočekivano dugo. Meni je jednom za "tablicu" s 30-tak redaka ta "izgradnja indeksa" potrajala preko 15 minuta! (Na kraju mi se nije više dalo čekati, pa sam ugasio PC i pogledao kasnije popodne i tada je sve bilo OK).
Razna druga ograničenja
Osim onih s jezicima, treba se nositi s raznim drugim ograničenjima. Na primjer, rezultat upita u bazi može imati najviše 1000 članova. Rezultat upita se ne smije vrtiti više od 30 sekundi. I slično.
Problemi s bazom
U mojoj aplikaciji se jedan cron job vrti svake dvije minute. I tada izvrši jednostavan upit. Dnevno mi se 4-5 puta desi Timeout exception. Drugim riječima, "baza" zna zakazati.
Lokalno okruženje
Jedan od žešćih problema je što se lokalno okruženje, (GAE SDK) u kojem se aplikacija izrađuje, dosta razlikuje od onog na serveru. Na primjer, nei GQL upiti će lokalno uredno proći, ali kad ga postavite na server - pasti će jer niste ručno definirali indekse.
Deploy aplikacije
Dnevno se nova verzija aplikacije može uploadati maksimalno 250 puta. Nije malo, ali ako neki problem trebate testirati direktno na serveru - 250 nije baš ni puno.
Problem kod uploada aplikacije
S obzirom da imam sporu internet vezu - postavljanje nove verzije mi ponekad nije radilo kako treba. Trebao sam promijeniti appcfg.py skriptu koja dolazi s GAE SDK-om.
Zauzeće "diskovnog prostora"
Zauzeće diskovnog prostora je biti znatno veće od onog kojeg zauzimaju podaci u tablici. Vjerojatno je zbog toga što za svaku trivijalnost trebaju posebni indeksi koji zauzimaju svoj prostor (a nisu ništa drugo nego sortirana kopija tih podataka u tablici).
18 siječanj, 2010
Programerska produktivnost
Iz The Mythical Man-Month:
___
*Ja bih vjerojatno bio u ovoj grupi.
In one [study] ... were measuring performances of a group of experienced programmers. Within just this group the ratios between best and worst performances averaged about 10:1 on productivity measurements and an amazing 5:1 on program speed and space measurements! In short the $20,000/year programmer may well be 10 times as productive as the $10,000/year one. ...
The conclusion is simple: if a 200-man project has 25 managers who are the most competent and experienced programmers, fire the 175* troops and put the managers back to programming.To je hipotetska situacija, naravno. U stvarnosti skoro nikad ovih 25 managera nisu i najkompetentniji i najiskusniji programeri.
___
*Ja bih vjerojatno bio u ovoj grupi.
17 siječanj, 2010
Jako duboko, strašno zanimljivo i fascinantno
Svako jutro dok idem na posao u autu slušam podcaste. Uglavnom razni kolegiji s američkih sveučilišta, intervjui s programerima ili ekonomistima.
Ima jedna stvar koju nikako ne razumijem. Zašto baš svi profesori humanističkih kolegija koje sam odslušao u zadnjih godinu dana imaju opsesiju da stalno svoje studente/slušatelje podsjećaju koliko je tema njihovog predavanja zanimljiva. Posebno onih koji su na neki način vezani uz povijest filozofije. I onda svako malo dodaju koliko je nešto što je Aristotel (Hume, Locke, Russoeau, ...) rekao jako duboko ili strašno zanimljivo ili fascinantno.
Meni osobno su i teme o kojima govore programeri i ekonomisti zanimljive, fascinantne i "duboke". Međutim, oni o tim temama jednostavno (ali stručno) govore, a slušatelja ostavljaju da sam odlučuje je li mu to zanimljivo ili nije (pretpostavljam jest, kad je odabrao slušati).
Ima jedna stvar koju nikako ne razumijem. Zašto baš svi profesori humanističkih kolegija koje sam odslušao u zadnjih godinu dana imaju opsesiju da stalno svoje studente/slušatelje podsjećaju koliko je tema njihovog predavanja zanimljiva. Posebno onih koji su na neki način vezani uz povijest filozofije. I onda svako malo dodaju koliko je nešto što je Aristotel (Hume, Locke, Russoeau, ...) rekao jako duboko ili strašno zanimljivo ili fascinantno.
Meni osobno su i teme o kojima govore programeri i ekonomisti zanimljive, fascinantne i "duboke". Međutim, oni o tim temama jednostavno (ali stručno) govore, a slušatelja ostavljaju da sam odlučuje je li mu to zanimljivo ili nije (pretpostavljam jest, kad je odabrao slušati).
29 prosinac, 2009
Izbori i Google Chrome
Na neki način HTML je, ipak, programski jezik. Njime se ne opisuju algoritmi, ali opisuje se izgled neke web stranice.
Ne bih volio da Java kompajler pretpostavlja što je moj (loše napisan) kod trebao raditi. Nego, da jednostavno izvrši bez razmišljanja ono što je napisano. Tako ću lakše naći grešku. Na isti način, ne volim baš kad internet preglednici pretpostavljaju što je programer htio s loše napisanim HTML kodom. Jer, onda se desi da IE kod prikaže ispravno, programer zaključi da je sve OK, ali isti kod se ne prikazuje u Firefoxu ili Google Chromeu.
Možda je analogija između Java kompajlera i HTML-a malo pretjerana. Kad netko krivo isprogramira nešto u Javi - rezultat može biti da avionski let zavši na krivom kontinentu ili da se novčani nalog proknjiži na tuđi račun. S neispravnim HTML-om - rezultat je da se stranica u ne vidi u nekom egzotičnom pregledniku.
Na primjer, da HTML kod mojih stranica izgleda ovako:

...vjerojatno bi svi znalci kritizirali dvije stvari:
No dobro, možda se i ne radi o tako važnoj stranici, pa je oprostivo da se sajt ne vidi u nekakvom Google Chrome-u (a ja trenutno imam tu (ne)sreću da ga koristim):

Tako, naime, izgleda na slovnica od www.izbori.hr.
PS. Google Chrome koristi 4.56% ljudi, ali to je čak i manje od postotka ljudi koji su glasali za Primorca. Dakle, vjerojatno nije neka drama ako se takvima naslovnica ne vidi.
Ne bih volio da Java kompajler pretpostavlja što je moj (loše napisan) kod trebao raditi. Nego, da jednostavno izvrši bez razmišljanja ono što je napisano. Tako ću lakše naći grešku. Na isti način, ne volim baš kad internet preglednici pretpostavljaju što je programer htio s loše napisanim HTML kodom. Jer, onda se desi da IE kod prikaže ispravno, programer zaključi da je sve OK, ali isti kod se ne prikazuje u Firefoxu ili Google Chromeu.
Možda je analogija između Java kompajlera i HTML-a malo pretjerana. Kad netko krivo isprogramira nešto u Javi - rezultat može biti da avionski let zavši na krivom kontinentu ili da se novčani nalog proknjiži na tuđi račun. S neispravnim HTML-om - rezultat je da se stranica u ne vidi u nekom egzotičnom pregledniku.
Na primjer, da HTML kod mojih stranica izgleda ovako:

...vjerojatno bi svi znalci kritizirali dvije stvari:
- Tablice se ne koriste za dizajn!
- SCRIPT tag na početku nije zatvoren, nego se nastavlja s HTML-om!
No dobro, možda se i ne radi o tako važnoj stranici, pa je oprostivo da se sajt ne vidi u nekakvom Google Chrome-u (a ja trenutno imam tu (ne)sreću da ga koristim):

Tako, naime, izgleda na slovnica od www.izbori.hr.
PS. Google Chrome koristi 4.56% ljudi, ali to je čak i manje od postotka ljudi koji su glasali za Primorca. Dakle, vjerojatno nije neka drama ako se takvima naslovnica ne vidi.
28 prosinac, 2009
Evropa i Amerika
Je li razlika između angloameričkoga i kontinentalnog kapitalizma kad je riječ o ulozi države doista tako velika? Reisman (2008) naglašava nekoliko stvari vezanih za SAD. Prvo, državna potrošnja u SAD-u trenutačno čini više od 40% nacionalnog dohotka, što ne uključuje golemu izvanproračunsku potrošnju (npr. nedavno spašavanje banaka). Prema Reismanu, to znači da više od četrdeset od svakih sto dolara država uzima protiv volje građana koji su ih stvorili. Drugo, u SAD-u trenutačno postoji petnaest ministarstava i više od stotinu državnih agencija i komisija. Treće, 2007. godine Državni je registar sadržavao čak 73.000 detaljnih državnih propisa, što je porast od više od 10.000 stranica u odnosu prema kraju 1970-ih. Osim toga, u SAD-u na razini saveznih država postoji masivan aparat zakona, državnih odjela, agencija i propisa.Link.
Pretplati se na:
Postovi (Atom)
