<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Open eyes Working brain &#187; web</title>
	<atom:link href="http://federico.galassi.net/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://federico.galassi.net</link>
	<description>dedicated, in respect and admiration, to the spirit that lives in the computer</description>
	<lastBuildDate>Wed, 25 May 2011 18:08:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>A Lot of Javascript Love</title>
		<link>http://federico.galassi.net/2010/11/12/a-lot-of-javascript-love/</link>
		<comments>http://federico.galassi.net/2010/11/12/a-lot-of-javascript-love/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 23:22:39 +0000</pubDate>
		<dc:creator>federico</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[event driven]]></category>
		<category><![CDATA[love]]></category>
		<category><![CDATA[new parts]]></category>
		<category><![CDATA[webtechcon]]></category>

		<guid isPermaLink="false">http://federico.galassi.net/?p=344</guid>
		<description><![CDATA[I am back from Webtech Conference Italia 2010. One of the first in Italy featuring a full javascript day with six talks. Not counting javascript related talks in other tracks. It has been exciting to see javascript explained in patterns, historically and computationally analyzed, tuned for faster websites, organized in popular libraries, used to query [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://federico.galassi.net/wp-content/uploads/2010/11/love_bear_small.jpg"><img class="alignright size-full wp-image-346" title="love_bear_small" src="http://federico.galassi.net/wp-content/uploads/2010/11/love_bear_small.jpg" alt="" width="200" height="200" /></a>I am back from <a href="http://webtechcon.it/">Webtech Conference Italia 2010</a>. One of the first in Italy featuring a full <a href="http://webtechcon.it/2010/sessions/?tid=1752">javascript day</a> with six talks. Not counting javascript related talks in other tracks. It has been exciting to see javascript explained in patterns, historically and computationally analyzed, tuned for faster websites, organized in popular libraries, used to query modern databases, to extract data from the web, to mashup those data, to program mobile devices, improved in latest browsers and at last on the server side to build scalable, fast network applications.</p>
<p>We&#8217;re witnessing the exponential rise of a neglected little broken language. A language that obviously started with <a href="http://en.wikipedia.org/wiki/First-class_function">something very right</a> and <a href="http://www.yuiblog.com/blog/2008/08/14/premature-standardization/">grew up even better</a>.</p>
<p>A language that is finally gonna get A LOT of love.</p>
<p>P.S. Here are my talks:</p>
<div id="__ss_5742893" style="width: 425px;"><strong><a title="Event Driven Javascript" href="http://www.slideshare.net/fgalassi/event-driven-javascript">Event Driven Javascript</a></strong><object id="__sse5742893" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=eventdrivenjs-101111092308-phpapp02&amp;stripped_title=event-driven-javascript&amp;userName=fgalassi" /><param name="name" value="__sse5742893" /><param name="allowfullscreen" value="true" /><embed id="__sse5742893" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=eventdrivenjs-101111092308-phpapp02&amp;stripped_title=event-driven-javascript&amp;userName=fgalassi" name="__sse5742893" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/fgalassi">Federico Galassi</a>.</div>
</div>
<div id="__ss_5745867" style="width: 425px;"><strong><a title="Javascript the New Parts" href="http://www.slideshare.net/fgalassi/javascript-the-new-parts">Javascript the New Parts</a></strong><object id="__sse5745867" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsthenewparts-101111152356-phpapp01&amp;stripped_title=javascript-the-new-parts&amp;userName=fgalassi" /><param name="name" value="__sse5745867" /><param name="allowfullscreen" value="true" /><embed id="__sse5745867" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsthenewparts-101111152356-phpapp01&amp;stripped_title=javascript-the-new-parts&amp;userName=fgalassi" name="__sse5745867" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/fgalassi">Federico Galassi</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://federico.galassi.net/2010/11/12/a-lot-of-javascript-love/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Complexity killed the Wave</title>
		<link>http://federico.galassi.net/2010/08/07/complexity-killed-the-wave/</link>
		<comments>http://federico.galassi.net/2010/08/07/complexity-killed-the-wave/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 22:11:41 +0000</pubDate>
		<dc:creator>federico</dc:creator>
				<category><![CDATA[simplicity]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[adoption]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[gall]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[kill]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://federico.galassi.net/?p=336</guid>
		<description><![CDATA[So, Google is going to kill Wave. But despite these wins, and numerous loyal fans, Wave has not seen the user adoption we would have liked. We don’t plan to continue developing Wave as a standalone product, but we will maintain the site at least through the end of the year and extend the technology for [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://federico.galassi.net/wp-content/uploads/2010/08/nelson.jpg"><img class="alignright size-full wp-image-339" title="nelson" src="http://federico.galassi.net/wp-content/uploads/2010/08/nelson.jpg" alt="" width="200" height="187" /></a>So, Google is going to <a href="http://googleblog.blogspot.com/2010/08/update-on-google-wave.html">kill Wave</a>.</p>
<blockquote><p>But despite these wins, and numerous loyal fans, Wave has not seen the user adoption we would have liked. We don’t plan to continue developing Wave as a standalone product, but we will maintain the site at least through the end of the year and extend the technology for use in other Google projects.</p></blockquote>
<p>That&#8217;s a great example of why &#8220;do one thing well&#8221; is better than &#8220;do it all&#8221;. Not only because, as <a href="http://en.wikipedia.org/wiki/Gall's_law">Gall&#8217;s law</a> implies, it&#8217;s easier to get a simple system straight, but also because once you get a complex system straight, you still have to make people get their mind around it. Wave made chat and e-mail play well together, with a great replay feature, bots and translation. Twitter gives short text updates. Adoption declared the winner, but we <a href="http://federico.galassi.net/2009/06/09/google-wave-fallacy/">already knew it</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://federico.galassi.net/2010/08/07/complexity-killed-the-wave/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Please Don&#8217;t Touch the Slow Parts</title>
		<link>http://federico.galassi.net/2010/05/08/please-dont-touch-the-slow-parts/</link>
		<comments>http://federico.galassi.net/2010/05/08/please-dont-touch-the-slow-parts/#comments</comments>
		<pubDate>Sat, 08 May 2010 09:58:09 +0000</pubDate>
		<dc:creator>federico</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[better software]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[faster web]]></category>
		<category><![CDATA[fullo]]></category>
		<category><![CDATA[high performance web sites]]></category>
		<category><![CDATA[rules]]></category>
		<category><![CDATA[slow parts]]></category>
		<category><![CDATA[steve souders]]></category>

		<guid isPermaLink="false">http://federico.galassi.net/?p=321</guid>
		<description><![CDATA[I spoke at Better Software 2010, together with Fullo, about speeding up web applications. The talk draws heavily from Steve&#8217;s work, but it&#8217;s a little bit different from current literature because it tries to organize best practices not as flat list but under macro-areas emerged as &#8220;slow parts&#8221;. Also, i concluded with my obsession that [...]]]></description>
			<content:encoded><![CDATA[<p>I spoke at <a href="http://www.bettersoftware.it">Better Software</a> 2010, together with <a href="http://www.ideato.it">Fullo</a>, about speeding up web applications. The talk draws heavily from <a href="http://www.stevesouders.com/">Steve&#8217;s work</a>, but it&#8217;s a little bit different from current literature because it tries to organize best practices not as flat list but under macro-areas emerged as &#8220;slow parts&#8221;. Also, i concluded with <a href="http://federico.galassi.net/2009/11/15/javascript-performance-make-the-browser-happy-and-you-sad/">my obsession</a> that complexity inherently introduced by performance optimizations should not be dealt with by programmers directly, but by means of automation and abstraction.</p>
<p>Here it is.</p>
<p><strong>update</strong>: now i am linking to the extended version which i gave at phpday 2010</p>
<div style="width:425px" id="__ss_4110316"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/fgalassi/please-dont-touch-the-slow-parts-v2" title="Please Don&#39;t Touch the Slow Parts V2">Please Don&#39;t Touch the Slow Parts V2</a></strong><object id="__sse4110316" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pleasedonttouch2-100515130606-phpapp01&#038;stripped_title=please-dont-touch-the-slow-parts-v2" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4110316" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pleasedonttouch2-100515130606-phpapp01&#038;stripped_title=please-dont-touch-the-slow-parts-v2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/fgalassi">Federico Galassi</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://federico.galassi.net/2010/05/08/please-dont-touch-the-slow-parts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Authentication as it SHOULD have been</title>
		<link>http://federico.galassi.net/2009/12/31/web-authentication-as-it-should-have-been/</link>
		<comments>http://federico.galassi.net/2009/12/31/web-authentication-as-it-should-have-been/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 18:19:51 +0000</pubDate>
		<dc:creator>federico</dc:creator>
				<category><![CDATA[rest]]></category>
		<category><![CDATA[simplicity]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[401]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[digest]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[locastorage]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[logout]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[sessionstorage]]></category>
		<category><![CDATA[stateless]]></category>
		<category><![CDATA[usernametoken]]></category>
		<category><![CDATA[wsse]]></category>

		<guid isPermaLink="false">http://federico.galassi.net/?p=214</guid>
		<description><![CDATA[REST is not an easy concept to grasp but once you get it you finally see the light on many different things. Having just read RESTful Web Services, i wanted to point out some unusual revelation that came to me: form based authentication with its login/session/logout workflow, which is currently dominant on the web, is [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-215" title="auth_small" src="http://federico.galassi.net/wp-content/uploads/2009/12/auth_small.jpg" alt="auth_small" width="200" height="191" /></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">REST is not an easy concept to grasp but once you get it you finally see the light on many different things. Having just read RESTful Web Services, i wanted to point out some unusual revelation that came to me: form based authentication with its login/session/logout workflow, which is currently dominant on the web, is hopelessly broken.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">First two words about REST. It&#8217;s a set of constraints, of simplifying assumptions which, if applied to an architecture, will guarantee a number of good properties such as simplicity, scalability and reliability. The best known implementation of a RESTful architecture is the web and its backbone protocol, HTTP. HTTP RESTfulness made it good and yet so easy to implement that it eventually emerged as the great darwinian winner. Either your router or a pretty rabbit, if it&#8217;s networked it&#8217;s likely to speak HTTP.</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">Instead of giving yet another list of REST rules, i am going to give you a feeling of how the web works from a REST perspective. There&#8217;s a server which keeps state of the application, split into meaningful resources. Each resource has its own name (URI). That&#8217;s all the server knows. Then there&#8217;s a client which acts as a finite state machine visiting resources and then moving to other ones through links and forms. The state of the conversation, the session, where the client have been and where it is now, it&#8217;s something the client is in full control of. Server knows nothing about it. That&#8217;s statelessness.</div>
<p>Having recently read <a href="http://www.amazon.com/Restful-Web-Services-Leonard-Richardson/dp/0596529260">RESTful Web Services</a>, i wanted to write about the most interesting of my REST-induced epiphanies:</p>
<p style="text-align: left; "><a href="http://en.wikipedia.org/wiki/Form_based_authentication">Form based authentication</a> with its login/session/logout workflow, which is currently dominant on the web, is hopelessly broken.</p>
<p>To understand why, one has to grasp how the greatest living RESTful implementation, the web and its backbone protocol <a href="http://www.w3.org/Protocols/">HTTP</a>, was <a href="http://www.ted.com/talks/tim_berners_lee_on_the_next_web.html">meant to work</a>. In a nutshell, there&#8217;s a server that keeps the state of the web application, split into meaningful <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_2_1_1">resources</a>. Each resource has its own name (<a href="http://en.wikipedia.org/wiki/Uniform_Resource_Identifier">URI</a>) and a set of available <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_2_1_2">representations</a> of itself. That&#8217;s all the server knows. Then there&#8217;s a client that acts as a <a href="http://en.wikipedia.org/wiki/Finite-state_machine">finite state machine</a> visiting resources, getting representations and then moving to other resources through links and forms. <a href="http://en.wikipedia.org/wiki/Session_(computer_science)">The state of the conversation, the session</a>, where a client has been and where it is now, is something that belongs to the client. Server drives the client by feeding him a graph made of states and links to other states, but it&#8217;s the client who is in charge of following a path. That&#8217;s <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_3">statelessness</a>, the simplifying property that made the web triumph as a <a href="http://en.wikipedia.org/wiki/Survival_of_the_fittest">darwinian winner</a>.</p>
<p>In this view, authentication should have been largely a client-side business.<br />
The client visits resources anonymously. If it wants to be authenticated, it just starts sending authentication data with <strong>each</strong> further request. If it wants to be anonymous again, it just stops. It could as well send a mix of authenticated and anonymous requests.<br />
The server doesn&#8217;t care of what happens between requests. If a single request carries authentication data, it checks the data and possibly replies as if the client were authenticated. If a request has no authentication data, a generic response is returned. There&#8217;s no server-side login through a form, there&#8217;s no server-side logout, and above all, there&#8217;s no temporal ordering between those two and hence no server tracked session. All of a sudden, the beauty of this comes with great force. By delegating authentication to the browser using the standard HTTP mechanism we can greatly <strong>simplify</strong> application code.</p>
<p>Unfortunately, in reality this is not the case. During its race to the top, HTTP lost part of its original vision, mainly due to implementation mistakes.</p>
<ol>
<li><a href="http://www.ietf.org/rfc/rfc2617.txt">The specs</a> failed to hit the sweet spot of authentication security. They standardized <a href="http://en.wikipedia.org/wiki/Basic_access_authentication">Basic Authentication</a> which, by sending user and password in plain text, scared people to death and <a href="http://en.wikipedia.org/wiki/Digest_access_authentication">Digest</a> which, due to its complexity and required server cooperation, never really caught on. A client-side mechanism with cheap yet reasonable security such as <a href="http://www.oasis-open.org/committees/wss/documents/WSS-Username-02-0223-merged.pdf">WSSE UsernameToken</a>, <a href="http://www.xml.com/pub/a/2003/12/17/dive.html">later adopted by atom</a>, would have been optimal.</li>
<li>Browsers took away login from client&#8217;s hands by showing the popup dialog to input user/password <strong>only</strong> after a 401 http error code <strong>from server</strong>. There should have been an always visible &#8220;login&#8221; button since <a href="http://tools.ietf.org/html/rfc2617">the specs</a> said &#8220;A user agent that wishes to authenticate itself with an origin server&#8211;usually, but <strong>not necessarily</strong>, after receiving a 401&#8230;&#8221;.</li>
<li>Browsers practically took away logout from client&#8217;s hands by requiring to close the browser in order to clean the passwords cache. There should have been an always visible &#8220;logout&#8221; button.</li>
<li>Browsers gave no chance to customize the ugly and annoyingly modal login dialog. HTML and/or CSS could have been used.</li>
<li>Browsers gave no client-side storage needed to keep session data but again turned back to server with <a href="http://en.wikipedia.org/wiki/HTTP_cookie">cookies</a>. They should have given something like upcoming HTML5 <a href="http://www.w3.org/TR/2009/WD-webstorage-20091222/">localStorage and sessionStorage</a>.</li>
</ol>
<p>Now there&#8217;s not much that can be done short of a collaborative effort by all browser vendors. Meanwhile we can keep dealing with authentication in application code on the server, in a never ending pile of custom solutions, each one slightly different, for yet another pretty standard problem. A problem solved <a href="http://tools.ietf.org/html/rfc1945#section-11">15 years ago</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://federico.galassi.net/2009/12/31/web-authentication-as-it-should-have-been/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Javascript Performance: Make the Browser Happy (and You Sad)</title>
		<link>http://federico.galassi.net/2009/11/15/javascript-performance-make-the-browser-happy-and-you-sad/</link>
		<comments>http://federico.galassi.net/2009/11/15/javascript-performance-make-the-browser-happy-and-you-sad/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 20:40:11 +0000</pubDate>
		<dc:creator>federico</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[simplicity]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[aptimize]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[compilers]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[foreach]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[mark]]></category>
		<category><![CDATA[speed]]></category>
		<category><![CDATA[twain]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://federico.galassi.net/?p=193</guid>
		<description><![CDATA[The browser is emerging as the best platform for applications, so a large community is growing to address its final weakness: speed. Google, Yahoo and various independent programmers are all pushing a bunch of clever techniques to boost performance and please end users. That&#8217;s nice, yet as Mark Twain once said, half of the results of good [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-203" title="BENDER" src="http://federico.galassi.net/wp-content/uploads/2009/11/BENDER1.jpeg" alt="BENDER" width="232" height="184" />The browser is emerging as the <a href="http://en.wikipedia.org/wiki/HTML5">best platform</a> for applications, so a large community is growing to address its final weakness: speed. <a href="http://code.google.com/speed/">Google</a>, <a href="http://developer.yahoo.com/performance/">Yahoo</a> and <a href="http://javascriptrocks.com/performance/">various independent programmers</a> are all pushing a bunch of clever techniques to boost performance and please end users. That&#8217;s nice, yet as Mark Twain once said, <em>half of the results of good intentions are evil</em> and i see potential danger in many of the suggestions made. Here a representative short list of them:</p>
<ul>
<li>Avoid for-in and forEach in favor of optimized while loops</li>
<li>Before making modifications to a DOM node remove it and then re-insert it</li>
<li>To insert multiple DOM nodes, first insert them into a Document Fragment and then add it to the DOM</li>
<li>Join all scripts into a single file</li>
<li>Load javascript files on demand</li>
</ul>
<p>Let&#8217;s make it clear for once, execution speed is not a human problem, that&#8217;s what computers are for, they execute our commands fast. The human problem is programming speed and writing down clear, readable, maintainable commands aka programs. forEach loops make sense to me, they say &#8220;i want to do something on each item&#8221;, optimized while loops make sense to computers. If i want to add DOM nodes or modify one, i don&#8217;t care of removing it or document fragments, browsers care. To me it&#8217;s just noise. Almost all of the problems addressed by those techniques stem from lack of smartness in the browser, and that&#8217;s where fixes belong to, on the machine side. The fact that there are <a href="http://www.microsoft.com/windows/Internet-explorer/default.aspx">inept browser makers</a> is no excuse. Fixes still belong to the machine, they&#8217;re repeatable and can be made automatic. We have a long history of programs automatically converting human friendly code to machine friendly code. They&#8217;re called <a href="http://en.wikipedia.org/wiki/Compiler">compilers</a> and the output either machine code or optimized javascript doesn&#8217;t matter.</p>
<p>So, learn about javascript performance since knowledge is always the way, but don&#8217;t turn yourself into a machine, you&#8217;d be an awful one. Use the tools and wait for browsers to catch up.</p>
<ul>
<li><a href="http://www.aptimize.com/">Aptimize</a></li>
<li><a href="http://code.google.com/closure/compiler/">Closure Compiler</a></li>
<li><a href="http://developer.yahoo.com/yui/3/yui/#use">YUI 3 use</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://federico.galassi.net/2009/11/15/javascript-performance-make-the-browser-happy-and-you-sad/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Refactoring to Unobtrusive Javascript</title>
		<link>http://federico.galassi.net/2009/09/28/refactoring-to-unobtrusive-javascript/</link>
		<comments>http://federico.galassi.net/2009/09/28/refactoring-to-unobtrusive-javascript/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 21:49:06 +0000</pubDate>
		<dc:creator>federico</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://federico.galassi.net/?p=159</guid>
		<description><![CDATA[I&#8217;ve been thinking for a while about techniques to enforce maximum separation of concerns in the client-side web technology stack. Even though, total separation of presentation, content and business logic may well be a utopia, the list of refactorings i collected over time are generally good to improve code quality and the whole concept of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking for a while about techniques to enforce maximum <a href="http://en.wikipedia.org/wiki/Separation_of_concerns">separation of concerns</a> in the client-side web technology stack. Even though, total separation of presentation, content and business logic may well be a utopia, the list of refactorings i collected over time are generally good to improve code quality and the whole concept of refactoring unusually applied to javascript is quite interesting per se. Here&#8217;s a talk about it i gave at <a href="http://www.javascriptcamp.com/">Javascript Camp 2009</a>.</p>
<div id="__ss_2081724" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Refactoring to Unobtrusive Javascript" href="http://www.slideshare.net/fgalassi/refactoring-to-unobtrusive-javascript">Refactoring to Unobtrusive Javascript</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20090925refactoringtounobtrusivejsjscamp-090928090731-phpapp01&amp;stripped_title=refactoring-to-unobtrusive-javascript" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20090925refactoringtounobtrusivejsjscamp-090928090731-phpapp01&amp;stripped_title=refactoring-to-unobtrusive-javascript" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/fgalassi">Federico Galassi</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://federico.galassi.net/2009/09/28/refactoring-to-unobtrusive-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

