Koji programski jezik učiti

Pitanje iz naslova jedno je od najčešće postavljenih pitanja svršenih diplomaca ili ljudi koji ulaze u svet programiranja. Pitanje nije trivijalno iz jednostavog razloga što dobro odabrana tehnologija znači veće mogućnosti za pronalaženje posla, bolje plaćen posao, … u najkraćem – svetliju budućnost.

Sve do juče na pitanje iz naslova bez mnogo razmišljanja odgovarao bih – PHP. Jednostavno, PHP poslova uvek ima, PHP se relativno brzo nauči, tako da za relativno kratko vreme možete doći do posla. Čak i za one bez ikakvog iskustva, otvorenost Web platforme omogućava početnicima da naprave sopstveni sajt, sajt komšijine prodavnice, prijatelja … whatever … i tako za kratko vreme steknu kakve takve reference i iskustvo – stvar koju tako mnogo tražimo mi koji tragamo za kvalitetnim developerima.

Elem, pre nekoliko dana kolega iz FBM-a zamolio me je da otvorim novu poziciju za iPhone developere, nakon čega sam nažalost jako brzo saznao da se broj iPhone Developera u Srbiji može nabrojati “na prste” jedne ruke.

Međutim situacija u svetu a naročito u USA je dramatično drugačija. Broj downloada iPhone aplikacija na Apple Application Store-u bliži se cifri sa 9 nula, a trenutno na listi najprodavanijih knjiga na Amazonu u kategoriji Računari i Internet možete naći samo nekoliko programerskih knjiga, od kojih su apsolutno sve vezane za iPhone. Ista priča je i kada odete i na kategoriju Programming gde su tri od prvih pet naslova knjige o razvoju iPhone aplikacija!

iPhone Development Books
iPhone Application Develpment Books

Nažalost cene Apple računara i nedostatak zvanične iPhone podrške u Srbiji i dalje je veliki problem u ovoj priči. No, za one za koje taj problem nije nepremostiv, današnji odgovor na pitanje iz naslova definitivno bi bio Objective C. Nisam siguran da ću čak i ja odoleti iskušenju …

Browser Detection Update

Danas sam sticajem okolnosti bio u prilici da nakon duzeg vremena updatujem svoju klasu za detekciju browsera. Radi se o klasi koja omogucava detektovanje tacne verzije Browsera/OS-a na osnovu user agenta browsera.

Npr: Mozilla Firefox 3.0.4 / Mac OS X

Može biti od koristi u slučaju da želite da korisnike određenih browsera redirektujete na posebne strane, kod pravljenja sopstvene statistike korišćenosti browsera itd.

Update sadrži dodatu podršku za Google Chrome, iPhone i Windows Vista OS.

Kompletan kod sa primerima možete downloadovati ovde

Izlaz scripta na ekranu i fajlu

Zbog prirode svog posla gotovo svakodnevno se bakćem sa raznoraznim php cli scriptovima. Često su u pitanju programi koji rade jako dugo (satima, neki čak i danima), ponekad praveći veliku količinu outputa, te zbog toga praktikujem da iste startujem unutar screen sesije, kako bih uvek mogao da se ponovo ulogujem u sesiju i bacim pogled kako stoje stvari.

Veoma je dobro logovati kompletan output skripta u fajl, za slučaj da je nešto pošlo naopako, ali nekako sam uvek voleo da onako “live” vidim na ekranu šta se dešava, umesto da mi ceo izlaz stoji u nekom tamo log fajlu. No, zahvaljući unix tee komandi i ovom postu, danas sam naučio da mogu imati obadva.

./script.php | tee out.log

Ovo će kreirati fajl out.log i usmeriti kompletan output scripta u njega, ali će isti biti prikazan i na ekranu (STDOUT). U slučaju da želite samo da dodate (append) output u postojeći log, nema problema:

./script.php | tee -a out.log

Konačno novi WordPress

Da, kao što i sam naslov kaže, konačno sam odradio upgrade sa vremešnog 2.0.4 na poslednji 2.3.2. Upgrade WP-a??? Big deal, reći će neko. No nije tako.

Ono što ovaj Blog izdvaja od ostalih je višejezičnost (isti Blog na dva jezika, tj. srpski i engleski), koja je postignuta zahvaljujući Gengo pluginu. Zgodan plugin koji vam omogućava da pišete postove na dva ili više jezika, dok korisnik sam bira preferirani jezik, ili mu se čak isti prikazuje na osnovu njegove geografske lokacije (GeoIP). Cool stvar.

No, ono što nije cool jeste da se Gengo prestao razvijati pre izvesnog vremena, tako da možete furati doveka stari WordPress ili deinstalirati Gengo, uz rizik da izgubite mukotrpan rad oko prevoda sadržaja i sl.

Current development on Gengo seems to have stopped . We have not heard anything from the developer for some months now. I hope that everything is fine for him. Unfortunately the latest release of Gengo is not compatible with WordPress 2.3 so f you want to continue to use Gengo “as is” you should not upgrade.

http://wp-multilingual.net/2008/01/26/gengo-and-wordpress-232/en/

Već vidim mrzitelje Open Source kako likuju. Eto vidiš, neki tamo programer je kreirao nešto, ti si se primio i uzeo to da koristiš na svom production sajtu i eto, taman kada ti je zatrebala podrška on je zapalio. Možda je prezauzet preživljavanjem, možda ga je udario kamion, šta god. Zarobljen si u zastarelom rešenju koje ne možeš upgrade-ovati, nema izlaza. No, sačekajte …

Open Source ima i dobru stranu, a to je da taj kod možete uzeti i nastaviti razvijati, a upravo to se i desilo u slučaju Gengo-a. Par naprednijih korisnika se organizovalo, zasuklo rukave, i eto novog Genga. Zapravo, ne još pošto je u pitanju još uvek alfa, ali koliko se pokazalo ima dovoljnu funkcionalnost da može ići na ovaj Blog. Zapravo bilo je potrebno malo je hakovati zbog problema koje sam i sam prijavio developerima, no bitno je da to sve (nadam se) fercera, dovoljno dobro, tj. bez vidljivijih bugova 🙂

Browser War Again

U jednom od ranijih postova pisao sam o ratu browsera . I dok se novi rat zahuktava, ovih dana došlo je vreme za odavanje počasti žrtvama prethodnog.

Da, u pitanju je Netscape Navigator, koji ovih dana odlazi na smetlište istorije nakon što je AOL objavio prestanak podrške i samim tim definitivan kraj za ovaj browser. Kao jedan od ljudi koji je svoje prve dane na Internetu provodio uz Netscape Navigator, moram da priznam da osećam izvesnu dozu sete kada se setih browsera koji je suvereno vladao sve do kraja devedesetih.

netscape.jpg
Netscape 2.x

Naravno, Microsoft ne planira da nakon decenije dominacije i njihov browser krene istim stopama, naprotiv razvoj novog IE8 je u punom jeku, a upravo ovih dana developeri IE-a objavili su da je IE8 sa uspehom prošao ACID2 test. I pored implementiranja najnovijih standarda, MS developeri su najavili da će kompatibilnost sa prethodnim verzijama biti u potpunosti očuvama. Kako to zamišljaju da urade, to bih baš voleo da vidim 🙂

Acid2

Ajax Animacija

Ajax je definitivno “in”, a za poboljšanje korisničkog doživljanja, efektna animacija prilikom akcija korisnika je od neprocenljivog značaja. Srećom zahvaljujući sjajnom AjaxLoad sajtu ne morate se patiti sa kreiranjem animiranih gifova ili flash animacija. Jednostavno odaberete tip animacije, podesite boje, kliknete na generate dugme i … voila! Vaša animacija je spremna za download.

ajaxloadinfo.gif

MySQL – Backup velikih MyISAM tabela

Ako ste ikada morali da backup-ujete ili prebacujete podatke iz jedne ili više MySQL tabela, znate da se za to koristi mysqldump utility, pomoću kojeg jednostavno podatke iz MySQL-a “dumpujete” u neki mojetabele.sql fajl, koji zatim možete sačuvati kao backup, prebaciti i importovati na neki drugi MySQL server, itd. Ovu proceduru koristio sam milion puta do sada, i ona se generalno svodi na izvršavanje sledećih komandi u linuxu:

export:

mysqldump -udinke -pmojpass -hhostname.prvog.servera ime_baze tabela1 tabela 2 tabelan > dump_fajl.sql

import:

mysql -udinke -pmojpass -hhostname.drugog.servera ime_baze < dump_fajl.sql

Tu i tamo pojavi se problem kada prebacujete dump sa novije verzije MySQL-a na stariju, i tada je poželjno specifirati i odgovarajući compability flag prilikom izvršavanja mysqldump komande (--compatible=name gde name može biti mysql323, mysql40, postgresql, oracle itd.).

Elem, pre nekoliko dana zbog prebacivanja MySQL servera sa jedne lokacije na drugu, morao sam da odradim dump solidno velikih MySQL tabela (10-tak tabela gde je svaka imala preko 2 miliona slogova). Nakon užasavajuće duge procedure dumpa, gzipovanja i scpovanja na drugi server, konačno sam startovao import. Međutim, nakon 3 sata (tri sata) umesto standardne "no news is a good news" poruke, kada sam bacio pogled na status dočekala me je sledeća poruka ...:

[dinke@um-917 ~/public_html]$ mysql -udinke -p325ewfwt23rasf
keyword_discovery < es_miner_data.sql
ERROR 1582 (23000) at line 163833: Duplicate entry '1167548' for key
'PRIMARY'

WTF? Prebacivao sam podatke sa starije verzije na noviju, što znali da import mora proći glatko! Ovo bi trebalo da znači da je MySQL negde nešto pobrljavio sa indexima, i umesto da čekam još 2 sata da se odradi check & repair, odlučujem se da napravim ponovo dump fajl, ovaj put sa ignore opcijom, kako bi svi inserti u dump fajlu bili "insert ignore" tako da u slučaju ovakve greške ne bi došlo do pucanja. Ne preterano pametno, ali podaci nisu extremno osetljivi i mogu da dozvolim luksuz da izgubim desetak slogova, ali ne i desetak sati za import!

Naravno, novi dump, zip, scp ... to je traajalooo ... toliko dugo da sam posle par sati nakon startovanja importa krenuo da mozgam sa administratorom (kuki) oko alternativnih rešenja. A rešenje je bilo jednostavno ali efikasno. Prekopirali smo sve MySQL data fajlove sa jednog servera na drugi (*.MYI, *.MYD i *.frm fajlove), a zatim odradili myisamchk kako bi sredili pomenute tabele, jer nismo smeli da spuštamo server prilikom backup-a što generalno može da prouzrokuje dosta problema (tipa oštećene tabele) ako se na ovaj način backupuju fajlovi.

Sve u svemu, ova operacija prošla je jako brzo (najduže je trajalo kopiranje fajlova sa jednog hosta na drugi), i za manje od pola sata cela procedura bila je završena.

Zaključak do koga smo došli je da je kod velikih tabela zbog dužine trajanja operacije dumpovanje praktično neprihvatljivo kao backup rešenje, i da se samim tim kao jedino rešenje nameće kopiranje MySQL data fajlova. Kod MyISAM tabela to nije nikakav problem, jer su one "platform safe", tj. binarni fajl kreiran na jednoj platformi (recimo *.MYI fajl na linuxu) radiće bez ikakvih problema na drugoj platformi (recimo isti *.MYI fajl na Windowsu).

Google Street View

I taman kad pomislite da vas više ničim ne može iznenaditi – Google to uradi ponovo!

Nova zvezda zove se “Street View” i deo je Google Maps aplikacije. Street view, kao što i sam naziv kaže omogućava vam da se šetate ulicama gradova, rotirate sliku itd. Za sada podrška je ograničena na nekoliko gradova u USA (San Francisko, Las Vegas, Denver, New York, Miami), ali i to je sasvim dovoljno da se oduševite.

Evo nekih od lokacija koje su meni bile Interesantne.

Golden Gate Bridge
Golden Gate Bridge

Las Vegas
Las Vegas

miami_beach.jpg
Miami Beach

ny_central_park.jpg
NY, Central Park

Foxmarks – Bookmark Synchronizer

Ako poput mene koristite više od jednog kompjutera(recimo laptop i vaš kućni Desktop), sigurno ćete pre ili kasnije poželeti da nekako centralizujete vaše bookmarkove. Ako koristite Firefox, rešenje je tu na dohvat ruke – Foxmarks.

foxmarks.gif

Foxmarks ekstenzija vas nakon instaliranja vodi kroz čarobnjak koji vam omogućava da lako otvorite nov foxmarks nalog, a zatim će se vaši bookmarkovi snimiti na server. Nakon toga svaka promena u vašim bookmarkovima će biti transparentno sinhronizovana sa serverom. Nakon što instalirate ektenziju na neki drugi računar(laptop na primer), foxmarks će vam ponuditi sinhronizaciju, gde možete na primer da kombinujete bookmarkove sa oba računara, ili da u potpunosti povučete bookmarkove sa servera itd.

Foxmarks ekstenziju možete downloadovati odavde.

Blogodak – Top Lista Blogova

Od danas je na Blogotku aktivna Top lista Blogova. Za razliku od moje stare liste, ova je bazirana na TLA Blog Juice faktoru koji računa rejting bloga na osnovu broja pretplatnika na servisu Bloglines, Alexa rejtingu, Technorati rejtingu, kao i broju dolaznih linkova ka Technorati servisu. Maksimalan rank može biti 9.9, a moj blog se kao i na Netcraft listi nalazi u samom vrhu sa rankom 1.8.

Za razliku od liste bazirane na Netcraftu, ova lista(iako i dalje ima par manjkavosti) je mnogo manje podležna manipulaciji, i samim tim predstavlja daleko realniji prikaz popularnosti nekog Bloga.

Za sada ćemo listu na Blogotku update-ovati jednom nedeljno, kasnije ćemo videti da li je potrebno vršiti izmene u frekvenciji update-a.