Katama do znanja – mojih prvih 12 unit testova [en]

Već duže vreme sam imao želju da svoje programerske veštine ojačam sa znanjem pisanja unit testova i da TDD (Test driven development) primenim u praksi. Čitao sam dokumentaciju, napisao neke probne testove ali nisam išao dalje od toga. Nažalost firme kod nas nisu spremne da potroše više novca i vremena na TDD jer po mom mišljenju nema ni sluha ni znanja o ovoj programerskoj tehnici.

Katama do znanja

Kata do znanja – slika preuzeta sa travel67.wordpress.com

Juhn Cleary je objavio blog post u kojem najavljuje da će 12 dana objavljivati i raditi po jednu TDD katu i poziva programere da mu se pridruže. Bio sam oduševljen idejom jer sam znao da je to idelan način ulaska u novu tehnologiju. Jer kako kaže John nećete se probuditi jednog dana i reći sebi “Od danas ću početi da primenjujem TDD u razvoju aplikacija”. Prihvatio sam ovaj izazov kao i mnogi drugi programeri širom sveta.

Tviter je bio mesto na kojem sam pratio sva dešavanja u vezi ovog izazova. Svi smo se okupljali oko hashtaga #12tdds gde su programeri razmenjivali mišljenja i svoja rešenja zadataka/kata.

Inspiracija ovog izazova jeste syber-dojo, online alat koji vam omogućava da radite postavljene zadatake u nekom od popularnih programskih jezika koristeći TDD. Alat se može koristi sa bilo kog mesta: posla, kuće ili kafića. Za pokretanje ovog alata nije potrebno da podešavate razvojno okruženje na svom računaru.

Učenje katama je sjajan način koji će vas motivisati da učite korak po korak, tempom koji vama odgovara. Kata vam neće oduzeti previše vremena. Svaka uspešno završena kata doneće vam parče znanja i bićete bliži svom cilju.

Osećaj kada posle refaktoringa (izmene koda) pustim testove koji mi daju signal da je kod ostao funkcionalan, jeste potvrda da je TDD tehnika koja može da obezbedi stabilnost aplikacije. Kada pogledam iza sebe vidim da mi je ovaj izazov pružio mogućnost da bolje vidim prednosti razvoja vođenog testovima i da ga sprovedem na praktičnim primerima.

Kada sam završio svih 12 kata preko twitera sam zamolio John-a da pogleda moje testove i kod kako bih bio siguran da sam testirao prave stvari na pravi način. Iznenadio sam se kada sam dobio opširan odgovor u kojem mi John daje savete za poboljšanje koda i bolje imenovanje test metoda, ali i pohvale za određene kate i rešenja. Zahvalan sam John-u na vrednim savetima koji će mi pomoći da moj kod bude još bolji.

Moje kate sa rešenjima i testovima su dostupne na gihubu – https://github.com/Djuki/tdd12

Travis je platforma koja se lako integriše sa github servisom, a na svaki vaš push koda Travis će pustiti automatizovane testove u okruženju koje ste vi definisali. U slućaju da testovi ne prođu travis će vas obavestiti o tome. Ovo može biti veoma korisno za timove sa više programera. Moji prvi unit testovi su postavljeni i na travis, gde možete videti kako izgledaju testovi kada se pokrenu.

Osim boljeg razumevanja unit testova ovaj izazov mi je doneo i ponudu za posao u Londonu. Ovo je samo dokaz da se svaki trud i svaki korak ka znanju uvek isplati, kao i da entuzijazam ne može ostati neprimećen. Continue reading

Nije programer svako ko kodira [en]

Svi znaju da ako se bavite informacionim tehnologijama morate stalno da učite kako vas vreme i nove tehnologije ne bi “pregazile”. Lako možete pretpostaviti da su programeri ljudi koji stalno uče i rade na sebi i svom profesionalnom usavršavanju. Ne, to zapravo nije tako kao što se čini na prvi pogled. Mali je broj onih koji napreduju i uče dovoljno brzo da bi mogli da kažu za sebe da jesu programeri.

Šljaker ili Programer

Slika preuzeta sa http://codesoftly.com/2010/03/ha-code-entropy-explained.html

Programeri koji rade u firmama, pritisnuti rokovima, i konstantnim nedostatkom vremena zapravo nazaduju, jer tehologija nema vremena njih da čeka. Njima je zapravo dobro, oni su zadovoljni svojim znanjem, oni uspešno ispunjavaju zahteve koji se postavljaju ispred njih, klijenti će dobiti željenu funkcionalnost, a da li je to dovojno ?

Situacija u praksi sa kojom sam se ja susreo je zapravo takva da firme ne ulažu u znanje svojih programera, a programeri ne mogu da vide koliko je zapravo njihovo neznanje, i koliko je veliki spektar znanja koje čeka na njih.

Ono što nedostaje programerima jesu predavanja, posećivanje konferencija, međusobna razmena znanja. Konferencije i predavanja ljudima će dati usmerenje, ideje i osnovne informacije. Najvažnije od svega “otvoriće im oči” i nove horizonte. Benefit za firmu premašuje uložen novac, kvalitetni ljudi gladni znanja su neprocenjiv resurs.

Razmena znanja među članovima tima je odličan početak i dobar put do boljeg tima i kvalitetnijeg koda. Važno je razumeti da dobar kod znači brži razvoj, lakše reagovanje na promene i u krajnjem ishodu bolji proizvod za klijenta.

Mrzim svoj kod !

Pogledajte prethodni projekat koji ste radili, pogledajte kod koji ste pisali pre godinu dana. Da li vam se dopada kod koji ste vi pisali ?

Ako vam kod koji ste pisali pre godinu dana deluje dovoljno dobar, možda i savršen, onda ne samo niste napredovali, vi ste zapravo nazadovali. Svaki kod je prepun nedostataka i u svakom kodu ima mesta za refaktoring. Dobar programer prosto mrzi kod koji je pisao prošle nedelje, jer kod je loš niste vi loši, ne shvatajte vaš kod suviše lično.

Continue reading

My dev goals for 2012 [en]

newyeargoals

newyeargoals

Inspirisan člankom 11 Things every Software Developer should be doing in 2012. koji je podelio moj prijatelj Goran, odlučio sam da zapišem i podelim sa vama svoju listu ciljeva za 2012 godinu.

Osvrnuću se na prethodni period, od godinu ili čak dve koliko sam bio manje aktivan na blogu, ali svakako aktivan kao web programer. Predhodni period je bio veoma uspešan za mene, i sada kada se na trenutak osvrnem iza sebe ne mogu da ne budem zadovoljan svojim radom, projektima na kojima sam radio, alatima i tehnologijama koje sam savladao. Ali još važnije je da sam uživao u tom ponekad previše napornom i stresnom procesu učenja.

Uvođenje Codeigniter frejmvorka i razvoj custom CMS-a je obeležilo početak putovanja. Istraživanje Kohana i Yii frejmvorka, su bili samo put do jednog od najuticajnijih fremvorka u PHP zajednici – Zend fremvork-a.

Važnije od alata koje sam koristio jeste primena SOLID principa u svakodnevnom radu, kao i primena dizajn paterna i stalno unapređenje objektno orijentisanog dizajna (OOD).

Razvoj platforme za testiranje studenata u ZF je obeležilo kraj prošle godine, ali i promenu poslovnog okruženja. Napustio sam LINK group, i započeo novo poglavlje u svojoj karijeri.

Vreme je da pređemo na listu ciljeva za 2012 godinu. Continue reading

Ajax kolekcija – MiniAjax [en]

MiniAjaxAjax tehnologija osvaja internet, pa je sve više sajtova koji koriste ovu naprednu tehnologiju. Miniajax je kolekcija ajax odličnih ajax skripti i tutorijala. U ovoj kolekciji možete naći Ajax StarRating, Bubble Tool-tips, Heatmap-u za web stranice, Ajax skriptu za on-line glasanje, Progress bar za upload fajlova. U listi su i kvalitetne aplikacije kao sto su ActiveCollab – planer za projekte, Relay – file manager i druge.

MiniAjax – Najbolje ajax skripte.

Izjednačavanje visine dva diva sa JavaScript-om [en]

Često mi se dešavalo da tragam za rešenjem kako da dva diva koja su pritom nezavisna (nisu u odnosu otac – dete) jedan od drugog uvek imaju istu visinu. Div može imati ili fiksnu ili automatsku, ako je automatska ona se menja u zavisnosti od sadržaja ili inline elemenata koji se nalaze u njemu. Ono što generalno predstavlja problem jeste što jedan div ne može da zna kolika je visina drugog diva.

Jedini slučaj kad jedan div “zna” visinu drugog je kada su u odnosu “otac-dete” i pritom “dete” div nasledi visinu od “oca”. Pošto to nije slučaj u primeru o kojem govorimo, moramo se poslužiti css hackovima ili JavaScriptom. U css-u ne postoji elegantno rešenje ili rešenje koje radi u svim browserima, i još se pri tome moraju koristiti css hakovi sa kojim css kod neće biti validan. Ovoga puta prednost dajem JavaScript-u.

Najčešći slučaj kada ćete želeti da divovima izjednačite visinu jeste kada sidebar tj. leva ili desna kolona treba da “prati” glavni div u kojem je sadržaj.

Evo JavaScripte koju sam napisao a može vam pomoći u prevazilaženju ovog problema.

  1.  
  2. /*
  3.   ————————————————
  4.   Izjednaciti dva diva (html elementa) 1.1.0
  5.   Copyright (c) 2005 Djurdjevac Ivan
  6.   http://www.rednetcat.com
  7.   e-mail: djurdjevac@gmail.com
  8.   Version: 1.1.0
  9.   ————————————————
  10. */
  11.  
  12.  
  13. function getElementHeight(Elem) {
  14.                 if(document.getElementById) {
  15.                         var elem = document.getElementById(Elem);
  16.                 } else if (document.all){
  17.                         var elem = document.all[Elem];
  18.                 }
  19.                 xPos = elem.offsetHeight;
  20.                 return xPos;
  21. }
  22.  
  23.  
  24. function setElementHeight(id, elementHeight) {
  25.         var vid = document.getElementById(id);
  26.         vid.style.height = elementHeight + ‘px’;
  27. }
  28.  
  29. function IzjednaciElemente(imediva1, imediva2) {
  30.         var v1 = getElementHeight(imediva1);
  31.         var v2 = getElementHeight(imediva2);
  32.         var nv;
  33.         if (v1>=v2) nv=v1;
  34.         if (v1<v2)  nv=v2;
  35.         setElementHeight(imediva2, nv);
  36.         setElementHeight(imediva1, nv);
  37. }
  38.  

Samo ne zaboravite da funkciju IzjednaciElemente(imediva1, imediva2) pozovete prilikom kreiranja HTML stranice.

  1.  
  2. <!– pre bodi-ja –>
  3. <body onload="IzjednaciElemente(‘imediva1’, ‘imediva2’)">
  4. <!– posle bodija –>
  5.  

JavaScript meni na “razvlačenje” [en]

Na mnogim sajtovima ste videli meni koji ima mogućnost da širi i skuplja svoje podkategorije. Sa nekoliko linija JavaScript-a i meni na vašem sajtu ili blogu može da dobije ovu funkcionalnost. Svaki pod-meni u vašem meiju će moći da se skuplja i širi, tj da se vidi ili da ne bude vidljiv, što daje utisak da se vaš meni može “razvlačiti”.

Primer menija u HTML jeziku:

  1.  
  2. <ul>
  3.     <li>Muzika
  4.        <ul>
  5.          <li>Pop</li>
  6.          <li>Rok</li>
  7.          <li>Dance</li>
  8.          <li>Hip-Hop</li>
  9.        </ul>
  10.     </li>
  11.     <li>Sport
  12.        <ul>
  13.          <li>Basket</li>
  14.          <li>Atletika</li>
  15.          <li>Vaterpolo</li>
  16.          <li>Tenis</li>
  17.        </ul>      
  18.     </li>
  19.     <li>Ostalo</li>
  20. </ul>
  21.  

Klasičan meni izgleda ovako:

  • Muzika
    • Pop
    • Rok
    • Dance
    • Hip-Hop
  • Sport
    • Basket
    • Atletika
    • Vaterpolo
    • Tenis
  • Ostalo

Javascript funkcija koja će praktično da menja stil liste, tako da kada je stil display==”none” podkategorije te liste neće biti vidljivi, a kada je stil display=”block” podkategorije će se prikazati.

  1.  
  2. <script type="text/javascript">
  3.   function razvuci(list){
  4.     var listElementStyle=document.getElementById(list).style;
  5.     if (listElementStyle.display=="none"){
  6.       listElementStyle.display="block";
  7.     else {
  8.       listElementStyle.display="none";
  9.     }
  10.   }
  11. </script>
  12.  

Continue reading

Tehnike vizuelnog prigramiranja c# [en]

Besplatan download
Ako želite da savladate vizuelno programiranje na platformi .NET knjiga “Tehnike vizuelnog prigramiranja c#”, može biti odličan uvodnik u svet .Net-a. Autori knjige su Zoran Æorovoć i Ivan Dunđerski, profesori na Višoj Elektrotehničkoj Školi.

Knjigu možete potpuno besplatno skinuti na mojoj download stranici. Ova elektronska verzija ima samo šest poglavlja od sedamnaest (17) iz kompletne pisane verzije.

Ovo je odličan način da vidite da li vam odgovara stil pisanja ove knjige, a ujedno može biti korisno za početnike koji se mogu upoznati sa C# jezikom.

SQL Dizajner za lakše dizajniranje baza podataka [en]

SQL DesignerZamislite da možeze da dizajnirate baze podataka, a da ne morate da skidate nikakav softver, već da vam je za to dovoljan samo internet browser. Već nagađate da je u pitanju AJAX aplikacija koja vam omogućava on-line dizajniranje baza podataka.

Aplikacija vam omogućava da kreirate tabele i atribute kroz web interfejs, što je mnogo lakše i zabavnije od klasičnog kreiranja tabela. Primarni i sekundarni ključevi se povezuju jednostavnim prevlačenjem mišem(drag & drop).

Tabele se mogu isvesti u XML, MS SQL and SQL Server formate. Isto tako možete da uvezete tabele iz neke već postojeće baze podataka.

Isprobajte SQL Dizajner koji se nalazi na mom serveru, a možete ga skinuti sa oficijelnog sajta. Autor ove odlične web aplikacije je Ondøej Žára.

Želite da vaš blog prikazuje vremenske uslove i temperaturu? [en]

Želite da vaš blog prikazuje trenutne vremenske uslove i temperaturu u vašem gradu, i da to izgleda veoma fensi? Collin Grady je napisao php skriptu koja vuče informacije sa weather.com sajta. Ona koristi GD Freetype pakete, a ako imate Apache i mod_rewrite može da prevari URL slike, tako da izgleda kao da imate statičku sliku. Ovo je odlična skripta koja će ulepšati vaš blog.

Skriptu možete da skinete na Collin-ovom blogu.

Ovako će izgledati slika koju generiše Coolinova skripta.
weather

Napredna PHP Klasa za Grafikone [en]

Na Internetu sam pronašao ovu fantastičnu PHP klasu za iscrtavanje grafikona, dijagrama i šema. Ono što je impozantno jeste da sa nekoliko linija php koda možete dobiti kvalitetan grafikon kao i u Exelu. Grafikoni mogu biti 2D ili 3D, mogu crtati isprekidane linije, strelice ili krugove. Imate mogućnost da postavite naslov grafikona kao i horozantalne ili vertikalne ose. Svaka vrednost grafikona može biti obojena posebnom bojom ili prelazom boje iz jedne u grugu. Sve što može Microsoft-ov Exel može i ova php klasa.

Ova klasa kao svoj izlaz daje png sliku. Da pogledamo neki primer korišćenja php klase graph.

Primer 1.

Graph

[code lang=”php”]
< ?php $graph = new graph(); $graph->setProp(“showkey”,true);
$graph->setProp(“type”,”pie”);
$graph->setProp(“showgrid”,false);
$graph->setProp(“key”,array(‘alpha’,’beta’,’gamma’,’delta’,’pi’));
$graph->setProp(“keywidspc”,-50);
$graph->setProp(“benchmark”,true);
$graph->setProp(“keyinfo”,2);
$graph->demoData(5,1,10);
$graph->graph();
$graph->showGraph(‘images/exa19.png’);
?>
[/code]
Continue reading