<?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>
    <managingEditor>Eugene Lazutkin (eugene.lazutkin@gmail.com)</managingEditor>
    <webMaster>Eugene Lazutkin (eugene.lazutkin@gmail.com)</webMaster>
    <copyright>Copyright (c) Eugene Lazutkin 2005-2026, all rights reserved.</copyright>
    <lastBuildDate>Tue, 26 May 2026 10:00:00 -0500</lastBuildDate>
    <atom:link href="https://www.lazutkin.com/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Code linearization</title>
      <link>https://www.lazutkin.com/blog/2026-05-26-code-linearization</link>
      <pubDate>Tue, 26 May 2026 10:00:00 -0500</pubDate><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <guid>https://www.lazutkin.com/blog/2026-05-26-code-linearization</guid>
      <description>&lt;p&gt;You can find plenty of articles about design — where and how to use SQL, NoSQL, message queues, Redis, VMs, and so on. Almost nobody writes about &lt;em&gt;tactics&lt;/em&gt;: the actual coding. It borders on style, but it isn&amp;rsquo;t &lt;em&gt;just&lt;/em&gt; style. This is the first article in a series on tactics I use day to day. Highly opinionated — I don&amp;rsquo;t expect you to follow it. Look, chuckle, think about it, and use what you like.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2026-05-26-code-linearization/cover.jpg&#34; alt=&#34;Code linearization&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>stream-json and the side quests</title>
      <link>https://www.lazutkin.com/blog/2026-05-11-stream-json-and-the-side-quests</link>
      <pubDate>Mon, 11 May 2026 19:00:00 -0500</pubDate><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <guid>https://www.lazutkin.com/blog/2026-05-11-stream-json-and-the-side-quests</guid>
      <description>&lt;p&gt;How a slow first cut, a surprising benchmark, and a tour through V8&amp;rsquo;s regex engine landed five small libraries on npm that still earn their keep a decade later.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2026-05-11-stream-json-and-the-side-quests/cover.jpg&#34; alt=&#34;stream-json and the side quests&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;</description>
    </item>
    
    <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <guid>https://www.lazutkin.com/blog/2014-07-11-heya-unify-back-to-js</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;cover.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/blog/2014-07-11-heya-unify-back-to-js/cover.jpg&#34; alt=&#34;heya-unify: back to JS&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <guid>https://www.lazutkin.com/blog/2014-06-18-heya-unify-incomplete-objects</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;cover.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/blog/2014-06-18-heya-unify-incomplete-objects/cover.jpg&#34; alt=&#34;heya-unify: incomplete objects&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;heya-unify&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <guid>https://www.lazutkin.com/blog/2014-06-10-heya-unify-custom-unification</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;cover.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/blog/2014-06-10-heya-unify-custom-unification/cover.jpg&#34; alt=&#34;heya-unify: custom unification&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Custom unification in &lt;a href=&#34;https://github.com/heya/unify&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;heya-unify&lt;/a&gt;&#xA; 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;&#xA; 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;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;heya-unify&lt;/a&gt;&#xA; &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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <guid>https://www.lazutkin.com/blog/2014-06-05-when-to-unify-in-js</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;cover.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/blog/2014-06-05-when-to-unify-in-js/cover.jpg&#34; alt=&#34;When to unify in JS&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&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;&#xA; introduced &lt;a href=&#34;https://github.com/heya/unify&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;heya-unify&lt;/a&gt;&#xA; —&#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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;heya-unify&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <guid>https://www.lazutkin.com/blog/2014-05-18-unification-for-js</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;cover.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/blog/2014-05-18-unification-for-js/cover.jpg&#34; alt=&#34;Unification for JS&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&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_%28computer_science%29&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;definition&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <guid>https://www.lazutkin.com/blog/2014-02-23-serve-files-with-nginx-conditionally</guid>
      <description>&lt;!-- &lt;amp-img src=&#34;cover.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/blog/2014-02-23-serve-files-with-nginx-conditionally/cover.jpg&#34; alt=&#34;Serve files with nginx conditionally&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;grunt-tight-sprite&lt;/a&gt;&#xA;&#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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ClubAjax&lt;/a&gt;&#xA; invited me to speak about technologies behind &lt;a href=&#34;https://github.com/heya&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Heya&lt;/a&gt;&#xA;, specifically about code generative solutions behind &lt;a href=&#34;https://github.com/heya/pipe&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;heya-pipe&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Octopress&lt;/a&gt;&#xA;. 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;</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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ClubAjax&lt;/a&gt;&#xA; 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;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;, 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DCL&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;www.dcljs.org&lt;/a&gt;&#xA;, clone its code on &lt;a href=&#34;https://github.com/uhop/dcl&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;github.com/uhop/dcl&lt;/a&gt;&#xA;, and follow &lt;a href=&#34;https://twitter.com/dcl_js&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;@dcl_js&lt;/a&gt;&#xA;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once again I was invited in &lt;a href=&#34;http://clubajax.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ClubAjax&lt;/a&gt;&#xA; 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;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DCL&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;www.dcljs.org&lt;/a&gt;&#xA;, clone its code on &lt;a href=&#34;https://github.com/uhop/dcl&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;github.com/uhop/dcl&lt;/a&gt;&#xA;, and follow &lt;a href=&#34;https://twitter.com/dcl_js&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;@dcl_js&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA; &lt;a href=&#34;http://tinymce.moxiecode.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TinyMCE&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&amp;rsquo;s Rich Editor&lt;/a&gt;&#xA; hosted on &lt;a href=&#34;http://code.google.com/apis/libraries/devguide.html#dojo&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google CDN&lt;/a&gt;&#xA; — 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;on Dojo, jQuery, history, mistakes, marketing, social vs. technical, and communities&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ClubAJAX&lt;/a&gt;&#xA;. &lt;a href=&#34;https://www.lazutkin.com/blog/2010-02-05-exciting-js-1&#34;&gt;Last time&lt;/a&gt;&#xA; 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;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Exciting JavaScript - Part II&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;dojo.connect&lt;/a&gt;&#xA; 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;&#xA;, 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RAD CRUD&lt;/a&gt;&#xA;.&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Eugene Lazutkin&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ClubAJAX&lt;/a&gt;&#xA; — 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OOP&lt;/a&gt;&#xA;, &lt;a href=&#34;http://en.wikipedia.org/wiki/Aspect-oriented_programming&#34; title=&#34;Aspect-oriented programming&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;AOP&lt;/a&gt;&#xA;, &lt;a href=&#34;http://en.wikipedia.org/wiki/Functional_Programming&#34; title=&#34;Functional programming&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;FP&lt;/a&gt;&#xA;, 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DSL&lt;/a&gt;&#xA;) 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Wolfram Kriesing&lt;/a&gt;&#xA; &lt;a href=&#34;http://twitter.com/wolframkriesing/status/6345221495&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;asked&lt;/a&gt;&#xA;:&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://highcharts.com/&lt;/a&gt;&#xA; — 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;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;related post on dojo-dev mailing list&lt;/a&gt;&#xA;, 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ClubAJAX&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;SlideShare&lt;/a&gt;&#xA;: &lt;a href=&#34;http://www.slideshare.net/elazutkin/crud-with-dojo&#34; title=&#34;CRUD with Dojo&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CRUD with Dojo&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;CRUD with Dojo&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Simon Willison&lt;/a&gt;&#xA;&amp;rsquo;s post on &lt;a href=&#34;http://simonwillison.net/2009/Apr/11/revcanonical/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;rev=canonical&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Steve Yegge&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Have you ever legalized marijuana?&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;a psychoactive drug extracted from the plant &lt;em&gt;Cannabis sativa&lt;/em&gt;&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;StackOverflow&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Friend Connect&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;“Recursion Theory and Joy”&lt;/a&gt;&#xA; by &lt;a href=&#34;http://www.latrobe.edu.au/philosophy/phimvt/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Manfred von Thun&lt;/a&gt;&#xA;, the creator of &lt;a href=&#34;http://www.latrobe.edu.au/philosophy/phimvt/joy.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Joy&lt;/a&gt;&#xA; (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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Y&#xA;combinator&lt;/a&gt;&#xA;, 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DCL&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;www.dcljs.org&lt;/a&gt;&#xA;, clone its code on &lt;a href=&#34;https://github.com/uhop/dcl&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;github.com/uhop/dcl&lt;/a&gt;&#xA;, and follow &lt;a href=&#34;https://twitter.com/dcl_js&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;@dcl_js&lt;/a&gt;&#xA;.&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;procedural programming&lt;/a&gt;&#xA; (example: Fortran) gave way to &lt;a href=&#34;http://en.wikipedia.org/wiki/Structured_programming&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;structured programming&lt;/a&gt;&#xA; (Pascal), which was refined with &lt;a href=&#34;http://en.wikipedia.org/wiki/Modular_programming&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;modular programming&lt;/a&gt;&#xA; (Modula), and was reformulated when &lt;a href=&#34;http://en.wikipedia.org/wiki/Object-oriented_programming&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;object-oriented programing&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;aspect-oriented programming&lt;/a&gt;&#xA; (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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google announced&lt;/a&gt;&#xA; its new offering: &lt;a href=&#34;http://code.google.com/appengine/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google App Engine&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;AWS&lt;/a&gt;&#xA;. The former offers a form of shared hosting (think &amp;ldquo;distributed &lt;a href=&#34;http://www.webfaction.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WebFaction&lt;/a&gt;&#xA;&amp;rdquo;), while the latter offers a virtualized environment (think &amp;ldquo;distributed &lt;a href=&#34;http://www.slicehost.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;SliceHost&lt;/a&gt;&#xA;&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo 1.1 was released in the wild&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;James Burke&amp;rsquo;s post on Dojo 1.1&lt;/a&gt;&#xA;, 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;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;AOL CDN&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;dojo.moj.oe&lt;/a&gt;&#xA; by &lt;a href=&#34;http://higginsforpresident.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Pete Higgins&lt;/a&gt;&#xA; (internals were detailed in &lt;a href=&#34;http://dojotoolkit.org/2008/01/06/dojo-moj-oe&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the blog post&lt;/a&gt;&#xA;, and in &lt;a href=&#34;http://dojocampus.org/content/?p=17&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the great Dojo Campus article&lt;/a&gt;&#xA;), an example for dojox.gfx animation is &lt;a href=&#34;http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/gfx/demos/career_test.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the career test&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;The Dojo API tool&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Neil Roberts&lt;/a&gt;&#xA; and &lt;a href=&#34;http://blog.dept-z.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tom Trenka&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo web site&lt;/a&gt;&#xA;, &lt;a href=&#34;http://api.dojotoolkit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the Dojo API tool&lt;/a&gt;&#xA;, &lt;a href=&#34;http://dojocampus.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo Campus&lt;/a&gt;&#xA; is always fun, &lt;a href=&#34;http://www.dojotoolkit.org/forum&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo forums&lt;/a&gt;&#xA; are active, even &lt;a href=&#34;http://archive.dojotoolkit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the Dojo archive&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;dojo.dnd 1.1 technical documentation&lt;/a&gt;&#xA;. Let me use this post to remind you about the &lt;a href=&#34;http://docs.google.com/Doc?id=d764479_9hgdng4g8&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;dojox.gfx 1.1 documentation&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo Forum&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo Book&lt;/a&gt;&#xA; has a &lt;a href=&#34;http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/drag-and-drop&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DnD chapter&lt;/a&gt;&#xA; too.&lt;/p&gt;&#xA;&lt;p&gt;Both documents are hosted on &lt;a href=&#34;http://docs.google.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google Docs&lt;/a&gt;&#xA;, 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;F/OSS&lt;/a&gt;&#xA; is a phenomenon of the modern life. But what makes it successful? &lt;a href=&#34;http://www.apache-ssl.org/ben.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ben Laurie&lt;/a&gt;&#xA; is convinced that &lt;a href=&#34;http://www.links.org/?p=292&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Open Source Is Just Economics&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;style&gt;&#xA;.lb-thumb{display:inline-block;line-height:0;margin:.2em}&#xA;.lb-thumb img{cursor:zoom-in;max-width:100%;height:auto;border-radius:2px}&#xA;.lb-overlay{display:none}&#xA;.lb-overlay:target{display:flex;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;background:rgba(0,0,0,.88);cursor:zoom-out;padding:2vmin}&#xA;.lb-overlay img{max-width:96vw;max-height:96vh;width:auto;height:auto}&#xA;&lt;/style&gt;&lt;a class=&#34;lb-thumb&#34; href=&#34;#steve-holden&#34; title=&#34;Steve Holden in Django t-shirt&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2007-02-24-pycon-2007-pictures/steve-holden-thumb.jpg&#34; alt=&#34;Steve Holden in Django t-shirt&#34; width=&#34;180&#34; height=&#34;240&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;steve-holden&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2007-02-24-pycon-2007-pictures/steve-holden.jpg&#34; alt=&#34;Steve Holden in Django t-shirt&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA;&#xA;&lt;p&gt;Yes, this is Steve Holden sporting a Django t-shirt.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ajax&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA;-based high-performance web application. I will use &lt;a href=&#34;http://www.djangoproject.com/&#34; title=&#34;Django&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django&lt;/a&gt;&#xA; and &lt;a href=&#34;http://www.apache.org/&#34; title=&#34;Apache&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Apache&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA; — 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;IronPython&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google SoC&lt;/a&gt;&#xA;  is upon us. I signed up as a mentor with &lt;a href=&#34;http://dojotoolkit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA;  and &lt;a href=&#34;http://www.djangoproject.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the FAQ&lt;/a&gt;&#xA;. Who can apply? &lt;a href=&#34;http://code.google.com/soc/studentfaq.html#8&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Any student anywhere in the world&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;$4,500 USD&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA; 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;style&gt;&#xA;.lb-thumb{display:inline-block;line-height:0;margin:.2em}&#xA;.lb-thumb img{cursor:zoom-in;max-width:100%;height:auto;border-radius:2px}&#xA;.lb-overlay{display:none}&#xA;.lb-overlay:target{display:flex;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;background:rgba(0,0,0,.88);cursor:zoom-out;padding:2vmin}&#xA;.lb-overlay img{max-width:96vw;max-height:96vh;width:auto;height:auto}&#xA;&lt;/style&gt;&lt;a class=&#34;lb-thumb&#34; href=&#34;#jtag&#34; title=&#34;JTAG in its full glory&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2006-04-05-jtag/jtag-thumb.jpg&#34; alt=&#34;JTAG in its full glory&#34; width=&#34;240&#34; height=&#34;180&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;jtag&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2006-04-05-jtag/jtag.jpg&#34; alt=&#34;JTAG in its full glory&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA;&#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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;this diagram&lt;/a&gt;&#xA;. 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;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;complex systems&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenWrt&lt;/a&gt;&#xA; has &lt;a href=&#34;http://forum.openwrt.org/viewtopic.php?id=4767&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;officially terminated Sveasoft&amp;rsquo;s license&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Unbelievable&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the economic and political theories of Karl Marx&lt;/a&gt;&#xA;&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Steve Holden&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;more pictures from PyCon 2006&lt;/a&gt;&#xA;. Enjoy.&lt;/p&gt;&#xA;&lt;a class=&#34;lb-thumb&#34; href=&#34;#core-django-developers&#34; title=&#34;The core Django developers.&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2006-02-26-more-pycon-2006-pictures/core-django-developers-thumb.jpg&#34; alt=&#34;Simon, Adrian, Jacob, and Matt.&#34; width=&#34;240&#34; height=&#34;180&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;core-django-developers&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2006-02-26-more-pycon-2006-pictures/core-django-developers.jpg&#34; alt=&#34;Simon, Adrian, Jacob, and Matt.&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA;&#xA;&lt;p&gt;Now time for a blog roll of my photo models (far from complete):&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Person&lt;/th&gt;&#xA;          &lt;th&gt;Blog&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Adrian Holovaty&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.holovaty.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.holovaty.com/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Simon Willison&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://simon.incutio.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://simon.incutio.com/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Jacob Kaplan-Moss&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.jacobian.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.jacobian.org/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Matt Croydon&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.postneo.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.postneo.com/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Derek Willis&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://thescoop.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://thescoop.org/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Ian Bicking&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://blog.ianbicking.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://blog.ianbicking.org/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Bob Ippolito&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://bob.pythonmac.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://bob.pythonmac.org/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Guido van Rossum&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.artima.com/weblogs/index.jsp?blogger=guido&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.artima.com/weblogs/index.jsp?blogger=guido&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Ian Maurer&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://itmaurer.com/blog/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://itmaurer.com/blog/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Andrew Kuchling&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.amk.ca/diary/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.amk.ca/diary/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Jeremy Dunck&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://dunck.us/anabasis/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://dunck.us/anabasis/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;David Ascher&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://ascher.ca/blog/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://ascher.ca/blog/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Jeremy Hylton&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.python.org/~jeremy/weblog/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.python.org/~jeremy/weblog/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Jim Hugunin&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://blogs.msdn.com/hugunin/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://blogs.msdn.com/hugunin/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Phillip L. Eby&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://dirtsimple.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://dirtsimple.org/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Mark Ramm&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.compoundthinking.com/blog/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.compoundthinking.com/blog/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Steve Holden&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://holdenweb.blogspot.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://holdenweb.blogspot.com/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Bram Cohen&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://bramcohen.livejournal.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://bramcohen.livejournal.com/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Kevin Dangoor&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.blueskyonmars.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.blueskyonmars.com/&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;publishing pictures and small notes on Flickr&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;.&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo compressor&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Snakes &amp;amp; Rubies&lt;/a&gt;&#xA;  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;&#xA;  published on 1/27/2006. New stats include 5 more days covering 18 days of January 2006.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Title&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;Page views&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;Downloads&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://video.google.com/videoplay?docid=-3548805983075267875&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Snakes and Rubies (Adrian&amp;rsquo;s Django presentation)&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;190&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;7&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://video.google.com/videoplay?docid=1149552518153462279&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Snakes and Rubies (David&amp;rsquo;s Rails presentation)&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;169&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;19&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://video.google.com/videoplay?docid=9043285771539514211&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Snakes and Rubies (Q&amp;amp;A session)&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;89&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;2&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://video.google.com/videoplay?docid=2939556954580527226&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Snakes and Rubies (full)&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;149&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;12&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Totals&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;597&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Lessons:&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Guido&lt;/a&gt;&#xA;&amp;rsquo;s &lt;a href=&#34;http://www.artima.com/weblogs/viewpost.jsp?thread=146149&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;quest&lt;/a&gt;&#xA;  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;&#xA;, &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;&#xA;) 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Matt&lt;/a&gt;&#xA;&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Python web framework shootout&lt;/a&gt;&#xA;:&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django vs. Cheeta 1-0&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Guido&lt;/a&gt;&#xA;&amp;rsquo;s &lt;a href=&#34;http://www.artima.com/weblogs/viewpost.jsp?thread=146149&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;previous post on Python web frameworks&lt;/a&gt;&#xA;  (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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Web Framework Redux&lt;/a&gt;&#xA;. 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;amp;thread=146503&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the forum&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django&lt;/a&gt;&#xA;-&lt;a href=&#34;http://dojotoolkit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA;  alliance was finally announced to the world by our very own &lt;a href=&#34;http://www.jacobian.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Jacob Kaplan-Moss&lt;/a&gt;&#xA;:&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Jacob&amp;rsquo;s post&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;full Snakes &amp;amp; Rubies video went live&lt;/a&gt;&#xA; 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;&#xA; (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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Adrian&amp;rsquo;s Django presentation&lt;/a&gt;&#xA;, &lt;a href=&#34;http://video.google.com/videoplay?docid=1149552518153462279&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;David&amp;rsquo;s Rails presentation&lt;/a&gt;&#xA;, and &lt;a href=&#34;http://video.google.com/videoplay?docid=9043285771539514211&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Q&amp;amp;A session&lt;/a&gt;&#xA;. 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;</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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;this thread&lt;/a&gt;&#xA;  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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;this FAQ entry&lt;/a&gt;&#xA;. Give it a whirl and don&amp;rsquo;t forget to thank Felix Fietkau (&lt;a href=&#34;http://nbd.name/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;nbd&lt;/a&gt;&#xA;).&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo 0.2.2&lt;/a&gt;&#xA;. 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;&#xA;, 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Jacob Kaplan-Moss&lt;/a&gt;&#xA;  released his &lt;a href=&#34;http://www.djangoproject.com/snakesandrubies/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;documentary&lt;/a&gt;&#xA;  about &lt;a href=&#34;http://snakesandrubies.com/event/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Snakes &amp;amp; Rubies event&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google Video (Beta)&lt;/a&gt;&#xA;? 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Brad Neuberg&lt;/a&gt;&#xA;  wrote &lt;a href=&#34;http://codinginparadise.org/weblog/2006/01/ajaxdhtml-tutorial-should-i-render-my.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;a good article&lt;/a&gt;&#xA;, which compares two different approaches to AJAX: thick client (e.g., &lt;a href=&#34;http://dojotoolkit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA;  style) and thin client (e.g., &lt;a href=&#34;http://prototype.conio.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Prototype&lt;/a&gt;&#xA;  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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;amp;from=rss&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;debated on /.&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;National Center for Educational Statistics&lt;/a&gt;&#xA;. I made a chart using &lt;a href=&#34;http://nces.ed.gov/programs/digest/d04/tables/dt04_280.asp&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#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;&#xA; (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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django&lt;/a&gt;&#xA;, 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TinyMCE 2.0.1&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo 0.2.1&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ruby on Rails 1.0&lt;/a&gt;&#xA;  was released 4 days ago. &lt;a href=&#34;http://script.aculo.us/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Scrip.aculo.us 1.5&lt;/a&gt;&#xA; and &lt;a href=&#34;http://prototype.conio.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Prototype 1.4&lt;/a&gt;&#xA; were released as well.&lt;/p&gt;&#xA;&lt;p&gt;On 15th &lt;a href=&#34;http://dojotoolkit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo 0.2&lt;/a&gt;&#xA; 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;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DIY&lt;/a&gt;&#xA;  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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NIH&lt;/a&gt;&#xA;, 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;  to &lt;a href=&#34;http://www.loudthinking.com/arc/000545.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;David&amp;rsquo;s take&lt;/a&gt;&#xA;  on &lt;a href=&#34;http://snakesandrubies.com/event/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&amp;quot;Snakes and Rubies&amp;quot;&lt;/a&gt;&#xA;  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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&amp;quot;Ajax and Django&amp;quot;&lt;/a&gt;&#xA;  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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django&amp;rsquo;s Version One roadmap&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;David Heinemeier Hansson&lt;/a&gt;&#xA;  (the creator of Ruby on Rails) wrote &lt;a href=&#34;http://www.loudthinking.com/arc/000545.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;a little piece on Snakes and Rubies event&lt;/a&gt;&#xA;  highlighting differences between &lt;a href=&#34;http://www.rubyonrails.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ruby on Rails&lt;/a&gt;&#xA;  and &lt;a href=&#34;http://www.djangoproject.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;his thoughts on Snakes and Rubies event&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Eric Sinclair&lt;/a&gt;&#xA; posted &lt;a href=&#34;http://www.kittyjoyce.com/eric/log/archive/001470.html#001470&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;his notes on the event&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Nasreddin Hodja&lt;/a&gt;&#xA;. Here is one (&lt;a href=&#34;http://hem.bredband.net/hodja/business.htm#04&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the source&lt;/a&gt;&#xA;):&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenWrt&lt;/a&gt;&#xA; made with &lt;a href=&#34;http://dojotoolkit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA;! 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;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenWrt RC4 is out&lt;/a&gt;&#xA;. 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;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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. Here is the bastard:&lt;/p&gt;&#xA;&lt;style&gt;&#xA;.lb-thumb{display:inline-block;line-height:0;margin:.2em}&#xA;.lb-thumb img{cursor:zoom-in;max-width:100%;height:auto;border-radius:2px}&#xA;.lb-overlay{display:none}&#xA;.lb-overlay:target{display:flex;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;background:rgba(0,0,0,.88);cursor:zoom-out;padding:2vmin}&#xA;.lb-overlay img{max-width:96vw;max-height:96vh;width:auto;height:auto}&#xA;&lt;/style&gt;&lt;a class=&#34;lb-thumb&#34; href=&#34;#bug&#34; title=&#34;OpenWrt GUI Firewall configurator bug&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-11-20-openwrt-gui-alpha-delayed/firewall-bug-thumb.jpg&#34; alt=&#34;OpenWrt GUI Firewall configurator bug&#34; width=&#34;240&#34; height=&#34;175&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;bug&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-11-20-openwrt-gui-alpha-delayed/firewall-bug.jpg&#34; alt=&#34;OpenWrt GUI Firewall configurator bug&#34; loading=&#34;lazy&#34;&gt;&lt;/a&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;blog post&lt;/a&gt;&#xA;  describing &lt;a href=&#34;http://blog.unixdaemon.net/cgi-bin/blosxom.pl/2005/10/27&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;London Web Frameworks Night&lt;/a&gt;&#xA;, which took place on 11/17/2005 at the University of Westminster. &lt;a href=&#34;http://happygiraffe.net/blog/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Jabbering Giraffe&lt;/a&gt;&#xA; reports on presentation of three web frameworks: &lt;a href=&#34;http://catalyst.perl.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Catalyst&lt;/a&gt;&#xA;, &lt;a href=&#34;http://www.djangoproject.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django&lt;/a&gt;&#xA;, And &lt;a href=&#34;http://www.rubyonrails.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ruby on Rails&lt;/a&gt;&#xA;.&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;</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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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. Here is a new screenshot for your viewing pleasure:&lt;/p&gt;&#xA;&lt;style&gt;&#xA;.lb-thumb{display:inline-block;line-height:0;margin:.2em}&#xA;.lb-thumb img{cursor:zoom-in;max-width:100%;height:auto;border-radius:2px}&#xA;.lb-overlay{display:none}&#xA;.lb-overlay:target{display:flex;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;background:rgba(0,0,0,.88);cursor:zoom-out;padding:2vmin}&#xA;.lb-overlay img{max-width:96vw;max-height:96vh;width:auto;height:auto}&#xA;&lt;/style&gt;&lt;a class=&#34;lb-thumb&#34; href=&#34;#shot&#34; title=&#34;OpenWrt GUI — new screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-11-19-openwrt-gui-alpha-coming/new-screenshot-thumb.jpg&#34; alt=&#34;OpenWrt GUI — new screenshot&#34; width=&#34;223&#34; height=&#34;240&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;shot&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-11-19-openwrt-gui-alpha-coming/new-screenshot.jpg&#34; alt=&#34;OpenWrt GUI — new screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA;&#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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Django has new shiny RSS framework&lt;/a&gt;&#xA;. 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;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DreamHost&lt;/a&gt;&#xA;  provides &lt;a href=&#34;http://www.analog.cx/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Analog 6.0&lt;/a&gt;&#xA;. I supplemented it with &lt;a href=&#34;http://awstats.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;awstats&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Hugo&lt;/a&gt;&#xA; (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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Grab it&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA;&amp;rsquo;s versatile &lt;a href=&#34;http://dojotoolkit.org/docs/intro_to_dojo_io.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;dojo.io.bind()&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DreamHost&lt;/a&gt;&#xA;  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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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 the OpenWrt GUI screenshots (below). 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;&#xA; using &lt;a href=&#34;http://www.debugmode.com/wink/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Wink&lt;/a&gt;&#xA;. Enjoy!&lt;/p&gt;&#xA;&lt;p&gt;&lt;style&gt;&#xA;.lb-thumb{display:inline-block;line-height:0;margin:.2em}&#xA;.lb-thumb img{cursor:zoom-in;max-width:100%;height:auto;border-radius:2px}&#xA;.lb-overlay{display:none}&#xA;.lb-overlay:target{display:flex;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;background:rgba(0,0,0,.88);cursor:zoom-out;padding:2vmin}&#xA;.lb-overlay img{max-width:96vw;max-height:96vh;width:auto;height:auto}&#xA;&lt;/style&gt;&lt;a class=&#34;lb-thumb&#34; href=&#34;#u1&#34; title=&#34;OpenWrt GUI screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-1-thumb.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; width=&#34;193&#34; height=&#34;240&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;u1&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-1.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA; &lt;a class=&#34;lb-thumb&#34; href=&#34;#u2&#34; title=&#34;OpenWrt GUI screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-2-thumb.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; width=&#34;197&#34; height=&#34;240&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;u2&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-2.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA; &lt;a class=&#34;lb-thumb&#34; href=&#34;#u3&#34; title=&#34;OpenWrt GUI screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-3-thumb.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; width=&#34;225&#34; height=&#34;240&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;u3&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-3.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA; &lt;a class=&#34;lb-thumb&#34; href=&#34;#u4&#34; title=&#34;OpenWrt GUI screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-4-thumb.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; width=&#34;225&#34; height=&#34;240&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;u4&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-4.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA; &lt;a class=&#34;lb-thumb&#34; href=&#34;#u5&#34; title=&#34;OpenWrt GUI screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-5-thumb.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; width=&#34;225&#34; height=&#34;240&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;u5&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-5.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA; &lt;a class=&#34;lb-thumb&#34; href=&#34;#u6&#34; title=&#34;OpenWrt GUI screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-6-thumb.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; width=&#34;197&#34; height=&#34;240&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;u6&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-26-openwrt_gui_screencast_and_screenshots/screenshot-6.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA;&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;&#xA;!&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;nbd&amp;rsquo;s webif&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenWrt&lt;/a&gt;&#xA;&amp;rsquo;s IPKG. I am talking about creating a custom build of &lt;a href=&#34;http://dojotoolkit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Backwards-incompatible changes&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DreamHost&lt;/a&gt;&#xA;  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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <guid>https://www.lazutkin.com/blog/2005-10-14-openwrt_gui_it_works_kind</guid>
      <description>&lt;p&gt;I decided to post some screenshots of OpenWrt GUI running on my browser. I didn&amp;rsquo;t package it as .ipk yet. Click any thumbnail below for the full-size picture. 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;&#xA;&lt;p&gt;&lt;style&gt;&#xA;.lb-thumb{display:inline-block;line-height:0;margin:.2em}&#xA;.lb-thumb img{cursor:zoom-in;max-width:100%;height:auto;border-radius:2px}&#xA;.lb-overlay{display:none}&#xA;.lb-overlay:target{display:flex;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;background:rgba(0,0,0,.88);cursor:zoom-out;padding:2vmin}&#xA;.lb-overlay img{max-width:96vw;max-height:96vh;width:auto;height:auto}&#xA;&lt;/style&gt;&lt;a class=&#34;lb-thumb&#34; href=&#34;#ow1&#34; title=&#34;OpenWrt GUI screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-14-openwrt_gui_it_works_kind/screenshot-1-thumb.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; width=&#34;238&#34; height=&#34;70&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;ow1&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-14-openwrt_gui_it_works_kind/screenshot-1.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA; &lt;a class=&#34;lb-thumb&#34; href=&#34;#ow2&#34; title=&#34;OpenWrt GUI screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-14-openwrt_gui_it_works_kind/screenshot-2-thumb.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; width=&#34;240&#34; height=&#34;155&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;ow2&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-14-openwrt_gui_it_works_kind/screenshot-2.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA; &lt;a class=&#34;lb-thumb&#34; href=&#34;#ow3&#34; title=&#34;OpenWrt GUI screenshot&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-14-openwrt_gui_it_works_kind/screenshot-3-thumb.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; width=&#34;240&#34; height=&#34;213&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;ow3&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-10-14-openwrt_gui_it_works_kind/screenshot-3.jpg&#34; alt=&#34;OpenWrt GUI screenshot&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA;&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;  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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;JTAG&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;self-made&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Altex&lt;/a&gt;&#xA;  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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://itmaurer.com/blog/?p=2&lt;/a&gt;&#xA;&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenWrt Wiki&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DreamHost&lt;/a&gt;&#xA; 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;&#xA;&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Technorati&lt;/a&gt;&#xA;! 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenWrt&lt;/a&gt;&#xA;  GUI. I use &lt;a href=&#34;http://dojotoolkit.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA;  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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;homunculus&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ajax the detergent&lt;/a&gt;&#xA;. No, I didn&amp;rsquo;t mean &lt;a href=&#34;http://english.ajax.nl/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Ajax the pro soccer club&lt;/a&gt;&#xA;. &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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the movie&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TinyMCE&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;my article in Django Wiki&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;  I complained about annoying flickering. Well, I&amp;rsquo;ve upgraded to &lt;a href=&#34;http://tinymce.moxiecode.com/index.php&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TinyMCE 2.0 RC2&lt;/a&gt;&#xA;  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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenWrt&lt;/a&gt;&#xA;  web-based user interface using &lt;a href=&#34;http://nbd.name/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Felix Fietkau&lt;/a&gt;&#xA;&amp;rsquo;s code. Well, MIPS processors used by &lt;a href=&#34;http://wiki.openwrt.org/TableOfHardware&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenWrt units&lt;/a&gt;&#xA;  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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;style&gt;&#xA;.lb-thumb{display:inline-block;line-height:0;margin:.2em}&#xA;.lb-thumb img{cursor:zoom-in;max-width:100%;height:auto;border-radius:2px}&#xA;.lb-overlay{display:none}&#xA;.lb-overlay:target{display:flex;position:fixed;inset:0;z-index:1000;align-items:center;justify-content:center;background:rgba(0,0,0,.88);cursor:zoom-out;padding:2vmin}&#xA;.lb-overlay img{max-width:96vw;max-height:96vh;width:auto;height:auto}&#xA;&lt;/style&gt;&lt;a class=&#34;lb-thumb&#34; href=&#34;#rita-sky&#34; title=&#34;Dallas, TX: before Rita&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-09-23-rita/rita-sky-thumb.jpg&#34; alt=&#34;Sky from my house on 9/23/2005&#34; width=&#34;240&#34; height=&#34;180&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;a class=&#34;lb-overlay&#34; id=&#34;rita-sky&#34; href=&#34;#_&#34; aria-hidden=&#34;true&#34;&gt;&lt;img src=&#34;https://www.lazutkin.com/blog/2005-09-23-rita/rita-sky.jpg&#34; alt=&#34;Sky from my house on 9/23/2005&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&#xA;&#xA;&lt;p&gt;You can find bigger picture &lt;a href=&#34;http://www.flickr.com/photos/uhop/sets/1004415/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;on Flickr&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;A &amp;quot;category&amp;quot; Data Model&lt;/a&gt;&#xA; &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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Relating an object to itself, many-to-one&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;django.core&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;meta&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Category&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Category defines following fields:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#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 class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#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 class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;                  e.g. &amp;#39;Development::C++&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    parent      - reference to parent category or null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    description - HTML description of category, or null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Notes:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    1) full_name is not editable. It is calculated automatically&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#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 class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    2) Separator specified by get_separator() method. It can be&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;       overridden in subclasses.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CharField&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxlength&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;full_name&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CharField&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxlength&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;250&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unique&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                 &lt;span class=&#34;n&#34;&gt;editable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ForeignKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;self&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;blank&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                  &lt;span class=&#34;n&#34;&gt;related_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;child&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TextField&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blank&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                 &lt;span class=&#34;n&#34;&gt;help_text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Use raw HTML.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;META&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;verbose_name_plural&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Categories&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;module_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verbose_name_plural&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;admin&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Admin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;list_display&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;full_name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;search_fields&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;full_name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;js&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s1&#34;&gt;&amp;#39;/tiny_mce/tiny_mce.js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s1&#34;&gt;&amp;#39;/appmedia/admin/js/textareas.js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;ordering&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;full_name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__repr__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;full_name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_pre_save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;full_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;calculate_full_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_separator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;::&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# note: used in templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_all_children&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#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 class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;output&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;children&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_child_list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;children&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_all_children&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#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 class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# note: used in templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_all_parents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#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 class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;id_list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;id_list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_parent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;id_list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reverse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;id_list&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# note: used in templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calculate_full_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;calculate full name from parent list&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_separator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_all_parents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# note: used in templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;get relative path of the category&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;categories/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;/&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&#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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;official Django badges&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#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; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;&lt;/a&gt;&#xA;&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;ticket #509&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;new White Russian RC3&lt;/a&gt;&#xA;.&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;amp;scid=35&amp;amp;amp;prid=601&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Linksys WRT54G&lt;/a&gt;&#xA;. You can run it too, if you have &lt;a href=&#34;http://wiki.openwrt.org/TableOfHardware&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;supported hardware&lt;/a&gt;&#xA;. I run it on &lt;a href=&#34;http://www.buffalotech.com/products/product-detail.php?productid=11&amp;amp;amp;categoryid=6&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Buffalo WBR2-G54&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Tiny MCE 2.0RC2&lt;/a&gt;&#xA;.&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;!&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;&#xA;  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;amp;Board=forum_offtopic&amp;amp;amp;Number=25154&amp;amp;amp;Search=true&amp;amp;amp;Forum=All_Forums&amp;amp;amp;Words=Postgre&amp;amp;amp;Match=Entire%20Phrase&amp;amp;amp;Searchpage=0&amp;amp;amp;Limit=25&amp;amp;amp;Old=allposts&amp;amp;amp;Main=11085&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Re: PostgreSQL rant&lt;/a&gt;&#xA;  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;amp;Board=forum_offtopic&amp;amp;amp;Number=25054&amp;amp;amp;Search=true&amp;amp;amp;Forum=All_Forums&amp;amp;amp;Words=InnoDB&amp;amp;amp;Match=Entire%20Phrase&amp;amp;amp;Searchpage=0&amp;amp;amp;Limit=25&amp;amp;amp;Old=allposts&amp;amp;amp;Main=11085&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Re: PostgreSQL rant&lt;/a&gt;&#xA;  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;amp;Board=forum_troubleshooting&amp;amp;amp;Number=21543&amp;amp;amp;Search=true&amp;amp;amp;Forum=All_Forums&amp;amp;amp;Words=Postgre&amp;amp;amp;Match=Entire%20Phrase&amp;amp;amp;Searchpage=0&amp;amp;amp;Limit=25&amp;amp;amp;Old=allposts&amp;amp;amp;Main=21289&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Re: mod_proxy support&lt;/a&gt;&#xA;  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;amp;Board=forum_programming&amp;amp;amp;Number=14487&amp;amp;amp;Search=true&amp;amp;amp;Forum=All_Forums&amp;amp;amp;Words=Postgre&amp;amp;amp;Match=Entire%20Phrase&amp;amp;amp;Searchpage=0&amp;amp;amp;Limit=25&amp;amp;amp;Old=allposts&amp;amp;amp;Main=14485&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Re: PostgreSQL&lt;/a&gt;&#xA;  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;amp;Board=forum_offtopic&amp;amp;amp;Number=13498&amp;amp;amp;Search=true&amp;amp;amp;Forum=All_Forums&amp;amp;amp;Words=InnoDB&amp;amp;amp;Match=Entire%20Phrase&amp;amp;amp;Searchpage=0&amp;amp;amp;Limit=25&amp;amp;amp;Old=allposts&amp;amp;amp;Main=11085&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Re: PostgreSQL rant&lt;/a&gt;&#xA;  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;amp;Board=forum_offtopic&amp;amp;amp;Number=11087&amp;amp;amp;Search=true&amp;amp;amp;Forum=All_Forums&amp;amp;amp;Words=InnoDB&amp;amp;amp;Match=Entire%20Phrase&amp;amp;amp;Searchpage=0&amp;amp;amp;Limit=25&amp;amp;amp;Old=allposts&amp;amp;amp;Main=11085&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Re: PostgreSQL rant&lt;/a&gt;&#xA;  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;amp;Board=forum_programming&amp;amp;amp;Number=5826&amp;amp;amp;Search=true&amp;amp;amp;Forum=All_Forums&amp;amp;amp;Words=Postgre&amp;amp;amp;Match=Entire%20Phrase&amp;amp;amp;Searchpage=0&amp;amp;amp;Limit=25&amp;amp;amp;Old=allposts&amp;amp;amp;Main=4950&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Re: MySQL 4, PostgreSQL&lt;/a&gt;&#xA;  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;amp;Board=forum_programming&amp;amp;amp;Number=4964&amp;amp;amp;Search=true&amp;amp;amp;Forum=All_Forums&amp;amp;amp;Words=InnoDB&amp;amp;amp;Match=Entire%20Phrase&amp;amp;amp;Searchpage=0&amp;amp;amp;Limit=25&amp;amp;amp;Old=allposts&amp;amp;amp;Main=4950&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Re: MySQL 4, PostgreSQL&lt;/a&gt;&#xA;  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;amp;Board=forum_troubleshooting&amp;amp;amp;Number=4458&amp;amp;amp;Search=true&amp;amp;amp;Forum=All_Forums&amp;amp;amp;Words=InnoDB&amp;amp;amp;Match=Entire%20Phrase&amp;amp;amp;Searchpage=0&amp;amp;amp;Limit=25&amp;amp;amp;Old=allposts&amp;amp;amp;Main=4456&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Re: transactions in mysql&lt;/a&gt;&#xA;  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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;SQLite&lt;/a&gt;&#xA; (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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;DreamHost&lt;/a&gt;&#xA;), 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Take it&lt;/a&gt;&#xA;  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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;) and strange stalling of long pages, which I &lt;a href=&#34;http://article.gmane.org/gmane.comp.python.django.user/505&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;reported to Django&amp;rsquo;s mailing list&lt;/a&gt;&#xA;. 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;his experience&lt;/a&gt;&#xA;. He pointed out to possible &lt;a href=&#34;http://www.saddi.com/software/flup/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;flup&lt;/a&gt;&#xA;/&lt;a href=&#34;http://www.saddi.com/software/py-lib/py-lib/fcgi.py&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;fcgi.py&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Python libraries and utilities&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Opera&lt;/a&gt;&#xA; 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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TinyMCE&lt;/a&gt;&#xA; 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Dojo&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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;&#xA;.&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; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.socialistsoftware.com/?p=10&lt;/a&gt;&#xA;, TinyMCE — &lt;a href=&#34;http://www.socialistsoftware.com/?p=8&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;http://www.socialistsoftware.com/?p=8&lt;/a&gt;&#xA;. 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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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><author>Eugene Lazutkin (eugene.lazutkin@gmail.com)</author>
      <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>
