<?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 - the Frontend Developer</title>
	
	<link>http://www.iamntz.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 10 Mar 2010 20:43:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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>Rearanjarea fișierelor în Windows 7</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/wD2sPT1bKjs/</link>
		<comments>http://www.iamntz.com/487/frontend-developer/rearanjarea-fi%c8%99ierelor-in-windows-7/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 20:41:58 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=487</guid>
		<description><![CDATA[Probabil unii sunt enervați din cauză că, începând de la Windows Vista, nu mai poți muta folderele pe ecran unde vrei tu. Pe mine nu mă deranjează în mod special (dacă stau să mă gândesc bine, dacă nu-mi spunea Oriceon de problema asta nu observam) dar pe alții (tot Oriceon) îi scoate din sărite. Și [...]]]></description>
			<content:encoded><![CDATA[<p>Probabil unii sunt enervați din cauză că, începând de la Windows Vista, nu mai poți muta folderele pe ecran unde vrei tu. Pe mine nu mă deranjează în mod special (dacă stau să mă gândesc bine, dacă nu-mi spunea <a href="http://www.oriceon.com">Oriceon</a> de problema asta nu observam) dar pe alții (tot Oriceon) îi scoate din sărite. Și tot alții au căutat soluții. Și au găsit. </p>
<p><a href="http://www.winhelponline.com/blog/disable-full-row-select-explorer-windows-7/">Aici</a>. </p>
<p>Enjoy! </p>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/wD2sPT1bKjs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/487/frontend-developer/rearanjarea-fi%c8%99ierelor-in-windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/487/frontend-developer/rearanjarea-fi%c8%99ierelor-in-windows-7/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Slideshow simplu cu jQuery</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/eS3eWjpy-ck/</link>
		<comments>http://www.iamntz.com/480/frontend-developer/slideshow-simplu-cu-jquery/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 15:20:32 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Playground]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=480</guid>
		<description><![CDATA[Fără prea multă vorbărie, direct codul, așa cum l-am folosit într-un proiect recent:


(function($){
	$.fn.ntzSlider = function(options){
		o = jQuery.extend({
			height: 135,
			incrementBy:5
 		}, options);

	return this.each(function(){
    	var t=$(this);
    	t.wrap(&#039;&#60;div class=&#34;ntzSliderWrapper&#34;/&#62;&#039;);
    	t.wrap(&#039;&#60;div class=&#34;ntzSliderWrapper2&#34;/&#62;&#039;);

    	var wrapper = t.closest(&#039;.ntzSliderWrapper&#039;),
    			wrapper2 = t.closest(&#039;.ntzSliderWrapper2&#039;),
    			elWidth = t.find(&#039;li:first&#039;).width(),
 [...]]]></description>
			<content:encoded><![CDATA[<p>Fără prea multă vorbărie, direct codul, așa cum l-am folosit într-un proiect recent:</p>
<pre class="brush: js">

(function($){
	$.fn.ntzSlider = function(options){
		o = jQuery.extend({
			height: 135,
			incrementBy:5
 		}, options);

	return this.each(function(){
    	var t=$(this);
    	t.wrap(&#039;&lt;div class=&quot;ntzSliderWrapper&quot;/&gt;&#039;);
    	t.wrap(&#039;&lt;div class=&quot;ntzSliderWrapper2&quot;/&gt;&#039;);

    	var wrapper = t.closest(&#039;.ntzSliderWrapper&#039;),
    			wrapper2 = t.closest(&#039;.ntzSliderWrapper2&#039;),
    			elWidth = t.find(&#039;li:first&#039;).width(),
    			maxWidth = t.find(&#039;li&#039;).length * elWidth;

    	t.width(maxWidth);

    	wrapper.append(&#039;&lt;a class=&quot;ntzSliderCtrl ntzSliderPrev&quot;/&gt; &lt;a class=&quot;ntzSliderCtrl ntzSliderNext&quot;/&gt;&#039;);

    	wrapper.add(wrapper2).css({
    		height:o.height,
    		position:&#039;relative&#039;
    	});
    	wrapper2.css(&#039;overflow&#039;, &#039;hidden&#039;);

    	function showHideArrows() {
  			var curPos = parseInt(t.css(&#039;marginLeft&#039;), 10) || 0;
    		if(curPos == 0) {
    			wrapper.find(&#039;.ntzSliderPrev&#039;).hide();
    		}else {
    			wrapper.find(&#039;.ntzSliderPrev&#039;).show();
    		}

    		if(-curPos &gt;= (maxWidth - wrapper2.width())){
    			wrapper.find(&#039;.ntzSliderNext&#039;).hide();
    		}else {
    			wrapper.find(&#039;.ntzSliderNext&#039;).show();
    		}
    	};//showHideArrows
    	showHideArrows();
    	wrapper.find(&#039;.ntzSliderCtrl&#039;).click(function(){
    		if(t.is(&#039;:animated&#039;)){return false;}
    		showHideArrows();
    		var curPos = parseInt(t.css(&#039;marginLeft&#039;), 10) || 0;
    		if($(this).hasClass(&#039;ntzSliderPrev&#039;) &amp;&amp; curPos &lt; 0){
    			t.animate({
    				marginLeft:&#039;+=&#039;+(o.incrementBy*elWidth)
    			}, function(){
    				showHideArrows();
    			});
    		}
    		if($(this).hasClass(&#039;ntzSliderNext&#039;) &amp;&amp; (-curPos &lt; (maxWidth - wrapper2.width()))){
    			t.animate({
    				marginLeft:&#039;-=&#039;+(o.incrementBy*elWidth)
    			}, function(){
    				showHideArrows();
    			});
    		}
    		return false;
    	});
		});
	};
})(jQuery);
</pre>
<p>Puțin css:</p>
<pre class="brush: css">
.ntzSlider li {
	float:left;
	width:178px;
}

.ntzSliderWrapper .ntzSliderCtrl {
	position:absolute;
	left:-6px;
	top:50%;
	width:29px;
	height:43px;
	margin-top:-23px;
	background:url(../images/basaldella_prev.png) no-repeat left top;
	cursor:pointer;
}
.ntzSliderWrapper .ntzSliderNext {
	background-image:url(../images/basaldella_next.png);
	left:auto;
	right:-6px;
}
</pre>
<p>Și iese asta:<br />
<div class="demoDownload"><a href="http://www.iamntz.com/experiments/simple_slideshow" class="demoLink">Demo</a></div></p>
<p>Notă: Am presupus că sliderul va avea width 100%</p>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/eS3eWjpy-ck" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/480/frontend-developer/slideshow-simplu-cu-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/480/frontend-developer/slideshow-simplu-cu-jquery/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Optimizarea servirii ad-urilor</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/7-JHVbOIkr8/</link>
		<comments>http://www.iamntz.com/448/frontend-developer/optimizarea-servirii-ad-urilor/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 09:07:30 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Ad serving]]></category>
		<category><![CDATA[Good to know]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=448</guid>
		<description><![CDATA[Sunt convins că orice utilizator de internet este agasat de reclame. Și asta deoarece, dacă nu ne deranjează vizual (overlayere imense, nesimțite), ne papă timp. Și asta deoarece reclamele sunt servite (cu mici excepții) de pe servere externe. Iar ca posesor de site/blog, un timeout al ad serverului înseamnă câțiva vizitatori pierduți. Și hai să-ți [...]]]></description>
			<content:encoded><![CDATA[<p>Sunt convins că orice utilizator de internet este agasat de reclame. Și asta deoarece, dacă nu ne deranjează vizual (overlayere imense, nesimțite), ne papă timp. Și asta deoarece reclamele sunt servite (cu mici excepții) de pe servere externe. Iar ca posesor de site/blog, un timeout al ad serverului înseamnă câțiva vizitatori pierduți. Și hai să-ți spun de ce:</p>
<h3>Puțină teorie</h3>
<p>Majoritatea reclamelor sunt încărcate cu un cod foarte simplu:</p>
<pre class="brush: js">&lt;script src=&quot;delayed.js.php&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;</pre>
<p><code>delayed.js.php</code> este url-ul spre ad server. Problema care apare se datorează modului în care se întâmplă încărcarea paginilor: pentru a respecta diverse dependențe (de ex. vrei să se încarce întâi jQuery, după aceaea fișierul tău cu script-uri, nu?), browserul blochează orice activitate în momentul când dă de un cod asemănător cu cel de mai sus. Altfel spus, orice este după un <code>script src</code> este executat DUPĂ ce se primește un răspuns de la server.</p>
<p>De cele mai multe ori e ok. Dar în cazul în care serverul nu răspunde, site-ul tău este blocat pentru 10-20-30 secunde. Adică până browserul își dă seama că serverul are buba și nu poate încărca nimic.</p>
<p><code>delayed.js.php</code> este un script foarte simplu (atât de simplu încât &#8217;script&#8217; mi se pare ușor forțat) care simulează un delay prea mare. Iată codul din script:</p>
<pre class="brush: php">
&lt;?php
	sleep(3);
	echo &quot;alert(&#039;Fișierul extern s-a încărcat&#039;);&quot;;
</pre>
<p>Și rezultatul:<br />
<div class="demoDownload"><a href="http://iamntz.com/experiments/adServing" class="demoLink">Demo</a></div></p>
<h3>Așa, și?</h3>
<p>Statisticile spun că dacă un site nu se încarcă în 5-10 secunde, ai șanse destul de mari să pierzi vizitatorul. Și cum nimeni nu vrea să piardă vizitatori&#8230;</p>
<h3>Soluția</h3>
<p>Soluția este încărcarea asincronă a scripturilor externe. Sunt mai multe metode de a face acest lucru, dar cel mai elegant mi se pare modul în care se încarcă Google Analytics. Adică încarcă scriptul când poate, fără să blocheze pagina. În cazul în care scriptul nu se încarcă&#8230; Asta e. Nu se întâmplă nimic, site-ul este afișat complet, userul nu așteaptă inutil. </p>
<h5>Pasul 1</h5>
<p>Să presupunem că avem codul următor, furnizat de agenția de publicitate:</p>
<pre class="brush: html">
&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;http://www2.glam.com/app/site/affiliate/viewChannelModule.act?mName=viewAdJs&amp;affiliateId=302620505&amp;adSize=728x90&quot;&gt;&lt;/script&gt;
</pre>
<h5>Pasul 2</h5>
<p>Șterge codul de mai sus, dar salvează undeva valoarea atributului <code>src</code>  ( <code>http://www2.glam.com/app/site/affiliate/viewChannelModule.act?mName=viewAdJs&#038;affiliateId=302620505&#038;adSize=728x90</code> )</p>
<pre class="brush: js">
&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;
/* &lt;![CDATA[ */
	(function() {
		var myAd = document.createElement(&#039;script&#039;);
				myAd.type = &#039;text/javascript&#039;;
				myAd.async = true;
	  myAd.src = &#039;URL_AD_SERVER&#039;;
		(document.getElementsByTagName(&#039;head&#039;)[0] || document.getElementsByTagName(&#039;body&#039;)[0]).appendChild(myAd);
	})();
/* ]]&gt; */
&lt;/script&gt;
</pre>
<h5>Pasul 3</h5>
<p>Se înlocuiește <code>URL_AD_SERVER</code> cu link-ul salvat, astfel încât vei avea:</p>
<pre class="brush: js">
myAd.src = &#039;http://www2.glam.com/app/site/affiliate/viewChannelModule.act?mName=viewAdJs&amp;affiliateId=302620505&amp;adSize=728x90&#039;;
</pre>
<p>Salvezi și.. cam asta e <img src='http://www.iamntz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Același fișier php, același delay, o abordare ușor diferită. Rezultatul?</p>
<div class="demoDownload"><a href="http://iamntz.com/experiments/adServing/async.php" class="demoLink">Demo</a></div>
<p>Pagina se încarcă fără să aștepte fișierul extern. Mi se pare un pic mai bine. Ție nu? Partea bună este că merge cam pe toate browserele: <acronym title="Microsoft Internet Explorer 6">IE6</acronym>+, Safari, Opera, Chrome și desigur, Firefox.</p>
<p>Iată cum, cu un fragment de cod poți îmbunătăți masiv experiența utlizatorului și reduci „riscul” ca vizitatorul să folosească Adblock (sau ceva asemănător). Eu, de exemplu, folosesc Adblock doar pe site-urile cu reclame nesimțite (realitatea e cel mai bun exemplu) și pe site-urile cu timeout mare al scripturilor.</p>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/7-JHVbOIkr8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/448/frontend-developer/optimizarea-servirii-ad-urilor/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/448/frontend-developer/optimizarea-servirii-ad-urilor/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Design Patterns, Antipatterns, Refactoring și UML</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/vM7zNP8p4zQ/</link>
		<comments>http://www.iamntz.com/441/frontend-developer/design-patterns-antipatterns-refactoring-si-uml/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 00:03:25 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=441</guid>
		<description><![CDATA[Din câte am apucat să citesc (foarte puțin), pare suficient de bine explicat pentru a înțelege tot poporu&#8217;.  Adică tot poporu&#8217; interesat de așa ceva.
sourcemaking.com. Enjoy!
]]></description>
			<content:encoded><![CDATA[<p>Din câte am apucat să citesc (foarte puțin), pare suficient de bine explicat pentru a înțelege tot poporu&#8217;.  Adică tot poporu&#8217; interesat de așa ceva.</p>
<p><a href="http://sourcemaking.com/"><strong>sourcemaking.com</strong></a>. Enjoy!</p>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/vM7zNP8p4zQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/441/frontend-developer/design-patterns-antipatterns-refactoring-si-uml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/441/frontend-developer/design-patterns-antipatterns-refactoring-si-uml/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Scurtă poveste despre :first-child</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/myQoLtsJF8s/</link>
		<comments>http://www.iamntz.com/437/frontend-developer/scurta-poveste-despre-first-child/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 12:05:47 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=437</guid>
		<description><![CDATA[Așa cum m-am lăudat pe twitter în urmă cu câteva zile, sunt deja la al treilea client consecutiv care a renunțat la suportul pentru . Prin urmare, am început să folosesc și pseudo clase și selectori mai „șmecheri”. Astfel încât codul  a început să conțină mai puține clase de genul first sau last. 
Și [...]]]></description>
			<content:encoded><![CDATA[<p>Așa cum m-am lăudat pe twitter în urmă cu câteva zile, sunt deja la al treilea client <strong>consecutiv</strong> care a renunțat la suportul pentru <acronym title="Microsoft Internet Explorer 6">IE6</acronym>. Prin urmare, am început să folosesc și pseudo clase și selectori mai „șmecheri”. Astfel încât codul <acronym title="Hyper Text Markup Language">HTML</acronym> a început să conțină mai puține clase de genul <code>first</code> sau <code>last</code>. </p>
<p>Și încep eu bucuros, nevoie mare să folosesc <code>:first-child</code>. Care nu este suportat de IE6 dar merge pe versiunile mai noi (7+). Am testat temător la început și&#8230; cam asta a fost. Pentru că eu merg pe regula (dacă se poate spune așa): dezvoltă în firefox, testează în safari/opera/chrome și repară în IE.</p>
<h3>Prima bubă</h3>
<p>Am văzut eu că merge <code>:first-child</code> și am presupus că ar fi normal să meargă și <code>:last-child</code>. Greșit! Nu numai că nu merge, dar <code>:last-child</code> nici nu face parte din specificația CSS 2.1! Face parte din CSS 3.0! Prin urmare, dă-i și rescrie codul. Moment în care am găsit&#8230;</p>
<h3>A doua bubă</h3>
<p>A doua bubă a fost un pic mai nasoală. Ca să înțelegi mai bine, îți arăt o bucată de cod:</p>
<pre class="brush: html">
&lt;div class=&quot;wrapper&quot;&gt;
	&lt;h3&gt;Titlu&lt;/h3&gt;
	&lt;div class=&quot;entry&quot;&gt;
		conținut
	&lt;/div&gt;&lt;!-- /.entry--&gt;
	&lt;div class=&quot;entry&quot;&gt;
		conținut
	&lt;/div&gt;&lt;!-- /.entry--&gt;
	&lt;div class=&quot;entry&quot;&gt;
		conținut
	&lt;/div&gt;&lt;!-- /.entry--&gt;
&lt;/div&gt;&lt;!-- /.wrapper--&gt;
</pre>
<p>Iar eu trebuia să pun <code>border-top</code> la toate <code>div.entry</code>, mai puțin la primul:</p>
<pre class="brush: css">
.wrapper div.entry:first-child {
	border-top:none
}
</pre>
<p>Totul e ok, nu? NU! În niciun browser nu mergea și nu înțelegeam de ce. După ceva căutări am aflat că <code>:first-child</code> ține cont de TOATE elementele, nu de toate elementele căutate. Astfel, <code>first-child</code> în cazul meu era.. <code>h3</code>! Dă-i cu Dumnezei, biserici, sărbători și alte neamuri și pune toate <code>div.entry</code> într-un alt div și&#8230; cam asta fu.</p>
<h3>Soluția elegantă</h3>
<p>Dincolo de extra markup (folosit din motive de grabă &#8211; deadline-ul venea cu pași repezi și deja pierdusem prea mult timp cu rescrierea codului &#038; căutarea problemei), ar mai exista două rezolvări:</p>
<ol>
<li><a href="http://reference.sitepoint.com/css/adjacentsiblingselector">Adjacent Sibling Selector</a>. Îl puteam folosi la modul <code>.wrapper h3+div.entry</code>. Și partea bună este că ar fi mers fără prea mari probleme în toate browserele.</li>
<li><a href="http://reference.sitepoint.com/css/pseudoclass-firstoftype">:first-of-type</a>. Care nu prea merge decât în ultimele versiuni de Firefox/Safari/Chrome dar&#8230; Cam atât. Nu merge în niciun IE deci nu prea ar fi bun.</li>
</ol>
<h3>Deznodământul</h3>
<p>Cum orice minune ține trei.. clienți, următorul client are un site la care vrea și compatibilitate IE6 <img src='http://www.iamntz.com/wp-includes/images/smilies/icon_twisted.gif' alt=':twisted:' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/myQoLtsJF8s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/437/frontend-developer/scurta-poveste-despre-first-child/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/437/frontend-developer/scurta-poveste-despre-first-child/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Mic experiment inspirat de iPhoto</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/_U9Pu2vOHrc/</link>
		<comments>http://www.iamntz.com/433/frontend-developer/mic-experiment-inspirat-de-iphoto/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 21:36:12 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Playground]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=433</guid>
		<description><![CDATA[Dar care nu merge prea grozav pe IE. Din păcate fericire mi-a pierit cheful total după câteva minute, prin urmare a rămas așa.
Dacă nu te prinzi la ce s-ar putea folosi chestia asta, imaginează-ți că ai de afișat mai multe foldere cu poze (gen picasa). Și pentru a nu intra în fiecare folder, te plimbi [...]]]></description>
			<content:encoded><![CDATA[<p>Dar care nu merge prea grozav pe IE. Din <del datetime="2010-02-09T21:02:26+00:00">păcate</del> fericire mi-a pierit cheful total după câteva minute, prin urmare a rămas așa.</p>
<div class="demoDownload"><a href="http://iamntz.com/experiments/igallery" class="demoLink">Demo</a></div>
<p>Dacă nu te prinzi la ce s-ar putea folosi chestia asta, imaginează-ți că ai de afișat mai multe foldere cu poze (gen picasa). Și pentru a nu intra în fiecare folder, te plimbi cu mausul peste folder și vezi un quick preview al primelor X poze (unde X e zece în cazul de față).</p>
<p>A fost doar un experiment rapid ce a durat mult mai puțin decât scrierea acestui post <img src='http://www.iamntz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/_U9Pu2vOHrc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/433/frontend-developer/mic-experiment-inspirat-de-iphoto/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/433/frontend-developer/mic-experiment-inspirat-de-iphoto/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Wordpress : the_content_limit() v.2</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/TXcvCB_cOeI/</link>
		<comments>http://www.iamntz.com/424/frontend-developer/wordpress-the_content_limit-v-2/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 23:15:02 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=424</guid>
		<description><![CDATA[M-am lovit azi de două probleme destul de aiurea cu Wordpress-ul unui client. Se cereau următoarele: afișarea unui număr de caractere în excerpt în funcție de lungimea titlului. 
Prima problemă
Prima problemă a fost detectarea corectă a numărului de caractere dintr-un titlu. Cum un titlu putea avea &#38;mdash; în el (care este afișat ca „&#8212;”) sau [...]]]></description>
			<content:encoded><![CDATA[<p>M-am lovit azi de două probleme destul de aiurea cu Wordpress-ul unui client. Se cereau următoarele: afișarea unui număr de caractere în excerpt în funcție de lungimea titlului. </p>
<h3>Prima problemă</h3>
<p>Prima problemă a fost detectarea corectă a numărului de caractere dintr-un titlu. Cum un titlu putea avea <code>&amp;mdash;</code> în el (care este afișat ca „&mdash;”) sau alte caractere <acronym title="Hyper Text Markup Language">HTML</acronym>, un simplu <code><a href="http://php.net/strlen">strlen</a></code> nu ar fi fost prea exact. Prin urmare, a trebuit să fac următoarea chestie:</p>
<pre class="brush: php">
$lungimeTitlu = strlen(preg_replace(&#039;/&amp;[0-9a-z]{2,8};|&amp;#[0-9]{1,7};|[0-9a-f]{1,6};/i&#039;, &#039; &#039;, get_the_title()));
</pre>
<p>Cum regex nu sunt pasiunea mea cea mai mare, codul l-am furat de <a href="http://www.gsdesign.ro/blog/cut-html-string-without-breaking-the-tags/">aici</a>.</p>
<h3>A doua problemă</h3>
<p>A doua problemă a fost cu <code>the_content_limit()</code> (care este o versiune ușor modificată a <a href="http://labitacora.net/comunBlog/limit-post.phps">acestui</a> script). Long story short, această funcție îți permite ceea ce <code>the_excerpt()</code> din Wordpress ar fi trebuit să știe implicit: să limiteze numărul de caractere fără prea mari bătăi de cap.</p>
<p>Eh, dar există o bătaie de cap. Și încă una care m-a bătut rău de tot: unele posturi aveau și imagini atașate (attachments). Iar această funcție se cam bâlbâia în momentul în care făcea <code>strip_tags</code>: îmi insera în excerpt și textul de la imaginea din attachment. Mi-am dat seama de asta deoarece avea imaginea avea fix același text care era și în titlu. Și după vreo zece minute de wtf și scărpinat în cap mi-am dat seama care era problema. </p>
<p>Prin urmare, am pornit RegexBuddy (btw, e super tare aplicația!) și am început să mă joc cu singurul selector pe care îl știu : <code>(.*?)</code> <img src='http://www.iamntz.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  . Până am reușit să fac match la div-ul buclucaș. După un <code>preg_replace</code> aplicat strategic, totul a mers ca pe roate.</p>
<pre class="brush: php">
function the_content_limit($max_char, $more_link_text = &#039; &amp;#0133;&#039;, $stripteaser = 0, $more_file = &#039;&#039;) {

	$pattern = &#039;!&lt;div(.*?)class=&quot;wp-caption(.*?)&quot;(.*?)&lt;/div&gt;!&#039;;
	$content = get_the_content($more_link_text, $stripteaser, $more_file);
	$content = apply_filters(&#039;the_content&#039;, $content);
	$content = str_replace(&#039;]]&gt;&#039;, &#039;]]&amp;gt;&#039;, $content);
	$content = preg_replace($pattern,&#039;&#039;, $content);
	$content = strip_tags($content);

	if (strlen($_GET[&#039;p&#039;]) &gt; 0) {
		echo &quot;&lt;p&gt;&quot; . $content .&quot;&lt;/p&gt;&quot;;
	} else if ((strlen($content)&gt;$max_char) &amp;&amp; ($espacio = strpos($content, &quot; &quot;, $max_char ))) {
		$content = substr($content, 0, $espacio);
		$content = $content;
		echo &quot;&lt;p&gt;&quot; . $content . $more_link_text .&quot;&lt;/p&gt;&quot;;
	} else {
		echo &quot;&lt;p&gt;&quot; . $content .&quot;&lt;/p&gt;&quot;;
	}
}
</pre>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/TXcvCB_cOeI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/424/frontend-developer/wordpress-the_content_limit-v-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/424/frontend-developer/wordpress-the_content_limit-v-2/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Rezolvare „ruby: no such file to load — ubygems (LoadError)”</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/79onULzLElA/</link>
		<comments>http://www.iamntz.com/419/frontend-developer/rezolvare-ruby-no-such-file-to-load-ubygems-loaderror/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 11:59:42 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=419</guid>
		<description><![CDATA[Una din marile probleme ale lui E-texteditor este că are prea multe probleme. Iar problemele se înmulțesc cu fiecare versiune nouă   Dar cum încă nu am găsit niciun editor comparabil la funcționalitate cu E-texteditor, încă am rămas cu el. 
Eh, și una din problemele apărute la ultima versiune este eroarea ruby: no such [...]]]></description>
			<content:encoded><![CDATA[<p>Una din marile probleme ale lui <a href="http://www.e-texteditor.com/">E-texteditor</a> este că are prea multe probleme. Iar problemele se înmulțesc cu fiecare versiune nouă <img src='http://www.iamntz.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' />  Dar cum încă nu am găsit niciun editor comparabil la funcționalitate cu E-texteditor, încă am rămas cu el. </p>
<p>Eh, și una din problemele apărute la ultima versiune este eroarea <strong>ruby: no such file to load &#8212; ubygems (LoadError)</strong>. Când apare? Când încerci să folosești bundles ceva mai complicate (cum ar fi „insert close tag” sau „Insert open/close tag”), îți trântește minunăția de eroare. Și evident, te enervezi. Și cauți o rezolvare&#8230;</p>
<h3>Rezolvare</h3>
<p>Întâi de toate, fă update la Cygwin (ultima versiune este 1.7.x) </p>
<p>Apoi apasă Win+R și scrie:</p>
<pre class="brush: bash">C:\cygwin\Cygwin.bat</pre>
<p>Descarci și dezarhivezi ultima versiune de <a href="http://rubyforge.org/projects/rubygems/">ruby gems</a> după care te duci în directorul unde ai dezarhivat și scrii:</p>
<pre class="brush: bash">ruby setup.rb install</pre>
<p>Se intalează <code>gem</code> și&#8230; cam asta e. Dă un restart la E (dacă e deschis) și ar trebui să meargă.</p>
<h3>Editare FOARTE târzie</h3>
<p>Dacă problema persistă, apasă win+pause -> advanced system settings -> Environment Variables -> New system variable -> și adaugă variabila <code>CYGWIN</code> și valoarea <code>nodosfilewarning</code>.</p>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/79onULzLElA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/419/frontend-developer/rezolvare-ruby-no-such-file-to-load-ubygems-loaderror/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/419/frontend-developer/rezolvare-ruby-no-such-file-to-load-ubygems-loaderror/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Wordpress + Video = Love</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/qnR6o_y-5PU/</link>
		<comments>http://www.iamntz.com/397/frontend-developer/wordpress-videos-love/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 11:01:56 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=397</guid>
		<description><![CDATA[Un feature nou apărut în Wordpress 2.9 este suportul oEmbed. Long story short, poți adăuga filme de pe diverse platforme video (youtube, vimeo, blip etc) prin simpla scriere a url-ului pe un singur rând. Asta te scutește de multe bătăi de cap și, să-ți spun drept, cred că trebuia să fie introdus în WP 1.0. [...]]]></description>
			<content:encoded><![CDATA[<p>Un feature nou apărut în Wordpress 2.9 este <a href="http://codex.wordpress.org/Embeds">suportul oEmbed</a>. Long story short, poți adăuga filme de pe diverse platforme video (youtube, vimeo, blip etc) prin simpla scriere a url-ului pe un singur rând. Asta te scutește de multe bătăi de cap și, să-ți spun drept, cred că trebuia să fie introdus în WP 1.0. Pentru că, fără un plugin adecvat, un neștiutor n-ar fi avut șanse prea mari să publice un video (html view -> paste).</p>
<p>În fine, treaba e bună, implementarea la fel. </p>
<h3>Problema</h3>
<p>Problema mea este că filmele de pe youtube &#8211; fie cele „băgate” cu oEmebed, fie cele „băgate” cu codul de pe youtube &#8211; deschid o pagină nouă când faci click pe ele. O a doua problemă (de această dată doar la filmele introduse prin metoda clasică &#8211; copy/paste) este că filmele au anumite dimensiuni standard, iar o redimensionare (ex. cât tot blogul) înseamnă calcule. Și cum nimănui nu-i plac calculele (sau cel puțin mie nu-mi plac!), iată o soluție <img src='http://www.iamntz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>O a doua problemă o reprezintă filmele self-hosted. Adică ai un fișier <code>.flv</code> și vrei să-l pui pe blog. Cum faci?</p>
<h3>Soluția</h3>
<p>Soluția la aceste probleme am găsit-o (de voie, de nevoie) la ultima temă de Wordpress codată și se numește <a href="http://www.longtailvideo.com/players/jw-flv-player/">JW Player</a>. Cum se implementează?<br />
<span id="more-397"></span></p>
<ol>
<li><a href="http://www.longtailvideo.com/jw/upload/mediaplayer-viral.zip">Se descarcă</a> ultima versiune a player-ului și se urcă pe ftp în directorul <code>wp-contents/themes/tema-curenta</code> (schimbi <em>tema-curentă</em> cu numele corespunzător), astfel încât să ai următoarea structură: <code>wp-content/themes/tema-curenta/jwplayer</code>.</li>
<li>Editezi <em>functions.php</em> (dacă nu există, îl creezi) și, undeva la sfârșit, adaugi:
<pre class="brush: php">
&lt;?php
function customVideo($atts, $content = null){
	$tema = get_bloginfo(&quot;template_url&quot;);
	$videoW = 640;
	$videoH = $videoW/1.26;
	$ret = 	&#039;&lt;object class=&quot;myVideoPlayer&quot; classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; name=&quot;player&quot; width=&quot;&#039;.$videoW.&#039;&quot; height=&quot;&#039;.$videoH.&#039;&quot;&gt;
					&lt;param name=&quot;movie&quot; value=&quot;&#039;.$tema.&#039;/jwplayer/player-viral.swf&quot; /&gt;
					&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;
					&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
					&lt;param name=&quot;flashvars&quot; value=&quot;file=&#039;.trim($content).&#039;&quot; /&gt;
					&lt;embed
						type=&quot;application/x-shockwave-flash&quot;
						name=&quot;player2&quot;
						src=&quot;&#039;.$tema.&#039;/jwplayer/player-viral.swf&quot;
						width=&quot;&#039;.$videoW.&#039;&quot;
						height=&quot;&#039;.$videoH.&#039;&quot;
						allowscriptaccess=&quot;always&quot;
						allowfullscreen=&quot;true&quot;
						flashvars=&quot;file=&#039;.trim($content).&#039;&quot;
					/&gt;
				&lt;/object&gt;&#039;;
		return $ret;
}

add_shortcode(&#039;video&#039;, &#039;customVideo&#039;);
</pre>
</li>
<li>Schimbi <code>$videoW</code> cu lățimea dorită. </li>
<li>În postul în care vrei să adaugi un film, pur și simplu scrii asta: <code>[<span>video</span>]youtube url[/video]</code> sau <code>[<span>video</span>]link-ul spre fișierul .flv[/video]</code> Și cam atât.</li>
</ol>
<h3>DEMO &#8211; Elton John &#038; Axl Rose &mdash; Bohemian Rhapsody</h3>
<p><object class="myVideoPlayer" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="700" height="555.555555556">
					<param name="movie" value="http://www.iamntz.com/wp-content/themes/myNtz-2/jwplayer/player-viral.swf" />
					<param name="allowfullscreen" value="true" />
					<param name="allowscriptaccess" value="always" />
					<param name="flashvars" value="file=http://www.youtube.com/watch?v=JWGFrV88UEs&#038;hd=1" />
					<embed
						type="application/x-shockwave-flash"
						name="player2"
						src="http://www.iamntz.com/wp-content/themes/myNtz-2/jwplayer/player-viral.swf" 
						width="700" 
						height="555.555555556"
						allowscriptaccess="always" 
						allowfullscreen="true"
						flashvars="file=http://www.youtube.com/watch?v=JWGFrV88UEs&#038;hd=1" 
					/>
				</object><br />
<br/></p>
<h3>Un fel de disclaimer</h3>
<p>Codul injectat în pagină după șmecheria asta <strong>NU va mai fi valid</strong>. Singurul „fix” pentru această problemă este un <acronym title="Javascript">js</acronym> de vreo 6kb (swfobject, inclus în arhiva jwplayer). Dacă vor exista doritori, voi adăuga și un articol ce acoperă și respectiva soluție.</p>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/qnR6o_y-5PU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/397/frontend-developer/wordpress-videos-love/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/397/frontend-developer/wordpress-videos-love/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
		<item>
		<title>Despre upgrade</title>
		<link>http://feedproxy.google.com/~r/TheFrontendDeveloper/~3/ULiGlI2IoAg/</link>
		<comments>http://www.iamntz.com/393/frontend-developer/despre-upgrade/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 17:28:00 +0000</pubDate>
		<dc:creator>Staicu Ionuț-Bogdan</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[UI/UX]]></category>

		<guid isPermaLink="false">http://www.iamntz.com/?p=393</guid>
		<description><![CDATA[Scriam în postul anterior de Photoshop CS4. Și mi-am adus aminte de o gafă comisă de unii producători de software: salvarea setărilor.
Treaba stă în felul următor: am făcut upgrade la Foobar (de la 0.9x la 1.x). Rezultatul? Toate setările s-au dus. Hotkeys, playlist-uri, tot. A apărut o versiune nouă de Foobar, să-i zicem 1.x+1. Ce [...]]]></description>
			<content:encoded><![CDATA[<p>Scriam în postul anterior de Photoshop CS4. Și mi-am adus aminte de o gafă comisă de unii producători de software: salvarea setărilor.</p>
<p>Treaba stă în felul următor: am făcut upgrade la Foobar (de la 0.9x la 1.x). Rezultatul? Toate setările s-au dus. Hotkeys, playlist-uri, tot. A apărut o versiune nouă de Foobar, să-i zicem 1.x+1. Ce s-a întâmplat după instalare? Desigur, s-au pierdut setările&#8230;</p>
<p>Apoi vine și rândul Adobe. Am avut CS. Am făcut upgrade la CS2. Apoi la CS3. Apoi la CS4. Absolut nicio versiune nu te întreabă dacă vrei să importe setările. </p>
<p>Mie, unul, îmi vine greu să cred că nimeni de la Adobe nu s-a lovit de problema asta&#8230;</p>
<p>Și stau și mă gândesc: cât de greu este să faci un „importator” (?!) pentru setări? Ok, setările au alt format acum, dar TU ești cel ce a făcut formatul precedent! Înțeleg că nu ești în stare să păstrezi același format ( json anyone? ), dar măcar fă dracului un import funcțional. </p>
<p>Fix în aceeași categorie intră programele de back-up. Eu folosesc Acronis True Image și își face treaba excelent. Singura problemă este că&#8230; Habar n-am cum să salvez setările!!! Dacă sunt nevoit să reinstalez Windows, trebuie să trec iar prin setările Acronis&#8230;</p>
<img src="http://feeds.feedburner.com/~r/TheFrontendDeveloper/~4/ULiGlI2IoAg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.iamntz.com/393/frontend-developer/despre-upgrade/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.iamntz.com/393/frontend-developer/despre-upgrade/?utm_source=subscriber&amp;utm_medium=rss&amp;utm_campaign=rss</feedburner:origLink></item>
	</channel>
</rss>
