• Șosetăria are blog

    Ca să nu mai plictisesc lumea pe blogul personal povestind despre șosete, dresuri și alte cele, am decis să fac un blog special pentru Șosetăria.

    PS: am primit sosete cu degete!

  • Mysql și mesajele de eroare

    Se dă un query de genul:

    [code lang="sql"]INSERT INTO request(`project_id`, `user_id`, `request_body`, `planned_date`) VALUES (1,22,'blabla','2009-01-31 04:16:27')[/code]

    la care se primește eroarea:
    [code]Column not found: 1054 Unknown column 'project_id' in 'where clause[/code]

    WTF? Where clause pentru un query de tip INSERT?

    După câteva secunde de gândire, vine și răspunsul: eroarea era într-un trigger. În astfel de cazuri, niște erori puțin mai detaliate ar fi binevenite.

  • PHP GeekMeet

    Programmers are so busy working they often don't have time to be curious about how they could do their jobs better. (Steve McConnel)

    De ceva vreme încoace, rumeg o idee împreună cu Adi: să facem un GeekMeet special despre PHP. Încerc să adun o masă critică pentru a porni întâlnirile în Cluj, iar la GeetMeet #4 Cluj am primit un feedback pozitiv de la mai multe persoane.

    Pe scurt, ideea se regăsește în citatul de mai sus. Personal, urmăresc RSS-urile de pe vreo două site-uri (legate de PHP, evident) și sunt abonat la php|arch. Dar cantitatea de informații e mult prea mare, RSS-urile rămân necitite și foarte rar încerc să experimentez chestiile pe care le citesc.

    Cu toții suntem ocupați cu lucrul și avem prea puțin timp la dispoziție pentru a fi la curent cu ultimele noutăți din industrie, pentru a experimenta chestii noi. Însă sunt convins că fiecare din noi (și aici mă refer la programatori în general) încercăm să ținem pasul cu tehnologia. De aceea un PHP GeekMeet cred că ar fi binevenit, am putea să facem schimb de experiență și idei într-un mod foarte productiv.

    Pe site-ul php.net văd o grămadă de întâlniri ale diverselor PHP User Groups din toate colțurile lumii. Noi de ce nu putem face așa ceva? Hai să ne întâlnim, să ținem prezentări practice, la obiect, să beneficiem fiecare de experiența celorlalți, să le evităm greșelile și să devenim mai eficienți.

    Așadar, lasă un comentariu dacă ești interesat.

    Actualizare: am mutat discuțiile aici.

  • Vând OpenMoko Neo Freerunner

    Actualizare: s-a vândut

    Yup... l-am cumpărat în august anul trecut (350 euro + 20 euro transport), i-am făcut un review săptămâna trecută iar acum m-am hotărât să-l vând.

    Motivul? La fel ca și în cazul SGI-ului, nu am timp să mă joc cu el. Vreau un telefon care să meargă bine out of the box.

    Prețul? 270 250 euro, negociabil.

    Pachetul conține telefonul propriuzis, încărcător, cablu USB, card microSD de 512MB + adaptor, pix/stylus/laser pointer/lanterna, căști, gentuță. Mai multe detalii, aici.

  • GeekMeet #4 și ODO la Cluj

    A 4-a ediție a GeekMeet Cluj va avea loc pe 24 ianuarie, ora 10, în restaurantul La Luca (deși inițial era programat în Vanilla).

    Oameni din online sau pe scurt - ODO - e o întâlnire similară cu GeekMeet din câte îmi dau seama, întâlnire care până acuma avea loc doar în Iași. Despre ODO am tot citit pe blogul lui Krumel, iar într-un post recent anunța extinderea ODO în alte orașe. Așadar, se caută ajutor pentru organizarea ODO în Cluj. E cineva interesat?

    M-am bucurat când a apărut GeekMeet în Cluj, fiind singura întâlnire de acest gen din oraș. Însă acum că va avea o concurență, mă bucur și mai mult. Mă bucur pentru că e un semn bun pentru industria online.

    Abia aștept prima ediție ODO, iar până atunci, ne vedem la GeekMeet ;)

  • Review OpenMoko Neo Freerunner

    Profitând de zilele libere din anul ce tocmai a trecut, am avut puțintică vreme să transport niște octeți - de ici-colo - între laptop și telefon pentru a testa versiunile noi de software.

    Nu prea știu de unde să încep review-ul, pentru că pe de-o parte iubesc telefonul ăsta, iar pe de-altă parte îl urăsc (și câteodată nu vreau să recunosc lucrul ăsta). Probabil pentru unii acest review pare unul negativ, însă țin să amintesc faptul că telefonul nu e destinat publicului larg ci e pentru linux geeks.

    Ok, hai să încep cu începutul, să trăiți și voi, cititorii, toată telenovela asta cu aceeași patimă cu care am trăit-o și eu :P

    Am intrat în posesia telefonului la sfârșitul lui august 2008. Așa cum scriam și în articolul inițial, primele zile le-am petrecut instalând, configurând și re-instalând variatele distribuții existente - în număr de 6-7 - la acea vreme. Vroiam să obțin un telefon utilizabil iar până la urmă am rămas la distribuția bazată pe Qtopia, cunoscută mai apoi sub numele de QtExtended, după preluarea Qt de către Nokia. Trebuie să menționez faptul că folosesc această distribuție și în prezent.

    Problemele

    Trecând peste - nu tocmai micile - probleme de usability, marea problemă (prezentă pe toate distribuțiile) este un ecou pe care îl aude persoana cu care vorbești. Practic, este vorba de microfonie. Mă rog, pentru mine nu este o problemă, pentru că pe partea mea sonorul e bun, dar m-am săturat să-mi spună toată lumea, la fiecare telefon dat/primit,  că își aude ecoul propriei voci :). Treaba asta cu ecoul/microfonia are o rezolvare, dar e departe de a fi cea ideală. Trebuie să te joci - din consolă - cu un fișier de configurare alsa pentru a micșora volumul difuzorului. M-am bucurat când am reușit să am o conversație normală la telefon, dar bucuria nu avea să dureze mult. Bineînțeles, nu poți să ajustezi volumul în timpul convorbirii, iar un volum micșorat prea mult pentru a repara microfonia nu te lasă să porți o conversație normală într-un mediu mai zgomotos. Totuși problema asta pare să fie rezolvată, detaliez mai târziu.

    O altă problemă destul de mare la început a fost bateria, sau mai precis, durata de viață a acesteia: aproximativ 24h.

    Tastatura virtuală (cea instalată implicit pe toate distribuțiile) este aproape inutilizabilă folosind doar degetele. Mă refer la tastatura QWERTY, nu la cea numerică. Bineînțeles, poți să instalezi o tastatură nouă, utilizabilă. Totuși, nu cred că e disponibilă pentru QtExtended. Nu am cercetat problema asta deoarece scriu rareori SMS-uri. În schimb, QtExtended are un soft destul de bun pentru recunoașterea scrisului de mână. Oricum, mă miră faptul că, deși tastatura nouă e disponibilă de ceva vreme, toate distribuțiile au încă tastatura inutilizabilă instalată implicit.

    Frustrat de problemele descrise mai sus, am folosit foarte puțin telefonul în luna septembrie.

    În  luna octombrie a apărut un update iar durata de viață a bateriei a ajuns undeva pe la 60 de ore în cazul meu (nu vorbesc mult la telefon). Știu, nu e mult, dar a fost o îmbunătățire majoră și cred că vor urma multe alte îmbunătățiri pe partea de power management. După acest update am început să folosesc telefonul zi de zi. Sigur, sunt încă multe de rezolvat, dar telefonul e utilizabil.

    Până în vacanța din decembrie n-am mai avut deloc timp să experimentez cu telefonul.

    Comunitatea

    Lista de discuții e foarte activă iar pe partea de software se pot vedea îmbunătățiri aproape zilnic, dar există o mare „problemă”: sunt prea multe distribuții, prin urmare efortul comunității e fragmentat în prea multe direcții. Da, știu, în lumea open-source de obicei ăsta e un lucru bun: ai de unde să alegi, stă la baza multor inovații, creează concurență, etc. Însă aici vorbim de un telefon cu un user-base de câteva mii de utilizatori și cu puțini dezvoltatori. Încă nu s-a creat masa critică pentru a începe dezvoltarea în mai multe direcții. Cred că lipsește un lider puternic pentru a da o direcție mai clară comunității, iar puțin mai multă implicare din partea companiei producătoare în această privință nu ar strica.

    Distribuțiile

    QtExtended mi se pare distribuția cea mai bine închegată, adică are același look & feel peste tot și folosește doar Qt.  Restul distribuțiilor - în afară de Android -  sunt un amalgam de Gtk, Qt și EFL (da, Enlightenment!). La capitolul viteză, distribuția celor de la Nokia stă destul de bine. Totuși QtExtended are o mulțime de lipsuri și se mai blochează din când în când. By default nu merge bluetooth-ul.  La fel... conexiunea wireless nu merge, am încercat o singură dată în mall și a crăpat telefonul, fiind nevoie de un restart.

    OM 2008.12 este update-ul din decembrie al distribuției „de bază” ce este susținută chiar de către firma producătoare a telefonului, FIC. Inițialele OM vin de la... OpenMoko. În acest update din decembrie s-a adăugat facilitatea de a ajusta volumul în timpul conversației, în sfârșit! Trebuie menționat faptul că, QtExtended are la bază OM (kernel, module, etc, mai puțin interfața grafică). La rândul său, OM împrumută aplicații chiar din QtExtended.

    FDOM (Fat and Dirty OpenMoko) este, asa cum îi spune și numele, o distribuție OM2008.x peste care se adaugă muuulte pachete. Printre pachete se află și DukeNukem 3D. Da, ați citit bine, e vorba de vechiul și renumitul joc FPS. Îmi amintesc că jucam DukeNukem 3D pe un Pentium1 la 133mhz și 32MB ram prin 1997. Recunosc, am instalat FDOM doar pentru a mă juca. Pe Freerunner jocul merge bine și te joci mișcând telefonul sus/jos, stânga dreapta (vă amintesc că telefonul are 2 accelerometre, la fel ca iPhone-ul). Pe youtube găsiți multe filmulețe cu jocul.

    Atât OM cât și FDOM au și ele multe probleme însă nu stau să detaliez.

    Având aceeași bază, OM, FDOM și QtExtended, beneficiază de un manager de pachete special creat pentru telefon. Numele lui e opkg și e similar cu apt-get din Debian. Astfel, poți instala relativ ușor un număr destul de mare de aplicații.

    Debian nu cred că mai are nevoie de prezentare. Când l-am testat eu (august, septembrie) puteai doar să suni și să fi sunat, nimic mai mult. Din câte țin minte nu avea nici măcar o agendă. Nu știu dacă între timp s-au făcut progrese.

    Cam atât am reușit să testez cu succes. Am încercat să instalez și Android, dar n-am reușit la prima încercare (trebuia instalat alt bootloader din cauza kernel-ului mare) și am lăsat-o baltă.

    În încheiere

    O mare parte din problemele existente sunt rezolvabile iar soluțiile se găsesc în wiki sau pe lista de discuții. Însă ai nevoie de timp să sapi după soluții, să urmărești orice posibilă rezolvare, etc.

    Ar mai fi multe de spus despre acest telefon, însă timpul nu-mi permite. Cu siguranță am omis lucruri importante însă acest review mi-a luat câteva ore răsfirate pe parcursul mai multor zile și nu sunt dispus să investesc mai mult timp în el.

  • LinkedIn-urile românești

    Ieri aflam via @idevelop (mersi pentru invitație) că tocmai s-a lansat iKonect - prima rețea socială de business din Romania - după cum se auto-proclamă.

    Tot ieri, citeam la Krumel despre IașiNet, o rețea locală pentru oamenii de afaceri din... Iași (doh!).

    Sunt oarecum dezamăgit că au apărut așa târziu :P însă mai bine mai târziu decât niciodată. Multă baftă ambelor site-uri!

  • Diacritice cu virgulă și sedilă, sau cum să împaci capra și varza

    Cei care lucrați în domeniul web cunoașteți foarte bine sentimentele de mânie, frustrare și ură - trăite pe rând, sau toate o dată - ce apar în momentul în care deschideți un IE6 pentru a testa un site proaspăt terminat.

    Ultima problemă legată de IE6 ține de afișarea incorectă a diacriticelor cu virgulă. Problema asta îmi era practic necunoscută acum vreo 6 luni de zile, deoarece layout-urile tastaturilor românești conțineau diactitice cu sedilă (pe linux, cel puțin). Diferența?

    Layout nou: ș, Ș, ț, Ț (afișat incorect)

    Layout vechi: ş, Ş, ţ, Ţ (afișat corect)

    Aici pe blog puțin îmi pasă dacă mai sunt oameni navigând cu IE6 care nu văd textul corect. Însă pe alte site-uri îmi pasă, pentru că fiecare utilizator poate deveni client. Prin urmare, a trebuit să caut o soluție.

    Fiind vorba de un site scris în PHP, soluția a ieșit imediat la iveală și se bazează pe funcționalitatea de output buffering despre care am mai scris aici.

    Și acum, codul responsabil cu afișarea diacriticilor cu sedilă în locul celor cu virgulă (doar pentru IE6):

    [code lang="php"]function inlocuireDiacritice($buffer){
    
      $cuVirgula = array("ș", "Ș", "ț", "Ț");
    
      $cuSedila = array("ş", "Ş", "ţ", "Ţ");
    
      return str_replace($cuVirgula, $cuSedila, $buffer);
    
    }
    
    function browserIE6(){
    
      return strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 6");
    
    }
    
    if (browserIE6()){
    
      ob_start("inlocuireDiacritice");
    
    }else{
    
      ob_start();
    
    }
    ...
    ob_end_flush();
    [/code]
  • Vând blog de știri it: Technogeek.ro

    Pe 18 aprilie 2007 am început un blog/site cu știri din domeniul IT, axat mai mult pe partea de hardware. Site-ul are momentan 400 de articole și e bine poziționat în google pentru diverse cuvinte cheie, dar din noiembrie 2008 nu mai are nici un articol nou.

    De ce vreau să-l vând? Pentru că nu am atins obiectivele propuse și vreau să-mi direcționez forțele în altă parte.

    Prețul? Sunt deschis la oferte cu bun simț. Ofer factură. Pentru alte detalii, vă rog să mă contactați.

  • Gânduri pentru 2009

    2008 a fost un an care a început prost și s-a terminat bine, un an în care

    • m-am logodit
    • am început acest blog (44 de articole) și - recent - mi-am făcut cont pe twitter
    • am găsit un prieten și partener de afaceri de încredere
    • am lansat două proiecte personale
    • am început să citesc (cărți)
    • am devenit interesat de dezvoltarea personală

    Scriu acest articol plin de entuziasm și energie pentru anul ce urmează.

    La sfârșitul lui 2007 mi-am propus să realizez unele lucruri în 2008 însă... am uitat ce mi-am propus.

    Degeaba îți propui ca anul viitor să faci lucrurile X și Y dacă nu le notezi undeva! Degeaba le notezi dacă uiți hârtia într-un sertar. Nu trebuie să treacă o zi fără să știi încotro de îndrepți, fără să știi ce țeluri ai. Oprește-te din citit și notează-ți ce vrei să faci în 2009.

    Pentru mine, 2009 va fi anul în care:

    • sper să am o să aloc mai mult timp și atenție proiectelor personale
    • o să fiu mai eficient în munca de zi cu zi, o să pierd mai puțin timp pe internet
    • o să fac mai mult sport
    • o să mănânc mai sănătos
    • o să scriu mai mult pe blog
    • o să citesc mai mult decât în 2008
    • și nu în ultimul rând, o să mă căsătoresc

    Scriind lucrurile de mai sus, am fost tentat să folosesc cuvântul „sper” în 2-3 locuri și mi-am dat seama că nu e bine. Așadar, în 2009 încerc să-mi scot din vocabular - și mai ales din procesul de gândire - cuvântul „sper”. Sper că proiectul X va fi un succes, sper să am timp pentru proiectul Y, etc, etc.

    Sunt multe lucruri la care un om speră, însă cuvântul „sper ” ar trebui înlocuit cu o acțiune concretă. Altfel, speranțele vor rămâne doar atât - speranțe. Muncesc din greu pentru ca proiectul X să devină un succes - sună mai bine, nu? Lasă speranțele, muncește pentru a ajunge unde vrei, nu lăsa nimic la voia întâmplării!

    Hai 2009! Sunt convins că va fi un an mai bun decât 2008!