Архива за 'Programiranje' категорију

Hak(ić) u arhitekturi JavaScript kôda - trend za 2008 - “bibliotekarski problem”

јануар 29, 2008

Nakon povampirenja povećane primene JavaScripta od pre 3-4 godine, popularisalo se u primeni nekoliko klijentskih biblioteka (to i vrapci znaju): Ajile, Dojo toolkit, Echo, ExtJS, JQuery, MochiKit, MooTools, Prototype, Rialto, Rico, script.aculo.us, Yahoo! UI Library … ima ih još… Interesanto je dalje, da je postojanje ove palete stvorilo drugu - paletu JavaScript programera. Nove specijalnosti - nova kasta, novi fetiš, novo pleme…

Biranje “prave” uvek je kompromis, a o programerskim fetišima sam se naterao da ne razmišljam. E sad, nije o tome reč, a ako o tome neko želi iole racinalno mišljenje evo mu polaznih linkova:

Mootools protiv jQuery protiv Prototype Prototype protiv jQuery Mootools protiv jQuery protiv Prototype protiv ext protiv Dojo

Može se reći da iza svake od navedenih biblioteka stoji barem nekoliko čovek/godina kodiranja i testiranja i najbolje prakse. Zbog toga nema snažnijeg razloga da ovakve biblioteke sami razvijamo. Kada se uz korišćenje jedne od njih iskodira neki deo web apikacije, biblioteku dalje održava open-source zajednica a naš deo kôda bi (teoretski) trebao da radi i na sledećim stabilnijim i performantnijim verzijama. Mod(ula)(e)rno, nema šta… ali ne i bez glavobolje.

Hakić na koji želim ukazati zapravo je trend u arhitekturi. Dešava se da krenete da web aplikaciju razvijate sa jednom bibliotekom, a kasnije pronađete savršenu komponentu za vašu web aplikaciju ali pisanu na drugoj biblioteci. Problem je što bi sad trebalo u browser “dovući” obe ne baš male biblioteke, ugroziti mu stabilnost. Ponekad se JavaScript biblioteke (programerskim žargonom rečeno) “kolju”, odnosno smetaju jedna drugoj da rade ispravno. Tipično i jednostavno je recimo različito tretiranje window.onload eventa… Apsurd je veći jer obe biblioteke imaju iste ili slične metode/funkcije - redudantan kôd. Drugi problem biblioteka je da se često iz njih koristi tek nekoliko procenata kôda. Kasnije ću se pozvati na sve ove problem, pa ih sada nazivam - “bibliotekarski problemi” (neću sad braniti zašto baš takvo ime).

Hak u arhitekturi je zapravo dodatna mogućnost neke JavaScript komponente da rade na više biblioteka. To na primeru ExtJS izgleda otprilike ovako (izvor slike):

Ovo je arhitektura tog haka na u primeru sa ExtJS, ali se treba šire posmatrati. Dakle neka komponenta (gornji široki plavi bar) može da radi na na baznoj biblioteci (u datom primeru je to: ext-base.js), ali se preko tzv. adaptera može koristiti i na drugim bibliotekama (zeleni, crveni i narandžasti pravougaonik). Adapter je po pravilu malo parče kôda - tzv. apstrakcija (proksiranje) prema drugoj biblioteci. Na taj način rešavaju se “bibliotekarski problemi”.

Ovaj “pattern” (ili hak) u arhitekturi ovih meseci postaje trend. Za kraj evo jedne popularne komponente, sa rešenim “bibliotekarskim problemom”. Javite se ako pronađete još JS komponenti u ovoj arhitekturi.

Dodajte tagove u vašu WordPress temu

јануар 19, 2008

WordPress je u verziji 2.3 uveo podršku za tagove. Ali najverovatnije niste osvežili vašu WordPress temu tako da, i ako koristite tagove, oni se ne vide i vaši posetioci ne mogu da iskoriste ovu blagodet web 2.0 web-a. Mnogi ne vole tagove i ne vide ništa preterano korisno u njima, a ježe se na pomen tag oblačića (tag cloud). Ali ja sam ipak na strani tagova, oni će pomoći da vaši posetioci lakše pronađu vaše stare i zaboravljene postove (tekstove), koji su označeni sa istim tagom kao tekst koji upravo čitaju. Drugi argument u korist tagova je da vam neće škoditi, a čim ne škode to znači da koriste, pa da …

Sve što treba da uradite jeste da u single.php fajl, koji je deo vaše WordPress teme umetnete sledeći kod:

Ovo je funkcija koju ćemo koristiti

Code (php) <?php the_tags(‘before’, ’separator’, ‘after’);?>

Tako da vaš kod može izgledati ovako:

Code (php) <?php the_tags(‘Tagovi : ‘,‘ • ‘,‘ ‘);?>

Tagovi će na izlazu izgledati ovako Tagovi : WordPress • Djuki • Tutorijal

Ili na sledeći način:

Code (php) <?php the_tags(‘Tagovi : ‘,‘ | ‘); ?>

Izlaz će izgledati ovako: Tagovi : WordPress | Djuki | Tutorijal

Tagove možete da postavite upravo ispod sadržaja vašeg posta, pa će deo koda u single.php fajlu izgledati ovako

Code (php)   <h1><?php the_title(); ?></h1> <?php the_content(‘<p class="serif">Read the rest of this entry &raquo;</p>’);?> <p><?php the_tags(‘WordPress tagovi: ‘,‘ | ‘); ?></p>  

A za one koji žele da svoju temu ulepšaju sa tag oblačićem, samo treba da na pogodno mesto dodaju sledeći kod. Ovo može biti u vašem sidebaru (sidebar.php), ili možda u footeru (footer.php), ili gde god vi to želite.

Code (php) <?php wp_tag_cloud(’smallest=8&largest=36&number=150′);?>

Ovde je “smallest” veličina fonta za najmanji tag, koji se najmanje pojavljuje na vašem blogu, “largest” je font za najveći tag tj. tag koji se najviše pojavljuje na vašem blogu. “Number” je broj koji označava koliko tagova želite da prikažete u tag oblaćiču. Što je broj veći i oblačić će da raste. Počnite da koristite tagove i sledeće godine moćićete da vidite, šta je najzastupljenije na vašem blogu, i što je najvažnije videćete šta ste zapostavili tokom godine, a o čemu je vredelo pisati. Pa neka sada kažu da su oblačići beskorisni i da samo zauzimaju mesto.

Dodajte tagove u vašu WordPress temu

јануар 19, 2008

WordPress je u verziji 2.3 uveo podršku za tagove. Ali najverovatnije niste osvežili vašu WordPress temu tako da, i ako koristite tagove, oni se ne vide i vaši posetioci ne mogu da iskoriste ovu blagodet web 2.0 web-a. Mnogi ne vole tagove i ne vide ništa preterano korisno u njima, a ježe se na pomen tag oblačića (tag cloud). Ali ja sam ipak na strani tagova, oni će pomoći da vaši posetioci lakše pronaČu vaše stare i zaboravljene postove (tekstove), koji su označeni sa istim tagom kao tekst koji upravo čitaju. Drugi argument u korist tagova je da vam neće škoditi, a čim ne škode to znači da koriste, pa da …

Sve što treba da uradite jeste da u single.php fajl, koji je deo vaše WordPress teme umetnete sledeći kod:

Ovo je funkcija koju ćemo koristiti

Code (php) <?php the_tags(‘before’, ’separator’, ‘after’);?>

Tako da vaš kod može izgledati ovako:

Code (php) <?php the_tags(‘Tagovi : ‘,‘ • ‘,‘ ‘);?>

Tagovi će na izlazu izgledati ovako Tagovi : WordPress • Djuki • Tutorijal

Ili na sledeći način:

Code (php) <?php the_tags(‘Tagovi : ‘,‘ | ‘); ?>

Izlaz će izgledati ovako: Tagovi : WordPress | Djuki | Tutorijal

Tagove možete da postavite upravo ispod sadržaja vašeg posta, pa će deo koda u single.php fajlu izgledati ovako

Code (php)   <h1><?php the_title(); ?></h1> <?php the_content(‘<p class="serif">Read the rest of this entry &raquo;</p>’);?> <p><?php the_tags(‘WordPress tagovi: ‘,‘ | ‘); ?></p>  

A za one koji žele da svoju temu ulepšaju sa tag oblačićem, samo treba da na pogodno mesto dodaju sledeći kod. Ovo može biti u vašem sidebaru (sidebar.php), ili možda u footeru (footer.php), ili gde god vi to želite.

Code (php) <?php wp_tag_cloud(’smallest=8&largest=36&number=150′);?>

Ovde je “smallest” veličina fonta za najmanji tag, koji se najmanje pojavljuje na vašem blogu, “largest” je font za najveći tag tj. tag koji se najviše pojavljuje na vašem blogu. “Number” je broj koji označava koliko tagova želite da prikažete u tag oblaćiču. Što je broj veći i oblačić će da raste. Počnite da koristite tagove i sledeće godine moćićete da vidite, šta je najzastupljenije na vašem blogu, i što je najvažnije videćete šta ste zapostavili tokom godine, a o čemu je vredelo pisati. Pa neka sada kažu da su oblačići beskorisni i da samo zauzimaju mesto.

Rails: Šta je to?

јануар 18, 2008

Znate onaj: Postoji 10 vrsta programera. Oni koji koriste Rails, i oni koji još nisu čuli za Rails.

Vic je možda izlizan, ali je u ovom slučaju surovo istinit. Teško da se neko sreo sa Rails-om, a da nije bio oduševljen njime.

Ruby on Rails

Pa šta je zaista Rails. Tehnički govoreći Rails nije programski jezik. Ruby je jezik, dok je Rails framework izrađen i napisan u Ruby-u. Otuda i ono „Ruby on Rails“. Međutim, mirne savesti bih mogao da kažem daje  Rails jezik. Stoga, ne bih voleo da mi neko zameri, ako to i učinim.ppOno što Rails razlikuje od bilo čega drugog, je što je nastao u realnim uslovima, i iz stvarne potrebe. Naime, Rails je izdvojen iz prave aplikacije(Base Camp) koja zaista i postoji i koja svakoga dana opsluži hiljade korisnika. Otuda verovatno nema prirodnijeg alata za razvoj Web aplikacije. Sve što je ušlo u Rails, nekada i negde je korišćeno u realnim uslovima.

Intrerpreter, ne kompajler

Rekao sam da je jezik u predmetu ove priče Ruby. Ruby je interpreter. Drugim rečima, oprostite se od performansi. Ruby je i funkcionalni jezik. Funkcionalni zato što ima funkcije prvog reda. Sve što možete sa bilo kojom drugom promenljivom, možete i sa funkcijom. Telo funkcije možete da dodelite nekoj promenljivoj, možete kasnije tako napravljenu funkciju da pozovete ili pak da je prosledite drugoj funkciji. Ruby je i dinamički jezik. Delove programskog koda možete da menjate u toku izvršavanja. Čik probajte to u C-u. Zahvaljujući svim ovim osobinama Rubyja, Rails je izuzetno elegantan i prirodan jezik.

MVC Framework

Na vrh svega ovoga što nudi Ruby, Rails dodaje još dosta toga. Tako Rails formira čitav WEB framework. I to ne bilo kakav, već MVC framework.  Po uzoru na MVC obrazac, Rails jasno prepoznaje i razlikuje koncepte kao što su kontroler, akcija, model, prikaz itd. Sve to ima za rezultat, jasno odvojena pravila poslovne logike, akcija i rezultata koji se prikazuju. Međutim to što je Rails MVC framework ne znači ništa. I Tapestry je MVC framework, pa su aplikacije pisane pomoću njega nešto najružnije i najsloženije što sam ikada video. Prava moć leži u dva koncepta koja se razvojni tim Railsa striktno pridržava. To su: DRY i convention over configuration.

Prvi princip, ili Don’t Repeat Yourself, obezbeđuje minimalno ponavljanje koda. Aplikacija je tako strukturirana da primorava programera da piše čist kod i eliminiše ponavljanje. Drugi princip, konfiguraciju, kako samog frameworka, tako i aplikacije, svodi na nužni minimum. To znači da je konfiguracija predefinisana i da podleže strogo određenim pravilima. U praksi, retko ćete imati potrebu da bilo šta u Railsu podešavate. Ako se pridržavate svih principa koje Rails određuje, dobićete gotove, funkcionalne, aplikacije uz minimum truda i koda.

Rekao sam da Rails prepoznaje koncept kao što je model. Međutim Rails čini i mnogo više od toga. Rails je čitav Object-Relational Mapper. Ovo programera oslobađa potrebe da radi direktno sa bazom podataka, u bilo kom smislu. Svi objekti u domenu aplikacije definišu se u samom jeziku, dok teret lepljenja na bazu, pada na Rails.

Klasika ili trend

Rails svakako nije zaobišao ni agile trend. Sve što je potrebno za unit testing je prisutno. Šta više poželjno je da testom pokrijete svaki aspekt aplikacije. Tu je agile, ali tu je i AJAX. Pisanje, kako vole da kažu, WEB 2.0 aplikacija je potpuno prirodno u Rails okruženju.

Ovo je samo delić priče o Rails-u. Nadam se da će ovo biti samo prvi tekst u Rails serijalu…

“Stevino pravilo” - firma koja ima(će) kvalitetno on-line prisustvo

јануар 14, 2008

Na početku da priznam je ovaj post posledica ovog Varaginog članka, i potonjih komentara.

Na E-trgovini 2007. sam imao predavanje o potrebi da firma pre dorade ili izrade on-line prisustva naruči studiju o korporativnom on-line prisustvu. Namerno kažem on-line prisustvo jer je to značajno širi pojam od termina koji lakše razumeju mase - web sajt. Evo prezentacije sa tog predavanja:

Neće svaka firma prepoznati ovu svoju potrebu. Mi koji se bavimo ovim poslom treba da prepoznamo takve firme. Način na koji empirijski mogu prepoznati ovakvu firmu sam sročio u nešto što ću neskromno nazvati “Stevino pravilo” - evo kako ono glasi:

Da bi firma/organizacija imala kvalitetno internet prisustvo mora imati barem dve od ove tri stavke:

Budžet za on-line prisustvo Bitan uticaj konkurencije u on-line sferi Barem svest ili viziju o povratku te investicije (ROI)

Ako se vratim na slučaj Medoprodukta koji je naveo Varagić, mislim da se da lako primetiti da nijedna od tri stavke nije ispunjena. Sa druge strane nema dovoljno agresivne domaće firme da Medoproduktu jasno predstavi barem ono pod 3.

Pitanje koje sam imao na kraju tog predavanja je bilo nešto poput: “Kako kad firme ne žele studiju on-line pisustva?”, odogovorio sam da takve firme naprosto nemaju unapred potrebne osobine (iz Stevinog pravila) i da one najverovatnije takve nikad neće imati kvalitetno on-line prisustvo.

Na kraju ohrabrenje je da firmi sa potrebnim osobinama ima prilično i da se ovakve studije itekako rade i kod nas.

Rešenja za PythonChallenge

јануар 8, 2008

Već sam pisao o sajtu PythonChallenge. Kada sam se prošli put igrao sa ovim zagonetkama stigao sam do 12. nivoa i tu sam, što zbog obaveza, što zbog toga što nisam mogao da skontam šta treba da radim, stao. Sinoć mi je, kako to obično biva, taman kad sam trebao da počnem da radim projekat obavezan za fakultet, sinula ideja da probam da rešim još koji nivo.

Na žalost, zbog svoje gluposti sam ostao bez podataka sa jedne particije, a, pogađate, upravo na njoj su mi bila rešenja do kojih sam ranije došao. Naravno, malo sam popizdeo što nemam back-up, ali to me nije mnogo omelo nego sam krenuo ispočetka da rešavam sve ne bih li opet došao gde sam bio (a i nije mi se radio projekat za fakultet - naravno, zato sam danas morao da ga uradim). I tako, nakon sat - dva vremena sam ponovo rešio sve zagonetke do 12. nivoa (mnogo brže ide drugi put, kad se znaju svi fazoni, ali svejetno, treba sve programe ponovo napisati). Dvanaesti nivo, oko koga sam se mučio nekoliko dana sada sam rešio za pola sata. Stvarno ne znam kako i zašto mi je to tad bio toliki problem. Sad mi je problem da rešim ovaj 13. nivo

Nego, kao posledicu činjenice da sam isti posao radio dva puta odlučio sam da napravim back-up (ne, neću početi da redovno pravim image diskova ) na sajtu, a isto to može dobro da dođe ljudima koji žele da se dalje da se igraju, ali su zapeli na nekom od nivoa. Spojio sam korisno sa korisnim.

Ovde možete naći sva moja rešenja. Napominjem da ne gledate rešenja ako želite ne da si pokvarite igru (bolje pitajte za neki dodatni savet). Pored samog koda uglavnom sam pisao i kratko objašnjenje kako sam došao do rešenja.

Pa, nadam se da će bar nekom pomoći i da neću stati na ovome.

Rešenja za PythonChallenge

јануар 8, 2008

Već sam pisao o sajtu PythonChallenge. Kada sam se prošli put igrao sa ovim zagonetkama stigao sam do 12. nivoa i tu sam, što zbog obaveza, što zbog toga što nisam mogao da skontam šta treba da radim, stao. Sinoć mi je, kako to obično biva, taman kad sam trebao da počnem da radim projekat obavezan za fakultet, sinula ideja da probam da rešim još koji nivo.

Na žalost, zbog svoje gluposti sam ostao bez podataka sa jedne particije, a, pogađate, upravo na njoj su mi bila rešenja do kojih sam ranije došao. Naravno, malo sam popizdeo što nemam back-up, ali to me nije mnogo omelo nego sam krenuo ispočetka da rešavam sve ne bih li opet došao gde sam bio (a i nije mi se radio projekat za fakultet - naravno, zato sam danas morao da ga uradim). I tako, nakon sat - dva vremena sam ponovo rešio sve zagonetke do 12. nivoa (mnogo brže ide drugi put, kad se znaju svi fazoni, ali svejetno, treba sve programe ponovo napisati). Dvanaesti nivo, oko koga sam se mučio nekoliko dana sada sam rešio za pola sata. Stvarno ne znam kako i zašto mi je to tad bio toliki problem. Sad mi je problem da rešim ovaj 13. nivo Nego, kao posledicu činjenice da sam isti posao radio dva puta odlučio sam da napravim back-up (ne, neću početi da redovno pravim image diskova ) na sajtu, a isto to može dobro da dođe ljudima koji žele da se dalje da se igraju, ali su zapeli na nekom od nivoa. Spojio sam korisno sa korisnim.

Ovde možete naći sva moja rešenja. Napominjem da ne gledate rešenja ako želite ne da si pokvarite igru (bolje pitajte za neki dodatni savet). Pored samog koda uglavnom sam pisao i kratko objašnjenje kako sam došao do rešenja.

Pa, nadam se da će bar nekom pomoći i da neću stati na ovome.

Piši kao što voziš

децембар 27, 2007

Oduvek su tastature su glomazne za poneti i oduvek se traže alternativni načini za unos teksta. Projekat Dasher koji još od 1997. izvodi Inference grupa je jedan od tih alternativa.

Intuitivno, pogodno za osobe sa hendikepom, futurističke primene brojne… iako na prvi pogled izgleda naporno i “fleshy”…

Ideju je nešto teže prepričati zbog toga evo video koji u ovom slučaju mnogo lakše komunicira sa vama:

Brainfuck

децембар 27, 2007

Sinoć u trenutcima dokolice (dobro, dobro, imao sam i pametnija posla, ali ovo mi je bilo zanimljivije) napisao sam Brainfuck interpreter. Verovatno zvuči ozbiljnije nego što stvarno jeste, jer je ceo program stao u nekih 200 linija koda sa sve komentarima i inline dokumentacijom.

Za one koji ne znaju, Brainfuck je jezik koga je napravio Urban Müller 1993. godine kao pokušaj da napravi najmanji kompajler, pa mu je trebao i kompaktan jezik. Nema nikakvu upotrebnu vrednost. Jako lako se uči, ali se jako teško programira u njemu, a kod je čitljiv koliko i binarni.

Struktura podataka koju koristi jezik je jedan niz (zavisi od implementacije, ali obično je niz 8-bitnih vrednosti) i jedan implicitno deklasiran pokazivač. Sintaksa se sastoji samo od 8 znakova:

+ uvećava za jedan vrednost na koju pokazuje pokazivač - umanjuje za jedan vrednost na koju pokazuje pokazivač < pomera pokazivač za jedno mesto u levo > pomera pokazivač za jedno mesto u desno . ispisuje ASCII vrednost znaka čiji kod se nalazi na lokaciji na koju pokazuje pokazivač , učitava kod ASCII znaka sa tastature i smešta ga na lokaciju na koju pokazuje pokazivač [ započinje petlju koja se izvršava sve dok vrednost u lokaciji na koju je pokazivaš pokazivao na početnu petlje ne bude 0 ] završava petlju

Jedan primer brainfuck programa je ovo:

++++++++++[>++++++++++>+++++++++++>++++>++++ +++++++.+.>–.>+++++.+++.> >>+++>>>++.

Ovaj kod, kad se propusti kroz interpreter koji sam napisao (ili bilo koji drugi brainfuck interpreter) će kao rezultat dati string “del-boy”.

Kao što možete pretpostaviti, za ovakav jezik je dosta jednostavno napisati interpreter. Moje rešenje je dosta jednostavno i nekompletno. Napravio sam jedan niz od 1000 elemenata (u praksi je potrebno dosta više… u stvari, u praksi bi taj niz trebao da bude ograničen samo količinom memorije u računaru, ali to ću možda napraviti tek u sledećoj verziji). Ako se dođe do kraja niza odlučio sam da će pokazivač da se vrati na početak. Ista situacija je ako program pokuša da pomeri pokazivač levo od nulte pozicije - vratiće se na kraj.

Nisam ugrađivao nikakve provere sintakse ili bilo šta slično (mrzelo me) tako da vrlo lako može da se desi da interpreter upadne u beskonačnu petlju ili da se neredvidivo ponaša, ali tad je uglavnom program loše napisan. Mislim, najverovatnije ima stvari koje sam propustio, ali za moje test primere je vraćao dobar rezultat.

Svi znakovi sem gore nabrojanih 8 se zanemaruju, tako da slobodno možete da pišete komentare u kod pod uslovom da se u komentaru ne pojavljuju brainfuck znaci. Čak šta više, ako želite možete da sakrijete brainfuck program u neki drugi program, napisan u nekom drugom programskom jeziku.

Jezik koji sam izabrao za implementaciju je Python. Njega već neko vreme učim, ali nikako da nađem više vremena da mu se posvetim tako da sam stalno negde na početku, tako da mi je ovo došlo kao dobra vežba.

I za kraj, kod.

Brainfuck

децембар 27, 2007

Sinoć u trenutcima dokolice (dobro, dobro, imao sam i pametnija posla, ali ovo mi je bilo zanimljivije) napisao sam Brainfuck interpreter. Verovatno zvuči ozbiljnije nego što stvarno jeste, jer je ceo program stao u nekih 200 linija koda sa sve komentarima i inline dokumentacijom.

Za one koji ne znaju, Brainfuck je jezik koga je napravio Urban Müller 1993. godine kao pokušaj da napravi najmanji kompajler, pa mu je trebao i kompaktan jezik. Nema nikakvu upotrebnu vrednost. Jako lako se uči, ali se jako teško programira u njemu, a kod je čitljiv koliko i binarni.

Struktura podataka koju koristi jezik je jedan niz (zavisi od implementacije, ali obično je niz 8-bitnih vrednosti) i jedan implicitno deklasiran pokazivač. Sintaksa se sastoji samo od 8 znakova:

+ uvećava za jedan vrednost na koju pokazuje pokazivač - umanjuje za jedan vrednost na koju pokazuje pokazivač < pomera pokazivač za jedno mesto u levo > pomera pokazivač za jedno mesto u desno . ispisuje ASCII vrednost znaka čiji kod se nalazi na lokaciji na koju pokazuje pokazivač , učitava kod ASCII znaka sa tastature i smešta ga na lokaciju na koju pokazuje pokazivač [ započinje petlju koja se izvršava sve dok vrednost u lokaciji na koju je pokazivaš pokazivao na početnu petlje ne bude 0 ] završava petlju

Jedan primer brainfuck programa je ovo: ++++++++++[>++++++++++>+++++++++++>++++>++++ +++++++.+.> - - .>+++++.+++.> >>+++>>>++.

Ovaj kod, kad se propusti kroz interpreter koji sam napisao (ili bilo koji drugi brainfuck interpreter) će kao rezultat dati string “del-boy”.

Kao što možete pretpostaviti, za ovakav jezik je dosta jednostavno napisati interpreter. Moje rešenje je dosta jednostavno i nekompletno. Napravio sam jedan niz od 1000 elemenata (u praksi je potrebno dosta više… u stvari, u praksi bi taj niz trebao da bude ograničen samo količinom memorije u računaru, ali to ću možda napraviti tek u sledećoj verziji). Ako se dođe do kraja niza odlučio sam da će pokazivač da se vrati na početak. Ista situacija je ako program pokuša da pomeri pokazivač levo od nulte pozicije - vratiće se na kraj.

Nisam ugrađivao nikakve provere sintakse ili bilo šta slično (mrzelo me) tako da vrlo lako može da se desi da interpreter upadne u beskonačnu petlju ili da se neredvidivo ponaša, ali tad je uglavnom program loše napisan. Mislim, najverovatnije ima stvari koje sam propustio, ali za moje test primere je vraćao dobar rezultat.

Svi znakovi sem gore nabrojanih 8 se zanemaruju, tako da slobodno možete da pišete komentare u kod pod uslovom da se u komentaru ne pojavljuju brainfuck znaci. Čak šta više, ako želite možete da sakrijete brainfuck program u neki drugi program, napisan u nekom drugom programskom jeziku.

Jezik koji sam izabrao za implementaciju je Python. Njega već neko vreme učim, ali nikako da nađem više vremena da mu se posvetim tako da sam stalno negde na početku, tako da mi je ovo došlo kao dobra vežba.

I za kraj, kod.

Alat za preporuku: Process Viewer

децембар 7, 2007

Kao prvo - besplatan je. Koristim ga za brzo gašenje programa/procesa. Umesto da idem redom desni klik + close (i slično), više aplikacija sada gasim jednim klikom.

Program se ne instalira klasično, dovoljno ga je preuzeti odavde, i potom otpakovati i kopirati u neki direktorijum. Sam pv.exe je nekih 60 kb i to je shell aplikacija. Postoji i windows grafički interfejs, za one koji to vole tako.

Kontrola svih procesa na Windowsu je mnogo bolja nego kod sistemskog process viewera. Trenutno ga koristim na sledeći način… napravim nekoliko batch datoteka koje mi gase određene grupe aplikacija koje mi često baš tako grupno ne trebaju. Na primer krećem da programiram… i pokrenem batch koji me jednom klikom oslobađa svih recimo instant messengera, anti virus programa (šta će mi za vreme programiranja), nekih agenata za fotoaparat, printer agenta… itd. Jednim klikom oslobodi mi se nekoliko stotina megabajta…

Taj batch otprilike izgleda ovako:

pv -k -f msnmsgr.exe pv -k -f SAVAdminService.exe pv -k -f SavService.exe pv -k -f GoogleUpdate.exe pv -k -f spampal.exe

Fleg -k je instrukcija za kill procesa, a -f je forsirani kill (ili ti ne pitaj me ništa)… Interesananto je da ime procesa može biti zadato i uz upotrebu džoker znaka - * (zvezdica)

Za različite potrebe kreirao sam različite grupe procesa koje gasim, i u tom duhu nazvao batch datoteke:

idi_u_mod_programiranja.bat bez_instant_messengera.bat bez_firewall_i_antivirusa.bat

Meni štedi nekoliko minuta dnevno, i nešto živaca i strpljenja.

Hint 1: budite oprezni sa -f flegom kada gasite aplikacije koje rade sa vašim dokumentima, jer u tom modu vam neće biti ponuđeno snimanje promena na dokumentu, pre gašenja aplikacije.

Hint 2: Sa pv > lista_procesa.txt kreira se datoteka sa listom svih procesa (posle sa copy-paste, bez greške pravite batch)

Hint 3: Ako ne znate ime procesa od neke aplikacije, pokretanjem PrcView.exe i drag-and-dropom toolbar ikone (dvogled) na prozor te aplikacije dobijate ime tog procesa.

Alatčić za CSS

октобар 23, 2007

Ko prati moderne web tehnologije, verovatno je nabasao na MRI - bookmarklet koji će smanjiti svađu sa CSS-om. Da ne bi dužio link koji sledi dragendropujte na bookmark/favorites toolbar:

MRI BOOKMARKLET

Kada kliknete na novostvoreni bookmark, otvoriće se dragabilni prozor (na layeru) i to preko web stranice koja vam je trenutno otvorena u prozoru. Ukoliko ukucate na primer:

p

… svi elementi koji potpadaju pod ovaj CSS slektor (paragrafi) biće posvetljeniji/označeni u odnosu na ostatak stranice. I obrnuto kada budete kliknuli na web stranicu kreiraće se nekoliko varijanti CSS selektora.

Ukratko, alat za traženje onoga šta gađa CSS selektor i alat za traženje selektora za kliknuti deo/element stranice/DOM-a.

Originalni post imate ovde.

Xchat i prikazivanje pesme iz audacious-a

септембар 24, 2007

Dok sam koristio xmms ispisivanje imena pesme koju trenutno slušam na IRC-u sam radio pomoću plugin-a za Xchat pod imenom Xlack. Nažalost, xmms i dalje koristi GTK1, pa sam počeo da koristim audacious za puštanje muzike. E sad, problem je što Xlack ne podržava preuzimanje imena pesme iz audaciousa, pa sam odlučio da napišem neku skripticu na brzinu. Jeste budž, ali za 10ak minuta kucanja koda, odradiće posao.

Da bi skripta radila, potrebno je da se intalira Song Change plugin za audacious. Pod Gentoo-om ovaj plugin se nalazi u paketu audacious-plugins. Za ostale distribucije ćete morati sami da se snađete. Kada je plugin instaliran potrebno je podesiti neke stvari. Kada ga uključite (nalazi se u General sekciji) pojaviće se nova opcija u Preferences (koja se, naravno, zove Song Change). Tu imate mogućnost da ukucate komande koje će se izvršiti kad počne nova pesma, završi pesma ili kad se dođe do kraja liste. U mom slučaju to ovako izleda:# na pocetku nove pesme echo "%s" > /tmp/del-boy-audacious-cur-song # na kraju pesme # ostaljamo prazno # na kraju playliste rm /tmp/del-boy-audacious-cur-song Naravno, možete promeniti ime fajla…

Zatim je potrebno da u direktorijum ~/.xchat2 snimite fajli cursong.py sa sledećim sadržajem:

#!/usr/bin/env python __module_name__ = "Currnet song" __module_version__ = "0.1" __module_description__ = "Displays current song played by audacious" __module_author__ = "Bojan Delic del-boy@ns-linux.org"   FILE = ‘/tmp/del-boy-audacious-cur-song’     import xchat import re   def chomp(s):     return re.sub(r"[\r\n]+$", "", s)   def getSong():     try:         f = open(FILE, ‘r’)     except IOError:         return     song = f.read()     return chomp(song)   def song(word, word_eol, userdata=None):     if word[0] == ’song’:         song = getSong()         if song:             xchat.command("me slusa " + song)     return xchat.EAT_ALL   xchat.hook_command("song", song, help="/song displays current song")

Eventualno treba da izmenite vrednost promenljive FILE ako ste to uradili i u Song Change plugin-u u audacious-u.

Ugasite i upalite Xchat (ili iskoristite komandu /py load ~/.xchat2/cursong.py) i plugin je spreman za upotrebu. Komanda za prikazivanje pesme je /song.

Svestan sam da ovaj plugin nema veliku upotrebnu vrednost (možda postoji već nešto sličtno što radi istu stvar). U stvari cilj ovoga je bio da se malo upoznam sa python API-jem za Xchat, pa ako nekome usput pomogne super… Ako ne, meni opet super

Usability kod pijace

септембар 15, 2007

Otkako su natkrili Limansku pijacu u Novom Sadu, ona deluje živopisno jer plodovi nisu zaklonjeni gornjim delovima tezgi kao na Ribljoj, Futoškoj ili Satelitskoj. Moja desetomesečna ćerkica biva opčinjena ovim vegetarijanskim bojama dok je tuda vozam. Otkako sam nedavno počeo da guram dečija kolica, pojam usability (koristivost - kako ja to prevodim u nedostatku agilnog lingvističkog autoriteta) ima potpuno novu dimenziju. Danas sam u blizini pomenute pijace spazio interesantne atribute ovih stepenica:

Ako se nekada budete mučili da objasnite usability kao pojam, ova slika će vam pomoći. Tuda sam danas provozao kolica. Preko stepenica u najmanju ruku nije udobno, pa su tu dodali betoniranu “strmu ravan”. Ni to nije bilo dovoljno udobno, jer ravan jeste ravna, ali je i strma. Zbog toga sam sve to zaobišao i krenuo blažim nagibom preko već utabane staze. Očito nisam ni prvi ni poslednji (sa točkićima ispred sebe) izabrao ovu putanju.

Slika puno toga priča. O potrebama i rešenjima. O tome da čak i ako primenite neka usability rešenja (kao ova betonska strma ravan) ona neće biti prihvaćena od strane korisnika, ako nisu u dovoljnoj meri udobna.

Ako ste u prilici da projektujete nešto što će drugi koristiti, mislite o tome. Iz primera se vidi da to čak i ne mora biti (puno) skuplje.

mobilni ZX Spectrum

август 15, 2007

Nedavno sam na svojoj Nokiji 6600 instalirao ZX Spectrum emulator… E sad, ko se seća šta je ZX - seća se.

Pre nekih dvadesetak godina, sam kao tinejdžer napravio dve “prave” igrice. Trebalo je da ih objavi zagrebački “Suzy”, na audio kasetama naravno. Imam i potpisane ugovore sa njima, nešto se odugovlačilo, pa onda moja vojska i onda… nebitno…

Postoji i jedan entuzijastički web sajt koji je izlistao sve poznate EX YU autore i programe za onaj “čuveni talas” kućnih računara: Commodore 64, Amstrad, Amiga… pa čak i za domaću Galaksiju i ex domaći Orao… (Lola 8 i Tim 011… nema :). Na tom sajtu izlistane su i te dve moje igrice. Jedna se zove Vuk (lepa arkadica), a druga Television (platformska, liči na lošijeg Manic Minera). Pisano u assembleru… da se zna.

Ja te igrice imam na nekim dvadesetak godina starim audio kasetama. Možete pretpostaviti moju želju da ih ponovo vidim ili čak “poteram” na mobilnom telefonu. Ovaj post i nastaje iz želje da mi se neko sa sličnim iskustvom iz “digitalne arheologije” javi i da neki savet kako da ovo odradim. Ili još lepše da te igrice već negde ima digitalno…

Game of life

август 14, 2007

Pretpostavljam da su mnogi od Vas videli ovaj znak:

Taj znak se zove glider i predstavlja hakerski simbol. Međutim, mene je zaiteresovali zašto je baš taj znak izabran. Posle malo kopanja po internetu otkrio sam jednu dosta zanimljivu matematičku igru na osnovu koje je nastao glider.

U pitanju je Game of Life, koju je 1970. godine izmislio britanski matematičar John Horton Conway. U suštini Game of Life je cirkularni automat i predstavlja zero-player igru (igra bez igrača). Sve što je potrebno je da smislite oblik (kao na primer glider) i da po određenim pravilima pratite šta se sa njim dešava. U tekstu ću često govoriti da je reč o igri iako je u pitanju mnogo više. Po ovim (ili sličnim) pravilima se ponašaju mnoge pojave u prirodi, ali nije mi cilj da to objašnjavam, možda neki drugi put. Ako pretpostavimo da imamo beskonačnu šahovsku tablu i ako uzmemo za crna polja da su živa, a bela mrtva, pravila su sledeća:

Živo polje sa manje od 2 živa suseda će umreti, zbog usamljenosti. Živo polje sa više od 3 živa suseda će umreti, zbog prenaseljenosti. Živo polje sa 2 ili 3 živa suseda će ostati živo do sledeće generacije. Mrtvo polje sa tačno 3 živa suseda će postati živo u sledećoj generaciji.

(more…)

Kuda ide web - ili čudni su putOvi InterneCki

август 8, 2007

Svestan svoje pozicije, malog web preduzetnika iz tamo neke Srbije, namerio sam se ni više ni manje na Erika Šmita (Google CEO). Krajem maja je u Seulu u bogatijoj Koreji održan “Digitalni forum“, gde je Google šef odgovarao na pitanja.

Nakon predavanja postavljeno mu je pitanje o tome šta misli da će Web 3.0 ustvari biti. Ono što sam doživeo kao “faul u nerazumevanju” je da je rekao da je Web 2.0 baziran na AJAX-u. E sad, da je Erik programer… razumeo bih… jer gotovo svaka branša ima svoje viđenje Web 2.0… svoj fetiš. To je ono - zalepiš se za jednu stvar i onda preko nje objašnjavaš nastanak kosmosa. AJAX kao jedna “hak-tehnologija” nikako nije nešto na čemu se Web2.0 zasniva - da je tako ne bi postojali web sajtovi koji su deo Web2.0 trenda, a da pritom ne koriste AJAX. Drugo ono X u AJAX znači XML koji se sve manje koristi u pozadinskim requestima. Web2.0 može biti samo skup trendova, koji su u samo jednom delu tehnološki, a u tom tehnološkom samo u jednom manjem delu AJAX. Pričao sam o tome pomalo na E-trgovini 2006 i baš o tome na IT seminaru u Nišu… pa da se dalje ne ponavljam.

U viđenju Web 3.0 (nešto što bi trebalo doći posle 2.0) Šmit je više intuitivno nego argumentovano izneo svoje viđenje. Evo kako ja vidim budućnost weba (ako o webu razmišljate samo u “web sajtovima”, ovo nije tekst za vas):

Standardni web browseri uskoro neće moći (negde već ne mogu) da performansama iznesu sve hakove da bi se dalje približavali desktop aplikacijama - to naprosto neće više moći “da se budži”. U ime fleksibilnosti, resursi koji su na rasploaganju na klijentu troše se na banalnu interpretaciju.

Na klijentskoj strani web interfejs se interpretira (X)HTML-om, “desktopuje” se interpretiranim JavaScriptom… u Firefox-u je HTML interpretiran kroz XUL/Gecko - (dakle interpretacija interpretiranog), sve je to lepo, fleksibilno, ali to ima svoje granice u performantnosti… instalirajte nekoliko desetina FireFox ekstenzija i biće vam jasno o čemu pričam. Pritom browseri imaju problem da bezbedno priđu resursima sistema datoteke, printanje, lokalni izvršni programi, integracija sa postojećim softwareom, očitavanje hardvera i slično.

Zbog svega navedenog desiće se nekoliko trendova (već se stidljivo i dešavaju):

Prvi pravac: banalizovanje i komponentizacija postojećih servisa koji se dalje ne mogu gurati kroz browser (dalje uprošćavanje)… Negde ovo zovu widgetizacija. Doduše mnogi ni ne znaju ni šta je widget.

Drugi pravac: pojava većeg broja desktop klijenata koji će ustvari zameniti neke web aplikacije iz web browsera, ali sada sa bržim, stabilnijim i bogatijim interfejsom ali i sa boljim korišćenjem resursa na klijentskoj strani (datoteke, lokalne baze…). Ovo je dobar članak o tome. Obratite pažnju na sledeće tehnološke trendove: Microsoft Silverlight, Adobe AIR, Google Gears, biću neskroman da ovome dodam i “čedo” moje firme DataMeal.

Treći pravac (najsporiji proces): ojačavanje browsera tako da budu im bliže budu resursi sistema (na primer, novi FireFox će imati lokalnu bazu podataka)… ovo nosi security probleme, da nije tako ActiveX bi već bio rešenje. Pogledajte i planove za famozni JavaScript, a u ovaj pravac odavno se uključio i W3C sa svojim idejama.Četvrti pravac: U prenosu podataka putem weba (http protokol) sve više će se prenositi samo potrebni podaci, sve na uštrb prenosa opisa interfejsa. (X)HTML će, na primer, gubiti svoje učešće u saobraćaju. Ovo je ustvari nešto što se dešava u sva tri prethodna pravca, samo ga ovde dodatno naglašavam.

Cena programa

август 4, 2007

Jedan od zadataka koji ide “uz posao programera / onog što zna kompjuKtOre” je servisiranje i održavanje računara prijatelja, rođaka, poznanika, rođaka od poznanika …

Iako je svaki od tih slučajeva nekako “poseban”, obično se akcija svodi na:

Sačuvaj korisničke podatke (pošta, Desktop, Documents & Settings direktorijum …) Proveri da li si sačuvao SVE podatke - mašta korisnika gde se sve dokument može smestiti je neverovatna Reinstaliraj Windows* Reinstaliraj sve ostale neophodne programe Vrati podatke

U principu, to je jednosmeran i jednostavan posao, pogotovo ako snimite/pripremite upravljačke programe (drajvere) za sve uređaje koji su u sistemu. No, to je i zamoran i dugotrajan posao - iako tu ima malo interakcije sa računarom, ima puno čekanja (instalacija, restart, zakrpe, restart, novi programi, restart, zakrpe za nove programe, restart …) i odvlači vam pažnju sa bilo čega bitnog što uz put radite.

No, nekim ljudima se to prosto ne može odbiti - tako da i ne odbijam, no uradim. Bitna razlika (u poslednjih nekoliko godina - valjda se omatorelo, naučio da cenim slobodno vreme, priklonio se udobnostima, šta li) je da celu akciju počinjem sa:

* “Da li imate legalan Windows?” - ne zato što radim za Microsoft (ne radim) ili zato što isterujem pravdu (ne isterujem) no se ceo gornji proces daleko lakše odradi ako je Windows legalan, ako se sve potrebne zakrpe mogu skinuti sa Windows Update sajta, ako se svi novi programi (Internet Explorer 7, Windows Media Player 11, Windows Defender) mogu bez problema instalirati na mašinu.

Tu onda ide oko pola sata objašnjavanja “kako se to proverava, a šta će mi” itd. Kada se potvrdi da od legalnog Windowsa nema ni “L” onda ide teži deo - “srediću, a vi samo kupite za 7.400 dinara Windows Home” - i karambol počinje:

P1: “Pa zašto to da platim?” O1: “Zato što ga koristite”

P2: “Pa zar to nije došlo sa računarom?” O2: “Proverite sa Vašim prodavcem” (99% šanse da nije, jer “mali sa ćoška koji je imao konfiguraciju jevtiniju za 2,3€ nije ni čuo za OEM Windows”)

P3: “Pa zašto je to toliko skupo?” O3: E ovde ne može da dođe odgovor-od-jedne-linije

Ne samo kod kupovine Windows-a, vrlo često i u poslu dobijam pitanja “a zašto su programi _tako_ skupi?”; niti se prave od metala, niti se bruse, to je samo gomila nula i jedinica narezanih na CD koji se prosto kopira.

Prvi razlog ili prvi razlozi su očigledni: programeri (oni ljudi iza kompjutera) moraju da plate stanarinu, bicikl, računar na kome razvijaju program, klopu za porodicu No, to je i posao, komplikovan koliko i bilo koji drugi, koji zahteva mnogo truda, mnogo rada, sinhronizaciju gomile ljudi raznih specijalnosti i sposobnosti.

Izgleda da lakoća korišćenja programa (onih koji se zaista lako koriste - a to su najbolji programi) nameće osećaj korisnicima da je te programe lako i napisati (”to je samo igra sa kartama - koliko je to teško napisati?”).

Da vidimo šta je sve potrebno za pisanje programa:

Ako ste firma (a veliki programi obično jesu rezultat timova a ne pojedinaca), pogodiće vas svi uobičajeni troškovi:

Iznajmljivanje prostora Stolice, stolovi, kuhinje, trpezarije, bele table, faksovi, flomasteri, papiri, spajalice, blokovi, olovke Plate i bonusi zaposlenih Porezi i sve dažbine državi Struja, voda, komunalije …

Ako ste softverska firma, pogodiće vas i gomila ne-tako-poznatih problema i troškova:

Debeli internet linkovi Gomile i gomile hardvera - serveri, štampači, UPS-ovi, radne stanice, ruteri, svičevi, veliki diskovi, generatori, trake… Planiranje šta proizvod / program treba da radi Kreiranje prototipa, diskusija sa potencijalnim korisnicima, kreiranje još prototipa, još diskusija, kreiranje proto… Sama proizvodnja programa i sve frustracije koje uz to idu: Nejasne i nedovršene specifikacije Kratki rokovi Nedostatak novca Često menjanje ionako nejasnih specifikacija u hodu Programeri hoće da ubiju menadžment zbog svega gornjeg Menadžment mrzi programere jer su “plaćene primadone sa po dva 19" TFT monitora na stolu a opet sve kasni” Testeri mrze programere jer ovi nisu napisali dobra uputstva za testiranje Programeri mrze testere jer su ovi našli “baš specifičnu grešku u programu a na mom računaru sve lepo radi” Prvi korisnici mrze sve jer su dobili nešto što liči na špageti papazjaniju a ne lep i šaren program koji su oni baš eto zamislili Programeri mrze korisnike jer njihovo super-ekstra-izuzetno-delo moraju da pišu ponovo jer zaboga ne zadovoljava neke sitne poslovne zahteve Testeri mrze … i tako sve u krug Ako postoji i mala nada da će program ikada ugledati svetlo dana, treba spremiti reklamu, odabrati ciljnu grupu, naći nekog normalnog ko može da proda program (programeri tu ne dolaze u obzir - ako su dobri programeri onda su loši prodavci i obrnuto) Ako program ikada i ugleda svetlo dana, treba spremiti dokumentaciju Tu su i pakovanje, distribucija, sistemi za naručivanje i plaćanje Ako program ikada ugleda i prvu mušteriju, treba spremiti i podršku da pruži podršku toj mušteriji

No, to nije sve - programe je teško pisati. Iako ni pravljenje/popravljanje kola nije lako, iako podizanje garaže nije lako, u svim tim zadacima teško da ima misterije - nađete plac, označite, kupite cigle i malter i krenete sa garažom. Kod programiranja, sednete za prazan ekran i od toga treba napraviti nešto što će korisniku zaustaviti dah (= nikada se ne dešava ) ili mu barem olakšati dnevni posao. Kompjuter sa druge strane vam u tome uopšte ne pomaže - to je jedna krajnje glupa sprava, koja radi ama baš sve što mu kažete, bilo to dobro ili ne. Tu glupu spravu morate naučiti svemu - i šta znači tekući račun, i šta znači devizni račun i šta je kursna lista, jer (rekoh li već?) ta glupa sprava ne zna ništa. Apstrakcija (i živci potrebni) da ovo izvedete na prostom (iako jako brzom) kalkulatoru nula i jednica je zametnost kojoj većina ljudi nikada se ne prepusti. Što je zadatak teži, treba više vremena i više programera da glupu spravu nauči svim trikovima potrebnim da najnoviji program isped vas izgleda lepo, koristi se jednostavno i prosto se uklopi u vašu dnevnu rutinu.

Da nije sve tako crno, nije - programiranje je krajnji čin stvaranja - iz ničega stvarate delo koje će nekom služiti; prateći kruta pravila (jezika/mašine) kucajući gomile teksta, na kraju završite sa nečim što ima sopstveni život, što će koristit 1, 5, 10, 1.000 ljudi - a to je krajnji cilj programiranja - delo za druge.

U svakom slučaju, kada se požalite na 7,400 dinara za Windows ili kada kada pomislite da nekog čudaka sa naočarima (to je uvreženo mišljenje, iako gomila nas programera ne nosi naočare - evo ja ) maltertirate sa: “zašto zaboga to šareno na CD-u toliko košta” setite se ovog teksta … i možda ga poštedite

PythonChallenge

јул 13, 2007

Zezajući se po internetu naleteo sam na jedan odličan sajt za python programere, mada i programeri koji vole i koriste druge jezike mogu da se dobro zabave i nauče nešto novo. U pitanju je niz zagonetki i u svakom nivou je potrebno otkriti ključ za prelazak na sledeći nivo. Urađeno je po uzoru na notpron. Koncepcija je ista, ali su pitanja različita. Iako u imenu postoji python, nije neophodno da se u pythonu rešavaju problemi, ali verovatno je lakše nego u drugim jezicima (ali u pythonu je sve lakše, tako da poslednja rečenica nema mnogo smisla ). Do sad sam naišao samo na jedno pitanje koje ja ne bih znao da rešim bez pythona, mada sam našao i rešenja u drugim jezicima. Većina nivoa može da se reši koristeći samo Unix alate koji mogu da se nađu na svakom Linux sistemu.

Uglavnom je najveći problem skontati šta treba uraditi, a ne napisati sam kod. Iako nisam mnogo vešt u pythonu, ni jedan kod mi nije prešao 10ak linija, a uglavnom je moguće i u mnogo manje linija rešiti problem. Pitanja su različita… Od najjednostavnijeg podizanja broja 2 na 38-i stepen (to je nulti nivo) do dekodovanja teksta na različite načine i različitih vrsta obrade slika. Verovatno su zadaci još raznovrsniji na kasnijim nivoima, ali ja sam tek stigao do 12-og.

Malo upozorenje… Jako je zarazno. Meni se desilo da nisam ni primetio kad je pre prošlo 12 sati od kad sam počeo da rešavam zadatke. Samo sam u jednom trenutku pogledao kroz prozor i video dan. Jedini cilj mi je bio da vidim šta se to traži u sledećem nivou. Tako sam u jednom navratu došao do 9. nivoa i u sledeća dva dana sam prešao još 3, tako da sam sad već par dana zaglavljen na 12. Mada u zadnje vreme nisam mnogo ni igrao zbog obaveza (i prvo veče sam imao obaveza, ali sam zaboravio na njih ). Verovatno ću preko leta odvojiti vremena da vidim šta se to dalje kuva…

Dobro sam se setio… PythonChallenge.

Novine, časopisi ili PR agencije

јул 3, 2007

Ćaskajući (uz posao naravno) sa Markom preko Skype dotakli smo se teme/ideje koja “vraća se, uvek, k’o bumerang“. Možete li da zamislite bilo koje dnevne novine koje će recimo da naprave analizu u kojoj se banci recimo najviše čeka u redu, i da onda sa punim integritetom te podatke i objave i to onakvi kakvi jesu.

Ima li koja petlju (petlja, koji je to deo tela)? Pa da ostanu bez glavnih oglašivača… Ali zar vam ta informacija ne bi bila korisna kada birate banku?

Ono što me zaista nervira je ta PR demagogija kojom smo na sličan način bombardovani. Čeznem za novinama (mediju) koje bi bile advokat korisnika, “moja lična obaveštajna služba” - kako je svojevremeno bio slogan novosadskog Radija021. Zašto da plaćam da bi čitao tuđu reklamu? Kažem čitao, zato što se uglavnom čitanje plaća, gledanje i slušanje je za džabe.

Posebna priča su domaći IT časopisi. Ali nakon kritikovanja njihovog PI-AR-izma osćao bih se kao da kritikujem onih možda 5 ljudi koji se u Srbiji bave skijaškim skokovima i koji ne postižu međunarodne rezultate, ali su ipak prvi kod nas - jer nema drugih.

E sad… šta se to babi (dedi) snilo…

Zamišljam domaći IT časopis, koji košta 1000-2000-3000 dinara. Nema reklama, samo članci koje su novinari-saradnici pisali intenzivno barem dve-tri nedelje i za to bili nagrađeni cifrom koja je značajno veća od one koje zarađuju ako za to vreme rade svoj regularan posao. Ako u tom časopisu ima 10-20 takvih članaka iza kojih postoji takav rad i integritet te odsustvo PI-AR-izma… I da me barem jedan od njih “pogodi” u svakodnevnu poslovnu potrebu… meni se tih 1000-2000-3000 isplatilo.

Slažete li se? Je li ovo izvodljivo?

Negde sam čitao (platio sam)… kakva je struktura prihoda stranih fudbalskih timova (karikiraću):

50% ulaznice 20% trgovina (dresovi, džidža bidže…) 20% transferi 10% TV prava

A u našem regionu:

60% transferi 20% država 15% najam okolnih gradskih lokala 5% ulaznice

Slično je i sa časopisima… njima je prihod od oglašivača (karikiram) 90%, a od prodaje 10%…

Šta bi sa “poštovani čitaoče”?

Tipografija na webu - vertikalni ritam

јун 21, 2007

Ogorčen količinom loše dizajniranih sajtova koje u zadnje vreme viđam na zoni i DPT-u reših da makar malo pokušam da doprinesem edukaciji.

Danas ću pokušati da objasnim sta je to “Vertikalni ritam” (moj slobodni prevod)

sve to naravno ima objasnjeno na netu, posebno lepo na ovoj stranici a boga mi i ovde, ali sto bi to neko čitao, kad može lepo da zakači svoj sajt na forum i još da se ljuti kad mu neko kaže da to njegovo ne vaja i da nije u pravu.

elem, ovde sam stavio primer sa dobro i leše podešenim marginama, po meni razlika je više nego očigledna, evo i slike za one koji i dalje ne kapiraju u čemu je štos

Znači nije poenta da vertikalni razmak između svih elemenata bude isti ili potpuno odokativan (kao u lošem primeru), već treba za mernu jedinicu uzeti visinu jedne linije običnog teksta i onda srazmerno tome podesiti sve elemente na stranici.

naravno, može neko da izabere da koristi 4x i 3x ili 2x i 4x razmake, sve zavisi do stranice, nije ni svaka situacija ista, no važno je da postoji neka pravilnost i da se ne krši vertikalni ritam stranice.

DEMO CSS Fajl

CSS rollover meni

април 11, 2007
CSS Menu - mali, brz, lak za uptrebu, dobar za SEO

Ovo je moja omiljena tehnika pravljenja CSS menija. I principu to je kombinacija par CSS tehnika (image replacement, css list menus..). Pokazalo se kao sasvim ok tehnika, apsolutno isto se prikazuje u FF, IE i Operi i ima sasvim normalan HTML ispod haube, tako da ce Google i ostali pretrazivaci sasvim korektno indeksirati vas sadrzaj - a to je valjda najvaznije.

Primer

Uputstvo za upotrebu 1) Napraviti pozadinsku sliku

Paznja ovo je jedna slika, a ne dve. Ako je vas meni 400px sa 50px (kao u ovom primeru) pozadinska slika treba da bude 400px by 100px. Gornja polovina je za normalno stanje, a donja za rollover.

2) HTML kod <div id=“main-nav”> <ul> <li><a href=“#” class=“home”><span>Home</span></a></li> <li><a href=“#” class=“about”><span>About us</span></a></li> <li><a href=“#” class=“faq”><span>F.A.Q.</span></a></li> <li><a href=“#” class=“contact”><span>Contact</span></a></li> </ul> </div> 3) Ubaciti CSS

Sve sto ostaje je ubaciti tovaj CSS, i to je to - uzivajte u vasem CSS meniju.

MGraph - Nova verzija

април 11, 2007
MGraph - Ajax grafik, updateovan na v0.95

Posle par dana evo i update-a za MGraph. Sada je izgleda malo sredjen a i dodao sam prostor gde korisnik moze da doda neki note (videti primer). Dobra stvar je sto se tako moze ubaciti i html, tako da se moze staviti neka mala slika, ili link.

Promene u ovoj verziji

 

Dodavanje teksta i naslova teksta (note) Transparencije Izmenjen izgled

Dobio sam dosta pozitivnih reakcija putem mail-a. Trudicu se da nastavim da razvijam MGraph i ostale grafike, ocekujem nove verzije u toku narednih mesec - dva, u zavisnosti od mog slobodnog vremena.

Demo Download (zip, 14KB) Stara verzija

Brzo serviranje gomile CSS i JS fajlova

април 10, 2007

Upravo sam naleteo na odličnu tehniku za brzo serviranje statičnog sadržaja, pre svega CSS i JS fajlova. Ako seckate CSS i JS na više fajlova kako biste raspodelili stvari u logične celine onda se vrlo lako možete suočavate sa problemima koje uzrokuje prevelik broj HTTP zahteva.

Tehnika opisana u Faster Page Loads—Bundle Your CSS and Javascript članku na SitePointu omogućava da se više fajlova istog tipa iz istog foldera spoje na server strani i budu usluženi kroz jedan HTTP zahtev, samim tim dovodeći do značajno bržeg učitavanja stranice.

Aptana - Drugi put

март 31, 2007

Pre par meseci (skoro godinu dana kad bolje razmislim) prvu put sam čuo za Aptanu. U pitanju je kako ga autori nazivaju “The Web IDE”, ili ti u prevodu najbolje razvojno okruženje za web aplikacije. Tada kada sam pogledao, to i nije bio neki prizor, malo unapređeniji editor sa ponekom lepom opcijom. Tada sam mnogo više vremena provodio radeći PHP, tako da mi je ZDE bio editor za sve (PHP,CSS,XHTML,SQL,JS….).

Medjutim kako sve više vremena provodim u raznim JS-Ajax projektima počeo sam da uvidjam da Zend ipak nije prava stvar, za pocetak sto se tiče Javascripta on jednostavno boji sintaksu, i to je to… Počeo sam da tražim nešto što je u principu zend za Javascript…

Posle par dana opet sam nabasao na Aptanu, skinem instaliram… i odmah se osetim ko kod kuće. Šta je to što mi se svidelo: - dobar i brz code proposal. - dobar i brz word competition. - autocomplete. - odlicno dokumentovan CSS (sa sve podrskom za browsere) - JS debbuger + FF extenzija (sa ovim tek trebam da se poigram) - pametan scope resolution kod code proposal za javascript. - bojenje sintakse za PHP (za Ajax stvarčice više nije ni potrebno, za komplikovanije stvari zend je i dalje ne zamenljiv).

Ako niste u skorije vreme/nikad probali Aptanu, možda bi ste mogli da joj date drugu šansu.