<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>lazutkin.com</title>
    <link>https://www.lazutkin.com/</link>
    <description>Recent content on lazutkin.com</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>Copyright (c) Eugene Lazutkin 2005-2026, all rights reserved.</copyright>
    <lastBuildDate>Fri, 11 Jul 2014 14:41:40 -0500</lastBuildDate>
    <atom:link href="https://www.lazutkin.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>heya-unify: back to JS</title>
      <link>https://www.lazutkin.com/blog/2014/07/11/heya-unify-back-to-js/</link>
      <pubDate>Fri, 11 Jul 2014 14:41:40 -0500</pubDate>
      <guid>https://www.lazutkin.com/blog/2014/07/11/heya-unify-back-to-js/</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;https://www.lazutkin.com/images/posts/2014-07-11-heya-unify-back-to-js.jpg&#34; width=&#34;500&#34; height=&#34;250&#34; layout=&#34;responsive&#34;&gt;&lt;/amp-img&gt; --&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lazutkin.com/images/posts/2014-07-11-heya-unify-back-to-js.jpg&#34; alt=&#34;heya-unify: back to JS&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;As programmers we rarely have a luxury to write a project from scratch. Usually we have&#xA;to retrofit existing projects with all cool things we need. If a new component, or a library&#xA;we want to use introduces new concepts that bleed outside its boundary, we have a &amp;ldquo;culture clash&amp;rdquo;,&#xA;when old code is unaware about new concepts have to work with it anyhow. Sometimes the clash is so bad&#xA;that we have to give up on using shiny new things, or have to significantly rework their code,&#xA;which requires time and efforts we cannot afford.&lt;/p&gt;</description>
    </item>
    <item>
      <title>heya-unify: incomplete objects</title>
      <link>https://www.lazutkin.com/blog/2014/06/18/heya-unify-incomplete-objects/</link>
      <pubDate>Wed, 18 Jun 2014 00:54:05 -0500</pubDate>
      <guid>https://www.lazutkin.com/blog/2014/06/18/heya-unify-incomplete-objects/</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;https://www.lazutkin.com/images/posts/2014-06-18-heya-unify-incomplete-objects.jpg&#34; width=&#34;500&#34; height=&#34;250&#34; layout=&#34;responsive&#34;&gt;&lt;/amp-img&gt; --&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lazutkin.com/images/posts/2014-06-18-heya-unify-incomplete-objects.jpg&#34; alt=&#34;heya-unify: incomplete objects&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Incomplete objects allow us to concentrate on important properties of JavaScript objects&#xA;ignoring the rest: we don&amp;rsquo;t need to specify every single property, and we can deal with&#xA;cyclical graphs.&lt;/p&gt;&#xA;&lt;p&gt;Incomplete arrays is a complimentary feature to inspect only the first few array items.&lt;/p&gt;&#xA;&lt;p&gt;Both features are very useful for patterns, and &lt;a href=&#34;https://github.com/heya/unify&#34;&gt;heya-unify&lt;/a&gt; provides rich facilities to automate&#xA;creating incomplete objects: they can be marked up explicitly on per-instance basis, recursively&#xA;with a special utility, and we can specify how to deal with objects by default during unification.&lt;/p&gt;</description>
    </item>
    <item>
      <title>heya-unify: custom unification</title>
      <link>https://www.lazutkin.com/blog/2014/06/10/heya-unify-custom-unification/</link>
      <pubDate>Tue, 10 Jun 2014 00:24:00 -0500</pubDate>
      <guid>https://www.lazutkin.com/blog/2014/06/10/heya-unify-custom-unification/</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;https://www.lazutkin.com/images/posts/2014-06-10-heya-unify-custom-unification.jpg&#34; width=&#34;500&#34; height=&#34;250&#34; layout=&#34;responsive&#34;&gt;&lt;/amp-img&gt; --&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lazutkin.com/images/posts/2014-06-10-heya-unify-custom-unification.jpg&#34; alt=&#34;heya-unify: custom unification&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Custom unification in &lt;a href=&#34;https://github.com/heya/unify&#34;&gt;heya-unify&lt;/a&gt; allows us to deal with our specific objects in JavaScript,&#xA;create unification helpers, and even custom logical conditions. It is there to bridge unification&#xA;with our existing projects.&lt;/p&gt;&#xA;&lt;!-- More --&gt;&#xA;&lt;p&gt;Looking at &lt;a href=&#34;https://www.lazutkin.com/blog/2014/05/18/unification-for-js/&#34;&gt;the 1st part&lt;/a&gt; and&#xA;&lt;a href=&#34;https://www.lazutkin.com/blog/2014/06/05/when-to-unify-in-js/&#34;&gt;the 2nd part&lt;/a&gt; of the series is recommended before diving into details.&lt;/p&gt;&#xA;&lt;h2 id=&#34;custom-unification&#34;&gt;Custom unification&lt;/h2&gt;&#xA;&lt;p&gt;Unification makes comparing simple objects a cinch no matter how complex they are, and we can easily apply it&#xA;to JSON-like trees as is. Additionally &lt;a href=&#34;https://github.com/heya/unify&#34;&gt;heya-unify&lt;/a&gt; &amp;ldquo;knows&amp;rdquo; how to unify other common JavaScript objects:&#xA;dates, and regular expressions. Yet in Real Life™ we are faced with complications like that:&lt;/p&gt;</description>
    </item>
    <item>
      <title>When to unify in JS</title>
      <link>https://www.lazutkin.com/blog/2014/06/05/when-to-unify-in-js/</link>
      <pubDate>Thu, 05 Jun 2014 18:10:33 -0500</pubDate>
      <guid>https://www.lazutkin.com/blog/2014/06/05/when-to-unify-in-js/</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;https://www.lazutkin.com/images/posts/2014-06-05-when-to-unify-in-js.jpg&#34; width=&#34;500&#34; height=&#34;250&#34; layout=&#34;responsive&#34;&gt;&lt;/amp-img&gt; --&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lazutkin.com/images/posts/2014-06-05-when-to-unify-in-js.jpg&#34; alt=&#34;When to unify in JS&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.lazutkin.com/blog/2014/05/18/unification-for-js/&#34;&gt;Unification for JS&lt;/a&gt; introduced &lt;a href=&#34;https://github.com/heya/unify&#34;&gt;heya-unify&lt;/a&gt; —&#xA;a practical mini library to leverage unification in JavaScript. This post explains when&#xA;it makes sense to use unification, and gives practical examples of how to use it.&lt;/p&gt;&#xA;&lt;!-- More --&gt;&#xA;&lt;h2 id=&#34;when-to-unify&#34;&gt;When to unify?&lt;/h2&gt;&#xA;&lt;p&gt;Below is my laundry list for unification. As soon as I see a project, which deals with items on&#xA;the list, I investigate if it makes sense to use &lt;a href=&#34;https://github.com/heya/unify&#34;&gt;heya-unify&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unification for JS</title>
      <link>https://www.lazutkin.com/blog/2014/05/18/unification-for-js/</link>
      <pubDate>Sun, 18 May 2014 16:39:16 -0500</pubDate>
      <guid>https://www.lazutkin.com/blog/2014/05/18/unification-for-js/</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;https://www.lazutkin.com/images/posts/2014-05-18-unification-for-js.jpg&#34; width=&#34;500&#34; height=&#34;250&#34; layout=&#34;responsive&#34;&gt;&lt;/amp-img&gt; --&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lazutkin.com/images/posts/2014-05-18-unification-for-js.jpg&#34; alt=&#34;Unification for JS&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Unification is a very interesting programming tool. Originated from logical programming&#xA;(its the foundation of Prolog) and used in functional programming (e.g., Haskell) it helps&#xA;to compare objects for equality, identify known patterns, and reassemble results differently.&lt;/p&gt;&#xA;&lt;p&gt;Wikipedia gives a somewhat complex &lt;a href=&#34;http://en.wikipedia.org/wiki/Unification_(computer_science)&#34;&gt;definition&lt;/a&gt; of unification, but many people see it as&#xA;an extended equivalence comparison, a pattern matching tool, and some even find parallels with&#xA;XPath queries, CSS, and even jQuery, all operating on regular objects. See it for yourself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Serve files with nginx conditionally</title>
      <link>https://www.lazutkin.com/blog/2014/02/23/serve-files-with-nginx-conditionally/</link>
      <pubDate>Sun, 23 Feb 2014 17:52:58 -0600</pubDate>
      <guid>https://www.lazutkin.com/blog/2014/02/23/serve-files-with-nginx-conditionally/</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;https://www.lazutkin.com/images/posts/2014-02-23-serve-files-with-nginx-conditionally.jpg&#34; width=&#34;500&#34; height=&#34;250&#34; layout=&#34;responsive&#34;&gt;&lt;/amp-img&gt; --&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lazutkin.com/images/posts/2014-02-23-serve-files-with-nginx-conditionally.jpg&#34; alt=&#34;Serve files with nginx conditionally&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Time and again working on big web applications we customize files based on user&amp;rsquo;s platform,&#xA;and their preferences. We can send different files to legacy browsers, different CSS and JS to&#xA;mobile browsers depending on their form factor, different images to accomodate bandwidth requirements,&#xA;and so on.&lt;/p&gt;&#xA;&lt;p&gt;This post was prompted by my desire to serve sprites produced by&#xA;&lt;a href=&#34;https://github.com/uhop/grunt-tight-sprite&#34;&gt;grunt-tight-sprite&lt;/a&gt;&#xA;as WebP images to WebP-capable browsers falling back to &amp;ldquo;classic&amp;rdquo; image formats for the rest using nginx.&#xA;While it is hardly a new topic, I was not satisfied with existing solutions, which all used &lt;code&gt;if&lt;/code&gt; and &lt;code&gt;rewrite&lt;/code&gt;,&#xA;instead of simpler methods.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CG: code generation in JavaScript</title>
      <link>https://www.lazutkin.com/blog/2013/07/14/cg-code-generation/</link>
      <pubDate>Sun, 14 Jul 2013 00:41:00 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2013/07/14/cg-code-generation/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://clubajax.org/&#34;&gt;ClubAjax&lt;/a&gt; invited me to speak about technologies behind &lt;a href=&#34;https://github.com/heya&#34;&gt;Heya&lt;/a&gt;, specifically about code generative solutions behind &lt;a href=&#34;https://github.com/heya/pipe&#34;&gt;heya-pipe&lt;/a&gt;. Pipes are built on a firm foundation of functional programming (FP), and it allows us to use a wide range of technologies to optimize their performance including generating code on the fly (code generation AKA CG).&lt;/p&gt;&#xA;&lt;p&gt;As soon as we are talking about CG, the first question to ask is: &amp;ldquo;How to debug such code?&amp;rdquo;. Heya provides answers for that too. But no spoilers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Switched to Octopress</title>
      <link>https://www.lazutkin.com/blog/2013/07/14/switched-to-octopress/</link>
      <pubDate>Sun, 14 Jul 2013 00:19:00 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2013/07/14/switched-to-octopress/</guid>
      <description>&lt;p&gt;After 8 years I decided to switch to &lt;a href=&#34;http://octopress.org/&#34; title=&#34;Octopress: a blogging framework for hackers.&#34;&gt;Octopress&lt;/a&gt;. Being a server-less framework, it allows my web site to scale better, and, the most important thing for me, reduces expences on administring an active server (less active components to update). An additional bonus is that it reduces requirements for a web site host, which allows me to be more flexible when selecting a hosting company.&lt;/p&gt;&#xA;&lt;p&gt;All old links are supposed to work as they used to be redirecting to new URLs. Please let me know, if something doesn&amp;rsquo;t work for you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slides: optimization of modern web applications</title>
      <link>https://www.lazutkin.com/blog/2012/08/13/slides-optimization-modern-web-applications/</link>
      <pubDate>Mon, 13 Aug 2012 12:54:08 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2012/08/13/slides-optimization-modern-web-applications/</guid>
      <description>&lt;p&gt;I spoke at &lt;a href=&#34;http://clubajax.org/&#34;&gt;ClubAjax&lt;/a&gt; about optimization of modern web applications. Usually I speak about theoretical matters, but this time I decided to go practical. This is a huge topic and it was blogged/debated/presented to death, including my &lt;a href=&#34;https://www.lazutkin.com/blog/2007/02/01/improving-performance/&#34;&gt;Improving performance…&lt;/a&gt;. Yet I decided to add to it after realizing that many things have changed in last years, including how we build web applications. I concentrated on technical aspects completely bypassing all other areas (e.g., a psychological angle).&lt;/p&gt;</description>
    </item>
    <item>
      <title>More on 0ms timeouts</title>
      <link>https://www.lazutkin.com/blog/2012/07/28/more-on-0ms-timeouts/</link>
      <pubDate>Sat, 28 Jul 2012 12:15:38 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2012/07/28/more-on-0ms-timeouts/</guid>
      <description>&lt;p&gt;Once I wrote a blog post &lt;a href=&#34;https://www.lazutkin.com/blog/2008/03/23/javascript-edp-and-0ms-timeouts/&#34;&gt;On JavaScript, EDP, and 0ms timeouts&lt;/a&gt;, which discussed a &amp;quot;smart&amp;quot; trend to pepper code with timeouts of … 0ms: &lt;code&gt;setTimeout(f, 0)&lt;/code&gt;. Authors of those &amp;quot;programming pearls&amp;quot; genuinely believed that this code reschedules a function call to the next available time slice after the code that set the timer was executed &lt;strong&gt;without&lt;/strong&gt; introduction of a delay (after all it is 0ms!). In reality a typical delay was 10-20ms. With new generation of browsers it starts with 4ms and jumps to 1000ms for non-current/hidden tabs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OOP in JS slides</title>
      <link>https://www.lazutkin.com/blog/2012/07/17/oop-n-js-slides/</link>
      <pubDate>Tue, 17 Jul 2012 23:02:55 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2012/07/17/oop-n-js-slides/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Finally&lt;/strong&gt;: my open source JavaScript project &lt;a href=&#34;http://www.dcljs.org&#34;&gt;DCL&lt;/a&gt; is built on ideas described in this article. Available for node.js and modern browsers, it implements OOP with mixins and AOP at &amp;quot;class&amp;quot; and object level. Read documentation and background articles on &lt;a href=&#34;http://www.dcljs.org&#34;&gt;www.dcljs.org&lt;/a&gt;, clone its code on &lt;a href=&#34;https://github.com/uhop/dcl&#34;&gt;github.com/uhop/dcl&lt;/a&gt;, and follow &lt;a href=&#34;https://twitter.com/dcl_js&#34;&gt;@dcl_js&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once again I was invited in &lt;a href=&#34;http://clubajax.org/&#34;&gt;ClubAjax&lt;/a&gt; to speak about JavaScript. This time I did a presentation based in part on my previous blog post &lt;a href=&#34;https://www.lazutkin.com/blog/2012/01/18/oop-and-js/&#34;&gt;OOP and JS&lt;/a&gt;. Slides and talk revisit OOP, mixins, AOP, chaining, and other related techniques I discussed in my blog. Of course, OOP deficiencies were discussed at length too. I suggest to look at slides and read the blog post - it will give you a better picture.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OOP and JS</title>
      <link>https://www.lazutkin.com/blog/2012/01/18/oop-and-js/</link>
      <pubDate>Wed, 18 Jan 2012 16:26:59 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2012/01/18/oop-and-js/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Finally:&lt;/strong&gt; my open source JavaScript project &lt;a href=&#34;http://www.dcljs.org&#34;&gt;DCL&lt;/a&gt; is built on ideas described in this article. Available for node.js and modern browsers, it implements OOP with mixins and AOP at &amp;quot;class&amp;quot; and object level. Read documentation and background articles on &lt;a href=&#34;http://www.dcljs.org&#34;&gt;www.dcljs.org&lt;/a&gt;, clone its code on &lt;a href=&#34;https://github.com/uhop/dcl&#34;&gt;github.com/uhop/dcl&lt;/a&gt;, and follow &lt;a href=&#34;https://twitter.com/dcl_js&#34;&gt;@dcl_js&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Almost any Java programmer, who starts to study JS groking its OOP facilities and a dynamic nature of JS, thinks that they can be greatly improved and starts its own OOP library/helpers. Majority of them left forgotten when their authors learn more and more details and patterns of JS, yet some grow to fruition and being marketed. This article is dedicated to such people.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Dojo Rich Editor with Django&#39;s Admin</title>
      <link>https://www.lazutkin.com/blog/2011/03/13/using-dojo-rich-editor-djangos-admin/</link>
      <pubDate>Sun, 13 Mar 2011 19:39:22 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2011/03/13/using-dojo-rich-editor-djangos-admin/</guid>
      <description>&lt;p&gt;Many years ago I decided to replace plain text areas in Django&amp;rsquo;s Admin with rich text editor, so I can edit HTML on my blog using WYSIWYG. Six (yes, 6) years ago &lt;a href=&#34;https://www.lazutkin.com/blog/2005/08/26/using_tinymce_djangos_admin/&#34;&gt;I looked around and selected&lt;/a&gt; &lt;a href=&#34;http://tinymce.moxiecode.com/&#34;&gt;TinyMCE&lt;/a&gt;. Over time it turned out that I was forced to upgrade TinyMCE and the link script I had because new browsers continue breaking my rich editor editing. Finally it stopped working again in &lt;strong&gt;all modern browsers&lt;/strong&gt;, and I decided that enough is enough. It is time to replace it. This time I settled on &lt;a href=&#34;http://docs.dojocampus.org/dijit/Editor&#34;&gt;Dojo&amp;rsquo;s Rich Editor&lt;/a&gt; hosted on &lt;a href=&#34;http://code.google.com/apis/libraries/devguide.html#dojo&#34;&gt;Google CDN&lt;/a&gt; — simple, functional, less work to set up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What happened to Dojo in 2008?</title>
      <link>https://www.lazutkin.com/blog/2010/03/15/what-happen-dojo-2008/</link>
      <pubDate>Mon, 15 Mar 2010 22:56:16 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2010/03/15/what-happen-dojo-2008/</guid>
      <description>&lt;p&gt;What happened to Dojo in 2008? This question was asked on StackOverflow. This is my personal take on the matter: &lt;a href=&#34;http://stackoverflow.com/questions/2450696/what-happened-to-dojo-in-2008/2451785#2451785&#34;&gt;on Dojo, jQuery, history, mistakes, marketing, social vs. technical, and communities&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exciting JavaScript Part II</title>
      <link>https://www.lazutkin.com/blog/2010/03/04/exciting-js-2/</link>
      <pubDate>Thu, 04 Mar 2010 14:48:03 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2010/03/04/exciting-js-2/</guid>
      <description>&lt;p&gt;This month I continued my presentation at &lt;a href=&#34;http://clubajax.org/&#34;&gt;ClubAJAX&lt;/a&gt;. &lt;a href=&#34;https://www.lazutkin.com/blog/2010/02/05/exciting-js-1/&#34;&gt;Last time&lt;/a&gt; I did a survey of what is available in JavaScript, and concentrated on object-oriented (OOP) and aspect-oriented (AOP) techniques. This time I continued the survey, and talked about functional programming (FP), and domain-specific languages (DSL). And as promised I touched the code generation facilities too.&lt;/p&gt;&#xA;&lt;p&gt;I suggest to read &lt;a href=&#34;https://www.lazutkin.com/blog/2010/02/05/exciting-js-1/&#34;&gt;the first part&lt;/a&gt; before.&lt;/p&gt;&#xA;&lt;p&gt;Enjoy!&lt;/p&gt;&#xA;&lt;p&gt;Direct link: &lt;a href=&#34;http://www.slideshare.net/elazutkin/exciting-javascript-part-ii&#34; title=&#34;Exciting JavaScript - Part II&#34;&gt;Exciting JavaScript - Part II&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RAD CRUD</title>
      <link>https://www.lazutkin.com/blog/2010/02/10/rad-crud/</link>
      <pubDate>Wed, 10 Feb 2010 17:40:25 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2010/02/10/rad-crud/</guid>
      <description>&lt;p&gt;Today at &lt;a href=&#34;http://widespreadconferences.com/dojoconnect.html&#34;&gt;dojo.connect&lt;/a&gt; I did a presentation &amp;ldquo;RAD CRUD&amp;rdquo;: rapid development of form-based applications. It continues my other presentation &lt;a href=&#34;https://www.lazutkin.com/blog/2009/12/02/crud-with-dojo/&#34;&gt;&amp;ldquo;CRUD with Dojo&amp;rdquo;&lt;/a&gt;, but it is more in depth, targets Dojo developers, and contains some advanced material.&lt;/p&gt;&#xA;&lt;p&gt;Direct link: &lt;a href=&#34;http://www.slideshare.net/elazutkin/rad-crud&#34; title=&#34;RAD CRUD&#34;&gt;RAD CRUD&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;!-- More --&gt;&#xA;&lt;div style=&#34;width:597px;&#34;&gt;&#xA;&#x9;&lt;object height=&#34;486&#34; id=&#34;__sse13677107&#34; width=&#34;597&#34;&gt;&#xA;&#x9;&#x9;&lt;param name=&#34;movie&#34; value=&#34;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=radcrud-100210153543-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=rad-crud&amp;amp;userName=elazutkin&#34;&gt;&#xA;&#x9;&#x9;&lt;param name=&#34;allowFullScreen&#34; value=&#34;true&#34;&gt;&#xA;&#x9;&#x9;&lt;param name=&#34;allowScriptAccess&#34; value=&#34;always&#34;&gt;&#xA;&#x9;&#x9;&lt;param name=&#34;wmode&#34; value=&#34;transparent&#34;&gt;&#xA;&#x9;&#x9;&lt;embed allowfullscreen=&#34;true&#34; allowscriptaccess=&#34;always&#34; height=&#34;486&#34; name=&#34;__sse13677107&#34; src=&#34;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=radcrud-100210153543-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=rad-crud&amp;amp;userName=elazutkin&#34; type=&#34;application/x-shockwave-flash&#34; width=&#34;597&#34; wmode=&#34;transparent&#34;&gt;&#xA;&#x9;&lt;/object&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;View more presentations from &lt;a href=&#34;http://www.slideshare.net/elazutkin&#34;&gt;Eugene Lazutkin&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exciting JavaScript Part I</title>
      <link>https://www.lazutkin.com/blog/2010/02/05/exciting-js-1/</link>
      <pubDate>Fri, 05 Feb 2010 22:34:26 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2010/02/05/exciting-js-1/</guid>
      <description>&lt;p&gt;I was asked to talk about advanced JavaScript techniques at the last monthly meeting of &lt;a href=&#34;http://clubajax.org/&#34;&gt;ClubAJAX&lt;/a&gt; — monthly get-together of Dallas-area JavaScript programmers. Instead I ended up talking about leveraging cool JavaScript features to implement well-known programming techniques and paradigms: &lt;a href=&#34;http://en.wikipedia.org/wiki/Object-oriented_programming&#34; title=&#34;Object-oriented programming&#34;&gt;OOP&lt;/a&gt;, &lt;a href=&#34;http://en.wikipedia.org/wiki/Aspect-oriented_programming&#34; title=&#34;Aspect-oriented programming&#34;&gt;AOP&lt;/a&gt;, &lt;a href=&#34;http://en.wikipedia.org/wiki/Functional_Programming&#34; title=&#34;Functional programming&#34;&gt;FP&lt;/a&gt;, and so on.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately I couldn&amp;rsquo;t finish in time, so I did a tour of some language features, and talked about OOP and AOP. The rest (I plan to do FP, code generation, and &lt;a href=&#34;http://en.wikipedia.org/wiki/Domain_Specific_Language&#34; title=&#34;Domain-specific languages&#34;&gt;DSL&lt;/a&gt;) will be covered later.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dojo Charting demo: tribute to Highcharts</title>
      <link>https://www.lazutkin.com/blog/2009/12/08/dojo-charting-demo-tribute-to-highcharts/</link>
      <pubDate>Tue, 08 Dec 2009 05:48:56 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2009/12/08/dojo-charting-demo-tribute-to-highcharts/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://wolfram.kriesing.de/blog/&#34;&gt;Wolfram Kriesing&lt;/a&gt; &lt;a href=&#34;http://twitter.com/wolframkriesing/status/6345221495&#34;&gt;asked&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Somehow I have the feeling that you can bend dojox&amp;rsquo;s charting module to look and feel like &lt;a href=&#34;http://highcharts.com/&#34;&gt;http://highcharts.com/&lt;/a&gt; — will be for free.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yes, it is relatively simple. To prove a point I wrote a quick-and-dirty demo available here: &lt;a href=&#34;https://www.lazutkin.com/download/hicharts.html&#34;&gt;Tribute to Highcharts&lt;/a&gt;. Obviously not everything matches 100%. Go and judge for yourself.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/em&gt;: &lt;a href=&#34;http://article.gmane.org/gmane.comp.web.dojo.devel/12031&#34;&gt;related post on dojo-dev mailing list&lt;/a&gt;, which explains some details of the demo.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CRUD with Dojo</title>
      <link>https://www.lazutkin.com/blog/2009/12/02/crud-with-dojo/</link>
      <pubDate>Wed, 02 Dec 2009 00:02:11 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2009/12/02/crud-with-dojo/</guid>
      <description>&lt;p&gt;My presentation at &lt;a href=&#34;http://clubajax.org/&#34;&gt;ClubAJAX&lt;/a&gt; got off to a rocky start: I was let in the&#xA;building 40 minutes after I was supposed to start the presentation.&#xA;Everybody waited patiently. Thank you guys! As promised I publish slides along with relevant links (I had to skip most&#xA;of planned demos).&lt;/p&gt;&#xA;&lt;p&gt;Here is my presentation on &lt;a href=&#34;http://www.slideshare.net/&#34;&gt;SlideShare&lt;/a&gt;: &lt;a href=&#34;http://www.slideshare.net/elazutkin/crud-with-dojo&#34; title=&#34;CRUD with Dojo&#34;&gt;CRUD with Dojo&lt;/a&gt;. The original presentation can be seen on Google Docs: &lt;a href=&#34;http://docs.google.com/present/view?id=d764479_30hd2hr7gf&#34; title=&#34;CRUD in Dojo&#34;&gt;CRUD with Dojo&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding django-shorturls</title>
      <link>https://www.lazutkin.com/blog/2009/08/06/adding-django-shorturls/</link>
      <pubDate>Thu, 06 Aug 2009 16:52:34 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2009/08/06/adding-django-shorturls/</guid>
      <description>&lt;p&gt;Time to time I sync my blog software to the Django trunk and&#xA;introduce small enhancements. Some of them visible to my readers,&#xA;some of them are just for me. This time after reading &lt;a href=&#34;http://simonwillison.net/2009/Apr/11/revcanonical/&#34;&gt;Simon Willison&lt;/a&gt;&amp;rsquo;s post on &lt;a href=&#34;http://simonwillison.net/2009/Apr/11/revcanonical/&#34;&gt;rev=canonical&lt;/a&gt; I decided to add short URLs to my blog as well. This is a convention&#xA;to provide custom short URLs managing the mapping on your own web&#xA;site. In my opinion the idea is very cool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The many benefits of pot</title>
      <link>https://www.lazutkin.com/blog/2009/04/10/many-benefits-of-pot/</link>
      <pubDate>Fri, 10 Apr 2009 11:48:34 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2009/04/10/many-benefits-of-pot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://steve-yegge.blogspot.com/&#34;&gt;Steve Yegge&lt;/a&gt; is one of the bloggers I read almost religiously. His posts are full of insights on the software development topics and in general, and he is always ready with an amusing anecdote from his rich life. His last post &lt;a href=&#34;http://steve-yegge.blogspot.com/2009/04/have-you-ever-legalized-marijuana.html&#34;&gt;Have you ever legalized marijuana?&lt;/a&gt; didn&amp;rsquo;t disappoint either. The author explains &amp;ldquo;Shit&amp;rsquo;s Easy Syndrome&amp;rdquo; (a difficult topic even for seasoned bloggers) in a gay romp that takes a reader from a light-hearted review of a book on &amp;ldquo;bugs in our mental software&amp;rdquo; to hapless VPs to many technical difficulties of legalizing &lt;a href=&#34;http://en.wikipedia.org/wiki/Marijuana&#34;&gt;a psychoactive drug extracted from the plant &lt;em&gt;Cannabis sativa&lt;/em&gt;&lt;/a&gt;. But the most entertaining and educating part is the incredible story of the author&amp;rsquo;s life.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JavaScript explained</title>
      <link>https://www.lazutkin.com/blog/2009/03/01/javascript-explained/</link>
      <pubDate>Sun, 01 Mar 2009 19:43:22 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2009/03/01/javascript-explained/</guid>
      <description>&lt;p&gt;Explaining some dark corners of JavaScript, browsers, or Dojo for the 100th time I realized that I already did it on numerous occasions, and some of my answers are published on public web sites. So I decided to round up the most general ones I posted on &lt;a href=&#34;http://stackoverflow.com&#34;&gt;StackOverflow&lt;/a&gt; and publish links to them here for a future reference.&lt;/p&gt;&#xA;&lt;h2 id=&#34;javascript&#34;&gt;JavaScript&lt;/h2&gt;&#xA;&lt;p&gt;This section is for language-specific topics. They can be equally applied in any environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trying out Google Friend Connect</title>
      <link>https://www.lazutkin.com/blog/2008/12/04/trying-google-friend-connect/</link>
      <pubDate>Thu, 04 Dec 2008 22:52:04 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2008/12/04/trying-google-friend-connect/</guid>
      <description>&lt;p&gt;As you may know today Google released &lt;a href=&#34;http://www.google.com/friendconnect/&#34;&gt;Friend Connect&lt;/a&gt;. I decided to give it a try. It took about 20 minutes to set up my blog with 4 gadgets: Members, Sign In, Rate/Review, and Wall/Comments. It took about 30 minutes to separate the skin from all these widgets, and set up the Canvas so users can see gadgets in a separate window, if they want to.&lt;/p&gt;&#xA;&lt;p&gt;Google Friend Connect doesn&amp;rsquo;t have any server-side components on user&amp;rsquo;s server — everything is handled by Google. All you have to do is to deploy 2 (two) static HTML files, and add various snippets that can be customized and generated on the Friend Connect&amp;rsquo;s web site. The resulting snippets are simple, and can be easily understood and restructured.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using recursion combinators in JavaScript</title>
      <link>https://www.lazutkin.com/blog/2008/06/30/using-recursion-combinators-javascript/</link>
      <pubDate>Mon, 30 Jun 2008 22:14:39 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2008/06/30/using-recursion-combinators-javascript/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://www.lazutkin.com/blog/2008/01/12/functional-fun-javascript-dojo/&#34;&gt;the previous post&lt;/a&gt; we explored “array extras” and how they can help us to write concise yet performant and clean code. In this post we take a look at generalizing recursive algorithms with recursion combinators — high-level functions that encapsulate all boilerplate code needed to set up the recursion. These functions were added to dojox.lang.functional and will be officially released with Dojo 1.2.&lt;/p&gt;&#xA;&lt;!-- More --&gt;&#xA;&lt;p&gt;In general the recursion is a form of iterative problem solving in the same category as loops. There are two major natural sources of recursive algorithms: recursive data&#xA;structures (lists, trees, and so on), and recursive definitions&#xA;(factorial, Fibonacci numbers, the GCD algorithm, etc.). The&#xA;recursion plays a prominent role in the functional programming (FP),&#xA;and one of the best articles on this topic is &lt;a href=&#34;http://www.latrobe.edu.au/philosophy/phimvt/joy/j05cmp.html&#34;&gt;“Recursion Theory and Joy”&lt;/a&gt; by &lt;a href=&#34;http://www.latrobe.edu.au/philosophy/phimvt/&#34;&gt;Manfred von Thun&lt;/a&gt;, the creator of &lt;a href=&#34;http://www.latrobe.edu.au/philosophy/phimvt/joy.html&#34;&gt;Joy&lt;/a&gt; (a purely functional&#xA;programming language with Forth-like syntax). Manfred&amp;rsquo;s article&#xA;explains intricacies of recursion including the venerable &lt;a href=&#34;http://en.wikipedia.org/wiki/Y_combinator&#34;&gt;Y&#xA;combinator&lt;/a&gt;, recursion combinators in general, and introduces a practical set of recursion combinators, which will guide us in this post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AOP aspect of JavaScript with Dojo</title>
      <link>https://www.lazutkin.com/blog/2008/05/18/aop-aspect-javascript-dojo/</link>
      <pubDate>Sun, 18 May 2008 03:12:36 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2008/05/18/aop-aspect-javascript-dojo/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Finally:&lt;/strong&gt; my open source JavaScript project &lt;a href=&#34;http://www.dcljs.org&#34;&gt;DCL&lt;/a&gt; is built on ideas described in this article. Available for node.js and modern browsers, it implements OOP with mixins and AOP at &amp;quot;class&amp;quot; and object level. Read documentation and background articles on &lt;a href=&#34;http://www.dcljs.org&#34;&gt;www.dcljs.org&lt;/a&gt;, clone its code on &lt;a href=&#34;https://github.com/uhop/dcl&#34;&gt;github.com/uhop/dcl&lt;/a&gt;, and follow &lt;a href=&#34;https://twitter.com/dcl_js&#34;&gt;@dcl_js&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If we look at the history of computer programming languages, we can see that practically all new programming methodologies were about one thing: taming complexity. The anarchy of earlier days of &lt;a href=&#34;http://en.wikipedia.org/wiki/Procedural_programming&#34;&gt;procedural programming&lt;/a&gt; (example: Fortran) gave way to &lt;a href=&#34;http://en.wikipedia.org/wiki/Structured_programming&#34;&gt;structured programming&lt;/a&gt; (Pascal), which was refined with &lt;a href=&#34;http://en.wikipedia.org/wiki/Modular_programming&#34;&gt;modular programming&lt;/a&gt; (Modula), and was reformulated when &lt;a href=&#34;http://en.wikipedia.org/wiki/Object-oriented_programming&#34;&gt;object-oriented programing&lt;/a&gt; went mainstream (C++, and much later Java). And it stopped there. The focus shifted to different branches of computer programming, namely to functional programming, and, to a lesser degree, logical programming. The only major development in this branch was the rise of &lt;a href=&#34;http://en.wikipedia.org/wiki/Aspect-Oriented_Programming&#34;&gt;aspect-oriented programming&lt;/a&gt; (AOP) paradigm. Let&amp;rsquo;s take a look at AOP in our favorite language: JavaScript, and how Dojo helps the language with dojox.lang.aspect package.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google App Engine: the first look</title>
      <link>https://www.lazutkin.com/blog/2008/04/08/google-app-engine-first-look/</link>
      <pubDate>Tue, 08 Apr 2008 12:00:35 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2008/04/08/google-app-engine-first-look/</guid>
      <description>&lt;p&gt;Yesterday &lt;a href=&#34;http://googleappengine.blogspot.com/2008/04/introducing-google-app-engine-our-new.html&#34;&gt;Google announced&lt;/a&gt; its new offering: &lt;a href=&#34;http://code.google.com/appengine/&#34;&gt;Google App Engine&lt;/a&gt;. These are my random notes I did yesterday when I studied the new service.&lt;/p&gt;&#xA;&lt;p&gt;Google didn&amp;rsquo;t go the same way as Amazon with its &lt;a href=&#34;http://www.amazon.com/gp/browse.html?node=3435361&#34;&gt;AWS&lt;/a&gt;. The former offers a form of shared hosting (think &amp;ldquo;distributed &lt;a href=&#34;http://www.webfaction.com/&#34;&gt;WebFaction&lt;/a&gt;&amp;rdquo;), while the latter offers a virtualized environment (think &amp;ldquo;distributed &lt;a href=&#34;http://www.slicehost.com/&#34;&gt;SliceHost&lt;/a&gt;&amp;rdquo;). So basically we are talking about more high-level approach to web applications, which is easy even for novices. On the other hand AWS is more flexible and more enterprise-y.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dojo 1.1 is out</title>
      <link>https://www.lazutkin.com/blog/2008/03/30/dojo-11-out/</link>
      <pubDate>Sun, 30 Mar 2008 00:31:50 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2008/03/30/dojo-11-out/</guid>
      <description>&lt;p&gt;As you all know by now &lt;a href=&#34;http://dojotoolkit.org/2008/03/28/dojo-1-1-released&#34;&gt;Dojo 1.1 was released in the wild&lt;/a&gt;. You can get a lot of useful links and info from &lt;a href=&#34;http://tagneto.blogspot.com/2008/03/beauty-of-dojo-11.html&#34;&gt;James Burke&amp;rsquo;s post on Dojo 1.1&lt;/a&gt;, but let me tell you why you should be excited:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Dojo 1.1 is the first official release, which contains &lt;a href=&#34;https://www.lazutkin.com/blog/2008/01/12/functional-fun-javascript-dojo/&#34;&gt;dojox.lang.functional&lt;/a&gt;. It was available in the trunk for awhile, but now you can use it without deploying Dojo courtesy of &lt;a href=&#34;http://dev.aol.com/dojo&#34;&gt;AOL CDN&lt;/a&gt;. I am psyched about it!&lt;/li&gt;&#xA;&lt;li&gt;Improvements in animation, animation helpers for dojox.gfx. A good examples of animation in action is &lt;a href=&#34;http://turtle.dojotoolkit.org/~dante/dojo.moj.oe/mojo.html&#34;&gt;dojo.moj.oe&lt;/a&gt; by &lt;a href=&#34;http://higginsforpresident.net/&#34;&gt;Pete Higgins&lt;/a&gt; (internals were detailed in &lt;a href=&#34;http://dojotoolkit.org/2008/01/06/dojo-moj-oe&#34;&gt;the blog post&lt;/a&gt;, and in &lt;a href=&#34;http://dojocampus.org/content/?p=17&#34;&gt;the great Dojo Campus article&lt;/a&gt;), an example for dojox.gfx animation is &lt;a href=&#34;http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/gfx/demos/career_test.html&#34;&gt;the career test&lt;/a&gt;. Finally we are getting to the point when we create attractive GUI cross-platform without plugins.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://api.dojotoolkit.org/&#34;&gt;The Dojo API tool&lt;/a&gt;. As you know Dojo is essentially a federation of JavaScript modules. Every module can be a library on its own. Now we have a simple way to navigate them, read developer&amp;rsquo;s documentation without diving into the source, and understand the API. When comments will be added to it shortly, you can add your own notes, and ask pointed questions. Developers are getting an essential tool to see how their modules are documented, what questions are raised most frequently, and so on. This tool will help us to document Dojo even better. All in all &lt;a href=&#34;http://someclosure.com/&#34;&gt;Neil Roberts&lt;/a&gt; and &lt;a href=&#34;http://blog.dept-z.com/&#34;&gt;Tom Trenka&lt;/a&gt; did a great job!&lt;/li&gt;&#xA;&lt;li&gt;Numerous improvements and bug fixes — this is always good. The API is mainly unchanged, so the migration to Dojo 1.1 should be a no-brainer for most users.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I am pleased to see that social aspects of Dojo are getting attention: the redesigned &lt;a href=&#34;http://www.dojotoolkit.org/&#34;&gt;Dojo web site&lt;/a&gt;, &lt;a href=&#34;http://api.dojotoolkit.org/&#34;&gt;the Dojo API tool&lt;/a&gt;, &lt;a href=&#34;http://dojocampus.org/&#34;&gt;Dojo Campus&lt;/a&gt; is always fun, &lt;a href=&#34;http://www.dojotoolkit.org/forum&#34;&gt;Dojo forums&lt;/a&gt; are active, even &lt;a href=&#34;http://archive.dojotoolkit.org/&#34;&gt;the Dojo archive&lt;/a&gt; is now easy to navigate!&lt;/p&gt;</description>
    </item>
    <item>
      <title>On JavaScript, EDP, and 0ms timeouts</title>
      <link>https://www.lazutkin.com/blog/2008/03/23/javascript-edp-and-0ms-timeouts/</link>
      <pubDate>Sun, 23 Mar 2008 17:35:25 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2008/03/23/javascript-edp-and-0ms-timeouts/</guid>
      <description>&lt;p&gt;What makes JavaScript so different from other languages? Is it its&#xA;dynamic nature? Its prototype-based funky inheritance? No. The most&#xA;unusual thing for newcomers is how JavaScript programs handle the&#xA;workflow. The program looks like a bowl of spaghetti. There is no start&#xA;or end of the program. What we have here is a bunch of functions, which&#xA;are called in response to some external events. In most cases we have&#xA;no way to predict the order of these events. And we know that all&#xA;callbacks are called from a single thread. Of course we know that it is&#xA;not a nature of JavaScript but rather a limitation imposed by a&#xA;specific container of JavaScript programs — web browsers. Majority of&#xA;JavaScript code is written for browsers and now we have a perception&#xA;problem. But let&amp;rsquo;s dig deeper to understand the problem better.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dojo docs: gfx and dnd</title>
      <link>https://www.lazutkin.com/blog/2008/03/15/dojo-docs-gfx-and-dnd/</link>
      <pubDate>Sat, 15 Mar 2008 19:25:58 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2008/03/15/dojo-docs-gfx-and-dnd/</guid>
      <description>&lt;p&gt;I just finished the first cut of the &lt;a href=&#34;http://docs.google.com/Doc?id=d764479_11fcs7s397&#34;&gt;dojo.dnd 1.1 technical documentation&lt;/a&gt;. Let me use this post to remind you about the &lt;a href=&#34;http://docs.google.com/Doc?id=d764479_9hgdng4g8&#34;&gt;dojox.gfx 1.1 documentation&lt;/a&gt;. I hope I satisfied the curiosity of many developers, but the ultimate proof will be the number of simple questions on &lt;a href=&#34;http://dojotoolkit.org/forum/&#34;&gt;Dojo Forum&lt;/a&gt;. Let&amp;rsquo;s hope it will go down. And don&amp;rsquo;t forget that the &lt;a href=&#34;http://dojotoolkit.org/book/dojo-book-1-0&#34;&gt;Dojo Book&lt;/a&gt; has a &lt;a href=&#34;http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/drag-and-drop&#34;&gt;DnD chapter&lt;/a&gt; too.&lt;/p&gt;&#xA;&lt;p&gt;Both documents are hosted on &lt;a href=&#34;http://docs.google.com/&#34;&gt;Google Docs&lt;/a&gt;, and are &amp;ldquo;live&amp;rdquo; documents — as soon as I update the document it is updated for you too. I intend to update them on regular basis to track the current version.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What open source is about</title>
      <link>https://www.lazutkin.com/blog/2008/01/27/what-open-source-about/</link>
      <pubDate>Sun, 27 Jan 2008 20:12:09 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2008/01/27/what-open-source-about/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://en.wikipedia.org/wiki/Free_and_open-source_software&#34; title=&#34;free and open source software&#34;&gt;F/OSS&lt;/a&gt; is a phenomenon of the modern life. But what makes it successful? &lt;a href=&#34;http://www.apache-ssl.org/ben.html&#34;&gt;Ben Laurie&lt;/a&gt; is convinced that &lt;a href=&#34;http://www.links.org/?p=292&#34;&gt;Open Source Is Just Economics&lt;/a&gt;. I beg to differ. Yes, it does make sense for several companies to gang together and develop something jointly. And they did it for years without the open source. Not always successfully, but they did it. For example, IBM has cooperated with Microsoft on OS/2 back in the days, and there are more examples. What makes OSS so special? Ben&amp;rsquo;s post has links to other possible reasons. But I think I know the answer: global meritocracy in informal communities — this is the mythical secret ingredient, which holds the whole system together.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Functional fun in JavaScript with Dojo</title>
      <link>https://www.lazutkin.com/blog/2008/01/12/functional-fun-javascript-dojo/</link>
      <pubDate>Sat, 12 Jan 2008 17:01:14 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2008/01/12/functional-fun-javascript-dojo/</guid>
      <description>&lt;p&gt;Everybody knows that JavaScript is a multi-paradigm language, and it can be used to program functionally. Practically all functional idioms can be used directly: higher-order functions, recursion, closures, and so on. The recent resurgence of Functional Programming (FP) brings functional methodologies in the mainstream. FP fundamentals gave us a lot of powerful idioms: iterative functions, which can replace loops, list processing in general, function manipulations, and many other things, which helps us to keep our code small yet concise, more powerful, and more fun. Let&amp;rsquo;s take a look at how Dojo helps to leverage the functional paradigm in the Core, and in the extended DojoX package (dojox.lang.functional).&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyCon 2007 pictures</title>
      <link>https://www.lazutkin.com/blog/2007/02/24/pycon-2007-pictures/</link>
      <pubDate>Sat, 24 Feb 2007 08:50:00 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2007/02/24/pycon-2007-pictures/</guid>
      <description>&lt;p&gt;I published first day pictures from PyCon 2007. They are raw, unedited, I didn&amp;rsquo;t put descriptions yet. You can recognize Django guys, people from multiple Python web frameworks, and, of course, the BDFL with OLPC. But why wait for pictures to be prepped? Dig in while they are raw and fresh:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/72157594553252989/&#34;&gt;&lt;img src=&#34;http://farm1.static.flickr.com/178/400450493_23ccd6f33c_m.jpg&#34; alt=&#34;Steve Holden in Django t-shirt&#34; title=&#34;Steve Holden in Django t-shirt&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yes, this is Steve Holden sporting a Django t-shirt.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Update: I added pictures from the 2nd day.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improving performance of Dojo-based web applications</title>
      <link>https://www.lazutkin.com/blog/2007/02/01/improving-performance/</link>
      <pubDate>Thu, 01 Feb 2007 22:49:17 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2007/02/01/improving-performance/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Web 2.0 brought on us an onslaught of new server-side web frameworks, and made it OK to put some code on the client side as well. Yes, I am talking about &lt;a href=&#34;http://en.wikipedia.org/wiki/Ajax_%28programming%29&#34; title=&#34;Asynchronous JavaScript and XML&#34;&gt;Ajax&lt;/a&gt;. While elements of Ajax were available (and used) for a long time now, 2005 was the crucial year for this relatively old technology fueled by proliferation of modern browsers with proper support of JavaScript and HTML DOM, which, in turn, gave a rise to numerous Ajax toolkits. As always new exciting technology polarizes people — you can find ardent supporters of Ajax and a booing horde of naysayers. The latter crowd points out real and imaginary problems with Ajax. Some problems are real enough but stem from a misuse of the technology. One of them is a performance of a web application. In this article I will show how to improve a performance of a web application with Ajax and how to optimize an Ajax web application. Specifically I will show how to optimize a &lt;a href=&#34;http://dojotoolkit.org/&#34; title=&#34;Dojo the JavaScript Toolkit&#34;&gt;Dojo&lt;/a&gt;-based high-performance web application. I will use &lt;a href=&#34;http://www.djangoproject.com/&#34; title=&#34;Django&#34;&gt;Django&lt;/a&gt; and &lt;a href=&#34;http://www.apache.org/&#34; title=&#34;Apache&#34;&gt;Apache&lt;/a&gt; as examples of a server environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Estimating unknown</title>
      <link>https://www.lazutkin.com/blog/2006/08/02/estimating-unknown/</link>
      <pubDate>Wed, 02 Aug 2006 02:08:40 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/08/02/estimating-unknown/</guid>
      <description>&lt;p&gt;How long does it take to do a project? Software developers are asked this very question on regular basis. This is how every project begins. Why is it important? Because &amp;ldquo;time is money&amp;rdquo; and many software projects are priced mostly by time spent on the project. &amp;ldquo;We will take your project estimate in hours, multiply them by your rate in $/h, and we have our price.&amp;rdquo; Ask any consultant or IT staffer about that. Let&amp;rsquo;s look at estimates in the Real World&lt;sup&gt;(tm)&lt;/sup&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up tools 2</title>
      <link>https://www.lazutkin.com/blog/2006/06/04/setting-tools-2/</link>
      <pubDate>Sun, 04 Jun 2006 19:37:02 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/06/04/setting-tools-2/</guid>
      <description>&lt;p&gt;This is the 2nd part of &lt;a href=&#34;https://www.lazutkin.com/blog/2006/02/18/setting-tools-windows/&#34;&gt;Setting up tools on Windows&lt;/a&gt; — notes mostly for myself. (No, I don&amp;rsquo;t run Django with MSSQL under &lt;a href=&#34;http://www.gotdotnet.com/workspaces/workspace.aspx?id=ad7acff7-ab1e-4bcb-99c0-57ac5a3a9742&#34;&gt;IronPython&lt;/a&gt;. Yet.)&lt;/p&gt;&#xA;&lt;p&gt;In this installment I add more stuff to Eclipse, and set up my apps under FastCGI on Linux-based shared host (I use DreamHost).&lt;/p&gt;&#xA;&lt;!-- More --&gt;&#xA;&lt;h2 id=&#34;eclipse&#34;&gt;Eclipse&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;This section was updated on 9/30/2006.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I already set it up with PyDev and Subclipse. Now I want to add HTML/CSS editing. And I want to do AJAX.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Migration to magic-removal</title>
      <link>https://www.lazutkin.com/blog/2006/05/06/migration-magic-removal/</link>
      <pubDate>Sat, 06 May 2006 22:41:19 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/05/06/migration-magic-removal/</guid>
      <description>&lt;p&gt;Today I converted three web sites to the latest Django&amp;rsquo;s trunk formerly known as the magic-removal branch. It was a very positive experience in general. New Database API with lazy database queries (courtesy of &lt;code&gt;QuerySet&lt;/code&gt;) rocks! Direct interaction with model classes allows doing a lot of things much simpler than it was before. A lot of small improvements, which makes a big difference like explicit template extensions (use whatever is appropriate for your content), more transparent new Admin inner class, natural overriding of model methods (no more &lt;code&gt;_pre_save()&lt;/code&gt; and &lt;code&gt;_post_save()&lt;/code&gt; hooks!), and, of course, no more pluralization guessing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Summer of Code 2006</title>
      <link>https://www.lazutkin.com/blog/2006/05/02/google-summer-code-2006/</link>
      <pubDate>Tue, 02 May 2006 22:06:01 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/05/02/google-summer-code-2006/</guid>
      <description>&lt;p&gt;Yes, another &lt;a href=&#34;http://code.google.com/soc/&#34;&gt;Google SoC&lt;/a&gt;  is upon us. I signed up as a mentor with &lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo&lt;/a&gt;  and &lt;a href=&#34;http://www.djangoproject.com/&#34;&gt;Django&lt;/a&gt;. Both projects are on the leading edge of new wave of web-based applications doing extremely cool stuff. I anticipate that some smart students will bridge both projects, but individual projects are fine too.&lt;/p&gt;&#xA;&lt;p&gt;What is Google SoC? Read &lt;a href=&#34;http://code.google.com/soc/studentfaq.html&#34;&gt;the FAQ&lt;/a&gt;. Who can apply? &lt;a href=&#34;http://code.google.com/soc/studentfaq.html#8&#34;&gt;Any student anywhere in the world&lt;/a&gt; can apply. You don&amp;rsquo;t have to be Comp. Sci. major to participate. Why should I apply? You will gain a real world experience with open source projects on the bleeding edge of modern technology. Your code will be used by high profile projects (it will look spiffy on your resume). You will meet new people who &amp;quot;do it&amp;quot; instead of &amp;quot;talk about it&amp;quot;. And you will earn &lt;a href=&#34;http://code.google.com/soc/studentfaq.html#34&#34;&gt;$4,500 USD&lt;/a&gt; and a cool T-shirt as a proof of your participation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JTAG</title>
      <link>https://www.lazutkin.com/blog/2006/04/05/jtag/</link>
      <pubDate>Wed, 05 Apr 2006 18:33:37 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/04/05/jtag/</guid>
      <description>&lt;p&gt;By popular demands I am publishing pictures of my JTAG, which I made to &lt;a href=&#34;https://www.lazutkin.com/blog/2005/10/09/openwrt_jumpstart_jtag/&#34;&gt;revive a wireless router&lt;/a&gt; some time ago. Just click on the picture below to see it in all ghetto-style glory with some explanations of my &amp;quot;design decisions&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/72057594099838195/&#34;&gt;&lt;img src=&#34;http://static.flickr.com/1/123934508_6f5abba88f_m.jpg&#34; alt=&#34;JTAG in its full glory&#34; title=&#34;JTAG in its full glory&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can see that it is very basic. It was made in ~3 minutes and costs ~$6 (the most expensive part was the cable — $3.99). It was assembled according to &lt;a href=&#34;http://downloads.openwrt.org/people/inh/reference/JTAGschem.png&#34;&gt;this diagram&lt;/a&gt;. You can find a full description of details &lt;a href=&#34;https://www.lazutkin.com/blog/2005/10/09/openwrt_jumpstart_jtag/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What programmers do</title>
      <link>https://www.lazutkin.com/blog/2006/04/02/what-programmers-do/</link>
      <pubDate>Sun, 02 Apr 2006 00:22:44 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/04/02/what-programmers-do/</guid>
      <description>&lt;p&gt;Let me give you one more definition of what computer programmers do: they design, build, and maintain &lt;a href=&#34;http://en.wikipedia.org/wiki/Complex_systems&#34;&gt;complex systems&lt;/a&gt;. In many cases computer programs are more complex than &amp;ldquo;Hello, world!&amp;rdquo; examples. Way more complex. I am talking about the systems&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;that have more branching possibilities than atoms in the universe.&lt;/li&gt;&#xA;&lt;li&gt;that cannot be verified using any formal methods in any practical timeframe.&lt;/li&gt;&#xA;&lt;li&gt;that cannot be tested with 100% code coverage in our lifetime.&lt;/li&gt;&#xA;&lt;li&gt;that cannot be completely understood in all details by their creators.&lt;/li&gt;&#xA;&lt;li&gt;that can handle real life requirements.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So what?&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPL violation: Sveasoft</title>
      <link>https://www.lazutkin.com/blog/2006/03/15/gpl-violation-sveasoft/</link>
      <pubDate>Wed, 15 Mar 2006 00:18:11 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/03/15/gpl-violation-sveasoft/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://openwrt.org/&#34;&gt;OpenWrt&lt;/a&gt; has &lt;a href=&#34;http://forum.openwrt.org/viewtopic.php?id=4767&#34;&gt;officially terminated Sveasoft&amp;rsquo;s license&lt;/a&gt; citing blatant violation of the GPL. For more details go to OpenWrt&amp;rsquo;s forum: &lt;a href=&#34;http://forum.openwrt.org/viewtopic.php?id=4768&#34;&gt;Unbelievable&lt;/a&gt;. It&amp;rsquo;s getting quite hilarious. For example you can &amp;ldquo;learn&amp;rdquo; that the GPL is derived directly from &amp;ldquo;&lt;a href=&#34;http://www.sveasoft.com/modules/phpBB2/viewtopic.php?t=16015&#34;&gt;the economic and political theories of Karl Marx&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;In general it is so sad to see such abuses. It is not hard to comply with the license. If you don&amp;rsquo;t like it, don&amp;rsquo;t use the GPL&amp;rsquo;d software in your product. It is as simple as that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finalizing PyCon 2006 pictures</title>
      <link>https://www.lazutkin.com/blog/2006/03/04/finalizing-pycon-2006-pictures/</link>
      <pubDate>Sat, 04 Mar 2006 17:54:33 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/03/04/finalizing-pycon-2006-pictures/</guid>
      <description>&lt;p&gt;I found some time to finalize my pictures and notes on PyCon 2006. I tried my best to identify people in my pictures. Now you can see their names and links to their blogs. I added links to official descriptions of their talks, as well as to excellent detailed notes of some talks by &lt;a href=&#34;http://holdenweb.blogspot.com/&#34;&gt;Steve Holden&lt;/a&gt;. I advise to visit his blog, because he has notes on some talks I didn&amp;rsquo;t attend.&lt;/p&gt;</description>
    </item>
    <item>
      <title>More PyCon 2006 pictures</title>
      <link>https://www.lazutkin.com/blog/2006/02/26/more-pycon-2006-pictures/</link>
      <pubDate>Sun, 26 Feb 2006 23:15:17 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/02/26/more-pycon-2006-pictures/</guid>
      <description>&lt;p&gt;I added &lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/72057594070445239/&#34;&gt;more pictures from PyCon 2006&lt;/a&gt;. Enjoy.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/72057594070445239/&#34;&gt;&lt;img src=&#34;http://static.flickr.com/19/105063089_37cae3cac0_m.jpg&#34; alt=&#34;Simon, Adrian, Jacob, and Matt.&#34; title=&#34;The core Django developers.&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now time for a blog roll of my photo models (far from complete):&lt;/p&gt;&#xA; &lt;div&gt;&lt;table border=&#34;1&#34;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Adrian Holovaty&lt;/td&gt;&lt;td&gt;[http://www.holovaty.com/](http://www.holovaty.com/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Simon Willison&lt;/td&gt;&lt;td&gt;[http://simon.incutio.com/](http://simon.incutio.com/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jacob Kaplan-Moss&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;[http://www.jacobian.org/](http://www.jacobian.org/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Matt Croydon&lt;/td&gt;&lt;td&gt;[http://www.postneo.com/](http://www.postneo.com/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Derek Willis&lt;/td&gt;&lt;td&gt;[http://thescoop.org/](http://thescoop.org/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ian Bicking&lt;/td&gt;&lt;td&gt;[http://blog.ianbicking.org/](http://blog.ianbicking.org/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bob Ippolito&lt;/td&gt;&lt;td&gt;[http://bob.pythonmac.org/](http://bob.pythonmac.org/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Guido van Rossum&lt;/td&gt;&lt;td&gt;[http://www.artima.com/weblogs/index.jsp?blogger=guido](http://www.artima.com/weblogs/index.jsp?blogger=guido)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ian Maurer&lt;/td&gt;&lt;td&gt;[http://itmaurer.com/blog/](http://itmaurer.com/blog/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Andrew Kuchling&lt;/td&gt;&lt;td&gt;[http://www.amk.ca/diary/](http://www.amk.ca/diary/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jeremy Dunck&lt;/td&gt;&lt;td&gt;[http://dunck.us/anabasis/](http://dunck.us/anabasis/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;David Ascher&lt;/td&gt;&lt;td&gt;[http://ascher.ca/blog/](http://ascher.ca/blog/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jeremy Hylton&lt;/td&gt;&lt;td&gt;[http://www.python.org/~jeremy/weblog/](http://www.python.org/~jeremy/weblog/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jim Hugunin&lt;/td&gt;&lt;td&gt;[http://blogs.msdn.com/hugunin/](http://blogs.msdn.com/hugunin/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Phillip L. Eby&lt;/td&gt;&lt;td&gt;[http://dirtsimple.org/](http://dirtsimple.org/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mark Ramm&lt;/td&gt;&lt;td&gt;[http://www.compoundthinking.com/blog/](http://www.compoundthinking.com/blog/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Steve Holden&lt;/td&gt;&lt;td&gt;[http://holdenweb.blogspot.com/](http://holdenweb.blogspot.com/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bram Cohen&lt;/td&gt;&lt;td&gt;[http://bramcohen.livejournal.com/](http://bramcohen.livejournal.com/)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Kevin Dangoor&lt;/td&gt;&lt;td&gt;[http://www.blueskyonmars.com/](http://www.blueskyonmars.com/)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xA;&lt;p&gt;I know I missed some blogs, please let me know your blog address, and I will add it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyCon 2006 pictures</title>
      <link>https://www.lazutkin.com/blog/2006/02/26/pycon-2006-pictures/</link>
      <pubDate>Sun, 26 Feb 2006 01:49:32 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/02/26/pycon-2006-pictures/</guid>
      <description>&lt;p&gt;Here in Dallas PyCon 2006 gave us an opportunity to meet many &amp;quot;virtual&amp;quot; people from Python community, and put faces to names. For those who couldn&amp;rsquo;t attend I am &lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/72057594070445239/&#34;&gt;publishing pictures and small notes on Flickr&lt;/a&gt;. I will add more pictures tomorrow. If anybody&amp;rsquo;s name is misspelled, or missing (I didn&amp;rsquo;t catch all names), or you want me to remove your name or picture, please contact me and I will change notes. I am planning to add blog addresses to people&amp;rsquo;s names as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up tools on Windows</title>
      <link>https://www.lazutkin.com/blog/2006/02/18/setting-tools-windows/</link>
      <pubDate>Sat, 18 Feb 2006 17:36:37 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/02/18/setting-tools-windows/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update 9/30/2006&lt;/strong&gt;: when you finish this article don&amp;rsquo;t forget to read more about setting up tools in the second part: &lt;a href=&#34;https://www.lazutkin.com/blog/2006/06/04/setting-tools-2/&#34;&gt;Setting up tools 2&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;My goal is to set up working environment for &lt;a href=&#34;http://www.djangoproject.com/&#34;&gt;Django&lt;/a&gt; development on Windows box. You can find a lot of information on setting up open-source development tools on Linux. Somehow it is assumed that your project should target LAMP (Linux, Apache, MySQL, Python). Windows-bound guys are advised to decorate their platform as ersatz Linux: install Apache, install MySQL, and you have WAMP (Windows, Apache, MySQL, Python). What kind of fun is that? No, we are going full WIMP (Windows, IIS, MS SQL, Python)!&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: new release</title>
      <link>https://www.lazutkin.com/blog/2006/02/15/openwrt-gui-new-release/</link>
      <pubDate>Wed, 15 Feb 2006 01:03:56 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/02/15/openwrt-gui-new-release/</guid>
      <description>&lt;p&gt;It looks like this is the last update before upcoming beta release. Besides some minor bug fixes, it sports improved firewall configuration widget:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Compact representation of port ranges.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Example: tcp 9000-9100 ⇒ mycomp&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Port redirection.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Example: tcp 8080 ⇒ mycomp:80&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While the former improves on existing functionality, the latter implements totally new feature. It allows mapping external ports to different ports of internal computers. Redirection of ranges is supported as well. As a matter of fact it was the most requested feature so far.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Packaging web apps</title>
      <link>https://www.lazutkin.com/blog/2006/02/02/packaging-web-apps/</link>
      <pubDate>Thu, 02 Feb 2006 22:00:48 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/02/02/packaging-web-apps/</guid>
      <description>&lt;p&gt;Have you been frustrated lately by speed of web applications? Typically they have a lot of art, and structured into a nice set of JavaScript and CSS files. They look beautiful, aren&amp;rsquo;t they? But do you have the patience to wait them load? And proceed from step to step?&lt;/p&gt;&#xA;&lt;p&gt;Of course, it is possible to prepare a web application to high-demand life: merge all stylesheets, and JavaScript files, and compress the result, structure your GUI in such a way that it is possible to combine all small images in one, and so on. This is very tedious low-level work. There are some tools, which can take care of the problem. For example, &lt;a href=&#34;http://dojotoolkit.org/docs/compressor_system.html&#34;&gt;Dojo compressor&lt;/a&gt; merges JavaScript files and transforms the code to minimize its size. There are some tools to &amp;ldquo;compress&amp;rdquo; CSS. But the task of general optimization of your web app is up to you. Otherwise you will have a lot of frustrated users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Looking at stats: Google Video</title>
      <link>https://www.lazutkin.com/blog/2006/02/02/looking-stats-google-video/</link>
      <pubDate>Thu, 02 Feb 2006 00:43:15 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/02/02/looking-stats-google-video/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s take a look at &lt;a href=&#34;http://www.djangoproject.com/snakesandrubies/&#34;&gt;Snakes &amp;amp; Rubies&lt;/a&gt;  stats published on Google Video. But before that take a look at &lt;a href=&#34;https://www.lazutkin.com/blog/2006/01/27/full-snakes-rubies-video-live/&#34;&gt;previous stats&lt;/a&gt;  published on 1/27/2006. New stats include 5 more days covering 18 days of January 2006.&lt;/p&gt;&#xA; &lt;div&gt;&lt;table border=&#34;1&#34; cellpadding=&#34;3&#34;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;**Title**&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;**Page&amp;nbsp;views**&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;**Downloads**&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;[Snakes and Rubies (Adrian&#39;s Django presentation)](http://video.google.com/videoplay?docid=-3548805983075267875)&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;190&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;[Snakes and Rubies (David&#39;s Rails presentation)](http://video.google.com/videoplay?docid=1149552518153462279)&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;169&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;19&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;[Snakes and Rubies (Q&amp;amp;A session)](http://video.google.com/videoplay?docid=9043285771539514211)&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;89&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;[Snakes and Rubies (full)](http://video.google.com/videoplay?docid=2939556954580527226)&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;149&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;12&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;**Totals**&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;**597**&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;**40**&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xA;&lt;p&gt;Lessons:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;More people read Django Community RSS feed than the news group, which was used for &lt;a href=&#34;http://article.gmane.org/gmane.comp.python.django.user/3137/&#34;&gt;previous announcement&lt;/a&gt;. Duh.&#xA;&lt;ol&gt;&#xA;&lt;li&gt;People followed my advice and went to watch Q&amp;amp;A Session. Very good! I know you were not disappointed.&lt;/li&gt;&#xA;&lt;li&gt;More people decided to watch Adrian&amp;rsquo;s presentation this time than before. It boosted greatly his number of page views comparing to other video fragments. In fact it is the most watched fragment of the series. Adrian, next time I suggest you to start you presentation with your rendition of Super Mario 2 theme. People totally dig it!&lt;/li&gt;&#xA;&lt;li&gt;People watched the whole 3 hour movie instead of equivalent bits and pieces. It is amazing but true. At 30 viewers/day it will overtake individual fragments pretty soon, if not today.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;People favor convenience over quality.&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The event attracted almost 600 viewers so far. In last 5 days ~80/day came to see it.&lt;/li&gt;&#xA;&lt;li&gt;While higher quality originals are available, hundreds of people used Google Video. I don&amp;rsquo;t know why but I suggest to use it in the future for all such things. Maybe sreencasts should be adapted for low quality compression and published too.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Let me thank everybody who made this documentary possible. Adrian, David — you gave an excellent show. My special thanks go to &lt;a href=&#34;http://www.jacobian.org/&#34;&gt;Jacob Kaplan-Moss&lt;/a&gt;, who actually made the movie.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python web frameworks</title>
      <link>https://www.lazutkin.com/blog/2006/01/31/python-web-frameworks/</link>
      <pubDate>Tue, 31 Jan 2006 20:20:51 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/01/31/python-web-frameworks/</guid>
      <description>&lt;p&gt;Now after two posts about &lt;a href=&#34;http://www.python.org/%7Eguido/&#34;&gt;Guido&lt;/a&gt;&amp;rsquo;s &lt;a href=&#34;http://www.artima.com/weblogs/viewpost.jsp?thread=146149&#34;&gt;quest&lt;/a&gt;  for the Right Web Framework (&lt;a href=&#34;https://www.lazutkin.com/blog/2006/01/30/guido-web-frameworks-again/&#34;&gt;1st&lt;/a&gt;, &lt;a href=&#34;https://www.lazutkin.com/blog/2006/01/31/guido-reports-django-vs-cheetah-1-0/&#34;&gt;2nd&lt;/a&gt;) I am starting to feel like his relay station. But I want to share his comment made in &lt;a href=&#34;http://panela.blog-city.com/about_matt.htm&#34;&gt;Matt&lt;/a&gt;&amp;rsquo;s blog post on &lt;a href=&#34;http://panela.blog-city.com/python_web_framework_shootout_take_3__petitioning_guido_goog.htm&#34;&gt;Python web framework shootout&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Why criticize Django for claiming to be the best? Nobody has denied it, and yet it&amp;rsquo;s criticized as if it were somehow unethical. Frankly, the problem is that there are too many Python web frameworks and wannabees, and if we don&amp;rsquo;t start some kind of shootout, however subjective, we&amp;rsquo;ll never get to market dominance of a few good ones. I&amp;rsquo;m not saying Django is already the winner &amp;ndash; but we are looking for a winner (or, more likely, a small set of winners) so future developers looking for a Pythonic solution only have to compare a small number of options, all mature, feature-rich, well-supported etc., rather than having to sift through 80+ half-baked solutions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Guido reports: Django vs. Cheetah 1-0</title>
      <link>https://www.lazutkin.com/blog/2006/01/31/guido-reports-django-vs-cheetah-1-0/</link>
      <pubDate>Tue, 31 Jan 2006 01:04:07 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/01/31/guido-reports-django-vs-cheetah-1-0/</guid>
      <description>&lt;p&gt;Finally Guido got some time to play with goods. The verdict is in: &lt;a href=&#34;http://www.artima.com/weblogs/viewpost.jsp?thread=146606&#34;&gt;Django vs. Cheeta 1-0&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Guido on web frameworks, again</title>
      <link>https://www.lazutkin.com/blog/2006/01/30/guido-web-frameworks-again/</link>
      <pubDate>Mon, 30 Jan 2006 18:12:32 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/01/30/guido-web-frameworks-again/</guid>
      <description>&lt;p&gt;If you liked reading &lt;a href=&#34;http://www.artima.com/weblogs/index.jsp?blogger=guido&#34;&gt;Guido&lt;/a&gt;&amp;rsquo;s &lt;a href=&#34;http://www.artima.com/weblogs/viewpost.jsp?thread=146149&#34;&gt;previous post on Python web frameworks&lt;/a&gt;  (Rails was mentioned too) and discussion that followed, you should read his second installment: &lt;a href=&#34;http://www.artima.com/weblogs/viewpost.jsp?thread=146503&#34;&gt;Web Framework Redux&lt;/a&gt;. Don&amp;rsquo;t forget to voice your opinion in &lt;a href=&#34;http://www.artima.com/forums/flat.jsp?forum=106&amp;amp;thread=146503&#34;&gt;the forum&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django Dojo</title>
      <link>https://www.lazutkin.com/blog/2006/01/28/django-dojo/</link>
      <pubDate>Sat, 28 Jan 2006 17:05:27 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/01/28/django-dojo/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.djangoproject.com/&#34;&gt;Django&lt;/a&gt;-&lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo&lt;/a&gt;  alliance was finally announced to the world by our very own &lt;a href=&#34;http://www.jacobian.org/&#34;&gt;Jacob Kaplan-Moss&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Starting with version 0.92 (which should be out in a few weeks, Murphy willing), Django is going to bundle Dojo with the toolkit. Specifically as part of Django&amp;rsquo;s admin interface (but available to user apps as well).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Read all about it in &lt;a href=&#34;http://article.gmane.org/gmane.comp.web.dojo.user/3603&#34;&gt;Jacob&amp;rsquo;s post&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I am overjoyed to see such cool high quality open source projects are working together. Clearly it will make it easy to create kick-ass highly interactive web applications in Django and it will advance Dojo positions as a premier AJAX toolkit. It is a rare win-win situation for everybody involved including users of both frameworks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Full Snakes &amp; Rubies video is live</title>
      <link>https://www.lazutkin.com/blog/2006/01/27/full-snakes-rubies-video-live/</link>
      <pubDate>Fri, 27 Jan 2006 23:15:23 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/01/27/full-snakes-rubies-video-live/</guid>
      <description>&lt;p&gt;Finally &lt;a href=&#34;http://video.google.com/videoplay?docid=2939556954580527226&#34;&gt;full Snakes &amp;amp; Rubies video went live&lt;/a&gt; on Google Video! And it took only 18 days to &lt;a href=&#34;https://www.lazutkin.com/blog/2006/01/15/my-experience-google-video/&#34;&gt;verify it&lt;/a&gt; (19 days, if you count when I started to upload it). Apparently the whole process of verification depends on file size nonlinearly. It cannot depend on content because it is a combination of smaller files: &lt;a href=&#34;http://video.google.com/videoplay?docid=-3548805983075267875&#34;&gt;Adrian&amp;rsquo;s Django presentation&lt;/a&gt;, &lt;a href=&#34;http://video.google.com/videoplay?docid=1149552518153462279&#34;&gt;David&amp;rsquo;s Rails presentation&lt;/a&gt;, and &lt;a href=&#34;http://video.google.com/videoplay?docid=9043285771539514211&#34;&gt;Q&amp;amp;A session&lt;/a&gt;. Oh, well.&lt;/p&gt;&#xA;&lt;p&gt;And now is time for some stats (1/9/2006–1/27/2006):&lt;/p&gt;&#xA; &lt;div&gt;&lt;table border=&#34;1&#34; cellpadding=&#34;3&#34;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;**Title**&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;**Page&amp;nbsp;views**&lt;/td&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;**Downloads**&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;[Snakes and Rubies (Adrian&#39;s Django presentation)](http://video.google.com/videoplay?docid=-3548805983075267875)&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;83&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;[Snakes and Rubies (David&#39;s Rails presentation)](http://video.google.com/videoplay?docid=1149552518153462279)&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;96&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;11&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;[Snakes and Rubies (Q&amp;amp;A session)](http://video.google.com/videoplay?docid=9043285771539514211)&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;36&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;[Snakes and Rubies (full)](http://video.google.com/videoplay?docid=2939556954580527226)&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;0&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;**Totals**&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;**215**&lt;/td&gt;&lt;td style=&#34;text-align: right&#34;&gt;**13**&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xA;&lt;p&gt;As you can see publishing files on Google Video was worth it. It helped ~200 people. Obviously nobody was able to see the full video yet because it just went live. One interesting tidbit: viewers loved to download David&amp;rsquo;s presentation. Downloading Google Video file (.gvp) gives you a small text file, which references the web site and nothing more. You can save URL with the same effect. Of course some smart alecks can use &lt;a href=&#34;http://javimoya.com/blog/youtube_en.php&#34;&gt;tools&lt;/a&gt;  to download actual video (.flv), but why? &lt;a href=&#34;http://www.djangoproject.com/snakesandrubies/&#34;&gt;Much better original is available&lt;/a&gt; without restrictions and it is referenced from Google Video pages. Another thing: many people watched presentations but didn&amp;rsquo;t watch the Q&amp;amp;A session, which is equally (if not more) interesting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt QoS</title>
      <link>https://www.lazutkin.com/blog/2006/01/27/openwrt-qos/</link>
      <pubDate>Fri, 27 Jan 2006 22:21:14 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/01/27/openwrt-qos/</guid>
      <description>&lt;p&gt;It looks like nbd was able to find the problem, which plagued many people (including me) with QoS. You can find details in &lt;a href=&#34;http://forum.openwrt.org/viewtopic.php?pid=19616#p19616&#34;&gt;this thread&lt;/a&gt;  on OpenWrt forum. Instructions on how to install QoS package can be found in &lt;a href=&#34;http://wiki.openwrt.org/Faq#head-a1dc7290cc2933f9a4e9f130bb83d1dfb4b761ff&#34;&gt;this FAQ entry&lt;/a&gt;. Give it a whirl and don&amp;rsquo;t forget to thank Felix Fietkau (&lt;a href=&#34;http://nbd.name/&#34;&gt;nbd&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;QoS was the biggest feature on my &amp;quot;wanted&amp;quot; list. It means now I can produce an OpenWrt GUI (webui) module to deal with it. It coincides well with release of &lt;a href=&#34;http://dojotoolkit.org/download/&#34;&gt;Dojo 0.2.2&lt;/a&gt;. But most probably I&amp;rsquo;ll be using a snapshot because guys added so much new stuff to Dojo preparing for Dojo 0.3 (widget release). Given the stability of &lt;a href=&#34;https://www.lazutkin.com/blog/2005/11/27/openwrt-gui-alpha-released/&#34;&gt;OpenWrt GUI Homunculus Alpha release&lt;/a&gt;, I may upgrade new release to Beta status.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My experience with Google Video</title>
      <link>https://www.lazutkin.com/blog/2006/01/15/my-experience-google-video/</link>
      <pubDate>Sun, 15 Jan 2006 16:44:49 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/01/15/my-experience-google-video/</guid>
      <description>&lt;p&gt;Some time ago &lt;a href=&#34;http://www.jacobian.org/&#34;&gt;Jacob Kaplan-Moss&lt;/a&gt;  released his &lt;a href=&#34;http://www.djangoproject.com/snakesandrubies/&#34;&gt;documentary&lt;/a&gt;  about &lt;a href=&#34;http://snakesandrubies.com/event/&#34;&gt;Snakes &amp;amp; Rubies event&lt;/a&gt;. It is a must see video for all serious programmers working in different fields because it gives you a rare chance to understand the motives of two successful software projects.&lt;/p&gt;&#xA;&lt;p&gt;Pretty soon it became obvious that sending links to hefty files or torrents is not the best way to spread the word — people are lazy and distractible. I needed something, which can play almost immediately. What can be better than &lt;a href=&#34;http://video.google.com/&#34;&gt;Google Video (Beta)&lt;/a&gt;? Jacob gave me his blessing and I started the process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clients: thin vs. thick</title>
      <link>https://www.lazutkin.com/blog/2006/01/15/clients-thin-vs-thick/</link>
      <pubDate>Sun, 15 Jan 2006 15:24:27 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/01/15/clients-thin-vs-thick/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://codinginparadise.org/weblog/&#34;&gt;Brad Neuberg&lt;/a&gt;  wrote &lt;a href=&#34;http://codinginparadise.org/weblog/2006/01/ajaxdhtml-tutorial-should-i-render-my.html&#34;&gt;a good article&lt;/a&gt;, which compares two different approaches to AJAX: thick client (e.g., &lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo&lt;/a&gt;  style) and thin client (e.g., &lt;a href=&#34;http://prototype.conio.net/&#34;&gt;Prototype&lt;/a&gt;  style). While it does a good job contrasting two approaches, I want to underscore that the underlying problem is a clash of two cultures between &amp;quot;local application&amp;quot; developers, and &amp;quot;web site&amp;quot; developers.&lt;/p&gt;&#xA;&lt;p&gt;There is no doubt that local applications create the most satisfying end-user experience. Their typical weakness is in restriction of underlying data to local installation, which makes any collaboration impossible. &amp;quot;Connected applications&amp;quot; can help to alleviate this problem, but networking is hard in general and many local app programmers try to avoid it. They don&amp;rsquo;t have proper culture to do it, existing network APIs are hard to combine with GUI, and so on. In general they don&amp;rsquo;t get it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Where do old programmers go?</title>
      <link>https://www.lazutkin.com/blog/2006/01/05/where-do-old-programmers-go/</link>
      <pubDate>Thu, 05 Jan 2006 21:48:36 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2006/01/05/where-do-old-programmers-go/</guid>
      <description>&lt;p&gt;Nowadays this question is asked frequently. A lot of guys in their 30s realize that they are the oldest guys in their groups. 20+ guys don&amp;rsquo;t see wise sages around. What is going on? It was &lt;a href=&#34;http://ask.slashdot.org/article.pl?sid=05/12/16/1833210&amp;amp;from=rss&#34;&gt;debated on /.&lt;/a&gt; without any productive outcome (as usual).&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s take a look at the problem using available statistics. One nice source of data is the &lt;a href=&#34;http://nces.ed.gov/&#34;&gt;National Center for Educational Statistics&lt;/a&gt;. I made a chart using &lt;a href=&#34;http://nces.ed.gov/programs/digest/d04/tables/dt04_280.asp&#34;&gt;Table 280. &amp;quot;Earned degrees in computer and information sciences conferred by degree-granting institutions, by level of degree and sex of student: 1970-71 to 2002-03&amp;quot;&lt;/a&gt; (only totals are used):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Live Filtering</title>
      <link>https://www.lazutkin.com/blog/2005/12/24/live-filtering/</link>
      <pubDate>Sat, 24 Dec 2005 04:58:28 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/24/live-filtering/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update on 11/25/2007&lt;/strong&gt;: today this article presents mostly historical interest. Since Dojo 0.2 a lot of versions were published and many things were changed. At the time of this writing Dojo is at ripe 1.0. I had to disable all Ajax action in examples because I don&amp;rsquo;t use Dojo 0.2 anymore.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;What is Filtering? It is a selection of items using some criteria (filter). In this tutorial I am going to filter documents of my blog (made with &lt;a href=&#34;http://www.djangoproject.com/&#34;&gt;Django&lt;/a&gt;, of course) matching titles against user-specified substring. Later on I&amp;rsquo;ll talk about generalization of this approach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TinyMCE 2.0.1</title>
      <link>https://www.lazutkin.com/blog/2005/12/20/tinymce-201/</link>
      <pubDate>Tue, 20 Dec 2005 01:36:21 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/20/tinymce-201/</guid>
      <description>&lt;p&gt;In case you missed it too: &lt;a href=&#34;http://tinymce.moxiecode.com/index.php&#34;&gt;TinyMCE 2.0.1&lt;/a&gt; is out.&lt;/p&gt;&#xA;&lt;p&gt;I am getting a feeling that everybody is trying to roll out something for Xmas. Hmm. Maybe I should do it too.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dojo 0.2.1</title>
      <link>https://www.lazutkin.com/blog/2005/12/20/dojo-021/</link>
      <pubDate>Tue, 20 Dec 2005 01:29:19 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/20/dojo-021/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://blog.dojotoolkit.org/2005/12/19/dojo-021&#34;&gt;Dojo 0.2.1&lt;/a&gt; is out. This is a maintenance release, which doesn&amp;rsquo;t change API but fixes some pesky bugs. Go and get it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New releases</title>
      <link>https://www.lazutkin.com/blog/2005/12/17/new-releases/</link>
      <pubDate>Sat, 17 Dec 2005 23:25:14 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/17/new-releases/</guid>
      <description>&lt;p&gt;Today I saw new search phrase, which brought visitors to my humble blog: &lt;em&gt;rails 1.0 &amp;quot;Lost connection to MySQL server during query&amp;quot;&lt;/em&gt;. Yes, you guessed it right! &lt;a href=&#34;http://rubyonrails.org/&#34;&gt;Ruby on Rails 1.0&lt;/a&gt;  was released 4 days ago. &lt;a href=&#34;http://script.aculo.us/&#34;&gt;Scrip.aculo.us 1.5&lt;/a&gt; and &lt;a href=&#34;http://prototype.conio.net/&#34;&gt;Prototype 1.4&lt;/a&gt; were released as well.&lt;/p&gt;&#xA;&lt;p&gt;On 15th &lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo 0.2&lt;/a&gt; was released too. It sports many widgets, improved speed, and new BSD license, which was added to AFL. Now you can use it in GPL projects as well as in commercial applications even, if you don&amp;rsquo;t understand legalese of AFL. Now there is no excuse for &lt;a href=&#34;https://www.lazutkin.com/blog/2005/12/16/diy-and-nih-syndromes/&#34;&gt;reinventing the wheel&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DIY and NIH syndromes</title>
      <link>https://www.lazutkin.com/blog/2005/12/16/diy-and-nih-syndromes/</link>
      <pubDate>Fri, 16 Dec 2005 23:17:47 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/16/diy-and-nih-syndromes/</guid>
      <description>&lt;p&gt;Many programmers have &lt;a href=&#34;http://en.wikipedia.org/wiki/DIY&#34;&gt;DIY&lt;/a&gt;  attitude. It is understandable: they want to do new exciting stuff themselves. In some cases it is perfectly reasonable: exotic functionality, special requirements, performance enhancements, and so on. Sometimes incorporating 3rd-party library makes overall API inconsistent, which is bad especially for programming tools, or big projects.&lt;/p&gt;&#xA;&lt;p&gt;There is a fine line between DIY and &lt;a href=&#34;http://en.wikipedia.org/wiki/NIH_syndrome&#34;&gt;NIH&lt;/a&gt;, when DIY part is used without rational explanations. Of course, in some cases NIH is reasonable too, e.g., high price of acquisition of required 3rd-party tools, or intellectual property concerns.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Snakes, rubies, and some comments</title>
      <link>https://www.lazutkin.com/blog/2005/12/12/snakes-rubies-and-some-comments/</link>
      <pubDate>Mon, 12 Dec 2005 02:58:56 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/12/snakes-rubies-and-some-comments/</guid>
      <description>&lt;p&gt;A week ago &lt;a href=&#34;https://www.lazutkin.com/blog/2005/12/06/what-rors-creator-think-about-django/&#34;&gt;I posted a link&lt;/a&gt;  to &lt;a href=&#34;http://www.loudthinking.com/arc/000545.html&#34;&gt;David&amp;rsquo;s take&lt;/a&gt;  on &lt;a href=&#34;http://snakesandrubies.com/event/&#34;&gt;&amp;quot;Snakes and Rubies&amp;quot;&lt;/a&gt;  event. Of course I am talking about article written by RoR&amp;rsquo;s creator. It is a great read, but this time I&amp;rsquo;ve read reader&amp;rsquo;s comments (or &amp;quot;challenges to the Loud Thinking&amp;quot;). Oh, boy! It gives you insight into Rails, Django, and their perception by developers and users. For example, I am not very familiar with i18n problem, but it looks like a lot of people were quite passionate about it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django Ajax Redux</title>
      <link>https://www.lazutkin.com/blog/2005/12/10/django-ajax-redux/</link>
      <pubDate>Sat, 10 Dec 2005 03:43:12 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/10/django-ajax-redux/</guid>
      <description>&lt;p&gt;Three weeks ago we had a discussion about Ajax support in Django, which resulted in &lt;a href=&#34;http://code.djangoproject.com/wiki/AJAX&#34;&gt;&amp;quot;Ajax and Django&amp;quot;&lt;/a&gt;  wiki page. A short recap: it lists a vague goal, some general considerations, and possible strategies; it scratches the surface of existing implementations (mostly RoR), existing third-party toolkits (Mochikit/Dojo), and related RPC-style and REST-style services. No code was produced, no consensus was reached, but now it is a part of &lt;a href=&#34;http://code.djangoproject.com/wiki/VersionOneFeatures&#34;&gt;Django&amp;rsquo;s Version One roadmap&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What RoR&#39;s creator think about Django</title>
      <link>https://www.lazutkin.com/blog/2005/12/06/what-rors-creator-think-about-django/</link>
      <pubDate>Tue, 06 Dec 2005 01:19:04 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/06/what-rors-creator-think-about-django/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.loudthinking.com/about.html&#34;&gt;David Heinemeier Hansson&lt;/a&gt;  (the creator of Ruby on Rails) wrote &lt;a href=&#34;http://www.loudthinking.com/arc/000545.html&#34;&gt;a little piece on Snakes and Rubies event&lt;/a&gt;  highlighting differences between &lt;a href=&#34;http://www.rubyonrails.com/&#34;&gt;Ruby on Rails&lt;/a&gt;  and &lt;a href=&#34;http://www.djangoproject.com/&#34;&gt;Django&lt;/a&gt;. Very interesting read!&lt;/p&gt;</description>
    </item>
    <item>
      <title>1st news on Django/Rails bash</title>
      <link>https://www.lazutkin.com/blog/2005/12/03/1st-news-djangorails-bash/</link>
      <pubDate>Sat, 03 Dec 2005 23:13:25 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/03/1st-news-djangorails-bash/</guid>
      <description>&lt;p&gt;Rob Lambert just posted &lt;a href=&#34;http://jroller.com/page/roblambert/?anchor=thoughts_on_snakes_and_rubies&#34;&gt;his thoughts on Snakes and Rubies event&lt;/a&gt; in Chicago today. I am sure we will have more info later (including promised video) but it is an interesting read anyway. And it is available &lt;strong&gt;now&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;: &lt;a href=&#34;http://www.kittyjoyce.com/eric/&#34;&gt;Eric Sinclair&lt;/a&gt; posted &lt;a href=&#34;http://www.kittyjoyce.com/eric/log/archive/001470.html#001470&#34;&gt;his notes on the event&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebUI refresher</title>
      <link>https://www.lazutkin.com/blog/2005/12/03/webui-refresher/</link>
      <pubDate>Sat, 03 Dec 2005 21:58:06 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/12/03/webui-refresher/</guid>
      <description>&lt;p&gt;I just released a refresher for OpenWrt WebUI alpha package. It fixes a bug, which was reported by several people.&lt;/p&gt;&#xA;&lt;p&gt;Some users had problems with &lt;em&gt;Net configurator&lt;/em&gt; applet, if &lt;code&gt;wl0_country_code&lt;/code&gt; was unset in NVRAM. While it is extremely easy to set, I suggest reinstalling webui. Please read &lt;a href=&#34;https://www.lazutkin.com/blog/2005/11/27/openwrt-gui-alpha-released/&#34;&gt;the original post &lt;/a&gt; on how to do it.&lt;/p&gt;&#xA;&lt;p&gt;Thank you guys for your great feedback! Working together we will make webui even better.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Different people, different opinions</title>
      <link>https://www.lazutkin.com/blog/2005/11/30/different-people-different-opinions/</link>
      <pubDate>Wed, 30 Nov 2005 23:30:45 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/30/different-people-different-opinions/</guid>
      <description>&lt;p&gt;It is practically impossible to travel to Muslim countries without hearing some anecdotes about &lt;a href=&#34;http://en.wikipedia.org/wiki/Nasreddin_Hodja&#34;&gt;Nasreddin Hodja&lt;/a&gt;. Here is one (&lt;a href=&#34;http://hem.bredband.net/hodja/business.htm#04&#34;&gt;the source&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Hodja was once a judge. One day a man came to his house to complain about his neighbor. Hodja listened carefully and then said to him,&lt;/p&gt;&#xA;&lt;p&gt;— My good man, you are right.&lt;/p&gt;&#xA;&lt;p&gt;The man went away happily. In a little while the first man&amp;rsquo;s neighbor came to see Hodja. He complained about the first man. Hodja listened carefully to him, too, and then said,&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: alpha released!</title>
      <link>https://www.lazutkin.com/blog/2005/11/27/openwrt-gui-alpha-released/</link>
      <pubDate>Sun, 27 Nov 2005 14:31:39 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/27/openwrt-gui-alpha-released/</guid>
      <description>&lt;p&gt;Finally I released WebUI 0.1 (Homunculus) alpha — AJAX-based web interface for &lt;a href=&#34;http://openwrt.org/&#34;&gt;OpenWrt&lt;/a&gt; made with &lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo&lt;/a&gt;! Highlights of this release: 5 more applets including firewall configurator and more network settings. Now proceed to install the package and to read release notes.&lt;/p&gt;&#xA;&lt;p&gt;The package is here: &lt;a href=&#34;https://www.lazutkin.com/download/webui-0.1-alpha.ipk&#34;&gt;webui-0.1-alpha.ipk&lt;/a&gt;. You can install it using following command in OpenWrt shell:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ipkg install http://lazutkin.com/download/webui-0.1-alpha.ipk&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Release notes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;WebUI can be installed side-by side with webif (comes standard with OpenWrt White Russian RC4). To access it use following URL: &lt;strong&gt;http://your_router/webui.html&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Five more applets are added to this release:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;System&lt;/strong&gt;: provides a menu for existing applets.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Firewall configurator&lt;/strong&gt;: simple management of DMZ and port forwarding.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hosts configurator&lt;/strong&gt;: manages a list of static hosts (used by DNS and by Firewall configurator).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ethers configurator&lt;/strong&gt;: manages a list of static assignment of IP by MACs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;WDS configurator&lt;/strong&gt;: manages WDS connection settings.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;General clean up of user interface:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;More information is moved to tooltips.&lt;/li&gt;&#xA;&lt;li&gt;Help is provided by tooltips.&lt;/li&gt;&#xA;&lt;li&gt;Context-specific references to OpenWrt documentation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Tested on following browsers:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Firefox: works.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;IE6: works.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Opera 8.50: doesn&amp;rsquo;t work.&lt;/li&gt;&#xA;&lt;li&gt;Konqueror: doesn&amp;rsquo;t work.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;I decided to proceed with release in spite of Konqueror and Opera problems. I hope it will be solved later. For now use Firefox.&lt;/li&gt;&#xA;&lt;li&gt;As always I appreciate your feedback: &lt;strong&gt;openwrt [@] lazutkin [.] com&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>OpenWrt RC4 is out</title>
      <link>https://www.lazutkin.com/blog/2005/11/24/openwrt-rc4-out/</link>
      <pubDate>Thu, 24 Nov 2005 23:46:14 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/24/openwrt-rc4-out/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://openwrt.org/&#34;&gt;OpenWrt RC4 is out&lt;/a&gt;. Take it while it&amp;rsquo;s hot! It includes multiple stability updates and webif web-based user interface!&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;: &lt;a href=&#34;https://www.lazutkin.com/blog/2005/11/27/openwrt-gui-alpha-released/&#34;&gt;OpenWrt GUI alpha is released&lt;/a&gt; and tested with RC4.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: alpha delayed</title>
      <link>https://www.lazutkin.com/blog/2005/11/20/openwrt-gui-alpha-delayed/</link>
      <pubDate>Sun, 20 Nov 2005 21:55:14 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/20/openwrt-gui-alpha-delayed/</guid>
      <description>&lt;p&gt;During final tests I found a nasty bug in &amp;quot;Firewall configurator&amp;quot; applet. I decided to postpone the release until I&amp;rsquo;ll be able fix it. You can see &lt;a href=&#34;http://www.flickr.com/photos/uhop/65358797/&#34;&gt;bastard&amp;rsquo;s picture on Flickr&lt;/a&gt; along with some description of it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>London presentation</title>
      <link>https://www.lazutkin.com/blog/2005/11/20/london-presentation/</link>
      <pubDate>Sun, 20 Nov 2005 01:18:16 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/20/london-presentation/</guid>
      <description>&lt;p&gt;I found a &lt;a href=&#34;http://happygiraffe.net/blog/archives/2005/11/19/web-frameworks-evening/&#34;&gt;blog post&lt;/a&gt;  describing &lt;a href=&#34;http://blog.unixdaemon.net/cgi-bin/blosxom.pl/2005/10/27&#34;&gt;London Web Frameworks Night&lt;/a&gt;, which took place on 11/17/2005 at the University of Westminster. &lt;a href=&#34;http://happygiraffe.net/blog/&#34;&gt;Jabbering Giraffe&lt;/a&gt; reports on presentation of three web frameworks: &lt;a href=&#34;http://catalyst.perl.org/&#34;&gt;Catalyst&lt;/a&gt;, &lt;a href=&#34;http://www.djangoproject.com/&#34;&gt;Django&lt;/a&gt;, And &lt;a href=&#34;http://www.rubyonrails.org/&#34;&gt;Ruby on Rails&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It is an interesting read. Author remarks that Django&amp;rsquo;s Admin (&lt;em&gt;&amp;quot;with lots of Ajax and JavaScript goodness&amp;quot;&lt;/em&gt;) was the main object of envy of other frameworks. Another interesting remark was how good Rails people are at marketing.&lt;/p&gt;&#xA;&lt;p&gt;I hope it will provide you a fix until next event: &lt;a href=&#34;http://snakesandrubies.com/event/&#34;&gt;Chicago&amp;rsquo;s Rails and Django presentation&lt;/a&gt;. Creators of both frameworks will present their &amp;quot;children&amp;quot; and answer questions. This event is expected to be videotaped and published afterwards. It means even if you cannot go to Chicago, IL you can still have your questions answered publicly by David Heinemeier Hansson and our very own Adrian Holovaty (with Jacob Kaplan-Moss on bench, who is getting ready to play when situation gets rough).&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: alpha is coming</title>
      <link>https://www.lazutkin.com/blog/2005/11/19/openwrt-gui-alpha-coming/</link>
      <pubDate>Sat, 19 Nov 2005 00:24:01 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/19/openwrt-gui-alpha-coming/</guid>
      <description>&lt;p&gt;I was able to work more on OpenWrt GUI. Alpha release seems inevitable now. I&amp;rsquo;ll try to publish it during this weekend.&lt;/p&gt;&#xA;&lt;p&gt;I added back the main applet, which serves as a menu for all other applets. More network configuration-related applets are added. Status applet is cleaned up considerably: all less important information was moved to tooltips. &lt;a href=&#34;http://www.flickr.com/photos/uhop/64685735/&#34;&gt;New screenshot&lt;/a&gt; is available for your viewing pleasure.&lt;/p&gt;&#xA;&lt;p&gt;Stay tuned for upcoming alpha release!&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Orleans, July 23, 2005</title>
      <link>https://www.lazutkin.com/blog/2005/11/12/new-orleans-july-23-2005/</link>
      <pubDate>Sat, 12 Nov 2005 22:50:28 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/12/new-orleans-july-23-2005/</guid>
      <description>&lt;p&gt;Last time I visited New Orleans on July 23, 2005 on my way to Florida. It was a short visit. I planned to stop again on my way back, but I didn&amp;rsquo;t have time. &lt;em&gt;&amp;quot;New Orleans is not going anywhere. I can do it some other time.&amp;quot;&lt;/em&gt; One month later Hurricane Katrina made landfall devastating New Orleans.&lt;/p&gt;&#xA;&lt;p&gt;I am looking at pictures I took during that brief stay — everything is so peaceful. It was about noon. Streets were practically empty. Tourists were sleeping late after crazy night on Rue Bourbon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New RSS framework</title>
      <link>https://www.lazutkin.com/blog/2005/11/12/new-rss-framework/</link>
      <pubDate>Sat, 12 Nov 2005 01:29:25 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/12/new-rss-framework/</guid>
      <description>&lt;p&gt;As you all know &lt;a href=&#34;http://www.djangoproject.com/weblog/2005/nov/11/syndication/&#34;&gt;Django has new shiny RSS framework&lt;/a&gt;. This change breaks my simple &lt;a href=&#34;https://www.lazutkin.com/blog/2005/09/23/code_rss_django/&#34;&gt;RSS tutorial&lt;/a&gt; and I am glad that it happened! To tell you the whole truth, it breaks only &amp;quot;The Simple Way&amp;quot; to do RSS in Django replacing it with even simpler one. &amp;quot;The Smart Way&amp;quot; RSS still works as you can see on my web site. Like I predicted the feedgenerator is still around and it learned some new tricks: it can produce Atom feed now! I am going to update the tutorial recreating old examples with new RSS framework. It will be fun!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Looking at stats</title>
      <link>https://www.lazutkin.com/blog/2005/11/10/looking-stats/</link>
      <pubDate>Thu, 10 Nov 2005 02:23:33 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/10/looking-stats/</guid>
      <description>&lt;p&gt;Recently I looked at the stats of my web site. &lt;a href=&#34;http://www.dreamhost.com/&#34;&gt;DreamHost&lt;/a&gt;  provides &lt;a href=&#34;http://www.analog.cx/&#34;&gt;Analog 6.0&lt;/a&gt;. I supplemented it with &lt;a href=&#34;http://awstats.sourceforge.net/&#34;&gt;awstats&lt;/a&gt;. Plus there are some other means to analyze the traffic. Let&amp;rsquo;s put it this way: I know my average reader. I thought I did. Anyway I found a few surprises.&lt;/p&gt;&#xA;&lt;p&gt;The country list includes 77 countries. Out of 193. Not bad for a personal blog. Practically all Eurasian countries, and countries of both Americas are in the list. Australia, New Zealand, and many island countries are there as well. Only 2 countries from Africa: South Africa and Senegal. Pity.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django goes international</title>
      <link>https://www.lazutkin.com/blog/2005/11/04/django-goes-international/</link>
      <pubDate>Fri, 04 Nov 2005 00:32:31 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/04/django-goes-international/</guid>
      <description>&lt;p&gt;As of today i18n branch of Django is merged back to trunk. What is i18n? It is an abbreviation of the big word &lt;em&gt;&amp;quot;internationalization&amp;quot;&lt;/em&gt;. l10n (&lt;em&gt;&amp;quot;localization&amp;quot;&lt;/em&gt;) is a sibling of i18n. In practice it means that now you and I can do truly international multi-language web sites without much hassle. While this is more important for big corporations and international organizations, it is a big step for Django&amp;rsquo;s truly international community. Let&amp;rsquo;s thank &lt;a href=&#34;http://hugo.muensterland.org/kategorie/django/&#34;&gt;Hugo&lt;/a&gt; (the engine behind this effort), all participating developers, and all translators for their monumental effort to make it a reality.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TinyMCE 2.0RC4 is out</title>
      <link>https://www.lazutkin.com/blog/2005/11/03/tinymce-20rc4-out/</link>
      <pubDate>Thu, 03 Nov 2005 21:40:44 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/11/03/tinymce-20rc4-out/</guid>
      <description>&lt;p&gt;New TinyMCE 2.0RC4 is out. It fixes numerous bugs, which never bit me. Is it going to be the last RC before actual release? Who know. &lt;a href=&#34;http://tinymce.moxiecode.com/&#34;&gt;Grab it&lt;/a&gt; while it is hot!&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: hosts editor</title>
      <link>https://www.lazutkin.com/blog/2005/10/30/openwrt_gui_hosts_editor/</link>
      <pubDate>Sun, 30 Oct 2005 21:51:22 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/30/openwrt_gui_hosts_editor/</guid>
      <description>&lt;p&gt;I didn&amp;rsquo;t have a lot of time this weekend. So I decided to implement the simplest part of upcoming OpenWrt GUI (webui) — &lt;em&gt;hosts&lt;/em&gt; editor. It is a perfect candidate to write something in 15 minutes or less — it has almost no &amp;quot;business&amp;quot; logic in it: read/edit/verify/write cycle. The hardest part was to learn how to upload dynamically generated files without writing them to disk first.&lt;/p&gt;&#xA;&lt;p&gt;It turned out to be very simple. Right now it is implemented using &lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo&lt;/a&gt;&amp;rsquo;s versatile &lt;a href=&#34;http://dojotoolkit.org/docs/intro_to_dojo_io.html&#34;&gt;dojo.io.bind()&lt;/a&gt; facility and some external code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated OpenWrt GUI preview</title>
      <link>https://www.lazutkin.com/blog/2005/10/28/updated_openwrt_gui_preview/</link>
      <pubDate>Fri, 28 Oct 2005 14:55:43 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/28/updated_openwrt_gui_preview/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;: this document is officially obsolete — &lt;strong&gt;&lt;a href=&#34;https://www.lazutkin.com/blog/2005/11/27/openwrt-gui-alpha-released/&#34;&gt;alpha is released&lt;/a&gt;&lt;/strong&gt;!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Please download it again: &lt;strike&gt;/webui-0.1-pre-alpha.ipk&lt;/strike&gt; — two debug files made their ways to the release messing things up. Now it is fixed and I hope it&amp;rsquo;ll work for you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DreamHost switched to Python 2.4.1</title>
      <link>https://www.lazutkin.com/blog/2005/10/27/dreamhost_switched_python_241/</link>
      <pubDate>Thu, 27 Oct 2005 20:45:09 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/27/dreamhost_switched_python_241/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.dreamhost.com/&#34;&gt;DreamHost&lt;/a&gt;  has switched to Python 2.4.1. Now &lt;em&gt;python&lt;/em&gt; is the alias for &lt;em&gt;python2.4&lt;/em&gt;. Yay!&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;: checked it again &lt;em&gt;—&lt;/em&gt; nope, &lt;em&gt;python&lt;/em&gt; is the alias for &lt;em&gt;python2.3&lt;/em&gt;. But &lt;em&gt;python2.4&lt;/em&gt; is available as well.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: screencast and screenshots</title>
      <link>https://www.lazutkin.com/blog/2005/10/26/openwrt_gui_screencast_and_screenshots/</link>
      <pubDate>Wed, 26 Oct 2005 22:30:04 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/26/openwrt_gui_screencast_and_screenshots/</guid>
      <description>&lt;p&gt;After some requests I&amp;rsquo;ve updated &lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/1135170/&#34;&gt;OpenWrt GUI screenshots&lt;/a&gt;.Additionally I&amp;rsquo;ve recorded a &lt;a href=&#34;https://www.lazutkin.com/download/openwrt_gui.html&#34;&gt;screencast &lt;/a&gt; using &lt;a href=&#34;http://www.debugmode.com/wink/&#34;&gt;Wink&lt;/a&gt;. Enjoy!&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;: new OpenWrt GUI &lt;a href=&#34;https://www.lazutkin.com/blog/2005/11/27/openwrt-gui-alpha-released/&#34;&gt;alpha is released&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: preview is released</title>
      <link>https://www.lazutkin.com/blog/2005/10/26/openwrt_gui_preview_released/</link>
      <pubDate>Wed, 26 Oct 2005 03:30:17 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/26/openwrt_gui_preview_released/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;: this document is officially obsolete — &lt;strong&gt;&lt;a href=&#34;https://www.lazutkin.com/blog/2005/11/27/openwrt-gui-alpha-released/&#34;&gt;alpha is released&lt;/a&gt;&lt;/strong&gt;!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Finally I released a preview: &lt;strike&gt;/webui-0.1-pre-alpha.ipk&lt;/strike&gt;!&lt;/p&gt;&#xA;&lt;p&gt;I included two information applets and a simple network configuration applet. I think it would be enough for a proof of concept. I borrowed heavily from &lt;a href=&#34;http://forum.openwrt.org/viewtopic.php?pid=12558#p12558&#34;&gt;nbd&amp;rsquo;s webif&lt;/a&gt;. So if it works for you, it is due to his OpenWrt expertise. If it doesn&amp;rsquo;t, it is my fault.&lt;/p&gt;&#xA;&lt;p&gt;Both webif and webui can be installed side by side:&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: preview is ready, packaging</title>
      <link>https://www.lazutkin.com/blog/2005/10/24/openwrt_gui_preview_ready_packaging/</link>
      <pubDate>Mon, 24 Oct 2005 01:38:14 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/24/openwrt_gui_preview_ready_packaging/</guid>
      <description>&lt;p&gt;Finally I found time to finish it up. It is pre-alpha quality now, but shows the direction.&lt;/p&gt;&#xA;&lt;p&gt;The only problem is a packaging. I didn&amp;rsquo;t mean &lt;a href=&#34;http://www.openwrt.org/&#34;&gt;OpenWrt&lt;/a&gt;&amp;rsquo;s IPKG. I am talking about creating a custom build of &lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo&lt;/a&gt; to reduce the foot print. Dojo has a special provision for that but so far I was not able to do it getting some strange errors. I hope I&amp;rsquo;ll get some help from developers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Migration to new Django admin</title>
      <link>https://www.lazutkin.com/blog/2005/10/19/migration_new_django_admin/</link>
      <pubDate>Wed, 19 Oct 2005 01:53:51 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/19/migration_new_django_admin/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve migrated my sites to new Django admin. It is easy to do but make sure that you followed instructions closely. Small mistakes can cost you a lot of head-scratching time. You can find the instructions at the bottom of &lt;a href=&#34;http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges&#34;&gt;Backwards-incompatible changes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;New refactoring has totally made sense. Meanwhile Robert Wittams &amp;amp; Co is working on new-admin (note the hyphen). Django&amp;rsquo;s admin is a very nice app (now it is an app!). I hope I could reuse some pieces of upcoming new-admin in my apps. If I remember correctly it was the main driving force behind branching.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DreamHost: Python 2.4.1</title>
      <link>https://www.lazutkin.com/blog/2005/10/14/dreamhost_python_241/</link>
      <pubDate>Fri, 14 Oct 2005 20:01:31 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/14/dreamhost_python_241/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.dreamhost.com&#34;&gt;DreamHost&lt;/a&gt;  has installed Python 2.4.1. Somehow I didn&amp;rsquo;t see it before. Default &lt;em&gt;python&lt;/em&gt; goes to Python 2.3.5. Use &lt;em&gt;python2.4&lt;/em&gt; instead.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: it works, kind of</title>
      <link>https://www.lazutkin.com/blog/2005/10/14/openwrt_gui_it_works_kind/</link>
      <pubDate>Fri, 14 Oct 2005 00:37:18 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/14/openwrt_gui_it_works_kind/</guid>
      <description>&lt;p&gt;I decided to post some &lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/1135170/&#34;&gt;screenshots of OpenWrt GUI&lt;/a&gt;  running on my browser. I didn&amp;rsquo;t package it as .ipk yet. Screenshots are hosted on &lt;a href=&#34;http://www.flickr.com/&#34;&gt;Flickr&lt;/a&gt;. If you want to see full-size picture (== undistorted by scaling), go to &lt;em&gt;&amp;quot;different sizes&amp;quot;&lt;/em&gt; (it is in &lt;em&gt;&amp;quot;Additional information&amp;quot;&lt;/em&gt; on the right side), and select &lt;em&gt;&amp;quot;Large&amp;quot;&lt;/em&gt;. Please bear in mind that this is the first cut without any niceties. I&amp;rsquo;ll put some niceties in, but I want to have working functionality first.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt: jumpstart with JTAG</title>
      <link>https://www.lazutkin.com/blog/2005/10/09/openwrt_jumpstart_jtag/</link>
      <pubDate>Sun, 09 Oct 2005 23:49:59 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/09/openwrt_jumpstart_jtag/</guid>
      <description>&lt;p&gt;As you know &lt;a href=&#34;https://www.lazutkin.com/blog/2005/10/06/openwrt_gui_good_bad_news/&#34;&gt;I bricked&lt;/a&gt;  my wireless router. All simple things were tried without any positive effect. Kaloz (of OpenWrt fame) has advised me to try &lt;a href=&#34;http://en.wikipedia.org/wiki/JTAG&#34;&gt;JTAG&lt;/a&gt;. It&amp;rsquo;s a very simple thing: you need a computer, a proper software, and JTAG cable, which can be &lt;a href=&#34;http://wiki.openwrt.org/OpenWrtDocs/Troubleshooting#head-d1e14acb3488c8f4b91727d72dce9f59583f9d65&#34;&gt;self-made&lt;/a&gt;. Obviously the last part is the crucial one.&lt;/p&gt;&#xA;&lt;p&gt;I made a trip to my friendly neighborhood &lt;a href=&#34;http://www.altex.com/&#34;&gt;Altex&lt;/a&gt;  store and bought all necessary parts: 4 100 Ohm resistors, male &amp;amp; female 14 pin IDC connectors (they didn&amp;rsquo;t have 12 pin ones, which were modified later using cutters), 25 pin male SUB-D, and 3&amp;rsquo; 25 pin male to female cable — I figured I&amp;rsquo;ll make extremely short JTAG &lt;em&gt;&amp;quot;cable&amp;quot;&lt;/em&gt; and attach it to short printer cable. The last item was the most expensive part: $3.99. It took me about 5 minutes to put everything together.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ian Maurer: unit testing</title>
      <link>https://www.lazutkin.com/blog/2005/10/09/ian_maurer_unit_testing/</link>
      <pubDate>Sun, 09 Oct 2005 10:32:45 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/09/ian_maurer_unit_testing/</guid>
      <description>&lt;p&gt;In his blog post Ian Maurer shares a very slick way to run unit tests with SQLite&amp;rsquo;s in-memory database. Check it out: &lt;a href=&#34;http://itmaurer.com/blog/?p=2&#34;&gt;http://itmaurer.com/blog/?p=2&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Simple, elegant, practical.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: good, bad news</title>
      <link>https://www.lazutkin.com/blog/2005/10/06/openwrt_gui_good_bad_news/</link>
      <pubDate>Thu, 06 Oct 2005 21:43:00 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/06/openwrt_gui_good_bad_news/</guid>
      <description>&lt;p&gt;Today I have good news and bad news.&lt;/p&gt;&#xA;&lt;p&gt;The good news is tonight I was able to work on AJAX OpenWrt GUI a little bit more. It is coming together. I coded my first applet. It shows current stats, nothing fancy.&lt;/p&gt;&#xA;&lt;p&gt;The bad news is I bricked my router apparently by running &lt;em&gt;nvram show&lt;/em&gt; repeatedly. I suspect that nvram is corrupted beyond salvation. I have to reset it somehow. I tried simple recipies listed in &lt;a href=&#34;http://wiki.openwrt.org/OpenWrtDocs/Troubleshooting&#34;&gt;OpenWrt Wiki&lt;/a&gt; but no luck so far. I&amp;rsquo;ll try to revive it on weekend. I have a feeling that my future lies with JTAG. Until the router is up I cannot debug OpenWrt GUI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running on InnoDB now</title>
      <link>https://www.lazutkin.com/blog/2005/10/03/running_innodb_now/</link>
      <pubDate>Mon, 03 Oct 2005 20:58:49 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/03/running_innodb_now/</guid>
      <description>&lt;p&gt;O.K. I migrated to InnoDB using backup/restore. So far so good.&lt;/p&gt;&#xA;&lt;p&gt;Don&amp;rsquo;t forget to replace all &lt;em&gt;&amp;quot;MyISAM&amp;quot;&lt;/em&gt; to &lt;em&gt;&amp;quot;InnoDB&amp;quot;&lt;/em&gt; in your backup files before restoring them to new databases.&lt;/p&gt;</description>
    </item>
    <item>
      <title>It finally happened!</title>
      <link>https://www.lazutkin.com/blog/2005/10/03/it_finally_happened/</link>
      <pubDate>Mon, 03 Oct 2005 20:28:40 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/03/it_finally_happened/</guid>
      <description>&lt;p&gt;Joy to the World! &lt;a href=&#34;http://www.dreamhost.com/&#34;&gt;DreamHost&lt;/a&gt; just started to offer MySQL/InnoDB! Finally we can do transactions. Just three weeks ago they &lt;a href=&#34;https://www.lazutkin.com/blog/2005/09/12/dreamhost_no_plans_transactional_db/&#34;&gt;&lt;em&gt;&amp;quot;didn&amp;rsquo;t have any plans.&amp;quot;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Wording of the news is kind of strange: &lt;em&gt;&amp;quot;we now offer InnoDB support on all new MySQL databases anybody adds from our web panel.&amp;quot;&lt;/em&gt; It turned out I cannot change my existing databases. Oh, well. I can copy them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technorati Rank</title>
      <link>https://www.lazutkin.com/blog/2005/10/02/technorati_rank/</link>
      <pubDate>Sun, 02 Oct 2005 23:46:43 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/10/02/technorati_rank/</guid>
      <description>&lt;p&gt;Today I learned that this blog is ranked 775,745 by &lt;a href=&#34;http://www.technorati.com/&#34;&gt;Technorati&lt;/a&gt;! It means that only 775,744 blogs are better than mine. Eat my dust you two nameless losers!&lt;/p&gt;&#xA;&lt;p&gt;I pledge to continue my standards of excellence and to grow my rank to at least 1,000,000. As a matter of fact I did almost everything I could for that. Now I have to find 224,255 people to join Technorati with their blogs&amp;hellip; Damn this Technorati pyramid scheme!&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI: development</title>
      <link>https://www.lazutkin.com/blog/2005/09/30/openwrt_gui_development/</link>
      <pubDate>Fri, 30 Sep 2005 18:48:29 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/30/openwrt_gui_development/</guid>
      <description>&lt;p&gt;I was able to spend several hours this week to work on upcoming &lt;a href=&#34;http://openwrt.org/&#34;&gt;OpenWrt&lt;/a&gt;  GUI. I use &lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo&lt;/a&gt;  as a foundation. At this point I coded a skeleton, which works as a proof of concept. As soon as I finish putting in AJAX guts, I&amp;rsquo;ll switch to meaty functionality. Add some nice skin to it and we have our &lt;a href=&#34;http://en.wikipedia.org/wiki/Homunculus&#34;&gt;homunculus&lt;/a&gt; up and running.&lt;/p&gt;&#xA;&lt;p&gt;Huh? AJAX? No, it&amp;rsquo;s not &lt;a href=&#34;http://www.colgate.com/app/Colgate/US/HC/Products/HouseholdCleaners/Ajax.cvsp&#34;&gt;Ajax the detergent&lt;/a&gt;. No, I didn&amp;rsquo;t mean &lt;a href=&#34;http://english.ajax.nl/&#34;&gt;Ajax the pro soccer club&lt;/a&gt;. &amp;quot;Now I clearly remember that AJAX is a Trojan, and I don&amp;rsquo;t like Trojans and viruses&amp;quot; — clever, but no. Go see &lt;a href=&#34;http://www.imdb.com/title/tt0332452/&#34;&gt;the movie&lt;/a&gt; about Greek heroes and the Wooden Horse. And let&amp;rsquo;s skip &amp;quot;Trojan&amp;quot; discussion altogether — I&amp;rsquo;m trying to be PG-13 rated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TinyMCE 2.0RC3 is out</title>
      <link>https://www.lazutkin.com/blog/2005/09/30/tinymce_20rc3_out/</link>
      <pubDate>Fri, 30 Sep 2005 17:57:36 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/30/tinymce_20rc3_out/</guid>
      <description>&lt;p&gt;Once again, let&amp;rsquo;s grab new version of &lt;a href=&#34;http://tinymce.moxiecode.com/&#34;&gt;TinyMCE&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing new cache code</title>
      <link>https://www.lazutkin.com/blog/2005/09/26/testing_new_cache_code/</link>
      <pubDate>Mon, 26 Sep 2005 11:25:50 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/26/testing_new_cache_code/</guid>
      <description>&lt;p&gt;I am running new Django cache code now. If you notice any problems with it (e.g., error messages), please drop me a line at once.&lt;/p&gt;&#xA;&lt;p&gt;My email is at the bottom of the page.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New TinyMCE config for Django</title>
      <link>https://www.lazutkin.com/blog/2005/09/25/new_tinymce_config_django/</link>
      <pubDate>Sun, 25 Sep 2005 13:48:50 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/25/new_tinymce_config_django/</guid>
      <description>&lt;p&gt;For a long time I wanted to have two TinyMCE toolbars for Django Admin:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One-line toolbar with the most essential tools, which gives a lot of space for inline editing of text.&lt;/li&gt;&#xA;&lt;li&gt;Full-featured toolbar with all tools for full-screen mode.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It finally happened. Spocke (the main developer of TinyMCE) helped me to figure out how to do it. I updated &lt;a href=&#34;http://code.djangoproject.com/wiki/CookBookAdminTools&#34;&gt;my article in Django Wiki&lt;/a&gt; with new config file, and removed my notes about space problem (new config file solves it) and flickering (new TinyMCE 2.0 RC2 works perfectly).&lt;/p&gt;</description>
    </item>
    <item>
      <title>TinyMCE: no flicker!</title>
      <link>https://www.lazutkin.com/blog/2005/09/23/tinymce_no_flicker/</link>
      <pubDate>Fri, 23 Sep 2005 21:33:43 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/23/tinymce_no_flicker/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://www.lazutkin.com/blog/2005/09/10/tinymce_20rc1_out/&#34;&gt;my previous post&lt;/a&gt;  I complained about annoying flickering. Well, I&amp;rsquo;ve upgraded to &lt;a href=&#34;http://tinymce.moxiecode.com/index.php&#34;&gt;TinyMCE 2.0 RC2&lt;/a&gt;  and it doesn&amp;rsquo;t flicker anymore! Run, don&amp;rsquo;t walk, and upgrade immediatelly!&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt GUI</title>
      <link>https://www.lazutkin.com/blog/2005/09/23/openwrt_gui/</link>
      <pubDate>Fri, 23 Sep 2005 20:46:45 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/23/openwrt_gui/</guid>
      <description>&lt;p&gt;Finally I bit the bullet and decided to implement &lt;a href=&#34;http://openwrt.org/&#34;&gt;OpenWrt&lt;/a&gt;  web-based user interface using &lt;a href=&#34;http://nbd.name/&#34;&gt;Felix Fietkau&lt;/a&gt;&amp;rsquo;s code. Well, MIPS processors used by &lt;a href=&#34;http://wiki.openwrt.org/TableOfHardware&#34;&gt;OpenWrt units&lt;/a&gt;  are not race horses and GUI is slow to my taste. Yes, I know that stock firmware is not faster. &amp;quot;Slow&amp;quot; is absolute category for me.&lt;/p&gt;&#xA;&lt;p&gt;How do we combat latencies and slow network speed? Exactly. We can apply the same for OpenWrt, where &amp;quot;slow network speed&amp;quot; is replaced with &amp;quot;slow processor on local network&amp;quot;. So I decided to do The Right Thing&lt;sup&gt;(tm)&lt;/sup&gt; and implement it using AJAX approach. I will use &lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Before Rita</title>
      <link>https://www.lazutkin.com/blog/2005/09/23/rita/</link>
      <pubDate>Fri, 23 Sep 2005 20:25:26 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/23/rita/</guid>
      <description>&lt;p&gt;Hurricane Rita was donwgraded to Category 3 storm (125mph/200kph winds). Here in Dallas we expect heavy rains for 2+ days.&lt;/p&gt;&#xA;&lt;p&gt;Sunset was very colorful today. I tried to capture it in this picture:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/1004415/&#34;&gt;&lt;img src=&#34;http://static.flickr.com/27/45969157_fa3ced3eb3_m.jpg&#34; alt=&#34;Sky from my house on 9/23/2005&#34; title=&#34;Dallas, TX: before Rita&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can find bigger picture &lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/1004415/&#34;&gt;on Flickr&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Code: RSS in Django</title>
      <link>https://www.lazutkin.com/blog/2005/09/23/code_rss_django/</link>
      <pubDate>Fri, 23 Sep 2005 19:31:41 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/23/code_rss_django/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update&lt;/strong&gt;: &amp;quot;The Simple Way&amp;quot; part of this tutorial is &lt;a href=&#34;https://www.lazutkin.com/blog/2005/11/12/new-rss-framework/&#34;&gt;obsolete&lt;/a&gt; now. I am going to recreate examples using new improved RSS framework. Stay tuned!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I was asked several times to explain how I did RSS for my site. Django has RSS framework, which is not documented. Most probably I am not the right guy to explain it but I&amp;rsquo;ll try.&lt;/p&gt;&#xA;&lt;p&gt;There are three ways to implement RSS with Django:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The Simple: using Django&amp;rsquo;s RSS framework.&lt;/li&gt;&#xA;&lt;li&gt;The Smart: using &lt;strong&gt;django.utils.feedgenerator&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The Hard: write a view and output XML manually or using standard &lt;strong&gt;xml.sax.saxutils&lt;/strong&gt;.&#xA;If you want Django to do everything for you, then you should use &amp;quot;The Simple Way&amp;quot;. If you want some custom object selection, you should use &amp;quot;The Smart Way&amp;quot;. For obsessed workaholics, S&amp;amp;M adepts, and guys-with-really-convoluted-needs the only way is &amp;quot;The Hard Way&amp;quot;. Being lazy I prefer #1 and #2. If you want #3, I suggest you to study files mentioned in &amp;quot;The Simple Way&amp;quot; subsection below.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;the-simple-way&#34;&gt;The Simple Way&lt;/h2&gt;&#xA;&lt;p&gt;If you look into Django&amp;rsquo;s code, you will find several files related to RSS:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Code: my categories</title>
      <link>https://www.lazutkin.com/blog/2005/09/18/code_my_categories/</link>
      <pubDate>Sun, 18 Sep 2005 14:41:30 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/18/code_my_categories/</guid>
      <description>&lt;p&gt;After some requests I decided to publish my code for categories. It&amp;rsquo;s very simple. It was inspired by following articles: &lt;a href=&#34;http://code.djangoproject.com/wiki/CookBookCategoryDataModel&#34;&gt;A &amp;quot;category&amp;quot; Data Model&lt;/a&gt; &lt;em&gt;(note: this article uses old-style model format, it doesn&amp;rsquo;t work anymore)&lt;/em&gt; and &lt;a href=&#34;http://www.djangoproject.com/documentation/models/m2o_recursive/&#34;&gt;Relating an object to itself, many-to-one&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; django.core &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; meta&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Category&lt;/span&gt;(meta&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Model):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    Category defines following fields:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    name        - simple name of category, e.g., &amp;#39;C++&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    full_name   - full name of category, which includes names of all parents,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;                  e.g. &amp;#39;Development::C++&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    parent      - reference to parent category or null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    description - HTML description of category, or null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    Notes:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    1) full_name is not editable. It is calculated automatically&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       by calculate_full_name() method during save phase (hook _pre_save).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    2) Separator specified by get_separator() method. It can be&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       overridden in subclasses.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name        &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; meta&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CharField(maxlength&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    full_name   &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; meta&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;CharField(maxlength&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;250&lt;/span&gt;, unique&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                 editable&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    parent      &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; meta&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ForeignKey(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;self&amp;#39;&lt;/span&gt;, blank&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;, null&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  related_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;child&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    description &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; meta&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;TextField(blank&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;, null&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                 help_text&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Use raw HTML.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;META&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        verbose_name_plural &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Categories&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        module_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; verbose_name_plural&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;lower()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        admin &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; meta&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Admin(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            list_display  &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;full_name&amp;#39;&lt;/span&gt;,),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            search_fields &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;full_name&amp;#39;&lt;/span&gt;,],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            js &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/tiny_mce/tiny_mce.js&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/appmedia/admin/js/textareas.js&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ordering &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;full_name&amp;#39;&lt;/span&gt;,)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;__repr__&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;full_name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_pre_save&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;full_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;calculate_full_name()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_separator&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;::&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# note: used in templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_all_children&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;get list of all children of the category&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        output &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        children &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_child_list()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; c &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; children:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            output&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(c)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            output&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;extend(c&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_all_children())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; output&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# note: the last object of the list is the category itself&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# note: used in templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_all_parents&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;get list of all parents of the category from top level parent down&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        id_list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        object &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            id_list&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(object)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; object&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;parent_id:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            object &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; object&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_parent()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        id_list&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;reverse()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; id_list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# note: used in templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;calculate_full_name&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;calculate full name from parent list&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_separator()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join([x&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_all_parents()])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# note: used in templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_path&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;get relative path of the category&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;categories/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;id&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you can see it &lt;strong&gt;is&lt;/strong&gt; very simple. This model defines &lt;strong&gt;full_name&lt;/strong&gt; field, which is auto-populated. I was toying with an idea to keep &lt;strong&gt;parent_name&lt;/strong&gt; and produce &lt;strong&gt;full_name&lt;/strong&gt; by concatenating &lt;strong&gt;parent_name&lt;/strong&gt; with &lt;strong&gt;name&lt;/strong&gt;. But after some trials I decided against it: it introduced a lot of complexities and runtime overhead by saving a few bytes in database. In my opinion it doesn&amp;rsquo;t worth it. This model defines some convenience methods as well. They are meant to be used in templates.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django badges!</title>
      <link>https://www.lazutkin.com/blog/2005/09/16/django_badges/</link>
      <pubDate>Fri, 16 Sep 2005 19:38:23 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/16/django_badges/</guid>
      <description>&lt;p&gt;Finally we have &lt;a href=&#34;https://www.djangoproject.com/community/badges/&#34;&gt;official Django badges&lt;/a&gt;. Wilson Miner did a great job putting them together. I decided to use this one:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.djangoproject.com/&#34;&gt;&lt;img src=&#34;https://www.djangoproject.com/m/img/badges/djangomade124x25.gif&#34; alt=&#34;Made with Django.&#34; title=&#34;Made with Django.&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How do you like it?&lt;/p&gt;&#xA;&lt;p&gt;If you are a fan of 80 by 15 pixels badges, don&amp;rsquo;t fret — Dave Hodder has you covered with his rendition of &amp;quot;Made with Django&amp;quot; theme. Collection of his small badges are attached to &lt;a href=&#34;http://code.djangoproject.com/ticket/509&#34;&gt;ticket #509&lt;/a&gt;. Check it out too.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWrt White Russian RC3 is out</title>
      <link>https://www.lazutkin.com/blog/2005/09/15/openwrt_white_russian_rc3_out/</link>
      <pubDate>Thu, 15 Sep 2005 13:49:10 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/15/openwrt_white_russian_rc3_out/</guid>
      <description>&lt;p&gt;Today is the day of new releases: OpenWrt just released &lt;a href=&#34;http://openwrt.org/&#34;&gt;new White Russian RC3&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;BTW, contrary to popular belief, it&amp;rsquo;s not just for &lt;a href=&#34;http://www1.linksys.com/products/product.asp?grid=33&amp;amp;scid=35&amp;amp;prid=601&#34;&gt;Linksys WRT54G&lt;/a&gt;. You can run it too, if you have &lt;a href=&#34;http://wiki.openwrt.org/TableOfHardware&#34;&gt;supported hardware&lt;/a&gt;. I run it on &lt;a href=&#34;http://www.buffalotech.com/products/product-detail.php?productid=11&amp;amp;categoryid=6&#34;&gt;Buffalo WBR2-G54&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TinyMCE 2.0RC2 is out</title>
      <link>https://www.lazutkin.com/blog/2005/09/15/tinymce_20rc2_out/</link>
      <pubDate>Thu, 15 Sep 2005 13:40:46 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/15/tinymce_20rc2_out/</guid>
      <description>&lt;p&gt;Wow, they move fast! Go and grab &lt;a href=&#34;http://tinymce.moxiecode.com/&#34;&gt;Tiny MCE 2.0RC2&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Added RSS</title>
      <link>https://www.lazutkin.com/blog/2005/09/13/added_rss/</link>
      <pubDate>Tue, 13 Sep 2005 22:50:16 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/13/added_rss/</guid>
      <description>&lt;p&gt;Finally I added RSS 2.0 using Django&amp;rsquo;s facilities.&lt;/p&gt;&#xA;&lt;p&gt;Default RSS feed is for my blog. Categories have two versions of RSS feed: exclusively for documents of the category, and documents for the category and its children. (I hope it is not news anymore: I have hierarchical categories.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>DreamHost: no transactions</title>
      <link>https://www.lazutkin.com/blog/2005/09/12/dreamhost_no_plans_transactional_db/</link>
      <pubDate>Mon, 12 Sep 2005 22:39:41 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/12/dreamhost_no_plans_transactional_db/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update: &lt;a href=&#34;https://www.lazutkin.com/blog/2005/10/03/it_finally_happened/&#34;&gt;InnoDB is in the house&lt;/a&gt;!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;https://www.lazutkin.com/blog/2005/09/11/running_sql_cache_now/&#34;&gt;my previous post&lt;/a&gt;  I already complained about lack of transaction support by DreamHost. The only database option is MySQL with InnoDB engine, which doesn&amp;rsquo;t support transactions. Everybody knows that transactions are nice. So what about MySQL/InnoDB or PostgreSQL?&lt;/p&gt;&#xA;&lt;p&gt;So I hit DreamHost forums and found several posts from DreamHost people about PostgreSQL and InnoDB:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://discussion.dreamhost.com/showthreaded.pl?Cat=&amp;amp;Board=forum_offtopic&amp;amp;Number=25154&amp;amp;Search=true&amp;amp;Forum=All_Forums&amp;amp;Words=Postgre&amp;amp;Match=Entire%20Phrase&amp;amp;Searchpage=0&amp;amp;Limit=25&amp;amp;Old=allposts&amp;amp;Main=11085&#34;&gt;Re: PostgreSQL rant&lt;/a&gt;  on 06/02/05 by Jeff @ DreamHost (DH Discussion Forum Admin)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://discussion.dreamhost.com/showthreaded.pl?Cat=&amp;amp;Board=forum_offtopic&amp;amp;Number=25054&amp;amp;Search=true&amp;amp;Forum=All_Forums&amp;amp;Words=InnoDB&amp;amp;Match=Entire%20Phrase&amp;amp;Searchpage=0&amp;amp;Limit=25&amp;amp;Old=allposts&amp;amp;Main=11085&#34;&gt;Re: PostgreSQL rant&lt;/a&gt;  on 06/01/05 by Dallas (DreamHost Head Honcho/Founder)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://discussion.dreamhost.com/showthreaded.pl?Cat=&amp;amp;Board=forum_troubleshooting&amp;amp;Number=21543&amp;amp;Search=true&amp;amp;Forum=All_Forums&amp;amp;Words=Postgre&amp;amp;Match=Entire%20Phrase&amp;amp;Searchpage=0&amp;amp;Limit=25&amp;amp;Old=allposts&amp;amp;Main=21289&#34;&gt;Re: mod_proxy support&lt;/a&gt;  on 04/07/05 by Jeff @ DreamHost (DH Discussion Forum Admin)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://discussion.dreamhost.com/showthreaded.pl?Cat=&amp;amp;Board=forum_programming&amp;amp;Number=14487&amp;amp;Search=true&amp;amp;Forum=All_Forums&amp;amp;Words=Postgre&amp;amp;Match=Entire%20Phrase&amp;amp;Searchpage=0&amp;amp;Limit=25&amp;amp;Old=allposts&amp;amp;Main=14485&#34;&gt;Re: PostgreSQL&lt;/a&gt;  on 12/03/04 by will&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://discussion.dreamhost.com/showthreaded.pl?Cat=&amp;amp;Board=forum_offtopic&amp;amp;Number=13498&amp;amp;Search=true&amp;amp;Forum=All_Forums&amp;amp;Words=InnoDB&amp;amp;Match=Entire%20Phrase&amp;amp;Searchpage=0&amp;amp;Limit=25&amp;amp;Old=allposts&amp;amp;Main=11085&#34;&gt;Re: PostgreSQL rant&lt;/a&gt;  on 10/15/04 by nate&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://discussion.dreamhost.com/showthreaded.pl?Cat=&amp;amp;Board=forum_offtopic&amp;amp;Number=11087&amp;amp;Search=true&amp;amp;Forum=All_Forums&amp;amp;Words=InnoDB&amp;amp;Match=Entire%20Phrase&amp;amp;Searchpage=0&amp;amp;Limit=25&amp;amp;Old=allposts&amp;amp;Main=11085&#34;&gt;Re: PostgreSQL rant&lt;/a&gt;  on 06/23/04 by Jeff @ DreamHost (DH Discussion Forum Admin)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://discussion.dreamhost.com/showthreaded.pl?Cat=&amp;amp;Board=forum_programming&amp;amp;Number=5826&amp;amp;Search=true&amp;amp;Forum=All_Forums&amp;amp;Words=Postgre&amp;amp;Match=Entire%20Phrase&amp;amp;Searchpage=0&amp;amp;Limit=25&amp;amp;Old=allposts&amp;amp;Main=4950&#34;&gt;Re: MySQL 4, PostgreSQL&lt;/a&gt;  on 07/15/03 by will&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://discussion.dreamhost.com/showthreaded.pl?Cat=&amp;amp;Board=forum_programming&amp;amp;Number=4964&amp;amp;Search=true&amp;amp;Forum=All_Forums&amp;amp;Words=InnoDB&amp;amp;Match=Entire%20Phrase&amp;amp;Searchpage=0&amp;amp;Limit=25&amp;amp;Old=allposts&amp;amp;Main=4950&#34;&gt;Re: MySQL 4, PostgreSQL&lt;/a&gt;  on 04/07/03 by Jeff @ DreamHost (DH Discussion Forum Admin)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://discussion.dreamhost.com/showthreaded.pl?Cat=&amp;amp;Board=forum_troubleshooting&amp;amp;Number=4458&amp;amp;Search=true&amp;amp;Forum=All_Forums&amp;amp;Words=InnoDB&amp;amp;Match=Entire%20Phrase&amp;amp;Searchpage=0&amp;amp;Limit=25&amp;amp;Old=allposts&amp;amp;Main=4456&#34;&gt;Re: transactions in mysql&lt;/a&gt;  on 02/11/03 by Jeff @ DreamHost (DH Discussion Forum Admin)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So I&amp;rsquo;ve got the impression that PostgreSQL is out for now, but MySQL/InnoDB is really close to be implemented and offered to customers. I decided to ask the support directly and got two firm answers: MySQL/InnoDB — &lt;strong&gt;No&lt;/strong&gt;, PostgreSQL — &lt;strong&gt;No&lt;/strong&gt;. They don&amp;rsquo;t have any plans to introduce them.Why? No reasons were given. Obviously &amp;quot;it could change&amp;quot; over time. But for the last several years it didn&amp;rsquo;t.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running on &#39;sql:&#39; cache now</title>
      <link>https://www.lazutkin.com/blog/2005/09/11/running_sql_cache_now/</link>
      <pubDate>Sun, 11 Sep 2005 23:51:56 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/11/running_sql_cache_now/</guid>
      <description>&lt;p&gt;Now this blog runs on &lt;code&gt;sql:&lt;/code&gt;. I use MySQL as my backend. Before that I tested it locally with &lt;a href=&#34;http://www.sqlite.org/&#34;&gt;SQLite&lt;/a&gt; (so easy to install!) and MySQL.&lt;/p&gt;&#xA;&lt;p&gt;I learned today that MySQL, which is provided by my host (&lt;a href=&#34;http://www.dreamhost.com/&#34;&gt;DreamHost&lt;/a&gt;), uses MyISAM for all tables. MyISAM doesn&amp;rsquo;t support transactions. AT home I use InnoDB, which supports transactions. However the hope is not lost — DreamHost mulls over InnoDB support. But as far as I know, they don&amp;rsquo;t have an implementation schedule yet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running on &#39;file:&#39; cache now</title>
      <link>https://www.lazutkin.com/blog/2005/09/11/running_file_cache_now/</link>
      <pubDate>Sun, 11 Sep 2005 02:27:22 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/11/running_file_cache_now/</guid>
      <description>&lt;p&gt;This site was running using &lt;code&gt;locmem:&lt;/code&gt; caching option, which is fine for small web site. Now it runs using &lt;code&gt;file:&lt;/code&gt;. Please let me know, if you spot any issues.&lt;/p&gt;&#xA;&lt;p&gt;I am planning to implement &lt;code&gt;sql:&lt;/code&gt; next.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TinyMCE 2.0RC1 is out</title>
      <link>https://www.lazutkin.com/blog/2005/09/10/tinymce_20rc1_out/</link>
      <pubDate>Sat, 10 Sep 2005 01:50:15 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/10/tinymce_20rc1_out/</guid>
      <description>&lt;p&gt;TinyMCE 2.0RC1 is out. &lt;a href=&#34;http://tinymce.moxiecode.com/index.php&#34; title=&#34;TinyMCE home page&#34;&gt;Take it&lt;/a&gt;  while it&amp;rsquo;s hot! I&amp;rsquo;ve upgraded my admin pages and it looks better than previous one (duh!).&lt;/p&gt;&#xA;&lt;p&gt;Nevertheless I see annoying flickering in FireFox. But it flickers less now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Something wrong with simple cache</title>
      <link>https://www.lazutkin.com/blog/2005/09/09/something_wrong_simple_cache/</link>
      <pubDate>Fri, 09 Sep 2005 11:34:53 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/09/something_wrong_simple_cache/</guid>
      <description>&lt;p&gt;I am not talking about multithreading problems. &lt;code&gt;locmem:&lt;/code&gt; doesn&amp;rsquo;t have them. But it does have problems with gzip. Sometimes I see binary stuff on my screen. It looks like a gzipped web page without proper gzip encoding flag. I don&amp;rsquo;t do anything related to compression in my cache.&lt;/p&gt;&#xA;&lt;p&gt;Is it a bug in Django&amp;rsquo;s caching? Hmm&amp;hellip; Apparently it works properly with memcache. Can it be some bug in &lt;code&gt;simple:&lt;/code&gt; implementation, which was a base for &lt;code&gt;locmem:&lt;/code&gt;? Weird.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Say no more! Say no more!</title>
      <link>https://www.lazutkin.com/blog/2005/09/08/say_no_more_say_no_more/</link>
      <pubDate>Thu, 08 Sep 2005 21:40:59 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/08/say_no_more_say_no_more/</guid>
      <description>&lt;p&gt;Being a little bit frustrated by the lack of caching options for my web site I&amp;rsquo;ve added &lt;code&gt;locmem:&lt;/code&gt; cache to Django. It is fully multithreaded local memory-based cache, which uses reader-writer lock to do its magic. It seems to work well but I need some time to test it more.&lt;/p&gt;&#xA;&lt;p&gt;I think &lt;code&gt;file:&lt;/code&gt; is going to be next.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django on Dreamhost: happy end</title>
      <link>https://www.lazutkin.com/blog/2005/09/07/django_dreamhost_happy_end/</link>
      <pubDate>Wed, 07 Sep 2005 21:35:45 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/07/django_dreamhost_happy_end/</guid>
      <description>&lt;p&gt;It looks like all kinks with Django on Dreamhost were worked out. Of course, I am referring to MySQL problem (see &lt;a href=&#34;https://www.lazutkin.com/blog/2005/09/05/django_mysql_problem_solved/&#34;&gt;my previous post&lt;/a&gt;) and strange stalling of long pages, which I &lt;a href=&#34;http://article.gmane.org/gmane.comp.python.django.user/505&#34;&gt;reported to Django&amp;rsquo;s mailing list&lt;/a&gt;. It turned out that other people had these problem too. Jason McBrayer shared &lt;a href=&#34;http://article.gmane.org/gmane.comp.python.django.user/515&#34;&gt;his experience&lt;/a&gt;. He pointed out to possible &lt;a href=&#34;http://www.saddi.com/software/flup/&#34;&gt;flup&lt;/a&gt;/&lt;a href=&#34;http://www.saddi.com/software/py-lib/py-lib/fcgi.py&#34;&gt;fcgi.py&lt;/a&gt; problem. I contacted Allan Saddi — the author of flup and other &lt;a href=&#34;http://www.saddi.com/cgi-bin/WebObjects/ProjectCavalcade.woa&#34;&gt;Python libraries and utilities&lt;/a&gt;. He came to help immediately. We were able to isolate the problematic piece of software and in no time Allan made a fix.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django with MySQL: problem solved?</title>
      <link>https://www.lazutkin.com/blog/2005/09/05/django_mysql_problem_solved/</link>
      <pubDate>Mon, 05 Sep 2005 18:23:44 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/05/django_mysql_problem_solved/</guid>
      <description>&lt;p&gt;It looks like &lt;a href=&#34;https://www.lazutkin.com/blog/2005/09/05/more_mysql_and_django_problems/&#34;&gt;the problem&lt;/a&gt; is solved. Django creates one (1) connection to database and reuses it to handle requests. Multithreaded FastCGI creates threads to handle requests. These threads make requests to MySQL, which gets confused and loses its cool^H^Honnection. This process is random and compounded with multiple web requests at the same time. For example, if Google Web Accelerator decided to prefetch some pages, your web site would be hosed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Opera and Dojo</title>
      <link>https://www.lazutkin.com/blog/2005/09/05/opera_and_dojo/</link>
      <pubDate>Mon, 05 Sep 2005 02:14:24 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/05/opera_and_dojo/</guid>
      <description>&lt;p&gt;I decided to try how well &lt;a href=&#34;http://www.opera.com/&#34;&gt;Opera&lt;/a&gt; works with my site. It mostly works. You can go and see stuff but all Dojo-related code doesn&amp;rsquo;t work. Interesting that Google Maps works properly.&lt;/p&gt;&#xA;&lt;p&gt;When I switched to admin mode to edit this article, it turned out that &lt;a href=&#34;http://tinymce.moxiecode.com/&#34;&gt;TinyMCE&lt;/a&gt; doesn&amp;rsquo;t work either.&lt;/p&gt;&#xA;&lt;p&gt;But good news is Dojo and TinyMCE failed gracefully.&lt;/p&gt;</description>
    </item>
    <item>
      <title>More on MySQL and Django problems</title>
      <link>https://www.lazutkin.com/blog/2005/09/05/more_mysql_and_django_problems/</link>
      <pubDate>Mon, 05 Sep 2005 02:02:01 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/05/more_mysql_and_django_problems/</guid>
      <description>&lt;p&gt;I complained about instability of this site in &lt;a href=&#34;https://www.lazutkin.com/blog/2005/09/04/django_and_mysqldb_worries/&#34;&gt;my previous post&lt;/a&gt;. Now, after intensive googling, it looks like it may be related to multiple threads or forked processes using the same connection to MySQL. Apparently it can confuse MySQL. Children should create their own connections after spawning.&lt;/p&gt;&#xA;&lt;p&gt;If Django does reuse connections, it may be possible to fix it. Otherwise, CGI is the way to go. The latter solution would be slow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django and MySQLdb worries</title>
      <link>https://www.lazutkin.com/blog/2005/09/04/django_and_mysqldb_worries/</link>
      <pubDate>Sun, 04 Sep 2005 22:37:01 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/04/django_and_mysqldb_worries/</guid>
      <description>&lt;p&gt;I am totally at loss. I am getting weird errors like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;OperationalError: (2013, &amp;#39;Lost connection to MySQL server during query&amp;#39;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;They are pretty much random but fairly frequent. Apparently it may be caused by different MySQL timeouts, which I cannot control. It seems that in order to combat those you have to call connection.ping() periodically to reconnect. I added them to Django&amp;rsquo;s MySQL handler and &amp;hellip; now I am getting these errors during execution of connection.ping()! Bizarre!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dojo: 1st impression</title>
      <link>https://www.lazutkin.com/blog/2005/09/03/dojo_1st_impression/</link>
      <pubDate>Sat, 03 Sep 2005 13:12:38 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/03/dojo_1st_impression/</guid>
      <description>&lt;p&gt;The best thing about Dojo 0.1: it&amp;rsquo;s quite easy to create portable widgets. Such widgets work similar to Microsoft IE&amp;rsquo;s behaviors but they are even more self-contained. Dojo widgets can work with fragments of HTML and CSS, which will be inserted during the object creation. The event system is very elaborate. Of course Dojo is more than a simple widget factory. For example I didn&amp;rsquo;t try the I/O facility yet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Design 0.1 is here!</title>
      <link>https://www.lazutkin.com/blog/2005/09/02/new_design_01_here/</link>
      <pubDate>Fri, 02 Sep 2005 01:10:15 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/09/02/new_design_01_here/</guid>
      <description>&lt;p&gt;New design is here. Well, some elements of it. I had bigger ideas, but CSS didn&amp;rsquo;t work reliably, and JavaScript option was in debugging mode. So I decided to update this site now and add other planned stuff later.&lt;/p&gt;&#xA;&lt;p&gt;One reason I postponed JavaScript thingy is I want to try &lt;a href=&#34;http://dojotoolkit.org/&#34;&gt;Dojo&lt;/a&gt;. It looks like a good foundation for widgets. I am going to create a couple of them at least. If it works okay, I&amp;rsquo;ll be using it in other projects as well. Stay tuned.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Design 0.1</title>
      <link>https://www.lazutkin.com/blog/2005/08/29/new_design_01/</link>
      <pubDate>Mon, 29 Aug 2005 02:30:09 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/08/29/new_design_01/</guid>
      <description>&lt;p&gt;New design is coming along nicely. Thank heaven for Photoshop, POV-Ray, and digital cameras! I need to work out a few quirks and I&amp;rsquo;ll be ready to create Django templates. Additionally I&amp;rsquo;ll create some custom tags to handle non-traditional formats.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Upcoming Additions</title>
      <link>https://www.lazutkin.com/blog/2005/08/26/upcoming_additions/</link>
      <pubDate>Fri, 26 Aug 2005 20:54:32 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/08/26/upcoming_additions/</guid>
      <description>&lt;p&gt;As you can see blog is already operational. I am planning to add to it Comments, Trackbacks, and RSS/Atom support.&lt;/p&gt;&#xA;&lt;p&gt;Main page will be redesigned so it would include snippets from other applications and external sources. I am planning to change look and feel of this web site. Obviously what I have now is temporary.&lt;/p&gt;&#xA;&lt;p&gt;Upcoming applications: Lunch Box 3.0, picture gallery, personal news integrator.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using TinyMCE with Django&#39;s Admin</title>
      <link>https://www.lazutkin.com/blog/2005/08/26/using_tinymce_djangos_admin/</link>
      <pubDate>Fri, 26 Aug 2005 20:22:57 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/08/26/using_tinymce_djangos_admin/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update (3/13/2011):&lt;/strong&gt; this article is obsolete now and preserved here mostly for its historic value. Nowadays I use Dojo&amp;rsquo;s dijit.Editor as a WYSIWYG HTML editor — it is more functional and much simpler to setup and extend. Read all gory details in &lt;a href=&#34;https://www.lazutkin.com/blog/2011/03/13/using-dojo-rich-editor-djangos-admin/&#34;&gt;Using Dojo Rich Editor with Django&amp;rsquo;s Admin&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I decided to add a WYSIWYG editor to my admin portion of the site. Apparently you can find some nice open source WYSIWYG editors nowadays. Probably FCKeditor, Xinha and TinyMCE are the most prominent ones. Some people already tried different editors with Django, e.g., Xinha — &lt;a href=&#34;http://www.socialistsoftware.com/?p=10&#34;&gt;http://www.socialistsoftware.com/?p=10&lt;/a&gt;, TinyMCE — &lt;a href=&#34;http://www.socialistsoftware.com/?p=8&#34;&gt;http://www.socialistsoftware.com/?p=8&lt;/a&gt;. Now it&amp;rsquo;s my turn.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lorem Ipsum</title>
      <link>https://www.lazutkin.com/blog/2005/08/26/lorem_ipsum/</link>
      <pubDate>Fri, 26 Aug 2005 12:08:44 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/08/26/lorem_ipsum/</guid>
      <description>&lt;p&gt;Everytime I need to test a text layout or text style I am typing something like &amp;quot;qwerty&amp;quot; and duplicate it many times to make a paragraph. Then paragraph got duplicated as well. But I am really bored to see qwerty and usually it doesn&amp;rsquo;t simulate real text properly.&lt;/p&gt;&#xA;&lt;p&gt;To have something more realistic I go to any news site to &amp;quot;borrow&amp;quot; some text. Unfortunately sometimes I have to hunt for suitable text because the one I found has very short or too long paragraphs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>1st Post, 4th Time</title>
      <link>https://www.lazutkin.com/blog/2005/08/26/1st_post_4th_time/</link>
      <pubDate>Fri, 26 Aug 2005 12:06:38 +0000</pubDate>
      <guid>https://www.lazutkin.com/blog/2005/08/26/1st_post_4th_time/</guid>
      <description>&lt;p&gt;Time and again I create 1st post just to tear the system apart and start all over again. Let&amp;rsquo;s hope that this time is the last one.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
