<?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>Victor Stanciu</title>
	
	<link>http://www.victorstanciu.ro</link>
	<description>Web Developer, Geek</description>
	<lastBuildDate>Tue, 02 Mar 2010 11:45:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</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/VictorStanciu" /><feedburner:info uri="victorstanciu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><link>http://www.victorstanciu.ro/</link><url>http://www.victorstanciu.ro/vic.png</url><title>Victor Stanciu</title></image><item>
		<title>PHP SoapClient port bug workaround</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/q-OUnATMPVU/</link>
		<comments>http://www.victorstanciu.ro/php-soapclient-port-bug-workaround/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 11:45:15 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[soap]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=456</guid>
		<description><![CDATA[ PHP&#8217;s SoapClient has a bug (PHP 5.2.10 here, still not fixed apparently) when the SOAP service must be accessed on a different port other than 80. The WSDL file is fetched correctly, but all subsequent requests are made without any port in the Host field. This causes a SoapFault exception when trying to call [...]


<b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/ftl-jump/' rel='bookmark' title='Permanent Link: FTL jump &#8230; now!'>FTL jump &#8230; now!</a></li></ol>]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Fphp-soapclient-port-bug-workaround%2F&amp;title=PHP+SoapClient+port+bug+workaround&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>PHP&#8217;s SoapClient has a <a href="http://bugs.php.net/bug.php?id=30359">bug</a> (PHP 5.2.10 here, still not fixed apparently) when the SOAP service must be accessed on a different port other than 80. The WSDL file is fetched correctly, but all subsequent requests are made without any port in the Host field. This causes a SoapFault exception when trying to call any of the service&#8217;s methods.</p>
<p>So if the WSDL location is:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://example.com:33080/soap/server/path?WSDL</pre></div></div>

<p>All requests after fetching the WSDL file will be made to:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://example.com/soap/server/path</pre></div></div>

<p>The simplest way i could work around this was to extend SoapClient and intercept the constructor and the __doRequest method to inject the port in the location on each request:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> My_SoapClient <span style="color: #000000; font-weight: bold;">extends</span> SoapClient <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$wsdl</span><span style="color: #339933;">,</span> <span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #990000;">parse_url</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wsdl</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'port'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_port <span style="color: #339933;">=</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'port'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$wsdl</span><span style="color: #339933;">,</span> <span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __doRequest<span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">,</span> <span style="color: #000088;">$location</span><span style="color: #339933;">,</span> <span style="color: #000088;">$action</span><span style="color: #339933;">,</span> <span style="color: #000088;">$version</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$parts</span> <span style="color: #339933;">=</span> <span style="color: #990000;">parse_url</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$location</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_port<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'port'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_port<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$location</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">buildLocation</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$return</span> <span style="color: #339933;">=</span> parent<span style="color: #339933;">::</span>__doRequest<span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">,</span> <span style="color: #000088;">$location</span><span style="color: #339933;">,</span> <span style="color: #000088;">$action</span><span style="color: #339933;">,</span> <span style="color: #000088;">$version</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$return</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> buildLocation<span style="color: #009900;">&#40;</span><span style="color: #000088;">$parts</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$location</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'scheme'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$location</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'scheme'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'://'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'user'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pass'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$location</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'user'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">':'</span><span style="color: #339933;">.</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pass'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'@'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$location</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'host'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'port'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$location</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">':'</span><span style="color: #339933;">.</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'port'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$location</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'path'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$location</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'?'</span><span style="color: #339933;">.</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'query'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$location</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>It works for me, and I would like to know if it doesn&#8217;t cover your particular case :)</p>


<p><b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/ftl-jump/' rel='bookmark' title='Permanent Link: FTL jump &#8230; now!'>FTL jump &#8230; now!</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=q-OUnATMPVU:WQgaopsTck4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=q-OUnATMPVU:WQgaopsTck4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=q-OUnATMPVU:WQgaopsTck4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=q-OUnATMPVU:WQgaopsTck4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=q-OUnATMPVU:WQgaopsTck4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=q-OUnATMPVU:WQgaopsTck4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=q-OUnATMPVU:WQgaopsTck4:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=q-OUnATMPVU:WQgaopsTck4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=q-OUnATMPVU:WQgaopsTck4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=q-OUnATMPVU:WQgaopsTck4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=q-OUnATMPVU:WQgaopsTck4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/q-OUnATMPVU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/php-soapclient-port-bug-workaround/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/php-soapclient-port-bug-workaround/</feedburner:origLink></item>
		<item>
		<title>Reset / change Windows 7 / Vista / XP password using a Ubuntu CD</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/XHhwgYUuhjU/</link>
		<comments>http://www.victorstanciu.ro/reset-change-windows-7-vista-xp-password-using-a-ubuntu-cd/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 19:27:40 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[recovery]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=432</guid>
		<description><![CDATA[ So you forgot your Windows password, and want to reset it? No problem. All you need is a Ubuntu CD (download ISO file here, instructions on how to burn the image to a CD here).
Step 1: Boot from Ubuntu CD

Insert the Ubuntu CD, restart your computer. At the boot screen, select the language and then [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Freset-change-windows-7-vista-xp-password-using-a-ubuntu-cd%2F&amp;title=Reset+%2F+change+Windows+7+%2F+Vista+%2F+XP+password+using+a+Ubuntu+CD&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>So you forgot your Windows password, and want to reset it? No problem. All you need is a Ubuntu CD (download ISO file <a title="Download Ubuntu ISO" href="http://www.ubuntu.com/getubuntu/download">here</a>, instructions on how to burn the image to a CD <a href="http://pcsupport.about.com/od/toolsofthetrade/ht/burnisofile.htm">here</a>).</p>
<h2>Step 1: Boot from Ubuntu CD</h2>
<p><a href="http://www.victorstanciu.ro/wp-content/uploads/2009/11/1.png" class="fullimg"><img src="http://victorstanciu.ro/wp-content/uploads/2009/11/thumbs/1.png" alt="" /></a></p>
<p>Insert the Ubuntu CD, restart your computer. At the boot screen, select the language and then the first option, &#8220;Try Ubuntu without any change to your computer.&#8221;</p>
<h2>Step 2: install chntpw</h2>
<p><i><a href="http://freshmeat.net/projects/chntpw/" title="chntpw">chntpw</a> is a Linux utility to (re)set the password of any user that has a valid (local) account</i></p>
<p>Go to Administration / Software Sources, and make sure the &#8220;Community maintained Open Source software (universe)&#8221; option is checked. Press &#8220;Close&#8221;.</p>
<p><a href="http://www.victorstanciu.ro/wp-content/uploads/2009/11/2.png" class="fullimg"><img src="http://victorstanciu.ro/wp-content/uploads/2009/11/thumbs/2.png" alt="" /></a><br />
<a href="http://www.victorstanciu.ro/wp-content/uploads/2009/11/3.png" class="fullimg"><img src="http://victorstanciu.ro/wp-content/uploads/2009/11/thumbs/3.png" alt="" /></a></p>
<p>You will be prompted to reload the package information. Press &#8220;Reload&#8221;</p>
<p><a href="http://www.victorstanciu.ro/wp-content/uploads/2009/11/4.png" class="fullimg"><img src="http://victorstanciu.ro/wp-content/uploads/2009/11/thumbs/4.png" alt="" /></a></p>
<p>Open a terminal (Applications / Accessories / Terminal):</p>
<p><a href="http://www.victorstanciu.ro/wp-content/uploads/2009/11/5.png" class="fullimg"><img src="http://victorstanciu.ro/wp-content/uploads/2009/11/thumbs/5.png" alt="" /></a></p>
<p>Once the terminal is opened, type the following command in it and press enter:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">sudo apt-get install chntpw</pre></td></tr></table></div>

<h3>Step 3: Reset password</h3>
<p>Once chntpw is installed, you have to mount the Windows partition. The easiest way to do this is to click the Windows drive in the Places menu (usually the first HDD in the list):</p>
<p><a href="http://www.victorstanciu.ro/wp-content/uploads/2009/11/6.png" class="fullimg"><img src="http://victorstanciu.ro/wp-content/uploads/2009/11/thumbs/6.png" alt="" /></a></p>
<p>When the Windows drive is opened, make sure to copy the location where the drive was mounted from the address bar, and paste it in the following command:</p>
<p><a href="http://www.victorstanciu.ro/wp-content/uploads/2009/11/7.png" class="fullimg"><img src="http://victorstanciu.ro/wp-content/uploads/2009/11/thumbs/7.png" alt="" /></a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">cd /media/A854C956382E2B62/WINDOWS/system32/config/</pre></td></tr></table></div>

<p>Now you have the following options:</p>
<h4>Reset / change the Administrator password:</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">sudo chntpw SAM</pre></td></tr></table></div>

<h4>Reset / change another user&#8217;s password:</h4>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">sudo chntpw -u your_username SAM</pre></td></tr></table></div>

<p>Whichever you type, you will be presented with a list of options:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">- - - - User Edit Menu:
 1 - Clear (blank) user password
 2 - Edit (set new) user password (careful with this on XP or Vista)
 3 - Promote user (make user an administrator)
(4 - Unlock and enable user account) [seems unlocked already]
 q - Quit editing user, back to user select
Select: [q] &gt;</pre></td></tr></table></div>

<p>Pressing <b>1</b>, <b>enter</b>, <b>y</b> and another <b>enter</b> will remove the user&#8217;s password, and allow you to restart the computer and logon to Windows.</p>


<p>No related posts.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=XHhwgYUuhjU:nTC0DhYLlFE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=XHhwgYUuhjU:nTC0DhYLlFE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=XHhwgYUuhjU:nTC0DhYLlFE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=XHhwgYUuhjU:nTC0DhYLlFE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=XHhwgYUuhjU:nTC0DhYLlFE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=XHhwgYUuhjU:nTC0DhYLlFE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=XHhwgYUuhjU:nTC0DhYLlFE:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=XHhwgYUuhjU:nTC0DhYLlFE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=XHhwgYUuhjU:nTC0DhYLlFE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=XHhwgYUuhjU:nTC0DhYLlFE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=XHhwgYUuhjU:nTC0DhYLlFE:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/XHhwgYUuhjU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/reset-change-windows-7-vista-xp-password-using-a-ubuntu-cd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/reset-change-windows-7-vista-xp-password-using-a-ubuntu-cd/</feedburner:origLink></item>
		<item>
		<title>Closure: Extend ui.DatePicker to highlight events</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/bstA0z1B3KM/</link>
		<comments>http://www.victorstanciu.ro/closure-extend-ui-datepicker-to-highlight-events/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 16:49:24 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Closure]]></category>
		<category><![CDATA[DatePicker]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=378</guid>
		<description><![CDATA[ I got a change to play with the new Google Closure Library a bit, and since the DatePicker component is pretty nice, i figured i could enhance it a bit to suit a need i had some time ago: overlay data from a database, highlight the dates that correspond to events, and jump to the event&#8217;s [...]


<b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/update-carousel/' rel='bookmark' title='Permanent Link: Update Carousel'>Update Carousel</a></li><li><a href='http://www.victorstanciu.ro/ajaj-autocompleter/' rel='bookmark' title='Permanent Link: AJAJ Autocompleter'>AJAJ Autocompleter</a></li><li><a href='http://www.victorstanciu.ro/sizzle-prototype/' rel='bookmark' title='Permanent Link: Sizzle si Prototype'>Sizzle si Prototype</a></li></ol>]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Fclosure-extend-ui-datepicker-to-highlight-events%2F&amp;title=Closure%3A+Extend+ui.DatePicker+to+highlight+events&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>I got a change to play with the new <a href="http://code.google.com/closure/library/">Google Closure Library</a> a bit, and since the <a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/class_goog_ui_DatePicker.html">DatePicker</a> component is pretty nice, i figured i could enhance it a bit to suit a need i had some time ago: overlay data from a database, highlight the dates that correspond to events, and jump to the event&#8217;s page when clicking on a highlighted cell.</p>
<p><a href="http://dev.victorstanciu.ro/google-closure/examples/events-date-picker/"><strong>Example page</strong></a><br />
<a href="http://dev.victorstanciu.ro/google-closure/examples/events-date-picker/eventsdatepicker.js"><strong>Example script</strong></a></p>
<h2>Step 1: provide the JSON events in HTML:</h2>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> events <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>
    <span style="color: #009900;">&#123;</span>date<span style="color: #339933;">:</span> <span style="color: #3366CC;">'2009-11-05'</span><span style="color: #339933;">,</span> url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'http://www.example.com'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span>date<span style="color: #339933;">:</span> <span style="color: #3366CC;">'2009-11-07'</span><span style="color: #339933;">,</span> url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'http://www.example.com'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span>date<span style="color: #339933;">:</span> <span style="color: #3366CC;">'2009-11-10'</span><span style="color: #339933;">,</span> url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'http://www.example.com'</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h2>Step 2: extend goog.ui.DatePicker:</h2>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">goog.<span style="color: #660066;">provide</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'goog.ui.EventsDatePicker'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
goog.<span style="color: #660066;">require</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'goog.ui.DatePicker'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">EventsDatePicker</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>opt_events<span style="color: #339933;">,</span> opt_date<span style="color: #339933;">,</span> opt_dateTimeSymbols<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">DatePicker</span>.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> opt_date<span style="color: #339933;">,</span> opt_dateTimeSymbols<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">events</span> <span style="color: #339933;">=</span> opt_events<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
goog.<span style="color: #660066;">inherits</span><span style="color: #009900;">&#40;</span>goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">EventsDatePicker</span><span style="color: #339933;">,</span> goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">DatePicker</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Notice how inheritance is handled with Closure. Even though we call <b>goog.inherits()</b>, we <b>must</b> also call the superclass constructor for it to work.</p>
<h2>Step 3: highlight events:</h2>
<p>goog.ui.DatePicker has a <b>setDecorator()</b> method, that accepts a function as it&#8217;s parameter. The function should take a Date object and return a CSS class name to decorate the corresponding cell with.</p>
<p>It&#8217;s basically called once for every cell in the picker, and we are going to use this by checking whether an event exists for the date and return &#8220;goog-date-picker-event&#8221; if so:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">EventsDatePicker</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>opt_events<span style="color: #339933;">,</span> opt_date<span style="color: #339933;">,</span> opt_dateTimeSymbols<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">DatePicker</span>.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> opt_date<span style="color: #339933;">,</span> opt_dateTimeSymbols<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">events</span> <span style="color: #339933;">=</span> opt_events<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// new line:</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">setDecorator</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">eventDecorator</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
goog.<span style="color: #660066;">inherits</span><span style="color: #009900;">&#40;</span>goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">EventsDatePicker</span><span style="color: #339933;">,</span> goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">DatePicker</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">/**
 * Searches the events array and returns the event corresponding to passed date
 */</span>
goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">EventsDatePicker</span>.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">findEventByDate</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>date<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> dateString <span style="color: #339933;">=</span> date.<span style="color: #660066;">toIsoString</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> event      <span style="color: #339933;">=</span> goog.<span style="color: #660066;">array</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">events</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> event.<span style="color: #660066;">date</span> <span style="color: #339933;">==</span> dateString<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">return</span> event<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">/**
 * Returns a CSS class name to use for cells that have events
 */</span>
goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">EventsDatePicker</span>.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">eventDecorator</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>date<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> event <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">findEventByDate</span><span style="color: #009900;">&#40;</span>date<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
&nbsp;
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>event <span style="color: #339933;">!==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">'goog-date-picker-event'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Notice the use of <a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/closure_goog_array_array.js.html">goog.array.find()</a> to find the event that matches the date.</p>
<h2>Step 4: click events:</h2>
<p>We will use the findEventByDate function defined above and DatePicker&#8217;s SELECT event to jump to an event&#8217;s URL when clicking on it&#8217;s date:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">EventsDatePicker</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>opt_events<span style="color: #339933;">,</span> opt_date<span style="color: #339933;">,</span> opt_dateTimeSymbols<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">DatePicker</span>.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> opt_date<span style="color: #339933;">,</span> opt_dateTimeSymbols<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">events</span> <span style="color: #339933;">=</span> opt_events<span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">setDecorator</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">eventDecorator</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">// new line:</span>
    goog.<span style="color: #660066;">events</span>.<span style="color: #660066;">listen</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">DatePicker</span>.<span style="color: #660066;">Events</span>.<span style="color: #660066;">SELECT</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dateClicked</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">/**
 * Checks if an event cell was clicked, and jumps to the event's URL if true
 */</span>
goog.<span style="color: #660066;">ui</span>.<span style="color: #660066;">EventsDatePicker</span>.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">dateClicked</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> date  <span style="color: #339933;">=</span> event.<span style="color: #660066;">date</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> event <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">findEventByDate</span><span style="color: #009900;">&#40;</span>date<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>event <span style="color: #339933;">!==</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> event.<span style="color: #660066;">url</span> <span style="color: #339933;">!=</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        document.<span style="color: #660066;">location</span>.<span style="color: #660066;">href</span> <span style="color: #339933;">=</span> event.<span style="color: #660066;">url</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>That&#8217;s it :). It&#8217;s a short example, but it covers some of the basic aspects of inheritance, event listeners, and some of the utility methods. Closure looks nice :)</p>
<p><a href="http://dev.victorstanciu.ro/google-closure/examples/events-date-picker/"><strong>Example page</strong></a><br />
<a href="http://dev.victorstanciu.ro/google-closure/examples/events-date-picker/eventsdatepicker.js"><strong>Example script</strong></a></p>


<p><b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/update-carousel/' rel='bookmark' title='Permanent Link: Update Carousel'>Update Carousel</a></li><li><a href='http://www.victorstanciu.ro/ajaj-autocompleter/' rel='bookmark' title='Permanent Link: AJAJ Autocompleter'>AJAJ Autocompleter</a></li><li><a href='http://www.victorstanciu.ro/sizzle-prototype/' rel='bookmark' title='Permanent Link: Sizzle si Prototype'>Sizzle si Prototype</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=bstA0z1B3KM:rRZEobcWWGI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=bstA0z1B3KM:rRZEobcWWGI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=bstA0z1B3KM:rRZEobcWWGI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=bstA0z1B3KM:rRZEobcWWGI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=bstA0z1B3KM:rRZEobcWWGI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=bstA0z1B3KM:rRZEobcWWGI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=bstA0z1B3KM:rRZEobcWWGI:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=bstA0z1B3KM:rRZEobcWWGI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=bstA0z1B3KM:rRZEobcWWGI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=bstA0z1B3KM:rRZEobcWWGI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=bstA0z1B3KM:rRZEobcWWGI:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/bstA0z1B3KM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/closure-extend-ui-datepicker-to-highlight-events/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/closure-extend-ui-datepicker-to-highlight-events/</feedburner:origLink></item>
		<item>
		<title>Google Analytics goal steps recorded as exit pages</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/vktJwZlJZQA/</link>
		<comments>http://www.victorstanciu.ro/google-analytics-goal-steps-recorded-as-exit-pages/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 08:07:37 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[reports]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=357</guid>
		<description><![CDATA[ We encountered a problem with the Google Analytics goal steps on one of our websites, where some of the steps were recorded as exit pages. In the following image, the first exit page is actually the second step in the goal:

After a bit of investigating, it seems that the first step matches all the [...]


<b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/closure-extend-ui-datepicker-to-highlight-events/' rel='bookmark' title='Permanent Link: Closure: Extend ui.DatePicker to highlight events'>Closure: Extend ui.DatePicker to highlight events</a></li></ol>]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Fgoogle-analytics-goal-steps-recorded-as-exit-pages%2F&amp;title=Google+Analytics+goal+steps+recorded+as+exit+pages&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>We encountered a problem with the Google Analytics goal steps on one of our websites, where some of the steps were recorded as exit pages. In the following image, the first exit page is actually the second step in the goal:</p>
<p><a title="Funnel visualization" href="http://www.victorstanciu.ro/wp-content/uploads/2009/07/analytics-funnels.png" class="fullimg" style="background-color: #FFF; text-align: center;"><img class="size-medium wp-image-358 alignnone" title="Google Analytics Funnels" src="http://www.victorstanciu.ro/wp-content/uploads/2009/07/analytics-funnels-300x192.png" alt="Funnel visualization" width="300" height="192" /></a></p>
<p>After a bit of investigating, it seems that the first step matches all the subsequent ones, so proceeding to the next step in the goal is actually recorded as a page refresh, hence exit page. Our steps where:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">/apartamente-finalizate-in-greenfield
/apartamente-finalizate-in-greenfield/cere-detalii</pre></td></tr></table></div>

<p>The solution in this case was to explicitly specify that the step URL matches the <b>ending</b> of the actual URL:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">/apartamente-finalizate-in-greenfield$
/apartamente-finalizate-in-greenfield/cere-detalii$</pre></td></tr></table></div>

<p>Note that i encountered this problem with both head match and regular expression match on two different websites.</p>


<p><b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/closure-extend-ui-datepicker-to-highlight-events/' rel='bookmark' title='Permanent Link: Closure: Extend ui.DatePicker to highlight events'>Closure: Extend ui.DatePicker to highlight events</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=vktJwZlJZQA:bhmn0bbafJo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=vktJwZlJZQA:bhmn0bbafJo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=vktJwZlJZQA:bhmn0bbafJo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=vktJwZlJZQA:bhmn0bbafJo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=vktJwZlJZQA:bhmn0bbafJo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=vktJwZlJZQA:bhmn0bbafJo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=vktJwZlJZQA:bhmn0bbafJo:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=vktJwZlJZQA:bhmn0bbafJo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=vktJwZlJZQA:bhmn0bbafJo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=vktJwZlJZQA:bhmn0bbafJo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=vktJwZlJZQA:bhmn0bbafJo:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/vktJwZlJZQA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/google-analytics-goal-steps-recorded-as-exit-pages/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/google-analytics-goal-steps-recorded-as-exit-pages/</feedburner:origLink></item>
		<item>
		<title>Synchronizing tasks between Trac and Netbeans</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/_D_w88XcLyQ/</link>
		<comments>http://www.victorstanciu.ro/synchronizing-tasks-between-trac-and-netbeans/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 21:24:54 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[cubeon]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=349</guid>
		<description><![CDATA[ Cube°n is a NetBeans plugin that integrates and synchronizes the IDEs tasks with some of the most common issue-tracking systems, including Trac.
It has some very nice features, including support for multiple Trac repositories, custom ticket filtering based on Trac queries, and many more.
To install and start using Cube°n you will need to:

Install the plugin, [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Fsynchronizing-tasks-between-trac-and-netbeans%2F&amp;title=Synchronizing+tasks+between+Trac+and+Netbeans&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p><a title="Cube°n" href="http://code.google.com/p/cubeon/">Cube°n</a> is a <a href="http://www.netbeans.org/">NetBeans</a> plugin that integrates and synchronizes the IDEs tasks with some of the most common issue-tracking systems, including <a title="Trac" href="http://trac.edgewall.org/">Trac</a>.</p>
<p>It has some very nice features, including support for multiple Trac repositories, custom ticket filtering based on <a href="http://trac.edgewall.org/wiki/TracQuery">Trac queries</a>, and many more.</p>
<p>To install and start using Cube°n you will need to:</p>
<ul>
<li>Install the plugin, either by manually <a title="Download Cube°n" href="http://code.google.com/p/cubeon/downloads/list">downloading</a> the files or by adding the update center to NetBeans (Tools -&gt; Plugins -&gt; Settings -&gt; Add -&gt; <a href="http://cubeon.googlecode.com/svn/updates/latest.xml">http://cubeon.googlecode.com/svn/updates/latest.xml</a>) and selecting it from the plugin &#8220;Available plugins&#8221; list</li>
<li>Install the patched XML-RPC plugin for Trac:</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">wget http://cubeon.googlecode.com/files/TracXMLRPC-1.6.6-py2.6.egg
easy_install TracXMLRPC-1.6.6-py2.6.egg</pre></div></div>

<ul>
<li>Make sure you enable the new XML-RPC plugin and the HTTP authentication plugin by adding the following in your trac.ini file:</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">[components]
tracrpc.* = enabled
httpauth.* = enabled
&nbsp;
[httpauth]
paths = /login, /login/xmlrpc</pre></div></div>

<p>That&#8217;s it. You can now use the plugin (Window -&gt; Cube°n -&gt; Task Repositories and Task Explorer), and start adding Trac repositories and adding / synchronizing tasks.</p>


<p>No related posts.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=_D_w88XcLyQ:mlWYbICDh6k:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=_D_w88XcLyQ:mlWYbICDh6k:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=_D_w88XcLyQ:mlWYbICDh6k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=_D_w88XcLyQ:mlWYbICDh6k:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=_D_w88XcLyQ:mlWYbICDh6k:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=_D_w88XcLyQ:mlWYbICDh6k:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=_D_w88XcLyQ:mlWYbICDh6k:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=_D_w88XcLyQ:mlWYbICDh6k:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=_D_w88XcLyQ:mlWYbICDh6k:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=_D_w88XcLyQ:mlWYbICDh6k:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=_D_w88XcLyQ:mlWYbICDh6k:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/_D_w88XcLyQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/synchronizing-tasks-between-trac-and-netbeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/synchronizing-tasks-between-trac-and-netbeans/</feedburner:origLink></item>
		<item>
		<title>Prototype: Hotkeys</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/h5j2pfU9gTI/</link>
		<comments>http://www.victorstanciu.ro/prototype-hotkeys/#comments</comments>
		<pubDate>Tue, 26 May 2009 12:42:11 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[hotkeys]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[shortcuts]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=342</guid>
		<description><![CDATA[ Am scris un mic plugin pentru Prototype ce permite inregistrarea oricator hotkeys si combinatii de taste (poate inclusiv sa &#8220;suprascrie&#8221; combinatii de taste ale browserului, in genul CTRL+S).
Documentatia si codul sunt pe pagina de la Google Code, o sa redau si aici exemplul: Presupunem ca vrem sa rulam functia add cu doi parametri la [...]


<b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/sizzle-prototype/' rel='bookmark' title='Permanent Link: Sizzle si Prototype'>Sizzle si Prototype</a></li><li><a href='http://www.victorstanciu.ro/prototype-zoomer/' rel='bookmark' title='Permanent Link: Prototype: Zoomer'>Prototype: Zoomer</a></li><li><a href='http://www.victorstanciu.ro/prototype-carousel-update/' rel='bookmark' title='Permanent Link: Prototype: Carousel &#8211; Update'>Prototype: Carousel &#8211; Update</a></li></ol>]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Fprototype-hotkeys%2F&amp;title=Prototype%3A+Hotkeys&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>Am scris un mic plugin pentru Prototype ce permite inregistrarea oricator hotkeys si combinatii de taste (poate inclusiv sa &#8220;suprascrie&#8221; combinatii de taste ale browserului, in genul <b>CTRL+S</b>).</p>
<p>Documentatia si codul sunt pe pagina de la <a href="http://code.google.com/p/prototype-hotkeys/" title="Prototype: Hotkeys"><b>Google Code</b></a>, o sa redau si aici exemplul: Presupunem ca vrem sa rulam functia <b>add</b> cu doi parametri la apasarea tastelor ALT+A:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> add<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>parseInt<span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> parseInt<span style="color: #009900;">&#40;</span>b<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
Hotkeys.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;alt+a&quot;</span><span style="color: #339933;">,</span> add<span style="color: #339933;">,</span> <span style="color: #CC0000;">3</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Pentru mai multe feature-uri, precum si lista de alias-uri pentru taste, consultati <a href="http://code.google.com/p/prototype-hotkeys/" title="Prototype: Hotkeys">pagina proiectului</a>.</p>


<p><b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/sizzle-prototype/' rel='bookmark' title='Permanent Link: Sizzle si Prototype'>Sizzle si Prototype</a></li><li><a href='http://www.victorstanciu.ro/prototype-zoomer/' rel='bookmark' title='Permanent Link: Prototype: Zoomer'>Prototype: Zoomer</a></li><li><a href='http://www.victorstanciu.ro/prototype-carousel-update/' rel='bookmark' title='Permanent Link: Prototype: Carousel &#8211; Update'>Prototype: Carousel &#8211; Update</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=h5j2pfU9gTI:0CygPTvYVE8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=h5j2pfU9gTI:0CygPTvYVE8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=h5j2pfU9gTI:0CygPTvYVE8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=h5j2pfU9gTI:0CygPTvYVE8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=h5j2pfU9gTI:0CygPTvYVE8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=h5j2pfU9gTI:0CygPTvYVE8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=h5j2pfU9gTI:0CygPTvYVE8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=h5j2pfU9gTI:0CygPTvYVE8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=h5j2pfU9gTI:0CygPTvYVE8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=h5j2pfU9gTI:0CygPTvYVE8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=h5j2pfU9gTI:0CygPTvYVE8:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/h5j2pfU9gTI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/prototype-hotkeys/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/prototype-hotkeys/</feedburner:origLink></item>
		<item>
		<title>Detectarea platformelor mobile in PHP</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/N11BdukYVR8/</link>
		<comments>http://www.victorstanciu.ro/detectarea-platformelor-mobile-in-php/#comments</comments>
		<pubDate>Thu, 21 May 2009 13:19:06 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[opera mini]]></category>
		<category><![CDATA[palm]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=335</guid>
		<description><![CDATA[ Folosind diverse resurse online (inclusiv lista de User-Agents folositi de dispozitivele mobile de aici), am scris o mica clasa PHP ce detecteaza platforma mobila a utilizatorului din cele mai cunoscute (fara nici o pretentie de exhaustivitate):

Google Android
BlackBerry
iPhone
Opera Mini
Palm
Windows Mobile
Generic (adica restul)

Modul de utilizare este foarte simplu, descris in detaliu pe Google Code
Nu am avut [...]


<b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/php-class-autoloader/' rel='bookmark' title='Permanent Link: PHP Class: AutoLoader'>PHP Class: AutoLoader</a></li></ol>]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Fdetectarea-platformelor-mobile-in-php%2F&amp;title=Detectarea+platformelor+mobile+in+PHP&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>Folosind diverse resurse online (inclusiv lista de User-Agents folositi de dispozitivele mobile de <a href="http://www.zytrax.com/tech/web/mobile_ids.html" title="Mobile ID Strings" target="_blank">aici</a>), am scris o mica clasa PHP ce detecteaza platforma mobila a utilizatorului din cele mai cunoscute (fara nici o pretentie de exhaustivitate):</p>
<ul>
<li>Google Android</li>
<li>BlackBerry</li>
<li>iPhone</li>
<li>Opera Mini</li>
<li>Palm</li>
<li>Windows Mobile</li>
<li>Generic (adica restul)</li>
</ul>
<p>Modul de utilizare este foarte simplu, descris in detaliu pe <a href="http://code.google.com/p/php-mobile-detect/" title="Google Code"><b>Google Code</b></a></p>
<p>Nu am avut foarte multe device-uri la indemana pentru teste (decat cateva standard, plus un iPhone si un Blackberry), asa ca as aprecia daca m-ati atentiona daca nu functioneaza cum ar trebui.</p>


<p><b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/php-class-autoloader/' rel='bookmark' title='Permanent Link: PHP Class: AutoLoader'>PHP Class: AutoLoader</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=N11BdukYVR8:oseBr2t4oqY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=N11BdukYVR8:oseBr2t4oqY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=N11BdukYVR8:oseBr2t4oqY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=N11BdukYVR8:oseBr2t4oqY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=N11BdukYVR8:oseBr2t4oqY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=N11BdukYVR8:oseBr2t4oqY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=N11BdukYVR8:oseBr2t4oqY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=N11BdukYVR8:oseBr2t4oqY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=N11BdukYVR8:oseBr2t4oqY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=N11BdukYVR8:oseBr2t4oqY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=N11BdukYVR8:oseBr2t4oqY:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/N11BdukYVR8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/detectarea-platformelor-mobile-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/detectarea-platformelor-mobile-in-php/</feedburner:origLink></item>
		<item>
		<title>FTL jump … now!</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/ChE5z8p_s-U/</link>
		<comments>http://www.victorstanciu.ro/ftl-jump/#comments</comments>
		<pubDate>Tue, 19 May 2009 17:23:12 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=284</guid>
		<description><![CDATA[ Fiecare fisier JavaScript, CSS, imagine, Flash, etc. afisat utilizatorului reprezinta un request catre server. Pentru fiecare asemenea fisier browserul trimite cererea, serverul o preia, proceseaza, serveste fisierul cerut, si tot asa. La site-urile &#8220;mari&#8221; se simte. In load-ul serverului, in latimea de banda consumata, in experienta utilizatorilor.
Urmand recomandarile echipei de la Yahoo!, o sa [...]


<b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/php-class-autoloader/' rel='bookmark' title='Permanent Link: PHP Class: AutoLoader'>PHP Class: AutoLoader</a></li><li><a href='http://www.victorstanciu.ro/ajaj-autocompleter/' rel='bookmark' title='Permanent Link: AJAJ Autocompleter'>AJAJ Autocompleter</a></li></ol>]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Fftl-jump%2F&amp;title=FTL+jump+...+now%21&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>Fiecare fisier JavaScript, CSS, imagine, Flash, etc. afisat utilizatorului reprezinta un request catre server. Pentru fiecare asemenea fisier browserul trimite cererea, serverul o preia, proceseaza, serveste fisierul cerut, si tot asa. La site-urile &#8220;mari&#8221; se simte. In load-ul serverului, in latimea de banda consumata, in experienta utilizatorilor.</p>
<p>Urmand <a href="http://developer.yahoo.com/performance/rules.html" title="<br />
Best Practices for Speeding Up Your Web Site" target="_blank">recomandarile</a> echipei de la Yahoo!, o sa va arat la ce solutie am ajuns.</p>
<p>Dar mai intai &#8230; cifre. Am ales <a href="http://www.okazii.ro/" title="Okazii" target="_blank"><b>Okazii.ro</b></a> drept studiu de caz (toate masuratorile sunt facute cu <a href="http://developer.yahoo.com/yslow/" title="YSlow" target="_blank">YSlow</a>, folosind o versiune salvata a primei pagini):</p>
<h2>Fara <a href="http://en.wikipedia.org/wiki/FTL_(Battlestar_Galactica)" title="FTL" target="_blank">FTL</a> (pagina <a href="http://dev.victorstanciu.ro/experimente/okazii/old/" title="Okazii.ro - prima pagina">salvata aici</a>)</h2>
<ul>
<li>Nota generala in YSlow: <b>E</b></li>
<li>Numar request-uri pe prima pagina: <b>62</b></li>
<li>Dimensiune prima pagina: <b>406.4KB</b></li>
</ul>
<h2>Cu FTL  (pagina <a href="http://dev.victorstanciu.ro/experimente/okazii/" title="Okazii.ro - prima pagina">salvata aici</a>)</h2>
<ul>
<li>Nota generala in YSlow: <b>C</b></li>
<li>Numar request-uri pe prima pagina: <b>51</b></li>
<li>Dimensiune prima pagina: <b>226.0KB</b></li>
</ul>
<p>Calculat la traficul lor (aprox. <b>82.000</b> vizitatori unici <b>pe zi</b>), netinand cont de cache in nici unul din cazuri, asta se traduce in o diferenta de <b>902.000</b> de request-uri si <b>14.1 GB</b> trafic <b>lunar</b>.</p>
<h2>Cum se foloseste</h2>
<p>Presupunand urmatoarea structura de directoare:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">/public
    /css
    /js
index.php</pre></div></div>

<p><a href="http://dev.victorstanciu.ro/ftl/ftl.zip" title="Download"><b>Descarcati arhiva</b></a> si extrageti fisierele in root asa incat noua structura va fi:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">/ftl
    /cache
    /lib
    CSS.php
    File.php
    JS.php
    config.php
    index_css.php
    index_js.php
/public
    /css
    /js
index.php</pre></div></div>

<p>Mutati fisierele index_css.php si index_js.php din directorul /ftl in directorul /public/css, respectiv /public/js, si redenumiti-le in index.php:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">/ftl
    /cache
    /lib
    CSS.php
    File.php
    JS.php
    config.php
/public
    /css
        index.php
    /js
        index.php
index.php</pre></div></div>

<p>Adaugati liniile urmatoare in .htaccess:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">&lt;IfModule mod_expires.c&gt;
    ExpiresActive On
    ExpiresByType application/x-javascript A315360000
    ExpiresByType text/css A315360000
&lt;/IfModule&gt;
&nbsp;
RewriteEngine On
RewriteRule ^public/(js|css)/([a-z0-9\.]+)\.(js|css)$    public/$1/index.php?hash=$2</pre></td></tr></table></div>

<p>Includeti fisierele necesare in index.php:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
    <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ftl/JS.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ftl/CSS.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Totul e pregatit, tot ce mai trebuie sa facem e sa incarcam in pagina fisierele. Spre exemplu, ca sa incarc in &lt;head&gt; cateva fisiere CSS si JS:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
    <span style="color: #000088;">$css</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FTL_CSS<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$js</span>  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FTL_JS<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$css</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'reset'</span><span style="color: #009900;">&#41;</span>
        <span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'typo'</span><span style="color: #009900;">&#41;</span>
        <span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'layout'</span><span style="color: #009900;">&#41;</span>
        <span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'error'</span><span style="color: #009900;">&#41;</span>
        <span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ie'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'lte IE 7'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$js</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'prototype'</span><span style="color: #009900;">&#41;</span>
       <span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sizzle'</span><span style="color: #009900;">&#41;</span>
       <span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'effects'</span><span style="color: #009900;">&#41;</span>
       <span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'lightbox'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$css</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$js</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Nu uitati sa setati drepturi de scriere pe subdirectoarele din directorul /ftl/cache.</p>
<p>Codul HTML generat va arata in felul urmator:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000066;">media</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;screen&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;public/css/1e9dd525d1fbe94f7b8aede22cc141f5.1242750618.css&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!--[if lte IE 7]&gt;&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; href=&quot;public/css/25400724d7370b0b29c9369d9af3dd21.1242750626.css&quot; /&gt;&lt;![endif]--&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;public/js/56c728a5a7689ab1663359a7edff160a.1242751025.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></td></tr></table></div>

<p>Doua fisiere .css (unul pentru cele standard, unul incarcat doar pentru IE), si un fisier .js. <b>3 request</b>-uri in loc de <b>9</b>, si o dimensiune totala de aprox. <b>6.5 ori mai mica</b>. Fisierele sunt atat <b>minified</b> cat si <b>gzipped</b>, folosind librariile <a href="http://csstidy.sourceforge.net/" title="CSSTidy">CSSTidy</a>, respectiv <a href="http://dean.edwards.name/packer/" title="Packer">Packer</a></p>
<h2>Suna bine, dar ce se intampla cand &#8230;</h2>
<ul>
<li>
Modific sau sterg un fisier .css sau .js ? Trebuie sa schimb ceva de fiecare data ?</p>
<p><i>Nu. De fiecare data cand un fisier este modificat sau sters, fisierul rezultat este regenerat <b>automat</b>, fara nevoie de interventie.</i></p>
</li>
<li>
Un utilizator foloseste un browser ce nu suporta Gzip (stone-age style) ?</p>
<p><i>Respectivului utilizator ii este servita <b>automat</b> o versiune doar <b>minified</b>. Putin mai mare, evident, dar functionala.</i></p>
</li>
<li>
Structura directoarelor mele nu corespunde cu cea din exemplul de mai sus ?<br />
<i>In directorul /ftl este un fisier config.php unde puteti schimba caile catre fisiere / directoare. Aveti grija numai ca include-urile sa functioneze.</i>
</li>
</ul>


<p><b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/php-class-autoloader/' rel='bookmark' title='Permanent Link: PHP Class: AutoLoader'>PHP Class: AutoLoader</a></li><li><a href='http://www.victorstanciu.ro/ajaj-autocompleter/' rel='bookmark' title='Permanent Link: AJAJ Autocompleter'>AJAJ Autocompleter</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=ChE5z8p_s-U:1VSZ0UjVqy8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=ChE5z8p_s-U:1VSZ0UjVqy8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=ChE5z8p_s-U:1VSZ0UjVqy8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=ChE5z8p_s-U:1VSZ0UjVqy8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=ChE5z8p_s-U:1VSZ0UjVqy8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=ChE5z8p_s-U:1VSZ0UjVqy8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=ChE5z8p_s-U:1VSZ0UjVqy8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=ChE5z8p_s-U:1VSZ0UjVqy8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=ChE5z8p_s-U:1VSZ0UjVqy8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=ChE5z8p_s-U:1VSZ0UjVqy8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=ChE5z8p_s-U:1VSZ0UjVqy8:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/ChE5z8p_s-U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/ftl-jump/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/ftl-jump/</feedburner:origLink></item>
		<item>
		<title>Prototype: Carousel – Update</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/Gjchteh7si8/</link>
		<comments>http://www.victorstanciu.ro/prototype-carousel-update/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 19:15:46 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[carousel]]></category>
		<category><![CDATA[google-code]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=280</guid>
		<description><![CDATA[ A venit vremea ca si Carousel.js sa primeasca un binemeritat update, si sa fie mutat in noua lui casa, Google Code.
Asadar, update-urile si bug-tracking-ul vor fi de acum aici.
PS: Cateva din noilea feature-uri sunt in exemple.


Related posts:Update CarouselPrototype plugin: CarouselCarousel pe Scripteka


<b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/update-carousel/' rel='bookmark' title='Permanent Link: Update Carousel'>Update Carousel</a></li><li><a href='http://www.victorstanciu.ro/prototype-plugin-carousel/' rel='bookmark' title='Permanent Link: Prototype plugin: Carousel'>Prototype plugin: Carousel</a></li><li><a href='http://www.victorstanciu.ro/carousel-pe-scripteka/' rel='bookmark' title='Permanent Link: Carousel pe Scripteka'>Carousel pe Scripteka</a></li></ol>]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Fprototype-carousel-update%2F&amp;title=Prototype%3A+Carousel+-+Update&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>A venit vremea ca si <a href="http://www.victorstanciu.ro/prototype-plugin-carousel/" title="Carousel">Carousel.js</a> sa primeasca un binemeritat update, si sa fie mutat in noua lui casa, <a href="http://code.google.com/p/prototype-carousel/" title="prototype-carousel">Google Code</a>.</p>
<p>Asadar, update-urile si bug-tracking-ul vor fi de acum <a href="http://code.google.com/p/prototype-carousel/" title="prototype-carousel"><b>aici</b></a>.</p>
<p>PS: Cateva din noilea feature-uri sunt in <a href="http://dev.victorstanciu.ro/prototype/carousel/" title="Exemple"><b>exemple</b></a>.</p>


<p><b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/update-carousel/' rel='bookmark' title='Permanent Link: Update Carousel'>Update Carousel</a></li><li><a href='http://www.victorstanciu.ro/prototype-plugin-carousel/' rel='bookmark' title='Permanent Link: Prototype plugin: Carousel'>Prototype plugin: Carousel</a></li><li><a href='http://www.victorstanciu.ro/carousel-pe-scripteka/' rel='bookmark' title='Permanent Link: Carousel pe Scripteka'>Carousel pe Scripteka</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=Gjchteh7si8:VdGflG2rtsU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=Gjchteh7si8:VdGflG2rtsU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=Gjchteh7si8:VdGflG2rtsU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=Gjchteh7si8:VdGflG2rtsU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=Gjchteh7si8:VdGflG2rtsU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=Gjchteh7si8:VdGflG2rtsU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=Gjchteh7si8:VdGflG2rtsU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=Gjchteh7si8:VdGflG2rtsU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=Gjchteh7si8:VdGflG2rtsU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=Gjchteh7si8:VdGflG2rtsU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=Gjchteh7si8:VdGflG2rtsU:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/Gjchteh7si8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/prototype-carousel-update/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/prototype-carousel-update/</feedburner:origLink></item>
		<item>
		<title>Prototype: Zoomer</title>
		<link>http://feedproxy.google.com/~r/VictorStanciu/~3/cEjE4Ap2yZE/</link>
		<comments>http://www.victorstanciu.ro/prototype-zoomer/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 19:12:28 +0000</pubDate>
		<dc:creator>Victor Stanciu</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[zoom]]></category>

		<guid isPermaLink="false">http://www.victorstanciu.ro/?p=276</guid>
		<description><![CDATA[ M-a rugat cineva acum cateva zile sa recreez un inedit mod de a face zoom pe o imagine. Mi s-a parut foarte interesant, asa ca am scris o mica si rapida extensie de Prototype pentru asta.
Cu ocazia asta am creat si primul proiect pe Google Code, loc in care le voi muta si pe [...]


<b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/prototype-carousel-update/' rel='bookmark' title='Permanent Link: Prototype: Carousel &#8211; Update'>Prototype: Carousel &#8211; Update</a></li><li><a href='http://www.victorstanciu.ro/prototype-hotkeys/' rel='bookmark' title='Permanent Link: Prototype: Hotkeys'>Prototype: Hotkeys</a></li><li><a href='http://www.victorstanciu.ro/prototype-plugin-carousel/' rel='bookmark' title='Permanent Link: Prototype plugin: Carousel'>Prototype plugin: Carousel</a></li></ol>]]></description>
			<content:encoded><![CDATA[<!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/
	--><div style='float:right'><table border=0 bgcolor=#F8FAFA> <td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http%3A%2F%2Fwww.victorstanciu.ro%2Fprototype-zoomer%2F&amp;title=Prototype%3A+Zoomer&amp;t=2 ' height='18' width='120' scrolling='no' frameborder='0' ></iframe></td></table></div><p>M-a rugat cineva acum cateva zile sa recreez un inedit mod de a face zoom pe o imagine. Mi s-a parut foarte interesant, asa ca am scris o mica si rapida extensie de Prototype pentru asta.</p>
<p>Cu ocazia asta am creat si primul proiect pe Google Code, loc in care le voi muta si pe cele anterioare.</p>
<p>Un demo este <a href="http://dev.victorstanciu.ro/prototype/zoomer/" title="Prototype: Zoomer" target="_blank"><strong>aici</strong></a>, iar pagina proiectului pe Google Code este <a href="http://code.google.com/p/prototype-zoomer/" title="Google Code" target="_blank"><strong>asta</strong></a>.</p>


<p><b>Related posts</b>:<ol><li><a href='http://www.victorstanciu.ro/prototype-carousel-update/' rel='bookmark' title='Permanent Link: Prototype: Carousel &#8211; Update'>Prototype: Carousel &#8211; Update</a></li><li><a href='http://www.victorstanciu.ro/prototype-hotkeys/' rel='bookmark' title='Permanent Link: Prototype: Hotkeys'>Prototype: Hotkeys</a></li><li><a href='http://www.victorstanciu.ro/prototype-plugin-carousel/' rel='bookmark' title='Permanent Link: Prototype plugin: Carousel'>Prototype plugin: Carousel</a></li></ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=cEjE4Ap2yZE:VSLC_OiK1_g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=cEjE4Ap2yZE:VSLC_OiK1_g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=cEjE4Ap2yZE:VSLC_OiK1_g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=cEjE4Ap2yZE:VSLC_OiK1_g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=cEjE4Ap2yZE:VSLC_OiK1_g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=cEjE4Ap2yZE:VSLC_OiK1_g:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=cEjE4Ap2yZE:VSLC_OiK1_g:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=cEjE4Ap2yZE:VSLC_OiK1_g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?i=cEjE4Ap2yZE:VSLC_OiK1_g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=cEjE4Ap2yZE:VSLC_OiK1_g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/VictorStanciu?a=cEjE4Ap2yZE:VSLC_OiK1_g:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/VictorStanciu?d=TzevzKxY174" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/VictorStanciu/~4/cEjE4Ap2yZE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.victorstanciu.ro/prototype-zoomer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.victorstanciu.ro/prototype-zoomer/</feedburner:origLink></item>
	</channel>
</rss>
