
“If you have an apple and I have an apple and we exchange these apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.” – George Bernard Shaw
Scenariu: tu, gigel-programator-expert, esti contactat de un client sa ii dezvolti un proiect. Semnezi un contract de confidentialitate pe X ani si un contract de cedare a “tuturor drepturilor de proprietate intelectuala” asupra codului furnizat. Te apuci sa scrii proiectul, il scrii cum poti tu mai bine (ca doar de-asta esti expert, nu?), iar intr-o zi il termini si il livrezi.
Peste ceva timp esti contactat de un alt client, pentru un proiect foarte asemanator cu primul, dar fara alta legatura (de genul “am auzit ca ai facut aia, vreau si eu la fel”). Pur si simplu un alt proiect asemanator (sa fim seriosi, nu exista o foarte mare varietate de modele de site-uri pe lumea asta). Tu, gigel, avand o constiinta bine dezvoltata, iti pui intrebarea: “cum scriu eu acest proiect la standardele mele ridicate, avand totusi grija sa nu semene codul prea mult cu cel de la primul proiect ca sa nu am apoi probleme? ma fortez sa-l scriu altfel? wtf?”.
Orice programator experimentat stie ca de la un anumit nivel in sus intri in niste “patternuri” de proiectare si programare, modele pe care le repeti la orice proiect: felul cum scrii si incluzi modulele, cum tratezi userii, formularele, etc.
Asa ca esti pus intr-o situatie destul de absurda, si incepi sa-ti pui si mai multe intrebari.
- Cum poate cineva sa ingradeasca o metoda de a rezolva o problema?
- Cum poti tu sa eviti sa rezolvi o problema intr-un anumit fel (care tie ti se pare foarte destept) doar pentru ca aceasta rezolvare ai vazut-o intr-o bucata de cod asupra careia altcineva detinea drepturi de proprietate intelectuala?
- Poti spune ca ai furat (la modul penal) aceasta solutie daca totusi o folosesti in continuare?
- Poti spune ca ai “eliberat” acea bucata de cod daca o rescrii putin? Hah!
- Ce mai inseamna proprietatea asupra unui produs daca toate partile sale componente sunt astfel libere?
O abordare (practica, nu filozofica) asupra problemei este cea din articolul 10 Absolute `Nos!` for Freelancers
In my Terms and Conditions that I require all new clients to sign, I make sure they know that
(1) their code has utilized code from other projects which I haven’t charged them for
(2) I will probably use code from their project on other projects
(3) they own the code and implementation of the project (finished website), but not the actual code pieces (login system, image uploader, etc.).
I pride myself in productivity and speed, and I need to use other code all the time to accomplish this.
Exista vreo legislatie in vigoare in Romania care defineste “proprietatea intelectuala”?
13 comentarii
Freelancing, General

“Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away.” – Antoine de Saint-Exupery
Folosesc Firefox si middle-click pentru deschiderea in taburi noi a linkurilor care ma intereseaza. Insa in ultima vreme ma lovesc din ce in ce mai des de o problema: eu pe care buton apas?
Sa va explic.
O data cu raspandirea “fenomenului AJAX“, tot mai multe site-uri folosesc javascript pentru afisarea unor informatii intr-un mod mai “prietenos”. Astfel, un link pe care scrie “Help”, din dreptul unui camp dintr-un formular, poate deschide o fereastra popup, poate afisa un fel de lightbox, poate deschide intr-un tab nou o pagina cu informatiile necesare, etc. Posibilitatile sunt multe.
Problema este ca acel buton este imprevizibil.
Vad butonul, cum procedez? Left click, sperand sa fie ceva javascript, dar riscand sa imi schimbe pagina (lucru pe care eu nu-l doresc, poate e un formular deja aproape completat), middle click “ca sa fiu sigur” dar apoi ma trezesc cu 10 taburi deschise, fiecare tab fiind gol deoarece acel link fusese “gandit” (mult spus) pentru javascript? E foarte neplacut sa se intample asta, iar mai grav este ca aceasta nesiguranta devine din ce in ce mai prezenta pe web.
Exemplu concret: forumul macuser.ro. Toate pozele atasate la un post au link de forma javascript:showimage('http://..', '640', '480');void(0);. Vrei sa deschizi toate pozele in taburi ca sa te uiti la ele pe rand? Sau poate un link direct catre una din ele? Tough luck… Ai cumva javascriptul dezactivat? Hah.
Avem nevoie de programare web “cu cap”, facuta de oameni care stiu cum stau lucrurile, si nu de amatori care cred ca daca folosesc din plin ultimele efecte script.aculo.us totul va fi ok. Nu e ok, site-urile trebuie sa fie accesibile, informatia trebuie sa se gaseasca in stare cat mai pura. De-aia avem XML, JSON, XHTML: pentru “curatarea” informatiei de toate artificiile grafice. Javascriptul ar trebui sa fie bonus, nu esential! Vorbim bineinteles de site-uri normale, nu de aplicatii full-javascript. Cum poti sa te numesti programator web, dar sa scrii un formular de cautare in care submitul se face doar prin javascript? Chiar nu iti dai seama ca i-ai terminat pe toti cei care intra de pe terminale non-standard? Sau e nevoie sa intri chiar tu intr-o zi de pe un telefon mobil, intr-un moment de urgenta, sa cauti ceva pe un site, si sa nu poti sa faci asta pentru ca respectivul programator nu a pus buton de submit. “Pentru ce? Nu poate sa dea enter?”. Nu.
Asadar, un site trebuie sa functioneze 100% chiar si cu javascript dezactivat. Iar atunci cand este activat, sa nu fie nevoie sa am grija unde dau click pentru a nu naviga de pe pagina curenta unde am informatii importante. Vreau sa am incredere ca acel click pe care il fac pe linkul din meniu nu imi va strica experienta navigarii pe site. Acest lucru se cheama “non obtrusive javascript”, iar directia spre care ar trebui sa tindem toti se cheama “accesibilitate”.
12 comentarii
Dezvoltare client-side, Programare web

Un prieten m-a rugat sa pun pe blog un anunt de angajare la firma F5 Solutions din Bucuresti, pe postul de front end developer. Here it goes:
F5 Solutions cauta un Front-End Web Developer care sa raspunda afirmativ la cel putin 5 din urmatoarele 8 intrebari:
- Poti face o comparatie intre cel putin 2 framework-uri JavaScript?
- Codul XHTML scris de tine este corect din punct de vedere semantic?
- Preferi un editor de tip TEXT (cu sintax-highlighting) in detrimentul unui editor de tip WYSIWYG?
- Cunosti cel putin o solutie pentru realizarea unui transfer asincron de date cross-domain?
- Obisnuiesti sa validezi codul XHTML / CSS conform standardelor W3C?
- “Cross-Browser”, “fiabilitate” si “scalabilitate” se numara printre caracteristicile definitorii ale proiectelor tale?
- Esti familiar cu cel putin 4 dintre urmatorii termeni: “hasLayout”, “mostenire”, “DOM”, “elemente multi-class”, “polimorfism”?
- Ai folosit pana acum o tehnologie text-based de serializare / transmitere a datelor in afara de XML?
Cunostintele si conditiile obligatorii sunt urmatoarele:
* XHTML, CSS;
* XML, XSLT, JSON;
* JavaScript (OOP, minim 4 luni experienta in utilizarea unui framework);
* Un portofoliu care sa cuprinda cel putin 3 proiecte / experimente / aplicatii relevante;
* Seriozitate, responsabilitate, etica profesionala;
* Simtul umorului (nu glumim).
Esti avantajat daca:
* Ai experienta in utilizarea Smarty;
* Ai experienta in utilizarea Fireworks si/sau Photoshop (slicing / export);
* Esti familiar cu modul de functionare al tehnologiilor server-side (cel putin la nivel de concept);
* Te implici, esti activ si stii sa-ti exprimi / argumentezi propriile idei si convingeri;
* Esti intr-un proces continuu de autodepasire.
Beneficii:
* Proiecte complexe si incitante;
* Pachet salarial si bonusuri atractive;
* Programul (flexibil) incepe undeva in jurul orei 11:00 (somn++, trafic–);
* Atmosfera placuta si degajata (cu mici exceptii: luni dimineata si vineri seara);
* Echipa tanara (pe bune) si statica (la 8 ore pe zi in fata monitorului numai dinamica nu e);
* Sansa de a te “razbuna” zilnic pe colegii tai utilizand “armele din dotare” (X-BOX / PC gaming sessions)
* Restul le descoperim impreuna pe parcurs.
Locatie: Bucuresti (Cartierul Primaverii)
Program: Full-Time
Dupa cum probabil ti-ai dat seama, NU cautam script-kiddies si in nici un caz NU suntem adeptii conceptului “struto-camila” / “one man show”.
Acestea fiind spuse, asteptam CV-ul tau insotit de 3 link-uri catre cele mai reprezentative proiecte realizate de tine (in cazul in care un proiect nu a fost realizat integral de tine te rugam sa specifici care au fost contributiile tale) pe adresa jobs [at] f5solutions [dot] ro (vor fi contactati numai cei care vor fi selectati pentru interviu). Studentii sunt bine-veniti.
3 comentarii
Dezvoltare client-side, Internetul romanesc

DEX, varianta ‘98, ne spune:
PROFESIONIST: (Persoana) care lucreaza intr-un anumit domeniu de activitate pe baza unei pregatiri corespunzatoare.
Se aplica insa aceasta definitie si in domeniul IT? Eu zic ca nu, din cauza acelei “pregatiri corespunzatoare”.
Definitia pleaca de la presupunerea ca daca ai o diploma de absolvire a facultatii, automat faci treaba buna. E fals, si toti stim asta. Facultatile sunt depasite, cursurile particulare sunt penibile. Adevarata “treaba buna” o fac oamenii care au ceva ani in spate, ani in care au acumulat experienta in domeniu. Dar cunostintele nu sunt totul. Ele nu te pot aduce decat pana la un punct, restul il face omul din tine.
Lucrul care face diferenta dintre amatori si profesionisti este integritatea. Respectul pentru client si pentru munca ta, respect aratat prin capacitatea de a face exact ce ai spus ca o sa faci, la calitatea promisa.
Sunt curios ce intelegeti voi prin “profesionist”.
Bonus: Sclavul IT roman: mic ghid de supravietuire
7 comentarii
Freelancing, Internetul romanesc

In sfarsit s-au publicat rezultatele sondajului organizat de A List Apart in aprilie 2007, denumit “Web Design Survey”. Se pare ca la acest sondaj au raspuns 33.000 de oameni, majoritatea barbati americani, intre 25-32 de ani, developeri cu blog :)
Link direct catre PDF-ul cu toate rezultatele. (82 de pagini)
Lectura placuta
3 comentarii
Freelancing, General

Andrei si-a relansat site-ul, la timp ca sa prinda inscrierea la Internetics :). Designul este realizat de Stefan Lucut si, desi mai neconventional, arata destul de bine iar contrastul nu mi se pare suparator. Astept sa vad cum se vor potrivi lucrurile cand se vor mai strange posturi. Singurul lucru care nu-mi place momentan este navigarea, care mi se pare putin “contraintuitiva”. Imi pare rau totusi ca ai ales sa scrii in engleza…
Spor la scris si bafta la Internetics!
PS: Nu prea m-am prins ce treaba are papagalul din stanga sus…
UPDATE: pacat…
4 comentarii
Internetul romanesc

MB Dragan lanseaza azi Blogzoner, un serviciu de localizare pe harta a blogurilor si instrument de socializare. Este o initiativa indrazneata, avand in vedere ca site-ul este orientat spre .com si nu spre .ro.
Pentru a face fata volumului imens de bloguri va fi nevoie ca site-ul sa aiba o structura si o organizare foarte bine pusa la punct. De asemenea trebuie clarificat scopul site-ului: de ce m-am inscris, ce pot face cu reteaua de prieteni/bloguri, cum ajung cat mai repede la informatiile care ma intereseaza cu adevarat?
E inca la inceput, are ceva buguri si inconsistente, si cel mai probabil nu sunt implementate nici jumatate din feature-urile dorite, dar e in directia buna. Felicitari, si bafta!
Mai multe pe Kindablog.
Pune un comentariu
Internetul romanesc

Stim cu totii cata bataie de cap ne dau bugurile lui Internet Explorer. Versiunea 6 e un dezastru pentru cei ce scriu CSS. Versiunea 7 e putin mai buna, dar are in continuare probleme. Asa ca, pentru a asigura un site cross-browser, e nevoie de testare pe amandoua.
Din pacate, daca instalezi IE7 direct pe XP, iti suprascrie versiunea 6 si nu mai ai acces la ea.
M-am interesat si am gasit o solutie destul de buna zic eu. Mie mi-a mers :).
1. Se instaleaza IE7 pentru XP SP2 de aici: IE7-WindowsXP-x86-enu.exe.
2. Se downloadeaza installerul Multiple IE. Link direct.
Acesta copiaza versiuni stand-alone pentru IE 3, 4.01, 5, 5.5, 6.
That’s it :).
13 comentarii
Dezvoltare client-side

Filip scria acum 2 ani:
Unul din lucrurile invatate este ca dezvoltarea unei aplicatii serioase cere multa disciplina personala si de echipa.
Deadline-ul pe care l-ai stabilit de comun acord cu clientul la inceputul proiectului, cand s-au discutat specificatiile, e sfant. Capacitatea ta de a te tine de el arata ce fel de om esti. Daca termenul limita este incalcat fara preaviz si fara o explicatie logica, inseamna ca tu ca freelancer nu iti cunosti limitele, nu poti evalua corect o cantitate de munca si deci intr-o afacere esti imprevizibil. Lasi o impresie proasta si sunt sanse mari ca acel client sa nu se mai intoarca. Bineinteles, discutam de situatia in care specificatiile (si in consecinta deadline-ul) nu s-au modificat pe parcursul proiectului de comun acord.
Recunosc, si eu am uneori probleme in a evalua o cantitate de munca, atat prin lipsa cat si prin adaos. Dar stiu unde vreau sa ajung si fac tot posibilul sa ajung acolo, iar pe parcurs sa produc cat mai putine daune :). Normal este ca, imediat cum simti ca nu vei putea sa termini la timp, sa anunti clientul si sa revizuiti impreuna intreaga situatie. In felul asta nici tu nu treci prin rusinea de a prezenta un nimic in “ziua cea mare”, nici clientul nu pierde eventuale investitii intr-o lansare planificata (comunicate de presa, campanii de reclame, etc).
O cale oarecum gresita e sa faci eforturi supraomenesti pentru a termina proiectul: nopti albe, ore in sir la calculator, you know the drill. Spun “oarecum” pentru ca, desi de multe ori merge, pe termen lung nu este o solutie. N-ai rezolvat adevarata problema (incapacitatea ta de a-ti cunoaste limitele), doar ai ocolit-o putin, iar pe deasupra acum mai esti si obosit. Ceea ce ma duce la al doilea subiect: burnout-ul.
Mai pe romaneste, oboseala psihica apare ca efect al activitatii intelectuale prelungite si haotice, stresante, fara un echilibru de odihna. Nu poti sa te mai concentrezi ca inainte, ideile si solutiile nu prea se grabesc sa apara, iar per total simti o lipsa de interes fata de orice… E momentul sa iei o pauza si sa privesti lucrurile in ansamblu, sa vezi ce si unde ai gresit, sa compari ceea ce faci cu ceea ce iti doresti sa faci, si sa iti faci un plan clar, punctual, pentru perioada urmatoare, de care sa te tii. O scurta vacanta in care sa te rupi complet de munca si sa iti faci ordine in ganduri e de asemenea binevenita.
Voi cum va descurcati cu deadline-urile?
Further reading:
13 comentarii
Freelancing