<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Staicu Ionuţ-Bogdan</title>
	
	<link>http://www.iamntz.com</link>
	<description>the Frontend Developer</description>
	<lastBuildDate>Sat, 12 May 2012 12:10:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TheFrontendDeveloper" /><feedburner:info uri="thefrontenddeveloper" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Tu cum îți testezi codul?</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/q5ZKCZGLVKw/</link>
		<comments>http://www.iamntz.com/3180/frontend-developer/tu-cum-iti-testezi-codul/#comments</comments>
		<pubDate>Sat, 12 May 2012 10:54:20 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Workflow]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3180</guid>
		<description><![CDATA[În ultimele zile am devenit din ce în ce mai interesant de unit testing (UT) și de test driven development (TDD). În principiu, pentru că mă încântă ideea de a scrie cod fără să trebuiască să dau ctrl+r în browser după care cinci click-uri, după care mai știu eu ce minune ce trebuie să-mi intre [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3180/frontend-developer/tu-cum-iti-testezi-codul/'>Tu cum îți testezi codul?</a>. <br/>
	<a href='http://www.iamntz.com/3180/frontend-developer/tu-cum-iti-testezi-codul/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>În ultimele zile am devenit din ce în ce mai interesant de unit testing (UT) și de test driven development (TDD). În principiu, pentru că mă încântă ideea de a scrie cod fără să trebuiască să dau <code>ctrl+r</code> în browser după care cinci click-uri, după care mai știu eu ce minune ce trebuie să-mi intre în reflex. Am început să sap după resurse de TDD în JavaScript, am început să înțeleg cum se face (momentan parțial), am înțeles beneficiile șamd. Încă învăț, dar în momentul în care înțeleg totul cum trebuie, voi scrie un articol pe blog <img src='http://www.iamntz.com/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Am vorbit cu mai mulți programatori care nu au făcut niciodată UT iar majoritatea nu au făcut pentru că au auzit ei (sau au dedus) că UT presupune a scrie și mai mult cod. Unul mi-a zis că nu face UT pentru că a auzit că se face doar la proiectele mari și că oricum nu știe nici un alt programator care face. Yup, motive bune <img src='http://www.iamntz.com/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' />  <span id="more-3180"></span></p>
<p>La întrebarea „Faci unit testing la cod? Dacă da, de ce? Dacă nu, de ce?” pusă <a href="https://twitter.com/#!/nvartolomei/status/201253576327184385">pe twitter</a> am primit un singur <a href="https://twitter.com/#!/nvartolomei/status/201253576327184385">răspuns</a>:</p>
<blockquote><p>da, bullet proof, write once and forget about headaches.</p></blockquote>
<p>Așadar, sunt foarte curios: faci UT? De ce da, de ce nu? În ce limbaj programezi?</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3180/frontend-developer/tu-cum-iti-testezi-codul/'>Tu cum îți testezi codul?</a>. <br/>
	<a href='http://www.iamntz.com/3180/frontend-developer/tu-cum-iti-testezi-codul/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/q5ZKCZGLVKw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3180/frontend-developer/tu-cum-iti-testezi-codul/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3180/frontend-developer/tu-cum-iti-testezi-codul/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Cum înveți să programezi și cum te perfecționezi?</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/GS8tGx0yQJk/</link>
		<comments>http://www.iamntz.com/3173/frontend-developer/cum-inveti-sa-programezi-si-cum-te-perfectionezi/#comments</comments>
		<pubDate>Mon, 07 May 2012 14:11:23 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Motivational Bullshits]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3173</guid>
		<description><![CDATA[Probabil mulți au încercat să învețe sa programeze. Multora nu le-a ieșit nimic în prima zi. Sau în a doua. Sau în a treia. Și au renunțat. Înveți așa: Just because I﻿ can&#8217;t do it today, doesn&#8217;t mean i&#8217;m not gonna be able to do it someday. Te perfecționezi așa: If you keep on doing [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3173/frontend-developer/cum-inveti-sa-programezi-si-cum-te-perfectionezi/'>Cum înveți să programezi și cum te perfecționezi?</a>. <br/>
	<a href='http://www.iamntz.com/3173/frontend-developer/cum-inveti-sa-programezi-si-cum-te-perfectionezi/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Probabil mulți au încercat să învețe sa programeze.</p>
<p>Multora nu le-a ieșit nimic în prima zi. Sau în a doua. Sau în a treia. Și au renunțat.</p>
<p>Înveți așa:</p>
<blockquote><p>Just because I﻿ can&#8217;t do it today, doesn&#8217;t mean i&#8217;m not gonna be able to do it someday.</p></blockquote>
<p>Te perfecționezi așa:</p>
<blockquote><p>If you keep on doing what you&#8217;ve always done, you&#8217;ll keep on being what you&#8217;ve always been.</p></blockquote>
<p><span id="more-3173"></span></p>
<p>Primul citat este de aici:</p>
<p><iframe width="700" height="394" src="http://www.youtube.com/embed/qX9FSZJu448?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Al doilea citat este din <a href="http://www.imdb.com/title/tt1867093/">The Samaritan</a>.</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3173/frontend-developer/cum-inveti-sa-programezi-si-cum-te-perfectionezi/'>Cum înveți să programezi și cum te perfecționezi?</a>. <br/>
	<a href='http://www.iamntz.com/3173/frontend-developer/cum-inveti-sa-programezi-si-cum-te-perfectionezi/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/GS8tGx0yQJk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3173/frontend-developer/cum-inveti-sa-programezi-si-cum-te-perfectionezi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3173/frontend-developer/cum-inveti-sa-programezi-si-cum-te-perfectionezi/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>CSS keyframe based JavaScript events</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/JZQ_u9v00WA/</link>
		<comments>http://www.iamntz.com/3157/frontend-developer/css-keyframe-based-events/#comments</comments>
		<pubDate>Sun, 06 May 2012 17:04:25 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery Plugins]]></category>
		<category><![CDATA[jQuery plugins]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3157</guid>
		<description><![CDATA[Recently I had to build a combined animation: when first animation is at 5%, the next animation should start. Well, the problem is that the current doesn&#8217;t have any events to track css animation keyframe progress (other than start, end and iteration/loop). So, with the newly discovered &#8211; by me &#8211; requestAnimationFrame, I started to [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3157/frontend-developer/css-keyframe-based-events/'>CSS keyframe based JavaScript events</a>. <br/>
	<a href='http://www.iamntz.com/3157/frontend-developer/css-keyframe-based-events/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Recently I had to build a combined <acronym title="Cascading Style Sheet - http://w3.org">CSS</acronym> animation: when first animation is at 5%, the next animation should start. Well, the problem is that the current <acronym title="Javascript - http://w3.org">JS</acronym> <acronym title="Application Programming Interface">API</acronym> doesn&#8217;t have any events to track css animation keyframe progress (other than start, end and iteration/loop). So, with the newly discovered &#8211; by me &#8211; requestAnimationFrame, I started to fool around. This is what I&#8217;ve got (and tested ONLY on Chrome): <span id="more-3157"></span></p>
<p><div id="gist-2623158" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">$</span><span class="p">,</span> <span class="nb">window</span><span class="p">,</span> <span class="nb">document</span><span class="p">){</span></div><div class='line' id='LC2'>&nbsp;&nbsp;<span class="kd">function</span> <span class="nx">createEvent</span><span class="p">(</span> <span class="nx">element</span><span class="p">,</span> <span class="nx">animationKey</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">event</span>           <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createEvent</span><span class="p">(</span><span class="s2">&quot;Event&quot;</span><span class="p">);</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">event</span><span class="p">.</span><span class="nx">initEvent</span><span class="p">(</span><span class="s2">&quot;keyframe&quot;</span><span class="p">,</span> <span class="kc">true</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">event</span><span class="p">.</span><span class="nx">animationName</span> <span class="o">=</span> <span class="s1">&#39;keyframe&#39;</span><span class="p">;</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">event</span><span class="p">.</span><span class="nx">keyText</span>       <span class="o">=</span> <span class="s1">&#39;keyframe&#39;</span><span class="p">;</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">event</span><span class="p">.</span><span class="nx">percent</span>       <span class="o">=</span> <span class="nx">animationKey</span><span class="p">;</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">element</span><span class="p">.</span><span class="nx">dispatchEvent</span><span class="p">(</span><span class="nx">event</span><span class="p">);</span></div><div class='line' id='LC9'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC10'><br/></div><div class='line' id='LC11'>&nbsp;&nbsp;<span class="nx">$</span><span class="p">.</span><span class="nx">fn</span><span class="p">.</span><span class="nx">keyframe</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">index</span><span class="p">,</span> <span class="nx">elem</span><span class="p">){</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">reqAniFrame</span><span class="p">,</span> <span class="nx">startTime</span><span class="p">,</span> <span class="nx">endTime</span><span class="p">,</span> <span class="nx">duration</span><span class="p">,</span> </div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">keyframesHistory</span> <span class="o">=</span> <span class="p">{},</span> <span class="c1">// some kind of buffer</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">cycle</span>            <span class="o">=</span> <span class="mi">1</span><span class="p">;</span></div><div class='line' id='LC16'><br/></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">function</span> <span class="nx">keyframes</span> <span class="p">(</span> <span class="nx">timestamp</span> <span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">key</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">(</span> <span class="p">(</span> <span class="nx">timestamp</span> <span class="o">-</span> <span class="nx">startTime</span> <span class="p">)</span> <span class="o">/</span> <span class="nx">duration</span> <span class="o">*</span> <span class="mi">100</span> <span class="p">);</span></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="o">!</span><span class="nx">keyframesHistory</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">&amp;&amp;</span> <span class="p">(</span> <span class="p">(</span> <span class="p">(</span> <span class="nx">key</span> <span class="o">%</span> <span class="mi">5</span> <span class="p">)</span> <span class="o">+</span><span class="mi">5</span> <span class="p">)</span> <span class="o">%</span> <span class="mi">5</span> <span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="p">){</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">keyframesHistory</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">createEvent</span><span class="p">(</span> <span class="nx">elem</span><span class="p">,</span> <span class="nx">key</span> <span class="p">)</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC24'><br/></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">cycle</span> <span class="o">=</span> <span class="nx">cycle</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">reqAniFrame</span> <span class="o">=</span> <span class="nb">window</span><span class="p">.</span><span class="nx">requestAnimationFrame</span><span class="p">(</span> <span class="nx">keyframes</span> <span class="p">);</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">};</span><span class="c1">//keyframes</span></div><div class='line' id='LC28'><br/></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">$</span><span class="p">(</span><span class="nx">elem</span><span class="p">)</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="nx">unbind</span><span class="p">(</span> <span class="s1">&#39;webkitAnimationEnd.ntz webkitAnimationStart.ntz&#39;</span> <span class="p">)</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="nx">bind</span><span class="p">(</span> <span class="s1">&#39;webkitAnimationEnd.ntz webkitAnimationStart.ntz&#39;</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">e</span><span class="p">){</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">t</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">);</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="nx">e</span><span class="p">.</span><span class="nx">type</span> <span class="o">==</span> <span class="s1">&#39;webkitAnimationStart&#39;</span> <span class="p">){</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">allStyles</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">defaultView</span><span class="p">.</span><span class="nx">getComputedStyle</span><span class="p">(</span> <span class="nx">t</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="kc">null</span> <span class="p">),</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">found</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span></div><div class='line' id='LC36'><br/></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span><span class="p">(</span> <span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">len</span> <span class="o">=</span> <span class="nx">allStyles</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">len</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">){</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="nx">found</span> <span class="p">)</span> <span class="p">{</span> <span class="k">continue</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="nx">allStyles</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">search</span><span class="p">(</span><span class="s2">&quot;-animation-duration&quot;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span> <span class="p">){</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">duration</span> <span class="o">=</span> <span class="mi">1000</span> <span class="o">*</span> <span class="nb">parseFloat</span><span class="p">(</span> <span class="nx">allStyles</span><span class="p">.</span><span class="nx">getPropertyValue</span><span class="p">(</span> <span class="nx">allStyles</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">found</span>    <span class="o">=</span> <span class="kc">true</span><span class="p">;</span></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC44'><br/></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">startTime</span>   <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">().</span><span class="nx">getTime</span><span class="p">();</span></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">endTime</span>     <span class="o">=</span> <span class="nx">startTime</span><span class="o">+</span><span class="nx">duration</span><span class="p">;</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">reqAniFrame</span> <span class="o">=</span> <span class="nb">window</span><span class="p">.</span><span class="nx">requestAnimationFrame</span><span class="p">(</span> <span class="nx">keyframes</span> <span class="p">);</span></div><div class='line' id='LC48'><br/></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span><span class="k">else</span><span class="p">{</span></div><div class='line' id='LC50'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">window</span><span class="p">.</span><span class="nx">cancelAnimationFrame</span><span class="p">(</span> <span class="nx">reqAniFrame</span> <span class="p">);</span></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC52'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">});</span></div><div class='line' id='LC53'><br/></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">});</span></div><div class='line' id='LC55'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC56'><span class="p">})(</span><span class="nx">jQuery</span><span class="p">,</span> <span class="nb">window</span><span class="p">,</span> <span class="nb">document</span><span class="p">);</span></div><div class='line' id='LC57'><br/></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/2623158/b107d1e1ffde3af96236cf2736f91a4aea01f868/gistfile1.js" style="float:right;">view raw</a>
            <a href="https://gist.github.com/2623158#file_gistfile1.js" style="float:right;margin-right:10px;color:#666">gistfile1.js</a>
            <a href="https://gist.github.com/2623158">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>
<br />
<a href="https://github.com/iamntz/jQuery-keyframe">Github repo</a>.</p>
<p>Of course, you need a <a href="https://gist.github.com/1579671">requestAnimationFrame</a> shim. Good, how to use?</p>
<h4>CSS keyframes</h4>
<p>CSS3 added some kind of custom animation. Instead of having linear animation, you can control various behavior based on animation progress:</p>
<pre class="brush: css; title: ; notranslate">
.ani {
    -webkit-animation-duration: 2s;
          animation-duration: 2s;
  -webkit-animation-fill-mode: both;
          animation-fill-mode: both;
}

@-webkit-keyframes foo {
  0% { left:0; }
  25% { left: 150px; }
  100% { left:500px; }
}

.foo {
  -webkit-animation-name: foo;
  animation-name: foo;
}
</pre>
<p>To animate an element, you just need to add both <code>.ani</code> and <code>.foo</code>. Nothing big, right? The script I did detects current keyframe and trigger an event.</p>
<h4>JavaScript Events</h4>
<p>As I said, JS provides only three events: animationEnd, animationStart and animationIteration (you can read more about this <a href="https://developer.mozilla.org/en/CSS/CSS_animations">here</a>). you can add an extra keyframe event, just like so:</p>
<div id="gist-2623199" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#myElement&#39;</span><span class="p">).</span><span class="nx">live</span><span class="p">(</span><span class="s1">&#39;webkitAnimationEnd webkitAnimationStart keyframe&#39;</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">e</span><span class="p">){</span></div><div class='line' id='LC2'>&nbsp;&nbsp;<span class="k">switch</span><span class="p">(</span> <span class="nx">e</span><span class="p">.</span><span class="nx">type</span> <span class="p">){</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="s1">&#39;webkitAnimationEnd&#39;</span><span class="o">:</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// end event</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="s1">&#39;webkitAnimationStart&#39;</span><span class="o">:</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// start event</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="s1">&#39;keyframe&#39;</span><span class="o">:</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// trigger event</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">percent</span><span class="p">);</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC13'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC14'><span class="p">});</span></div><div class='line' id='LC15'><span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#myElement&#39;</span><span class="p">).</span><span class="nx">keyframe</span><span class="p">();</span> <span class="c1">// plugin init</span></div><div class='line' id='LC16'><br/></div><div class='line' id='LC17'><span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#myElement&#39;</span><span class="p">).</span><span class="nx">addClass</span><span class="p">(</span><span class="s1">&#39;ani foo&#39;</span><span class="p">);</span> <span class="c1">// css animation</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/2623199/af6e45ca2f46332b2d3837ca02e5db9b2f2a97b5/gistfile1.js" style="float:right;">view raw</a>
            <a href="https://gist.github.com/2623199#file_gistfile1.js" style="float:right;margin-right:10px;color:#666">gistfile1.js</a>
            <a href="https://gist.github.com/2623199">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>That&#8217;s it!</p>
<h4>Issues?</h4>
<p>Currently, the script is only detects 5% intervals. So if you need a keyframe at 82%&#8230; Good luck!<br />
Also, the script doesn&#8217;t always trigger 100% keyframe. But since we already have animationEnd event, this is not a big problem, no? <img src='http://www.iamntz.com/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="https://github.com/iamntz/jQuery-keyframe">Github repo</a>.</p>
<h4>Demo</h4>
<p>I was lucky enough to need this to work only on chrome. Therefore the demo will only work on chrome. Feel free to fork my gist and improve</p>
<p><iframe style="width: 100%; height: 150px" src="http://jsfiddle.net/iamntz/PUcbu/4/embedded/result/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3157/frontend-developer/css-keyframe-based-events/'>CSS keyframe based JavaScript events</a>. <br/>
	<a href='http://www.iamntz.com/3157/frontend-developer/css-keyframe-based-events/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/JZQ_u9v00WA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3157/frontend-developer/css-keyframe-based-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3157/frontend-developer/css-keyframe-based-events/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>QR Code autentic</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/rFkMVeKWV9c/</link>
		<comments>http://www.iamntz.com/3149/frontend-developer/qr-code-autentic/#comments</comments>
		<pubDate>Sat, 05 May 2012 17:47:48 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[campanii]]></category>
		<category><![CDATA[Random Thoughts]]></category>
		<category><![CDATA[rom]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3149</guid>
		<description><![CDATA[Azi am luat noul rom cu firimituri de biscuiți. Dar nu despre asta vreau să povestesc ci despre QR code-ul de pe ambalaj. Care duce la un site. Care pe telefon arată așa: Evident, FLASH! Flash pentru a afișa două imagini. Isteț, nu? Nu știu eu foarte multe despre marketing, tehnologie sau web (în general). [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3149/frontend-developer/qr-code-autentic/'>QR Code autentic</a>. <br/>
	<a href='http://www.iamntz.com/3149/frontend-developer/qr-code-autentic/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Azi am luat noul rom cu firimituri de biscuiți. Dar nu despre asta vreau să povestesc ci despre QR code-ul de pe ambalaj. Care duce la un <a href="http://www.romautentic.ro/">site</a>. Care pe telefon arată așa:<span id="more-3149"></span></p>
<p><a href="http://content.iamntz.com/wp-content/uploads/2012/05/photo.png"><img src="http://content.iamntz.com/wp-content/uploads/2012/05/photo.png" alt="" title="photo" width="640" height="960" class="aligncenter size-full wp-image-3150" /></a></p>
<p>Evident, FLASH! Flash pentru a afișa două imagini. Isteț, nu?</p>
<p>Nu știu eu foarte multe despre marketing, tehnologie sau web (în general). Dar mă gândesc că nu sunt foarte mulți care vor scana un cod QR cu ajutorul PC-ului. Ce rost are să faci redirect spre un site semifuncțional?</p>
<p>Bonus, site-ul este defect inclusiv pe PC:</p>
<p><a href="http://content.iamntz.com/wp-content/uploads/2012/05/2012-05-05_2043.png"><img src="http://content.iamntz.com/wp-content/uploads/2012/05/2012-05-05_2043-690x424.png" alt="" title="2012-05-05_2043" width="690" height="424" class="aligncenter size-large wp-image-3152" /></a></p>
<p>Acum ce să zic? Eu susțin cât pot folosirea tehnologiilor noi, a rezoluțiilor mai mari și a evoluției tehnologice în general. Dar să faci un site care se vede bine la minim 1600px lățime este un pic prea mult, chiar și pentru mine.</p>
<p>Noi muncim, nu gândim!</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3149/frontend-developer/qr-code-autentic/'>QR Code autentic</a>. <br/>
	<a href='http://www.iamntz.com/3149/frontend-developer/qr-code-autentic/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/rFkMVeKWV9c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3149/frontend-developer/qr-code-autentic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3149/frontend-developer/qr-code-autentic/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Link-urile lunii Aprilie</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/BT4eUmrVV3c/</link>
		<comments>http://www.iamntz.com/3101/frontend-developer/link-urile-lunii-aprilie/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 15:45:01 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JS Libraries]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Vagrant]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3101</guid>
		<description><![CDATA[A trecut o grămadă de timp de la ultimul post din categoria „Link-urile săptămânii”. Motive? Suficiente. Probleme de sănătate, probleme în familie, proiecte multe și înghesuite, per total timp prea puțin. Ori sunt praf la time management. Sau puțin din amândouă. În fine, începând cu 1 mai voi încerca o nouă șmecherie: link-urile săptămânii vor [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3101/frontend-developer/link-urile-lunii-aprilie/'>Link-urile lunii Aprilie</a>. <br/>
	<a href='http://www.iamntz.com/3101/frontend-developer/link-urile-lunii-aprilie/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>A trecut o grămadă de timp de la ultimul post din categoria „Link-urile săptămânii”. Motive? Suficiente. Probleme de sănătate, probleme în familie, proiecte multe și înghesuite, per total timp prea puțin. Ori sunt praf la time management. Sau puțin din amândouă. </p>
<p>În fine, începând cu 1 mai voi încerca o nouă șmecherie: link-urile săptămânii vor exista în continuare doar că vor fi mai puține. Și ceva mai&#8230; comentate <img src='http://www.iamntz.com/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Acestea fiind spuse, acest post e ultimul din categoria „grămada de link-uri” cu care ești obișnuit.</p>
<ol>
<li><a href="http://www.advancedcustomfields.com/">Fully customise WordPress edit screens with powerful fields</a></li>
<li><a href="http://coding.smashingmagazine.com/2012/03/07/writing-unit-tests-for-wordpress-plugins/">Writing Unit Tests For WordPress Plugins</a></li>
<li><a href="http://www.websanova.com/tutorials/javascript/extending-javascript-the-right-way">Extending JavaScript – The Right Way</a></li>
<li><a href="http://manuel.kiessling.net/2012/03/23/object-orientation-and-inheritance-in-javascript-a-comprehensive-explanation/">Object-orientation and inheritance in JavaScript: a comprehensive explanation</a></li>
<li><a href="http://www.adobe.com/devnet/html5/articles/javascript-design-patterns-pt1-singleton-composite-facade.html">JavaScript design patterns – Part 1: Singleton, composite, and façade</a></li>
<li><a href="http://filamentgroup.com/lab/ajax_includes_modular_content/">An Ajax-Include Pattern for Modular Content</a></li>
<li><a href="http://creativejs.com/resources/requestanimationframe/">requestAnimationFrame &#8211; The secret to silky smooth JavaScript animation!</a></li>
<li><a href="http://www.nczonline.net/blog/2011/05/03/better-javascript-animations-with-requestanimationframe/">Better JavaScript animations with requestAnimationFrame</a></li>
<li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/closures-front-to-back/">Closures: Front to Back</a></li>
<li><a href="http://www.netmagazine.com/tutorials/javascript-debugging-beginners">JavaScript debugging for beginners</a></li>
<li><a href="https://developers.google.com/chrome-developer-tools/docs/scripts-breakpoints">Chrome Developer Tools: Breakpoints</a></li>
<li><a href="http://37signals.com/svn/posts/3137-using-event-capturing-to-improve-basecamp-page-load-times">Using event capturing to improve Basecamp page load times</a></li>
<li><a href="http://pep.briangonzalez.org/">pep.jquery.js</a></li>
<li><a href="http://eightmedia.github.com/hammer.js/">Hammer.js</a> &#8211; A javascript library for multi-touch gestures</li>
<li><a href="http://rickbrock.com/simple-placeholder-script-with-prototype">Simple html placeholder functionality with javascript and prototype</a></li>
<li><a href="http://www.abeautifulsite.net/blog/2011/02/jquery-minicolors-a-color-selector-for-input-controls/">jQuery MiniColors (a color selector for input controls)</a></li>
<li><a href="http://www.clicktorelease.com/code/css3dclouds">CSS3D Clouds</a> &#8211; Cel mai bine merge în Chrome</li>
<li><a href="http://nicolasgallagher.com/about-html-semantics-front-end-architecture/">About HTML semantics and front-end architecture</a></li>
<li><a href="http://meyerweb.com/eric/thoughts/2012/04/26/lineargradient-keywords/">Linear Gradient Keywords</a></li>
<li><a href="http://nodetime.com/">Performance Profiler for Node.js</a></li>
<li><a href="http://anders.janmyr.com/2012/04/writing-node-module.html">Writing a Node Module</a></li>
<li><a href="https://gist.github.com/2260182">OSX For Hackers</a></li>
<li><a href="http://nefariousdesigns.co.uk/vagrant-virtualised-dev-environments.html">Vagrant Virtualised Dev Environments</a></li>
</ol>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3101/frontend-developer/link-urile-lunii-aprilie/'>Link-urile lunii Aprilie</a>. <br/>
	<a href='http://www.iamntz.com/3101/frontend-developer/link-urile-lunii-aprilie/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/BT4eUmrVV3c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3101/frontend-developer/link-urile-lunii-aprilie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3101/frontend-developer/link-urile-lunii-aprilie/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Cunoaște-ți uneltele!</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/4R8n5V57woM/</link>
		<comments>http://www.iamntz.com/3088/frontend-developer/cunoaste-ti-uneltele/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 11:40:12 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3088</guid>
		<description><![CDATA[Cred că unul dintre cele mai nasoale lucruri ce ți se pot întâmpla în cariera de programator este să nu cunoști uneltele cu care lucrezi. Fie că este vorba de editorul de cod, de , de framework sau de limbajul în care lucrezi, cunoaște-l. Stăpânește-l. Să-ți povestesc o întâmplare Zilele trecute asistam un amic prin [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3088/frontend-developer/cunoaste-ti-uneltele/'>Cunoaște-ți uneltele!</a>. <br/>
	<a href='http://www.iamntz.com/3088/frontend-developer/cunoaste-ti-uneltele/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Cred că unul dintre cele mai nasoale lucruri ce ți se pot întâmpla în cariera de programator este să nu cunoști uneltele cu care lucrezi. Fie că este vorba de editorul de cod, de <acronym title="Version Control System">VCS</acronym>, de framework sau de limbajul în care lucrezi, cunoaște-l. Stăpânește-l.</p>
<h3>Să-ți povestesc o întâmplare</h3>
<p>Zilele trecute asistam un amic prin teamviewer să facă o chestie iar imediat după ce a adăugat fișierele în git (<code>git a</code>) și a scris mesajul de commit (<code>git ci -m "mesaj"</code><sup>1</sup>), înainte să apese <em>enter</em> și-a dat seama că a făcut mici greșeli. Typos. Să fi văzut atunci acrobații cu copy/paste la mesaj, pentru a putea da iar comanda <code>git a</code> fără a rescrie mesajul și toate cele!</p>
<p>Sigur, norocul lui este că stă la dracu&#8217;n praznic, că altfel mă duceam și îi dădeam cu <a href="http://www.iamntz.com/go/9/tastatura-microsoft-natural-er">tastatura</a> în cap!</p>
<h4>Greșeala</h4>
<p>Dacă faci parte din cei care se întreabă „ok, dar unde a greșit?” înseamnă că nu folosești git. Sau dacă îl folosești, îl folosești mecanic. <span id="more-3088"></span></p>
<ol>
<li><code>git ci</code> nu are nevoie și de <code>git a</code> decât în situația în care adaugi fișiere noi în repository;
<li>Dacă adaugi un fișier nou imediat după un commit, probabil vor fi modificări suplimentare și în cod. Caz în care îți recomand un commit nou. Dacă te încăpățânezi să pui totul în același commit, poți folosi cu încredere <a href="http://schacon.github.com/git/git-commit.html"><code>amend</code></a> pentru a modifica un mesaj de commit (și, evident, fișierele pentru acel commit)
</ol>
<h3>Concluzia</h3>
<p>Ăsta a fost un exemplu. Cred că oricare dintre noi a trecut de nenumărate ori prin situații de genul. La câteva proiecte am folosit query-uri sql scrise de mână (cu mysql_connect &#038; all!) într-o temă de WordPress, fără să știu că WP oferă o soluție mult mai bună pentru așa ceva.</p>
<p>Oricât de stupid ar părea, concluzia este la începutul articolului: folosește cele mai bune unelte (pentru tine) dar înțelege-le. Citește cât de puțin din documentație, vezi <em>de ce</em> se întâmplă ce se întâmplă când se întâmplă. Stăpânește-ți uneltele!</p>
<p><em><sup>1</sup> Poți avea astfel de scurtături dacă folosești <a href="http://www.iamntz.com/1542/frontend-developer/gitconfig/"><code>.gitconfig</code>-ul meu</a>.</em></p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3088/frontend-developer/cunoaste-ti-uneltele/'>Cunoaște-ți uneltele!</a>. <br/>
	<a href='http://www.iamntz.com/3088/frontend-developer/cunoaste-ti-uneltele/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/4R8n5V57woM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3088/frontend-developer/cunoaste-ti-uneltele/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3088/frontend-developer/cunoaste-ti-uneltele/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Ghilimelele din PHP</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/vFB18S1DQ0k/</link>
		<comments>http://www.iamntz.com/3062/frontend-developer/ghilimelele-din-php/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 04:27:41 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Basic Stuff]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3062</guid>
		<description><![CDATA[De mai bine de cinci ani (de când am trecut de hello world în ) am fost enervat la culme de&#8230; ghilimele. Și de inconsistența numelor de funcții, dar despre asta poate cu altă ocazie. Așadar, să zicem că avem un string, să-i zicem $hello="World!"; și vrem să afișăm Hello World folosind acest string. O [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3062/frontend-developer/ghilimelele-din-php/'>Ghilimelele din PHP</a>. <br/>
	<a href='http://www.iamntz.com/3062/frontend-developer/ghilimelele-din-php/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>De mai bine de cinci ani (de când am trecut de <code>hello world</code> în <acronym title="Hypertext Preprocessor - http://php.net">PHP</acronym>) am fost enervat la culme de&#8230; ghilimele. Și de inconsistența numelor de funcții, dar despre asta poate cu altă ocazie.</p>
<p>Așadar, să zicem că avem un string, să-i zicem <code>$hello="World!";</code> și vrem să afișăm <code>Hello World</code> folosind acest string. O soluție ar fi:<br />
<span id="more-3062"></span></p>
<pre class="brush: php; title: ; notranslate">
echo 'Hello ' . $world;
</pre>
<p>Este ok? Este. E ceva greșit? Nu este. Păi și atunci, unde e problema? Eh, problema apare atunci când vrei să adaugi&#8230; de exmplu niște atribute unui tag <acronym title="Hyper Text Markup Language - http://w3.org">HTML</acronym>. Să zicem:</p>
<pre class="brush: php; title: ; notranslate">
echo '&lt;input type=&quot;' . $input_type . '&quot; class=&quot;' . $input_class . &quot;
  id='&quot; . $input_id . &quot;' . $disabled . $readonly . '/&gt;';
</pre>
<p>Acum, nu știu cum sunteți voi, dar eu deja am amețit de la atâtea ghilimele! Gândește-te doar ce se întâmplă într-un query <acronym title="Structured Query Language">SQL</acronym> ceva mai complex!</p>
<p>Sunt două chestii trecute cu vederea de foarte mulți:</p>
<ol>
<li>Dacă ai un string între ghilimele duble poți introduce o variabilă, iar aceasta va fi parsată;</li>
<li>Atributele tag-urilor HTML pot fi puse și în ghilimele simple (de fapt, majoritatea atributelor &#8211; cele care nu conțin spații: class, placeholder etc &#8211; pot fi adăugate fără nici un fel de ghilimele!)</li>
</ol>
<p>Acestea fiind spuse, povestea de mai sus se poate rescrie în felul următor:</p>
<pre class="brush: php; title: ; notranslate">
echo &quot;&lt;input type='$input_type' class='$input_class' id='$input_id' $disabled $readonly/&gt;&quot;;
</pre>
<p>Deja totul este mult mai ușor de urmărit iar șansele să te pierzi în ghilimele au scăzut dramatic!</p>
<h4>Ce fac dacă am atributele într-un array?</h4>
<p>Sunt situații în care vrei să afișezi elementul unui <code>array</code>:</p>
<pre class="brush: php; title: ; notranslate">
$input_attr = array(
  &quot;type&quot;     =&gt; &quot;text&quot;,
  &quot;class&quot;    =&gt; &quot;foo bar&quot;,
  &quot;id&quot;       =&gt; &quot;input_id&quot;,
  &quot;disabled&quot; =&gt; &quot;disabled&quot;,
  &quot;readonly&quot; =&gt; &quot;readonly&quot;
);
</pre>
<p>(Desigur, array-ul ar putea fi la fel de bine un stdObject, că nu s-ar supăra nimeni)</p>
<p>Soluția? Acolade! </p>
<pre class="brush: php; title: ; notranslate">
echo &quot;&lt;input type='{input_attr['type']}' class='{input_attr['class']}'
  id='{input_attr['id']}' {input_attr['disabled']} {input_attr['readonly']}/&gt;&quot;;
</pre>
<p>Toată povestea asta merge nu doar în cazul în care vrei să afișezi ceva ci și în cazul în care definești o variabilă, de exemplu (să revenim la exemplul inițial):</p>
<pre class="brush: php; title: ; notranslate">
$hello = &quot;Hello {$world}&quot;;
echo $hello;
</pre>
<p>Mai multe detalii poți găsi <a href="http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double">fix la sursă</a>.</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3062/frontend-developer/ghilimelele-din-php/'>Ghilimelele din PHP</a>. <br/>
	<a href='http://www.iamntz.com/3062/frontend-developer/ghilimelele-din-php/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/vFB18S1DQ0k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3062/frontend-developer/ghilimelele-din-php/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3062/frontend-developer/ghilimelele-din-php/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Monitor multitouch Dell ST2220T</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/B8WKRrAdyF8/</link>
		<comments>http://www.iamntz.com/3054/frontend-developer/monitor-multitouch-dell-st2220t/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 18:56:53 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3054</guid>
		<description><![CDATA[Dell ST2220T &#8211; Monitor multi touch. Preț accesibil, funcționalitate ok. Din păcate, nu este touch în adevăratul sens al cuvântului (cu suprafața ecranului sensibilă) ci are pe margine o șmecherie (probabil IR) ce detectează degetele. Partea bună este că e multi touch. Partea rea este că este doar bi-touch (detectează doar două degete) iar pe [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3054/frontend-developer/monitor-multitouch-dell-st2220t/'>Monitor multitouch Dell ST2220T</a>. <br/>
	<a href='http://www.iamntz.com/3054/frontend-developer/monitor-multitouch-dell-st2220t/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://event.2parale.ro/events/click?ad_type=quicklink&#038;aff_code=e5ae55f8d&#038;unique=d4f678b43&#038;redirect_to=http%3A%2F%2Fwww.evomag.ro%2FMONITOARE-Monitoare-LCD%2FDell-Monitor-LCD-21.5-ST2220T-MultiTouch44-Full-HD-DVI-D44-VGA44-HDMI44-USB44-62843.html%3Futm_source%3D2parale%26utm_medium%3DProductStoreData%26utm_campaign%3De5ae55f8d">Dell ST2220T</a> &#8211; Monitor multi touch. Preț accesibil, funcționalitate ok. Din păcate, nu este touch în adevăratul sens al cuvântului (cu suprafața ecranului sensibilă) ci are pe margine o șmecherie (probabil IR) ce detectează degetele. Partea bună este că e multi touch. Partea rea este că este doar bi-touch (detectează doar două degete) iar pe margini este mai puțin precis. Merge rezonabil cu Win7 și Win8 dar are nevoie de un driver special pentru OSX (care costă vreo 300$).</p>
<p>Evident, l-am luat pentru un proiect (la fel cum s-a întâmplat cu <a href=" http://event.2parale.ro/events/click?ad_type=product_store&#038;aff_code=e5ae55f8d&#038;campaign_unique=d4f678b43&#038;unique=29e946628">iPhone</a> sau cu <a href="http://www.iamntz.com/go/49/telefon-mobil-google-nexus-s-1">Nexus</a>). Am avut surpriza să văd că Chrome nu detectează event-urile ca touch* (<code>touchstart</code>, <code>touchend</code>, <code>touchmove </code>etc) și că nu pot dezactiva pinch to zoom (ceea ce face treaba mai complicată decât ar trebui).</p>
<p>Overall, imaginea este bună, nu are probleme vizibile de culoare sau alte bucurii d&#8217;astea. Cea mai mare problemă &#8211; și zău că nu înțeleg de ce se încăpățânează producătorii! &#8211; este că atât ecranul cât și rama acestuia sunt.. glossy! Oameni buni, nu faceți glossy chestiile pe care dai cu degetul în continuu!</p>
<h4>Windows 8</h4>
<p>Dacă în urmă cu câteva luni, atunci când a apărut dev preview, am zis că Win8 este o porcărie din punct de vedere al usability, acum nu pot să zic decât că impresia a rămas aceeași. Voi reveni cu amănunte cu altă ocazie.</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3054/frontend-developer/monitor-multitouch-dell-st2220t/'>Monitor multitouch Dell ST2220T</a>. <br/>
	<a href='http://www.iamntz.com/3054/frontend-developer/monitor-multitouch-dell-st2220t/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/B8WKRrAdyF8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3054/frontend-developer/monitor-multitouch-dell-st2220t/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3054/frontend-developer/monitor-multitouch-dell-st2220t/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Cât de deschisă este o culoare?</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/1DA1JkYeQ_A/</link>
		<comments>http://www.iamntz.com/3031/frontend-developer/cat-de-deschisa-este-o-culoare/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 18:52:59 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Colors]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3031</guid>
		<description><![CDATA[Mi s-a întâmplat de foarte multe ori să fie nevoie de un color picker într-o pagină care să ajusteze automat și culoarea textului, păstrând &#8211; cât de cât &#8211; un contrast. Poți face următoarea treabă în orice limbaj, fie că-i web sau nu. Este important să împarți culoarea în părțile de bază: roșu (R), verde [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3031/frontend-developer/cat-de-deschisa-este-o-culoare/'>Cât de deschisă este o culoare?</a>. <br/>
	<a href='http://www.iamntz.com/3031/frontend-developer/cat-de-deschisa-este-o-culoare/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>Mi s-a întâmplat de foarte multe ori să fie nevoie de un color picker într-o pagină care să ajusteze automat și culoarea textului, păstrând &#8211; cât de cât &#8211; un contrast. Poți face următoarea treabă în orice limbaj, fie că-i web sau nu. Este important să împarți culoarea în părțile de bază: roșu (R), verde (G) și albastru (B).</p>
<p>Dacă suma celor trei culori este sub 382 (teoretic; în practică am observat că e mai bine să se crească până pe la 400-450), culoarea este una întunecată. Dacă suma este peste 382, evident, este o culoare deschisă.</p>
<p>În <acronym title="Hypertext Preprocessor - http://php.net">PHP</acronym>, de exemplu, poți extrage un array al celor trei culori de bază folosind funcția următoare:<br />
<span id="more-3031"></span><br />
<div id="gist-2229365" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="cp">&lt;?php</span> </div><div class='line' id='LC2'><span class="k">function</span> <span class="nf">get_rgb</span><span class="p">(</span> <span class="nv">$color</span> <span class="o">=</span> <span class="s1">&#39;000000&#39;</span> <span class="p">){</span></div><div class='line' id='LC3'>&nbsp;&nbsp;<span class="nv">$rgb</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'>&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span> <span class="nv">$x</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nv">$x</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">;</span> <span class="nv">$x</span><span class="o">++</span> <span class="p">){</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nv">$rgb</span><span class="p">[</span><span class="nv">$x</span><span class="p">]</span> <span class="o">=</span> <span class="nx">hexdec</span><span class="p">(</span> <span class="nx">substr</span><span class="p">(</span> <span class="nv">$color</span><span class="p">,</span> <span class="p">(</span> <span class="mi">2</span><span class="o">*</span><span class="nv">$x</span> <span class="p">),</span> <span class="mi">2</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC7'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC8'><br/></div><div class='line' id='LC9'>&nbsp;&nbsp;<span class="k">return</span> <span class="nv">$rgb</span><span class="p">;</span></div><div class='line' id='LC10'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/deef2269922e5a8f0cba/f2be36630ae2eae7b610876edbeb8047a3a29e5d/get_rgb.php" style="float:right;">view raw</a>
            <a href="https://gist.github.com/deef2269922e5a8f0cba#file_get_rgb.php" style="float:right;margin-right:10px;color:#666">get_rgb.php</a>
            <a href="https://gist.github.com/deef2269922e5a8f0cba">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>
</p>
<p>Cum le aduni? Foarte simplu! <code>array_sum( get_rgb( $color ) )</code>.</p>
<p>Așa cum am zis, funcția e atât de simplă încât poate fi extinsă cu ușurință în orice limbaj.</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3031/frontend-developer/cat-de-deschisa-este-o-culoare/'>Cât de deschisă este o culoare?</a>. <br/>
	<a href='http://www.iamntz.com/3031/frontend-developer/cat-de-deschisa-este-o-culoare/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/1DA1JkYeQ_A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3031/frontend-developer/cat-de-deschisa-este-o-culoare/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3031/frontend-developer/cat-de-deschisa-este-o-culoare/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Cum editezi tema blogului (sau alte fișiere ale site-ului) ?</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/9EWzH-NkHn0/</link>
		<comments>http://www.iamntz.com/3012/frontend-developer/cum-editezi-tema-blogului-sau-alte-fisiere-ale-site-ului/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 18:50:43 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Workflow]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=3012</guid>
		<description><![CDATA[După o scurtă discuție privată cu un cunoscut blogger român, am ajuns la concluzia că unora pur și simplu le place să trăiască periculos. Editează fișierele temei WordPress direct din wp-admin, fără nici un back-up, fără nimic. Ce se întâmplă în situația în care crapă browserul? Sau cade curentul fix când se transferă cei 20kb? [...]
	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3012/frontend-developer/cum-editezi-tema-blogului-sau-alte-fisiere-ale-site-ului/'>Cum editezi tema blogului (sau alte fișiere ale site-ului) ?</a>. <br/>
	<a href='http://www.iamntz.com/3012/frontend-developer/cum-editezi-tema-blogului-sau-alte-fisiere-ale-site-ului/#postcomment'>Adaugă un comentariu!</a>]]></description>
			<content:encoded><![CDATA[<p>După o scurtă discuție privată cu un cunoscut blogger român, am ajuns la concluzia că unora pur și simplu le place să trăiască periculos. Editează fișierele temei WordPress direct din <code>wp-admin</code>, fără nici un back-up, fără nimic. Ce se întâmplă în situația în care crapă browserul? Sau cade curentul fix când se transferă cei 20kb? Sau se blochează sistemul de operare? Sau etc? Asta fără să pomenesc de controlul versiunilor!</p>
<p>Așadar, sunt curios ce workflow folosești când lucrezi la un site online. Ai un mediu de test? Lucrezi direct „pe ftp”?  Folosești controlul versiunilor? Etc etc.</p>
<p>De exemplu, pentru site-urile la care lucrez constant am xammp configurat destul de aproape de serverele pe care dau cu sapa, țin fișierele sub Git și folosesc <a href="http://sublimetext.com">Sublime Text</a> împreună cu <a href="http://wbond.net/sublime_packages/sftp">Sublime SFTP</a> pentru a edita, respectiv pentru a sincroniza diverse foldere (în principiu <code>wp-content/themes/tema</code> și, dacă e nevoie, <code>wp-content/plugins</code>.</p>
<p>Pentru modificări super rapide, la site-urile la care nu lucrez decât ocazional, folosesc Flash FXP.</p>
<p>Întreb asta pentru că am o vagă bănuială că este nevoie de un ghid pentru astfel de treburi&#8230;</p>
<p>Deci?</p>

	<br/>

	Ai terminat de citit postul <a href='http://www.iamntz.com/3012/frontend-developer/cum-editezi-tema-blogului-sau-alte-fisiere-ale-site-ului/'>Cum editezi tema blogului (sau alte fișiere ale site-ului) ?</a>. <br/>
	<a href='http://www.iamntz.com/3012/frontend-developer/cum-editezi-tema-blogului-sau-alte-fisiere-ale-site-ului/#postcomment'>Adaugă un comentariu!</a><img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/9EWzH-NkHn0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/3012/frontend-developer/cum-editezi-tema-blogului-sau-alte-fisiere-ale-site-ului/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/3012/frontend-developer/cum-editezi-tema-blogului-sau-alte-fisiere-ale-site-ului/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
	</channel>
</rss>

