<?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:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

    <channel>
    <title>f055.net - lazy design &amp; development</title>
    <link>http://f055.net/</link>
    <description>Lazy design &amp; development. Or how to make the most in the least amount of time.</description>
    <dc:language>en</dc:language>
    <dc:creator>mf@marekfoss.org</dc:creator>
    <dc:rights>Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License</dc:rights>
    <dc:date>2009-11-09T10:00:27+00:00</dc:date>
    <admin:generatorAgent rdf:resource="http://expressionengine.com/" />
    

    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://f055.net/themes/site_themes/blog/av_me75.png</link><url>http://www.feedburner.com/fb/images/pub/fb_pwrd.gif</url><title>smooth</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/f055" type="application/rss+xml" /><feedburner:emailServiceId>f055</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Ff055" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Ff055" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Ff055" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Ff055" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>What I like about Snow Leopard</title>
      <link>http://feedproxy.google.com/~r/f055/~3/ewqX8as_74k/</link>
      <guid isPermaLink="false">http://f055.net/article/what-i-like-about-snow-leopard/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/what-i-like-about-snow-leopard/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/what-i-like-about-snow-leopard/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/snowheader.jpg" alt="Snow Leopard" /></p>

<p>I was hesitant at first to install the new Snow Leopard as I have heard a lot of about the inconsistencies, bugs and quirks of this new operating system from Apple. However, after the release of the 10.6.1 update, it looked attractive enough that I went and bought the €25 upgrade (FTW price!). It was lying another week or two waiting for the right moment, and it finally came some time ago. Here are just a few things that I liked about this years first Snow.
</p><br /><p>The upgrade is really smooth. None of my files got lost, and the OS footprint on the disk got significantly smaller (by about 45%). Also, there was a small increase in the speed of the OS. It&#8217;s probably the 64-bit doing, though I&#8217;m not sure, because I have heard of reports that by default, the new Snow is launched in 32-bit mode. That&#8217;s strange, because after the upgrade Safari Adblock stopped working, and that happens only when an app is launched in 64-bits. But that&#8217;s some techy flaming about these bits, not important :)</p>

<p>What struck me first was that Apple decided to slightly change the chrome of Snow. Now it&#8217;s lighter, the color bulbs have less contrast. I quite like it, I must say.</p>

<p><img src="http://www.f055.net/images/uploads/snowchrome.png" alt="Changes in OS chrome" /></p>

<p>Another important change, especially for the designers, is that now the default gamma is 2.2, which is the same as on Windows. From some reason I was unable to create a profile with 1.8 gamma, like on the previous Mac systems. One way or another, I think it&#8217;s another good move, along with enabling Windows installations, in order to make the Apple computers compatible, but still unique.</p>

<p><img src="http://www.f055.net/images/uploads/diffgamma.jpg" alt="Different default gamma" /></p>

<p>I think you have heard that Preview now can select multicolumn PDF files properly. That is a big feature for everyone who read and quote academic journals on daily basis. Luckily, now I don&#8217;t have to, but during my times at the Uni that was a really big quirk. Another great feature I would love to have back then, are the full-blown annotations. Preview now supports various shapes, color and text areas, both on PDFs and images. FTW!</p>

<p><img src="http://www.f055.net/images/uploads/newpreview.jpg" alt="Preview annotations" /></p>

<p>I must say I had to get use to the new stacks black look, but once I did, I really liked the changes. Especially the folder browsing inside the stacks. That was a thing I hoped for, and here it is. Nice :)</p>

<p><img src="http://www.f055.net/images/uploads/newstacks.jpg" alt="New stacks look" /></p>

<p>The icing on the cake is the new Quick Time X. Not only it has this awesome new interface that enables chrome-less movie display on the desktop &ndash; I tried designing a logo and watching F1 at the same time, and it was great! But what is more important, QT now supports easy audio, video and screen capture &ndash; yes, now you can create screen-casts easily. And with the built-in YouTube uploader (with video compression!) you will publish your demos in no time. Sweet, isn&#8217;t it?</p>

<p><img src="http://www.f055.net/images/uploads/quicktimex.jpg" alt="Quick Time X" /></p>

<h2>Conclusions</h2>

<p>I remember hearing a lot of comments that Apple should have given this new upgrade for free, because it&#8217;s basically the same system. Well, it&#8217;s not. Don&#8217;t judge the book by its cover. The guts of the this OS were rewritten, and the new feature-set is actually one of the best I&#8217;ve seen in years. Way to go, Apple. And if you are still hesitating whether to install Snow or not, I recommend to upgrade. You might want to hesitate until 10.6.2, but so far 10.6.1 has been really good too.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/m9zjdTs-K4njR7WmqsYOvprai40/0/da"><img src="http://feedads.g.doubleclick.net/~a/m9zjdTs-K4njR7WmqsYOvprai40/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/m9zjdTs-K4njR7WmqsYOvprai40/1/da"><img src="http://feedads.g.doubleclick.net/~a/m9zjdTs-K4njR7WmqsYOvprai40/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=ewqX8as_74k:0ZoD2SbIYa0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ewqX8as_74k:0ZoD2SbIYa0:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ewqX8as_74k:0ZoD2SbIYa0:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ewqX8as_74k:0ZoD2SbIYa0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=ewqX8as_74k:0ZoD2SbIYa0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ewqX8as_74k:0ZoD2SbIYa0:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=ewqX8as_74k:0ZoD2SbIYa0:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/ewqX8as_74k" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2009-11-09T10:00:27+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/what-i-like-about-snow-leopard/</feedburner:origLink></item>

    <item>
      <title>Setting up Snow Leopard for the Web Developer</title>
      <link>http://feedproxy.google.com/~r/f055/~3/VWBcXgKEfmA/</link>
      <guid isPermaLink="false">http://f055.net/article/setting-up-snow-leopard-for-the-web-developer/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/setting-up-snow-leopard-for-the-web-developer/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/setting-up-snow-leopard-for-the-web-developer/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/webdevmac.jpg" alt="Developer Space" /></p>

<p>I recently wrote about <a href="http://f055.net/article/setting-up-web-developer-macbook/" title="setting up a mac for the web developer">setting up a mac for the web developer</a>. However, that was still in the times of Leopard 10.5. With the upgrade to Snow Leopard 10.6 some things have changed, and I wanted to described the problems I had.
</p><br /><p>The upgrade to Snow Leopard went really smoothly and without problems. Nothing was lost, the system was fine and I could get back to work immediately. The problems started when I tried to do some web development on <i>localhost</i>. I kept getting <i>Internal Server Errors</i> from all of my scripts, and it turned out that MySQL was not working. Moreover, its process could not be started at all.</p>

<p>It turned out that the upgrade removed the <i>mysql</i> symlink from <i>/usr/local</i>. It is important, because normally MySQL installs itself to a directory like <i>mysql-5.1.40-osx10.5-x86_64</i> &ndash; the symlink ensures all apps can use <i>/usr/local/mysql</i> when referring to the database, despite the version and build you deploy. So, to fix this, open the Terminal and execute these commands:</p>

<blockquote><pre>
cd /usr/local
sudo ln -s mysql-5.1.40-osx10.5-x86_64 mysql
</pre></blockquote>

<p>The long <i>mysql-5.1&#8230;</i> folder name should correspond to the folder where your MySQL is installed. After this change I was able to start up the database process. PHP was working fine, but I was unable to establish DB sockets in Perl. It turns out, Snow Leopard upgraded Perl, <b>removing all custom modules on the way</b>! So, there was no <i>DBD::mysql</i> any more&#8230;</p>

<p>As usual, CPAN failed to install the module. I downloaded the module&#8217;s source, and executed the manual installation routine:</p>

<blockquote><pre>
perl Makefile.pl
make
sudo make install
</pre></blockquote>

<p>You run these commands in the Terminal, first navigating into the folder where the source is located. After several tries, I still couldn&#8217;t get the Perl module to install itself. I googled more and found a possible cause: since Snow Leopard, most of its guts are 64-bit, and it seems that includes Perl as well. Unfortunately, my MySQL was still the one I installed with regular Leopard. And yes, it was 32-bit. So I downloaded the 64-bit package from MySQL website, installed it (remember to export your existing tables if needed!), then the Perl module successfully installed too and I was ready to develop again. And boy I&#8217;ve got loads of work :)</p>

<p>I&#8217;ve updated the old <a href="http://f055.net/article/setting-up-web-developer-macbook/" title="Setting up Mac for the Web Developer">Setting up Mac for the Web Developer</a> article &ndash; everything should still be valid there, except that you need to choose the 64-bit MySQL if you develop using the Snow Leopard. But let me know if you run into any problems.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/99HU__R9p2Cb0a6f_PQ472HKGU0/0/da"><img src="http://feedads.g.doubleclick.net/~a/99HU__R9p2Cb0a6f_PQ472HKGU0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/99HU__R9p2Cb0a6f_PQ472HKGU0/1/da"><img src="http://feedads.g.doubleclick.net/~a/99HU__R9p2Cb0a6f_PQ472HKGU0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=VWBcXgKEfmA:_k-GJGFUWlY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=VWBcXgKEfmA:_k-GJGFUWlY:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=VWBcXgKEfmA:_k-GJGFUWlY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=VWBcXgKEfmA:_k-GJGFUWlY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=VWBcXgKEfmA:_k-GJGFUWlY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=VWBcXgKEfmA:_k-GJGFUWlY:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=VWBcXgKEfmA:_k-GJGFUWlY:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/VWBcXgKEfmA" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2009-11-02T07:00:56+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/setting-up-snow-leopard-for-the-web-developer/</feedburner:origLink></item>

    <item>
      <title>Ultimate Web Developer Icon Set</title>
      <link>http://feedproxy.google.com/~r/f055/~3/ckU4a3rmAn8/</link>
      <guid isPermaLink="false">http://f055.net/article/ultimate-web-developer-icon-set/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/ultimate-web-developer-icon-set/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/ultimate-web-developer-icon-set/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/icons_header.jpg" alt="Free Icons" /></p>

<p>Here you have a list of the most comprehensive, well designed and extremely usable icon packs available for free, including a commercial license. These icons will have you set in your small and big projects, and their common symbols will create a nice environment for your users. I created this list from the icons I&#8217;ve been using over the years and I think they are an essential pack for every web developer. Enjoy!
</p><br /><h2>FamFamFam Icon Set</h2><p>
<a href="http://www.famfamfam.com/lab/icons/silk/"><img src="http://www.f055.net/images/uploads/icons_famfamfam.png" alt="FamFamFam Icon Set" /></a><br />
Probably the most popular and the best icon set for web developers out there!</p>

<h2>Function Icon Set</h2><p>
<a href="http://wefunction.com/2008/07/function-free-icon-set/" title=""><img src="http://www.f055.net/images/uploads/icons_function.png" alt="Function Icon Set" /></a><br />
A very well designed and comprehensive set, although the icon size might be a problem.</p>

<h2>Webset Icons</h2><p>
<a href="http://graphicriver.net/free-icons" title=""><img src="http://www.f055.net/images/uploads/icons_graphicriver.png" alt="Webset Icons" /></a><br />
Designed by the famous <a href="http://turbomilk.com/" title="Turbomilk">Turbomilk</a>, they might not be comprehensive, but some of them are really useful.</p>

<h2>Splashy Icon Set</h2><p>
<a href="http://splashyfish.com/icons/" title=""><img src="http://www.f055.net/images/uploads/icons_splashy.png" alt="Splashy Icon Set" /></a><br />
All 470 are tiny but delightful. An essential set that you put next to famfamfam.</p>

<h2>Web App Icon Set</h2><p>
<a href="http://www.webappers.com/2008/02/12/webappers-released-free-web-application-icons-set/" title=""><img src="http://www.f055.net/images/uploads/icons_webapp.png" alt="Web App Icon Set" /></a><br />
The Vista-looking icons should work well in your next web app for the corporate clients.</p>

<h2>Web Injection Icon Set</h2><p>
<a href="http://www.tutorial9.net/resources/free-icon-pack-web-injection/" title=""><img src="http://www.f055.net/images/uploads/icons_webinjection.png" alt="Web Injection Icon Set" /></a><br />
Extremely well designed, very functional and one of the slicker looking icons out there!</p>

<h2>Woo Function Icon Set</h2><p>
<a href="http://www.woothemes.com/2009/09/woofunction-178-amazing-web-design-icons/" title=""><img src="http://www.f055.net/images/uploads/icons_woofunction.png" alt="Woo Function Icon Set" /></a><br />
Not too big, not too small, comprehensive, well designed and very informative. What more would you need?</p>

<p>If you liked this list, please share it with your fellow web developers. It&#8217;s important to use similar icons across the web apps, as it is important to have consistent road signs &ndash; but you knew that already. Sharing is caring! :)
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/hsDtbVexfWYx3eiXYQhNLxgktvw/0/da"><img src="http://feedads.g.doubleclick.net/~a/hsDtbVexfWYx3eiXYQhNLxgktvw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hsDtbVexfWYx3eiXYQhNLxgktvw/1/da"><img src="http://feedads.g.doubleclick.net/~a/hsDtbVexfWYx3eiXYQhNLxgktvw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=ckU4a3rmAn8:h5DU7lTh8F4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ckU4a3rmAn8:h5DU7lTh8F4:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ckU4a3rmAn8:h5DU7lTh8F4:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ckU4a3rmAn8:h5DU7lTh8F4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=ckU4a3rmAn8:h5DU7lTh8F4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ckU4a3rmAn8:h5DU7lTh8F4:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=ckU4a3rmAn8:h5DU7lTh8F4:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/ckU4a3rmAn8" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Design, Development</dc:subject>
      <dc:date>2009-10-26T12:05:13+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/ultimate-web-developer-icon-set/</feedburner:origLink></item>

    <item>
      <title>What is Google Wave and what it’s not</title>
      <link>http://feedproxy.google.com/~r/f055/~3/3GkvlQnQP6w/</link>
      <guid isPermaLink="false">http://f055.net/article/what-is-google-wave-and-what-its-not/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/what-is-google-wave-and-what-its-not/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/what-is-google-wave-and-what-its-not/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/wave.jpg" alt="Google Wave" /></p>

<p>The biggest hype on the Internet nowadays is the <a href="http://wave.google.com/" title="Google Wave">Google Wave</a>. What is it exactly? It&#8217;s &#8220;an online communication and collaboration tool that makes real-time interactions more seamless&#8221;. That&#8217;s what Google would like to tell you. But in reality, there&#8217;s still a lot of work for them to get there. I&#8217;ll walk you through my experiences in this brief review.
</p><br /><p>So when you finally get your precious invitation and log into the Wave, this is what you see &ndash; a 3-column, nicely shaded design with nothing in, except the standard welcome message and a list of your friends who already Wave.</p>

<p><a href="http://www.f055.net/images/uploads/wavestart.jpg"><img src="http://www.f055.net/images/uploads/wavestart_thumb.jpg" alt="Google Wave dashboard" /></a></p>

<p>The <i>Wave</i> itself is like an <i>Email</i> message mixed with a <i>Word</i> document. It seems a bit threaded like in <i>GMail</i>, but on the other hand it seems to want to be read from top to bottom like a text file. There are some existing locations in the <i>Navigation</i> pane, but when you browser around them you find they are all <i>Waves</i>. This means, for example, that you can manage your <i>Settings</i> in a <i>Wave</i>, but also &ndash; that you can trash your <i>Settings</i>, if you want to. Odd. How to set Wave preferences afterwards?</p>

<p>Another thing is the design. While it&#8217;s really nice and slick, it&#8217;s not very Google. A lot of space is wasted and it doesn&#8217;t feel very functional. For example, there is no bottom <i>Reply</i> button &ndash; instead, you need to hover the bottom message border, which sometimes isn&#8217;t even visible.</p>

<p><img src="http://www.f055.net/images/uploads/wavereply.png" alt="Google Wave reply" /></p>

<p>Also, the style is not very coherent. Virtually each toolbar has it&#8217;s own icon style. Finally, from some reason, Google decided we no longer need to identify the recipients &ndash; or participants, in the <i>Wave</i> case &ndash; by their names, but by their avatars. I can see all these office workers using their cats and dogs pictures, or worse &ndash; not uploading a picture at all. We end up with a list of default grey heads, without a clue who is who.</p>

<p><a href="http://www.f055.net/images/uploads/wavework.jpg"><img src="http://www.f055.net/images/uploads/wavework_thumb.jpg" alt="Google Wave working" /></a></p>

<p>As you can see above, I was playing with the document sharing and maps integration. Well, a Google <i>Docs</i> integration is a must, but it&#8217;s not here yet &ndash; you can view images in a nice lightbox, but the PDFs go straight to your desktop (or in-browser reader). The <i>Maps</i> widget is really nice, but creating a route is a mess. Why they made a different interface, instead of copying the one from the <i>Maps</i> site, I do not know.</p>

<p>The whole widgets idea is really cool, because, for example, you can share files with your coworkers and get their <i>Yes/No</i> opinion quickly, including small comments! However, if anyone would like to go through your conversation using the <i>Playback</i> (which is just something like a screencast of your <i>Wave</i> events), it would really take some time and wouldn&#8217;t be particularly interesting. I think Google would be better off visualizing the Wave such that it just could be easily read like an email.</p>

<p><a href="http://www.f055.net/images/uploads/waveflow.jpg"><img src="http://www.f055.net/images/uploads/waveflow_thumb.jpg" alt="Google Wave workflow" /></a></p>

<p>And then this <i>Real-time Web</i> buzzword everybody caught onto. I mean, come on, it&#8217;s not about real-time typing, it&#8217;s not even a feature. I wouldn&#8217;t like for all of you to see how I write my blog post, I make edits and fine tune it, so you can all read it without choking. If I were to write it as you read, it would not only make me feel weird, but be counter-productive for you too &ndash; waiting, and staring as my characters pop-out back and forth, as well as occasionally hang while I try to think what to write next.</p>

<p>Finally, the collaborative sharing and editing. It&#8217;s cool, but how can you manage the conversation if everybody can edit out any message, of anyone, even the previous ones? I understand the concept of total sharing, but this is just a no-no in a corporate environment, I think. And yes, you could use <i>Playback</i> to see what has happened, but from the reason stated before, I don&#8217;t think anybody would seriously have time for it.</p>

<p>Summarizing, it&#8217;s not that the Google Wave is a bad service. I can see it&#8217;s future when it develops and fixes bugs here and there. But I don&#8217;t think it will be a revolution. It may be an evolution, but it&#8217;s not a service like the <i>Search</i> or <i>GMail</i>. With these, Google took what already existed and made it virtually perfect. With <i>Wave</i>, they took the <i>Email</i> and made it&#8230; well, really different. And the way it looks like now, I don&#8217;t think it will catch on among any other group then geeks.</p>

<p>The protocol itself is another matter. If it can handle all this cool real-time transmission using just a browser, this really might be a revolution. However, again, this part is even more for geeks. So, my final line is that Google Wave looks nice, but it has a lot of work before it is the real real-time deal.</p>

<p>NOTE: I do not have any Google Wave invites, sorry. But as soon as I have them, I&#8217;ll give some to my blog readers!
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/lwcLWDAY1hvHc8UCx216oVQ6WW4/0/da"><img src="http://feedads.g.doubleclick.net/~a/lwcLWDAY1hvHc8UCx216oVQ6WW4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/lwcLWDAY1hvHc8UCx216oVQ6WW4/1/da"><img src="http://feedads.g.doubleclick.net/~a/lwcLWDAY1hvHc8UCx216oVQ6WW4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=3GkvlQnQP6w:EuJq2hBswf8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=3GkvlQnQP6w:EuJq2hBswf8:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=3GkvlQnQP6w:EuJq2hBswf8:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=3GkvlQnQP6w:EuJq2hBswf8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=3GkvlQnQP6w:EuJq2hBswf8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=3GkvlQnQP6w:EuJq2hBswf8:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=3GkvlQnQP6w:EuJq2hBswf8:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/3GkvlQnQP6w" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Google</dc:subject>
      <dc:date>2009-10-19T07:00:11+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/what-is-google-wave-and-what-its-not/</feedburner:origLink></item>

    <item>
      <title>Rant about developers or how I stopped worrying and love the simplicity</title>
      <link>http://feedproxy.google.com/~r/f055/~3/ECk4Fj5vJO4/</link>
      <guid isPermaLink="false">http://f055.net/article/rant-about-developers-or-how-i-stopped-worrying-and-love-the-simplicity/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/rant-about-developers-or-how-i-stopped-worrying-and-love-the-simplicity/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/rant-about-developers-or-how-i-stopped-worrying-and-love-the-simplicity/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/nerdtalk.jpg" alt="Talk nerdy to me" /></p>

<p>I recently read a quote that in the 60’s we were able to launch rockets to the Moon with just two Commodore 64’s, while now we need a 2 GHz Pentium 4 to barely launch Windows Vista. What went wrong?
</p><br /><p>At the same day, I’ve posted my concept of a Simple Template System, which in fact was a well prepared HTML file with placeholders, and a simple search and replace mechanism. And that’s what one commenter on DZone pointed out in a dissing attitude. It struck me, that he would probably praise me and call a guru if the template system had hundreds of useless features, thousands of lines of code and even more docs page. Does writing a million lines of code make you a great programmer? No, just like writing that many pages of stories won’t make you a Shakespeare&#8230;</p>

<p>Some developers seem to misunderstand simplicity with stupidity. If you want to do it simple, you must be lame. You need a simple JS? Don’t think, just use jQuery! You are developing a webapp? Use a framework! You want to crop a picture? Use Photoshop! So what that you could solve all these problems with 40 characters of inline code, a well thought script, and a Paint. You have used the tools of the pros, so you must be a pro too! Sure, why not&#8230;</p>

<p>People have a tendency to overkill. It not only is throwing out resources, but is not effective too &ndash; try to hit a fly with a shotgun and you’ll know. It amazes me how many developers go this way, they are engineers for Pete’s sake &ndash; they should optimize problems, not blow them into the stratosphere and feel like uber-hackers trying to squeeze what they really want out of a framework that should not have been used in the first place.</p>

<p>It’s not like I don’t know what I’m talking about. I’ve been there. I’ve seen Java and C# development and how much bloat they have. But it’s not like C++ is any better. I’ve also used frameworks and systems that had all the features in the world, yet not the one you wanted, and I remember the days I had to spent to hack into these structures to make them do what I want, not what they tell me I can.</p>

<p>They all are just tools. And they all should be used. But used wise. Because sometimes developing a scalable application doesn’t mean you need a framework straight away. Because sometimes you just have to think it over, not jump to conclusions. And often you might be surprised at how easy it all went. Pick the tools against the task, not the other way around.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/J15hXkKpQ0QTqXKi84VblfgxwdU/0/da"><img src="http://feedads.g.doubleclick.net/~a/J15hXkKpQ0QTqXKi84VblfgxwdU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/J15hXkKpQ0QTqXKi84VblfgxwdU/1/da"><img src="http://feedads.g.doubleclick.net/~a/J15hXkKpQ0QTqXKi84VblfgxwdU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=ECk4Fj5vJO4:4yu-XJqhF8k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ECk4Fj5vJO4:4yu-XJqhF8k:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ECk4Fj5vJO4:4yu-XJqhF8k:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ECk4Fj5vJO4:4yu-XJqhF8k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=ECk4Fj5vJO4:4yu-XJqhF8k:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ECk4Fj5vJO4:4yu-XJqhF8k:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=ECk4Fj5vJO4:4yu-XJqhF8k:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/ECk4Fj5vJO4" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Lazy, Development</dc:subject>
      <dc:date>2009-10-12T12:00:50+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/rant-about-developers-or-how-i-stopped-worrying-and-love-the-simplicity/</feedburner:origLink></item>

    <item>
      <title>How to use Google Apps and App Engine to get free email, calendar, homepage and more</title>
      <link>http://feedproxy.google.com/~r/f055/~3/GPGu8ot4Qxo/</link>
      <guid isPermaLink="false">http://f055.net/article/how-to-use-google-apps-and-app-engine-to-get-free-email-calendar-homepage-a/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/how-to-use-google-apps-and-app-engine-to-get-free-email-calendar-homepage-a/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/how-to-use-google-apps-and-app-engine-to-get-free-email-calendar-homepage-a/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/googlehq.jpg" alt="Google Headquarters" /></p>

<p>This article will explain how to setup email, calendar, online docs and more from Google Apps, as well as deploy your homepage using Google App Engine &ndash; all integrated and all under your own domain! Why? Because GMail is the best online mail client, because Google Calendar is awesome, because Google App Engine works blazing fast, and finally &ndash; because it&#8217;s all free!
</p><br /><p>There&#8217;s a lot to talk to, so straight into details &ndash; first you need a Google Apps account. New Google&#8217;s policy has hidden the free version somewhere behind, so what you are looking for is <a href="http://www.google.com/apps/intl/en/group/index.html" title="Google Apps Standard Edition">Google Apps Standard Edition</a>. Register there, add an existing domain you have bought somewhere.</p>

<h2>Domain setup</h2>

<p>Correct DNS settings in your domain are very important. I assume you want to have the homepage, mail, calendar and docs at your service. Go to your domain DNS manager somewhere in the control panel where you bought your site (there are specific instructions for many sellers at <a href="http://www.google.com/support/a/?hl=en" title="Google Apps Help">Google Apps Help</a>) and create CNAME records pointing subdomains to <i>ghs.google.com</i> &ndash; so you end up having something like <i>www.example.com</i>, <i>webmail.example.com</i>, <i>calendars.example.com</i> and d<i>ocuments.example.com</i>. All these URLs point to a login page of your Google Apps that redirect to respective services.</p>

<p>Remember no to setup any CNAME for the so called &#8220;naked domain&#8221;, which is a non-www address like <i>example.com</i>. Instead, setup a forwarded in your domain control panel that points to <i>www.example.com</i> &ndash; and make sure it&#8217;s not a &#8220;stealth&#8221; forwarding, frames are evil.</p>

<p>While you&#8217;re in the DNS manager, you can setup correct MX records that will rely your emails. Do it just like in <a href="http://www.google.com/support/a/bin/answer.py?hl=en&amp;answer=33352" title="Google Apps Help">this help article</a>, as it explains everything really well. What it doesn&#8217;t say is that you also can add a special TXT entry that would make it harder for spammers to mess with your domain in their massive mailings. Create a TXT record for the &#8220;naked domain&#8221; with this value:</p>

<blockquote><pre>
v=spf1 include:aspmx.googlemail.com ~all
</pre></blockquote>

<h2>Google Apps setup</h2>

<p>When you go to your Google Apps dashboard, you can do a bunch of stuff there, add users, change settings etc. Everything is quite well explained, so I&#8217;ll leave the exploring to you. What you have to do is activate the services you need (say email, calendar, docs and chat) and change their web addresses. You already have the subdomains prepared in the previous paragraph, so now it&#8217;s just a matter of typing in the each service, setting a proper URL.</p>

<p>Calendar and Docs have simple sharing settings that you can adjust to your needs. What I unfortunately saw is that it&#8217;s difficult to share calendars and events between Apps and GMail/Calendar users, something is not well syced there even if you set the maximum sharing.</p>

<p>Regarding email, it&#8217;s worth to turn on the &#8220;catch-all address&#8221;, and the outbound rely &ndash; because sometimes you just want to have a different <i>from</i> field.</p>

<h2>Google App Engine setup</h2>

<p>So we have all the necessary services under our own domain, but the <i>www</i> part should point to our website, right? Well, I did a lot of tricks to get it working. I have setup a &#8220;naked domain&#8221; CNAME record pointing to an external hosting with my site. It worked well, but the CNAME messed with my email and some messages were bounced back. I tried pointing the &#8220;naked domain&#8221; to <i>www</i>, but that was even worse. Finally I managed to stumble upon an information that after a recent change, if you want to hook App Engine websites under your own domain, you need to use the Apps. That&#8217;s when a lightbulb appeared over my head :)</p>

<p>Sign up for <a href="http://code.google.com/appengine/" title="Google App Engine">Google App Engine</a>. Download the necessary SDK, launch Google App Engine Launcher and create your first project of whatever name. You should have a project folder, and there you should find 2 files named <i>app.yaml</i> and <i>main.py</i>. Edit the first one &ndash; it&#8217;s responsible of pointing requests to the correct locations. You will need to create the handlers as follows:</p>

<blockquote><pre>
handlers:
- url: /gfx/(.*\.(gif|png|jpg))
  static_files: gfx/\1
  upload: gfx/(.*\.(gif|png|jpg))

- url: /css
  static_dir: css

- url: /index\.html
  script: main.py

- url: .*
  script: main.py
</pre></blockquote>

<p>The first handler assumes you have the image files in the folder called <i>gfx</i> &ndash; this folder is located in the root of your project folder, at the same level as <i>app.yaml</i> and <i>main.py</i>. The second handler assumes you have all your style-sheets in the folder called <i>css</i>. The third points anyone trying to reach a generic <i>index.html</i> to your main script. The fourth catches the rest, again pointing to the main script.</p>

<p>So the hierarchy of your project folder should be similar to this:</p>

<blockquote><pre>
app.yaml
css/
gfx/
<b>index.html</b>
index.yaml
main.py
</pre></blockquote>

<p>The <i>index.yaml</i> is a part of App Engine, but can you notice <i>index.html</i>? Well, since it&#8217;s <i>main.py</i> that displays the webpage, and python seemed not very helpful to me in inserting HTML to its source code, I decided to create a separate HTML document that would be read as a text file by the python script and printed on the screen. The browser would interpret it and display as a regular page.</p>

<p>To achieve this, open the <i>main.py</i> script and locate the <i>MainHandler</i> class. For it to read and print out the HTML file, it should look somehow like this:</p>

<blockquote><pre>
class MainHandler(webapp.RequestHandler):

  def get(self):
    html = open("index.html", "r")

    for line in html:
      self.response.out.write(line),
</pre></blockquote>

<p>What this does is basically, upon a request, opens the HTML file and prints out each line. Python is a tricky language, text indentation matters the most, as well as last characters in the line, so copy carefully ;) Finally, in your HTML and CSS make sure you refer to every folder with a preceding slash, like this:</p>

<blockquote><pre>
/css/style.css
/gfx/image.png
</pre></blockquote>

<p>Now all you have to do is: deploy the app to App Engine, note the app&#8217;s ID, go to Google Apps control panel again, click <i>Add more services</i>, type that app ID in the Google App Engine section, and add it. Then, still in Google Apps, view that app&#8217;s settings and <i>Add a new URL</i> &ndash; use the <i>www</i> subdomain so that <i>www.example.com</i> will point to it. Uff, that was long ;)</p>

<p>If your webpage contains subpages it&#8217;s not a problem. You can add more handlers in the <i>app.yaml</i> and process them respectively in <i>main.py</i>. And if you are a python guru you might even code yourself a blog &ndash; or just use a redirection of some sort using the CNAME subdomain <i>blog.example.com</i> &ndash; pointing to <i>myblog.myhosting.com</i> for example.</p>

<h2>CNAME redirection</h2>

<p>There&#8217;s a catch to CNAME redirection &ndash; on some hosts, it&#8217;s not enough to point to <i>myblog.myhosting.com</i>, because what you can see is just a blank page or a &#8220;Successful Apache installation&#8221;.</p>

<p>Let&#8217;s assume that <i>myhosting.com</i> is the main domain with which you registered your external hosting. What you have to do, is trick your hosting to think it should operate the <i>example.com</i> domain. You first need to alter the domain&#8217;s name servers (NS), so that you are able to add the <i>example.com</i> as an add-on domain to the hosting. Then, you can point the NS back to your domain provider in order to manage the DNS etc. Finally, you need to setup an actual subdomain <i>blog.example.com</i> on your hosting, which points to the same directory as the <i>myblog.myhosting.com</i>. Only then, when you setup a CNAME with subdomain <i>blog</i> pointing to myblog.myhosting.com, will the CNAME redirection actually work.</p>

<p>This explanation may sound vague, so if you have any questions just write me in the comments, or tweet me at <a href="http://twitter.com/f055" title="Follow f055 on Twitter">@f055</a>.</p>

<h2>Conclusions</h2>

<p>So there you have it, a quick, easy and free way to have professional GMail, Calendar, online Docs, GTalk and more (check the services available in the Google Apps), along with your personal website, all under your own domain, on blazing fast Google servers. Could things get any better? ;)</p>

<p><i>Header photo by <a href="http://www.flickr.com/photos/rickz/423751958/" title="rickz">rickz</a></i>
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/z-BFc2pyeAKsTqzfjPaQLXFhmlo/0/da"><img src="http://feedads.g.doubleclick.net/~a/z-BFc2pyeAKsTqzfjPaQLXFhmlo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/z-BFc2pyeAKsTqzfjPaQLXFhmlo/1/da"><img src="http://feedads.g.doubleclick.net/~a/z-BFc2pyeAKsTqzfjPaQLXFhmlo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=GPGu8ot4Qxo:P_ezrNK2J_A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=GPGu8ot4Qxo:P_ezrNK2J_A:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=GPGu8ot4Qxo:P_ezrNK2J_A:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=GPGu8ot4Qxo:P_ezrNK2J_A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=GPGu8ot4Qxo:P_ezrNK2J_A:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=GPGu8ot4Qxo:P_ezrNK2J_A:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=GPGu8ot4Qxo:P_ezrNK2J_A:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/GPGu8ot4Qxo" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Lifehacking, Google</dc:subject>
      <dc:date>2009-10-05T12:03:21+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/how-to-use-google-apps-and-app-engine-to-get-free-email-calendar-homepage-a/</feedburner:origLink></item>

    <item>
      <title>Automatically tweet about new posts in Expression Engine using AutoTweet plugin</title>
      <link>http://feedproxy.google.com/~r/f055/~3/VMIm5JZslYY/</link>
      <guid isPermaLink="false">http://f055.net/article/automatically-tweet-about-new-posts-in-expression-engine-using-autotweet-pl/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/automatically-tweet-about-new-posts-in-expression-engine-using-autotweet-pl/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/automatically-tweet-about-new-posts-in-expression-engine-using-autotweet-pl/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/autotweet.jpg" alt="" /></p>

<p>There are stuff machines should do for you, and one of them is tweeting about your latest blog post &ndash; because it&#8217;s important to spread the word. Today I will show you my Expression Engine (EE) plugin called AutoTweet that does just that. It&#8217;s simple and elegant and doesn&#8217;t require anything above typing in your Twitter credentials. So next time you see an auto-tweet about my post, please retweet it :)
</p><br /><p>I was looking for a solution to auto-tweeting for a bit when I stumbled upon Jensa&#8217;s <a href="http://www.flashgamer.com/2008/04/expressionengine_plugin_send_t.html" title="Send Tweet">Send Tweet</a> plugin. It would have worked fine, but I didn&#8217;t like that it used a local file to store the last tweeted message. It&#8217;s all in the timeline anyway, isn&#8217;t it? So I decided to write my own plugin that would use the Twitter database instead.</p>

<p>What my AutoTweet basically does is, when called, checks your timeline for the given message and if it doesn&#8217;t exist &ndash; it tweets it. AutoTweet is also immune to URL changes, as they are stripped while performing a regular expression match against the timeline &ndash; this way there are no problems if the URL somehow gets shortened differently along the way.</p>

<p>Finally, for the heavy twitterers, this solutions ensures your precious blog post will be always visible in your recent timeline and won&#8217;t be lost in all your babbling about coffee ;) AutoTweet will retweet the announcement if you tweet so much that the blog post message is pushed back in the timeline.</p>

<h2>How to use it?</h2>

<p>Usage is fairly simple. First of all download the plugin:</p>

<p><img src="http://www.f055.net/images/uploads/ico_zip.png" alt="(zip)" class="ico" /><a href="http://www.f055.net/images/uploads/pi.autotweet_.zip">AutoTweet Plugin for Expression Engine</a></p>

<p>Upload it to your EE plugin directory. You can access the usage description by going to <i>Admin - Utilities - Plugin Manager - AutoTweet</i>. Or you can go on reading :)</p>

<p>The idea is similar to Jensa, you insert text betweet the &#123;exp:autotweet&#125; tags in a template, and when a page with that template is called, the inserted text will be tweeted, but only if it wasn&#8217;t in the timeline before. To setup it for auto-tweeting blog posts, you should insert the title and permalink of the latest post, like this:</p>

<blockquote><pre>
&#123;exp:autotweet&#125;
&#123;exp:weblog:entries weblog="{master_weblog_name&#125;" limit="1" rdf="off" dynamic_start="on" disable="member_data|trackbacks"}
{title} {title_permalink="article"}
&#123;/exp:weblog:entries&#125;
&#123;/exp:autotweet&#125;
</pre></blockquote>

<p>But you still have to open a page with the above template code in a browser of some kind to make it work. One of the solutions is to setup a cron job on your server that will periodically visit it.</p>

<p>Another solution, for you <a href="http://www.feedburner.com" title="FeedBurner">FeedBurner</a> users out there, is to add this AutoTweet code to the top of your feed template. When FeedBurner pings your site to check for updates, it will also call the AutoTweet script, and if you have recently posted anything new, the title and link to your post will automagically appear in your timeline.</p>

<p>AFTERNOTE: This is how the <a href="http://twitter.com/f055/status/4479578624" title="auto-tweeted post">auto-tweeted post</a> looks like, and if you like all of it, be sure to <a href="http://twitter.com/?status=RT%20@f055%20Automatically%20tweet%20about%20new%20posts%20in%20Expression%20Engine%20using%20AutoTweet%20plugin%20http://bit.ly/qsUPC" title="retweet it">retweet it</a> :)</p>

<p>&nbsp;</p>
<p><a href="http://feedads.g.doubleclick.net/~a/mbKV4BcUxpanLxQ0lUEknyrpCLs/0/da"><img src="http://feedads.g.doubleclick.net/~a/mbKV4BcUxpanLxQ0lUEknyrpCLs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/mbKV4BcUxpanLxQ0lUEknyrpCLs/1/da"><img src="http://feedads.g.doubleclick.net/~a/mbKV4BcUxpanLxQ0lUEknyrpCLs/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=VMIm5JZslYY:ZmbYWAqzoSA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=VMIm5JZslYY:ZmbYWAqzoSA:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=VMIm5JZslYY:ZmbYWAqzoSA:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=VMIm5JZslYY:ZmbYWAqzoSA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=VMIm5JZslYY:ZmbYWAqzoSA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=VMIm5JZslYY:ZmbYWAqzoSA:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=VMIm5JZslYY:ZmbYWAqzoSA:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/VMIm5JZslYY" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine, Twitter</dc:subject>
      <dc:date>2009-09-29T20:03:43+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/automatically-tweet-about-new-posts-in-expression-engine-using-autotweet-pl/</feedburner:origLink></item>

    <item>
      <title>44 Zen Widescreen Wallpapers for your MacBook</title>
      <link>http://feedproxy.google.com/~r/f055/~3/a4hfR2ZYF1k/</link>
      <guid isPermaLink="false">http://f055.net/article/44-zen-widescreen-wallpapers-for-your-macbook/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/44-zen-widescreen-wallpapers-for-your-macbook/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/44-zen-widescreen-wallpapers-for-your-macbook/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/zenset.jpg" alt="Zen Wallpapers" /></p>

<p>It&#8217;s time to cool off the tech talk and chill out with this amazing set of 44 widescreen wallpapers I picked up over the years, especially for your MacBook desktop (all of them are 1280x800 or bigger). With these images you will feel bliss and peace. Your desktop will be zen, you will be zen, and your life will get better &ndash; in other words, these pictures will make you live longer ;) Enjoy!
</p><br /><p>PS. I might be missing credits on several of these pics, some of them date way back. If you know the author or the source, please tell me in the comments.</p>

<p><a href="http://www.f055.net/images/uploads/00416_greenergrass_1280x800.jpg"><img src="http://www.f055.net/images/uploads/00416_greenergrass_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/00947_slow_1280x800.jpg"><img src="http://www.f055.net/images/uploads/00947_slow_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01298_sanfran_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01298_sanfran_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01341_headingwest_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01341_headingwest_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01689_beautifulmorning_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01689_beautifulmorning_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01721_flow_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01721_flow_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01745_route163_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01745_route163_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01789_brightideas_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01789_brightideas_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01808_aviewofparadise_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01808_aviewofparadise_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01812_nightlights_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01812_nightlights_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01819_birdonabranch_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01819_birdonabranch_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01831_greensimplicity_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01831_greensimplicity_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01836_mountainsilhouette_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01836_mountainsilhouette_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01847_caution_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01847_caution_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01848_flow_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01848_flow_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01865_frizzingsunsetatserradaestrelaportugal_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01865_frizzingsunsetatserradaestrelaportugal_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01869_atthepark_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01869_atthepark_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01879_bellows_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01879_bellows_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01885_halfmoonbaysunset_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01885_halfmoonbaysunset_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01893_springwheat_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01893_springwheat_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01900_softtreadfullofmoabmud_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01900_softtreadfullofmoabmud_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01919_elementary_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01919_elementary_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01922_oirasegorge_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01922_oirasegorge_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01943_bluesunrise_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01943_bluesunrise_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01972_hsbccelebrationoflight_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01972_hsbccelebrationoflight_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/01973_bluesunset_1280x800.jpg"><img src="http://www.f055.net/images/uploads/01973_bluesunset_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/02001_resistance_2560x1600.jpg"><img src="http://www.f055.net/images/uploads/02001_resistance_2560x1600_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/02012_stillness_1280x800.jpg"><img src="http://www.f055.net/images/uploads/02012_stillness_1280x800_thumb.jpg" alt="" /></a><br />
from <a href="http://interfacelift.com/">InterfaceLift</a></p>

<p><a href="http://www.f055.net/images/uploads/1039528778_144df97dff_o.jpg"><img src="http://www.f055.net/images/uploads/1039528778_144df97dff_o_thumb.jpg" alt="" /></a><br />
from <a href="http://flickr.com/">Flickr</a></p>

<p><a href="http://www.f055.net/images/uploads/1324750948_47d17fef72_o.jpg"><img src="http://www.f055.net/images/uploads/1324750948_47d17fef72_o_thumb.jpg" alt="" /></a><br />
from <a href="http://flickr.com/">Flickr</a></p>

<p><a href="http://www.f055.net/images/uploads/2174360621_4d83e1fe02_o.jpg"><img src="http://www.f055.net/images/uploads/2174360621_4d83e1fe02_o_thumb.jpg" alt="" /></a><br />
from <a href="http://flickr.com/">Flickr</a></p>

<p><a href="http://www.f055.net/images/uploads/279102003_8b44502fb5_o.jpg"><img src="http://www.f055.net/images/uploads/279102003_8b44502fb5_o_thumb.jpg" alt="" /></a><br />
from <a href="http://flickr.com/">Flickr</a></p>

<p><a href="http://www.f055.net/images/uploads/3049777032_04ac9fd3f8_o.jpg"><img src="http://www.f055.net/images/uploads/3049777032_04ac9fd3f8_o_thumb.jpg" alt="" /></a><br />
from <a href="http://flickr.com/">Flickr</a></p>

<p><a href="http://www.f055.net/images/uploads/3346846528_cc43ea2be4_o.jpg"><img src="http://www.f055.net/images/uploads/3346846528_cc43ea2be4_o_thumb.jpg" alt="" /></a><br />
from <a href="http://flickr.com/">Flickr</a></p>

<p><a href="http://www.f055.net/images/uploads/3717905025_3721f2af63_o.jpg"><img src="http://www.f055.net/images/uploads/3717905025_3721f2af63_o_thumb.jpg" alt="" /></a><br />
from <a href="http://flickr.com/">Flickr</a></p>

<p><a href="http://www.f055.net/images/uploads/cowboy-bebop_anbuu(1.6)_1920x1200_80853.jpg"><img src="http://www.f055.net/images/uploads/cowboy-bebop_anbuu(1.6)_1920x1200_80853_thumb.jpg" alt="" /></a><br />
from <a href="http://anbuu.animepaper.net/">anbuu</a></p>

<p><a href="http://www.f055.net/images/uploads/crestock-108345-2560x1600.jpg"><img src="http://www.f055.net/images/uploads/crestock-108345-2560x1600_thumb.jpg" alt="" /></a><br />
from <a href="http://www.crestock.com/">Crestock</a></p>

<p><a href="http://www.f055.net/images/uploads/crestock-114164-2560x1600.jpg"><img src="http://www.f055.net/images/uploads/crestock-114164-2560x1600_thumb.jpg" alt="" /></a><br />
from <a href="http://www.crestock.com/">Crestock</a></p>

<p><a href="http://www.f055.net/images/uploads/crestock-249812-2560x1600.jpg"><img src="http://www.f055.net/images/uploads/crestock-249812-2560x1600_thumb.jpg" alt="" /></a><br />
from <a href="http://www.crestock.com/">Crestock</a></p>

<p><a href="http://www.f055.net/images/uploads/crestock-281036-2560x1600.jpg"><img src="http://www.f055.net/images/uploads/crestock-281036-2560x1600_thumb.jpg" alt="" /></a><br />
from <a href="http://www.crestock.com/">Crestock</a></p>

<p><a href="http://www.f055.net/images/uploads/crestock-463988-2560x1600.jpg"><img src="http://www.f055.net/images/uploads/crestock-463988-2560x1600_thumb.jpg" alt="" /></a><br />
from <a href="http://www.crestock.com/">Crestock</a></p>

<p><a href="http://www.f055.net/images/uploads/crestock-70406-2560x1600.jpg"><img src="http://www.f055.net/images/uploads/crestock-70406-2560x1600_thumb.jpg" alt="" /></a><br />
from <a href="http://www.crestock.com/">Crestock</a></p>

<p><a href="http://www.f055.net/images/uploads/space-fold.jpg"><img src="http://www.f055.net/images/uploads/space-fold_thumb.jpg" alt="" /></a></p>

<p><a href="http://www.f055.net/images/uploads/yotsubato_chaoskaizer(1.6)_1920x1200_90902.jpg"><img src="http://www.f055.net/images/uploads/yotsubato_chaoskaizer(1.6)_1920x1200_90902_thumb.jpg" alt="" /></a><br />
from <a href="http://chaoskaizer.animepaper.net/">ChaosKaizer</a></p>


<p><a href="http://feedads.g.doubleclick.net/~a/tM5cb0PXoXrGsj3h1zG1HptLxdk/0/da"><img src="http://feedads.g.doubleclick.net/~a/tM5cb0PXoXrGsj3h1zG1HptLxdk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tM5cb0PXoXrGsj3h1zG1HptLxdk/1/da"><img src="http://feedads.g.doubleclick.net/~a/tM5cb0PXoXrGsj3h1zG1HptLxdk/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=a4hfR2ZYF1k:LBxDRnmLkFE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=a4hfR2ZYF1k:LBxDRnmLkFE:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=a4hfR2ZYF1k:LBxDRnmLkFE:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=a4hfR2ZYF1k:LBxDRnmLkFE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=a4hfR2ZYF1k:LBxDRnmLkFE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=a4hfR2ZYF1k:LBxDRnmLkFE:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=a4hfR2ZYF1k:LBxDRnmLkFE:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/a4hfR2ZYF1k" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Design</dc:subject>
      <dc:date>2009-09-18T09:57:03+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/44-zen-widescreen-wallpapers-for-your-macbook/</feedburner:origLink></item>

    <item>
      <title>Simple Template System in Perl</title>
      <link>http://feedproxy.google.com/~r/f055/~3/ipnwT3YCXXY/</link>
      <guid isPermaLink="false">http://f055.net/article/simple-template-system-in-perl/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/simple-template-system-in-perl/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/simple-template-system-in-perl/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/tmp.png" alt="Simple Template" /></p>

<p>By now you should know I am a fan of everything simple. I casted an opinion that frameworks, while useful, are overcomplicated and create an unnecessary load on your project, unless it reaches a certain amount of complexity. And one of the most used frameworks, are the template frameworks. Thus, it would be great to have a dead simple template system, that just works. And that&#8217;s what I am going to show you today.
</p><br /><p>Because Perl is my weapon of choice, I&#8217;m going to show you my Simple Template System (STS) for that language, but porting it to another one shouldn&#8217;t be a problem. The idea is simple, of course, and relies on creating a traditional HTML file, as if creating the general look of the site, and then instead of content, marking it with special string, which we then substitute with whatever we want, using regular expressions.</p>

<p>So you start off with a simple HTML page, for example:</p>

<blockquote>
<pre>
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Simple Template System&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="menu"&gt;
        &lt;!---sidebar---&gt;
    &lt;/div&gt;
    &lt;div class="main"&gt;
        &lt;!---content---&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/head&gt;
</pre>
</blockquote>

<p>The <i>&lt;!&#8212;-sidebar&#8212;-&gt;</i> and <i>&lt;!&#8212;-content&#8212;-&gt;</i> are those special strings for substitution. The purpose of using a HTML comment symbol with an additional hyphen is that first of all, they are invisible if left behind in the code, second &ndash; it&#8217;s easy to regex them from ordinary comments, and third &ndash; they are valid HTML. So now we have a page skeleton, or in other words &ndash; a template. It&#8217;s time to use it.</p>

<p>For this purpose, we&#8217;ll have a simple Perl script that reads the template file, lets call it <i>main.tmp</i>, and substitutes the necessary stuff to display a content-rich site. First we load the template into a variable:</p>

<blockquote>
<pre>
my $tmp = '';
if( open FILE, '&lt;', 'main.tmp' ){
    while( &lt;FILE&gt; ){ $tmp .= $_; }
    close FILE;
}
</pre>
</blockquote>

<p>To walk you through the code, I&#8217;ll just say that we first try to open the file in the read-only mode, then we go over all the lines in that file and append them to the <i>$tmp</i> variable, and in the end we close that file.</p>

<p>Then we define content variables and give them some values:</p>

<blockquote>
<pre>
my $sidebar = 'This is a menu';
my $content = 'This is the main content block';
</pre>
</blockquote>

<p>Finally, we put the content in the necessary places using regular expressions, and we print the website:</p>

<blockquote>
<pre>
$tmp =~ s/&lt;!---sidebar---&gt;/$sidebar/;
$tmp =~ s/&lt;!---content---&gt;/$content/;
$tmp =~ s/&lt;!---.*?---&gt;//g;

print CGI::header( -type =&gt; 'text/html' );
print $tmp;
</pre>
</blockquote>

<p>The <i>s/</i> is a regular expression substitution. The first argument is the string to look for, the second argument is the string to put instead of the first one. So we simply look for sidebar and main content placeholders, and substitute it with the actual content. The last regular expression removes all other placeholders that we won&#8217;t be using in this case &ndash; because this template system is flexible, you can have a lot of place holders, not all need to be used. And what about placeholders within placeholders? Well you could use them, you would just need a more fancy regular expression. I can&#8217;t think of a reason to have such a thing, but why not :]</p>

<p>UPDATE: draegtun of <a href="http://transfixedbutnotdead.com/" title="transfixedbutnotdead">transfixedbutnotdead</a> picked up the STS subject in a clever post on <a href="http://transfixedbutnotdead.com/2009/09/14/building-a-sts-simple-template-system/" title="Building a STS">how features can kill usability</a>, but had a very good idea of making the initial code slicker by using a hash table and a single regex. So, instead of defining variables separately, we use a hash:</p>

<blockquote>
<pre>
my %vars= {
    sidebar => 'This is a menu',
    content => 'This is the main content block'
}
</pre>
</blockquote>

<p>And instead of separate regular expressions, just a single one:</p>

<blockquote>
<pre>
$tmp =~ s/&lt;!---(.*?)---&gt;/exists $vars{$1} ? $vars{$1} : ''/ge;
</pre>
</blockquote>

<p>The above regex looks for the placeholders, and if the placeholder name matches any of our keys in the hash that contain data to be displayed &ndash; we make a substitution. Otherwise, we remove the placeholder from the displayed page.</p>

<h2>Conclusions</h2>

<p>And there you have it &ndash; a Simple Template System that you can setup within minutes just by coding by hand, and quickly create a variable-content websites. Using <i>if</i> statement you could make a page that displays different content basing on which section the user wants to see. Finally, you could have several different template files, changing them according to your needs (for example, front page different then subpages, article pages, etc.)</p>

<p>Please state your opinion and feedback on STS in the comments, I&#8217;m interested in what you think about it.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/a-y5MBOMhkHyEH-sEh0dFtgFgRQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/a-y5MBOMhkHyEH-sEh0dFtgFgRQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/a-y5MBOMhkHyEH-sEh0dFtgFgRQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/a-y5MBOMhkHyEH-sEh0dFtgFgRQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=ipnwT3YCXXY:Ahtae95SAFM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ipnwT3YCXXY:Ahtae95SAFM:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ipnwT3YCXXY:Ahtae95SAFM:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ipnwT3YCXXY:Ahtae95SAFM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=ipnwT3YCXXY:Ahtae95SAFM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ipnwT3YCXXY:Ahtae95SAFM:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=ipnwT3YCXXY:Ahtae95SAFM:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/ipnwT3YCXXY" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, Perl</dc:subject>
      <dc:date>2009-09-11T14:00:46+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/simple-template-system-in-perl/</feedburner:origLink></item>

    <item>
      <title>Setting up Mac for ease of use</title>
      <link>http://feedproxy.google.com/~r/f055/~3/ryKzssyZBFE/</link>
      <guid isPermaLink="false">http://f055.net/article/setting-up-mac-for-ease-of-use/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/setting-up-mac-for-ease-of-use/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/setting-up-mac-for-ease-of-use/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/macapps.jpg" alt="Mac applications" /></p>

<p>It&#8217;s always a though call to install all the necessary (and preferably free) apps on your mac to have a pleasant experience at all times. Fortunately, due to <a href="http://f055.net/article/apple-hard-disk-failures-or-how-i-stopped-worrying-and-love-the-ssd/" title="crappy Apple HDD drives">crappy Apple HDD drives</a>, I&#8217;ve been going though this quite a lot. Thus, I&#8217;ll show you what nice apps you should install right after you start up your mac (if you haven&#8217;t done it yet) &ndash; they are so worth it&#8230;
</p><br /><h2>Secrets</h2>

<p>This is the ultimate improvement to your system. This small preference pane let&#8217;s you customize tons of features in you Mac OS X system, and frankly, it makes this system perfect. You can find it at <a href="http://secrets.blacktree.com/" title="Secrets">their homepage</a>. We will use it in the consecutive tips for Mac, so you&#8217;d better download them. But be sure to be careful with these options, as they can mess up your system real good (but can make it perfect as well!).</p>

<h2>Perian</h2>

<p>Start off with <a href="http://perian.org/" title="Perian">Perian</a>, a universal video codec that will enable you to play virtually enything within QuickTime &ndash; that&#8217;s actually a huge thing, if you&#8217;re using FrontRow, because it integrates with that too!</p>

<h2>Optimize Dock</h2>

<p>Ok, I admit it &ndash; I hate the native dock display. I really put some effort to make it more usable and readable. And frankly nicer. Here are the results:</p>

<p><img src="http://www.f055.net/images/uploads/slickretro.jpg" alt="Dockulicious" /></p>

<p>You can grab this dock design at <a href="http://www.dockulicious.com/docks/view/slickretro" title="Dockulicious">Dockulicious</a>. It makes the dock way clearer, and works best with an auto-hidden dock :) To get the best experience available, you should consider using Dock Drawers, a set of icons that when you set their names with a whitespace in the beginning, will overlay all the contents of your dock stack folders &ndash; looks awesome! The original link for the icons changes constantly, so monitor it on the <a href="http://t.ecksdee.org/post/19001860/stacks-overlays" title="XD blog">XD blog</a>.</p>

<p>Continuing dock enhancements, it&#8217;s good if you set it to highlight the stack items you overlay with mouse, otherwise it&#8217;s really difficult to say what you are currently on &ndash; but that&#8217;s easy &ndash; use the Secrets preference pane, navigate to <i>Highlight stack items on hover</i> and turn it on. And see the change :)</p>

<h2>Finder enhancements</h2>

<p>You should be careful messing with the Finder, as it&#8217;s the core of you system soul, but you could still make it better. What I like to do is to display a full path in the title bar (again, using Secrets, navigate to <i>Finder > Show path in title bar</i>, and turn it on) and also, get rid of the ridiculous shadow on the screencaptures that you get with the built-in features (for the reminder, you can grab a screen using <i>Apple+Shift+3</i>, there goes a screenshot, or you can get a piece with <i>Apple+Shift+4</i>, or finally, you can get a window grab if you use <i>Apple+Shift+4</i> and hit <i>Space</i>!). To disable shadows go to <i>Grab</i> in Secrets and make sure <i>Show shadows on captured windows</i> is disabled.</p>

<h2>Conclusions</h2>

<p>These small tips sound like nothing, but they really make a change. Soon, I will show you how I deal with the top-right icons in Leopard, because frankly, too much applications are eager to put stuff there. And actually, I manage to go with just <a href="http://adium.im/" title="Adium">Adium</a> and <a href="http://www.loganrockmore.com/MailUnreadMenu/" title="Mail Unread Menu">Mail Unread Menu</a> (this helps my hidden dock), nothing more is necessary. But the best part is, I&#8217;ll show you how to get rid of the uneccesary system icons and features there, so you will have a perfect clear and usuable menu :) Look forward to the next installment of <i>Setting up a Mac</i> :)
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/VBFJzxLgy9lUELv-Qc3RU3T2ncA/0/da"><img src="http://feedads.g.doubleclick.net/~a/VBFJzxLgy9lUELv-Qc3RU3T2ncA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VBFJzxLgy9lUELv-Qc3RU3T2ncA/1/da"><img src="http://feedads.g.doubleclick.net/~a/VBFJzxLgy9lUELv-Qc3RU3T2ncA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=ryKzssyZBFE:oX-e1ZrkI50:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ryKzssyZBFE:oX-e1ZrkI50:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ryKzssyZBFE:oX-e1ZrkI50:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ryKzssyZBFE:oX-e1ZrkI50:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=ryKzssyZBFE:oX-e1ZrkI50:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ryKzssyZBFE:oX-e1ZrkI50:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=ryKzssyZBFE:oX-e1ZrkI50:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/ryKzssyZBFE" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2009-07-14T02:50:27+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/setting-up-mac-for-ease-of-use/</feedburner:origLink></item>

    <item>
      <title>Setting up Mac for the Web Developer</title>
      <link>http://feedproxy.google.com/~r/f055/~3/f88W08OM--A/</link>
      <guid isPermaLink="false">http://f055.net/article/setting-up-web-developer-macbook/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/setting-up-web-developer-macbook/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/setting-up-web-developer-macbook/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/webdevmac.jpg" alt="Developer Space" /></p>

<p>Leopard comes with tons of stuff for developers, but out-of-the-box it ain&#8217;t quite configured to get them running in an instant. This article goes through the configuration process of Leopard and some of its bundled applications, to get the most out of it and create a nice web development environment. I will focus on setting up Apache with MySQL and Perl (and PHP, which I rarely use) plus some recommended apps. If you are a python developer, please share your configuration routine in the comments.
</p><br /><p>First, you should download <a href="http://developer.apple.com/technology/xcode.html" title="Xcode">Xcode</a> &mdash; it includes some Unix tools necessary for compiling utilities from source code. We will need that while setting up Perl. Then, let&#8217;s start configuring stuff. We will use everything Leopard has: the built-in Apache 2 server, the PHP interpreter and the Perl interpreter. There is also the Python interpreter, but since I don&#8217;t code in this language, I didn&#8217;t feel the need to get it running &mdash; if you are Python coder and would like to share your configuration routine, please do so in the comments.</p>

<h2>Apache</h2>

<p>What we want to achieve is having a server run with the <i>/Sites</i> folder, located in your user directory, as root. Also, we will restrict access to just your machine, so no one will peak on your work.</p>

<p>Start with finding and opening for edit the Apache configuration file &mdash; open Terminal, type <i>cd ..</i> several times to get to the root of your filesystem, then type:</p>

<blockquote>
<pre>
cd /etc/apache2
sudo vi httpd.conf
</pre>
</blockquote>

<p>sudo command will open the configuration file to edit in Vi with admin privileges, that&#8217;s why you need to type your password (and yes, the characters doesn&#8217;t appear on screen, but they are invisibly typed). Next, hit <i>A</i> key, which triggers the edit mode. Move down using keyboard arrows until you find the lines that resemble the following:</p>

<blockquote>
<pre>
#LoadModule php5_module		libexec/apache2/libphp5.so
#LoadModule fastcgi_module	libexec/apache2/mod_fastcgi.so
</pre>
</blockquote>

<p>Remove the # sign to enable these two libraries. And move on to the next line:</p>

<blockquote>
<pre>
DocumentRoot “/Users/<b>name</b>/Sites”
</pre>
</blockquote>

<p>When you locate the <i>DocumentRoot</i>, it will point to a location somewhere in the <i>Library</i>. Change it as shown above, substituting the <i>name</i> with your user directory name. And move on to the second definition of <i>Directory</i>:</p>

<blockquote>
<pre>
# This should be set to whatever DocumentRoot is set to
&lt;Directory “/Users/<b>name</b>/Sites/*”&gt;
</pre>
</blockquote>

<p>Locate the <i>Options</i> and make sure you add <i>ExecCGI</i> to them (each option is separated with a space). At the end of the <i>Directory</i> tag you should see some permission settings (<i>Allow</i>, <i>Deny</i> etc.) &mdash; change them to the following settings to set access from <i>localhost</i> only:</p>

<blockquote>
<pre>
Order allow,deny
Allow from localhost
</pre>
</blockquote>

<p>One note about this configuration: all directories inside <i>/Sites</i> folder are invisible with this setting, but regular files located in <i>/Sites</i> folder <b>are visible</b> &mdash; they are still listed when browsing to your machine&#8217;s IP address &mdash; thus I recommend having just folders there. Finally, lets prepare Apache for handling script files of various extensions, like .php, .cgi, .pl &mdash; locate the following tags and change accordingly:</p>

<blockquote>
<pre>
#AddHandler cgi-script .cgi .pl
</pre>
</blockquote>

<p>After adding the necessary extensions, unquote the above statement by removing the # sign. Next, configure how Apache deals with index pages &mdash; locate the <i>dir_module</i> tag and add index types to your liking:</p>

<blockquote>
<pre>
&lt;IfModule dir_module&gt;
	DirectoryIndex index.html index.php index.cgi index.pl
&lt;/IfModule&gt;
</pre>
</blockquote>

<p>This will tell Apache to handle HTML, PHP and Perl index pages like we are used to. Moreover, the order in which you define these file-types tells the server what to do when there are multiple index files with different extension &mdash; which to treat as the current index.</p>

<p>Finally, save the changes and quit Vi &mdash; hit <i>Escape</i> key to finish edit mode, then type <i>:wq</i> and hit <i>Enter</i> to save the file and quit. That&#8217;s all about Apache, now lets move to MySQL and PHP.</p>

<h2>MySQL</h2>

<p>Go to the <a href="http://dev.mysql.com/downloads/mysql/" title="MySQL website">MySQL website</a> and download the Community Server &mdash; be sure you <b>pick the 64-bit version if on Snow Leopard 10.6, and the 32-bit version if on Leopard 10.5</b>, otherwise you will run into compatibility problems between database and programming language sockets. There&#8217;s a nice binary installer for the Mac OS X, so you shouldn&#8217;t have much problems installing it.</p>

<p>Next, let&#8217;s tell our system where the MySQL is installed, so we can use all its goodies from any place. Lanuch Terminal again and from your user directory (usually it&#8217;s the one that Terminal launches with) type:</p>

<blockquote>
<pre>
sudo vi .bash_profile
</pre>
</blockquote>

<p>We are again using Vi, so hit <i>A</i> for edit mode, then type the following command:</p>

<blockquote>
<pre>
export PATH=/usr/local/mysql/bin:$PATH
</pre>
</blockquote>

<p>Vi may inform you that this file is read-only &mdash; to override it and save the file, just hit <i>Escape</i> to exit edit mode, then type <i>:wq!</i> and hit <i>Enter</i> &mdash; this will force Vi to do what you want :) You probably should restart Finder now, by selecting <i>Force Quit</i> from the Apple menu.</p>

<p>Lets secure your MySQL installation now by opening Terminal and typing the following command:</p>

<blockquote>
<pre>
mysqladmin -u root password 'your-password'
</pre>
</blockquote>

<p>Substitute <i>your-password</i> with a string you want to use as the password to the database. Finally, in the <i>System Preferences</i>, you should see the MySQL Preference Pane and its state. By now, it&#8217;s probably stopped &mdash; you can start it now, and if you wish to have it starting up every time you launch the system, you need to install the <i>Startup Item Package</i> from the installation disk &mdash; the checkbox in the preferences doesn&#8217;t work without it.</p>

<p>The connection details to your newly installed database that you could use while programming web services, are as follows:</p>

<blockquote>
<pre>
HOST: localhost
DBUSER: root
DBPASS: your-password
</pre>
</blockquote>

<h2>PHP</h2>

<p>To point the PHP interpreter to the correct MySQL location, we need to make on small change in the PHP configuration file. Like before, launch Terminal, do some <i>cd ..</i> to go to absolute root, then type:</p>

<blockquote>
<pre>
cd /private/etc
sudo vi php.ini
</pre>
</blockquote>

<p>It may happen that with clear installation you don&#8217;t have the <i>php.ini</i> file. Instead, there is the <i>php.ini.default</i> that you can copy using the following command:</p>

<blockquote>
<pre>
sudo cp php.ini.default php.ini
</pre>
</blockquote>

<p>When you finally open php.ini using Vi, locate these two lines and set the paths as shown:</p>

<blockquote>
<pre>
mysql.default_socket = /private/tmp/mysql.sock
mysqli.default_socket = /private/tmp/mysql.sock
</pre>
</blockquote>

<p>Restarting Apache will reload PHP configuration. To do that, go to <i>System Preferences - Sharing</i> where you need to uncheck and then check again the <i>Web Sharing</i> service.</p>

<h2>Perl</h2>

<p>Perl interpreter comes with Leopard, but it&#8217;s missing the DBD bundle responsible for connecting with databases, including MySQL. Luckily, there is CPAN, the huge and very automated library of Perl modules. Installing the bundle should be no harder than opening Terminal and typing in:</p>

<blockquote>
<pre>
cpan
install DBD::mysql
</pre>
</blockquote>

<p>You might need to configure CPAN first by answering some questions it asks you, but you should be fine by just answering the default answers (always given in the parenthesis, next to the question). And if the MySQL bundle installation fails the test, you could try starting it with <i>force install</i> command. One way or another, you should have by now the ability to code in Perl and use MySQL.</p>

<h2>Useful apps</h2>

<p><a href="http://www.phpmyadmin.net/" title="phpMyAdmin">phpMyAdmin</a> &mdash; the interface for MySQL management, very useful<br />
<a href="http://www.activestate.com/komodo_edit/" title="Komodo Edit">Komodo Edit</a> &mdash; the best and free IDE for Mac, in my opinion<br />
<a href="http://www.panic.com/transmit/" title="Transmit">Transmit</a> &mdash; the best file transfer client for Mac, unfortunately not free<br />
<a href="http://derailer.org/paparazzi/" title="Paparazzi">Paparazzi</a> &mdash; small and free app for Mac for making full-page screenshots of websites<br />
<a href="http://www.virtualbox.org/" title="VirtualBox">VirtualBox</a> &mdash; the best and free virtualization environment to run Windows and Linux inside your Mac OS</p>

<p>With the configurations made and these apps on board, you are ready to go on and code, test and deploy web sites and services straight on your Mac.</p>

<p><i>Photo by <a href="http://www.flickr.com/photos/majornelson/3530653305/" title="Major Nelson">Major Nelson</a></i>
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/wHtMTeNm79X3x7Yx2DuAbKk3Ahc/0/da"><img src="http://feedads.g.doubleclick.net/~a/wHtMTeNm79X3x7Yx2DuAbKk3Ahc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wHtMTeNm79X3x7Yx2DuAbKk3Ahc/1/da"><img src="http://feedads.g.doubleclick.net/~a/wHtMTeNm79X3x7Yx2DuAbKk3Ahc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=f88W08OM--A:pChwVbmNm58:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=f88W08OM--A:pChwVbmNm58:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=f88W08OM--A:pChwVbmNm58:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=f88W08OM--A:pChwVbmNm58:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=f88W08OM--A:pChwVbmNm58:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=f88W08OM--A:pChwVbmNm58:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=f88W08OM--A:pChwVbmNm58:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/f88W08OM--A" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2009-06-19T14:00:39+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/setting-up-web-developer-macbook/</feedburner:origLink></item>

    <item>
      <title>Don’t use IDs in CSS</title>
      <link>http://feedproxy.google.com/~r/f055/~3/Wq6lNjpJ4uI/</link>
      <guid isPermaLink="false">http://f055.net/article/dont-use-ids-in-css/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/dont-use-ids-in-css/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/dont-use-ids-in-css/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/css-class.jpg" alt="CSS Class" /></p>

<p>In CSS, you can assign styles to elements in 3 ways: either by a direct reference to an HTML tag, or by a <i>class</i> attribute, or finally, by the <i>id</i> attribute. Each of these approaches has it&#8217;s pros and cons, but in this article, I&#8217;ll highlight why you should avoid using styling by <i>#id</i>. In fact, you shouldn&#8217;t base your style design on <i>id</i> attributes at all.
</p><br /><h2>#id can&#8217;t be reused</h2>

<p>The biggest flaw of <i>id</i> styling is explicitly declaring that this style can be used just once on the whole page &mdash; because an HTML <i>id</i> has to be unique. Imagine you design a page and in initial assumptions, you define a top ad box by <i>id</i>. Now time goes by, and you want to have this ad box style replicated at the bottom. You end up making changes in the CSS, instead of just copy-pasting ad box code, if you had used a <i>class</i> to style it.</p>

<h2>#id can&#8217;t have multiple references</h2>

<p>The second biggest flaw is that <i>id</i> styles can&#8217;t be added up in one attribute as it can be done with classes. This is really annoying when you want to minimize you CSS and use pieces of style here and there and be flexible about it. It&#8217;s perfectly ok to attribute an element with classes like that:</p>

<blockquote>
<pre>
class="twitter sidebar"
class="large google sidebar"
</pre>
</blockquote>

<p>But you would never get away with it in <i>id</i> attributes.</p>

<h2>#id style can&#8217;t be modified by JavaScript</h2>

<p>Because DOM is based on retrieving elements by IDs, it causes problems to change that ID to give a different look to an elemenet. Again, it&#8217;s perfectly ok to manipulate the style with classes, changing the <i>className</i> value. You could go doing that all day with great effects.</p>

<h2>Conclusions</h2>

<p>I&#8217;m not saying styling by <i>#id</i> is bad. But it may create problems in the future, because it&#8217;s not flexible enough, and the gains over <i>class</i> styling are purely semantic. In fact, there&#8217;s nothing wrong with defining a <i>class</i> and using it just once &mdash; as if it was an <i>id</i>. And if you decide that actually you&#8217;d like to use it again somewhere else, you are not bounded by anything. So why not to?
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/t_GByrbLsrgX1_rg8PCbUxwsgG4/0/da"><img src="http://feedads.g.doubleclick.net/~a/t_GByrbLsrgX1_rg8PCbUxwsgG4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/t_GByrbLsrgX1_rg8PCbUxwsgG4/1/da"><img src="http://feedads.g.doubleclick.net/~a/t_GByrbLsrgX1_rg8PCbUxwsgG4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=Wq6lNjpJ4uI:ujmKZ2W0TUo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=Wq6lNjpJ4uI:ujmKZ2W0TUo:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=Wq6lNjpJ4uI:ujmKZ2W0TUo:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=Wq6lNjpJ4uI:ujmKZ2W0TUo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=Wq6lNjpJ4uI:ujmKZ2W0TUo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=Wq6lNjpJ4uI:ujmKZ2W0TUo:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=Wq6lNjpJ4uI:ujmKZ2W0TUo:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/Wq6lNjpJ4uI" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, CSS</dc:subject>
      <dc:date>2009-06-09T14:59:15+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/dont-use-ids-in-css/</feedburner:origLink></item>

    <item>
      <title>Apple hard disk failures or how I stopped worrying and love the SSD</title>
      <link>http://feedproxy.google.com/~r/f055/~3/ii3LAgwDrtw/</link>
      <guid isPermaLink="false">http://f055.net/article/apple-hard-disk-failures-or-how-i-stopped-worrying-and-love-the-ssd/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/apple-hard-disk-failures-or-how-i-stopped-worrying-and-love-the-ssd/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/apple-hard-disk-failures-or-how-i-stopped-worrying-and-love-the-ssd/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/vertex-head.jpg" alt="OCZ Vertex heads up" /></p>

<p>Ever since Apple tried to pursue mainstream, things went bad for them. It&#8217;s not like their computers didn&#8217;t crash before &mdash; that&#8217;s normal. But recently, they started to crash a lot. I had a late 2007 white MacBook with a 160GB hard drive. Well, exactly after 12 months, this drive failed me, a few days before the warranty expiration. It started clicking and died. They changed it for free to an even crappier one &mdash; it failed too, a few days ago, exactly after 6 months, and out of nowhere. Similarly, started clicking and just died.
</p><br /><p>I got fed up with mechanical failures, so I decided to go for an OCZ Vertex SATA II solid state drive. I chose a standard version, not the Mac Edition, because it was cheaper, faster and had constant firmware updates. Although some say they have problems with it, like freezing after system wake-up, I don&#8217;t. Also, my firmware is old, 1.10, but it doesn&#8217;t seem to cause problems either.</p>

<p><img src="http://www.f055.net/images/uploads/vertex-box.jpg" alt="OCZ Vertex in protective package" /></p>

<p>The disk comes in a nice, secure package, and the drive itself is a really neat, black box. Fits perfectly in the Mac&#8217;s HDD slot &mdash; although the star-shaped screws will give you a bit of tough time, if you don&#8217;t have a special screwdriver (I didn&#8217;t have patience, used pliers&#8230;).</p>

<p><img src="http://www.f055.net/images/uploads/vertex-bay.jpg" alt="OCZ Vertex in MacBook HDD bay" /></p>

<p>Leopard installation went smoothly and was quite quick, although you need to format the drive with the Disk Utility. Windows 7 installation wasn&#8217;t that fast, and the actual working OS had long periods of idling, for example after clicking the <i>Start Menu</i> &mdash; definitely something wrong with the SSD handling there, Microsoft.</p>

<p>But when I came back to Leopard&#8230; it was sort of an amazing experience! The whole system worked like it was on steroids. As if the insides of my old MacBook were full of CPU and RAM. Seriously! 15 seconds from the startup white LED till login screen. 30 seconds to save a 2.5GB file from a DVD. 1 second to start up iPhoto with 1,600 images. Compare these figures with your machines, and if you need more specific data, compare your results from <a href="http://www.xbench.com/" title="XBench">XBench</a> with mine below. I am really happy with this drive &mdash; it&#8217;s like a new Mac now.</p>

<p><img src="http://www.f055.net/images/uploads/vertex-xbench.png" alt="XBench OCZ Vertex results" /></p>

<p>What I&#8217;ve learned from the first failure are 2 things &mdash; 1. traditional disks are not a good idea in a portable, &#8220;throwable&#8221; laptop, especially since Apple uses particularly crappy ones; and 2. backup your system on a daily basis, each evening, because you never know when it strikes you. I&#8217;m using a nice and free software called <a href="http://www.grapefruit.ch/iBackup/" title="iBackup">iBackup</a> that let&#8217;s you backup to any destination, and after the initial process, only updates the changed files.</p>

<p>The second failure thought me that SSD may be expensive, but man, it&#8217;s fast! And I don&#8217;t want to have any other HDD now.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/3B418BWt6kOdPH8ai1wmBrYZMFA/0/da"><img src="http://feedads.g.doubleclick.net/~a/3B418BWt6kOdPH8ai1wmBrYZMFA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/3B418BWt6kOdPH8ai1wmBrYZMFA/1/da"><img src="http://feedads.g.doubleclick.net/~a/3B418BWt6kOdPH8ai1wmBrYZMFA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=ii3LAgwDrtw:8fSliaivXsc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ii3LAgwDrtw:8fSliaivXsc:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ii3LAgwDrtw:8fSliaivXsc:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ii3LAgwDrtw:8fSliaivXsc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=ii3LAgwDrtw:8fSliaivXsc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=ii3LAgwDrtw:8fSliaivXsc:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=ii3LAgwDrtw:8fSliaivXsc:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/ii3LAgwDrtw" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2009-06-05T16:39:08+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/apple-hard-disk-failures-or-how-i-stopped-worrying-and-love-the-ssd/</feedburner:origLink></item>

    <item>
      <title>Wolfram|Alpha launching today and what it means for Google and search</title>
      <link>http://feedproxy.google.com/~r/f055/~3/CaC1O9jy_k0/</link>
      <guid isPermaLink="false">http://f055.net/article/wolframalpha-launching-today-and-what-it-means-for-google-and-search/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/wolframalpha-launching-today-and-what-it-means-for-google-and-search/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/wolframalpha-launching-today-and-what-it-means-for-google-and-search/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/wolframalpha.png" alt="Wolfram|Alpha" /></p>

<p><a href="http://www.wolframalpha.com/" title="Wolfram|Alpha">Wolfram|Alpha</a> knowledge search engine is set to launch online today, May 15, with a live webcast beginning at 7pm CST. A lot of hype has been made around this new project by the iconic <a href="http://en.wikipedia.org/wiki/Stephen_Wolfram" title="Stephen Wolfram">Stephen Wolfram</a> and his team most widely known for their brilliant Mathematica package and online math encyclopedia. We have seen a lot of attempts to create a <a href="http://www.google.com/search?q=google+killer" title="Google killer">Google killer</a>, the last being the unfortunate <a href="http://www.cuil.com/" title="Cuil">Cuil</a>. But Wolfram|Alpha is anything but a search engine &mdash; <b>it&#8217;s not a Google killer, it&#8217;s the future.</b>
</p><br /><p>The approach to information research between Worlfram and Google is completely different. While Google tries to index as much content as it can, rank it by relevance and answer any query it gets, it also moves the actual answer seeking onto the user. It especially shows when you are doing your studies and looking for particular solutions to specific problems &mdash; Google is really helpless at putting correct links right before you. Unfortunately, there was no other option than Google, so we end up in digging through at least 5 pages of results to find the thing we are seeking.</p>

<p>Wolfram|Alpha on the other hand will give you a concrete answer &mdash; if it knows it. Otherwise it will tell you it doesn&#8217;t know what you want. Now, until today this behavior was considered wrong. We assumed whatever we ask, we&#8217;ll get an answer. And it would be best if the service could read our minds even with completely ridiculous questions like <i>why blue is green</i>. My point is, maybe it&#8217;s time for specific tools, like Wolfram|Alpha, to emerge and say that Google approach is not the Holy Grail of search?</p>

<p>What I learned from the recent screencast demoing Wolfram|Alpha is that never before we had a tool that would let us manipulate data in such flexible way. For example, we can easily find a good name for our baby analyzing how different names distribute over past few years. Or check how different countries develop in relation to each other. We can easily compute mathematical equations, monitor changes in different areas like economy, weather, politics and society. This may sound boring for all who use Google to find new stacks of porn, jokes and funny stuff (viva la 4chan!), but for serious business Google results were too raw to use, even with the amazing set of APIs (oh I&#8217;d like to get my hands on Alpha API) .</p>

<p>In my opinion we just observe a true beginning of the end of its holiness Google search engine. Yes, it has changed the Web as we know it, yes, it will still be number one, and yes, it should not try to be different &mdash; we love it for simplicity. But we should acknowledge that Web search is evolving, and Wolfram|Alpha showed that there&#8217;s enormous amount of space for development. But we should also remember it will all break down to a simple thing of asking the proper questions.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/uWSTI3xjgaGSQn4b5ikdXhQck4U/0/da"><img src="http://feedads.g.doubleclick.net/~a/uWSTI3xjgaGSQn4b5ikdXhQck4U/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/uWSTI3xjgaGSQn4b5ikdXhQck4U/1/da"><img src="http://feedads.g.doubleclick.net/~a/uWSTI3xjgaGSQn4b5ikdXhQck4U/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=CaC1O9jy_k0:s-JDlm3dX6s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=CaC1O9jy_k0:s-JDlm3dX6s:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=CaC1O9jy_k0:s-JDlm3dX6s:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=CaC1O9jy_k0:s-JDlm3dX6s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=CaC1O9jy_k0:s-JDlm3dX6s:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=CaC1O9jy_k0:s-JDlm3dX6s:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=CaC1O9jy_k0:s-JDlm3dX6s:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/CaC1O9jy_k0" height="1" width="1"/>]]></content:encoded>
      <dc:subject>News, Development</dc:subject>
      <dc:date>2009-05-15T10:45:35+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/wolframalpha-launching-today-and-what-it-means-for-google-and-search/</feedburner:origLink></item>

    <item>
      <title>Windows 7 on MacBook first look</title>
      <link>http://feedproxy.google.com/~r/f055/~3/MvMRf02X2vo/</link>
      <guid isPermaLink="false">http://f055.net/article/windows-7-on-macbook-first-look/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/windows-7-on-macbook-first-look/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/windows-7-on-macbook-first-look/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/winfish.png" alt="Microsoft Windows 7" /></p>

<p>Installing Windows 7 RC1 32-bit on my late 2007 MacBook was a piece of cake. Boot Camp manager created a 32 GB partition, installation from the DVD was quick and smooth, and the system was running nicely even without the drivers from Apple. The decision by Microsoft to release an almost complete product for free, with a one-year license, is a great opportunity to get used to the next iteration of Windows systems. Let&#8217;s have a look at it.
</p><br /><p>The first impression is important and Windows 7 makes a very good one. The new logo animation during booting is very nice. Then, you are welcomed into a pleasent desktop environment where everything from the tray icons to wallpaper fits into one style. One cool feature is the <i>Show desktop</i> button &#8212; you can hover it and everything will fade, or you can click it with the usual behavior of minimizing all windows.</p>

<div class="center"><a href="http://www.f055.net/images/uploads/home.png"><img src="http://www.f055.net/images/uploads/home_thumb.png" alt="Windows 7 desktop" /></a></div>

<p>I remember that tray icons always spread havoc in the looks of Windows, as the app makers make them in more juicy colors than you will find in a stack of magic markers. This problem has a cool solution of a pop-up window with hidden icons, and an additional tray manager to exactly define what should be displayed.</p>

<p>Other nice interface decisions include an improved 3D Win-Tab window switching. The traditional Alt-Tab also got a makeover, now with fade effects on the way. Also, the preview of hidden windows appearing when hovering on the taskbar seem to work quite well. Although it kind of feels too slow to benefit the workflow.</p>

<div class="center"><a href="http://www.f055.net/images/uploads/wordpad.PNG"><img src="http://www.f055.net/images/uploads/wordpad_thumb.PNG" alt="New WordPad" /></a></div>

<p>The hell must have froze over because Microsoft remade its basic apps: WordPad, Paint (!) and Minesweeper (!!!). It also added several essential mini-tools: Sticky Notes, Magnifier and Snipping Tool (great for MacBooks without the Print Screen key, like mine). I really like the new Paint, now you can make more than just silly pixelated drawings.</p>

<div class="center"><a href="http://www.f055.net/images/uploads/paint.PNG"><img src="http://www.f055.net/images/uploads/paint_thumb.PNG" alt="New MS Paint" /></a></div>

<p>One strange decision was to remove image correction tools from the system Picture Viewer. They were a great help in fixing red eyes, color balance etc. I hope this will be fixed with some update, because it would be a real shame. Especially if paired with the new Paint, these two apps would make a nice combo for beginners.</p>

<p><img src="http://www.f055.net/images/uploads/minesweeper.PNG" alt="New Minesweeper" /></p>

<h2>Installation tips</h2>

<p>Despite Windows 7 having concernes, Apple Boot Camp drivers installed just fine, both the 2.0 and 2.1 update &#8212; although that last one reported a problem with Bluetooth. The OSD controls work fine. The touchpad works, with double-touch vertical scrolling, but without finger-tapping clicking. Mouse/touchpad settings are in <i>Device and Printers</i> section. Yet again redesigned <i>Control Panel</i> is now even more confusing to navigate. And there&#8217;s no option to make it <i>classic</i>...</p>

<p><img src="http://www.f055.net/images/uploads/appledrivers.PNG" alt="System warning" /></p>

<p>Be sure to turn off automatic updates. Set them to either download and wait for user choice or to just inform about them. Be cautious, because the updates are more likely to screw up your systems than they would on a regular PC.</p>

<p>There is not much malware for this new Windows, but it&#8217;s better to be cautious. Luckily, Microsoft teamed up with some of the major antivirus makers, and for example Kaspersky Lab released a preview of their new security suite for free, especially for Windows 7. Just select beta activation upon first launch of Anti-Virus 8.0 and you will have it running until November.</p>

<p>And if like me you forgot to change the name of the partition to something sensible and can&#8217;t stand the Untitled drive on your Leopard desktop, while in Windows just go to hard disk <i>Properties</i> in <i>Computer</i> and change the name.</p>

<h2>Conclusions</h2>

<p>In general, Windows 7 looks like Vista with a bit of style. It boots faster, seems to work smoother and delivers nice fireworks to the desktop. Although I don&#8217;t like the new ribbon toolbars, I might need to get use to them. Also, a pity that it&#8217;s often difficult to find anything anywhere &#8212; besides the desktop, this one really shows a designers effort. I didn&#8217;t work with it long enough to say more, but after first few days I think this one might really catch on and be the real replacement for XP. It just works &#8212; so far&#8230; Anyway, Leopard still remains my first, favorite system. But it&#8217;s nice to know I can switch to something that is not totally useless.</p>

<p>PS. Ah yes, I&#8217;m writing this from IE 8 and it works nicely too. Although it&#8217;s still cluttered with lots of useless icons in the tab bar. But works blazing fast. I&#8217;m a bit <i>wow</i>.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/J469C2WRo1ysZr1YlE4oeZ_24so/0/da"><img src="http://feedads.g.doubleclick.net/~a/J469C2WRo1ysZr1YlE4oeZ_24so/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/J469C2WRo1ysZr1YlE4oeZ_24so/1/da"><img src="http://feedads.g.doubleclick.net/~a/J469C2WRo1ysZr1YlE4oeZ_24so/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=MvMRf02X2vo:95cVOiCu_9w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=MvMRf02X2vo:95cVOiCu_9w:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=MvMRf02X2vo:95cVOiCu_9w:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=MvMRf02X2vo:95cVOiCu_9w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=MvMRf02X2vo:95cVOiCu_9w:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=MvMRf02X2vo:95cVOiCu_9w:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=MvMRf02X2vo:95cVOiCu_9w:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/MvMRf02X2vo" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2009-05-09T00:36:31+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/windows-7-on-macbook-first-look/</feedburner:origLink></item>

    <item>
      <title>Get Semantix - a multilingual semantic mashup</title>
      <link>http://feedproxy.google.com/~r/f055/~3/IM-6cgVrpNw/</link>
      <guid isPermaLink="false">http://f055.net/article/get-semantix-a-multilingual-semantic-mashup/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/get-semantix-a-multilingual-semantic-mashup/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/get-semantix-a-multilingual-semantic-mashup/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/semanticwords.jpg" alt="Semantic results" /></p>

<p>It&#8217;s been a little quiet on the blog, because I was busy developing the next version of <a href="http://getsemantix.com/" title="Semantix">Semantix</a> &#8212; a semantic mashup connecting all major semantic web services that is probably the <b>first semantic service with multi-language support</b>. By analyzing texts, <a href="http://getsemantix.com/" title="Semantix">Semantix</a> gives you smart summaries, annotates contents with keywords and categorizes them. And it&#8217;s all written in Perl, so it&#8217;s uber-cool ;) If you&#8217;d like to learn more about <a href="http://getsemantix.com/" title="Semantix">Semantix</a> and <b>get an invite to the private beta</b>, continue reading.
</p><br /><p>At this stage, <a href="http://getsemantix.com/" title="Semantix">Semantix</a> uses services like OpenCalais, Freebase, Yahoo Content Analysis and SemanticHacker to get the semantic knowledge from the texts. With the help of Google Translate, the service can process content in many different languages. The results are divided into <b>keywords</b>, <b>categories</b>, <b>concepts</b> and a <b>smart summary</b>. The last one needs a word on, as an especially interesting idea.</p>

<p><b>Smart summary</b> is an excerpt taken from your text, which includes only the most important sentences. The importance of each sentence is determined using semantics. The output summarization includes the key content, but is significantly shorter than the original.</p>

<p><b>Keywords</b> are what they sound like &#8212; tags from the text. <b>Categories</b> on the other hand are predefined groups to which the text belongs to &#8212; very useful in sorting contents, as the categories are fixed boxes into which we throw the input. When you look at the <a href="http://getsemantix.com/press/example_en.png" title="sample output from Semantix">sample output from Semantix</a>, you see how it all works.</p>

<p>Currently, <a href="http://getsemantix.com/" title="Semantix">Semantix</a> is a private beta, and I am running tests with quite a few testers. The nice thing about the feedback system is that you can not only rank the output or leave a comment, but also exactly pinpoint the incorrect semantic elements by clicking on them and literally crossing them out.</p>

<p><img src="http://www.f055.net/images/uploads/semanticfeedback.png" alt="Feedback system" /></p>

<p><b>If you would like join the group of <a href="http://getsemantix.com/" title="Semantix">Semantix</a> testers and help improve it, post a comment to this article.</b> I will then contact you with an access key to the service, and you&#8217;ll be able to see it on your own. I&#8217;m looking forward to your feedback!
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/yUtKKFCzSjpqnS2TTserDoXfArw/0/da"><img src="http://feedads.g.doubleclick.net/~a/yUtKKFCzSjpqnS2TTserDoXfArw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yUtKKFCzSjpqnS2TTserDoXfArw/1/da"><img src="http://feedads.g.doubleclick.net/~a/yUtKKFCzSjpqnS2TTserDoXfArw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=IM-6cgVrpNw:YZZ-qtUTiww:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=IM-6cgVrpNw:YZZ-qtUTiww:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=IM-6cgVrpNw:YZZ-qtUTiww:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=IM-6cgVrpNw:YZZ-qtUTiww:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=IM-6cgVrpNw:YZZ-qtUTiww:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=IM-6cgVrpNw:YZZ-qtUTiww:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=IM-6cgVrpNw:YZZ-qtUTiww:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/IM-6cgVrpNw" height="1" width="1"/>]]></content:encoded>
      <dc:subject>News, Development</dc:subject>
      <dc:date>2009-04-22T19:12:49+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/get-semantix-a-multilingual-semantic-mashup/</feedburner:origLink></item>

    <item>
      <title>The 140 Characters Webapp Challenge Awards!</title>
      <link>http://feedproxy.google.com/~r/f055/~3/14uWq9wH50Y/</link>
      <guid isPermaLink="false">http://f055.net/article/the-140-characters-webapp-challenge-awards/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/the-140-characters-webapp-challenge-awards/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/the-140-characters-webapp-challenge-awards/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/webappawards.jpg" alt="The 140 Characters Webapp Challenge Awards" /></p>

<p>After the <a href="http://f055.net/article/final-wrap-up-of-the-140-characters-webapp-challenge/" title="final wrap-up">final wrap-up</a> of The Challenge, I gave you 4 weeks to vote. A lot of votes have been casted on different contenders. Big thanks to all who participated! Today I closed the voting and summed up the points. Here are the results.
</p><br /><h2>The winner is</h2><p>
<img src="http://www.f055.net/images/uploads/trohpy09_1st.png" alt="gold" class="ico" /><br />
<a href="http://www.symfony-project.org/" title="fabien">Fabien</a> with a PHP web framework in 131 chars of PHP:
</p><blockquote>
<pre>
require __DIR__.’/c.php’;
if (!is_callable($c = @$_GET&#91;‘c’&#93; ?: function() &#123; echo ‘Woah!’; &#125;))
  throw new Exception(‘Error’);
$c();
</pre>
</blockquote><p>
Homepage: <a href="http://www.twitto.org/">http://www.twitto.org/</a></p>

<p><br />
</p><h2>2nd place goes to</h2><p>
<img src="http://www.f055.net/images/uploads/trohpy09_2nd.png" alt="silver" class="ico" /><br />
<a href="http://isaacvanname.com/" title="Isaac Van Name">Isaac Van Name</a> and his Micro-Twitter in 154 chars of PHP:
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=“a”&gt;&lt;input type=“submit” value=“send”/&gt;&lt;/form&gt;
&lt;?php 
if($_GET&#91;‘a’&#93;)&#123;
  $q=fopen(‘micro.php’,‘a’);
  fwrite($q,$_GET&#91;‘a’&#93;.’&lt;hr&gt;’);
  fclose($q);
&#125;
?&gt;
</pre>
</blockquote>

<p><br />
</p><h2>3rd place goes to</h2><p>
<img src="http://www.f055.net/images/uploads/trohpy09_3rd.png" alt="bronze" class="ico" /><br />
<a href="http://www.keenora.de/" title="Keenora">Keenora</a> and his JPG resizer in 186 chars of PHP:
</p><blockquote>
<pre>
&lt;?header(‘Content-type:’);
list($w,$h)=getimagesize($_GET&#91;a&#93;);
$b=imagecreatetruecolor($w/2,$h/2);
imagecopyresized($b,imagecreatefromjpeg($_GET&#91;a&#93;),0,0,0,0,$w/2,$h/2,$w,$h);
imagejpeg($b)?&gt;
</pre>
</blockquote>

<p><br />
</p><h2>Jury pick</h2><p>
<img src="http://www.f055.net/images/uploads/trohpy09_jurypick.png" alt="jury pick" class="ico" /><br />
<a href="http://simplic.it/" title="Hartog">Hartog</a> and the copy of Twitto.org web framework in 111 chars of Perl:
</p><blockquote>
<pre>
use CGI’:all’;
($a,$b)=path_info=~/.(&#91;^\/&#93;+).(.*)/;
eval"use $a”;
print header.(!$@&amp;&amp;$a-&gt;can($b)?$a-&gt;$b():“no go”)
</pre>
</blockquote>

<p>
</p><h2>Votes distribution</h2>

<p><img src="http://chart.apis.google.com/chart?cht=p&amp;chd=t:55,6,5,4,2,3,3,35,5,2,7,2,2,3,125,3,27,2,9,2,2,2&amp;chs=500x350&amp;chl=1|2|3|4|5|6|7|9|11|12|14|16|17|19|20|21|22|23|25|26|28|29|31|33|34|35|36" alt="votes chart" /></p>

<p>As you can see, the majority of votes went to the winners, although 2nd and 3rd place had a close battle for quite some time. At the same time Twitto was out of reach.</p>

<p>Thank you to all of the awesome participants of 2009 edition of The 140 Characters Webapp Challenge. Thanks to all who voted and commented! It was an exciting event. And those who didn&#8217;t make it this time &#8212; follow this blog, and see you all next year!</p>

<p><i>Big thanks to <a href="http://www.foreverbroken.org" title="Psychotic_Carp">Psychotic_Carp</a> for the superb pixel art <a href="http://www.pixeljoint.com/pixelart/12360.htm" title="trophy icons">trophy icons</a>!</i><br />
<i>Headline image golden guy by <a href="http://www.flickr.com/photos/lumaxart/2293239853/" title="LuMaxArt">LuMaxArt</a></i>
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/4OWEodUwrmvEntiaWzs-AqEQWyM/0/da"><img src="http://feedads.g.doubleclick.net/~a/4OWEodUwrmvEntiaWzs-AqEQWyM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4OWEodUwrmvEntiaWzs-AqEQWyM/1/da"><img src="http://feedads.g.doubleclick.net/~a/4OWEodUwrmvEntiaWzs-AqEQWyM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=14uWq9wH50Y:ftj-Svb179k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=14uWq9wH50Y:ftj-Svb179k:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=14uWq9wH50Y:ftj-Svb179k:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=14uWq9wH50Y:ftj-Svb179k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=14uWq9wH50Y:ftj-Svb179k:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=14uWq9wH50Y:ftj-Svb179k:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=14uWq9wH50Y:ftj-Svb179k:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/14uWq9wH50Y" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, Twitter</dc:subject>
      <dc:date>2009-03-30T20:29:15+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/the-140-characters-webapp-challenge-awards/</feedburner:origLink></item>

    <item>
      <title>rel=“canonical” and Expression Engine SEO</title>
      <link>http://feedproxy.google.com/~r/f055/~3/z0jf7XfeHB0/</link>
      <guid isPermaLink="false">http://f055.net/article/relcanonical-and-expression-engine-seo/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/relcanonical-and-expression-engine-seo/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/relcanonical-and-expression-engine-seo/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/mysearch.jpg" alt="Search results" /></p>

<p>If you have read my previous two articles on <a href="http://f055.net/article/google-friendly-seo-for-expression-engine/" title="Search Engine Optimization">Search Engine Optimization</a> (SEO) and <a href="http://f055.net/article/expression-engine-and-google-friendly-links/" title="Google-friendly links">Google-friendly links</a> for Expression Engine (EE), then you know how important these tweaks are. They help with various things, duplicate content among them. Google recently introduced another tool to deal with that particular problem &#8212; <a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=139394" title="canonical page tag">canonical page tag</a>. And there are a few places in Expression Engine where it works perfectly.
</p><br /><p>What is <i>rel=&#8220;canonical&#8221;</i>? Google introduced this tag to deal with duplicated content, caused mainly by passing additional info in the URL query string. The URL seems different to the search engine crawler, but leads to the same page. Consider this example:</p>

<blockquote>
<pre>
<a href="http://testowy.com/test-articles.php?sort=price&amp;show=vat">http://testowy.com/test-articles.php?sort=price&amp;show=vat</a>
<a href="http://testowy.com/test-articles.php?sort=name">http://testowy.com/test-articles.php?sort=name</a>
</pre>
</blockquote>

<p>Both URLs point to the same page, but may be indexed as different due to different query string. In EE this is the often the case with pagination &#8212; if you use <a href="http://www.google.com/webmasters/tools/" title="Google Webmaster Tools">Google Webmaster Tools</a>, you may notice that the diagnostics show duplicate content errors on pagination links. For example, it&#8217;s the pagination of comments of an article:</p>

<blockquote>
<pre>
/article/the-140-character-webapp-challenge/‎
‎/article/the-140-character-webapp-challenge/P50/‎
</pre>
</blockquote>

<p>However, it&#8217;s the same with any other pagination in EE (entries list, comments or article text). The solution is to add the <i>rel=&#8220;canonical&#8221;</i> tag in the template header. If you add it on the main page, to prevent indexing of entries list pagination, use your main page URL:</p>

<blockquote>
<pre>
&lt;link rel="canonical" href="http://f055.net"/&gt;
</pre>
</blockquote>

<p>You should also add it in the article template, in case you get loads of comments and due to their pagination your unique entry URL won&#8217;t be unique any more. Use the <i>{title_permalink}</i> EE tag:</p>

<blockquote>
<pre>
&lt;link rel="canonical" href="{title_permalink="article"}"/&gt;
</pre>
</blockquote>

<p>Change the <i>article</i> to the name of your entry template. If you write long articles and use paragraph pagination, this method also applies.</p>

<p>Using the canonical tag, you should stop Google from indexing the incorrect URLs, dealing with most of the duplicate content errors that might appear in the Webmaster Tools diagnostics.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/hZWIhoSGiK3TtTnykPNrlJdbYgI/0/da"><img src="http://feedads.g.doubleclick.net/~a/hZWIhoSGiK3TtTnykPNrlJdbYgI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hZWIhoSGiK3TtTnykPNrlJdbYgI/1/da"><img src="http://feedads.g.doubleclick.net/~a/hZWIhoSGiK3TtTnykPNrlJdbYgI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=z0jf7XfeHB0:2lI_KbQICcY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=z0jf7XfeHB0:2lI_KbQICcY:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=z0jf7XfeHB0:2lI_KbQICcY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=z0jf7XfeHB0:2lI_KbQICcY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=z0jf7XfeHB0:2lI_KbQICcY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=z0jf7XfeHB0:2lI_KbQICcY:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=z0jf7XfeHB0:2lI_KbQICcY:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/z0jf7XfeHB0" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2009-03-25T18:51:03+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/relcanonical-and-expression-engine-seo/</feedburner:origLink></item>

    <item>
      <title>4 weeks with Safari 4 Beta</title>
      <link>http://feedproxy.google.com/~r/f055/~3/rUqMIbt-tRI/</link>
      <guid isPermaLink="false">http://f055.net/article/4-weeks-with-safari-4-beta/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/4-weeks-with-safari-4-beta/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/4-weeks-with-safari-4-beta/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/safariabout.png" alt="Safari 4 Beta" /></p>

<p>Four weeks have passed since <a href="http://www.apple.com" title="Apple">Apple</a> released <a href="http://www.apple.com/safari/" title="Safari 4 Beta">Safari 4 Beta</a>, and I have been using it since. There are things I like about this new browser, and even after this short time I think I couldn&#8217;t live without some of the features. On the other hand, a few things are irritating and could be fixed. I&#8217;ve been using the previous version of Safari, so the transition was not painful. But even for Apple, who is very picky about user interfaces, Safari 4 is revolutionary.
</p><br /><h2>The bad stuff</h2>

<p>Let&#8217;s start with the cons. Yes, I like the new toolbar and tabs, but they are often irritation to use too. First, it wouldn&#8217;t hurt if they swapped the tiny reload/stop button with the huge <i>plus</i> for adding a bookmark. I use <i>command+D</i> anyway, I&#8217;d rather have a big stop.</p>

<p><img src="http://www.f055.net/images/uploads/safaritabs.png" alt="Safari Tabs" /></p>

<p>Regarding the tabs, I don&#8217;t care about the tiny <i>New Tab</i> button, as similarly, I use <i>command+T</i>. But I do hate that the tabs actually move the whole browser window. I constantly keep on moving my Safari around a bit, while switching the tabs, and frankly, it&#8217;s highly irritating. Also, why rearranging a tab makes it active?!</p>

<p>I had given the new tabs a longer thought, and I&#8217;m not sure how the problem should be solved. One way would be to shift the tabs bar down, like in Chrome. But that would throw the additional space to the garbage. Another option I think might work, would be to move the window only by clicking on the active tab, while inactive tabs could be rearranged and activated without influencing the window position.</p>

<p>Final thought about exceeding the number of tabs visible in the tabs bar. In the previous version, there was a tiny arrow button, displaying a dropdown with additional tabs. Now, there&#8217;s a triple-dot icon next to the <i>New Tab</i> button, doing just the same. I&#8217;m not sure why Apple doesn&#8217;t want to implement it&#8217;s genius two-finger horizontal scrolling here (like Firefox tab scrolling). It would fit perfectly.</p>

<h2>The good stuff</h2>

<p><img src="http://www.f055.net/images/uploads/topsites.png" alt="Top Sites" /></p>

<p>The best feature of the new browser is definitely the <i>Top Sites</i>. It&#8217;s how the bookmarks should be long time ago. Recognizing a site by its thumbnail is way faster than reading the text link, and the ability to pin the important ones and leave the rest for automatic suggestion makes it the best rapid-browsing gateway there is. I&#8217;m still using the <i>Bookmarks Bar</i>, but less often. I virtually stopped using the actual <i>Show all bookmarks</i> button. I didn&#8217;t use it much before either.</p>

<p>The next best feature is <i>History Search</i>. Not only it&#8217;s fast as hell, but the visualization, just like I said before, makes it perfect for content recognition. Before, I had to actually remember where I was browsing to come back to a specific thing, because lots of websites are so smart to entitle different pages with the same name. Now, it&#8217;s just a matter of typing a keyword.</p>

<p><img src="http://www.f055.net/images/uploads/hisearch.png" alt="History Search" /></p>

<p>Another really useful tool is the <i>Quick Search</i> with suggestions. I got this functionality with <a href="http://www.inquisitorx.com/" title="Inquisitor">Inquisitor</a> before, but now it&#8217;s even better &#8212; real-time suggestions directly from Google, recent searches, and integrated current document search. I don&#8217;t need anything more.</p>

<p>The whole <i>Develop</i> menu is awesome. I don&#8217;t know why anybody wants to download Firefox, and stuff it with all these plugins, when you have Safari with all the necessary tools integrated straight away. The new web inspector rocks. Several small glitches were fixed, and the new split-screen view with element highlighting is great for debugging. I really like the website profiling tool, and the JS debugger looks very promising.</p>

<p>Finally, as I said, I like what they did with the top user interface, both the browsing toolbar and the tabs in the window titlebar. It was a controversial move, especially the tabs, but it gives substantially more browsing space. And I&#8217;m always in need of that.</p>

<h2>Conclusions</h2>

<p>I really am happy with the past 4 weeks of the new Safari browser. I don&#8217;t even remember if it crashed, everything works smoothly and quickly. I consider it the browser of my choice. While I have Firefox and Opera installed, as well as running Chrome and IE through <a href="http://www.virtualbox.org/" title="VirtualBox">VirtualBox</a>, I really can&#8217;t understand why anybody would like to use anything else than Safari, on a Mac. Don&#8217;t get me wrong, but I really think that <b>quality of use should be put before the quantity of features</b>. Thus, plugin-packed Firefox doesn&#8217;t make me drool, and feature-packed Opera feels too non-native and clumsy.</p>

<p>While on a Mac, I think and work a bit in the way Apple design it, because then the quality is at its best. Why don&#8217;t you try it to, maybe you&#8217;ll like it? Be sure to <a href="http://twitter.com/f055" title="follow me on Twitter">follow me on Twitter</a>, to be up to date with the upcoming workspace improvements for Leopard and Mac I&#8217;m planning to describe.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/0ftLHFkEmsKs0LT5-ryKI6wDt60/0/da"><img src="http://feedads.g.doubleclick.net/~a/0ftLHFkEmsKs0LT5-ryKI6wDt60/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/0ftLHFkEmsKs0LT5-ryKI6wDt60/1/da"><img src="http://feedads.g.doubleclick.net/~a/0ftLHFkEmsKs0LT5-ryKI6wDt60/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=rUqMIbt-tRI:rnCNvXmyfkY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=rUqMIbt-tRI:rnCNvXmyfkY:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=rUqMIbt-tRI:rnCNvXmyfkY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=rUqMIbt-tRI:rnCNvXmyfkY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=rUqMIbt-tRI:rnCNvXmyfkY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=rUqMIbt-tRI:rnCNvXmyfkY:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=rUqMIbt-tRI:rnCNvXmyfkY:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/rUqMIbt-tRI" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2009-03-23T21:25:41+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/4-weeks-with-safari-4-beta/</feedburner:origLink></item>

    <item>
      <title>Extract and change file icons in Leopard</title>
      <link>http://feedproxy.google.com/~r/f055/~3/MErMdzL_OSU/</link>
      <guid isPermaLink="false">http://f055.net/article/extract-and-change-file-icons-in-leopard/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/extract-and-change-file-icons-in-leopard/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/extract-and-change-file-icons-in-leopard/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/snapcon.jpg" alt="Extract icons in Leopard" /></p>

<p>There exists an extremely easy way to manipulate icons in Leopard (and previous OS X versions too), just by using copy-paste between files and folders. Using this technique you can quickly customize your disk items, as well as extract rich graphics for further use or simply inspiration. With just a few clicks you can get these sweet looking designs in an up to 512x512 PNG file. Here&#8217;s how you do it.
</p><br /><p>Locate the application or file with the icon you want, select it and from the right-click menu select &#8220;Get Info&#8221; (or ⌘+I). Let&#8217;s use Safari as an example. You should see a similar window:<br />
<img src="http://www.f055.net/images/uploads/getinfo.png" alt="Get Info file menu" /><br />
Click on the small icon in to left corner and copy it with ⌘+C.</p>

<p>Open &#8220;Preview&#8221; and in the &#8220;File&#8221; menu select &#8220;New From Clipboard&#8221; (or simply ⌘+N):<br />
<img src="http://www.f055.net/images/uploads/copyclipboard.png" alt="Copy icon from clipboard" /><br />
Each icon file contains several sizes of the same image. Choose from the sidebar the size you want to extract:<br />
<img src="http://www.f055.net/images/uploads/choosesize.png" alt="Select icon size" /><br />
In the &#8220;File&#8221; menu select &#8220;Save as&#8230;&#8221; and select PNG format, to obtain best quality. Be sure to have the &#8220;Alpha&#8221; checkbox checked:<br />
<img src="http://www.f055.net/images/uploads/saveas.png" alt="Save as PNG" /><br />
After these steps you should have a nice PNG image from the icon, looking for example like a 256x256 Safari logo:<br />
<img src="http://www.f055.net/images/uploads/safari.png" alt="Extracted Safari icon" /><br />
<b>Hints:</b>
</p><ol>
<li>By copy-pasting (⌘+C, ⌘+V) icons between &#8220;Get Info&#8221; windows you can quickly change any file&#8217;s icon.</li>
<li>Look for interesting images inside applications &#8212; right-click an app, then <i>Show Package Contents</i> and explore the <i>Resources</i> folder</li>
</ol>
<p><a href="http://feedads.g.doubleclick.net/~a/pOnA1GdgJxJjCdnH6uzCM5kYUbA/0/da"><img src="http://feedads.g.doubleclick.net/~a/pOnA1GdgJxJjCdnH6uzCM5kYUbA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/pOnA1GdgJxJjCdnH6uzCM5kYUbA/1/da"><img src="http://feedads.g.doubleclick.net/~a/pOnA1GdgJxJjCdnH6uzCM5kYUbA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=MErMdzL_OSU:dzL2VFEOeGc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=MErMdzL_OSU:dzL2VFEOeGc:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=MErMdzL_OSU:dzL2VFEOeGc:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=MErMdzL_OSU:dzL2VFEOeGc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=MErMdzL_OSU:dzL2VFEOeGc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=MErMdzL_OSU:dzL2VFEOeGc:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=MErMdzL_OSU:dzL2VFEOeGc:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/MErMdzL_OSU" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2009-03-15T20:33:34+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/extract-and-change-file-icons-in-leopard/</feedburner:origLink></item>

    <item>
      <title>Make separate RSS feeds for each category in ExpressionEngine</title>
      <link>http://feedproxy.google.com/~r/f055/~3/WvlQrFtBvuQ/</link>
      <guid isPermaLink="false">http://f055.net/article/make-separate-rss-feeds-for-each-category-in-expressionengine/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/make-separate-rss-feeds-for-each-category-in-expressionengine/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/make-separate-rss-feeds-for-each-category-in-expressionengine/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/dofeed.jpg" alt="Please Do Feed" /></p>

<p>It&#8217;s time to talk about ExpressionEngine (EE) for a change. If any of you can speak Polish, I recommend subscribing to <a href="http://eexpression.pl/" title="EExpression.pl">EExpression.pl</a>, a nice new site that talks about EE in my native language. Now, to the subject &#8212; let&#8217;s assume for a moment that you use the EE feed templates. If you are running a daily news site, there&#8217;s probably loads of different categories you are broadcasting. It would be nice if your readers could subscribe just to the topic they are interested in (on <a href="http://cnn.com" title="CNN">CNN</a> you can), but without the need for you to create tons of separate feed templates. See how EE can do this task for you.
</p><br /><p>Here is the idea &#8212; the URL of the feed will contain the name and id of the category it represents. Depending on your hierarchy, it will be two particular segments of the URL. For example, my main template group is named <i>blog</i>, and my feed template is named <i>rss</i>. Therefore, my main feed link is:
</p><blockquote>
<pre>
f055.net/blog/rss/
f055.net/&#123;segment_1&#125;/&#123;segment_2&#125;/
</pre>
</blockquote><p>
You can see the two segment variables, accordingly. First segment holds the string <i>blog</i>, while next contains <i>rss</i>. There are 9 <a href="http://expressionengine.com/docs/templates/globals/url_segments.html" title="Segment Variables">segment variables</a>. But we won&#8217;t need that many here. Our categorized feed link will look like this:
</p><blockquote>
<pre>
f055.net/blog/rss/News/1
f055.net/&#123;segment_1&#125;/&#123;segment_2&#125;/&#123;segment_3&#125;/&#123;segment_4&#125;/
</pre>
</blockquote><p>
Obviously, <i>News</i> is the category name, and <i>1</i> is the category id. And segments 3 and 4 hold these values, respectively.</p>

<p>Since we know all this, time to start modifying the feed template. Locate your weblog entries tag, it should look similar to the one below, and add the category parameter like this:</p>

<blockquote>
<pre>
&#123;exp:weblog:entries weblog="&#123;master_weblog_name&#125;" <b>category="&#123;segment_4&#125;"</b> rdf="off" dynamic_start="on" disable="member_data|trackbacks"&#125;
</pre>
</blockquote>

<p>Segment 4 represents the category id. Luckily, if it&#8217;s empty, all the categories are being displayed, so this will work for the main feed as well. But the feed title won&#8217;t. The best option is to make an <i>if</i> statement. Your regular feed title would be similar to this:</p>

<blockquote>
<pre>
&lt;title&gt;&#123;exp:xml_encode&#125;&#123;weblog_name&#125;&#123;/exp:xml_encode&#125;&lt;/title&gt;
</pre>
</blockquote>

<p>But it&#8217;s better to distinguish your category feeds with a clear indication of what they are about, just like that:</p>

<blockquote>
<pre>
&#123;if segment_3 != ""&#125;
&lt;title&gt;&#123;exp:xml_encode&#125;&#123;segment_3&#125; - &#123;weblog_name&#125;&#123;/exp:xml_encode&#125;&lt;/title&gt;
&#123;if:else&#125;
&lt;title&gt;&#123;exp:xml_encode&#125;&#123;weblog_name&#125;&#123;/exp:xml_encode&#125;&lt;/title&gt;
&#123;/if&#125;
</pre>
</blockquote>

<p>Here, we change the title whenever the 3rd segment, the category name, is not emtpy. Now we are done with the feed template, but how are we going to pair up the category names and ids? Not by hand. Let&#8217;s leave it to EE <i>Categories</i> tag. In the HTML <i>header</i>, type the following code:</p>

<blockquote>
<pre>
&#123;exp:weblog:categories weblog="&#123;my_weblog&#125;" style="linear"&#125;
&lt;link rel="alternate" type="application/rss+xml" title="RSS - &#123;category_name&#125;" href="http://f055.net/blog/rss/&#123;category_name&#125;/&#123;category_id&#125;" /&gt;
&#123;/exp:weblog:categories&#125;
</pre>
</blockquote>

<p>Assuming you have your weblog name in the <i>&#123;my_weblog&#125;</i> variable, this code will automatically embed links to all your categorized feeds, and give it nice names. Be sure to also include in the header a link to the main feed with all categories. So, once the user click on the RSS icon in the browser&#8217;s URL bar, there will be a nice list of all feeds, with category names.</p>

<p><img src="http://www.f055.net/images/uploads/catrss.png" alt="Categorized feeds" /></p>

<p>My blog doesn&#8217;t use separate feeds, because I prefer <a href="http://www.feedburner.com" title="FeedBurner">FeedBurner</a> over the native EE syndication. But I can&#8217;t say it&#8217;s not tempting to actually move to EE fully and have nice, categorized feeds. It looks professional, and gives the users more flexibility in reading the articles. I have to seriously think about it. <b>And what would you prefer?</b> Let me know in the comments! In the mean time, be sure to <a href="http://feeds.feedburner.com/f055">subscribe to my feed</a>.</p>

<p>Title image by <a href="http://www.sxc.hu/photo/417130" title="AleksRoks at sxc.hu">AleksRoks</a>.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/P6RZfz0xJbBU-IY3UvBEKjjmnLc/0/da"><img src="http://feedads.g.doubleclick.net/~a/P6RZfz0xJbBU-IY3UvBEKjjmnLc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/P6RZfz0xJbBU-IY3UvBEKjjmnLc/1/da"><img src="http://feedads.g.doubleclick.net/~a/P6RZfz0xJbBU-IY3UvBEKjjmnLc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=WvlQrFtBvuQ:DrD4DuHC-pY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=WvlQrFtBvuQ:DrD4DuHC-pY:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=WvlQrFtBvuQ:DrD4DuHC-pY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=WvlQrFtBvuQ:DrD4DuHC-pY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=WvlQrFtBvuQ:DrD4DuHC-pY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=WvlQrFtBvuQ:DrD4DuHC-pY:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=WvlQrFtBvuQ:DrD4DuHC-pY:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/WvlQrFtBvuQ" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2009-03-07T23:20:30+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/make-separate-rss-feeds-for-each-category-in-expressionengine/</feedburner:origLink></item>

    <item>
      <title>Final wrap-up of The 140 Characters Webapp Challenge!</title>
      <link>http://feedproxy.google.com/~r/f055/~3/6b7Mxwd5j98/</link>
      <guid isPermaLink="false">http://f055.net/article/final-wrap-up-of-the-140-characters-webapp-challenge/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/final-wrap-up-of-the-140-characters-webapp-challenge/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/final-wrap-up-of-the-140-characters-webapp-challenge/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/webappfin.png" alt="The Challenge is Over!" /></p>

<p>The 140 Characters Webapp Challenge is now over! If by chance you don&#8217;t know what it was, read <a href="http://mashable.com/2009/02/13/code-140-characters/" title="Mashable on The 140 Chars App Challenge">this article at Mashable</a> or see <a href="http://f055.net/article/the-140-character-webapp-challenge/" title="The 140 Characters Webapp Challenge">the original post at f055</a>. It was great 2 weeks, everybody. You showed some awesome skills, and really raised to The Challenge! Kudos :) And thanks for making it all so exciting for all of us!</p>

<p>I have wrapped up all of your apps into this long, 32 apps list, which all are indeed functional and below 140 chars! (plus 4 that are interesting, but too long) You can VOTE for ONE of your favorite apps. And yes, the voting script is 140 chars too!</p>

<p><img src="http://www.f055.net/images/uploads/ico_cone.png" alt="(url)" class="ico" /><a href="http://f055.net/140/shovv.pl" title="See The Challenge VOTING results">Check the VOTING results!</a>
</p><br /><p>Here is the final wrap-up of the coders and their apps, almost in the order of appearance ;&#93; If you wish to change something in your description, <a href="http://twitter.com/f055" title="Follow me on Twitter">tweet me</a>! To see how these were born, follow <a href="http://f055.net/article/the-140-character-webapp-challenge/#comments" title="Comments on The 140 Characters Webapp Challenge">the comments on The Challenge</a>.</p>

<h2>Voting!</h2><p>
You can vote for your ONE favorite script! Just click the VOTE link below the favorite source code! Voting is managed by yet another 140 characters app I made &#8212; it even does IP filtering to block repeated votes. If you get 0 then it means you already voted. <b>UPDATE: Voting is now closed!</b></p>

<blockquote>
<pre>
use CGI':all';$i=$ENV&#123;'REMOTE_ADDR'&#125;;$v=(param 0)=~/^(\d+)$/?$1:0;open V,'&lt;v';$j=&lt;V&gt;;open V,'&gt;&gt;v';print header.($j!~/$i/?print V "!$v&amp;$i":0)
</pre>
</blockquote>

<p>Results are displayed by a <strike>150</strike>160 characters app, because I wanted to make nice chart bars using input fields. But it can be done in 140 chars as well, if just plain text is displayed.</p>

<blockquote>
<pre>
use CGI':all';print header;open V,'v';%v=();$v=&lt;V&gt;;while($v=~/!(\d+)&amp;/g)&#123;$v&#123;$1&#125;++&#125;;for$i(sort&#123;$a&lt;=&gt;$b&#125;keys%v)&#123;print p.b("$i.").br.input(&#123;size=&gt;$v&#123;$i&#125;&#125;).$v&#123;$i&#125;&#125;;
</pre>
</blockquote>

<p><a href="http://f055.net/140/shovv.pl">VIEW VOTE RESULTS HERE!</a></p>

<p>OK! Enough of this talking, let&#8217;s get down to business! Here are the awesome coders and their apps!</p>

<h2>Coders and the webapps</h2>

<p><a href="http://isaacvanname.com/" title="Isaac Van Name"></p><h2>Isaac Van Name</h2><p></a></p>

<p>1. Micro-Twitter in 154 chars of PHP (props for being the first!):
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=“a”&gt;&lt;input type=“submit” value=“send”/&gt;&lt;/form&gt;&lt;?php if($_GET&#91;‘a’&#93;)&#123;$q=fopen(‘micro.php’,‘a’);fwrite($q,$_GET&#91;‘a’&#93;.’&lt;hr&gt;’);fclose($q);&#125;?&gt;
</pre>
</blockquote>

<p><a href="http://iambari.com/phpdoc" title="Bari"></p><h2>Bari</h2><p></a></p>

<p>2. Micro-Twitter in 139 chars of PHP (modification of Issac’s code):
</p><blockquote>
<pre>
&lt;form&gt;&lt;input type=“submit”&gt;&lt;input name=“a”&gt;&lt;/form&gt;&lt;?php $a=$_GET&#91;a&#93;;if($a)&#123;$q=fopen(‘m.php’,‘a’);fwrite($q,”&lt;hr&gt;$a”);fclose($q);echo $a;&#125;?&gt;
</pre>
</blockquote>

<p><a href="http://www.commentluv.com/" title="Andy Bailey"></p><h2>Andy Bailey</h2><p></a></p>

<p>3. Age Guessing in 140 chars of JS:
</p><blockquote>
<pre>
var c=0;var i=35;do&#123;var x=confirm(‘are you ‘+i+’?\n(ok=Y)’);i=Math.floor(Math.random()*70);c++;&#125;while(!x);alert(‘I only took ‘+c+’ tries!’);
</pre>
</blockquote><p>
Example: <a href="javascript:{var c=0;var i=35;do{var x=confirm(‘are you ‘+i+’?\n(ok=Y)’);i=Math.floor(Math.random()*70);c++;}while(!x);alert(‘I only took ‘+c+’ tries!’);}">launch JS</a></p>

<p>4. Micro-Twitter in 99 chars of JS:
</p><blockquote>
<pre>
(”&lt;input value=..&gt;&lt;p&gt;&#91;go&#93;”);$(‘p’).click(function()&#123;$(‘body’).append($(‘input’).val() + ‘&lt;hr&gt;’);&#125;);
</pre>
</blockquote><p>
Example: <a href="http://www.fiddyp.co.uk/internal/140charchallenge/">http://www.fiddyp.co.uk/internal/140charchallenge/</a></p>

<p><a href="http://james.padolsey.com/" title="James"></p><h2>James</h2><p></a></p>

<p>5. Micro-Twitter in 134 chars of PHP:
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=“s”&gt;&lt;input type=“submit”&gt;&lt;?$s=$_GET&#91;s&#93;;$f=file(‘a’);$a=!empty($s)?”&lt;hr&gt;$s$f&#91;0&#93;”:’‘;fwrite(fopen(‘a’,‘w’),$a);echo$a;
</pre>
</blockquote>

<p>6. Time of life counter in 146 chars of JS:
</p><blockquote>
<pre>
d=prompt(‘DOB?’,‘DD-MM-YYYY’).split(/&#91;^\d&#93;/);d=(new Date()-new Date(d&#91;2&#93;,d&#91;1&#93;,d&#91;0&#93;))/1000;alert(d+’ seconds\n’+d/60+’ minutes\n’+d/60/60+’ hours’)
</pre>
</blockquote><p>
Example: <a href="javascript:{d=prompt(‘DOB?’,‘DD-MM-YYYY’).split(/[^\d]/);d=(new Date()-new Date(d[2],d[1],d[0]))/1000;alert(d+’ seconds\n’+d/60+’ minutes\n’+d/60/60+’ hours’)}">launch JS</a></p>

<p><a href="http://www.keenora.de/" title="Keenora"></p><h2>Keenora</h2><p></a></p>

<p>7. Micro-Twitter in 129 chars of PHP:
</p><blockquote>
<pre>
&lt;?=’&lt;form&gt;&lt;input name=a&gt;&lt;input type=submit&gt;&lt;/form&gt;’;fputs(fopen(a,a),$_GET&#91;a&#93;.”\n&lt;hr&gt;”);$a=file(a);krsort($a)?&gt;&lt;?=implode( ,$a)?&gt;
</pre>
</blockquote>

<p>8. The same, but without sorting, just 82 chars:
</p><blockquote>
<pre>
&lt;?=’&lt;form&gt;&lt;input name=a&gt;’;fputs(fopen(a,a),$_GET&#91;a&#93;.’&lt;hr&gt;’)?&gt;&lt;?=readfile(a)?&gt;
</pre>
</blockquote>

<p>9. Delicious links in 136 chars of PHP:
</p><blockquote>
<pre>
&lt;?$x=new SimpleXMLElement(file_get_contents(“http://feeds.delicious.com/v2/rss”));foreach($x-&gt;channel-&gt;item as$a)echo$a-&gt;title.’‘;?&gt;
</pre>
</blockquote>

<p>10. Get HTTP Code of URL in 133 chars of PHP:
</p><blockquote>
<pre>
&lt;?$a=(@stream_get_meta_data(fopen($_GET&#91;a&#93;,80)));preg_match(’# (\d+) #’,@implode($a&#91;wrapper_data&#93;),$b)?&gt;&lt;?=($b)?‘Code: ‘.$b&#91;1&#93;:’:(’?&gt;
</pre>
</blockquote>

<p>11. Resize JPG by half in 186 chars of PHP:
</p><blockquote>
<pre>
&lt;?header(‘Content-type:’);list($w,$h)=getimagesize($_GET&#91;a&#93;);$b=imagecreatetruecolor($w/2,$h/2);imagecopyresized($b,imagecreatefromjpeg($_GET&#91;a&#93;),0,0,0,0,$w/2,$h/2,$w,$h);imagejpeg($b)?&gt;
</pre>
</blockquote>

<p>12. <a href="http://www.shouldidoit.com/">ShouldIdoIt.com</a> copy in 139 chars of PHP:
</p><blockquote>
<pre>
&lt;?=’&lt;form&gt;&lt;input name=a&gt;’;$b=’&lt;hr&gt;’.$_GET&#91;a&#93;.’ - ‘;if(strstr($b,’?’))fputs(fopen(a,a),rand(0,1)?$b.‘yes’:$b.‘no’);echo@implode( ,file(a))?&gt;
</pre>
</blockquote>

<p><a href="http://www.flat3d.co.nr/" title="Ormo"></p><h2>Ormo</h2><p></a></p>

<p>13. A clone of <a href="http://downforeveryoneorjustme.com" title="downforeveryoneorjustme.com">downforeveryoneorjustme.com</a> in 135 chars of PHP:
</p><blockquote>
<pre>
&lt;?=’&lt;form&gt;&lt;input name=s&gt;&lt;input type=submit&gt;&lt;/form&gt;’;$a=$_GET&#91;s&#93;;echo(@file((stripos($a,”:”))?$a:“http://”.$a))?‘just you’:‘its down’;?&gt;
</pre>
</blockquote><p>
Example: <a href="http://loughanmore.f2s.com/down.php">http://loughanmore.f2s.com/down.php</a></p>

<p><a href="http://www.talvi.com/" title="Mirko Grönroos"></p><h2>Mirko Grönroos</h2><p></a></p>

<p>14. Micro-Twitter in 140 chars of Ruby (including own webserver!):
</p><blockquote>
<pre>
%w&#91;rubygems sinatra&#93;.each&#123;|w|require w&#125;;get'/'do;m=params&#91;:m&#93;;open("f","a")&#123;|f|f&lt;&lt;m+"\n"&#125;if m;haml'%form &lt;input name="m"/&gt;
%pre&amp;=`cat f`'end
</pre>
</blockquote><p>
Code: <a href="http://pastebin.com/m430d6705">http://pastebin.com/m430d6705</a></p>

<p><a href="http://juju.org/" title="Tony Buser"></p><h2>Tony Buser</h2><p></a></p>

<p>15. Micro-Twitter in 136 chars of Ruby (including own webserver!):
</p><blockquote>
<pre>
require'rubygems';require'sinatra';get("/")&#123;r="&lt;form&gt;&lt;input name='t'&gt;&lt;/form&gt;";t=params&#91;:t&#93;;`echo '&lt;hr&gt;#&#123;t&#125;' &gt;&gt; t` if t;r&lt;&lt;`tail -r t`;r&#125;
</pre>
</blockquote><p>
Code: <a href="http://pastie.org/388329">http://pastie.org/388329</a></p>

<p><a href="http://blog.postmaster.gr/" title="adamo"></p><h2>adamo</h2><p></a></p>

<p>16. Random Quotes in 81 chars of language I can&#8217;t recognize ;&#93; :
</p><blockquote>
<pre>
echo 80 stream tcp nowait nobody /usr/games/fortune fortune -a &gt;&gt; /etc/inetd.conf
</pre>
</blockquote><p>
Example: <a href="http://inbox2.eu:8081/">http://inbox2.eu:8081/</a><br />
Blog post: <a href="http://blog.postmaster.gr/2009/02/13/does-this-count-as-a-web-application/">http://blog.postmaster.gr/2009/02/13/does-this-count-as-a-web-application/</a></p>

<p><a href="http://synodinos.net/" title="synodinos"></p><h2>synodinos</h2><p></a></p>

<p>17. Odd or Not game in 140 chars of JS:
</p><blockquote>
<pre>
function
x()&#123;if(confirm("odd?")&amp;&amp;((Math.floor(Math.random()*10))%2))alert(":)");else
alert(":(");if(confirm("rpt?"))x()&#125;x()
</pre>
</blockquote><p>
Example: <a href="javascript:{x(){0;if(confirm('odd?')&amp;&amp;((Math.floor(Math.random()*10))%2))alert(':)');else alert(':(');if(confirm('rpt?'))x()}x()}">launch JS</a></p>

<p>18. 1 or 0 game in 130 chars of JS:
</p><blockquote>
<pre>
function x()&#123;if(confirm(”1?”)&amp;&amp;(Math.round(Math.random())))alert(”:)”);else alert(”:(”);if(confirm(”rpt?”))x()&#125;x()
</pre>
</blockquote><p>
Example: <a href="javascript:{function x()&#123;if(confirm(”1?”)&amp;&amp;(Math.round(Math.random())))alert(”:)”);else alert(”:(”);if(confirm(”rpt?”))x()&#125;x()}">launch JS</a><br />
Blog post: <a href="http://synodinos.net/2009/02/14/re-the-140-character-webapp-challenge/">http://synodinos.net/2009/02/14/re-the-140-character-webapp-challenge/</a></p>

<p><a href="http://www.bastianalbers.com/" title="Bastian Albers"></p><h2>Bastian Albers</h2><p></a></p>

<p>19. Micro-Twitter in 136 chars of PHP:
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=a&gt;&lt;input type=submit&gt;&lt;/form&gt;&lt;?if(strlen($_GET&#91;a&#93;)&lt;140)&#123;$h=fopen(a,“a”);fwrite($h,$_GET&#91;a&#93;.”&lt;hr&gt;”);&#125;echo@readfile(a)?&gt;
</pre>
</blockquote>

<p>20. More featured Micro-Twitter in 141 chars of PHP:
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=a&gt;&lt;input type=submit&gt;&lt;?$l=strlen($_GET&#91;a&#93;);if($l&lt;140&amp;&amp;$l&gt;0)&#123;$h=fopen(a,“a”);fwrite($h,$_GET&#91;a&#93;.”&lt;hr&gt;”);&#125;echo@readfile(a)?&gt;
</pre>
</blockquote>

<p><a href="http://blog.cherouvim.com/" title="cherouvim"></p><h2>cherouvim</h2><p></a></p>

<p>21. Epilepsy Causer in 114 chars of JS:
</p><blockquote>
<pre>
&#123;r=0;setInterval(function()&#123;document.body.style.background=(r++%2==0?'#'+r%7+r%9+r%8:'0')&#125;,50);void(0)&#125;
</pre>
</blockquote><p>
Example: <a href="javascript:{r=0;setInterval(function(){document.body.style.background=(r++%2==0?'#'+r%7+r%9+r%8:'0')},50);void(0)}">launch JS</a><br />
Blog post: <a href="http://blog.cherouvim.com/re-the-140-character-webapp-challenge/">http://blog.cherouvim.com/re-the-140-character-webapp-challenge/</a></p>

<p><a href="http://facyla.net/" title="Facyla"></p><h2>Facyla</h2><p></a></p>

<p>22. Many-Features Micro-Twitter in 140 chars of PHP:
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=n&gt;&lt;?$m=implode('',file(n));$n=htmlentities($_GET&#91;n&#93;);if($n&lt;&gt;'')file_put_contents(n,"&lt;hr&gt;".date(YmdHi).": $n$m");include n;
</pre>
</blockquote><p>
Example: <a href="http://facyla.net/proto/twitter/@README.php">http://facyla.net/proto/twitter/@README.php</a></p>

<p><a href="http://www.symfony-project.org/" title="fabien"></p><h2>fabien</h2><p></a></p>

<p>23. A PHP web framework in 131 chars of PHP:
</p><blockquote>
<pre>
require __DIR__.’/c.php’;
if (!is_callable($c = @$_GET&#91;‘c’&#93; ?: function() &#123; echo ‘Woah!’; &#125;))
  throw new Exception(‘Error’);
$c();
</pre>
</blockquote><p>
Homepage: <a href="http://www.twitto.org/">http://www.twitto.org/</a></p>

<p><a href="http://simplic.it/" title="Hartog"></p><h2>Hartog</h2><p></a></p>

<p>24. Copy of downforeveryoneorjustme.com in 135 chars of Perl:
</p><blockquote>
<pre>
use CGI’:all’;print header.’&lt;form&gt;down4u?:’.br.textarea(‘a’).br.submit;if($a=param(‘a’))&#123;`ping -c1 $a.`;print h2($? ? “down”:“just4u”)&#125;
</pre>
</blockquote>

<p>25. Copy of Twitto.org web framework in 111 chars of Perl:
</p><blockquote>
<pre>
use CGI’:all’;($a,$b)=path_info=~/.(&#91;^\/&#93;+).(.*)/;eval"use $a”;print header.(!$@&amp;&amp;$a-&gt;can($b)?$a-&gt;$b():“no go”)
</pre>
</blockquote>

<p>26. Link to banner in 130 chars of Perl:
</p><blockquote>
<pre>
use CGI’:all’;print header.’&lt;form&gt;message:’.textfield(‘m’).submit;if($a=param(‘m’))&#123;print’‘.`/usr/games/banner $a`.’&lt;/pre&gt;’&#125;
</pre>
</blockquote>

<p><a href="http://www.dorianmuthig.com/" title="Dorian Muthig "></p><h2>Dorian Muthig</h2><p></a></p>

<p>27. Guessing game of numbers between 0-20 in 140 chars of JS:
</p><blockquote>
<pre>
r=Math.round(Math.random()*20);for(c=1;c&lt;=10;c++)&#123;g=prompt(‘Guess’,’‘);if(g==r)&#123;alert(‘Won’);break;&#125;if(!g)&#123;break;&#125;if(c==10)&#123;alert(‘Lost’);&#125;&#125;
</pre>
</blockquote><p>
Example: <a href="javascript:{r=Math.round(Math.random()*20);for(c=1;c%3C=10;c++){g=prompt(‘Guess’,’‘);if(g==r){alert(‘Won’);break;}if(!g){break;}if(c==10){alert(‘Lost’);}}}">launch JS</a></p>

<p><a href="http://neziric.org/" title="haris"></p><h2>haris</h2><p></a></p>

<p>28. RSS/RDF parser with formatted output in 135 chars of PHP:
</p><blockquote>
<pre>
&lt;?php foreach(file($_GET&#91;p&#93;)as$l)if(preg_match(’/&lt;(title|link)&gt;(&#91;^&lt;&#93;+)/’,$l,$m))echo$m&#91;1&#93;==‘link’?” &lt;a &gt;link&lt;/a&gt;&lt;hr&gt;”:$m&#91;2&#93;?&gt;
</pre>
</blockquote><p>
Example: <a href="http://test.neziric.org/140/feed-parser.php?u=http://feeds.delicious.com/v2/rss/?count=15">http://test.neziric.org/140/feed-parser.php?u=http://feeds.delicious.com/v2/rss/?count=15</a></p>

<p><a href="http://transfixedbutnotdead.com/" title="draegtun"></p><h2>draegtun</h2><p></a></p>

<p>29. Micro-twitter using Continuity in 140 chars of Perl:
</p><blockquote>
<pre>
use Continuity;Continuity-&gt;new-&gt;loop;sub main&#123;($r)=@_;while()&#123;$r-&gt;print('&lt;form&gt;&lt;input name=m&gt;');$r-&gt;next;$x+=$r-&gt;param('m');$r-&gt;print($x)&#125;&#125;
</pre>
</blockquote><p>
Blog post: <a href="http://draegtun.wordpress.com/2009/02/23/the-140-character-webapp/">http://draegtun.wordpress.com/2009/02/23/the-140-character-webapp/</a></p>

<p>30. Word counter using Continuity in 139 chars of Perl:
</p><blockquote>
<pre>
use Continuity;Continuity-&gt;new-&gt;loop;sub main&#123;while()&#123;$m=$_&#91;0&#93;-&gt;print(”$m=$l&lt;form&gt;&lt;input name=m&gt;”)-&gt;next-&gt;param(‘m’);$l=()=$m=~/\w+/g&#125;&#125;
</pre>
</blockquote>

<p><a href="http://www.doc.ic.ac.uk/~seo01/wiki/miscellaneous" title="Simon Overell"></p><h2>Simon Overell</h2><p></a></p>

<p>31. Social linking - redirects to URL left by the previous person - in 140 chars of PHP:
</p><blockquote>
<pre>
&lt;?php if($_GET&#91;‘a’&#93;)&#123;$x=file(a);header(“Location:$x&#91;0&#93;”);fwrite(fopen(a,‘w’),$_GET&#91;‘a’&#93;);&#125;?&gt;&lt;form&gt;&lt;input name=a&gt;&lt;input type=“submit”&gt;&lt;/form&gt; 
</pre>
</blockquote><p>
Example: <a href="http://www.numenore.co.uk/140char/simon.php">http://www.numenore.co.uk/140char/simon.php</a><br />
Homepage: <a href="http://www.doc.ic.ac.uk/~seo01/wiki/miscellaneous">http://www.doc.ic.ac.uk/~seo01/wiki/miscellaneous</a></p>

<p><a href="http://thelackthereof.org/" title="awwaiid"></p><h2>awwaiid</h2><p></a></p>

<p>32. Self-contained webserver using Continuity in 140 chars of Perl:
</p><blockquote>
<pre>
use Continuity;Continuity-&gt;new-&gt;loop;sub main&#123;while()&#123;$m=$_&#91;0&#93;-&gt;print(”$m&lt;form&gt;&lt;input name=m&gt;”)-&gt;next-&gt;param(‘m’);$m=~y/a-z/n-za-m/&#125;&#125;#rot13!
</pre>
</blockquote><p>
Twitter: <a href="http://twitter.com/awwaiid/status/1245021575">http://twitter.com/awwaiid/status/1245021575</a></p>

<p><a href="http://michaelcotterell.com/" title="Michael Cotterell"></p><h2>Michael Cotterell</h2><p></a></p>

<p>33. Album Art Finder in 192 chars of PHP:
</p><blockquote>
<pre>
&lt;form&gt;Artist&lt;input name=artist&gt;Album&lt;input name=album&gt;&lt;input type=submit&gt;&lt;p&gt;&lt;?if($q=$_SERVER&#91;QUERY_STRING&#93;)echo'&lt;img src='.end(simplexml_load_file(current(file(a)).'&amp;'.$q)-&gt;album-&gt;image).'&gt;';
</pre>
</blockquote><p>
Example: <a href="http://phattangent.com/140.php">http://phattangent.com/140.php</a><br />
Code: <a href="http://pastebin.com/f2efc6065">http://pastebin.com/f2efc6065</a></p>

<p><a href="http://zorg.com.ru/" title="Sergry Agarkov"></p><h2>Sergry Agarkov</h2><p></a></p>

<p>34. Micro-Twitter in 241 chars of PHP:
</p><blockquote>
<pre>
&lt;form method="post"&gt;&lt;input type="text" name="A" value="Msg" size="140"&gt;&lt;input type="submit" name="submit"&gt;&lt;/form&gt;&lt;?php $f=file("1");$m=$_POST&#91;"A"&#93;;if($m&lt;&gt;"")&#123;file_put_contents("1",$m.'&lt;br&gt;',FILE_APPEND);&#125;for ($i=0;$i&lt;11;$i++)&#123;echo $f&#91;$i&#93;;&#125;?&gt;
</pre>
</blockquote><p>
Code: <a href="http://dumpz.org/5512/">http://dumpz.org/5512/</a></p>

<p><a href="http://blog.jamesseverance.com/" title="Jim"></p><h2>Jim</h2><p></a></p>

<p>35. Micro-Twitter in 308 chars of Ruby:
</p><blockquote>
<pre>
require’camping’;Camping.goes:T;module T::Models;class T&lt;Base;end;end;module T::Controllers;class I&lt;R:/;def get;@s=T.all;render:i;end;def post;T.create:d=&gt;input.d;redirect’/’;end;end;end;module T::Views;def i;form(:method=&gt;:post)&#123;;input:type=&gt;:submit;input:name=&gt;‘d’,:type=&gt;:text;&#125;;@s.each&#123;|t|hr t.d&#125;;end;end
</pre>
</blockquote>

<p><a href="http://f055.net/" title="Marek Foss"></p><h2>Marek Foss</h2><p></a></p>

<p>36. Micro-Twitter that started it all in 140 chars of Perl:
</p><blockquote>
<pre>
use CGI':all';print header.'&lt;form&gt;'.submit.textfield 0,'',99;open F,'&lt;0';print $f=(param 0)=~/1234 (.*)/?hr.$1.&lt;F&gt;:&lt;F&gt;;open F,'&gt;0';print F$f
</pre>
</blockquote><p>
Example: <a href="http://f055.net/140/challenge.pl">http://f055.net/140/challenge.pl</a><br />
Code: <a href="http://www.f055.net/images/uploads/140charswebapp.zip">http://www.f055.net/images/uploads/140charswebapp.zip</a><br />
Blog post: <a href="http://f055.net/article/the-140-character-webapp-challenge/">http://f055.net/article/the-140-character-webapp-challenge/</a></p>

<h2>Final words</h2>

<p>I am very happy it all turned out so well. I will be thinking of a next challenge for you soon, if it again magically pops into my mind, or I&#8217;ll get inspired as I did in this challenge. Or maybe you have a really exciting idea? Share your thoughts in the comments! You may also want to <a href="http://twitter.com/f055" title="follow me on Twitter">follow me on Twitter</a> and message me directly with your suggestions :)</p>

<p>It was fun, guys! You should be all proud. Because, as I said before, it&#8217;s easy to write a lot of code. The challenge is to write short, but packed with features. That&#8217;s what it was all about. And you all proved it can be done, with awesome results! Thanks!
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/05B3_A0ZFmTcg25toRPE6TqOjso/0/da"><img src="http://feedads.g.doubleclick.net/~a/05B3_A0ZFmTcg25toRPE6TqOjso/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/05B3_A0ZFmTcg25toRPE6TqOjso/1/da"><img src="http://feedads.g.doubleclick.net/~a/05B3_A0ZFmTcg25toRPE6TqOjso/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/f055?a=6b7Mxwd5j98:2kbhQfkG21w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/f055?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=6b7Mxwd5j98:2kbhQfkG21w:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/f055?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=6b7Mxwd5j98:2kbhQfkG21w:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/f055?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=6b7Mxwd5j98:2kbhQfkG21w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/f055?i=6b7Mxwd5j98:2kbhQfkG21w:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/f055?a=6b7Mxwd5j98:2kbhQfkG21w:3QFJfmc7Om4"><img src="http://feeds.feedburner.com/~ff/f055?i=6b7Mxwd5j98:2kbhQfkG21w:3QFJfmc7Om4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/6b7Mxwd5j98" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, Twitter</dc:subject>
      <dc:date>2009-02-28T00:49:46+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/final-wrap-up-of-the-140-characters-webapp-challenge/</feedburner:origLink></item>

    <item>
      <title>7 days of The 140 Characters Webapp Challenge - wrapped up!</title>
      <link>http://feedproxy.google.com/~r/f055/~3/GODE08ogh9Q/</link>
      <guid isPermaLink="false">http://f055.net/article/7-days-of-the-140-characters-webapp-challenge-wrapped-up/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/7-days-of-the-140-characters-webapp-challenge-wrapped-up/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/7-days-of-the-140-characters-webapp-challenge-wrapped-up/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/webappmid.png" alt="7 days of The 140 Characters Webapp Challenge" /></p>

<p>You may have hard of <a href="http://f055.net/article/the-140-character-webapp-challenge/" title="The 140 Characters Webapp Challenge">The 140 Characters Webapp Challenge</a>. It made quite a buzz and I&#8217;m happy to report that the response was a pleasant surprise to me. Here&#8217;s a report from the middle of The Challenge &#8212; there&#8217;s <b>still a week left!</b></p>

<p>Some statistics: <b>19 coders</b> (including me), who have produced <b>28 webapps</b> in PHP, Perl, Ruby and JS &#8212; all but 4 are <b>less than 140 characters</b> of code! Impressive work so far, everybody! Thanks! I managed to wrap up all your work into one list.
</p><br /><p>Here are these awesome coders and their apps, almost in the order of appearance ;] If you wish to change something in your description, <a href="http://twitter.com/f055" title="Follow me on Twitter">tweet me</a>! To see how these were born, follow <a href="http://f055.net/article/the-140-character-webapp-challenge/#comments" title="Comments on The 140 Characters Webapp Challenge">the comments on The Challenge</a>.</p>

<h2>Coders and the webapps</h2><p>
Note: <b><u>the bold underlined ones are my favorite</u></b>.</p>

<p><a href="http://isaacvanname.com/" title="Isaac Van Name"></p><h2>Isaac Van Name</h2><p></a></p>

<p>Micro-Twitter in 154 chars of PHP (props for being the first!):
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=“a”&gt;&lt;input type=“submit” value=“send”/&gt;&lt;/form&gt;&lt;?php if($_GET[‘a’])&#123;$q=fopen(‘micro.php’,‘a’);fwrite($q,$_GET[‘a’].’&lt;hr&gt;’);fclose($q);&#125;?&gt;
</pre>
</blockquote>

<p><a href="http://iambari.com/phpdoc" title="Bari"></p><h2>Bari</h2><p></a></p>

<p>Micro-Twitter in 139 chars of PHP (modification of Issac’s code):
</p><blockquote>
<pre>
&lt;form&gt;&lt;input type=“submit”&gt;&lt;input name=“a”&gt;&lt;/form&gt;&lt;?php $a=$_GET[a];if($a)&#123;$q=fopen(‘m.php’,‘a’);fwrite($q,”&lt;hr&gt;$a”);fclose($q);echo $a;&#125;?&gt;
</pre>
</blockquote>

<p><a href="http://www.commentluv.com/" title="Andy Bailey"></p><h2>Andy Bailey</h2><p></a></p>

<p>Age Guessing in 140 chars of JS:
</p><blockquote>
<pre>
var c=0;var i=35;do&#123;var x=confirm(‘are you ‘+i+’?\n(ok=Y)’);i=Math.floor(Math.random()*70);c++;&#125;while(!x);alert(‘I only took ‘+c+’ tries!’);
</pre>
</blockquote>

<p><b><u>Micro-Twitter in 99 chars of JS:</u></b>
</p><blockquote>
<pre>
(”&lt;input value=..&gt;&lt;p&gt;[go]”);$(‘p’).click(function()&#123;$(‘body’).append($(‘input’).val() + ‘&lt;hr&gt;’);&#125;);
</pre>
</blockquote><p>
Example: <a href="http://www.fiddyp.co.uk/internal/140charchallenge/">http://www.fiddyp.co.uk/internal/140charchallenge/</a></p>

<p><a href="http://james.padolsey.com/" title="James"></p><h2>James</h2><p></a></p>

<p>Micro-Twitter in 134 chars of PHP:
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=“s”&gt;&lt;input type=“submit”&gt;&lt;?$s=$_GET[s];$f=file(‘a’);$a=!empty($s)?”&lt;hr&gt;$s$f[0]”:’‘;fwrite(fopen(‘a’,‘w’),$a);echo$a;
</pre>
</blockquote>

<p>Time of life counter in 146 chars of JS:
</p><blockquote>
<pre>
d=prompt(‘DOB?’,‘DD-MM-YYYY’).split(/[^\d]/);d=(new Date()-new Date(d[2],d[1],d[0]))/1000;alert(d+’ seconds\n’+d/60+’ minutes\n’+d/60/60+’ hours’)
</pre>
</blockquote>

<p><a href="http://www.keenora.de/" title="Keenora"></p><h2>Keenora</h2><p></a></p>

<p>Micro-Twitter in 129 chars of PHP:
</p><blockquote>
<pre>
&lt;?=’&lt;form&gt;&lt;input name=a&gt;&lt;input type=submit&gt;&lt;/form&gt;’;fputs(fopen(a,a),$_GET[a].”\n&lt;hr&gt;”);$a=file(a);krsort($a)?&gt;&lt;?=implode( ,$a)?&gt;
</pre>
</blockquote>

<p>The same, but without sorting, just 82 chars:
</p><blockquote>
<pre>
&lt;?=’&lt;form&gt;&lt;input name=a&gt;’;fputs(fopen(a,a),$_GET[a].’&lt;hr&gt;’)?&gt;&lt;?=readfile(a)?&gt;
</pre>
</blockquote>

<p><b><u>Delicious links in 136 chars of PHP:</u></b>
</p><blockquote>
<pre>
&lt;?$x=new SimpleXMLElement(file_get_contents(“http://feeds.delicious.com/v2/rss”));foreach($x-&gt;channel-&gt;item as$a)echo$a-&gt;title.’‘;?&gt;
</pre>
</blockquote>

<p>Get HTTP Code of URL in 133 chars of PHP:
</p><blockquote>
<pre>
&lt;?$a=(@stream_get_meta_data(fopen($_GET[a],80)));preg_match(’# (\d+) #’,@implode($a[wrapper_data]),$b)?&gt;&lt;?=($b)?‘Code: ‘.$b[1]:’:(’?&gt;
</pre>
</blockquote>

<p><b><u>Resize JPG by half in 186 chars of PHP:</u></b>
</p><blockquote>
<pre>
&lt;?header(‘Content-type:’);list($w,$h)=getimagesize($_GET[a]);$b=imagecreatetruecolor($w/2,$h/2);imagecopyresized($b,imagecreatefromjpeg($_GET[a]),0,0,0,0,$w/2,$h/2,$w,$h);imagejpeg($b)?&gt;
</pre>
</blockquote>

<p><a href="http://www.flat3d.co.nr/" title="Ormo"></p><h2>Ormo</h2><p></a></p>

<p><b><u>A clone of <a href="http://downforeveryoneorjustme.com" title="downforeveryoneorjustme.com">downforeveryoneorjustme.com</a> in 135 chars of PHP:</u></b>
</p><blockquote>
<pre>
&lt;?=’&lt;form&gt;&lt;input name=s&gt;&lt;input type=submit&gt;&lt;/form&gt;’;$a=$_GET[s];echo(@file((stripos($a,”:”))?$a:“http://”.$a))?‘just you’:‘its down’;?&gt;
</pre>
</blockquote><p>
Example: <a href="http://loughanmore.f2s.com/down.php">http://loughanmore.f2s.com/down.php</a></p>

<p><a href="http://www.talvi.com/" title="Mirko Grönroos"></p><h2>Mirko Grönroos</h2><p></a></p>

<p>Micro-Twitter in 140 chars of Ruby (including own webserver!):
</p><blockquote>
<pre>
%w[rubygems sinatra].each&#123;|w|require w&#125;;get'/'do;m=params[:m];open("f","a")&#123;|f|f&lt;&lt;m+"\n"&#125;if m;haml'%form &lt;input name="m"/&gt;
%pre&amp;=`cat f`'end
</pre>
</blockquote><p>
Code: <a href="http://pastebin.com/m430d6705">http://pastebin.com/m430d6705</a></p>

<p><a href="http://juju.org/" title="Tony Buser"></p><h2>Tony Buser</h2><p></a></p>

<p><b><u>Micro-Twitter in 136 chars of Ruby (including own webserver!):</u></b>
</p><blockquote>
<pre>
require'rubygems';require'sinatra';get("/")&#123;r="&lt;form&gt;&lt;input name='t'&gt;&lt;/form&gt;";t=params[:t];`echo '&lt;hr&gt;#&#123;t&#125;' &gt;&gt; t` if t;r&lt;&lt;`tail -r t`;r&#125;
</pre>
</blockquote><p>
Code: <a href="http://pastie.org/388329">http://pastie.org/388329</a></p>

<p><a href="http://blog.postmaster.gr/" title="adamo"></p><h2>adamo</h2><p></a></p>

<p>Random Quotes in 81 chars of language I can&#8217;t recognize ;] :
</p><blockquote>
<pre>
echo 80 stream tcp nowait nobody /usr/games/fortune fortune -a &gt;&gt; /etc/inetd.conf
</pre>
</blockquote><p>
Example: <a href="http://inbox2.eu:8081/">http://inbox2.eu:8081/</a><br />
Blog post: <a href="http://blog.postmaster.gr/2009/02/13/does-this-count-as-a-web-application/">http://blog.postmaster.gr/2009/02/13/does-this-count-as-a-web-application/</a></p>

<p><a href="http://synodinos.net/" title="synodinos"></p><h2>synodinos</h2><p></a></p>

<p>Odd or Not game in 140 chars of JS:
</p><blockquote>
<pre>
function
x()&#123;if(confirm("odd?")&amp;&amp;((Math.floor(Math.random()*10))%2))alert(":)");else
alert(":(");if(confirm("rpt?"))x()&#125;x()
</pre>
</blockquote>

<p>1 or 0 game in 130 chars of JS:
</p><blockquote>
<pre>
function x()&#123;if(confirm(”1?”)&amp;&amp;(Math.round(Math.random())))alert(”:)”);else alert(”:(”);if(confirm(”rpt?”))x()&#125;x()
</pre>
</blockquote><p>
Blog post: <a href="http://synodinos.net/2009/02/14/re-the-140-character-webapp-challenge/">http://synodinos.net/2009/02/14/re-the-140-character-webapp-challenge/</a></p>

<p><a href="http://www.bastianalbers.com/" title="Bastian Albers"></p><h2>Bastian Albers</h2><p></a></p>

<p>Micro-Twitter in 136 chars of PHP:
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=a&gt;&lt;input type=submit&gt;&lt;/form&gt;&lt;?if(strlen($_GET[a])&lt;140)&#123;$h=fopen(a,“a”);fwrite($h,$_GET[a].”&lt;hr&gt;”);&#125;echo@readfile(a)?&gt;
</pre>
</blockquote>

<p>More featured Micro-Twitter in 141 chars of PHP:
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=a&gt;&lt;input type=submit&gt;&lt;?$l=strlen($_GET[a]);if($l&lt;140&amp;&amp;$l&gt;0)&#123;$h=fopen(a,“a”);fwrite($h,$_GET[a].”&lt;hr&gt;”);&#125;echo@readfile(a)?&gt;
</pre>
</blockquote>

<p><a href="http://blog.cherouvim.com/" title="cherouvim"></p><h2>cherouvim</h2><p></a></p>

<p>Epilepsy Causer in 114 chars of JS:
</p><blockquote>
<pre>
javascript:&#123;r=0;setInterval(function()&#123;document.body.style.background=(r++%2==0?'#'+r%7+r%9+r%8:'0')&#125;,50);void(0)&#125;
</pre>
</blockquote><p>
Blog post: <a href="http://blog.cherouvim.com/re-the-140-character-webapp-challenge/">http://blog.cherouvim.com/re-the-140-character-webapp-challenge/</a></p>

<p><a href="http://facyla.net/" title="Facyla"></p><h2>Facyla</h2><p></a></p>

<p><b><u>Many-Features Micro-Twitter in 140 chars of PHP:</u></b>
</p><blockquote>
<pre>
&lt;form&gt;&lt;input name=n&gt;&lt;?$m=implode('',file(n));$n=htmlentities($_GET[n]);if($n&lt;&gt;'')file_put_contents(n,"&lt;hr&gt;".date(YmdHi).": $n$m");include n;
</pre>
</blockquote><p>
Example: <a href="http://facyla.net/proto/twitter/@README.php">http://facyla.net/proto/twitter/@README.php</a></p>

<p><a href="http://www.symfony-project.org/" title="fabien"></p><h2>fabien</h2><p></a></p>

<p><b><u>A PHP web framework in 131 chars of PHP:</u></b>
</p><blockquote>
<pre>
require __DIR__.’/c.php’;
if (!is_callable($c = @$_GET[‘c’] ?: function() &#123; echo ‘Woah!’; &#125;))
  throw new Exception(‘Error’);
$c();
</pre>
</blockquote><p>
Homepage: <a href="http://www.twitto.org/">http://www.twitto.org/</a></p>

<p><a href="http://simplic.it/" title="Hartog"></p><h2>Hartog</h2><p></a></p>

<p>Copy of downforeveryoneorjustme.com in 135 chars of Perl:
</p><blockquote>
<pre>
use CGI’:all’;print header.’&lt;form&gt;down4u?:’.br.textarea(‘a’).br.submit;if($a=param(‘a’))&#123;`ping -c1 $a.`;print h2($? ? “down”:“just4u”)&#125;
</pre>
</blockquote>

<p><b><u>Copy of Twitto.org web framework in 111 chars of Perl:</u></b>
</p><blockquote>
<pre>
use CGI’:all’;($a,$b)=path_info=~/.([^\/]+).(.*)/;eval"use $a”;print header.(!$@&amp;&amp;$a-&gt;can($b)?$a-&gt;$b():“no go”)
</pre>
</blockquote>

<p><a href="http://michaelcotterell.com/" title="Michael Cotterell"></p><h2>Michael Cotterell</h2><p></a></p>

<p><b><u>Album Art Finder in 192 chars of PHP:</u></b>
</p><blockquote>
<pre>
&lt;form&gt;Artist&lt;input name=artist&gt;Album&lt;input name=album&gt;&lt;input type=submit&gt;&lt;p&gt;&lt;?if($q=$_SERVER[QUERY_STRING])echo'&lt;img src='.end(simplexml_load_file(current(file(a)).'&amp;'.$q)-&gt;album-&gt;image).'&gt;';
</pre>
</blockquote><p>
Example: <a href="http://phattangent.com/140.php">http://phattangent.com/140.php</a><br />
Code: <a href="http://pastebin.com/f2efc6065">http://pastebin.com/f2efc6065</a></p>

<p><a href="http://zorg.com.ru/" title="Sergry Agarkov"></p><h2>Sergry Agarkov</h2><p></a></p>

<p>Micro-Twitter in 241 chars of PHP:
</p><blockquote>
<pre>
&lt;form method="post"&gt;&lt;input type="text" name="A" value="Msg" size="140"&gt;&lt;input type="submit" name="submit"&gt;&lt;/form&gt;&lt;?php $f=file("1");$m=$_POST["A"];if($m&lt;&gt;"")&#123;file_put_contents("1",$m.'&lt;br&gt;',FILE_APPEND);&#125;for ($i=0;$i&lt;11;$i++)&#123;echo $f[$i];&#125;?&gt;
</pre>
</blockquote><p>
Code: <a href="http://dumpz.org/5512/">http://dumpz.org/5512/</a></p>

<p><a href="http://blog.jamesseverance.com/" title="Jim"></p><h2>Jim</h2><p></a></p>

<p>Micro-Twitter in 308 chars of Ruby:
</p><blockquote>
<pre>
require’camping’;Camping.goes:T;module T::Models;class T&lt;Base;end;end;module T::Controllers;class I&lt;R:/;def get;@s=T.all;render:i;end;def post;T.create:d=&gt;input.d;redirect’/’;end;end;end;module T::Views;def i;form(:method=&gt;:post)&#123;;input:type=&gt;:submit;input:name=&gt;‘d’,:type=&gt;:text;&#125;;@s.each&#123;|t|hr t.d&#125;;end;end
</pre>
</blockquote>

<p><a href="http://f055.net/" title="Marek Foss"></p><h2>Marek Foss</h2><p></a></p>

<p><b><u>Micro-Twitter that started it all in 140 chars of Perl:</u></b>
</p><blockquote>
<pre>
use CGI':all';print header.'&lt;form&gt;'.submit.textfield 0,'',99;open F,'&lt;0';print $f=(param 0)=~/1234 (.*)/?hr.$1.&lt;F&gt;:&lt;F&gt;;open F,'&gt;0';print F$f
</pre>
</blockquote><p>
Example: <a href="http://f055.net/140/challenge.pl">http://f055.net/140/challenge.pl</a><br />
Code: <a href="http://www.f055.net/images/uploads/140charswebapp.zip">http://www.f055.net/images/uploads/140charswebapp.zip</a><br />
Blog post: <a href="http://f055.net/article/the-140-character-webapp-challenge/">http://f055.net/article/the-140-character-webapp-challenge/</a></p>

<h2>Thoughts and conclusions</h2>

<p>I am really amazed how much can be squeezed into 140 characters. Writing a lot lines of code not necessarily means you&#8217;re a good coder &#8212; it just means you can code. Writing little code that can do lot is another thing. This is what shows the true skills. If you think you&#8217;re up to it, there&#8217;s still 7 days left to show off. Thanks to all the awesome coders that already took The Challenge! I&#8217;m impressed. </p>

<p>And if something more comes to your mind, don&#8217;t hesitate to post your code, either here in the comments, or in the original <a href="http://f055.net/article/the-140-character-webapp-challenge/" title="The 140 Characters Webapp Challenge">The 140 Characters Webapp Challenge</a> post. Bring it on! And <a href="http://twitter.com/f055" title="Follow me on Twitter">follow me on Twitter</a> to get all the updates instantly!
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/6u4fULFCE7GCqDB_NDPNi6GcmWk/0/da"><img src="http://feedads.g.doubleclick.net/~a/6u4fULFCE7GCqDB_NDPNi6GcmWk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6u4fULFCE7GCqDB_NDPNi6GcmWk/1/da"><img src="http://feedads.g.doubleclick.net/~a/6u4fULFCE7GCqDB_NDPNi6GcmWk/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=KvaqcTVr"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=W8JZkOdh"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=L4Y2Mhll"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=6o0bETAn"><img src="http://feeds.feedburner.com/~f/f055?i=6o0bETAn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=Zv4uNNm2"><img src="http://feeds.feedburner.com/~f/f055?i=Zv4uNNm2" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/GODE08ogh9Q" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, Twitter</dc:subject>
      <dc:date>2009-02-19T19:34:45+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/7-days-of-the-140-characters-webapp-challenge-wrapped-up/</feedburner:origLink></item>

    <item>
      <title>The 140 character webapp challenge!</title>
      <link>http://feedproxy.google.com/~r/f055/~3/Q5TNOPy-zo4/</link>
      <guid isPermaLink="false">http://f055.net/article/the-140-character-webapp-challenge/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/the-140-character-webapp-challenge/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/the-140-character-webapp-challenge/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/webapptweet.png" alt="WebApp challenge tweet by Arun Shroff" /></p>

<p>How many interesting webapps can you code in one Twitter message? I have one &#8212; a micro-twitter. I want to see many!</p>

<p>Back at Twitter I read <a href="http://twitter.com/arunshroff/statuses/1188353497" title="222 character Wikis">this message on 222 character Wikis</a>, by <a href="http://twitter.com/arunshroff" title="Arun Shroff">Arun Shroff</a>. I thought &#8212; why not &#8212; and <a href="http://twitter.com/F055/statuses/1188611346" title="The 140 Character Webapp Challenge">replied</a> with a challenge: <b>Make a 140 chars webapp in 2 weeks!</b> Whatever language, library or module included, as long as it&#8217;s standard. I made an example micro-twitter, described later in the post. If you think you can do better &#8212; <b>I dare you</b>. You&#8217;ve got 2 weeks again. <b>Post your webapp here in the comments!</b> (complete code, link or anything such that we can see it at its best)</p>

<p><img src="http://www.f055.net/images/uploads/ico_cone.png" alt="(url)" class="ico" /><a href="http://f055.net/article/final-wrap-up-of-the-140-characters-webapp-challenge/" title="Final Wrap Up Of The 140 Characters Webapp Challenge!">UPDATE! 32 WebApps under 140 Characters &#8212; Finale of The Challenge wrapped up!</a></p>

<p><img src="http://www.f055.net/images/uploads/ico_cone.png" alt="(url)" class="ico" /><a href="http://f055.net/article/7-days-of-the-140-characters-webapp-challenge-wrapped-up/" title="7 Days Of The 140 Characters Webapp Challenge - Wrapped Up!">24 WebApps under 140 Characters &#8212; 7 days of The Challenge wrapped up!</a><br />
<img src="http://www.f055.net/images/uploads/ico_link.png" alt="(url)" class="ico" /><a href="http://f055.net/140/challenge.pl" title="Micro Twitter in 140 Characters of Perl code">Test my example micro-twitter online</a><br />
<img src="http://www.f055.net/images/uploads/ico_zip.png" alt="(zip)" class="ico" /><a href="http://www.f055.net/images/uploads/140charswebapp.zip" title="Micro-Twitter, the 140 chars webapp" onclick="javascript: pageTracker._trackPageview('140charswebapp.zip'); ">Download the micro-twitter source code</a></p>

<br /><p>Now, to my micro-twitter app. It&#8217;s written in Perl, using just the CGI module. The <b>one-line code has 140 characters</b>, although in the source code file you can find a further minimized version with just 123 characters, but less features.</p>

<p>What the micro-twitter basically does, is let you update your status and show it. Don&#8217;t expect any social candy, there&#8217;s no room for that, but it works, and you can <a href="http://f055.net/140/challenge.pl" title="Micro Twitter in 140 Characters of Perl code">test it here</a> &#8212; the PIN is 1234, and this version is a bit more secure, for obvious reasons. To post a message, type the PIN number, a space, and then your message.</p>

<p><img src="http://www.f055.net/images/uploads/microtwitter.png" alt="Micro Twitter screenshot" /></p>

<p>I&#8217;ve worked about 2 hours refining the code. That&#8217;s around <b>51 seconds per character</b>, funny how such a short piece takes so much time. And here it is:</p>

<blockquote>
<pre>
use CGI':all';print header.'&lt;form&gt;'.submit.textfield 0,'',99;open F,'&lt;0';print $f=(param 0)=~/1234 (.*)/?hr.$1.&lt;F&gt;:&lt;F&gt;;open F,'&gt;0';print F$f
</pre>
</blockquote>

<p>The extent to which I bended the common practices of Perl are quite bizarre to me, but on the other hand this code is completely valid in my IDE of choice &#8212; <a href="http://www.activestate.com/komodo_edit/" title="Komodo Edit">Komodo Edit</a>. First of all, I include all the fancy stuff from CGI, but in fact I am using just the <i>:standard</i>, <i>:form</i> and <i>:html</i> extensions. I&#8217;m printing the heading, otherwise the browser will spit an Internal Server Error. Next, I&#8217;m starting the form, no <i>html</i>, <i>head</i> or <i>body</i> rubbish. I&#8217;m printing the submit button and a textfield using the mentioned <i>:form</i> extension.</p>

<p>After that, I handle the possible message. I&#8217;m using a regular expression to analyze it, looking for the PIN. If found, I append the message at the beginning of the file, adding a hrizontal line to make it look readable. At the same time, I push all the file contents to a <i>$f</i> variable. I use it then to overwrite the database file, so the messages don&#8217;t get lost. And that&#8217;s it.</p>

<p>Now, again &#8212; <b>I dare you</b>, make something better, shorter, fancier! <b>The rules are simple:</b> whatever language you choose, whatever module or library you include, as long as it&#8217;s standard, it&#8217;s good. But <b>share your webapp in the comments</b>, even if they bend the rules &#8212; it will be interesting. The challenge is on. So are you skilled enough for this? <b>Bring it on!</b> And <a href="http://twitter.com/f055" title="Follow me on Twitter">follow me</a>.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/2Z1lPCRWAN9p1d5_Apf7eL0sOSc/0/da"><img src="http://feedads.g.doubleclick.net/~a/2Z1lPCRWAN9p1d5_Apf7eL0sOSc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2Z1lPCRWAN9p1d5_Apf7eL0sOSc/1/da"><img src="http://feedads.g.doubleclick.net/~a/2Z1lPCRWAN9p1d5_Apf7eL0sOSc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=IdJ1r3n7"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=LtWqhnw6"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=TX4TIOpt"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=v5UpcMwA"><img src="http://feeds.feedburner.com/~f/f055?i=v5UpcMwA" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=DifbeNZI"><img src="http://feeds.feedburner.com/~f/f055?i=DifbeNZI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/Q5TNOPy-zo4" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, Twitter</dc:subject>
      <dc:date>2009-02-13T01:43:02+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/the-140-character-webapp-challenge/</feedburner:origLink></item>

    <item>
      <title>#Favlogo roundup number 1</title>
      <link>http://feedproxy.google.com/~r/f055/~3/ikGIUSU0zsE/</link>
      <guid isPermaLink="false">http://f055.net/article/favlogo-roundup-number-1/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/favlogo-roundup-number-1/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/favlogo-roundup-number-1/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/favlogo.png" alt="Search #favlogo on Twitter" /></p>

<p>A while ago on <a href="http://twitter.com/" title="Twitter">Twitter</a> I started to post links to exceptional logotypes, day by day. You can monitor my picks by <a href="http://search.twitter.com/search?q=%23favlogo" title="#favlogo Twitter hashtag">searching the #favlogo</a> hashtag or simply by <a href="http://twitter.com/f055" title="Follow me on Twitter">following me</a>. After about two weeks, it&#8217;s time to make a roundup and select my favorite five! Let&#8217;s start.
</p><br /><h2><a href="http://logopond.com/gallery/detail/51141" title="Precision Networking by epsilon">Precision Networking by epsilon</a></h2>

<p><img src="http://www.f055.net/images/uploads/logo-Precision.png" alt="Precision Networking Logo" /></p>

<p>I like this logo because of the clever way of utilizing <i>E</i> letters as the metrics of a ruler. I was always fond of designer who could take characters to another level and turn them into meaningful icons while retain readability. This is precisely achieved here. The whole logo, it&#8217;s sharpness and industrial look emphasizes the precision even more. Kudos.</p>

<h2><a href="http://logofaves.com/2009/02/eight-2/" title="Eight by Stylo Design">Eight by Stylo Design</a></h2>

<p><img src="http://www.f055.net/images/uploads/logo-Eight.png" alt="Eight Logo" /></p>

<p>You can see the pattern now, I like playing with fonts. This one executes a perfect <i>eight</i> using just the digit <i>8</i>. And although the logo may be difficult to read at first, once recognized, will be a really memorable sign.</p>

<h2><a href="http://logofaves.com/2009/01/cardiologic/" title="Cardiologic by Hayes Image">Cardiologic by Hayes Image</a></h2>

<p><img src="http://www.f055.net/images/uploads/logo-Cardiologic.png" alt="Cardiologic Logo" /></p>

<p>Another motif I tend to like is pictographic play on the company name. This one makes it exactly as it should, by combining atom logic with cardio heart &#8212; in a way that is so obvious, yet so invisible until now. Top notch creativity, because <b>spotting the obvious is the hardest thing to do</b>.</p>

<h2><a href="http://logopond.com/gallery/detail/50790" title="Cinema Cafe by Muamer">Cinema Cafe by Muamer</a></h2>

<p><img src="http://www.f055.net/images/uploads/logo-CinemaCafe.png" alt="Cinema Cafe Logo" /></p>

<p>Some logos win not just with the idea, but superb quality. This is one of them. Bending this movie film to have a natural, free look isn&#8217;t an easy task. Giving it a slick, deep feeling with a slight gradient identifies a designer with just the right amount of touch. Not to mention that one look at the logo tells you what it is all about. And in food business, it&#8217;s often what counts most.</p>

<h2><a href="http://logopond.com/gallery/detail/50694" title="LocKey by Logomotive">LocKey by Logomotive</a></h2>

<p><img src="http://www.f055.net/images/uploads/logo-LocKey.png" alt="LocKey Logo" /></p>

<p>This was definitely my favorite of the five. It was an instant <a href="http://search.twitter.com/search?q=%23favlogo" title="#favlogo Twitter hashtag">#favlogo</a>, more, it was a striking <i>How dumb was I not to see that!</i> The roundness of the lock fits like a puzzle with the roundness of the key. And it was there for decades! Too bad it wasn&#8217;t designed for an existing company, but still this logotype is epic. <i>That&#8217;s the key</i>, you would say.</p>

<p>That was the first iteration of Top Five #favlogos. I hope you liked my selection, express your feelings in the comments. I like to hear what other people think of my taste. Look forward to the next roundup in some two weeks, and <a href="http://twitter.com/f055" title="follow me on Twitter">follow me on Twitter</a> to see my daily picks instantly.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/hz-G8Zem41es2O-xmDbq4Ep9IYs/0/da"><img src="http://feedads.g.doubleclick.net/~a/hz-G8Zem41es2O-xmDbq4Ep9IYs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hz-G8Zem41es2O-xmDbq4Ep9IYs/1/da"><img src="http://feedads.g.doubleclick.net/~a/hz-G8Zem41es2O-xmDbq4Ep9IYs/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=BbglQJWQ"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=YULH9HSJ"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=gqPVv4r6"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=ZYJ5hE0R"><img src="http://feeds.feedburner.com/~f/f055?i=ZYJ5hE0R" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=51ktp8jk"><img src="http://feeds.feedburner.com/~f/f055?i=51ktp8jk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/ikGIUSU0zsE" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Design, Logo, Twitter</dc:subject>
      <dc:date>2009-02-11T17:06:16+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/favlogo-roundup-number-1/</feedburner:origLink></item>

    <item>
      <title>A blog must evolve! 6 ways to improve it</title>
      <link>http://feedproxy.google.com/~r/f055/~3/jVRFapYQrLg/</link>
      <guid isPermaLink="false">http://f055.net/article/a-blog-must-evolve-6-ways-to-improve-it/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/a-blog-must-evolve-6-ways-to-improve-it/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/a-blog-must-evolve-6-ways-to-improve-it/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/f055_lcd.png" alt="f055.net makeovers" /></p>

<p>I made some layout changes over the weekend, intended to make this blog more readable for new users. I think the new arrangement is better to navigate, and contents of the website are easier to find. I included some social bookmarking elements (Go, Digg this post! Thanks!). All this sums up to this article on how to improve a blog, step by step.
</p><br /><h2>1. Make social bookmarking easy</h2>

<p>I&#8217;ve added <a href="http://digg.com" title="Digg">Digg</a> submit badges just below the headlines, as well as a <a href="http://delicious.com" title="Delicious">Delicious</a> <i>Save to</i> link at the bottom of each article. A few people actually click on them, so they will start working, when the site gets some more daily visitors, but they will never click them, if they are not even there &#8212; so it&#8217;s good to have them, just in case. We all know how the <a href="http://en.wikipedia.org/wiki/Digg_effect" title="Digg effect">Digg effect</a> works, right? (sometimes it <a href="http://www.ndesign-studio.com/blog/updates/the-digg-effect/" title="How Digg effect works">does just the opposite</a>)</p>

<h2>2. Highlight important sidebar elements with icons</h2>

<p>I&#8217;m a visual person, and I think a picture says a thousand words. So, I really don&#8217;t like to scroll through long sidebars divided just by text titles &#8212; it&#8217;s difficult to spot what I am looking for. If the titles were accompanied by a bit bigger icons, on the other hand, this would be easier. It&#8217;s the same with links, plus images enlarge clicking area. I&#8217;ve added an eye-catching Twitter icon, so now you don&#8217;t have to hit the tiny-tiny <a href="http://twitter.com/f055" title="Follow me on Twitter">follow me</a> link.</p>

<p><img src="http://www.f055.net/images/uploads/f055_v2_main.png" alt="Changes to f055.net front page" /></p>

<h2>3. Show counters &#8212; it&#8217;s old-school, but effective</h2>

<p>I&#8217;ve included the <i>Views</i> count below every article summary. It is an old method of tracking popularity, and it is very inaccurate. But for the first look at the content, it gives a superfast information on what was more appealing to others, and what was not. Also, even when inaccurate, high numbers are appealing to everybody.</p>

<h2>4. Don&#8217;t keep the footer at the footer</h2>

<p>This may sound strange, but actually it&#8217;s better to keep the so called <i>footer</i> right after the first post. Why? Well, I noticed that the most important navigational and promotional elements of my blog are in the footer, way down the bottom: <i>Categories</i>, <i>Subscriptions</i> and <i>Recommended Links</i>. I asked myself, who&#8217;d scroll down the bottom to add my RSS feed or save me with Technorati? Virtually no one, because who&#8217;d even guess it&#8217;s there? Thus, I&#8217;ve split the footer into an informative piece at the top (all the mentioned plus the <i>Abouts</i>), and a boring piece at the end of the page (pagination and licensing).</p>

<p><img src="http://www.f055.net/images/uploads/f055_footermove.png" alt="Footer divided into two" /></p>

<h2>5. Exploit the perfect ad spot</h2>

<p>There are different ways, techniques and tricks to place ads, it&#8217;s a whole branch of science I suppose. And I am a newbie here &#8212; but from the point of user experience (UX) designer, I see the space between the summary and the full article a perfect spot for a standard banner ad. It fits the text, is not too much intrusive to the layout, yet it&#8217;s easy to spot, as the reader always skims through this section, while continuing to read the post. I&#8217;m not a fan of ads myself (<a href="http://safariadblock.sourceforge.net/" title="Safari AdBlock">Safari AdBlock</a> recommended), but I&#8217;d swallow that without choking.</p>

<p><img src="http://www.f055.net/images/uploads/f055_v2_content.png" alt="Perfect ad spot" /></p>

<h2>6. Make sensible comments across the web</h2>

<p>This is more of an advice on how to draw traffic, so that the previous improvements would get a chance to work. Show your presence, post relevant comments under articles relevant to your blog, which you find on other sites. There are ways to search for blogs, use Google, use Twitter search etc. But in fact, you shouldn&#8217;t force things. Just follow several sites in your interest area, and when you have something interesting to say &#8212; just write it. Link to your site, and you&#8217;re done. Sometimes you&#8217;ll find an article concerning similar matter to your earlier post, be sure to link to that, you&#8217;d be done even more.</p>

<p>I recently linked to one of my articles mentioning <a href="http://f055.net/article/5-tips-on-being-smart-with-html-and-css/" title="5 tips on being smart with HTML and CSS">using CSS instead of images</a>. When I read on <a href="http://www.webappers.com" title="WebAppers">WebAppers</a> about a really nice <a href="http://www.webappers.com/2009/02/07/reusable-imageless-google-custom-buttons/" title="Reusable Imageless Google Custom Buttons">CSS GMail button</a> imitating gradient, I included the link to my text in the comments &#8212; and here&#8217;s the effect:</p>

<p><img src="http://www.f055.net/images/uploads/refering.png" alt="Referring effect" /></p>

<p>WebAppers referrers sky-rocketing within a day. Imagine you&#8217;d post such a nice comment on 10 fairly popular websites &#8212; you&#8217;d get quite a number just from referring.</p>

<h2>Conclusions</h2>

<p>I am quite happy with the makeover of this site. I know it&#8217;s just the beginning, but I want to continue improving it. If you know any more interesting tricks, or have suggestions regarding the changes I&#8217;ve made, <b>let me know in the comments</b>! Also, check out the <a href="http://f055.net/index_v1/" title="f055.net version 1">old version, for comparison</a>!
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/anReuUXWwUnMUGMsvPkTr74oe7g/0/da"><img src="http://feedads.g.doubleclick.net/~a/anReuUXWwUnMUGMsvPkTr74oe7g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/anReuUXWwUnMUGMsvPkTr74oe7g/1/da"><img src="http://feedads.g.doubleclick.net/~a/anReuUXWwUnMUGMsvPkTr74oe7g/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=uR0PWnQD"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=FoD8ddzQ"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=GTpFZeFh"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=Rj9wMRBM"><img src="http://feeds.feedburner.com/~f/f055?i=Rj9wMRBM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=2DdMiTSG"><img src="http://feeds.feedburner.com/~f/f055?i=2DdMiTSG" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/jVRFapYQrLg" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Design</dc:subject>
      <dc:date>2009-02-10T17:58:13+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/a-blog-must-evolve-6-ways-to-improve-it/</feedburner:origLink></item>

    <item>
      <title>And the Spam Design Award goes to (sponsored by Viagra, Levitra and Cialis)</title>
      <link>http://feedproxy.google.com/~r/f055/~3/vn6qIkeA-z0/</link>
      <guid isPermaLink="false">http://f055.net/article/and-the-spam-design-award-goes-to-sponsored-by-viagra-levitra-and-cialis/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/and-the-spam-design-award-goes-to-sponsored-by-viagra-levitra-and-cialis/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/and-the-spam-design-award-goes-to-sponsored-by-viagra-levitra-and-cialis/" height="61" width="51" /></a><p><img src="http://www.f055.net/images/uploads/designerspam_lead.png" alt="Stylish spam" /></p>

<p><b>Spam is the cancer of the Internet</b> &#8212; and I am repeating myself. I get almost 100 spam comments every week, but thanks to <a href="http://f055.net/article/expression-engine-captcha-vs-akismet/" title="Akismet plug-in for Expression Engine">Akismet plug-in I described before</a>, I don&#8217;t have to deal with them by hand. But today in my mailbox I&#8217;ve found an odd little one, which really caught my eye. This will be the first design post on the blog, but I mean, just look at it &#8212; for a moment I thought it was something from Apple Inc.
</p><br /><p><img src="http://www.f055.net/images/uploads/designerspam.png" alt="Stylish spam email" /></p>

<p>Isn&#8217;t it nice? The pills have a <b>trendy look-and-feel</b>. We can see a nice, faded out reflection, a shadow under each pill to give it deep look, and a very nice radial gradient, which <b>focuses the attention</b> on the center of the ad. There&#8217;s a <b>web2.0 badge</b>, because oh yes &#8212; they can ship you pills worldwide, and they mean it.</p>

<p>Interesting font selection makes the headline stand out, while the pills are clearly described, in uppercase, Arial I guess. Two most important credit card logotypes assure you that you don&#8217;t have to send cheques or cash by mail. But who knows where your card details will end up &#8212; still, the point is set, you can buy online, instantly.</p>

<p>Neat paragraph alignment, along with a <b>bold headline styled like Apple</b> newsletters, give a clear message of what&#8217;s going on &#8212; no crappy, encoded names like <i>\/I4GR4</i>. This one is pure professional, fine usability and readability approach. Is this the spam of the future? You tell me.</p>

<p>I&#8217;d give it a <b>Spam Design Award</b>, for sure. Maybe they&#8217;d be all excited. Oh wait, no, they already ate their pills&#8230;
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/rimttgEaYJ67TLB0oAAda9UvKL0/0/da"><img src="http://feedads.g.doubleclick.net/~a/rimttgEaYJ67TLB0oAAda9UvKL0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/rimttgEaYJ67TLB0oAAda9UvKL0/1/da"><img src="http://feedads.g.doubleclick.net/~a/rimttgEaYJ67TLB0oAAda9UvKL0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=Sv6q6Pnm"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=bQgNw1us"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=dwGVmY3F"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=AVjdrqkn"><img src="http://feeds.feedburner.com/~f/f055?i=AVjdrqkn" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=ulPVNTGO"><img src="http://feeds.feedburner.com/~f/f055?i=ulPVNTGO" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/vn6qIkeA-z0" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Design</dc:subject>
      <dc:date>2009-02-05T21:51:34+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/and-the-spam-design-award-goes-to-sponsored-by-viagra-levitra-and-cialis/</feedburner:origLink></item>

    <item>
      <title>5 tips on being smart with HTML and CSS</title>
      <link>http://feedproxy.google.com/~r/f055/~3/rUTRHN3xHoY/</link>
      <guid isPermaLink="false">http://f055.net/article/5-tips-on-being-smart-with-html-and-css/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/5-tips-on-being-smart-with-html-and-css/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/5-tips-on-being-smart-with-html-and-css/" height="61" width="51" /></a><p>Remember &#8212; always code your site in the most <b>simple and flexible</b> manner. Once you&#8217;ve designed and developed your website, and put it online, you can be quite proud of yourself. However, when you come back later to make some changes or improvements, you can discover, to your surprise, that you would <b>spend less time making it all over again</b>, than just updating the current code. Either way, it&#8217;s just <b>waste of time and brains</b>. Here are some small tips that may save you lots of time in the future.
</p><br /><h2>1. Don&#8217;t use CSS classes that duplicate built-in behavior</h2><p>
Haven&#8217;t you at least once used a class like <i>.first</i>, <i>.last</i>? Well, <b>you didn&#8217;t have to</b>. You could use <a href="http://www.w3schools.com/CSS/css_pseudo_classes.asp" title="CSS pseudo-classes">CSS pseudo-classes</a> <i>:first-child</i>, <i>:last-child</i> or <i>:first-line</i> and <i>:first-letter</i>. Your code would be reusable, because you wouldn&#8217;t have to explicitly define for example the <i>.first</i> class on your first element &#8212; browser would find the first child and apply the CSS rules instead. As a result, you could shuffle the child elements as you wish, still getting the correct appearance. The same logic applies to other pseudo-classes.</p>

<h2>2. Don&#8217;t use images if you can get the same effect with CSS</h2><p>
Take the picture below for example &#8212; you could just take the whole button as an image and be done. Instead, it&#8217;s better to have the gradient background and the icon in separate image files, and make the button frames using CSS. You could use 3 <i>div</i> blocks, each inside another, with 1-2 pixel margins. You could use the <i>border</i> property. It&#8217;s your call &#8212; but you get the idea. And making different color skins is just a matter of changing the CSS, in this case.</p>

<p><img src="http://www.f055.net/images/uploads/cssdesign.png" alt="CSS instead of an image" /></p>

<h2>3. Don&#8217;t enclose <i>div</i> elements in <i>a hrefs</i> &#8212; use <i>onclick</i> redirection instead</h2><p>
I described this method of assigning links to <i>div</i> elements when talking about <a href="http://f055.net/article/real-nofollow-links-using-simple-javascript/" title="Real &quot;nofollow&quot; links using JavaScript"><i>nofollow</i> attribute</a>. This may sound strange, but in fact it makes your code not only clearer, but more flexible too. Because you actually want the <i>div</i> element to have a link, not the <i>a href</i>. And <b>it&#8217;s good practice to give elements the features you want them to have</b>. Don&#8217;t cover them in feature-blankets, just because it&#8217;s common practice.</p>

<h2>4. Don&#8217;t make item lists by hand or with scripts</h2><p>
There&#8217;s a rule I am just breaking now. Each of the paragraphs in this article is a heading, numbered by hand. Instead, I should use the ordered list element. Because when you end up with more than 10 elements, adding the 11th at the beginning means <b>rewriting everything</b>. Also, a list is a list, so again &#8212; <b>it&#8217;s good practice to use the elements what they were designed for</b>.</p>

<h2>5. Use generic HTML elements as much as you can (and CSS inheritance too)</h2><p>
Last, but not least, <b>it&#8217;s good practice NOT to make many classes in CSS</b>. Instead, try to make your HTML like boxes &#8212; and style the elements indirectly, in respect to each box. For example, if you want to make the links in the paragraphs of <i>.content</i> as green as it gets, simply reach for them:</p>

<blockquote>
<pre>
.content p a { color: #0f0; }
</pre>
</blockquote>

<p>And because we are all lazy, we declare our full font description only once &#8212; in <i>body</i>. And then, benefiting from CSS inheritance, we just change what we need inside the boxes.</p>

<h2>Conclusion</h2><p>
It&#8217;s really not an achievement to have hundreds of lines of code of HTML or CSS. The whole point is to <b>do things quickly and neatly</b>. And it&#8217;s really hard to make things easy. Ironically. But I hope these few things might just help you a bit. Although, I barely touched the subject. Do you have any other productivity tips you&#8217;d like to share? <b>Write me in the comments!</b>
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/FIks0FxEK6dysBS41_1DGZJPBcw/0/da"><img src="http://feedads.g.doubleclick.net/~a/FIks0FxEK6dysBS41_1DGZJPBcw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/FIks0FxEK6dysBS41_1DGZJPBcw/1/da"><img src="http://feedads.g.doubleclick.net/~a/FIks0FxEK6dysBS41_1DGZJPBcw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=X13hCjO5"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=OxkNaZzN"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=gYKgjbxJ"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=6wwxjoEy"><img src="http://feeds.feedburner.com/~f/f055?i=6wwxjoEy" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=hPR0udSr"><img src="http://feeds.feedburner.com/~f/f055?i=hPR0udSr" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/rUTRHN3xHoY" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, HTML, CSS</dc:subject>
      <dc:date>2009-02-03T17:41:30+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/5-tips-on-being-smart-with-html-and-css/</feedburner:origLink></item>

    <item>
      <title>Read luggage conditions before flights - you may be positively surprised</title>
      <link>http://feedproxy.google.com/~r/f055/~3/2RpNlzeKVbE/</link>
      <guid isPermaLink="false">http://f055.net/article/read-luggage-conditions-before-flights-you-may-be-positively-surprised/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/read-luggage-conditions-before-flights-you-may-be-positively-surprised/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/read-luggage-conditions-before-flights-you-may-be-positively-surprised/" height="61" width="51" /></a><p>In an era of cheap flights over Europe, the one not cheap thing about them is the luggage transport. In most cases, you are entitled to just one piece of hand baggage, and they really mean one &#8212; if you wish to have a purse with you, then you can&#8217;t have anything else. Also, check-in baggage is normally restricted to 20 KG, and you have to pay for each piece, plus the overweight. However, before your departure, always read the fine print about luggage conditions, as sometimes the airlines (both cheap and regular) have interesting rules.
</p><br /><p>For example, <a href="http://www.norwegian.no/" title="Norwegian">Norwegian</a> airlines will let you take 2 pieces of check-in baggage of 20 KG each &#8212; that&#8217;s 40 KG! And last time I&#8217;ve checked, <a href="http://easyjet.com/" title="easyjet">easyjet</a> let&#8217;s you have the cabin baggage of any weight, in a reasonable amount that is, provided it fits in the specific size (that most of the modern luggage don&#8217;t exceed anyway).</p>

<p>Regular airlines give you even better conditions, but again, read them carefully, as you don&#8217;t get any message of the above regulations when you, for example, are booking your ticket online. And it&#8217;s a pity to read these on-board during the flight in the airline company booklet (as it happened with me). That&#8217;s it for today. Next time, I&#8217;ll write about some lifehacking behavior while on the airport.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/rM9-SAPwoO8iP1wSBPZ2dE390eA/0/da"><img src="http://feedads.g.doubleclick.net/~a/rM9-SAPwoO8iP1wSBPZ2dE390eA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/rM9-SAPwoO8iP1wSBPZ2dE390eA/1/da"><img src="http://feedads.g.doubleclick.net/~a/rM9-SAPwoO8iP1wSBPZ2dE390eA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=rmZX5P5y"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=K6YYlH23"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=Gc8LOm1L"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=nKIGD0M4"><img src="http://feeds.feedburner.com/~f/f055?i=nKIGD0M4" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=qXH7RpVU"><img src="http://feeds.feedburner.com/~f/f055?i=qXH7RpVU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/2RpNlzeKVbE" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Lifehacking</dc:subject>
      <dc:date>2009-01-18T14:57:20+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/read-luggage-conditions-before-flights-you-may-be-positively-surprised/</feedburner:origLink></item>

    <item>
      <title>Real “nofollow” links using simple JavaScript</title>
      <link>http://feedproxy.google.com/~r/f055/~3/dggsumM1Seg/</link>
      <guid isPermaLink="false">http://f055.net/article/real-nofollow-links-using-simple-javascript/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/real-nofollow-links-using-simple-javascript/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/real-nofollow-links-using-simple-javascript/" height="61" width="51" /></a><p>Today&#8217;s web is all about being in the search engines, i said <a href="http://f055.net/article/expression-engine-and-google-friendly-links/" title="Expression Engine and Google-friendly links">that</a> <a href="http://f055.net/article/google-friendly-seo-for-expression-engine/" title="Google-friendly SEO for Expression Engine">before</a>. And since <a href="http://www.google.com" title="Google">Google</a> is the biggest search engine, I can safely say that today&#8217;s web is all about being in Google &#8212; which then again all breaks down to having a high <a href="http://en.wikipedia.org/wiki/PageRank" title="PageRank">PageRank</a> (PR). It&#8217;s magically calculated basing on inbound and outbound links to the given site. And often having bad links brings your PR down. That&#8217;s why it&#8217;s good practice to use <i>nofollow</i>. But I will show you how to make it even more <i>No</i>.
</p><br /><p>Reading about <a href="http://en.wikipedia.org/wiki/Nofollow" title="nofollow"><i>nofollow</i></a> you will find that different browsers have different approach to it, and only Google does what it supposed to &#8212; doesn&#8217;t follow the link and doesn&#8217;t index the linked page (unless it was in Google&#8217;s index already). However, there is no space for improvements, and the only way to use <i>nofollow</i> is like this:</p>

<blockquote>
<pre>
&lt;a rel="nofollow" href="http://f055.net"&gt;f055&lt;/a&gt;
</pre>
</blockquote>

<p>But, in fact, there&#8217;s a JavaScript (JS) approach, which probably makes the link really invisible to most of the search engines. The idea is to replace <i>a href</i> with an <i>onclick</i> event that makes a JS redirection.</p>

<blockquote>
<pre>
&lt;a onclick="parent.location='http://f055.net/'"&gt;f055&lt;/a&gt;
</pre>
</blockquote>

<p>Just add proper styling in CSS and you&#8217;ve got yourself a link that works like any other, but in HTML terms, it&#8217;s not a hyperlink at all. To get the default blue link, you should use a style-sheet similar to the following:</p>

<blockquote>
<pre>
a {
    color: #00f;
    text-decoration: underline;
    cursor: pointer;
}
</pre>
</blockquote>

<p>It&#8217;s not something you&#8217;d use in your daily posts, but as a link to the homepage on your logo it works great, and <a href="http://www.google.com/webmasters/tools/" title="Google Webmaster Tools">Google Webmaster Tools</a> don&#8217;t shout at you about repeated content linking, for example. Note that I don&#8217;t claim it is a truly invisible hyperlink, but in search engine terms, it should do the trick.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/R3AlsUwwZeKEbHgfCFSN31k4PNI/0/da"><img src="http://feedads.g.doubleclick.net/~a/R3AlsUwwZeKEbHgfCFSN31k4PNI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/R3AlsUwwZeKEbHgfCFSN31k4PNI/1/da"><img src="http://feedads.g.doubleclick.net/~a/R3AlsUwwZeKEbHgfCFSN31k4PNI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=2u3pvKp6"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=5wGcdJ0i"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=8zg5XKei"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=pJzTaeos"><img src="http://feeds.feedburner.com/~f/f055?i=pJzTaeos" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=RjLBNG5c"><img src="http://feeds.feedburner.com/~f/f055?i=RjLBNG5c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/dggsumM1Seg" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, HTML</dc:subject>
      <dc:date>2009-01-17T18:24:32+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/real-nofollow-links-using-simple-javascript/</feedburner:origLink></item>

    <item>
      <title>Display Twitter timeline in Expression Engine - Part 2</title>
      <link>http://feedproxy.google.com/~r/f055/~3/4V19Msp-cvE/</link>
      <guid isPermaLink="false">http://f055.net/article/display-twitter-timeline-in-expression-engine-part-2/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/display-twitter-timeline-in-expression-engine-part-2/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/display-twitter-timeline-in-expression-engine-part-2/" height="61" width="51" /></a><p><a href="http://f055.net/article/display-twitter-timeline-in-expression-engine-part-1/" title="Display Twitter timeline in Expression Engine - Part 1">Last time</a> I explained how to display your <a href="http://twitter.com" title="Twitter">Twitter</a> timeline in Expression Engine (EE) using a simple plugin. Today, I will show how to achieve the same and even more using Twitter timeline feed. This approach gives a bit more flexibility and some advantages over the method described in Part 1. We use it on <a href="https://www.process-one.net/" title="ProcessOne">ProcessOne</a> website to push our <a href="https://www.process-one.net/en/company/ceo/" title="ProcessOne CEO latest tweets">CEO&#8217;s latest tweets</a>.
</p><br /><p>We will be using Andrew Weaver&#8217;s <a href="http://brandnewbox.co.uk/docs/Home/Plugin:FeedGrab/" title="FeedGrab">FeedGrab</a> plugin &#8212; it allows you to extract data from an RSS feed and insert it into a weblog. The keyword here is weblog. If you don&#8217;t realize the benefits yet, let me give you a hint &#8212; search. Yes, with this approach you will be able to make all your tweets searchable, just as you make your weblog posts searchable.</p>

<p>The second advantage is that you don&#8217;t need to give your Twitter username and password explicitly in the EE template (as you had to in Part 1). You just monitor your feed (or any other, in fact). Here&#8217;s how you implement that.</p>

<p>First, you need a custom field group to store your tweets. Create one in <i>Admin > Weblog Administration > Custom Weblog Fields > Create a New Weblog Field Group</i>. Let&#8217;s say you call it <i>Twitter Field Group</i>. Select <i>Add/Edit Custom Fields</i> to modify this new group. You have to create 2 fields &#8212; one for Twitter URL (say <i>twitter_url</i>), and one for Twitter message (say <i>twitter_text</i>). In both cases be sure that you the <i>Field Type</i> is of <i>Text Input</i> and the text formatting is set to <i>None</i>. In case of the tweet text, be sure to turn on field searching.</p>

<p><img src="http://www.f055.net/images/uploads/customfield.png" alt="Custom field settings" /></p>

<p>Next, you need to create a new weblog (<i>Admin > Weblog Administration > Weblog Management > Create a New Weblog</i>). Edit group preferences and set the default <i>Field Group</i> to the Twitter one you have just created. After creating the new weblog, note its ID, we&#8217;ll need that later on.</p>

<p><img src="http://www.f055.net/images/uploads/twitterweblog.png" alt="Create a Twitter weblog" /></p>

<p>Finally, you need to create a separate, empty template. It&#8217;s good practice to have it in a separate template group too. For example, let&#8217;s make a group named <i>feeds</i> with an empty template <i>twitter</i>. In that template, just put the FeedGrab code:</p>

<blockquote>
<pre>
&#123;exp:feedgrab url="http://twitter.com/statuses/user_timeline/16728857.atom" 
weblog="2" 
author="1"
title="title"
date="published"
use="link|title" 
fields="twitter_url|twitter_text"
unique="twitter_url"
&#125;
</pre>
</blockquote>

<p>The <i>url</i> is the feed location. The <i>use</i> variable tells FeedGrab what to take from the feed (in our case, the Twitter link and the title, which is the actual tweet), while <i>fields</i> show where to push that data accordingly. The <i>unique</i> element here is obviously the tweet URL.</p>

<p>When you go to <i>http://yoursite/feeds/twitter/</i> you should invoke FeedGrab, and the tweets should appear as separate posts in your recently created weblog. All you need to do now is to set a cron job that periodically visits the above URL to update the weblog contents. Then, just display that weblog wherever you wish on your page, just as any other weblog.</p>

<p>
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/erbmHIftLfVQlsMuNWYMpjGSo2w/0/da"><img src="http://feedads.g.doubleclick.net/~a/erbmHIftLfVQlsMuNWYMpjGSo2w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/erbmHIftLfVQlsMuNWYMpjGSo2w/1/da"><img src="http://feedads.g.doubleclick.net/~a/erbmHIftLfVQlsMuNWYMpjGSo2w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=b9R2ygUl"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=vFgrnGFn"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=AqqRQbWl"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=0asIFbNg"><img src="http://feeds.feedburner.com/~f/f055?i=0asIFbNg" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=I2XAiUO0"><img src="http://feeds.feedburner.com/~f/f055?i=I2XAiUO0" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/4V19Msp-cvE" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2009-01-15T21:46:40+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/display-twitter-timeline-in-expression-engine-part-2/</feedburner:origLink></item>

    <item>
      <title>Roundup on Merry Christmas and Happy New Year!</title>
      <link>http://feedproxy.google.com/~r/f055/~3/Qh-569dImLA/</link>
      <guid isPermaLink="false">http://f055.net/article/roundup-on-merry-christmas-and-happy-new-year/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/roundup-on-merry-christmas-and-happy-new-year/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/roundup-on-merry-christmas-and-happy-new-year/" height="61" width="51" /></a><p>So I am leaving Paris today, coming back home to the busy times of the Holidays (oh the irony). The blog will return to normal in 2 weeks time, for now just leave your laptop and go have fun, I think. That&#8217;s what I&#8217;ll do at least. Until next time - I wish you all Merry Christmas with your family and a really full blown New Year party! Happy New Year, let the 2009 be at least not worse than this one. And an annual blog roundup below, with the most interesting posts so far.
</p><br /><p><a rel="nofollow" href="http://f055.net/article/be-smart-with-your-css/" title="Be smart with your CSS">Be smart with your CSS</a> &#8212; or how to semantically organize your style sheets and include clever color management at the same time.</p>

<p><a href="http://f055.net/article/simple-yet-perfect-2-column-layout/" title="Simple yet perfect 2 column layout">Simple yet perfect 2 column layout</a> &#8212; or how to be lazy with your flexible content and still get a decent multi-column look, cause your eyes deserve it (remember, reading wide paragraphs makes you tired).</p>

<p><a href="http://f055.net/article/reusable-rounded-edges-using-css-and-html/" title="Reusable rounded edges using CSS and HTML">Reusable rounded edges using CSS and HTML</a> &#8212; or how to be smooth and slick. And still lazy.</p>

<p><a href="http://f055.net/article/google-friendly-seo-for-expression-engine/" title="Google-friendly SEO for Expression Engine">Google-friendly SEO for Expression Engine</a> &#8212; or how to actually get more attention on the web.</p>

<p>So far you could read 16 posts over a period of less than 2 months. I&#8217;m looking forward to the New Year &#8212; more subjects are coming, like interface design, perl development and even more on how to be lazy, but get things done using simple methods. Stay tuned!
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/da9FHq5AJrDX2-Dni1EgxCp3be8/0/da"><img src="http://feedads.g.doubleclick.net/~a/da9FHq5AJrDX2-Dni1EgxCp3be8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/da9FHq5AJrDX2-Dni1EgxCp3be8/1/da"><img src="http://feedads.g.doubleclick.net/~a/da9FHq5AJrDX2-Dni1EgxCp3be8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=nzEuSHqE"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=SyStYtsg"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=ak3kmbu0"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=aEpnEZo0"><img src="http://feeds.feedburner.com/~f/f055?i=aEpnEZo0" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=QWs4gU6L"><img src="http://feeds.feedburner.com/~f/f055?i=QWs4gU6L" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/Qh-569dImLA" height="1" width="1"/>]]></content:encoded>
      <dc:subject>News</dc:subject>
      <dc:date>2008-12-22T21:34:52+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/roundup-on-merry-christmas-and-happy-new-year/</feedburner:origLink></item>

    <item>
      <title>Display Mac colors as on PC using gamma correction</title>
      <link>http://feedproxy.google.com/~r/f055/~3/bZNtMDyumhw/</link>
      <guid isPermaLink="false">http://f055.net/article/display-mac-colors-like-on-pc-with-lcd-gamma-correction/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/display-mac-colors-like-on-pc-with-lcd-gamma-correction/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/display-mac-colors-like-on-pc-with-lcd-gamma-correction/" height="61" width="51" /></a><p>If you are a web designer, you probably noticed already that <b>colors of your design differ on Macs and PCs</b>. It&#8217;s mainly due to the fact that on Macs, the default <a href="http://en.wikipedia.org/wiki/Gamma_correction" title="gamma correction">gamma correction</a> value for LCD displays is 1.8, while on PCs &#8212; it&#8217;s 2.2. As a result, PCs have deeper blacks, higher contrast and are less pale than Macs. Apple is <a href="http://turbomilk.com/blog/journal/apple_gamma_22/" title="Apple to make default gamma equal 2.2">going to change that</a> in the next iteration of their OS X, but in fact, you could change that yourself, even way back in the <a href="http://en.wikipedia.org/wiki/Mac_OS_X_v10.3" title="Mac OS X Panther">Panther</a> times. Here&#8217;s how you do it in current <a href="http://en.wikipedia.org/wiki/Mac_OS_X_v10.5" title="Mac OS X Leopard">Leopard</a>.
</p><br /><p>Firstly, got to your <i>System Preferences</i> and select <i>Displays</i> preference pane.</p>

<p><img src="http://www.f055.net/images/uploads/prefpane.png" alt="System Preferences" /></p>

<p>Then, choose the <i>Color</i> tab and select <i>Calibrate</i>.</p>

<p><img src="http://www.f055.net/images/uploads/colorlcd.png" alt="Displays preference pane - color settings" /></p>

<p>This will display a configuration wizard. Just click through it, until the <i>Target Gamma</i> screen appears. There, select the 2.2 gamma correction, which is compatible to PCs &#8212; you will immediately notice a change in your display colors.</p>

<p><img src="http://www.f055.net/images/uploads/gamma.png" alt="Gamma correction setting" /></p>

<p>Finally, choose a name for your new color setting and finish the wizard.</p>

<p><img src="http://www.f055.net/images/uploads/profilename.png" alt="Color setting name" /></p>

<p>And that&#8217;s all. Compare the result with some other Mac or PC to see the change.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/qj7AQMeCOsqQpoJa7TaEXICDsSo/0/da"><img src="http://feedads.g.doubleclick.net/~a/qj7AQMeCOsqQpoJa7TaEXICDsSo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qj7AQMeCOsqQpoJa7TaEXICDsSo/1/da"><img src="http://feedads.g.doubleclick.net/~a/qj7AQMeCOsqQpoJa7TaEXICDsSo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=xQhk9mOH"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=l6LsFfEZ"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=2tvhrW0Q"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=SaKuJGu6"><img src="http://feeds.feedburner.com/~f/f055?i=SaKuJGu6" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=xdQsjtNg"><img src="http://feeds.feedburner.com/~f/f055?i=xdQsjtNg" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/bZNtMDyumhw" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2008-12-21T00:31:55+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/display-mac-colors-like-on-pc-with-lcd-gamma-correction/</feedburner:origLink></item>

    <item>
      <title>Google-friendly SEO for Expression Engine</title>
      <link>http://feedproxy.google.com/~r/f055/~3/LQhx7VxYKtI/</link>
      <guid isPermaLink="false">http://f055.net/article/google-friendly-seo-for-expression-engine/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/google-friendly-seo-for-expression-engine/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/google-friendly-seo-for-expression-engine/" height="61" width="51" /></a><p><a href="http://en.wikipedia.org/wiki/Search_engine_optimization" title="Search Engine Optimization">Search Engine Optimization</a> (SEO) is a huge market, because frankly these days, if you&#8217;re not in the top search results, you barely exist. That&#8217;s why it&#8217;s a good practice to take some time time and properly prepare your pages, so that the <a href="http://en.wikipedia.org/wiki/Googlebot" title="GoogleBot">GoogleBot</a>, and others, will like them. Especially since it really takes just a few minutes in Expression Engine (EE).
</p><br /><p>Let&#8217;s start with the basics (props to <a href="http://www.bynajmniej.pl/wordpress-seo" title="Wordpress SEO">this post</a>, unfortunately in Polish). The most important thing for Google is the URL, the title of the page, its description, the headers, and just then &#8212; the article itself. I already describe <a href="http://f055.net/article/expression-engine-and-google-friendly-links/" title="How to make Google-friendly links in EE">how to make Google-friendly links in EE</a>. So lets talk about the rest now.</p>

<h2>Title and description</h2>

<p>Title and description is what the users will see in the search results, so try to state clearly what the page contains. In the <i>title</i> tag, insert the page name (it&#8217;s a good practice to combine the name and the URL, i.e. <i>f055.net</i>), as well as a short tag-line (like <i>lazy design &amp; development</i>). Of course, don&#8217;t define your title in the template. Instead, use the <i>{blog_title}</i> EE variable defined in <i>Admin - Weblog Administration - Weblog Management - Edit Preferences</i> as <i>Full Weblog Name</i>. Note the <i>Weblog Description</i> field &#8212; it represents the <i>description</i> tag (and can be accessed with <i>{blog_description}</i> variable), so fill it in wisely. I personally tend to just extend the tag-line, but the <b>more accurate summary</b> of the page, the better. Thus, using these variables, in the header section of the template you just put the following:</p>

<blockquote>
<pre>
&lt;title&gt;{blog_title}&lt;/title&gt;
&lt;meta name="description" content="{blog_description}" /&gt;
</pre>
</blockquote>

<h2>Headers</h2>

<p>The things with the headers is simple &#8212; use them where you have a header, not just a title. So, use the <i>h1</i> and <i>h2</i> tag <b>just in your post</b>, and nowhere else across the page. Use <i>h1</i> just for the post main title, and <i>h2</i> for the mid-sections, just like I&#8217;m doing here i.e. with <i>Headers</i> and <i>Title and Description</i>. If your article is more deeply nested with paragraphs, and you need <i>h3</i>, <i>h4</i> etc. ensure that they are not used outside your article. Otherwise, you could use it, but bear in mind that they highlight the content, so for example I want to focus attention on my Twitter timeline in the sidebar, so I have it described with <i>h3</i> tag.</p>

<h2>Sitemap and <i>robots.txt</i></h2>

<p>Sitemaps and <i>robots.txt</i> are important, because the former is a file guiding the GoogleBot around your page, and the latter tells it where to and where not to go. However, creating these documents by hand is a tedious job. Therefore, I recommend using something like <a href="https://www.google.com/webmasters/tools/" title="Google Webmaster Tools">Google Webmaster Tools</a>. In the Tools section there is a <i>robots.txt</i> generator. I tend to exclude the images and themes, but it really depends on your needs.</p>

<p>With sitemaps, it&#8217;s even easier, because the Webmaster Tools sitemap generator accepts RSS feeds. Just be sure to have the feed XML on your domain, because it seems like <b>you cannot submit an external one </b>(for example, <a href="http://feedburner.com/" title="FeedBurner">FeedBurner</a>) &#8212; but that shouldn&#8217;t be a problem, since EE provides you with both RSS and Atom feeds (which you then burn, right?).</p>

<h2>Unique titles and descriptions</h2>

<p>So we discussed the importance of titles and descriptions. But because of all the <a href="http://websearch.about.com/od/seononos/a/spamseo.htm" title="Black Hat SEO">Black Hat SEO</a> and spam, Google is really careful with <b>duplicated content</b>. One way to tell the GoogleBot not to index a link, is to add a special <i>nofollow</i> attribute, like this:</p>

<blockquote><pre>&lt;a <b>rel="nofollow"</b> href="http://f055.net"&gt;</blockquote>

However, this would be another tedious job, and frankly, usually I don't bother. Moreover, it often doesn't make sense, since your site has indeed different contents across the pages. The problem is they all have the same title and description, because of the way we defined the header tags. Google Webmaster Tools would tell you about these problems in <i>Content Analysis</i> of <i>Diagnostics</i> section. Lets change that.

First, we will modify the header of articles (or <i>posts</i>, or <i>entries</i>, however you have the template displaying your individual posts named). We're going to include the title of the article, as well as its categories and post date. Note that you have to have your <i>exp:weblog:entries</i> EE module declaration <b>somewhere before</b> the <i>title</i> and <i>description</i> tags, because we are going to use the special <i>{title}</i> variable, as well as <i>{categories}</i> and <i>{date_heading}</i>, all from the <a href="http://expressionengine.com/docs/modules/weblog/index.html" title="Weblog Module"><i>Weblog Module</i></a>. Also note, that you should have the header in an external template, and pass the additional title and description parameters using the <i>{embed}</i> variable to <a href="http://expressionengine.com/docs/templates/embedding_templates.html" title="Expression Engine Sub-templates">sub-template</a>.

<blockquote>
<pre>
&#123;exp:weblog:entries weblog="{my_weblog&#125;" orderby="date" sort="desc" limit="1" disable="member_data|trackbacks"}
...
&lt;title&gt;{title} | {blog_title}&lt;/title&gt;
&lt;meta name="description" content="Article on {categories}{category_name}, {/categories} posted {date_heading}{entry_date format='%F %d, %Y'}{/date_heading} | {blog_description}" /&gt;
</pre>
</blockquote>

<p>As a result, each article page will have a unique title, as well as a description stating in which category the article belongs, and when it was posted. Changing the title and description of the archive page is straightforward. One problem still left is the categories view, where you see articles just on one topic, like for example <a href="http://f055.net/category/expressionengine/" title="Articles on Expression Engine">here</a>. Notice that there&#8217;s a special <i>category</i> keyword in the URL, followed by the category name. This keyword can vary, depending on your system, because you can set it in Admin - <i>Weblog Administration - Global Weblog Preferences</i> under <i>Category URL Indicator</i>. We will use that to make a unique title and description.</p>

<p>It is possible to retrieve the URL as segments. In the example above, segment 1 would be <i>category</i>, and segment 2 &#8212; <i>expressionengine</i>. Thus, lets make a condition on the index template that whenever the first segment is, in fact, <i>category</i>, then we will use a special title and description.</p>

<blockquote><pre>
    &lt;title&gt;{blog_title}&lt;/title&gt;
    &lt;meta name="description" content="{blog_description}" /&gt;
</pre></blockquote>

<p>As you can see, whenever we are displaying post from a specific category, the title will start with, for example, <i>&#8220;Articles on expressionengine&#8221;</i>. Here&#8217;s the drawback of this method, as we pull the category name directly from the URL, so we don&#8217;t have the pretty print name. I still can&#8217;t find how to map category identifiers to names in EE. But what we aimed is achieved, and we have all the pages with <b>unique names</b>.</p>

<h2>Conclusion</h2>

<p>It is very important to have these small optimizations implemented. The point is not only to be high in the rankings, in fact, the bigger benefit is from your content being better organized, easier accessed and searchable. Think of the future when it will be you who wants to <b>find something quickly</b>. These tweaks would certainly make it easier for you.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/oq6aS_AOGf7jyqy-v1fb9E02JCw/0/da"><img src="http://feedads.g.doubleclick.net/~a/oq6aS_AOGf7jyqy-v1fb9E02JCw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/oq6aS_AOGf7jyqy-v1fb9E02JCw/1/da"><img src="http://feedads.g.doubleclick.net/~a/oq6aS_AOGf7jyqy-v1fb9E02JCw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=VgNAdEim"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=oe0HokkH"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=l48OVy1g"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=BuqWGKNI"><img src="http://feeds.feedburner.com/~f/f055?i=BuqWGKNI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=XI7TfK6t"><img src="http://feeds.feedburner.com/~f/f055?i=XI7TfK6t" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/LQhx7VxYKtI" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2008-12-17T13:01:05+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/google-friendly-seo-for-expression-engine/</feedburner:origLink></item>

    <item>
      <title>Rounded edges on links with pure CSS</title>
      <link>http://feedproxy.google.com/~r/f055/~3/Id-hpNanBow/</link>
      <guid isPermaLink="false">http://f055.net/article/rounded-edges-on-links-with-pure-css/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/rounded-edges-on-links-with-pure-css/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/rounded-edges-on-links-with-pure-css/" height="61" width="51" /></a><p>Last time I showed how to make <a href="http://f055.net/article/reusable-rounded-edges-using-css-and-html/" title="Reusable rounded edges using CSS and HTML">reusable rounded edges</a> on block elements. It was a very effective technique, but it had some <b>HTML overhead</b>. Today, I will show how to make rounded edges on any elements <b>using just CSS</b>. Just like my rounded link highlights. But it can be extended onto list elements, headlines and actually, any other element that can be partially block.
</p><br /><p>This technique is quite easy, based on the <a href="http://virtuelvis.com/gallery/css/rounded/" title="Rounded corners with CSS">post by Arve Bersvendsen</a>. It&#8217;s almost <a href="http://f055.net/article/lazy-compatibility/" title="Lazy compatibility">lazy compatible</a>, except that it <b>doesn&#8217;t work in IE7</b> &#8212; luckily, IE just displays a normal, rectangle highlight. Lets use this blog as an example, and try to make rounded edges on link highlights. First, we need to properly define the <i>a</i> element.</p>

<blockquote>
<pre>
a {
	display: inline-table;
	padding: 0 1pt;

	text-align: left;
	text-decoration: none;
	vertical-align: bottom;
}
</pre>
</blockquote>

<p>The crucial part is <i>display</i> &#8212; <i>inline-table</i> is yet <b>another holy grail</b> of CSS, because it lets you have block elements positioned inline. Next important thing is padding, because this technique requires proper horizontal positioning (ensure unit consistency, i.e. don&#8217;t mix pixels and points when defining <i>a</i> element). The rest is just for proper rendering.</p>

<p>Next step is to prepare the rounded highlight. Lets start with <a href="http://getfirefox.com" title="Firefox">Firefox</a>, this browser is easy, because it has <b>built-in compatibility</b> for defining rounded borders. So all that you have to do is define the radius of the corner:</p>

<blockquote>
<pre>
a:hover {
	background-color: #00a1f1;
	color: #fff;

	-moz-border-radius: 5px;
}
</pre>
</blockquote>

<p>Along the way, we defined the highlight color. Now, the fun part starts. Using special CSS selectors, we will make the browsers to put something <i>:before</i> and <i>:after</i> our links. This something will be a small white mask, which makes the rounded corner, similarly as we did in the <a href="http://f055.net/article/reusable-rounded-edges-using-css-and-html/" title="Reusable rounded edges using CSS and HTML">previous article</a>.</p>

<blockquote>
<pre>
a:before,
a:hover:before {
	display: block;
	height: 5px;

	padding: 0;
	margin: -5px -1pt;

	background: url(tr.png) top right no-repeat #00a1f1;
	content: url(tl.png);

	line-height: 0;
	font-size: 0;
}

a:before {
	background: none;
}
</pre>
</blockquote>

<p>The above CSS puts an additional block element above our link. It&#8217;s like a <i>div</i>, it starts with the beginning of the first letter in the link text, and ends with the last letter &#8212; with a break, in case the link is across more than one line of text. The <i>content</i> attribute is the image of top-left rounded corner. The trick is in the <i>background</i> attribute &#8212; we are displaying the other rounded corner as a background image. Notice that horizontal positioning in <i>margin</i> is in points, as mentioned earlier, consistency here is the key. Vertical positioning depends on the size of your corner image, and you should set the same negative <i>margin</i> and block element <i>height</i>, as the height of your rounded corner white patch.</p>

<p>The <i>line-height</i> and <i>font-size</i> values are there to remove element spacing forced by the browsers, while the additional empty background definition is there, so that no elements of the highlight would be visible, when the link is not hovered with the cursor. Similarly, we define the <i>:after</i> element:</p>

<blockquote>
<pre>
a:after,
a:hover:after {
	display: block;
	height: 5px;

	padding: 0;
	margin: -5px -1pt 0 -1pt;

	background: url(br.png) bottom right no-repeat #00a1f1;
	content: url(bl.png);

	line-height: 0;
	font-size: 0;
}

a:after {
	background: none;
}
</pre>
</blockquote>

<p>Horizontal positioning is a bit more tricky in this case, but basically it&#8217;s the same as <i>:before</i>. But that is all. Using these CSS definitions, you will get rounded edges on your links, you don&#8217;t have to change anything in the HTML, nor add any elements. There&#8217;s a slight, <b>vertical glitch</b> in Opera 9, but with proper line-height, it should not be a big problem.</p>

<p><img src="http://www.f055.net/images/uploads/roundedcomparison.png" alt="Rounded edges comparison" /></p>

<p>So, just like that, the links have a nice, rounded highlight. Awesome!</p>

<p>UPDATE: And if you quickly want to cover Firefox and Safari (probably Chrome too, as it&#8217;s a <a href="http://en.wikipedia.org/wiki/WebKit" title="WebKit">WebKit</a> thing), just use these two, built-in CSS properties:</p>

<blockquote>
<pre>
-moz-border-radius: 5px; /* for Firefox */
-webkit-border-radius: 5px; /* for Safari */
</pre>
</blockquote>

<p>&nbsp;</p>
<p><a href="http://feedads.g.doubleclick.net/~a/tVuj1YZu6y-lFCvBCmggnkliFKw/0/da"><img src="http://feedads.g.doubleclick.net/~a/tVuj1YZu6y-lFCvBCmggnkliFKw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tVuj1YZu6y-lFCvBCmggnkliFKw/1/da"><img src="http://feedads.g.doubleclick.net/~a/tVuj1YZu6y-lFCvBCmggnkliFKw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=22AYvByx"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=nO4FRRho"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=9Kowu8IA"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=d1diTbJ0"><img src="http://feeds.feedburner.com/~f/f055?i=d1diTbJ0" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=5ADoCjHa"><img src="http://feeds.feedburner.com/~f/f055?i=5ADoCjHa" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/Id-hpNanBow" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, CSS</dc:subject>
      <dc:date>2008-12-15T20:15:26+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/rounded-edges-on-links-with-pure-css/</feedburner:origLink></item>

    <item>
      <title>Use your plastic cards to spread the word</title>
      <link>http://feedproxy.google.com/~r/f055/~3/DCRyhGW7ilA/</link>
      <guid isPermaLink="false">http://f055.net/article/use-your-plastic-cards-to-spread-the-word/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/use-your-plastic-cards-to-spread-the-word/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/use-your-plastic-cards-to-spread-the-word/" height="61" width="51" /></a><p>We all have them in our wallets, tons of the plastic goodies that give us cash, collect points or simply open doors (and I don&#8217;t mean by stuffing it between the doors and the frame). Now, recently I noted that in quite a lot of cases, the issuer lets us put a short text on the card &#8212; either it&#8217;s our account name, or some string identifier to distinguish the cards (like <a href="http://nectar.com" title="Nectar">Nectar</a>, cause you can have more than one in your family). Why not to exploit that?
</p><br /><p>In my case, I decided to identify the Nectar card with a bold sentence. You could also change the name of your bank account to some interesting sentence, because I noticed a lot of banks print that on the credit cards. No man at the counter will mess with you, when you have it clearly on the card that <i>&#8220;I killed before&#8221;</i> ;) Try it, make your plastic card say something important for a change.</p>



<p>&nbsp;</p>
<p><a href="http://feedads.g.doubleclick.net/~a/0fYg65rZE7XPsfPiwy55aLSZdJ8/0/da"><img src="http://feedads.g.doubleclick.net/~a/0fYg65rZE7XPsfPiwy55aLSZdJ8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/0fYg65rZE7XPsfPiwy55aLSZdJ8/1/da"><img src="http://feedads.g.doubleclick.net/~a/0fYg65rZE7XPsfPiwy55aLSZdJ8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=zULgwCg4"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=YjMzPq35"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=Xv09ANkV"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=hO98JW5T"><img src="http://feeds.feedburner.com/~f/f055?i=hO98JW5T" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=H39ZY1Ds"><img src="http://feeds.feedburner.com/~f/f055?i=H39ZY1Ds" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/DCRyhGW7ilA" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Lifehacking</dc:subject>
      <dc:date>2008-12-14T14:26:22+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/use-your-plastic-cards-to-spread-the-word/</feedburner:origLink></item>

    <item>
      <title>Reusable rounded edges using CSS and HTML</title>
      <link>http://feedproxy.google.com/~r/f055/~3/YajuvhKx0zA/</link>
      <guid isPermaLink="false">http://f055.net/article/reusable-rounded-edges-using-css-and-html/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/reusable-rounded-edges-using-css-and-html/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/reusable-rounded-edges-using-css-and-html/" height="61" width="51" /></a><p>Rounded edges are the trend now, everything has to be smooth and slick &#8212; and <b>rounded</b>. There are <a href="http://www.google.com/search?q=css%20rounded%20edges" title="Rounded edges techniques">various techniques</a> to achieve rounded edges. Today, as well as in an upcoming articles, I will describe some that are <b>lazy</b> enough that you should bother using them.
</p><br /><p>Let&#8217;s start with the simplest case &#8212; you have a page with solid background, but several boxes of different color. Similar to this case scenario &#8212; <a href="http://tweet.im" title="tweet.IM - control your twitter with your instant messenger">tweet.IM</a>, a nice service for Twitter:</p>

<p><img src="http://www.f055.net/images/uploads/roundedscenario.png" alt="Rounded edges scenario" /></p>

<p>So the first idea is to make each rounded edge in blue, green and navy on a white background &#8212; but that last box has an image background, how to cope with that? Well, this gives you a hint that the idea is wrong. The correct approach is to make just one edge for each corner with the white part visible, and transparency in the place, where previously we wanted to paint blue, green and navy. Just like below (image magnified):</p>

<p><img src="http://www.f055.net/images/uploads/roundedcorner.png" alt="Universal rounded edge" /></p>

<p>That particular piece is for bottom-left corner. By making the other 3 corners (rotating by 90 degrees each in your favorite image editor), we obtain a set of rounded edges, which we can apply to any box, even if its background is an image! We will need some CSS and HTML to achieve that. Also, note that the best result is when using alpha-channel PNG-24 image (IE6 doesn&#8217;t parse it, but there are <a href="http://www.google.com/search?q=IE6%20alpha%20png" title="Enable alpha channel PNG in IE6">lots of hacks</a> to make it work).</p>

<p>The idea is to have a block element representing the box (for example <i>div</i>) positioned either absolutely or relatively &#8212; this way, elements inside that box can be positioned absolutely in respect to that box (it&#8217;s like a holy grail, we achieve <b>relatively-absolute positioning</b>!). Firstly, define a general edge element:</p>

<blockquote>
<pre>
div.edge {
    position: absolute;
    width: 20px;
    height: 20px;

    background-repeat: no-repeat;
}
</pre>
</blockquote>

<p>In the above code, we say that each edge block will be positioned absolutely inside its parent element, as well as have the size of the edge image, which I showed before. We will display the edge images as the background of each edge block. This way, <b>site visitors won&#8217;t see image placeholders</b> in the corners of the boxes, but once the browser loads them, they will magically appear. Even though no repetitions will be visible, lets set the <i>no-repeat</i> parameter, just in case.</p>

<p>Next, we prepare the actual edges, by defining <i>div</i> elements on each corner of the box, with the appropriate edge image displayed in the background:</p>

<blockquote>
<pre>
div.tl { /* top-left */
    top: 0;
    left: 0;
    background-image: url(tl.png);
}
div.tr { /* top-right */
    top: 0;
    right: 0;
    background-image: url(tr.png);
}
div.bl { /* bottom-left */
    bottom: 0;
    left: 0;
    background-image: url(bl.png);
}
div.br { /* bottom-right */
    bottom: 0;
    right: 0;
    background-image: url(br.png);
}
</pre>
</blockquote>

<p>Once we&#8217;re done with that, the one thing left is to actually attach the rounded edges to our boxes. In case of the green box in our example scenario, the code would be as follows:</p>

<blockquote>
<pre>
&lt;div id="green"&gt; 
    &lt;div class="edge tl"&gt;&lt;/div&gt; 
    &lt;div class="edge tr"&gt;&lt;/div&gt; 
    &lt;div class="edge bl"&gt;&lt;/div&gt; 
    &lt;div class="edge br"&gt;&lt;/div&gt; 
    &lt;div class="content"&gt;
        &lt;!-- place for the box content //--&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
</blockquote>

<p>We use the fact that the <i>green</i> <i>div</i> is positioned relatively. Therefore, all edge <i>div</i> elements position themselves in the corners. We also benefit from using multiple classes in one declaration, as we don&#8217;t need to duplicate CSS code. A good idea is to set a <i>padding</i> value for the <i>content</i> <i>div</i> equal to the 3/4 of the size of each rounded edge image. And as you can see, this technique works really well with boxes with image backgrounds.</p>

<p><img src="http://www.f055.net/images/uploads/roundedimage.png" alt="Rounded image example" /></p>

<p>Next time, I will show how to make any block element with <b>rounded edges using pure CSS</b>! Stay tuned.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/LyqZPRMCwbvOpew9rSKXpC6F5BQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/LyqZPRMCwbvOpew9rSKXpC6F5BQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/LyqZPRMCwbvOpew9rSKXpC6F5BQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/LyqZPRMCwbvOpew9rSKXpC6F5BQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=elzTDFNu"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=AKiAXhPg"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=dxwu4izD"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=VfWe9cw1"><img src="http://feeds.feedburner.com/~f/f055?i=VfWe9cw1" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=7NVXZxg8"><img src="http://feeds.feedburner.com/~f/f055?i=7NVXZxg8" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/YajuvhKx0zA" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Development, HTML, CSS</dc:subject>
      <dc:date>2008-12-12T19:19:59+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/reusable-rounded-edges-using-css-and-html/</feedburner:origLink></item>

    <item>
      <title>Display Twitter timeline in Expression Engine - Part 1</title>
      <link>http://feedproxy.google.com/~r/f055/~3/wckLxKIFsrs/</link>
      <guid isPermaLink="false">http://f055.net/article/display-twitter-timeline-in-expression-engine-part-1/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/display-twitter-timeline-in-expression-engine-part-1/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/display-twitter-timeline-in-expression-engine-part-1/" height="61" width="51" /></a><p>You probably noticed on the right, there are my latest <a href="http://twitter.com" title="Twitter">Twitter</a> messages (you could <a href="http://twitter.com/f055" title="Follow me on Twitter">follow me</a>, too :). There are generally two ways to fetch tweets into Expression Engine (EE). One involves using a plugin to directly access your Twitter account and display messages. The other is about monitoring your feed (or any other, in fact) and pushing new messages to a special EE weblog. Today, I will focus on the first, simpler method.
</p><br /><p>First, you need to grab a Twitter plugin, for example the <a href="http://expressionengine.com/downloads/details/twitter_timeline/" title="Twitter Timeline">Twitter Timeline</a> developed by the EE team. The usage is easy, you just upload the contents to the plugin folder and activate the plugin in the <i>Plugin Manager</i> located in <i>Utilities</i>. One drawback of this plugin is that you have to explicitly type your Twitter password in the template.</p>

<blockquote><pre>&#123;exp:twitter_timeline type="friends" user="email@example.com" password="password1"&#125;</pre></blockquote>

<p>It is not a big issue if you run your EE alone, but in a group weblog it may be a problem. If so, wait for the <i>Part 2</i> of my description &#8212; feed-based method. Another issue is that by default, the plugin does not convert URLs to clickable links. The plugin on the <a href="http://expressionengine.com/downloads/details/twitter_timeline/" title="Twitter Timeline">EE site downloads</a> doesn&#8217;t seem to have any option to turn auto-converting on, but you could find a modified version <a href="http://expressionengine.com/forums/viewthread/96618/" title="Twitter Timeline plugin with auto-linking">on EE forums</a>. Or you could just make a small modification I came up with &#8212; locate the line <i>184</i> and modify the <i>if-condition</i> as shown, adding a regular expression, which makes the links clickable.</p>

<blockquote>
<pre>
184.	if ($count &gt; $this-&gt;limit)
185.	{
186.		$output = preg_replace("/(?&lt;!&lt;a href=\")((http|ftp)(s)?:\/\/[^&lt;&gt;\s]+)/i", "&lt;a rel=\"nofollow\" href=\"\\0\"&gt;\\0&lt;/a&gt;", $output );
187.
188.		return $output;
189.	}
</pre>
</blockquote>

<p>What the regular expression does, is it looks for occurrences of <i>HTTP</i>, <i>FTP</i>, <i>HTTPS</i> or <i>FTPS</i> and the <i>://</i> symbols, and retrieves the URL address. Then it swaps that with an HTML <i>a href</i> element linking to that retrieved URL. Hence, you get clickable links.</p>

<p>After you insert the <i>exp:twitter_timeline</i> tag in your template, you will have your Twitter timeline fetched straight to your weblog. And then you can write long posts using EE, as well as short messages with Twitter, both at one place for your readers to have a look at.</p>

<p>
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/-fxzJZTAjhcZHloMxSsvxGsWeA0/0/da"><img src="http://feedads.g.doubleclick.net/~a/-fxzJZTAjhcZHloMxSsvxGsWeA0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-fxzJZTAjhcZHloMxSsvxGsWeA0/1/da"><img src="http://feedads.g.doubleclick.net/~a/-fxzJZTAjhcZHloMxSsvxGsWeA0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=rfxELNUW"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=ASdEaXV5"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=W7ELU9Av"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=wQLXEHIK"><img src="http://feeds.feedburner.com/~f/f055?i=wQLXEHIK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=kBFrwSnj"><img src="http://feeds.feedburner.com/~f/f055?i=kBFrwSnj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/wckLxKIFsrs" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2008-12-10T19:31:41+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/display-twitter-timeline-in-expression-engine-part-1/</feedburner:origLink></item>

    <item>
      <title>How to defog a mirror in 30 seconds</title>
      <link>http://feedproxy.google.com/~r/f055/~3/l_YdLi4BUyY/</link>
      <guid isPermaLink="false">http://f055.net/article/how-to-defog-a-mirror-in-30-seconds/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/how-to-defog-a-mirror-in-30-seconds/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/how-to-defog-a-mirror-in-30-seconds/" height="61" width="51" /></a><p>What I hate the most is when I want to shave and the mirror is fogged. Waving a razor around my face without seeing what I am exactly doing is not safe, nor comfortable. And opening the bathroom doors and waiting for the air to filter is both long and cold. But I came up with one trick, which you probably already know, but if not &#8212; read on.
</p><br /><p>So the idea is to use a hair dryer. Plug it in, turn full on and blow into the mirror. After the initial 5 seconds of no reaction, the mirror will defog instantly.</p>

<p>The point is to heat the glass, so that the fog evaporates. Hence, if you&#8217;re tough enough, you could use a lighter and some spray (not recommended). But the hair dryer is the way to go. Look forward to more life-hacking tips next week.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/bYKCdjtbTfXAt2xI1lCh4q4VIEI/0/da"><img src="http://feedads.g.doubleclick.net/~a/bYKCdjtbTfXAt2xI1lCh4q4VIEI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bYKCdjtbTfXAt2xI1lCh4q4VIEI/1/da"><img src="http://feedads.g.doubleclick.net/~a/bYKCdjtbTfXAt2xI1lCh4q4VIEI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=AFbFkPYp"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=zHnyM6pe"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=uDojMWR9"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=6YH9Z6GZ"><img src="http://feeds.feedburner.com/~f/f055?i=6YH9Z6GZ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=QxcYl0p4"><img src="http://feeds.feedburner.com/~f/f055?i=QxcYl0p4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/l_YdLi4BUyY" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Lifehacking</dc:subject>
      <dc:date>2008-12-07T13:58:30+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/how-to-defog-a-mirror-in-30-seconds/</feedburner:origLink></item>

    <item>
      <title>Expression Engine Captcha vs Akismet</title>
      <link>http://feedproxy.google.com/~r/f055/~3/DgynLGR_2-k/</link>
      <guid isPermaLink="false">http://f055.net/article/expression-engine-captcha-vs-akismet/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/expression-engine-captcha-vs-akismet/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/expression-engine-captcha-vs-akismet/" height="61" width="51" /></a><p><a href="http://en.wikipedia.org/wiki/Spam_(electronic)" title="Spam">Spam</a> sucks. It&#8217;s like <b>the cancer of the Internet</b>. Blogs are a major target, as the comments are a perfect way to propagate links, keywords and such. Fortunately, we have some ways to fight it. One of them is <a href="http://en.wikipedia.org/wiki/Captcha" title="Captcha">Captcha</a>, funny looking images with text, that sometimes are <a href="http://www.flickr.com/photos/themattharris/2264117871/" title="Unreadable Captcha">so hard to read</a>, they actually block 100% of interaction. The other is automatic spam detection based on services like <a href="http://akismet.com/" title="Akismet">Akismet</a>. Both are available for Expression Engine (EE), but the latter seems better.
</p><br /><p>Turning on Captcha in EE is very simple &#8212; the system already comes with a Captcha generation and verification engine, so it&#8217;s just the matter of switching one setting in the <i>Comment Posting Preferences</i> of <i>Weblog Management</i>. On a side note, it&#8217;s a good idea to <b>require a valid email</b> address to comment, and if you have time to waste &#8212; to manually moderate comments.</p>

<p><img src="http://www.f055.net/images/uploads/commentsettings.png" alt="Comment Posting Preferences" /></p>

<p>The drawback of this method is that users have to type in the Captcha phrase before submitting their comments. It&#8217;s not a very user-friendly approach, as the obfuscated images require more attention to read than usual text (although EE Captcha is quite easy on obfuscation, however this makes it <a href="http://caca.zoy.org/wiki/PWNtcha" title="Captcha strength comparison">weak</a>).</p>

<p><img src="http://www.f055.net/images/uploads/captchaexample.png" alt="Expression Engine Captcha example" /></p>

<p>Besides, if the user fails, there&#8217;s a high chance he won&#8217;t comment at all. Finally, all the server side work that has to be done is quite disturbing. It doesn&#8217;t matter for small blogs, but once you hit hundreds of comments per post, it may become a problem. Also, <b>good Captcha engines are rare</b> &#8212; <a href="http://caca.zoy.org/wiki/PWNtcha" title="Captcha strength comparison">see the comparison</a>. Why not to <a href="http://en.wikipedia.org/wiki/Outsourcing" title="What is outsourcing?">outsource</a> spam filtering?</p>

<p>Here&#8217;s where <a href="http://akismet.com/" title="Akismet">Akismet</a> comes to play. It works automatically, sending all comments (and trackbacks!) to Akismet&#8217;s servers for verification. And if it decides that a particular entry is a spam, it just puts it away in EE for you to check wether it&#8217;s not a false positive.</p>

<p>How to setup Akismet system on EE? Well, the irony is, you need to create a <a href="http://wordpress.com/" title="Wordpress">Wordpress</a> blog for that. This step is essential, as Wordpress users get a free Akismet API key for personal use &#8212; without it, filtering won&#8217;t work. So after you sign up and wait about 15 minutes for the confirmation mail with the key, you can download the <a href="http://loweblog.com/freelance/article/akismet-for-expression-engine/" title="Akismet for ExpressionEngine Combo">Akismet for ExpressionEngine Combo</a>.</p>

<p>Extract the contents and upload accordingly to your EE system folders, then just go to <i>Extensions Manager</i> and configure the <i>Akismet Check</i> with your API key. Finally, go to <i>Modules</i> and install the Akismet filter. Here you will get all the comments marked as spam. Remember to disable using Captchas, unless you&#8217;re really into it and want to use double protection.</p>


<p><a href="http://feedads.g.doubleclick.net/~a/aFN_y5YMFeKPS-NwkY4U5Ej3D8o/0/da"><img src="http://feedads.g.doubleclick.net/~a/aFN_y5YMFeKPS-NwkY4U5Ej3D8o/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/aFN_y5YMFeKPS-NwkY4U5Ej3D8o/1/da"><img src="http://feedads.g.doubleclick.net/~a/aFN_y5YMFeKPS-NwkY4U5Ej3D8o/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=28kMdQ1L"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=hO8JaZna"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=HF62Ju2w"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=2blPfFjz"><img src="http://feeds.feedburner.com/~f/f055?i=2blPfFjz" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=rbhvaUak"><img src="http://feeds.feedburner.com/~f/f055?i=rbhvaUak" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/DgynLGR_2-k" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2008-12-06T20:07:36+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/expression-engine-captcha-vs-akismet/</feedburner:origLink></item>

    <item>
      <title>Expression Engine discussion forum - make a sticky topic</title>
      <link>http://feedproxy.google.com/~r/f055/~3/rdS0ra-4NbQ/</link>
      <guid isPermaLink="false">http://f055.net/article/expression-engine-discussion-forum-make-a-sticky-topic/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/expression-engine-discussion-forum-make-a-sticky-topic/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/expression-engine-discussion-forum-make-a-sticky-topic/" height="61" width="51" /></a><p>I just wanted to make a sticky out of one topic on the <a href="http://tweet.im/" title="tweet.IM">tweet.IM</a> service discussion forum, and found that it&#8217;s ridiculously difficult to locate this option. After quick googling I have found the solution and I thought it would be better to highlight it in case I forget.
</p><br /><p>It&#8217;s very easy once you know where to look. The <b>sticky option</b>, as well as <b>announcing the topic</b> or setting it as <b>closed</b>, is hidden on the <i>New Topic</i> page (you can also edit the first post of the topic to have access to these options). There&#8217;s a little link <i>More Options</i> just below the <i>Options</i> section.</p>

<p><img src="http://www.f055.net/images/uploads/postform.png" alt="More options" /></p>

<p>Once you click on it, additional checkboxes appear with the options you were looking for. I have no idea why wouldn&#8217;t they just show it by default.</p>

<p><img src="http://www.f055.net/images/uploads/moreoptions.png" alt="More option revealed" />
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/1AU9JcsWlt7VR1iz2OmVPLUxDaA/0/da"><img src="http://feedads.g.doubleclick.net/~a/1AU9JcsWlt7VR1iz2OmVPLUxDaA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/1AU9JcsWlt7VR1iz2OmVPLUxDaA/1/da"><img src="http://feedads.g.doubleclick.net/~a/1AU9JcsWlt7VR1iz2OmVPLUxDaA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=n1CTKC6a"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=tzDqFZqB"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=uqeB6vok"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=dgNkeGkk"><img src="http://feeds.feedburner.com/~f/f055?i=dgNkeGkk" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=aYKOhlhm"><img src="http://feeds.feedburner.com/~f/f055?i=aYKOhlhm" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/rdS0ra-4NbQ" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2008-12-04T15:01:35+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/expression-engine-discussion-forum-make-a-sticky-topic/</feedburner:origLink></item>

    <item>
      <title>Leopard global ‘Open file with’ setting</title>
      <link>http://feedproxy.google.com/~r/f055/~3/YrJEwdF_oJ4/</link>
      <guid isPermaLink="false">http://f055.net/article/leopard-global-open-file-with-setting/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/leopard-global-open-file-with-setting/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/leopard-global-open-file-with-setting/" height="61" width="51" /></a><p><a href="http://www.apple.com" title="Apple">Apple</a> <a href="http://en.wikipedia.org/wiki/Mac_OS_X_v10.5" title="Mac OS X 10.5">Mac OS X 10.5</a>, nicely called Leopard, is one of the best operating systems I had chance to work with. The others are <a href="http://en.wikipedia.org/wiki/Mac_OS_X_v10.4" title="Tiger">Tiger</a> and <a href="http://en.wikipedia.org/wiki/Mac_OS_X_v10.3" title="Panther">Panther</a>, 10.4 and 10.3 respectively. You see a pattern here, and although I am very fond of <a href="http://en.wikipedia.org/wiki/Windows_XP" title="Windows XP">XP</a> and actually kind of like <a href="http://en.wikipedia.org/wiki/Windows_Vista" title="Windows Vista">Vista</a>, I&#8217;m not an <a href="http://www.microsoft.com" title="Microsoft Corp.">MS</a> fan. But I acknowledge the pros and cons of each of them. One irritating thing Leopard has is that when you select a document to open with a specific application, then even though you choose to always open it with that app, it doesn&#8217;t propagate to all documents of that kind. Unlike in systems from Redmond, you have to change that property in the document&#8217;s info. I&#8217;ll show you where it is.
</p><br /><p>First, you have to find the document of the kind that you want to open with a particular application. Say you want to set that <i>.doc</i> files are always opened with <a href="http://www.neooffice.org/" title="NeoOffice">NeoOffice</a>, instead of the default <a href="http://en.wikipedia.org/wiki/TextEdit" title="TextEdit">TextEdit</a> (check the Easter Egg in Wiki entry, btw). When you view its information window, either by clicking right button and selecting <i>Get info</i> or using the shortcut &#63743;+I, you should see something like this:</p>

<p><img src="http://www.f055.net/images/uploads/textdoc.png" alt="Document info window" /></p>

<p>From the <i>Open with</i> section, select the application of your choice &#8212; NeoOffice in this case. The <i>Change all</i> button will become enabled, and when you click it and confirm the dialog, all documents of the same kind will from now on be opened using NeoOffice.</p>

<p><img src="http://www.f055.net/images/uploads/neoconfirm.png" alt="Document app change dialog" /></p>

<p>And that&#8217;s it. The mini icon of the document will change, and all other documents of that type will have their icon changed after the next system restart.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/SR3MN0_6tz8gX62WL8zfCrdP0wc/0/da"><img src="http://feedads.g.doubleclick.net/~a/SR3MN0_6tz8gX62WL8zfCrdP0wc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/SR3MN0_6tz8gX62WL8zfCrdP0wc/1/da"><img src="http://feedads.g.doubleclick.net/~a/SR3MN0_6tz8gX62WL8zfCrdP0wc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=LLWkSIFt"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=OnZEwd98"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=MKMZj8TQ"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=kMvAodIT"><img src="http://feeds.feedburner.com/~f/f055?i=kMvAodIT" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=Ego2wQSu"><img src="http://feeds.feedburner.com/~f/f055?i=Ego2wQSu" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/YrJEwdF_oJ4" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Apple</dc:subject>
      <dc:date>2008-12-02T12:57:04+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/leopard-global-open-file-with-setting/</feedburner:origLink></item>

    <item>
      <title>Simple yet perfect 2 column layout</title>
      <link>http://feedproxy.google.com/~r/f055/~3/pIcDAnuwBXk/</link>
      <guid isPermaLink="false">http://f055.net/article/simple-yet-perfect-2-column-layout/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/simple-yet-perfect-2-column-layout/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/simple-yet-perfect-2-column-layout/" height="61" width="51" /></a><p>Your probably have seen the <a href="http://matthewjamestaylor.com/" title="Matthew James Taylor">Matthew James Taylor</a> perfect liquid layouts. They are really good and I recommend them, but sometimes they are just overcomplicated for the task. This blog template uses a simplified version of 2 column layout that I came up with while working on it. It&#8217;s <a href="http://f055.net/article/lazy-compatibility/" title="Lazy compatibility">lazy compatible</a> and here&#8217;s how it looks like.
</p><br /><p>Let&#8217;s assume you wish to have page that is 100% wide, with a top and bottom bar across it, and 2 columns in the middle. So you could code it in HTML as follows:</p>

<blockquote>
<pre>
...
&lt;body&gt;
	&lt;div id="header"&gt;&lt;/div&gt;
	&lt;div id="content"&gt;
		&lt;div id="col_left"&gt;&lt;/div&gt;
		&lt;div id="col_right"&gt;&lt;/div&gt;
	&lt;/div&gt;
	&lt;div id="footer"&gt;&lt;/div&gt;
&lt;/body&gt;
...
</pre>
</blockquote>

<p>Now the appropriate CSS for that to work as a simple 2 column liquid layout is like that:</p>

<blockquote>
<pre>
div#header {
	position: relative;
	width: 100%;
	clear: both;
}

div#content {
	position: relative;
	width: 100%;
}

div#col_left {
	float: left;
	width: 50%;
}

div#col_right {
	float: right;
	width: 50%;
}

div#footer {
	position: relative;
	width: 100%;
	clear: both;
}
</pre>
</blockquote>

<p>Essentially, a <i>div</i> that you wish to be a single column has to be style with <i>clear: both</i> property and positioned relatively. While the 2 columns have to be floated left and right, and have to have the <i>width</i> property explicitly defined. The result of the above code looks like that:</p>

<p><img src="http://www.f055.net/images/uploads/2cols.png" alt="Simple 2 column liquid layout" /></p>

<p>The good thing is that you can nest another 2 columns inside one of the columns, on and on again (like on this blog, the articles and the Twitter feed are on 2 different columns, while the categories and comments links under the article are again in 2 different columns). You can simplify the given code further by making a general class for the single column elements, with <i>position</i>, <i>clear</i> and <i>width</i> defined.</p>

<p><a href="http://www.f055.net/images/uploads/2cols.html" title="Simple 2 column liquid layout">Download the HTML file</a> to play with the code.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/29ajSfV1C0keN47XBRjR623-z2U/0/da"><img src="http://feedads.g.doubleclick.net/~a/29ajSfV1C0keN47XBRjR623-z2U/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/29ajSfV1C0keN47XBRjR623-z2U/1/da"><img src="http://feedads.g.doubleclick.net/~a/29ajSfV1C0keN47XBRjR623-z2U/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=NI8BvKF7"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=JxC5q4q8"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=SbZhCLpk"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=p70sB0w8"><img src="http://feeds.feedburner.com/~f/f055?i=p70sB0w8" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=mmU3Lg2s"><img src="http://feeds.feedburner.com/~f/f055?i=mmU3Lg2s" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/pIcDAnuwBXk" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Lazy, CSS</dc:subject>
      <dc:date>2008-12-01T18:13:22+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/simple-yet-perfect-2-column-layout/</feedburner:origLink></item>

    <item>
      <title>Expression Engine and Google friendly links</title>
      <link>http://feedproxy.google.com/~r/f055/~3/rUYhgaNqfBM/</link>
      <guid isPermaLink="false">http://f055.net/article/expression-engine-and-google-friendly-links/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/expression-engine-and-google-friendly-links/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/expression-engine-and-google-friendly-links/" height="61" width="51" /></a><p>We all know that <a href="http://en.wikipedia.org/wiki/Search_engine_optimization" title="Search Engine Optimization">Search Engine Optimization</a> (SEO) is very important. When I am looking for something on the web, I generally don&#8217;t ask around or look through link directories &#8212; I do a quick search on <a href="http://www.google.com" title="Google">Google</a>. So the higher something appears in the search list, the better for that page&#8217;s author. Cause I&#8217;m most likely to click that, not the one that is 20 pages later. Therefore, it is important how you present your content and how you link to it (because Google collects links and ranks the content). Expression Engine (EE) can&#8217;t do much about your content, but has by default, a very nasty, search-engine unfriendly way of creating links. Let&#8217;s fix it.
</p><br /><p>If you look at your website URL you will see that each entry has a link with a lot of unnecessary stuff.</p>

<blockquote><p>
Nasty URL:
</p><pre>http://yourdomain.com/index.php/site/entry/entry-title</pre>
</blockquote>

<p>Not only you have <i>index.php</i> explicitly, you also get the template group name <i>site</i>. It&#8217;s even worse when you list all entries form a category, because you get vague category identifiers, like <i>C4</i> etc. But it can all be changed.</p>

<p>First, <a href="http://expressionengine.com/wiki/Remove_index.php_From_URLs/" title="Remove index.php from URL">this article</a> describes in details how to remove the index.php and the template group name. Long story short (that worked for me) is to download the <a href="http://leevigraham.com/cms-customisation/expressionengine/lg-htaccess-generator/" title="LG .htaccess Generator">LG .htaccess Generator</a> and make some modifications to the initial .htaccess template you&#8217;re presented with. The .htaccess file will handle the process of rewriting the search-engine friendly URL to something EE understands. So now, you&#8217;ll be able to use entry links like the following:</p>

<blockquote><p>
Pretty URL:
</p><pre>http://yourdomain.com/entry/entry-title</pre>
</blockquote>

<p>But before that, note 2 things. One is that the LG .htaccess Generator appends the generated code to the .htaccess file &#8212; so you&#8217;d better remove it and create a blank one every time you want to re-generate it. Second things is that strangely, the default rewrite rules didn&#8217;t work quite well for me. I had to modify them to stop getting Internal Server Errors, as well as to remove the nasty <i>index.php</i> appearing in the front page URL after it was stripped from the <i>www</i> prefix.</p>

<blockquote><p>
My .htaccess rules:
</p><pre># Dont list files in index pages
IndexIgnore *

RewriteEngine On

RewriteBase /

# Remove the www
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]

# Rewrite homepage urls that have the Google Analyticis query string
# CampaignMonitor adds the query string in their emails
# "site" is the template group
# "index" is the template name
# The template group and template should point to your sites index
RewriteCond %{QUERY_STRING} ^utm_medium
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteRule (.*) /index.php?/pages/index/&amp;%{QUERY_STRING} [L]

# Add a trailing slash to paths without an extension
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule ^(.*)$ $1/ [L,R=301]

# Remove index.php
# Uses the "include method"
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5})$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/({ee:template_groups}|{ee:pages}|members|P[0-9]{2,8}) [NC]
RewriteRule ^(.*)$ /index.php?$1&amp;%{QUERY_STRING}</pre>
</blockquote>

<p>All what is left to do is to change the paths accordingly, so that you don&#8217;t have the <i>index.php</i> everywhere. Go to <i>Admin - System Preferences - General Configuration</i> and remove the name of your index page, leave the field blank. Then go to <i>Admin - Weblog Administration - Weblog Management - Edit Preferences - Path Settings</i>, and remove the <i>index.php</i> and template group name from these URLs &#8212; except the search address. Also, remove the <i>{my_template_group}</i> from links in your template.</p>

<p>The last step is to make categories more readable. Go to <i>Admin - Weblog Administration - Global Weblog Preferences</i> and set <i>Use Category URL Titles In Links?</i> to <i>Yes</i>. Then choose your keyword for the categories, i.e. <i>category</i>, in <i>Category URL Indicator</i> &#8212; your category links will appear like that:</p>

<blockquote><p>
Pretty category URL:
</p><pre>http://yourdomain.com/category/category-name</pre>
</blockquote>

<p>And that&#8217;s it. Now your links look nice, just like mine on this blog. Just <a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=35291" title="Google about SEO">read some about SEO</a>, because the content optimization is all in your hands.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/FLUYWvnq8rhDwjeyliYNx9ul5zQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/FLUYWvnq8rhDwjeyliYNx9ul5zQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/FLUYWvnq8rhDwjeyliYNx9ul5zQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/FLUYWvnq8rhDwjeyliYNx9ul5zQ/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=9yrVkRDY"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=GewKmnU3"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=71UmehM1"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=ru2w9nja"><img src="http://feeds.feedburner.com/~f/f055?i=ru2w9nja" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=P3uQCpCH"><img src="http://feeds.feedburner.com/~f/f055?i=P3uQCpCH" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/rUYhgaNqfBM" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2008-11-30T17:27:00+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/expression-engine-and-google-friendly-links/</feedburner:origLink></item>

    <item>
      <title>Expression Engine images in RSS feed</title>
      <link>http://feedproxy.google.com/~r/f055/~3/7QnhaBBGVvM/</link>
      <guid isPermaLink="false">http://f055.net/article/expression-engine-images-in-rss-feed/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/expression-engine-images-in-rss-feed/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/expression-engine-images-in-rss-feed/" height="61" width="51" /></a><p><a href="http://expressionengine.com/" title="Expression Engine">Expression Engine</a> (EE) is running this blog, and I have to say &#8212; <b>EE is so much better</b> than <a href="http://wordpress.org/" title="Wordpress">Wordpress</a>. First of all, the control panel is so intuitive. Secondly, making templates is so simple. Thirdly, writing plugins is so obvious, that I really have no idea why Wordpress is still <i>the</i> blogging platform. But then again, <b>the crowd is often wrong</b>... Anyway, one irritating and not much documented bug is that EE doesn&#8217;t show images or any formatting when using default RSS feed template. Here&#8217;s how to fix it.
</p><br /><p>The problem is in the <i>description</i> tag, which contents are XML encoded. The default template post is inserted in the RSS using the following code:</p>

<blockquote><pre>&lt;description&gt;&#123;exp:xml_encode&#125;{summary}{body}&#123;/exp:xml_encode&#125;&lt;/description&gt;</pre></blockquote>

<p>However, this produces raw text, stripping all images and HTML formatting from your post. A quick fix for that is to replace that line with such code:</p>

<blockquote><pre>&lt;content:encoded&gt;&lt;![CDATA[{summary}{body}]]&gt;&lt;/content:encoded&gt;</pre></blockquote>

<p>And that&#8217;s it. You will see your images, paragraphs and such, all displayed correctly in, for example <a href="http://www.google.com/reader" title="Google Reader">Google Reader</a> (my feed reader of choice, btw). I wonder why don&#8217;t they use that by default? Also, I think the default EE Atom template could work better, but if you stick with EE handling your feeds, you&#8217;d better change that RSS part. Or use Atom and <a href="http://www.feedburner.com/" title="FeedBurner">FeedBurner</a>, it has an automatic on-the-fly conversion to any feed format your users require.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/6K4NN7_gxxjc0zQVVaPAIqNfADM/0/da"><img src="http://feedads.g.doubleclick.net/~a/6K4NN7_gxxjc0zQVVaPAIqNfADM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6K4NN7_gxxjc0zQVVaPAIqNfADM/1/da"><img src="http://feedads.g.doubleclick.net/~a/6K4NN7_gxxjc0zQVVaPAIqNfADM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=zhZyG5IV"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=rMjlB0Ue"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=Ccx1RiKb"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=7OwdGPKL"><img src="http://feeds.feedburner.com/~f/f055?i=7OwdGPKL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=ONl9zL3l"><img src="http://feeds.feedburner.com/~f/f055?i=ONl9zL3l" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/7QnhaBBGVvM" height="1" width="1"/>]]></content:encoded>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2008-11-28T22:09:20+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/expression-engine-images-in-rss-feed/</feedburner:origLink></item>

    <item>
      <title>Be smart with your CSS</title>
      <link>http://feedproxy.google.com/~r/f055/~3/Ov-psubVcYY/</link>
      <guid isPermaLink="false">http://f055.net/article/be-smart-with-your-css/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/be-smart-with-your-css/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/be-smart-with-your-css/" height="61" width="51" /></a><p>Whether you agree or not, Cascading Style Sheets have become one of the key elements of modern websites. HTML was said to be just a container, possibly semantically organized, for your data. In fact, some people would love to see HTML be like XML, and I am one of them. The distinction between raw data (XML) and presentation layer (XSLT) gives you flexibility and makes data display simple. But for starters, it&#8217;s like shooting a fly with a canon. So take good care of your CSS, or you&#8217;ll end up in a big mess of data and styling. Here&#8217;s one idea I came up with while making this blog.
</p><br /><p>First of all, try not to use any styling HTML markup. <b>Get rid of non-breaking spaces, break-lines etc.</b> If you want to make spacing between elements, use padding or margin in CSS. If you want to make an empty line between paragraphs, don&#8217;t type 3 break-lines, use the paragraph tag and styling.</p>

<blockquote><p>Don&#8217;t use non-breaking spaces or break-lines:
</p><pre>&lt;a href="#"&gt;Link 1&lt;/a&gt; &amp;nbsp; &lt;a href="#"&gt;Link 2&lt;/a&gt; &amp;nbsp; &lt;a href="#"&gt; &amp;nbsp; &lt;/a&gt;</pre>
<pre>[paragraph 1]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[paragraph 2]</pre>
</blockquote>

<p><a href="http://en.wikipedia.org/wiki/Semantic_Web" title="Semantic">Semantic</a> data is the hot topic now, but <a href="http://www.ermanz.govt.nz/news-events/archives/presentations/semantichtml.html" title="Semantic HTML by Joseph Lindsay">creating your HTML semantically</a> does make sense. For example, instead of calling your comments and trackbacks <i>bottom-links</i>, call them <i>feedback</i>. <b>Don&#8217;t name classes and identifiers after styling properties</b>, like <i>blue-right-fadeout</i> &#8212; it&#8217;s better to name it by it&#8217;s content, i.e. <i>twitter sidebar</i>.</p>

<p>Another good idea is to <b>actually use lists, tables and paragraphs</b> where they have purpose. For example, don&#8217;t just put important links to categories or subscriptions as plain <i>a href</i> inline elements. It&#8217;s a list of links, so why not to actually use an unordered list? Also, make use of headers, there&#8217;s a whooping 6 of them and the could all be helpful.</p>

<blockquote>
<pre>
&lt;h3&gt;Subscribe:&lt;/h3&gt; 
&lt;ul&gt;
	&lt;li&gt;&lt;a class="rss ico" href="http://feeds.feedburner.com/f055"&gt;RSS feed&lt;/a&gt;&lt;/li&gt; 
	&lt;li&gt;&lt;a href="http://twitter.com/f055"&gt;Twitter&lt;/a&gt;&lt;/li&gt; 
	&lt;li&gt;&lt;a href="http://www.feedburner.com/fb/a/emailverifySubmit?feedId=2696605&amp;loc=en_US"&gt;Email&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
</pre>
</blockquote>

<p>Don&#8217;t worry about the looks, you can always display them inline using CSS. And about that, one clever technique I started implementing is to <b>divide the raw CSS from the color one</b>. Not sure what I mean? Check my raw blog CSS at <a href="http://f055.net/blog/print/" title="f055 print version">f055.net/blog/print/</a> &#8212; yes, you are right, this is what you would get if you printed the website.</p>

<p>What you do is create 2 CSS files, like <i>raw.css</i> and <i>color.css</i>. You define all colorful tags in the latter CSS &#8212; <i>color</i>, <i>background</i>, <i>text-decoration</i> all go there. The former, raw CSS is for general arrangement, <i>div</i> layout etc. I also used it for generic font families and sizes, but you could remove that and make it even more raw. Like when you read <a href="http://www.ietf.org/rfc.html" title="Request For Comments">RFC</a> (ok, you won&#8217;t make your site plain text&#8230;)</p>

<blockquote>
<pre>
raw.css:					color.css:
body {						body {
	border: 0;					background: url(gfx/tiles.png) top left repeat-x #00f;
	margin: 0;					color: #fff;
	padding: 0;				}

	font-family: sans-serif;
}
</pre>
</blockquote>

<p>There are 3 advantages of this approach:
</p><ol>
<li>You have a raw, <b>highly accessible CSS</b>, good for printing and <a href="http://en.wikipedia.org/wiki/Universal_access" title="Universal access">universal access</a></li>
<li>You can easily change color themes</li>
<li>Your CSS is organized even further</li>
</ol>

<p>It doesn&#8217;t matter how many separate CSS files you have, so think how you could <b>make your life easier</b> using more than one. Remember the times when people would write bulletin boards in one PHP <i>index</i> file? <a href="http://en.wikipedia.org/wiki/Divide_and_conquer_algorithm" title="Divide and conquer">Divide and conquer</a> is the way&#8230;</p>

<p>PS. Raw CSS could be stripped of all <i>div</i> positioning and font-styling, which is probably the ideal universal access approach.
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/HjCVeRxVABho1Ls55xD52PpkYI0/0/da"><img src="http://feedads.g.doubleclick.net/~a/HjCVeRxVABho1Ls55xD52PpkYI0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/HjCVeRxVABho1Ls55xD52PpkYI0/1/da"><img src="http://feedads.g.doubleclick.net/~a/HjCVeRxVABho1Ls55xD52PpkYI0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=sWgmxIHW"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=WLIekpze"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=l3KKHveF"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=8rpNP1uX"><img src="http://feeds.feedburner.com/~f/f055?i=8rpNP1uX" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=Zxe5NzCc"><img src="http://feeds.feedburner.com/~f/f055?i=Zxe5NzCc" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/Ov-psubVcYY" height="1" width="1"/>]]></content:encoded>
      <dc:subject>CSS</dc:subject>
      <dc:date>2008-11-27T21:22:59+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/be-smart-with-your-css/</feedburner:origLink></item>

    <item>
      <title>Lazy compatibility</title>
      <link>http://feedproxy.google.com/~r/f055/~3/z-nxsHClXDI/</link>
      <guid isPermaLink="false">http://f055.net/article/lazy-compatibility/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/lazy-compatibility/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/lazy-compatibility/" height="61" width="51" /></a><p>Preparing a website to be compatible (and backward-compatible) with all the different browsers and their versions is a pain. It literally destroys everything you designed and developed, because it often requires changes in the HTML, clutters CSS with new special cases etc. and generally forces you to compromise. I claim this unnecessary &#8212; I claim you could spend less time and resources on it (and money) and it would not hurt your image as much as you think.
</p><br /><p>I have a small website that generates around 100 unique visits daily, and looking at the statistics I see two things. Firstly, <b>Internet Explorer is not as dominant anymore</b> as it used to be. Firefox is in the lead by more than 5%, while Opera is constantly gaining in pursuit of IE. Interestingly though, <b>number 4 and 5 is Safari and Chrome</b>. It really is pleasing to see four out of five top browsers to be the compatible ones.</p>

<p><img src="http://www.f055.net/images/uploads/browserstat.png" alt="Browser statistics based on visits" /></p>

<p>It is not so pleasing to see that almost <b>38% of IE users are still on version 6</b>, the worst nightmare of the web. Not because it was a bad browser, it was bad <b>and</b> most popular browser. The horror&#8230; It may be a difficult decision to focus on IE7, but its previous version had so many incompatibilities (like no alpha channel), that it actually takes more hacking than the result is worth.</p>

<p><img src="http://www.f055.net/images/uploads/browserstat_ie.png" alt="Internet Explorer browser statistics based on visits" /></p>

<p>I hope within a year or so IE6 should vanish into one digit market-share (it&#8217;s 20% now, according to <a href="http://www.w3schools.com/browsers/browsers_stats.asp" title="Global browser statistics">w3schools</a>). And the time spent on customizing your site for it could have been used in a much better way. Therefore, I say &#8212; this is the new compatibility list: <b>Firefox, Safari, Opera, IE7 and Chrome</b>.</p>

<p>What are the pros? All these browsers except IE7 are virtually the same in rendering most of the HTML and CSS code. So in fact, you end up coding for just one. And making it look good for IE7 is just a matter of fixing some margins and paddings.</p>

<p>What are the cons? IE6 users don&#8217;t always like what they see, but maybe that make them think to upgrade. And that&#8217;s kind of a positive side&#8230;
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/4RC-B6LkeX3WcCK-F4l7ICIGhUw/0/da"><img src="http://feedads.g.doubleclick.net/~a/4RC-B6LkeX3WcCK-F4l7ICIGhUw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4RC-B6LkeX3WcCK-F4l7ICIGhUw/1/da"><img src="http://feedads.g.doubleclick.net/~a/4RC-B6LkeX3WcCK-F4l7ICIGhUw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=GJFN2KUQ"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=ZVksp4QB"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=5zjJalq7"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=NZCgQ57H"><img src="http://feeds.feedburner.com/~f/f055?i=NZCgQ57H" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=Y4tpuPNk"><img src="http://feeds.feedburner.com/~f/f055?i=Y4tpuPNk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/z-nxsHClXDI" height="1" width="1"/>]]></content:encoded>
      <dc:subject>Lazy, Development</dc:subject>
      <dc:date>2008-11-26T12:49:40+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/lazy-compatibility/</feedburner:origLink></item>

    <item>
      <title>Welcome</title>
      <link>http://feedproxy.google.com/~r/f055/~3/Temwak_ysLQ/</link>
      <guid isPermaLink="false">http://f055.net/article/welcome/</guid>
      <content:encoded><![CDATA[<a href="http://api.tweetmeme.com/share?url=http://f055.net/article/welcome/" style="float: right;"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http://f055.net/article/welcome/" height="61" width="51" /></a><p>This post is my first one on this blog about <i>lazy d</i> &#8212; design and development. How to make a lot of stuff with small amount of time? Don&#8217;t create yourself more problems than you already have. Or in other words &#8212; make things simple.
</p><br /><p>You will find here many concrete materials. I release them all on <b>Creative Commons License</b>, so you can virtually do whatever you want with them in your personal projects, as long as you stick to the license (more details in the footer). The question you have is probably like &#8212; who am I to talk? Well&#8230; I have been creating websites since 1999. The good old days, when sites looked like straight from FrontPage, not matter what you did. I admit it, until about 2004 I really sucked. Then I sucked a bit less.</p>

<p>Now, in the hype of Web 2.0 (<a href="http://www.techcrunch.com/2008/10/10/an-ignoble-but-much-needed-end-to-web-20/" title="The end of Web 2.0">some say</a> it&#8217;s already dead) I found myself really interested in web services &amp; applications development, the <a href="http://en.wikipedia.org/wiki/Software_as_a_service" title="Software as a service">SaaS</a> approach, usability and web application interfaces and the general, pleasant user experience. And I found I kind of like what I create (narcism or what&#8230;).</p>

<p>The only problem is my head filled with ideas vs. 24 hours in a day. Now how in the world am I going to do all this?! It certainly needs a different approach. That is what I call <i>lazy design and development</i>. It&#8217;s hard to define the term, except that <b>the aim is to create as much as one can in the least amount of time</b>. You will see what I mean. I recommend you subscribe to my RSS feed, cause this trip will take longer than one post. Let&#8217;s go then.</p>

<p>
</p>
<p><a href="http://feedads.g.doubleclick.net/~a/cNfrxzcAnPASE0g91NPHnJDECNU/0/da"><img src="http://feedads.g.doubleclick.net/~a/cNfrxzcAnPASE0g91NPHnJDECNU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cNfrxzcAnPASE0g91NPHnJDECNU/1/da"><img src="http://feedads.g.doubleclick.net/~a/cNfrxzcAnPASE0g91NPHnJDECNU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/f055?a=4e76z9Si"><img src="http://feeds.feedburner.com/~f/f055?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=zIM1NMxL"><img src="http://feeds.feedburner.com/~f/f055?d=133" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=bmQLMCh7"><img src="http://feeds.feedburner.com/~f/f055?d=124" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=9gnrMcbI"><img src="http://feeds.feedburner.com/~f/f055?i=9gnrMcbI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/f055?a=KNmPFbhU"><img src="http://feeds.feedburner.com/~f/f055?i=KNmPFbhU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/f055/~4/Temwak_ysLQ" height="1" width="1"/>]]></content:encoded>
      <dc:subject>News</dc:subject>
      <dc:date>2008-11-25T15:10:53+00:00</dc:date>
    <feedburner:origLink>http://f055.net/article/welcome/</feedburner:origLink></item>

    
    </channel>
</rss>
