Tutorial: Validacija Web forme pomocu JavaScript-a – Part 1

3. mart 2010.

Okej, tema za mart mesec na blogu je JavaScript. Dosta sam se bacio na taj scripting jezik u poslednjih 20-ak dana, te sam rešio da svoju preokupaciju podelim sa svima. Našao sam jednu sjajno napisanu skriptu u knjizi „JavaScript and Ajax for the Web“ (strana 167) čiji su autori Tom Negrino i Dori Smith, pa ću ovde, na srpskom, objasniti šta ona ustvari radi, tako da će svima koji ne znaju JavaScript ovo dobro doći da neke stvari shvate. Ukoliko dobro poznajete ovu materiju, preporučujem da ipak pogledate o čemu se radi s obzirom da vam ovo može poslužiti kao dobar framework za dalji rad, ili čak kao gotovo rešenje spremno za implementaciju.

S obzirom da su Web 2.0 aplikacije uveliko standard, samim tim je i veća interakcija između korisnika i i web sajta. Forme su klasičan primer za prethodno rečeno. Ono o čemu ću ja danas pisati je verifikacija forme, odnosno, pokazaću kako možete proveriti da li je korisnik popunio sva polja iz forme i da li je to učinio pravilno. Postoje dva načina na koje možemo uraditi ovo:

1) da prosledimo unete podatke do web servera, tu ih obradimo, proverimo i nakon toga, ukoliko postoji greška, obavestimo korisnika. To možemo uraditi u nekom server-side jeziku (na primer, PHP).

2) da proveru uradimo direktno u korisničkom brauzeru, bez ikakvog kontakta sa web server-om koristeći JavaScript. Uslov je, naravno, da korisnik ima uključen JavaScript u svom brauzeru, što 99% korisnika ima.

Drugi način je daleko bolji jer se sve dešava na korisničkoj mašini, pa je samim tim i brži – vreme se ne gubi u slanju podataka do servera i čekanju da se isti obrade. Iz ovoga sledi i to da je naš server oslobođen od tog posla, pa će brže reagovati na zahteve nekih drugih korisnika.

Gotovo rešenje pogledajte odmah, a onda ću komentarisati deo po deo.

HTML - ništa specijalno, ne bih zalazio u analizu jer je akcenat pre svega u JavaScript kodu.


<html>
<head>
 <title>Car Picker</title>
 <script type="text/javascript" src="script.js"></script>
 <link rel="stylesheet" href="script.css" />
</head>
<body>
<h2 align="center">Car Picker</h2>
<form action="#">
 <p>
 <label for="emailAddr">Enter your email address:&nbsp;&nbsp;&nbsp;&nbsp; <input id="emailAddr" type="text" size="30" />
 </label></br />
 <label for="emailAddr2">Re-enter your email address:<input id="emailAddr2" type="text" size="30" />
 </label>
 </p>
 <p><label for="color">Colors:
 <select id="color">
 <option value="" selected="selected">Choose a color</option>
 <option value="Red">Red</option>
 <option value="Green">Green</option>
 <option value="Blue">Blue</option>
 </select>
 </label></p>
 <p>Options:
 <label for="sunroof"><input type="checkbox" id="sunroof" value="Yes" />Sunroof (Two door only)</label>
 <label for="pWindows"><input type="checkbox" id="pWindows" value="Yes" />Power Windows</label>
 </p>
 <p><label for="DoorCt">Doors:&nbsp;&nbsp;
 <input type="radio" id="twoDoor" name="DoorCt" value="twoDoor" />Two
 <input type="radio" id="fourDoor" name="DoorCt" value="fourDoor" />Four
 </label></p>
 <p><input type="submit" value="Submit" />&nbsp;<input type="reset" /></p>
</form>
</body>
</html>

JavaScript

window.onload = initForms;

function initForms() {
 for (var i=0; i< document.forms.length; i++) {
 document.forms[i].onsubmit = function() {return validForm();}
 }
}
function validForm() {
 var allGood = true;
 var allTags = document.getElementsByTagName("*");

 for (var i=0; i<allTags.length; i++) {
 if (!validTag(allTags[i])) {
 allGood = false;
 }
 }
 return allGood;

 function validTag(thisTag) {
 var outClass = "";
 var allClasses = thisTag.className.split(" ");

 for (var j=0; j<allClasses.length; j++) {
 outClass += validBasedOnClass(allClasses[j]) + " ";
 }

 thisTag.className = outClass;

 function validBasedOnClass(thisClass) {
 var classBack = "";

 switch(thisClass) {
 case "":
 case "invalid":
 break;
 case "reqd":
 if (allGood && thisTag.value == "") {
 classBack = "invalid ";
 }
 classBack += thisClass;
 break;
 default:
 classBack += thisClass;
 }
 return classBack;
 }
 }
}

KORAK 1: Analiza intForm() funkcije.

function initForms() {
 for (var i=0; i< document.forms.length; i++) {
 document.forms[i].onsubmit = function() {return validForm();}
 }
}

Proveravamo sve forme koje imamo na strani koristeci for loop. Uvodimo promenljivu i, i dok je ona manja od broja formi na strani (document.forms se odnosi na sve form objekte na strani, dok je ovo .length ustvari njihov ukupan broj), pozivamo funkciju koja nema deklarisano ime, već samo vraća vrednost funkcije validForm() ukoliko je korisnik kliknuo na form submit. Drugim rečima: Zamislite da je korisnik kliknuo na neku našu formu Tada JavaScript preko onsubmit handler-era poziva funkciju koja vraća vrednost funkcije validForm(). Funkcija validForm() može imati samo dve vrednosti: true ili false! U sledecem bloku koda videćemo šta zapravo validForm() radi.

KORAK 2: Analiza validForm() i validTag() funkcija.

function validForm() {
 var allGood = true;
 var allTags = document.getElementsByTagName("*");

 for (var i=0; i<allTags.length; i++) {
 if (!validTag(allTags[i])) {
 allGood = false;
 }
 }
 return allGood;

Unutar funkcije validForm() imamo promenljive allGood koja je po default-u true, i allTags kojoj dodeljujemo vrednost svih html elemenata na strani. Da smo napisali document.getElementsByTagName(„p“), onda bi se allTags promenljiva odnosila iskljucivo na paragrafe. Mogli smo da stavimo kao parametar bilo koji element. U ovom slučaju, nas interesuju svi elementi, pa nam je zato parametar („*“), jer * = all!

Opet, for loop-om prolazimo kroz sve elemente na stranici i ubacujemo ih kao parametar u funkciju validTag(). validTag() će biti objašnjena u sledećim pasusima – za sada nam je bitno da njena vrednost moze biti samo true ili false. Ukoliko je njena vrednost false, tj, ukoliko (!validTag(allTags[i])), onda ce i nasa promenljiva allGods biti false, pa ce i sama funkcija validForm() biti false jer ta funkcija vraća vrednost promenljive allGood (return allGood;).


function validTag(thisTag) {
 var outClass = "";
 var allClasses = thisTag.className.split(" ");

 for (var j=0; j<allClasses.length; j++) {
 outClass += validBasedOnClass(allClasses[j]) + " ";
 }

thisTag.className = outClass;

validTag() prima parametar allTags[i] iz prethodne funkcije validForm(). Vrednost tog parametra obeležavamo promenljivom thisTag. Da bih malo približio ovo onima koji ne shvataju ovo, pokušaću da kažem i ovako: Rekli smo da f-ja validForm() pretražuje sve elemente na strani. Zamislite da je došla do nekog p taga (dakle paragraf). Ona prosleđuje p tag do f-je validTag(), pa je u tom slučaju thisTag ustvari p. Onda ta funkcija dobije, na primer, tag a kao parametar. U tom slučaju, thisTag ce biti a. I tako dalje, sve do poslednjeg elementa na strani.

Prokomentarišimo sada šta se sve dešava unutar funkcije validTag(). Deklarišemo nove promenljive: outClass koja je po defaultu prazan string i drugu promenljivu – allClasses, koja iz taga koji je trenutno ubačen u funkciju (kao sto smo malopre rekli, to moze biti bilo koji tag) čita njegovu klasu, i ukoliko parametar ima više klasa, onda ih razdvaja (className.split(“ „);) i smesta u niz. Pokažimo to na praktičnom primeru:


<label for="emailAddr2">Re-enter your email address:<input id="emailAddr2" type="text" size="30" />

Vidite kako naša labela ima dve klase:  reqd i emailAddr. U tom slučaju će className.split(“ „); uraditi sledeće: Napraviće niz i smestiti oba stringa (tj, imena obe klase, koja su u našem primeru reqd i emailAddr) u taj niz. Zatim, novim for loop-om „pretresti taj niz“, uzeti svaki njegov clan i ubacivati kao parametar u našu novu funkciju validBasedOnClass(allClasses[j]). Ta funkcija će uraditi proveru da li je clan tog niza (odnosno klasa)  „invalid“. Više reči o tome će biti u narednim pasusima.

Za sada nam je bitno da će na kraju ovog našeg for loop-a vrednost promenljive outClass (za primer prethodne labele) biti „reqd emailAddr“.

KORAK 4: Provera da li imamo „invalid“ klasu:

if (outClass.indexOf("invalid") > -1) {
 thisTag.focus();
 if (thisTag.nodeName == "INPUT") {
 thisTag.select();
 }
 return false;
 }
 return true;

Proveravamo dalje da li ta klasa ( u slučaju sa našom labelom „reqd emailAddr“) u sebi sadrži reč „invalid„, tj, da li string invalid deo (indexOf) outClass-e. Ukoliko jeste, onda cemo taj html tag (labelu), staviti u fokus, kako bismo ispitali da li je nodeName ustvari input tag. Drugim rečima – ukoliko nađemo bar jednu klasu invalid, funkciji vracamo vrednost false, a samim tim ona nece biti procesirana do web servera, vec ce korisniku odmah vratiti adekvatnu gresku. Ukoliko string „invalid“ nije pronađen, onda je sve u redu (korisnik je pravilno popunio formu), f-ja će vratiti vrednost true, pa će podaci iz forme biti prosleđeni Web serveru.

KORAK 3: Analiza funkcije validBasedOnClass(thisClass)

function validBasedOnClass(thisClass) {
 var classBack = "";

 switch(thisClass) {
 case "":
 case "invalid":
 break;
 case "reqd":
 if (allGood && thisTag.value == "") {
 classBack = "invalid ";
 }
 classBack += thisClass;
 break;
 default:
 classBack += thisClass;
 }
 return classBack;
 }

Prokomentarišimo sada funkciju validBasedOnClass(thisClass). Deklarisali smo promenljivu classBack.
Primecujemo da paramatar koji dolazi u funkciju može imati različite vrednosti. On može biti prazan, može biti „invalid“, „reqd“, itd. Za takve situacije je najbolje koristiti switch, koji je nalik if-u. Postoje, dakle, više različitih slučajeva (case). Za slučaj da je parametar koji je dospeo u funkciju prazan string ili „invalid“, odmah izlazimo iz switch-a komandom break. Break bukvalno kaže switch-u: „okej, gotovi smo sa ispitivanjem, to je taj slučaj koji tražim, ne proveravaj ostale mogućnosti.“
Ono sto nas najviše interesuje je slučaj ukoliko je parametar=“reqd“. To znači da je polje sa tom klasom obavezno (korisnik mora da ga popuni ukoliko želi da mu forma bude prosledjena do servera). Ukoliko on ipak nije uneo nista u required polje, tj, vrednost tog polja je prazan string (thisTag.value == „“), vrednost naše promenljive classBack ćemo PROMENITI POMOĆU JAVASCRIPT-a na INVALID. Ovo je ključna tačka jer se odmah zatim desavaju sledece stvari:

  1. Funkcija validBasedOnClass(thisClass) će vratiti vrednost invalid
  2. Onda ta vrednost odlazi do 4. KORAKA, gde u proveri tražimo upravo tu reč. Ukoliko je nađemo, naša forma neće biti procesirana jer će funkcija validTag() vratiti false, samim tim će i promenljiva allGood (deklarisana u validForm()) biti false, a što dalje implicira da naša forma NIJE VALIDNA!

To bi bilo sve za ovaj prvi deo. Drugi deo ću objaviti početkom aprila. Ostalo je još dosta posla koji treba da se završi kako bi ova skripta zaista bila dobra i sasvim funkcionalna.

Tri pesme koje su obeležile februar 2010

23. februar 2010.

Lady GaGa – Bad Romance (Bimbo Jones Remix) [Radio Edit]

Junior Caldera – Can\’t Fight This Feeling

Rihanna – Rude boy

Godinu dana od nastanka bloga

14. februar 2010.

Pre tačno godinu dana, 14. februara 2009. godine instalirao sam WordPress i krenuo da blogujem. Kao što sam u svom prvom blog postu napisao, ni sam ne znam zašto sam krenuo sa blogovanjem. Razlog je, najverovatnije, bio taj sto ja zaista puno vremena provodim na Internetu, ali se nisam socijalizovao na nekoj od društvenih mreža koje su bile dostupne, pa sam jednostavno želeo da imam neki svoj online prostor gde bih mogao da objavim spot pesme koja mi se dopada, ili da zapišem neku dogodovštinu iz svog života itd.

Isto tako, često čitam poruke koje sam pisao ranije na mnogobrojnim forumima na kojima sam učlanjen jer mi je interesantno da upoređujem svoja ranija i sadašnja razmišljanja i na taj način proveravam da li sam se nesvesno promenio u shvatanjima nekih situacija. To je još jedan razlog zašto sam otvorio blog, koji zapravo predstavlja hronološki pregled zapisa pojedinca ili grupe.

Inače, prvobitna ideja je bila da akcenat stavim na objavljivanje događaja iz života, aktuelnih situacija u državi ili svetu (vezano, pre svega, za muziku, manifestacije, Internet) i na taj način analiziram i prikažem svet viđen mojim očima. Kako je vreme prolazilo, primetio sam da se orijentacija i sastav samog bloga sve više udaljavaju od prvobitne ideje – o muzici gotovo i da ne pišem, a tu i tamo se promuva neki zapis iz ličnog života. Sa druge strane, sve više me interesuju IT dešavanja, a pre svega Web Design i Development. Interesovanje za ove dve stvari otvorilo mi je neke nove mogućnosti. Tada sam bio angažovan u izradi par web site-ova: Teretana Shark, RK Zaječar, Ribolovac Zaječar, Dekoracije i na kraju Ana fitness. Postao sam i napredni korisnik WordPress CMS-a.

Iz tog razloga, voleo bih da u ovoj godini akcenat pisanja upravo stavim na Internet razvoj. Voleo bih da pišem o stvarima koje učim iz te oblasti, da postavljam tutoriale i svoje skripte. Nije isključeno da će ovaj blog možda postati isključivo IT blog. Vreme će pokazati najbolje.

Ono što će se sigurno desiti je da će ovaj blog dobiti svoje novo „odelo“. Osmislio sam template – svi detalji oko dizajna i funkcionalnosti su u glavi, samo je potrebno da to realizujem.

Neke blog statistike bazirane na podacima cPanel Awstats-a, Google Webmaster Tools-a i WassUp Wordpress plugin-a:

Broj jedinstvenih poseta na mesečnom nivou (prosek): 542.

Broj ukupnih poseta na mesečnom nivou (prosek): 1567.

Fraze koje su korisnici najčešće kucali u pretraživačima i tako dolazili do ovog bloga:

*Zahvaljujući blogu shvatio sam koliko srednjoškolci ne čitaju lektire , već traže prepričano na Internetu. Iz tog razloga, sledeći zapisi sa bloga su mu doneli neverovatnu posećenost:

  1. Pisani maturski iz srpskog jezika
  2. Prica o padu i uskrsnucu ljudske duše u romanu „Zlocin i kazna“
  3. Beketov prikaz položaja coveka u drami „Cekajuci Godoa“
sastav o lepoti 16 4.4 %
lepota sastav 12 3.3 %
slobodne teme iz srpskog jezika 9 2.5 %
sastav iz srpskog jezika 6 1.6 %
odnos coveka i sveta u beketovom godou 6 1.6 %
sastavi iz srpskog jezika 6 1.6 %
cekajuci godoa sastav 6 1.6 %
pisani sastavi iz srpskog jezika 5 1.4 %
lepota sastav iz srpskog 5 1.4 %
sastavi iz srpskog jezika slobodna tema 5 1.4 %
sastavi o lepoti 4 1.1 %
covek je kapija sa devet brava 3 0.8 %
sastav lepota 3 0.8 %
cekajuci godoa 3 0.8 %
pismeni sastavi o nepravdi 3 0.8 %
martin-gejlov sistem 3 0.8 %
cekajuci godoa likovi 3 0.8 %
dekoracija dvorista 3 0.8 %
kako je zajecar dobio ime 3 0.8 %
odnos coveka u svetu u beketovom godou 3 0.8 %
sastav cekajuci godoa 3 0.8 %
unutrasnja lepota coveka 3 0.8 %
sastavi iz srpskog o lepoti 2 0.5 %
sastavi iz srpskog lepota 2 0.5 %
sifra iz phpadmin 2 0.5 %
teme iz srpskog jezika lepota 2 0.5 %
konkurs za posao 2 0.5 %
o likovima u delu cekajuci godoa 2 0.5 %
sastav iz srpskog jezika o zivotu 2 0.5 %
duhovna i fizicka lepota sastav 2 0.5 %
sastavi iz srpskog jezika o lepoti 2 0.5 %
dekoracije kuca 2 0.5 %
pisane teme iz srpskog jezika 2 0.5 %
sta ne pripada nizu zadaci 2 0.5 %
najbolji sastavi iz srpskog jezika secam se 2 0.5 %
covjek je kapija sa devet brava 2 0.5 %
sastavi iz srpskog jezika covjek 2 0.5 %
drama cekajuci godoa -simbol drveta 2 0.5 %
odnos pocoa i like u cekajuci godoa 2 0.5 %
polozaj coveka u svetu 2 0.5 %
trigonometrijski krug 2 0.5 %
slobodni sastavi iz srpskog jezika 2 0.5 %
pismeni sastavi o coveku 2 0.5 %
sastav iz srpskog jezika o sreci 2 0.5 %
grad zaječar 2 0.5 %
fg radio 2 0.5 %
unutrasnja lepota sastavi 2 0.5 %
sastavi iz srpskog jezika-mladost 2 0.5 %
potkorena velicina jednacina 1 0.2 %
sastav iz srpskog jezika mladost 1 0.2 %
sasatav o lepoti 1 0.2 %
dekoracija kapija cveĆe 1 0.2 %
sastavi spoljasnjoj i unutrasnjoj lepoti coveka 1 0.2 %
lepota-sastavi 1 0.2 %
sastav na temu apsurda – Čekajući godoa 1 0.2 %
samo jedan bip po paljenju 1 0.2 %
sastavi iz srpskog slobodne teme 1 0.2 %
http //www.sastavi iz srpskog jezika.com 1 0.2 %
milan stojanov 1 0.2 %
sastav iz srpskog covek 1 0.2 %
kako da napisem uvod za sastav mladost? 1 0.2 %
maturski srpski jezik 2009 1 0.2 %
sastav na temu lepota 1 0.2 %
sastav unutrasnja i spoljasnja lepota 1 0.2 %
kontrolni iz filozofije 1 0.2 %
sastav iz srpskog jezika o iskrenosti 1 0.2 %
kljucevi za nacionalnu geografiju 1 0.2 %
dekoracija sala zajecar 1 0.2 %
widgets sidebar video 1 0.2 %
sastav na temu osobine koje cenim kod drugih 1 0.2 %
vietove formule 1 0.2 %
dekoracije 1 0.2 %
mojih pet minuta sastav iz srpskog jezika 1 0.2 %
sastav iz srpskog jezika o lepoti 1 0.2 %
pisanje sastava-slobodne teme 1 0.2 %
sastavi na temu unutrasnja lepota 1 0.2 %
ko je napravio facebook 1 0.2 %
sastavi iz srpskog jezika o zivotu 1 0.2 %
pismeni sastavi na temu negativne osobine 1 0.2 %
male stvari cine coveka-sastav 1 0.2 %
sastav sta je lepota 1 0.2 %
slika coveka i sveta u drami cekajuci godoa sastav 1 0.2 %
sastavi iz srpskog jezika na temu lepote 1 0.2 %
iz kompjutera se cuje brujanje 1 0.2 %
iskreno o sebi sastav iz srpskog jezika 1 0.2 %
sastav iz srpskog jezika slobodna tema 1 0.2 %
sastav na temu osobine koje najvise cenim kod sebe i kod drugih 1 0.2 %
sastav unutrašnja i spoljašnja lepota 1 0.2 %
sastav iz srpskog o coveku 1 0.2 %
sastavi iz srpskog jezika-ljepota 1 0.2 %
pisani sastav moje skrivene misli 1 0.2 %
kako snimiti pesme sa kompjutera 1 0.2 %
uvod u sastav 1 0.2 %
sastav rad i lepota 1 0.2 %
teme za maturski rad iz srpskog jezika 1 0.2 %
srpski jezik-unutrasnja ljepota coveka 1 0.2 %
dekoracija slike 1 0.2 %
sastavi za srpski jezik 1 0.2 %
to sam ja sastav iz srpskog 1 0.2 %
sastavi iz srpskog teme za matursko 1 0.2 %
odnos coveka i sveta u drami cekajuci godoa 1 0.2 %
dodatak winampu za snimanje radia 1 0.2 %
dodavanje korisnika za mysql 1 0.2 %
slika sveta i coveka u drami cekajuci godoa 1 0.2 %
čekajući godoa 1 0.2 %
kako snimiti online radio 1 0.2 %
cekajuci godoa o likovima 1 0.2 %
stojanov pesma 1 0.2 %
cekajuci godoa rezime 1 0.2 %
marija rodendan 1 0.2 %
da imam carobnu moc-sastav za skolu 1 0.2 %
kako srediti profil na fb? 1 0.2 %
www.skystar.rs.ba 1 0.2 %
sastavi iz srpskog jezika o temi iz gradiva 1 0.2 %
kako snimiti muziku sa winamp 1 0.2 %
sastav na temu iskreno o sebi 1 0.2 %
kako videti temperaturu compjutera 1 0.2 %
osobine ljudi 1 0.2 %
ivan martac 1 0.2 %
lepi sastavi iz srpskog jezika 1 0.2 %
sta coveka cini srecnim-sastav 1 0.2 %
lepota slobodna tema sastav 1 0.2 %
misao o coveku sastav. 1 0.2 %
odnos pocoa i like 1 0.2 %
sastav na temu apsolutna lepota 1 0.2 %
racunar upali ali sve crno 1 0.2 %
verat net cpanel 1 0.2 %
oktobar sastav iz srpskog jezika 1 0.2 %
radio muzika nemac winamp 1 0.2 %
teme iz srpskog jezika za lepotu 1 0.2 %
maturski iz srpskog 1 0.2 %
pisem o lepoti 1 0.2 %
tema iz srpskog-lepota je dar 1 0.2 %
pisana tema za srpski jezik mladosti moja tako si lepa 1 0.2 %
чекајући годоа 1 0.2 %
o delu cekanje godoa 1 0.2 %
lepota-sastav 1 0.2 %
radio tuner widget 1 0.2 %
unutrasnja lepota 1 0.2 %
kako se moze snimiti sa winamp player 1 0.2 %
sastav lepota je 1 0.2 %
cekajuci godoa delo 1 0.2 %
lepota u meni-pisani sastav 1 0.2 %
sastav-misao o coveku 1 0.2 %
uvod za sastav 1 0.2 %
greska ograde na medji 1 0.2 %
sastav za maturski 1 0.2 %
wordpress template 1 0.2 %
lepota-pisani sastav 1 0.2 %
kako da redovi tabele budu u boji 1 0.2 %
srpski jezik tema o lepoti 1 0.2 %
posao za geometre 1 0.2 %
instalacija mac os x leopard 1 0.2 %
pisani jezici 1 0.2 %
zadaci sa kontrolnih iz trigonometrije 1 0.2 %
sastav na temu zivot 1 0.2 %
sklad duhovne i fizicke lepote 1 0.2 %
sastavi iz srpskog jezika nasa mladosti 1 0.2 %
lepota-dar i kazna 1 0.2 %
sastavi iz srpskog jezika na temu svet i ja 1 0.2 %
fizicka i duhovna lepota sastav 1 0.2 %
problem apsurda i smisla 1 0.2 %
ekskurzija-dozivljaj koju cu pamtiti 1 0.2 %
b²/4a 1 0.2 %
sastav o mladosti iz srpskog jezika 1 0.2 %
sastav iz srpskog na temu sreca 1 0.2 %
bocna traka wordpress 1 0.2 %
sastavi iz srpskog jezika osobine koje najvise cenim 1 0.2 %
likovi u cekajuci godoa 1 0.2 %
kontrolni iz fizike za 4 godinu gimnazije 1 0.2 %
web note 1 0.2 %
cekajuci godoa apsurd 1 0.2 %
svet u drami cekajuci godoa 1 0.2 %
sastavi unutrasnjoj i spoljasnjoj lepoti 1 0.2 %
pismeni sastavi na temu osobine nekoga koga 1 0.2 %
sastav to sam ja 1 0.2 %
teme za maturski rad iz srpskog 1 0.2 %
sastav unutrasnja lepota 1 0.2 %
састави на тему и мали постају велики духом 1 0.2 %
sastavi iz srpskog jezika-covek 1 0.2 %
sastav iz srpskog jezika lepota zivota 1 0.2 %
nemam sliku kad upalim kompjuter da nije graficka 1 0.2 %
slika coveka i sveta u drami cekajuci godoa 1 0.2 %
sastav na temu ocekivao sam kaznu 1 0.2 %
web templates je 1 0.2 %
fizicka lepota coveka 1 0.2 %
ko je beketov godo 1 0.2 %
teme iy srpskog lepota 1 0.2 %
sastavi iz srpskog jezika o coveku 1 0.2 %
sastav lepota-dar i kazna 1 0.2 %
slobodna maturska tema 1 0.2 %
pisani sastav o coveku 1 0.2 %
sastav iz srpskog jezika sreca 1 0.2 %
upali sve igre 1 0.2 %
kako napraviti sam dekoraciju od balona 1 0.2 %
o lepoti sastav 1 0.2 %
sastav iz srpskog jezika na temu zasto se ne razumemo 1 0.2 %
sastavi iz srpskog jezika sreca 1 0.2 %
sastavi i pisanja o lepoti 1 0.2 %
mladost sastav iz srpskog jezika 1 0.2 %
tema iz srpskog jezika iskreno o sebi 1 0.2 %
tema iz srpskog jezika lepota 1 0.2 %
apsurd u beketovoj drami cekajuci godoa 1 0.2 %
sastav – lepota 1 0.2 %
rezane linuxa 1 0.2 %
sastavi iz srpskog jezika na temu 1 0.2 %
server4pc thor 1 0.2 %
pisani sastav internet 1 0.2 %
unutrašnja lepota 1 0.2 %
srpski jezik pisanje sastava 1 0.2 %
pismeni sastavi o lepoti 1 0.2 %
snimiti sa interneta 1 0.2 %
snimanje internet radia 1 0.2 %
svet u delu cekajuci godoa 1 0.2 %
sastav iz srpskog moje skrivene misli 1 0.2 %
icke zajecar 1 0.2 %
xss napad 1 0.2 %
teme za pismeni iz srpskog masta moze svasta 1 0.2 %
mcdonalds u srbiji proslava rodjendana 1 0.2 %
css tabele 1 0.2 %
ograde za dvorista slike 1 0.2 %
teme za sastav iz srpskog 1 0.2 %
covek sastav 1 0.2 %
sastavi tiket 1 0.2 %
brujanje kulera na napajanju 1 0.2 %
beketov stil 1 0.2 %
satav o lepoti 1 0.2 %
slobodne teme za sastav iz srpskog jezika 1 0.2 %
delo cekajuci godoa 1 0.2 %
Čekajući godoa 1 0.2 %
kako snimati muziku sa interneta 1 0.2 %
lepota zivota sastav iz srpskog jezika 1 0.2 %
lepota srpskog jezika 1 0.2 %
sreca coveka sastav 1 0.2 %
lepota dar i kazna\ 1 0.2 %
sastavi na slobodnu temu 1 0.2 %
lepota sastavi 1 0.2 %
najlepse dekoracije 2009 1 0.2 %
cekajuci godoa celo delo 1 0.2 %

Ispis i update datuma prvog i poslednjeg dana u nedelji u PHP-u.

19. januar 2010.

Pisao sam o sajtu za Anin fitness klub. Iako je završen, shvatili smo da je poprilično dosadno da svakog ponedeljka  ručno menjamo raspored termina treninga. A i ne možemo uvek biti tačni, već često kasnimo, pa datum promenimo u ponedeljak uveče, što zaista deluje neprofesionalno. Zato smo došli na ideju da napišemo skriptu koja će raditi to umesto nas, i tačno na vreme. :)

Aleksandar Saša Babić je preuzeo odgovornost na sebe i napisao odlično parčence koda. :)   Zato reših da ga podelim ovde sa svima, uz njegovu saglasnost naravno, a to će ujedno i biti drugi mini mini php tutorial na blogu (podsetnik:  link ka prvom).

Zadatak: Napraviti skriptu koja će ispisivati datum ponedeljka, datum nedelje, a kada se ta nedelja završi, skripta treba automatski da promeni datum i ponedeljka i nedelje, tako da raspored bude uvek up-to-date!


Ideja: Ceo problem se rešava utvrđivanjem da li je trenutni dan ponedeljak ili ne. Zato, ukoliko je dan kada korisnik poseti sajt ponedeljak, skripta će preko funkcije gettime() ispisati današnji datum, a ako tad nije ponedeljak, već neki drugi dan, skripta će uzeti datum ponedeljka iz te, tekuće nedelje.

Koji je danas dan? Pozivanjem funkcije getdate() možemo to saznati. Ona vraća niz koji se sastoji od sledećih podataka:
Array
(
[seconds] => 40
[minutes] => 58
[hours] => 21
[mday] => 17
[wday] => 2 //dan u nedelji !
[mon] => 6
[year] => 2003
[yday] => 167
[weekday] => Tuesday
[month] => June
[0] => 1055901520
)

Evo i koda:

<?php
$danas = getdate();
//ukoliko je getdate vratio vrednost 1 za wday, to znači da je ponedeljak(0 je nedelja, 1 ponedeljak, 2 utorak...), pa ćemo zato iskoristiti taj datum
//ukoliko nije 1 (to znači da nije ponedeljak, pa ćemo zato uzeti poslednji (vremenski najbliži) ponedeljak, last monday
//moramo iskoristiti i strtotime (ova f-ja ce string last monday prebaciti u timestamp).
$ponedeljak = ($danas['wday'] == 1) ? $danas[0] : strtotime('last monday');
//timestamp ponedeljka pa jos dodajemo 60sekundi X 60 minuta X 24h X 6dana, tj. vreme da bismo dobili nedelju
$nedelja = $ponedeljak + (60*60*24*6);
?>
<h2>Raspored (<?php echo date('d.m.Y', $ponedeljak); ?> do <?php echo date('d.m.Y', $nedelja); ?> </h2>

Pre svega, želeo bih da objasnim da linija:

$ponedeljak = ($danas['wday'] == 1) ? $danas[0] : strtotime('last monday');

vrši isti posao kao i ovih par:

<?php
 if ($danas['wday'] == 1) {
 $ponedeljak = $danas[0];
 } else {
 $ponedeljak = strtotime('next sunday');
 }
?>

Naravno, prvi oblik je mnogo kraći, pa je zato praktičniji. On zapravo znači sledeće:

$variable = (statement) ? "return if true" : "return if false";

Kada smo odredili vrednosti za naše promenljive, ostalo je još da ih konvertujemo u vreme koje čovek može da razume, s obzirom da one prikazuju timestamp.

Timestamp je vreme koje je prošlo od ponoći 1. januara 1970.  u sekundama. Primera radi, 18. januara 2010. u 01.45h $ponedeljak  ima vrednost 1263772800 (toliko sekundi je prošlo od 1. januara 1970).

Konverziju ćemo uraditi funkcijom date(‘d.m.Y’, $neko-vreme), gde je:
d – dan, m-mesec, Y-godina. Naravno, evo kako izgleda konvertovani $ponedeljak: 18.01.2010.

Time smo postigli ono što smo želeli – skripta sama piše i menja datum.

Predstavljamo: Ana Fitness Klub Online

25. decembar 2009.

Poslednjih 15-ak dana sam bio angažovan oko sajta fitness kluba iz Zaječara, koji vodi Ana Belivuk. Ovo mi je do sada bio jedan od najzahtevnijih projekata – ne zato što je Ana tražila nešto specijalno, već zato što sam u potpunosti ostavio svoj stil i radio po šemi koju je ona sama napravila.

Ana je veoma pozitivna osoba i obožava jarke boje. Od samog starta, kada smo planirali celu priču oko sajta, naglasila mi je da želi belu pozadinu sa što više sličica i boja. Ja, lično, preferiram što manje boja na sajtu, gde dominiraju siva i još jedna, osnovna boja. Međutim, ovde se to nije tražilo.

Nakon par dana od skiciranja i ugovaranja posla, napravio sam jedan template, sa grubo definisanim elementima. To je bilo okej, ali kako je Ana rekla, u glavi je ipak imala neku drugačiju sliku. Zamolio sam je da do detalja sve nacrta na papiru i prosledi Darku, koji je takođe bio uključen u ovaj posao, s obzirom da sam ja već tada bio u Beogradu.

Skicu sam vrlo brzo dobio i shvatio sam da se ono, što smo prvi put napravili, zaista nije mnogo podudaralo sa pravom Aninom željom. Ali, ništa lepše nego kada imate gotovu skicu, definisane boje, raspored i veličine svih elemenata – na vama je da samo to sprovedete u delo. Kada smo odradili redizajn prvobitnog template-a, Ana je bila veoma zadovoljna, jer je to upravo bilo ono što je ona želela. U tom trenutku jedino što nije valjalo je bila pozadina body-a. Iz tog razloga, linkovao sam Ani sajt sa vrlo dobrim izborom pattern-a, i ona je sutradan poslala link do pozadine koju je želela. S obzirom da smo dobili tačno onakav template kakav je ona zamislila, ostale stvari smo vrlo brzo i u hodu rešavali. Tu bih, na kratko, skrenuo temu sa dizajna na funkcionalnost.

Pre svega, želeo bih da kažem da je ovo u stvari mini CMS, prilagođen Aninim potrebama. Za one koji ne znaju, CMS je skraćeno od Content Management System, što zapravo predstavlja sistem za upravljanje sadržajem. Ana je želela da može sama da objavljuje vesti (od kojih će se samo dve, najnovije prikazivati na početnoj strani), dok bi se starije vesti prikazivale u arhivi (koja ne uključuje najnovije dve vesti, vidljive na početnoj). Svaka vest treba da u sebi sadrži i sličicu, koja se takođe bira sa lokalnog računara odakle se objavljuje vest. Isto tako, Ana je osetila potrebu da sama uređuje raspored treninga, kao i početni i krajnji termin održavanja, a sve to je dostupno sa leve strane sajta u ljubičastom pravougaoniku. Tako da se i taj deo direktno preuzima iz baze sajta. Sve ostalo je kodirano ručno u html-u.

Prosto ne mogu, a da ne spomenem problem sa kojim sam se susreo prilikom pravljenja ovog sistema – srpska latinična slova (ž, š, itd) koja su u bazi normalno zapisana se nisu videla na sajtu. E sada, šta je bilo najsmešnije u celoj situaciji (ovo je malo advanced level, pa ko se ne bavi web programiranjem, neće razumeti o čemu govorim, pa ovaj pasus može slobodno da preskoči):

Ukoliko dodam vest preko admin panel-a, a zatim odem na početnu stranicu sajta da pogledam kako ta vest izgleda, imam šta i da vidim – sadržaj vesti se ispisuje sve dok ne dođe do nekog našeg slova i tu stane. Dakle, bukvalno ispred prvog našeg slova koje treba da echo-uje, on prestaje. Pogledam odmah phpmyadmin i vidim da vest nije lepo upisana ni u bazu – umesto naših slova, vide se oni konvertovani znakovi. Proveravam dalje i vidim da su mi sve tabele u bazi lepo podešene – encoding utf8_unicode_ci. Hm…Čudno!

Testiram dalje i uradim INSERT nad news tabelom u okviru phpmyadmin-a, i tada su se sva slova lepo videla u bazi. Međutim, kada pogledam početnu stranu sajta, i dalje sve isto – naša slova ne vidi, pa to ti je. Neko bi rekao – pa problem je u encodingu početne strane – sigurno nije podešena na UTF8. Međutim, nije ni to u pitanju – stranica ima upravo taj encoding, a kao dodatni dokaz mi je bio fakt da su se naša slova na indeksu, kucana u html-u, lepo videla. Razmišljam, proveravam sve po ko zna koliko puta – ne vidim gde je greška. Odustajem, šaljem mail Nemanji Avramoviću i odlazim na spavanje (u 04.00h), nadajući se da će me sutra ujutru čekati mail sa nekim savetom. Naravno, to se i desilo. Linkovao mi je TOP temu sa ES-a, u kojoj je bio odgovor na sve moje muke. Pri samom konektovanju na bazu, dopisao sam dve linije (kao što je tamo naglešeno) i voila….indeks strana RADI!!! Podaci iz baze ( sa naglaskom na naša slova) se prikazuju korektno. Ali, waaaait! Problem je samo polovično rešen. Zapravo, vesti se prikazuju dobro ako i samo ako se upisuju u bazu iz phpmyadmin-a. Ukoliko se to radi preko formulara iz admin panela sajta, i dalje dolazimo do istog problema.

Kontam dalje – okej, mora da postoji neki problem u prenosu podataka iz aplikacije do baze. Jedino logično u ovoj situaciji jeste da strana u admin panel-u, na kojoj se nalazi formular za dodavanje vesti nije propisno encodovan. Što zapravo i jeste bio slučaj – pogledam prvo u Firefox-u opcijom View->Еncoding, gde stoji Western. Dalje, pogledam source te stranice, gde između head tagova nigde meta tagova za character encoding. Nakon dodavanja i te linije – sve je konačno proradilo.

Ah…Zamalo da zaboravim. Postojao je još jedan problem (više vezan za dizajn) koji mi je bespotrebno oduzeo bar sat vremena. kao što se vidi, ceo sajt je centriran. Tačnije, smešten je u div-u pod nazivom container, koji ima margin: 0 auto. Međutim, dragi Internet Explorer 6 to nije umeo da protumači i umesto da centrtira sajt, on ga je prilepio uz levu ivicu. Gledao sam i gledao i nikako da shvatim zbog čega JEDINO IE6 ne centrira sajt kao i svi ostali brauzeri. Nakon nekoliko pokušaja, došao sam do odgovora preko Google-a (jaaaaako bitno):

Da bi margin: 0 auto radilo u IE6, na početku tog dokumenta mora da stoji DOCTYPE deklaracija!!! Pogledam svoj source – naravno, ja to i nisam napisao, već mi ceo kod počinje html  tagom. Ubacim traženo i naravno, centriranje je proradilo i u IE6.

Ovo su sitnice, koje znaju da debelo zagorčaju život. Priznajem, delimično i mojom krivicom, jer sve mora pravilno biti definisano na strani. Ali, iz cele situacije sam izvukao neka nova znanja i pouke, tako da mi neće pasti na pamet da ostavljam neku stranu bez jasno napisanih tagova.

Nakon 15-ak dana rada, veoma sam zadovoljan kako sajt izgleda, kako radi itd. Boje su, po mom mišljenju, veoma dobro uklopljene, a sa time se slaže i ciljna grupa posetioca – kako mi je Ana rekla, njeni vežbači su prezadovoljni sajtom, te na naš račun stižu samo pozitivne kritike. U nadi da će se i Vama dopasti i da ćete pronaći korisne informacije na njemu, ostaje mi da još jednom samo zabeležim adresu: www.ana-fitness.com. Dobro došli.

P.S.  Zahvaljujem se sledećim ljudima koji su sve vreme davali savete i ideje, ali i radili testove funkcionalnosti:

Darko Stratijev, co-worker.

Vukašin Sadžak, koji je bio i ostao moj glavni kritičar u svim projektima na kojima sam radio.

Stefan Jocić, nemoguće je reći u jednoj rečenici koliko saveta sam za ovaj projekat dobio od njega, kao i veliku podršku u kasnim noćnim satima prilikom rešavanja pomenutih problema.

Vladimir Stoiljković, koji je posebno pomogao oko izrade kontakt forme.

Nemanja Veljković, Aleksandar Mitrović, Martać Ivan koji su svakodnevno komentarisali dizajn celokupnog sajta i davali konkretne savete za određene dizajn dileme.

Direktno editovanje fajlova preko FTP-a pomoću Notepad++

10. decembar 2009.

notepadSvako ko se bavi Web developmentom je došao u situaciju da, kada postavi gotov sajt na server, vremenom opazi da neki deo treba da se prepravi. Dug i dosadan način za to bi bio da se nakačite preko nekog FTP klijenta na server, zatim da sačuvate u kompjuteru fajl koji želite da uredite, uradite potrebne modifikacije i na kraju – ponovni upload fajla na server.

Nedavno sam, zahvaljujući Aleksandru Babiću, otkrio mnogo jednostavniji način – direktno editovanje na serveru pomoću Notepad++. Inače, ovo je svakako moj omiljeni text-editor i nije mi jasno kako mi još ranije nije palo na pamet da iskoristim ovu fenomenalnu mogućnost. Umesto toga, ja sam radio online prepravke iz cPanel-a. Ali, sada je tome kraj.

Prvo što treba da uradite je da skinete dodatak za Notepad++ koji se zove FTP_Synchronize i isti prekopirate u Notepad++ plugins folder. Nakon toga, pokrenite Notepad++, i videćete ikonicu kao na slici.

np++

Klikom na tu ikonicu, pojavljuje se prozor gde ćete videti novu ikonicu sa nazivom Open settings dialog gde treba da unesete:

Profile Name: Bilo šta, što će Vama lično služiti za prepoznavanje te konekcije,

Address: standarna FTP adresa Vašeg servera (hostname),

Port: 21,

i naravno username i password.

Nakon ovoga bi trebalo da sve lepo funkcioniše.  Vratite se jedan prozor unazad i u FTP Folder prozoru kliknite na prvo dugme sa leve strane, koje služi za konekciju i woilaaaa…..Ući ćete u root vašeg hosta!

Happy coding & editing! :)

Deo Fonis Web Tima!

19. novembar 2009.

5560_1235011954151_1194751205_30768140_7887906_nUpravo se vratih sa radionice FONIS web tima. Mnogo sam srećan i zadovoljan što tako nešto postoji na faksu. Cela ideja ove studentske organizacije mi se dopada – cilj je da svi zajedno kroz različite projekte, jedni od drugih, učimo web dizajn i programiranje. Radionice su svake srede, od 20-22h što se meni baš i ne uklapa u raspored, ali nema veze – pomučiću se jer smatram da mogu mnogo da dobijem.

Inače, trenutno radimo na CMS-u od nule, koji obuhvata dizajn template-a, CSS kodiranje istog, a nakon toga naravno i rad na backend-u i funkcionalnosti celog sistema u objektno-orijentisanom PHP-u. Meni je ovo super, s obzirom da sam tako nešto već radio, ali želim da se potsetim stvari koje sam zaboravio, a isto tako, da još više utvrdim taj posao i naučim neke nove načine i tehnike programiranja.

Nema sumnje da ću imati od koga – Uroš Šošević je jedan od glavnih koordinatora i zaista dobro radi svoj posao. Ima najviše iskustva, koje svima nama puno znači. Danas smo, uz njegovu pomoć, radili na kodiranju template-a od početnog html taga. I za 2h, koliko je trajala radionica, uspeli smo da napravimo grubu podelu na osnovne divove planiranog template-a. Doduše, moram da spomenem da sam čak i ja malo odmenio Uroša koji je morao da ode nešto pre vremena zbog obaveza. Kaže Igor, šef web tima, da bih ja mogao da preuzmem njegovo mesto. Naravno, daleko od toga da sam ga odmenio u potpunosti – s obzirom da mi je tamo sve novo (počevši od ljudi, okruženja, pa do tastature, OS-a i text-editora), ali sam se makar trudio da odradimo projekat do kraja i mislim da jesmo – samo je pitanje koliko su me ljudi, onako zbunjenog, razumeli. :D

Inače,  kad već spomenuh ljude, želim da dodam da su zaista okej (na prvi pogled). Svi imaju dosta entuzijazma, žele da uče i napreduju i verujem, ali zaista verujem da može da se formira jedan ozbiljan web tim koji će moći da radi na ozbiljnim projektima. O tom potom! Bitno je da se ostvari saradnja i dobra komunikacija oko trenutnog projekta, a za ostale u budućnosti ćemo tek videti i razmišljati.

Kako izgleda proces postavljanja WordPress teme na zvanični sajt

30. oktobar 2009.

Kao što sam ranije pisao, veliki sam fan WordPress-a i smatram da je to najbolje rešenje za CMS. Iz tog razloga sam rešio da dam jedan mali doprinos celokupnoj WordPress zajednici tako što ću dizajnirati besplatan template. Tačnije, ideja mi je bila da Starter Web Template bude dostupan i za WordPress.

To nije bio nikakav problem i trebalo je svega dva popodneva da se to uradi. Međutim, sve je to bilo u vreme kada sam se pripremao (i psihički i fizički) za fakultet i odlazak u Beograd da nisam stigao da objavim svoj rad na zvaničnom WordPress sajtu, u sekciji za teme.

Inače, kada sam došao u Beograd i malo se osvestio, pozajmio sam lap top od druga (jer ja i nemam internet), kako bih konačno uploadovao svoj template. Međutim, tu je bilo raznih peripetija i shvatio sam koliko je moj template bio u stvari nezavršen.  Time je, ujedno, WordPress filozofija još više narasla u mojim očima. Dakle, da bi se vaš template našao u njihovoj biblioteci, potrebno je da bude savršen, inače, neće ga prihvatiti. Kada kažem savršen, ne mislim na neki specijalan dizajn, već na ispravan kod i u potpunosti ispoštovane norme koje je WordPress postavio. Njihova želja nije da imaju sve teme ovoga sveta, već sve 100% funkcionalne teme ovog sveta. Dozvolite da objasnim šta to znači:

  1. Vaš folder sa kreiranom WordPress temom mora sadržati bar dva osnovna fajla: index.php i style.css. U suprotnom, tema neće raditi. Index.php je veoma fleksibilan i može prikazati sve (stranice sa postovima, postove pojedinačno, statične strane ponaosob, arhivu itd), ukoliko nedostaju fajlovi tema usko namenjeni za nabrojane stvari.  Ipak, u praksi se uvek koriste dodatni fajlovi radi povećanja funkcionalnosti: header.php, sidebar.phpfooter.phpcategory.phppage.php, archive.php, comments.php i drugi. Zato, gledajte da, kada dizajnirate temu, iskoristite sve ove mogućnosti. Postoji još jedna neophodna stvar koju vaš folder sa temom mora imati – to je screenshot.png fajl – slika Vaše teme. Bez ovoga, takođe, nećete uspeti da postavite template na njihov sajt.
  2. Pomenuo sam da tema mora sadržati style.css. Ovaj fajl je jako bitan i morate posebno voditi računa tu. Style.css fajl mora da ima deklarisana svojstva za float: left i right i na samom početku mora da ima sledeće linije (posebno obratite pažnju na Tags, ja sam nekoliko puta to prepravljao da bi bilo pravilno, jer npr. ne možete staviti i orange i white, već se opredeliti za jednu boju):
  3. /*
    Theme Name: Rose
    Theme URI: the-theme’s-homepage
    Description: a-brief-description
    Author: your-name
    Author URI: your-URI
    Template: use-this-to-define-a-parent-theme–optional
    Version: a-number–optional
    Tags: three-columns, flexible-width, orange, light
    .
    General comments/License Statement if any.
    .
    */

  4. Folder ne sme imati fajl tipa thumbs.db – inače, takođe ćete imati problem.

To su tri stvari, koje bih ja izdvojio kao važne za ovaj deo. Ukoliko ste sve to sredili, možete zipovati temu i otići na formu za upload. Nakon toga, ljudi iz WordPress-a će videti šta ste vi to njima spremili. Ja sam pratio posete na mom blogu i video da su oni proverili link teme koji sam im ja stavio u style.css. Zatim, preveli su preko gugla kompletan tekst i videli da nešto nije u redu.

S obzirom da je Starter Web Template namenjen drugima, svako može da ga skine odavde i iskoristi u svojim projektima (u ovom ili izmenjenom izdanju) i ima prava da izmeni footer u potpunosti (što uključuje i brisanje mog imena), ali nema prava da obriše linije (komentare) iz source-a koje vode ka pravom dizajneru teme.

Ovo je ključna rečenica kojom sam ja prekršio GPL licencu i zbog toga Starter Web Template, sa ovim postavkama ne žele da uvrste u njihovu biblioteku tema. Meni je, lično, veoma krivo zbog toga, ali eto, na taj način funkcioniše WordPress. Mene je sve ovo mnogo oduševilo – koliko su funkcionalni i praktični. Rezimiraću još jednom: kada uploadujete zipovanu temu, ona se, odmah po završetku uploada raspakuje na njihovom serveru i kreće automatizovana provera svih fajlova koji se nalaze unutra. Ukoliko je to u redu, onda skripta otvara style.css i proverava da li je onaj početni deo pravilno napisan. Ukoliko je sve to prošlo, proveravaju se fajlovi kako bi se uvidelo da li postoje neophodne WP funkcije. A ukoliko i to prođete, celu temu proverava i prava osoba, da se uveri da je sve u redu i na kraju, Vaša tema postaje deo njihovog sajta, spremna za download. Yeeey! :D

Prvi studentski dani – generalni utisak!

10. oktobar 2009.

Prošlo je dosta vremena od kako se nisam javljao na blogu a to je, naravno, zbog nedostatka vremena i lošeg interneta. Zapravo, ovde u Beogradu i nemam internet, već uzimam lap top od Macka, pa se konektujem na neki free wireless.

Inače, generalan utisak o svemu što me je ovde snašlo je čista desetka! Počeću redom. Najvažnija stvar mi je svakako fakultet. Ne da sam zadovoljan FON-om, nego ne mogu da se izrazim. Kad sam tamo, osećam se kao da sam u nekoj privatnoj školi. Fenomenalno je sređen, moderan, savremen, organizovan. Napravili su Open day 30. septembra, kako bi se brucoši međusobno upoznali, ali i malo detaljnije informisali o samom fakultetu, načinu rada i studiranja, polaganja ispita, ali i o svim studentskim organizacijama kojih na FON-u ima zaista puno. Te organizacije su postavile svoje štandove u dvorištu, odmah ispred faksa. Pregledao sam sve, naravno, ali najviše sam bio zainteresovan za FONIS – udruženje informatičara sa FON-a. Tamo su me pitali da li želim da učestvujem u besplatnom kvizu i potencijalno osvojim nagradu. Pristao sam, naravno, tačno odgovorio na sva pitanja usko vezana iz oblasti informatike i osvojio kancelarijsku hemijsku u futroli (i na olovci i na futroli pise FON :) .

Inače na Open day sam otišao sa kolegom Vladom iz Leskovca. Prava je sličajnost kako smo se upoznali. U utorak, 29. septembra, čekao ja autobus preko puta Pravnog i prilaze mi dvojica vršnjaka i pitaju me da im pomognem da odu do Vuka. Ja im objasnim, i zapričamo se mi i ispostavi se da jedan od njih dvojice, Vlada, upisao FON!!! Da slučajnost bude još veća, upisao je isti smer kao i ja i u istoj smo grupi (a ima 11 grupa od po 65-70 studenta). Tako se mi dogovorimo da odemo zajedno na Open day i od tada se baš okej slažemo! On me upoznao sa nekim njegovim prijateljima – Milan i Milena (takodje iz Leskovca), a onda sam upoznao još i Stefana iz Ljiga i Milinku iz Crne Gore. Sada sam sa skoro svima iz moje grupe stupio u kontakt.

Inače, profesori i asistenti su skroz prijatni sa nama, a izdvojio bih profesorku iz matematike kojom sam impresioniran jer se bukvalno smlati da objasni veoma suvoparno i teško gradivo, za razliku od asistenta koji nam drži vežbe i koga niko ne razume. Druga osoba koju bih za sada izdvojio je asistentkinja iz ekonomije koja tako uspešno podstiče ljude da misle, i na jedan veoma zanimljiv i karakterističan način uključuje sve studente u diskusiju, ne dozvoljavajući nikom da spava na vežbama. To je ipak tek početni utisak, videćemo na dalje….Sasvim okej je i lik koji drži osnove informacino-komunikacionih tehnlogija – čini mi se da se Miroslav zove.

Želim da napomenem da i nije baš lako kao što sam mislio – 7. nedelje je nedelja u kojoj ću svaki dan imati po jedan kolokvijum. Mada, to i nije tako loše jer sve osim sociologije mogu da dam preko kolokvijuma.

Okej, dosta o FON-u (samo pod uslovom da ste shvatili da mrem za FON (što bi rekao Milanče))! Ajde sad malo o drugim stvarima….recimo, o stanu! :) Živim u jazbini od 30 kvadrata sa Icketom! Sva sreća, pa dobru atmosferu ne čine prostorije, već ljudi koji u njima borave. Kao što rekoh, moj cimer je moj najbolji drug, Ivan Martać! Svi su se čudili i pitali kako ćemo nas dvojica opstati zajedno, s obzirom da smo dva različita karaktera, ali eto – za sada besprekorno. Doduše, nije mnogo ni prošlo, ali opet – verujem da ćemo nastaviti da se slažemo kao i do sada. Inače, odmah ispod nas živi i najveća dobrica koju ja poznajem, Aleksandar Mitrović, also known as Mačak, a sprat ispod dva PMF-ovca : Nemanja Veljković, poznatiji kao Munja i njegov cimer iz….jbm li ga!

Svakako, treba pomenuti da smo non stop u kontaktu i sa Nemcem i Vanjom, Cecom, Mišicom, Anestezijom, Tamarom itd….

Pošto smo došli u grad  u kome je provod zagarantovan, red je i da se to iskoristi, pogotovu sada kada su brucošijade svaki drugi dan. Mi smo otišli na dve i na prvoj je bilo super, na drugoj i ne baš, ali dobro! :) Najveći problem je to što moramo da ostanemo do kraja (04h), sačekamo prvi autobus, a zatim obično i drugi, tako da smo kući tek posle 05.30h. A u Beogradu je stvarno to ogroman problem. Ja recimo, putujem u proseku 40 minuta do fakulteta, ali zna da se oduži i do sat i nešto, ukoliko idem na predavanja popodne, kada saobraćaj bude kao u sred Pekinga.

Drugi, gadan problem je to što nema ko da čisti, pere, pegla, usisava, sređuje stvari umesto mene….Sve to moram sam da radim, a nisam navikao…Zbog toga, ne znam kako da se organizujem da to lepo odradim, i obično sve uradim površno, a zbog toga sam nezadovoljan jer sam navikao da mi sve bude čisto.

Okej, toliko za sada.

Kako snimiti pesme sa internet radija?

24. septembar 2009.

streamripperSigurno ste nekada do sada pustili neki Online radio i pritom poželeli da snimite pesme koje se na istom puštaju. Lično, volim da slušam mnoge radio stanice širom planete i u kompjuteru nemam ni 200 pesama. Zbog toga sam do sada često bio u prethodno opisanoj situaciji i problem rešavao raznim zahtevnim aplikacijama, koje se pritom i plaćaju.

Sasvim slučajno, naleteo sam na jedan fenomenalan dodatak za Winamp – Streamripper. Nakon testiranja, mogu samo reči pohvale da kažem. Dakle, ovaj dodatak od svega 2.5 MB radi paralelno sa Winampom i snima sve što poželite. Rad sa Winamp-оm je meni ogromna prednost jer sam navikao da muziku puštam isključivo preko tog programa. Samim tim, mogu ubaciti svoju playlistu, ali i linkove ka omiljenim radio stanicama i slušati šta mi je volja, a ne da za .mp3 koristim jedan, dok za snimanje drugi program. To je poprilično nepraktično i iritirajuće. Takođe, Streamripper ni malo ne kaska u odnosu na druge, profesionalne programe jer ima ugrađenu  mogućnost da sam secka pesme i da im pravo ime. Naravno, možete dečekirati tu opciju i pustiti ga da snima sve u jednom fajlu. Zauzima vrlo malo resursa i praktično ne osetite da radi. Takođe, apsolutno nije potrebno da imate bilo kakvu biblioteku instaliranu, poput  .NET Framework-a ili Jave, jer dodatak nije napisan u tim jezicima, logično. :D

Jedini nedostatak (ne bih da kažem mana jer to zaista nije) je to što ovaj dodatak ne može da snima paralelno više stanica. Meni to lično i ne treba, ali i da treba, radije bih se žrtvovao zarad svih ovih prednosti koje sam nabrojao. Zaista, veoma je jednostavan, nenapadan i što je najvažnije – radi to što treba da radi. Sve pohvale od mene.