Cum să-ți faci un CV bun?

Am fost întrebat – de mai multe ori în ultima perioadă – despre cum se face un CV decent. Cum cea mai potrivită persoană care îți poate da sfaturi despre alcătuirea unui CV este un… freelancer, m-am gândit să-ți împărtășesc câteva sfaturi de bun simț, adesea uitate de mulți, despre ce (nu) ar trebui să conțină un CV. Tot ce scrie mai jos se aplică unui CV din aproape orice domeniu, chiar dacă pe alocuri pare că mă adresez celor din IT/dev.

Lungimea CV-ului

Pune-te un pic în locul angajatorului: dacă ar trebui să citești 500 CV-uri, câtă plăcere îți fac cele de două pagini? Dar trei pagini? Cu cât ai CV-ul mai lung, cu atât ai șanse mai mari să nu fie citit!

Studii

Începi cu ultima școală absolvită (facultate, master etc). Termini cu penultima școală absolvită. Știu, ai terminat facultatea dar nu ți-ai dat licența pentru că [insert reason]. Hai să-ți zic un secret: dacă nu ai diplomă, nu ai absolvit nimic. E atât de simplu. Dacă scrii în CV că nu ți-ai dat licența (din varii motive, este irelevant), cuvântul ce te va caracteriza în ochii angajatorului este delăsător. Cine vrea angajați delăsători?

Nu contează ce școală generală ai făcut, ce grădiniță, școli profesionale etc, decât dacă au legătură cu postul la care aplici. Ai făcut școala de bucătari și aplici pentru un post de strungar? Ce relevanță are diploma ta de bucătar? Read the rest of this entry »

  1. Storage technologies behind Facebook messages.
  2. Reusable Code.
  3. 16 întrebări alese despre user experience pe Quora. (dacă vrea cineva invitații pe quora, să lase un comentariu cu un email valid)
  4. Sproutcore 2.0 + jQuery UI = love.
  5. Linus Torvalds vorbește despre Linux și despre cei 20 ani care au trecut de la prima versiune. „Acțiunea” începe de la minutul 9.
  6. Chiar dacă e vechi (și am impresia că l-am mai pus pe aici), uite-l tot pe Linus Torvalds vorbind despre Git.
  7. Și dacă tot am adus vorba, iată (încă) o introducere în Git
  8. Productivity & performance hacks. Pentru că fiecare din noi e leneș în felul lui și ar vrea ceva îmbunătățiri în stilul de lucru. Nu? :D
  9. Privește câtă energie are Gary Vaynerchuk. Apoi ascultă și de unde îi vine atâta energie!
  10. Atunci când vrei ceva cu adevărat, NIMIC nu îți poate sta în cale. Iată cum Mircea Goia a reușit să facă trecerea de la miner la programator. Kudos! (bonus)
  11. Vechi, dar funny: Ce faci dacă cineva îți fură laptopul?

AJAX activity indicator

Ai avut vreodată nevoie să arăți un indicator al activității AJAX (cum este în gmail, de exemplu)? Sigur că ai avut nevoie, orice request spre un server trebuie să inștiințeze utilizatorul că se întâmplă ceva! Iată cum poți face acest lucru cu jQuery.

Mark-up

Aici e partea cool, că nu ai nevoie de niciun mark-up. Totul se întâmplă în JS și CSS. Dar de dragul exemplului…

	<body>
		<div id="ajaxIndicator">Loading...</div>
		....

JavaScript

Imediat după ce incluzi jQuery, bagi și bucățica asta de cod: Read the rest of this entry »

Înainte să fac front end am încercat – printre altele – și PHP. Prin urmare, când am început cu JS, mi-a fost relativ ușor să înțeleg sintaxa. Ce nu am înțeles pe moment au fost funcțiile. Dacă în PHP puteam face:

function foo($bar = 0){ // dacă nu este specificată nici o valoare, $bar are valoarea 0

}

În JS nu știam nici o modalitate de a pune o valoare implicită pentru parametri trimiși funcțiilor. Cu toate astea, soluția este destul de simplă:

function foo(bar){
var bar = bar || 0;

}

Mai mulți parametri

Ok, dacă am stabilit cum să setăm o valoare implicită, hai să vedem cum facem dacă avem mai mulți parametri.

Soluția clasică ar fi: Read the rest of this entry »

  1. Google renunță la suportul pentru IE7. Pe lângă IE7 s-a renunțat și la versiunile vechi de Safari și Firefox.
  2. Că tot a fost un buzz (sâc!) mare cu butonul de +1 de la google, iată că amatorii de statistici pot afla cum să urmărească evoluția acestor minunate butoane. Vezi aici cum.
  3. A fost lansat Modernizr 2.0. Această bibliotecă face doar detecție pentru anumite features, fără să afecteze cu nimic (in)capacitățile browserelor. Menționez asta pentru că am văzut suficienți noobs care vor să folosească Modernizr pentru a face colțuri rotunjite. :D
  4. Nu are prea mare legătură cu web dev, dar ne-a fost arătat un demo al Windows 8. Partea interesantă este că poți face widget-uri drăguțe folosind HTML5/CSS/JS. Ar mai fi și partea cu primul OS de la Microsoft „desenat” pentru touch screens. Probabil și-au dat seama că au promovat conceptul de tablet pc mult prea mult (de prin 2002-2003 tot o ard cu tabletele) fără a avea un sistem de operare prea grozav la asta.
  5. Care este cel mai important aspect al programării?
  6. Am renunțat la E-texteditor în favoarea Sublime Text. Motivul principal ar fi că vreo jumătate de an nu a mai ieșit niciun update pentru E, iar problemele editorului m-au făcut să renunț. Mai ales că Sublime copiază 95% din facilitățile E. Restul de 5% este reprezentat de bug-uri și modulul de FTP.
  1. Dacă în urmă cu două săptămâni spuneam că Sprout Core a făcut un pas uriaș cu un installer, azi am aflat că Sprout Core 2.0 va fi… HTML! Asta înseamnă că nu va trebui să mai scrii zeci de obiecte JS și că nu va mai trebui să instalezi un server pentru a testa o aplicație.
  2. Introducere în Web Workers.
  3. Știai ce face operatorul void în JS ? Dacă nu, citește aici.
  4. Te-ai întrebat vreodată cum se joacă „băieții mari” cu codul? Gen Facebook? Dacă da, Chuck Rossi explică aici cum se întâmplă toată operațiunile de deploy.
  5. Cred că unul din motivele pentru care nu mi-a plăcut PHP a fost lipsa unei uniformități a funcțiilor interne. Unele funcții sunt cu underscor, altele fără și tot așa. Alții însă au fost deranjați de mult mai multe lucruri și au pus la cale o listă serioasă cu astfel de… probleme. Și aparent nu au fost singurii.

iPad. Magic.

Toată lumea știe că iPadul este magic. Nu? Well… Nu prea. iPad pare a fi un fel de IE6. În plus, zilele astea am lucrat la un soi de webapp pentru ipad. Câteva din problemele întâlnite:

  • Tag-ul video nu suportă toate atributele standard. loop și autoplay sunt ignorate cu grație, punându-te în imposibilitatea de a face autoplay la un film. Da, știu că e o măsură a Apple de a preveni traficul exagerat, dar ar trebui să-și dea seama că totul se întâmplă nu doar pe Wifi ci și în aceeași clasă de ip-uri (C) !
  • Pentru a preveni zoom-ul paginilor (ori cu dublu click ori , poți adăuga următoarea secvență de cod în head:
    <meta name="viewport" content="width=device-width, user-scalable=no" />
    

    Pentru a preveni „tragerea” paginii (utilizatorii de iPad știu despre ce vorbesc), adaugi linia asta în js:

    document.addEventListener('touchmove', function(e){ e.preventDefault(); }, false);

    Totul merge minunat, doar că, dacă ai vreun film (embeduit cu video, desigur), setările de mai sus au efect… zero. Dublu click pe film face zoom la pagină, dacă tragi de film, se mișcă toată pagina șamd.

  • Ultima versiune de iOS a adus un motor JS nou. Nitro, pe numele lui. Mai rapid, mai curat, mai plăcut uscat. Doar că, un simplu shortcut în springboard (add to home screen) dezactivează acest motor de câteva ori mai rapid decât cel vechi și folosește… vechiul engine. Măsuri de… securitate.

Astea sunt doar problemele mai.. grave. Ar mai fi chestiuțe rezolvate, dar despre ele cu altă ocazie.

Atunci când scrii o aplicație AJAX, se întâmplă de multe ori să fii nevoit să faci update doar unor anumite părți din site.

Să presupunem că ai un site de social networking în site care arată undeva în header numărul de mesaje trimise, nickname și… ce să mai fie? Ah, și numărul de like-uri date. Cât de util este să ai numărul de mesaje trimise sau numărul de like-uri oferite este mai puțin important, dar, de dragul exemplului, să zicem că e o chestiune de viață și de moarte. :D

Și ca să nu folosim o limbă de lemn, facem un header frumos care să ne zică:

<header>
	<div>Bine ai venit, Ionut. Ai 23 mesaje trimise și 598 like-uri!</div>
</header>

Ok, dacă tot am presupus atâtea, să mai presupunem că intri frumușel în setări să schimbi numele. Nu vreau să mai fiu Ionut, vreau să fiu Bogdan. Cum facem asta fără refresh?

A doua situație (presupusă și asta): trimiți un mesaj. Trimiterea mesajului nu face refresh la pagină, deci ar trebui să actualizăm numărul de mesaje trimise afișat în header, nu? Read the rest of this entry »

Aplicații web pe localhost

Dacă ești freelancer, probabil ești pus în situația în care vrei să-i arăți clientului tău ce ai lucrat. Cum urcatul pe un ftp este prea enervant pentru a fi folosit non stop, soluția cea mai la îndemână este un server http instalat pe calculatorul propriu.

Deci avem prima problemă. A doua problemă ar fi că RDS nu îmi dă un IP fix, existând șansa ca din momentul în care dau un link (format din IP) cuiva pe mail, până verifică link-ul, ip-ul să nu mai corespundă cu PC meu.

Soluția găsită de mine constă în utilizarea serviciului dyndns. Se instalează o aplicație pe pc (care trimite ip-ul tău spre serverul lor) și… cam asta e. Ai domenii de forma numele_tau.dyndns.org in no time, cum spune românu’. Poți avea și subdomenii (subdomeniu.numele_tau.dyndns.org), dacă știi cum să le faci.

Am router!

Și eu! Dar problema asta se rezolvă rapid printr-un port forwarding, dar generează altă problemă: nu poți accesa link-ul! (cred că se intră într-un loop). Have no fear, avem leac și pentru asta! Fișierul hosts. Apasă Win+R (dacă nu ești pe windows… well… te descurci tu) și scrie: notepad c:\windows\system32\drivers\etc\hosts.

La sfârșitul documentului scrii următoarele:

127.0.0.1	numele_tau.dyndns.org
127.0.0.1	subdomeniu1.numele_tau.dyndns.org
127.0.0.1	subdomeniu2.numele_tau.dyndns.org
[....]

Nu ține apache (sau ce server folosești) pe portul 80. Iar asta din două motive: 1) skype are obiceiul să ocupe acest port; 2) oricine poate nimeri pe hostul tău.

Atenție! După fiecare adăugare a unui subdomeniu în vhosts este nevoie să modifici fișierul hosts. Altfel nu vei putea accesa acel subdomeniu.

Cum săptămâna asta am fost foarte ocupat cu sfârșitul lumii (dar Tata mi-a tras-o. Din nou), nu te voi delecta cu foarte multe link-uri.

  1. Avem jQuery UI 1.8.13 și jQuery UI 1.9 milestone 5
  2. Getting Better at JavaScript
  3. AJAX File uploader
  4. Rails AntiPatterns.
  5. Rails 3.1 RC1

Săptămâna viitoare voi încerca să mă revanșez cu mai multe link-uri.