<?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>Be the signal &#187; web development</title>
	<atom:link href="http://bethesignal.org/blog/tag/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://bethesignal.org</link>
	<description>where we&#039;re going, we don&#039;t need roads...</description>
	<lastBuildDate>Thu, 26 Jan 2012 05:52:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<atom:link rel='hub' href='http://bethesignal.org/?pushpress=hub'/>
		<item>
		<title>Packet and Denby</title>
		<link>http://bethesignal.org/blog/2010/08/15/packet-and-denby/</link>
		<comments>http://bethesignal.org/blog/2010/08/15/packet-and-denby/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 13:53:33 +0000</pubDate>
		<dc:creator>Jeff Waugh</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[denby]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[packet]]></category>
		<category><![CDATA[scooter]]></category>
		<category><![CDATA[socket.io]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[websockets]]></category>

		<guid isPermaLink="false">http://bethesignal.org/?p=1741</guid>
		<description><![CDATA[This is Packet. This is Denby. I mention in the video that it&#8217;ll end up being &#8220;like TweetDeck&#8221;. I breezed past that a tad too quickly &#8212; it&#8217;s definitely not going to be an HTML5 clone of TweetDeck! (Turns out &#8230; <a href="http://bethesignal.org/blog/2010/08/15/packet-and-denby/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>This is Packet.</h2>
<p><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-large wp-image-1755" title="Packet's Speedo vs. Speed" src="http://bethesignal.org/wp-content/uploads/2010/08/speedo-220-bike-50-640x478.jpg" alt="" width="640" height="478" /></p>
<h2>This is <a title="Denby" href="http://www.hellodenby.com/">Denby</a>.</h2>
<p><video tabindex="0" type="video/ogg;codecs='theora,vorbis'" src="http://bethesignal.org/wp-content/uploads/2010/08/denby-01-prototype.ogv" poster="http://bethesignal.org/wp-content/uploads/2010/08/denby-01-prototype-640x284.png" preload="none" controls="true" height="284" width="640"><a href="http://bethesignal.org/wp-content/uploads/2010/08/denby-01-prototype.ogv"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-large wp-image-1759" title="Denby Prototype Video (Ogg/Theora)" src="http://bethesignal.org/wp-content/uploads/2010/08/denby-01-prototype-640x284.png" alt="" width="640" height="284" /></a></video></p>
<p>I mention in the video that it&#8217;ll end up being &#8220;like TweetDeck&#8221;. I breezed past that a tad too quickly &#8212; it&#8217;s definitely not going to be an HTML5 clone of TweetDeck! (Turns out they&#8217;re working on one of those already.)</p>
<p>Instead, it will take inspiration from the multi-column approach, but hopefully improve the user experience on a number of levels:</p>
<ul>
<li>It&#8217;ll be 100% Free Software / Open Source&#8230; and one hopes, peer produced.</li>
<li>JavaScript on the server, JavaScript on the client, with liberal doses of &#8220;HTML5&#8243; (the platform your platform could be), whatever that means to you.</li>
<li>No Adobe AIR, and thus, no vicious memory and CPU abuse! Seriously: <del title="Firefox? What was I thinking when I wrote this?">Firefox</del> TweetDeck is wasting more CPU time sitting &#8220;idle&#8221; than Chromium and node.js are using to run Denby. Oh, and node.js is 12MB resident.</li>
<li>It can work a bit like a desktop app&#8230; use the &#8220;web page as application&#8221; tool your browser provides. Firefox has Prism, Chromium has&#8230; a menu item. <img width='16' height='16' src='http://bethesignal.org/wp-content/plugins/tango-smilies/tango/face-wink.png' alt=';-)' class='wp-smiley' />  Denby will support things like desktop notifications, audio bleeps, drag-n-drop (for media uploads), inline display of media, etc.</li>
<li>Run local or hosted. Once I&#8217;m happy with the user experience, I&#8217;ll start thinking about cool things the server could do while you&#8217;re not connected to it! For now, it only maintains the connection to Twitter while a client is connected.</li>
<li>I want to build delicious multiple account support, without complicating the single account experience. It&#8217;ll merge streams, detect the context you&#8217;re acting upon (click reply and you&#8217;ll be replying from the appropriate account), etc.</li>
</ul>
<p>Please comment if you have any thoughts or suggestions&#8230; crimes committed by other Twitter clients, ideas for lovely web/desktop integration, and so on. Thanks! <img width='16' height='16' src='http://bethesignal.org/wp-content/plugins/tango-smilies/tango/face-smile.png' alt=':-)' class='wp-smiley' /> </p>
<p><a title="Denby" href="http://www.hellodenby.com/">HELLO DENBY</a>.</p>
<p style="text-align: center;">* * *</p>
<p>Note that I&#8217;ve already had questions about StatusNet and identi.ca support. Thus far, they don&#8217;t have user streams, which was one of the main reasons behind building Denby. That said, it is entirely possible for the Denby server to poll the REST API (given that it already talks to Twitter&#8217;s) and send the results down the WebSockets tube&#8230; so, we&#8217;ll see.</p>
<p>Hmm. Perhaps this is the best way to build a user streams API for StatusNet anyway? The web app could send JSON messages to node.js, which could relay them to the intended users&#8230; via multiple protocols! Long-running HTTP, WebSockets, whatever. If anyone is inspired to do this, StatusNet could have a bi-directional WebSockets API before Twitter does!</p>
<p style="text-align: center;">* * *</p>
<p><strong>Update:</strong> I made another quick video, showing a few improvements (including update bleeps &#8212; no chicken noises as yet), Denby in Firefox&#8217;s Prism environment, and sharing some thoughts about the web as a development platform. Enjoy!</p>
<p><video tabindex="0" type="video/ogg;codecs='theora,vorbis'" src="http://bethesignal.org/wp-content/uploads/2010/08/denby-02-prototype.ogv" poster="http://bethesignal.org/wp-content/uploads/2010/08/denby-02-prototype-640x330.png" preload="none" controls="true" height="330" width="640"><a href="http://bethesignal.org/wp-content/uploads/2010/08/denby-02-prototype.ogv"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-large wp-image-1771" title="Denby Prototype Video 2 (Ogg/Theora)" src="http://bethesignal.org/wp-content/uploads/2010/08/denby-02-prototype-640x330.png" alt="" width="640" height="330" /></a></video></p>
]]></content:encoded>
			<wfw:commentRss>http://bethesignal.org/blog/2010/08/15/packet-and-denby/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
<enclosure url="http://bethesignal.org/wp-content/uploads/2010/08/denby-01-prototype.ogv" length="12808118" type="video/ogg" />
<enclosure url="http://bethesignal.org/wp-content/uploads/2010/08/denby-02-prototype.ogv" length="22335152" type="video/ogg" />
		</item>
		<item>
		<title>Truly, CSS is awesome</title>
		<link>http://bethesignal.org/blog/2009/06/13/truly-css-is-awesome/</link>
		<comments>http://bethesignal.org/blog/2009/06/13/truly-css-is-awesome/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 08:00:06 +0000</pubDate>
		<dc:creator>Jeff Waugh</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[awesome]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://bethesignal.org/?p=1523</guid>
		<description><![CDATA[&#8230; and apparently available on Zazzle.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zazzle.com/css_is_awesome_mug-168716435071981928"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-large wp-image-1524" title="CSS is awesome" src="/wp-content/uploads/2009/06/css-is-awesome-700x375.jpg" alt="CSS is awesome" width="700" height="375" /></a></p>
<p style="text-align: center;">&#8230; and apparently <a href="http://www.zazzle.com/css_is_awesome_mug-168716435071981928">available on Zazzle</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bethesignal.org/blog/2009/06/13/truly-css-is-awesome/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Replacing Apache with nginx for static file serving</title>
		<link>http://bethesignal.org/blog/2009/04/06/replacing-apache-with-nginx-for-static-file-serving/</link>
		<comments>http://bethesignal.org/blog/2009/04/06/replacing-apache-with-nginx-for-static-file-serving/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 14:31:47 +0000</pubDate>
		<dc:creator>Jeff Waugh</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[ncache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web servers]]></category>

		<guid isPermaLink="false">http://bethesignal.org/?p=1431</guid>
		<description><![CDATA[This chart represents the regular activity of an Apache server from Monday to Thursday &#8212; a massive spike of non-idle processes starting around lunch time &#8212; and then an eerily quiet Friday. No, it wasn&#8217;t a public holiday, it&#8217;s just &#8230; <a href="http://bethesignal.org/blog/2009/04/06/replacing-apache-with-nginx-for-static-file-serving/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This chart represents the regular activity of an Apache server from Monday to Thursday &#8212; a massive spike of non-idle processes starting around lunch time &#8212; and then an eerily quiet Friday. No, it wasn&#8217;t a public holiday, it&#8217;s just evidence of <em>win</em>. Notice the gaps late on the 2nd and early on the 3rd? Happy infrastructure hacking in the witching hours!</p>
<p><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-full wp-image-1434" title="nginx vs. apache: open/sending" src="/wp-content/uploads/2009/04/nginx-vs-apache-open.png" alt="nginx vs. apache: open/sending" width="481" height="179" /></p>
<p>The problem with Apache processes is that they&#8217;re big: they chug a <em>lot</em> of memory, and take a long time to get started. Sure, Apache includes a number of slightly more modern process models than the traditional prefork MPM, unfortunately (and predictably enough), PHP keeps us mired in the land of suckage. So when it comes to memory abuse, I was delighted with the results of putting nginx in front of Apache, and giving it complete responsibility for static files:</p>
<p><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-full wp-image-1433" title="nginx vs. apache: memory" src="/wp-content/uploads/2009/04/nginx-vs-apache-memory.png" alt="nginx vs. apache: memory" width="497" height="221" /></p>
<p>Reduced memory usage, increased capacity for OS level disk caching, and of course, consistency. Consistency wins every time. Any sysadmin who has had to react to a sudden change in usage patterns will grok the importance of consistency &#8212; after all, it&#8217;s not being slashdotted or dugg that will kill you, it&#8217;s the hardware and software configuration designed for your everyday load.</p>
<p>That&#8217;s all very good for Mr. Server Administrator, but nothing is truly measured until we understand the impact on users. Friday lunch time? Business as usual&#8230;</p>
<p><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-full wp-image-1435" title="nginx vs. apache: traffic" src="/wp-content/uploads/2009/04/nginx-vs-apache-traffic.png" alt="nginx vs. apache: traffic" width="497" height="193" /></p>
<p>&#8230; maaaaybe just a little quicker if they were paying attention. Not that you can tell from this chart. <img width='16' height='16' src='http://bethesignal.org/wp-content/plugins/tango-smilies/tango/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
<p>So, I&#8217;m pretty happy with nginx sitting in front of Apache. It totally changes the performance characteristics of the server (and website!) for the better, while allowing me to fall back on somewhat more mature and extensive Apache features when I need to. For instance, nginx&#8217;s rewrite module is pretty good, but Apache&#8217;s mod_rewrite is truly the original and the best (read: most insane). Surprisingly, nginx doesn&#8217;t support old school CGI, but I suppose most of the cool kids using it are opting for better process models such as FastCGI and proxied application servers anyway.</p>
<p>The biggest win in this instance was the conversion of a caching mod_proxy frontend &#8212; lot of static files, inefficiently served by Apache &#8212; to the new, inbuilt caching module in nginx 0.7. Initially I had tried the apparently popular ncache &#8212; must be a lot of people talking about it hypothetically, methinks &#8212; but it is probably best described as an &#8220;out-of-tree design, configuration and implementation fail&#8221;. Once I sucked up the fear-of-trunk and tried the caching support in nginx 0.7, there was no looking back.</p>
<p>(Finally, a quick shout-out for <a href="http://collectd.org/">collectd</a> 4.6.2 and the relatively new collection3 web frontend for it&#8230; sadly, I switched to it after these charts were saved, so you don&#8217;t get to see the new hotness. Maybe you should try it on <em>your</em> server?)</p>
]]></content:encoded>
			<wfw:commentRss>http://bethesignal.org/blog/2009/04/06/replacing-apache-with-nginx-for-static-file-serving/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
	</channel>
</rss>

