Caut colaborator

Am mai spus de câteva ori: am suficient de lucru pentru a lucra 16h/zi pentru următoarele 3-4 luni. Și cred că nu aș termina nici atunci. Prin urmare, caut un colaborator pentru o… colaborare (se putea altceva?) de durată.

Cerințe

html, css, js, php, ajax, asp, ruby, sql, ssd, oop, jsp, să știe să facă o cafea bună și să dea cu mopu’ între liniile de cod. Și altele.
Acum serios: am nevoie de un front end developer. Cerințe:

  • HTML/CSS curat, valid și semantic.
  • IE7+ și restul browserelor adevărate (ultima versiune)
  • jQuery la un nivel decent. Nu vreau să faci interfața de la Gmail (deși nu m-ar deranja dacă ai știi!) dar nu vreau nici să nu știi diferența dintre $.data() și .data(). Nu mă interesează dacă știi Moo, Ext, Prototype sau alte biblioteci.
  • Consideră că ai un plus dacă știi să integrezi o temă de WordPress.
  • Mai consideră că ai un plus dacă știi să lucrezi cu Git.

Colaborarea este remote, poți să lucrezi și de pe vârful Omu că nu mă deranjează, cât timp livrezi proiectele la timp.

Trimite un mail la gmail pe adresa ionutzb cu subiectul „colaborare iamntz.com” în care specifici ce știi să faci, vârsta, câteva proiecte semnificative și tariful tău.

Cum calculezi tariful / oră?

Pentru că mi-a zis cineva că nu știe cât să ceară pe oră. Dacă nu știi cât valorează timpul tău, iată o formulă simplă de calcul:

Salariu lunar dorit / ore disponibile zilnic * zile disponibile lunar = tarif/h

De exemplu, dacă vrei un salariu de 800€/lună și lucrezi 6h/zi timp de 25 zile:
800 / ( 6 * 25 ) = 5.33 € / h

Update

Momentan am găsit doi colaboratori. Dar dacă crezi că îndeplinești condițiile de mai sus, nu ezita să-mi trimiți un mail!

Fie din cauza unei setări stupide de line ending pe care nu știu eu să o fac, fie din cauza setărilor stupide a celor ce lucrează direct pe server, fie pur și simplu din cauza unui client de ftp, codul tău frumos formatat poate ajunge să arate cam așa:

function remove_menus () {

	global $menu;

	$restricted = array( 'Posts', 'Media', 'Links', 'Comments' );

	end ( $menu );

	while ( prev($menu) ){

		$value = explode( ' ',$menu[key($menu)][0] );

		if( in_array( $value[0] != NULL?$value[0]:"" , $restricted ) ){

			unset( $menu[key($menu)] );

		}

	}

}

add_action('admin_menu', 'remove_menus');

(btw, funcția asta șterge anumite elemente din meniul de admin al WordPress)

Cum scapi de spatiile extra? Dacă ai extrem de mult timp liber, poți șterge fiecare spațiu, de mână. Dar ce faci dacă ai un fișier cu mii de linii? Chiar ești dispus să pierzi o zi pentru a formata codul?

REGEX!

Expresiile regulate (Regex) sunt o invenție super tare ce îți permit să faci operațiuni într-un text pe baza unui pattern (șablon sună mult prea… ciudat). Pattern-ul nostru este reprezentat de două „enter” (unul legitim și unul inserat abuziv de setarea tâmpă de care am pomenit mai sus).

Expresiile regulate au anumite „scurtături” pentru caractere invizibile. Căci un rând nou este reprezentat de (cel puțin) un caracter. Și, în funcție de setările editorului tău, un rând nou poate fi reprezentat fie de CR, fie de LF, fie de ambele (CRLF). Ambele denumiri venind din epoca mașinilor de scris (Cariage Return respectiv Line Feed).

În limbajul Regex, asta se traduce prin \r, \n, respectiv \r\n (sau \n\r)

Știm CE să căutăm. CUM căutăm?

Majoritatea (toate?) editoarelor de cod au o funcție ce-ți permite să cauți (și să înlocuiești) pe baza minunăției sus-numite.

Prin urmare, cauți în cod după două linii noi – \n\n – și înlocuiești cu o singură linie – \n. În funcție de line-ending-ul din editorul tău de suflet, s-ar putea să fie nevoie să înlocuiești \n fie cu \r fie cu \r\n.

Apeși pe „Replace All” (sau echivalentul din editorul tău) și… Gata. Ai un cod frumos formatat:

function remove_menus () {
	global $menu;
	$restricted = array( 'Posts', 'Media', 'Links', 'Comments' );
	end ( $menu );
	while ( prev($menu) ){
		$value = explode( ' ',$menu[key($menu)][0] );
		if( in_array( $value[0] != NULL?$value[0]:"" , $restricted ) ){
			unset( $menu[key($menu)] );
		}
	}
}
add_action('admin_menu', 'remove_menus');

Quick tip

În loc de \n\n poți folosi și \n{2,2}. În Regex, {x,y} se numește interval și poți defini câte caractere să caute (minim/maxim). Omiterea celui de-al doilea parametru înseamnă că nu există limită superioară. De exemplu, o căutare de genul \n{2,} va căuta cel puțin două rânduri noi consecutive.

Foarte util în cazul în care vrei să „cureți” un document care a fost formatat aiurea de la început.

Întrebarea e simplă. Dacă nu te regăsești în sondaj, lasă un comentariu.

Ce apreciezi la site-ul iamntz.com ?

View Results

Loading ... Loading ...

Chiar dacă te regăsești în sondaj, lasă un comentariu în care detaliezi (eg: „sunt interesat de tutorialele despre…”)

Scopul acestui sondaj este acela de a-mi face o idee despre domeniul pe care ar trebui să îmi îndrept atenția mai mult (tutoriale, link-uri, articole, altceva).

  1. get_permalink memory usage issues
  2. Introduction to Custom Hooks and Pluggable Functions
  3. Patterns For Large-Scale JavaScript Application Architecture
  4. JavaScript and DOM API fuss
  5. The Ultimate Collection of HTML5 Tutorials and Techniques
  6. Learn Vim Progressively
  7. The Differences Between Mercurial and Git
  8. Should Web Designers Code?

Ramona m-a inspirat să scriu ce am învățat eu în vreo patru ani de freelancing. Iată:

  • Că îți poți alege clienții și/sau proiectele;
  • nu lucrezi pentru tine;
  • Că timpul este foarte limitat. Și că 24h nu sunt suficiente.
  • Că e bine să nu lucrezi exclusiv pentru un client din mai multe motive:
    • Te plafonezi și te plictisești. De cele mai multe ori un client îți oferă același tip de proiecte. Am trei clienți constanți pentru care fac teme de WordPress, HTML chior și aplicații web pentru iOS. Cât de tare crezi că mă plictisesc?
    • O lună proastă pentru singurul tău client înseamnă o lună proastă pentru tine. Dacă omu’ are un accident și lipsește mai mult de o lună (sau pur și simplu întârzie plata; se întâmplă) ai o problemă.
    • Dezvoltarea unei relații de încredere cu un client cere timp. Să vezi ce amuzant este să trebuiască să faci modificări pe un server și să nu ți se dea acces pentru că…
    • Ai deveni angajat fără să-ți dai seama!
  • Că NU îți faci propriul tău program. Cine îți zice asta minte cu nerușinare. Cele 8h/zi sunt o utopie. Poți să pleci în vacanță (la modul deconectare totală, nu să te duci să lucrezi ca disperatu’) când vrei? Da, dar când te întorci trebuie să recuperezi.
  • Că e bine să citești cât mai multe chestii și să fii la curent cu tot ce mișcă din domeniul tău de activitate.
  • Că clienții români nu sunt o afacere bună pe termen lung.

Ești freelancer? Tu ce sfaturi ai?

  1. Avoiding The Quirks: Lessons From A JavaScript Code Review;
  2. IE6 a făcut 10 ani! Eu zic că e suficient…
  3. jQuery Performance Tips and Tricks;
  4. Line-height in input fields
  5. Improve Responsive Designs & Re-Use Images With CSS3′s Background-Size Property;
  6. Event delegation for touch events in JavaScript;
  7. WordPress Initialization (cred că acest link a mai fost pus, dar nu sunt foarte sigur);
  8. Getting rusty – we need new best practices for a different development world;
  9. Top 10 Easy Ways to Squeeze Optimum Productivity from Your Day;
  10. The Programmiss and Male Services.

I’ve seen several premium WordPress themes that used different kinds of featured sliders for home page. Is nothing wrong here, it’s a good way of putting important thing first. What it bother me is this silly thing: to add an article to the feature slider you have to use a certain tag. Or worse, a certain category! That’s SILLY and very not user friendly (don’t forget that many editors are very non-technics!).

I developed several WP theme over the last two years and I used to make things in the very same way. Until I had few complains from final clients (sometimes I work for the middle man) that the „tag” way is very user-not-too-friendly. So I had to find another way of doing this.

Custom Fields way

The most easy way of having a way to sort things up is the use of custom fields. So you can add a custom field, named let’s say… featured with the value true. Or something similar. This way you can add some description too, a different title and other goodies.

Custom fields issues

Even if custom fields sounds the right choice, there might be a small problem. Let’s say your awesome blog has only one featured post per month (or even week). As a very busy man, you will probably forget if the custom field was feature or featured. And the value was true, yes or just 1 ? Hmmm…

The solution is…

Custom Fields with Write Panels!

How about this: a very neat panel with a checkbox? That’s all you will need. The whole thing is just one click away!

Is a very easy way of doing the whole thing and very easy to implement.

The whole code is here: Read the rest of this entry »

Zoso arată, mai în glumă, mai în serios, cum poți face orice site o aplicatie pe device-ul tău iOS. Dar asta din punctul de vedere al utilizatorului.

Ca owner de site ar fi bine să faci două chestii:

1. Launch Icon

<link rel="apple-touch-icon" href="/touch-icon-iphone.png" />
<link rel="apple-touch-icon" sizes="72x72" href="/touch-icon-ipad.png" />
<link rel="apple-touch-icon" sizes="114x114" href="/touch-icon-iphone4.png" />

Long story short pui o imagine în public_html (sau echivalentul) pentru fiecare format ( 57×57 – default, 72×72 – ipad și 114×114 – iphone 4 / retina display )

Mai multe detalii aici.

2. Browser Bar

<meta name="apple-mobile-web-app-capable" content="yes">

Mai multe detalii aici.

Enjoy!

  1. O discuție interesantă despre camelCase vs underscore_case. Personal prefer camelCase pentru CSS/JS și underscore pentru PHP, mai ales că 99% din codul meu PHP este pentru WordPress iar WP face uneori nazuri la funcții numite astfel; am aflat asta după ce m-am scărpinat în creștetul capului mai bine de un sfert de ceas încercând să înțeleg de ce nu merge ceva. Iar funcțiile PHP sunt caseInsEnsiTive!
  2. To write good code, you sometimes have to write bad code.
  3. The Inside Secrets of Logo Development.
  4. JavaScript Programming Style and Your Brain
  5. Sprite3D.js
  6. Box2dweb
  7. spin.js (ca un fel de continuare a discuției de aici)
  8. Te-ai întrebat vreodată cum funcționează un browser?
  9. The perfect web design app… and why it doesn’t exist

M-am săturat de câte ori am văzut coduri de genul:

$.get( 'ajax.php?foo=' + bar + '&baz=' + baz + '&par=' + param' , callback );

Sau, varianta mai lungă:

$.ajax({
	url : 'ajax.php?foo=' + bar + '&baz=' + baz + '&par=' + param',
	success : callback
});

Dragii moșului, varianta de mai sus, dincolo de faptul că arată oribil, este foarte greu de citit (respectiv făcut debug). Iată o variantă mult mai simplă: Read the rest of this entry »