<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>sn.printf.net</title>
	<link rel="self" href="http://sn.printf.net/atom.xml"/>
	<link href="http://sn.printf.net/"/>
	<id>http://sn.printf.net/atom.xml</id>
	<updated>2008-11-22T10:30:22+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<entry>
		<title type="html">Updating the iPhone</title>
		<link href="http://blake8086.blogspot.com/2008/11/updating-iphone.html"/>
		<id>tag:blogger.com,1999:blog-5195382480858168001.post-1072225713409786426</id>
		<updated>2008-11-21T13:47:03+00:00</updated>
		<content type="html">&lt;a href=&quot;http://2.bp.blogspot.com/_rsZUZ8HzRaQ/SScP7ZnDQCI/AAAAAAAAAEw/AtT_LfmUl5M/s1600-h/2008-11-21_1340.png&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_rsZUZ8HzRaQ/SScP7ZnDQCI/AAAAAAAAAEw/AtT_LfmUl5M/s400/2008-11-21_1340.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5271199402021830690&quot; /&gt;&lt;/a&gt;&lt;br /&gt;(&lt;span class=&quot;Apple-style-span&quot;&gt;pop&lt;/span&gt;) I'm updating my (&lt;span class=&quot;Apple-style-span&quot;&gt;pop&lt;/span&gt;) iPhone to firmware version 2.2 for the &quot;improved Safari&quot; features and some of the se(&lt;span class=&quot;Apple-style-span&quot;&gt;pop&lt;/span&gt;)curity fixes and iTunes decides that disabling my fucking phone for an hour isn't enough, it has to annoy (&lt;span class=&quot;Apple-style-span&quot;&gt;pop&lt;/span&gt;) the shit out of me by putting itself on top of all my other windows every few seconds.  Thanks a fucking lot, it's not like I wanted to get (&lt;span class=&quot;Apple-style-span&quot;&gt;pop&lt;/span&gt;) any WORK done on MY computer (which is now temporarily Apple's).&lt;br /&gt;&lt;br /&gt;Who the fuck coded this?  S(&lt;span class=&quot;Apple-style-span&quot;&gt;pop&lt;/span&gt;)omewhere deep in the code, there must be a delay loop that says &quot;hey, it's been 10 seconds, time to be &lt;b&gt;(pop) FUCKING ANNOYING&lt;/b&gt; now.&quot;&lt;br /&gt;&lt;br /&gt;Each of these (&lt;span class=&quot;Apple-style-span&quot;&gt;pop&lt;/span&gt;)s is seriously (&lt;span class=&quot;Apple-style-span&quot;&gt;pop&lt;/span&gt;) another time the window popped up just while I was typing this.&lt;br /&gt;&lt;br /&gt;Fucking Apple.</content>
		<author>
			<name>Blake Householder</name>
			<email>noreply@blogger.com</email>
			<uri>http://blake8086.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">angryinterface</title>
			<subtitle type="html">Bad interfaces make us angry.  We love a good interface.</subtitle>
			<link rel="self" href="http://blake8086.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-5195382480858168001</id>
			<updated>2008-11-21T22:30:22+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Sequel is Gorgeous</title>
		<link href="http://feeds.feedburner.com/~r/Ardekantur/~3/458687874/"/>
		<id>http://blog.ardekantur.com/2008/11/sequel-is-gorgeous/</id>
		<updated>2008-11-19T18:44:45+00:00</updated>
		<content type="html">&lt;p&gt;My original &lt;a href=&quot;http://datamapper.org/&quot;&gt;DataMapper&lt;/a&gt; classes:&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;ruby ruby&quot;&gt;  &lt;span&gt;class&lt;/span&gt; Post
    &lt;span&gt;include&lt;/span&gt; &lt;span&gt;DataMapper::Resource&lt;/span&gt;
    property &lt;span&gt;:id&lt;/span&gt;,       Serial
    property &lt;span&gt;:title&lt;/span&gt;,    &lt;span&gt;String&lt;/span&gt;
    property &lt;span&gt;:body&lt;/span&gt;,     Text
    property &lt;span&gt;:created&lt;/span&gt;,  &lt;span&gt;DateTime&lt;/span&gt;
    property &lt;span&gt;:author&lt;/span&gt;,   &lt;span&gt;String&lt;/span&gt;
&amp;nbsp;
    validates_present &lt;span&gt;:body&lt;/span&gt;, &lt;span&gt;:title&lt;/span&gt;
&amp;nbsp;
    has n, &lt;span&gt;:categories&lt;/span&gt;, &lt;span&gt;:through&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; Resource
&amp;nbsp;
    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;latest_by_author&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;name&lt;span&gt;&amp;#41;&lt;/span&gt;
      all&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;:author&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; name, &lt;span&gt;:order&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;:created&lt;/span&gt;.&lt;span&gt;desc&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;count_by_author&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;name&lt;span&gt;&amp;#41;&lt;/span&gt;
      count&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;:author&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; name&lt;span&gt;&amp;#41;&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
    &lt;span&gt;def&lt;/span&gt; categories_as_comma_list
      categories.&lt;span&gt;map&lt;/span&gt; &lt;span&gt;&amp;#123;&lt;/span&gt; |x| x.&lt;span&gt;name&lt;/span&gt; &lt;span&gt;&amp;#125;&lt;/span&gt;.&lt;span&gt;join&lt;/span&gt; &lt;span&gt;', '&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
    &lt;span&gt;def&lt;/span&gt; categories_as_linked_comma_list
      categories.&lt;span&gt;map&lt;/span&gt; &lt;span&gt;&amp;#123;&lt;/span&gt; |x| &lt;span&gt;&amp;quot;&amp;lt;a href='/archive/#{x.name}'&amp;gt;#{x.name}&amp;lt;/a&amp;gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;#125;&lt;/span&gt;.&lt;span&gt;join&lt;/span&gt; &lt;span&gt;', '&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
  &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
  &lt;span&gt;class&lt;/span&gt; Category
    &lt;span&gt;include&lt;/span&gt; &lt;span&gt;DataMapper::Resource&lt;/span&gt;
    property &lt;span&gt;:id&lt;/span&gt;,       Serial
    property &lt;span&gt;:name&lt;/span&gt;,     &lt;span&gt;String&lt;/span&gt;
    validates_present &lt;span&gt;:name&lt;/span&gt;
&amp;nbsp;
    has n, &lt;span&gt;:posts&lt;/span&gt;, &lt;span&gt;:through&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; Resource
  &lt;span&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;My new &lt;a href=&quot;http://sequel.rubyforge.org/&quot;&gt;Sequel&lt;/a&gt; classes:&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;ruby ruby&quot;&gt;  &lt;span&gt;class&lt;/span&gt; Post &lt;span&gt;&amp;lt;&lt;/span&gt; &lt;span&gt;Sequel::Model&lt;/span&gt;
    many_to_many &lt;span&gt;:categories&lt;/span&gt;
&amp;nbsp;
    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;latest_by_author&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;name&lt;span&gt;&amp;#41;&lt;/span&gt;
      all&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;:author&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; name, &lt;span&gt;:order&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;:created&lt;/span&gt;.&lt;span&gt;desc&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;self&lt;/span&gt;.&lt;span&gt;count_by_author&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;name&lt;span&gt;&amp;#41;&lt;/span&gt;
      filter&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;:author&lt;/span&gt; &lt;span&gt;=&amp;gt;&lt;/span&gt; name&lt;span&gt;&amp;#41;&lt;/span&gt;.&lt;span&gt;count&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
    &lt;span&gt;def&lt;/span&gt; categories_as_comma_list
      categories.&lt;span&gt;map&lt;/span&gt; &lt;span&gt;&amp;#123;&lt;/span&gt; |x| x.&lt;span&gt;name&lt;/span&gt; &lt;span&gt;&amp;#125;&lt;/span&gt;.&lt;span&gt;join&lt;/span&gt; &lt;span&gt;', '&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
    &lt;span&gt;def&lt;/span&gt; categories_as_linked_comma_list
      categories.&lt;span&gt;map&lt;/span&gt; &lt;span&gt;&amp;#123;&lt;/span&gt; |x| &lt;span&gt;&amp;quot;&amp;lt;a href='/archive/#{x.name}'&amp;gt;#{x.name}&amp;lt;/a&amp;gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;#125;&lt;/span&gt;.&lt;span&gt;join&lt;/span&gt; &lt;span&gt;', '&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
  &lt;span&gt;end&lt;/span&gt;
&amp;nbsp;
  &lt;span&gt;class&lt;/span&gt; Category &lt;span&gt;&amp;lt;&lt;/span&gt; &lt;span&gt;Sequel::Model&lt;/span&gt;
    many_to_many &lt;span&gt;:posts&lt;/span&gt;
  &lt;span&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;Ignoring the migrations and validations, next to nothing has changed. All of my queries work as expected. They&amp;#8217;re inefficient because I&amp;#8217;m not giving Sequel any hints on how to handle them, but that will hopefully change soon as I migrate to using Sequel&amp;#8217;s DSL to specify queries, and stop using models altogether. I&amp;#8217;ve been mucking around in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch&quot;&gt;ORM&lt;/a&gt; debate and the more I think about it, the more I&amp;#8217;d like to use a lightweight language to describe my SQL, rather than hand it all off to a more complex ORM, which is exactly what Sequel provides me.&lt;/p&gt;</content>
		<author>
			<name>shopvac4christ</name>
			<uri>http://blog.ardekantur.com</uri>
		</author>
		<source>
			<title type="html">Ardekantur</title>
			<subtitle type="html">A blog about computer science, Ruby, .NET, and other fun things on the edge of software engineering.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Ardekantur"/>
			<id>http://feeds.feedburner.com/Ardekantur</id>
			<updated>2008-11-21T23:30:32+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">From Common Lisp to Clojure (Part 1)</title>
		<link href="http://djkthx.blogspot.com/2008/11/from-common-lisp-to-clojure-part-1.html"/>
		<id>tag:blogger.com,1999:blog-2805861249836571223.post-7212896645548089667</id>
		<updated>2008-11-08T07:39:11+00:00</updated>
		<content type="html">I recently started tinkering around with &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt; as a test to see if I could replace Java with a Lisp-like language. For those unfamiliar with Clojure, here's a quick intro to what it's all about:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Clojure is a dynamic programming language that targets the Java Virtual Machine. It is designed to be a general-purpose language, combining the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming. Clojure is a compiled language - it compiles directly to JVM bytecode, yet remains completely dynamic. Every feature supported by Clojure is supported at runtime. Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;As a regular user of Common Lisp, it has taken some adjustment to get used to Clojure's syntax choices, but I'm starting to believe that they are for the better and will allow those unfamiliar, or afraid of Lisp, to give it a try. A small example is the new syntax for LET; a function that binds values to variables. The code below in Common Lisp would assign 3 to x, and x + 1 to y:&lt;br /&gt;&lt;pre&gt;(let* ((x 3)&lt;br /&gt;       (y (+ x 1)))&lt;br /&gt;  ...)&lt;/pre&gt;&lt;br /&gt;In this case, we have to use LET*, which evaluates things sequentially (LET does the assignment in parallel). In Clojure, however, LET is always LET*, and a lot of the extra parentheses are removed. The above would be written like the following in Clojure:&lt;br /&gt;&lt;pre&gt;(let [x 3&lt;br /&gt;      y (+ x 1)]&lt;br /&gt;  ...)&lt;/pre&gt;&lt;br /&gt;The []'s were originally introduced in Scheme to make heavy paren code (LET, COND, etc.) easier to read, but was never enforced. I never used the [] helpers while writing Scheme, but I can understand why they might increase readability. Aside from the few syntactic differences, I felt more or less right at home using Clojure, with the added ability of being able to easily interface with Java programs.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Dynamic Java?&lt;/h2&gt;&lt;br /&gt;Despite Clojure's dynamic nature, we can still drop down to enforce typing when performance is an issue. I've started to switch over to Clojure as my primary language for &lt;a href=&quot;http://project-euler.net&quot;&gt;Project Euler&lt;/a&gt; problems, and one of the first things I needed to write was an efficient prime number sieve. I more or less copied the algorithm from Roger Corman's Lisp examples, without the type decoration as I was unsure how to do it in Clojure. I ended up with the following as a result:&lt;br /&gt;&lt;pre&gt;(defn unoptimized-sieve [n]&lt;br /&gt;  &quot;Returns a list of all primes from 2 to n&quot;&lt;br /&gt;  (let [root (Math/round (Math/floor (Math/sqrt n)))]&lt;br /&gt;    (loop [i 3&lt;br /&gt;           a (make-array Boolean n)&lt;br /&gt;           result (list 2)]&lt;br /&gt;      (if (&gt;= i n)&lt;br /&gt;        (reverse result)&lt;br /&gt;        (recur (+ i 2)&lt;br /&gt;               (if ( i root)&lt;br /&gt;                 (loop [arr a&lt;br /&gt;                        inc (+ i i)&lt;br /&gt;                        j (* i i)]&lt;br /&gt;                   (if (&gt;= j n)&lt;br /&gt;                     arr&lt;br /&gt;                     (recur (do (aset arr j true) arr)&lt;br /&gt;                            inc&lt;br /&gt;                            (+ j inc))))&lt;br /&gt;                 a)&lt;br /&gt;               (if (not (aget a i))&lt;br /&gt;                 (conj result i)&lt;br /&gt;                 result))))))&lt;/pre&gt;&lt;br /&gt;Notice the use of Java's java.lang.Math.round/floor/sqrt functions and the Boolean type. The first thing I noticed was how slowly this ran compared to my Common Lisp version. Finding the first 100,000 primes took a little longer than I anticipated.&lt;br /&gt;&lt;pre&gt;user&gt; (time (last (unoptimized-sieve 100000)))&lt;br /&gt;&quot;Elapsed time: 6160.188 msecs&quot;                                                                                                                                                       &lt;br /&gt;99991&lt;/pre&gt;&lt;br /&gt;I knew being able to tag types would increase my runtime dramatically, as it had done with the Common Lisp version, so I went ahead and did just that.&lt;br /&gt;&lt;pre&gt;(defn sieve [&lt;b&gt;#^Integer&lt;/b&gt; n]&lt;br /&gt;  &quot;Returns a list of all primes from 2 to n&quot;&lt;br /&gt;  (let [root (Math/round (Math/floor (Math/sqrt n)))]&lt;br /&gt;    (loop [&lt;b&gt;#^Integer&lt;/b&gt; i 3&lt;br /&gt;           a (make-array Boolean n)&lt;br /&gt;           result (list 2)]&lt;br /&gt;      (if (&gt;= i n)&lt;br /&gt;        (reverse result)&lt;br /&gt;        (recur (+ i 2)&lt;br /&gt;               (if ( i root)&lt;br /&gt;                 (loop [arr a&lt;br /&gt;                        &lt;b&gt;#^Integer&lt;/b&gt; inc (+ i i)&lt;br /&gt;                        &lt;b&gt;#^Integer&lt;/b&gt; j (* i i)]&lt;br /&gt;                   (if (&gt;= j n)&lt;br /&gt;                     arr&lt;br /&gt;                     (recur (do (aset arr j true) arr)&lt;br /&gt;                            inc&lt;br /&gt;                            (+ j inc))))&lt;br /&gt;                 a)&lt;br /&gt;               (if (not (aget a i))&lt;br /&gt;                 (conj result i)&lt;br /&gt;                 result))))))&lt;/pre&gt;&lt;br /&gt;A few simple compiler hints (shown in bold) dramatically reduced the running time:&lt;br /&gt;&lt;pre&gt;user&gt; (time (last (sieve 100000)))&lt;br /&gt;&quot;Elapsed time: 164.058 msecs&quot;                                                                                                                                                        &lt;br /&gt;99991&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Quite the speed bump for very little work if I do say so myself. Now I can finally start solving more Project Euler puzzles!&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;So... What Do I Think?&lt;/h2&gt;&lt;br /&gt;I obviously haven't played around with Clojure too much, but here are my current pros and cons.&lt;br /&gt;&lt;h3&gt;Pros&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;On the JVM&lt;/b&gt;: For the work that I do, I find myself writing a decent amount of Java code. A great deal of my classes provide code for assignments written in Java and I have to decide between rewriting provided code in a language I like, or using Java. Now, I don't have to make that choice anymore.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Data Structures are Immutable:&lt;/b&gt; One of the things I love about Lisp is you can do whatever you want. Program functionally, imperatively, object-oriented-ly, ..., the list goes on and on. But the more I used it, the more I realized I just did everything functionally. Clojure takes a big step for Lisp in forcing immutable data structures and basically forcing the programmer to think functionally. The main benefit lies in concurrency, which I plan on exploring in the near future.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Cons&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;No Tail Call Optimization:&lt;/b&gt; You're probably thinking &quot;how can a functional language not have tail call optimization?&quot; which is exactly what I thought when I read it. Unfortunately the JVM does not provide such a facility, luckily Rich Hickey provided a workaround in the form of RECUR. It essentially is just a goto that rebinds the variables to the new values in the most recent LOOP or DEFN call. In the second RECUR in the example above, &lt;tt&gt;(do (aset arr j true) arr)&lt;/tt&gt; is set to &lt;tt&gt;arr&lt;/tt&gt;, &lt;tt&gt;inc&lt;/tt&gt; is set to &lt;tt&gt;inc&lt;/tt&gt; and &lt;tt&gt;(+ j inc)&lt;/tt&gt; is set to &lt;tt&gt;j&lt;/tt&gt; in the most recent LOOP call, and the forms are re-evaluated. It's kinda hacky but it works, and with any luck the new JVM will have TCO and we'll be all set.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Lack of Robust Documentation:&lt;/b&gt; Perhaps I'm a bit spoiled with JavaDocs and the CL HyperSpec, but I do find the Clojure documentation a bit lacking. This is entirely understandable as the language is &lt;i&gt;very&lt;/i&gt; new, but it is definitely something that would turn off those new to Lisp. Luckily, with a &quot;Programming Clojure&quot; book on the way, things are looking up in that department as well :).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;All in all, I think Clojure is very promising and I hope to see the community thrive. It's slowly winning me over, which isn't too tough once I can work in a &lt;a href=&quot;http://dl-client.getdropbox.com/u/10591/slime-clojure.png&quot;&gt;great environment&lt;/a&gt; for a REPL-based language.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;EDIT:&lt;/b&gt; an even faster version that uses primitives (courtesy of Rich Hickey in the comments):&lt;pre&gt;user&gt; (time (last (sieve 100000)))&lt;br /&gt;&quot;Elapsed time: 17.963 msecs&quot;                                                                                                                       &lt;br /&gt;99991&lt;/pre&gt;:)</content>
		<author>
			<name>GT_Onizuka</name>
			<email>noreply@blogger.com</email>
			<uri>http://djkthx.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Beer Volcanoes and Stripper Factories</title>
			<link rel="self" href="http://djkthx.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-2805861249836571223</id>
			<updated>2008-11-14T21:30:18+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Gantty: Ruby and Gantt Charts</title>
		<link href="http://feeds.feedburner.com/~r/Ardekantur/~3/441665751/"/>
		<id>http://blog.ardekantur.com/?p=171</id>
		<updated>2008-11-04T03:25:00+00:00</updated>
		<content type="html">&lt;p&gt;&lt;img src=&quot;http://blog.ardekantur.com/wp-content/uploads/2008/11/gantty-logo1.png&quot; alt=&quot;Gantty Logo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Well, not just any old Gantt charts. Specifically, Gantt charts created with &lt;a href=&quot;http://ganttproject.biz/&quot;&gt;GanttProject&lt;/a&gt;, a multi-platform, open source Project Management application. Charts saved in this format are easily parsed into nice neat lil Ruby objects.&lt;/p&gt;

&lt;p&gt;You&amp;#8217;ll need GitHub as a gem source if you don&amp;#8217;t already have it (&lt;code&gt;gem sources -a http://gems.github.com&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudo gem install ardekantur-gantty
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And get ready! It&amp;#8217;s like this:&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;ruby ruby&quot;&gt;  &lt;span&gt;@gantt&lt;/span&gt; = &lt;span&gt;Gantty::Open&lt;/span&gt; &lt;span&gt;'~/CorporateProject.gan'&lt;/span&gt;
&amp;nbsp;
  &lt;span&gt;@gantt&lt;/span&gt;.&lt;span&gt;tasks&lt;/span&gt;.&lt;span&gt;first&lt;/span&gt;.&lt;span&gt;name&lt;/span&gt;         &lt;span&gt;# =&amp;gt; &amp;quot;Research and Development&amp;quot;&lt;/span&gt;
  &lt;span&gt;@gantt&lt;/span&gt;.&lt;span&gt;tasks&lt;/span&gt;.&lt;span&gt;first&lt;/span&gt;.&lt;span&gt;start&lt;/span&gt;.&lt;span&gt;to_s&lt;/span&gt;   &lt;span&gt;# =&amp;gt; &amp;quot;2008-01-01&amp;quot;&lt;/span&gt;
  &lt;span&gt;@gantt&lt;/span&gt;.&lt;span&gt;tasks&lt;/span&gt;.&lt;span&gt;first&lt;/span&gt;.&lt;span&gt;end&lt;/span&gt;.&lt;span&gt;to_s&lt;/span&gt;     &lt;span&gt;# =&amp;gt; &amp;quot;2008-01-15&amp;quot;&lt;/span&gt;
  &lt;span&gt;@gantt&lt;/span&gt;.&lt;span&gt;tasks&lt;/span&gt;.&lt;span&gt;first&lt;/span&gt;.&lt;span&gt;duration&lt;/span&gt;     &lt;span&gt;# =&amp;gt; 15&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;You can see what tasks are active for a certain day &amp;#8212; the entire reason I wrote this:&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;ruby ruby&quot;&gt;  &lt;span&gt;@gantt&lt;/span&gt;.&lt;span&gt;tasks&lt;/span&gt;.&lt;span&gt;size&lt;/span&gt;                               &lt;span&gt;# =&amp;gt; 30&lt;/span&gt;
&amp;nbsp;
  &lt;span&gt;# See tasks that are active today&lt;/span&gt;
  &lt;span&gt;@gantt&lt;/span&gt;.&lt;span&gt;current_tasks&lt;/span&gt;.&lt;span&gt;size&lt;/span&gt;                       &lt;span&gt;# =&amp;gt; 5&lt;/span&gt;
&amp;nbsp;
  &lt;span&gt;# Specify which date to see tasks from&lt;/span&gt;
  &lt;span&gt;@gantt&lt;/span&gt;.&lt;span&gt;current_tasks&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;.&lt;span&gt;new&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;2008&lt;/span&gt;,&lt;span&gt;1&lt;/span&gt;,&lt;span&gt;6&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;.&lt;span&gt;size&lt;/span&gt;   &lt;span&gt;# =&amp;gt; 8&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;Finally, mix it up for some &lt;em&gt;intense&lt;/em&gt; &lt;strong&gt;data&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;aggregation!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;ruby ruby&quot;&gt;  &lt;span&gt;@gantt&lt;/span&gt;.&lt;span&gt;current_tasks&lt;/span&gt;.&lt;span&gt;select&lt;/span&gt; &lt;span&gt;&amp;#123;&lt;/span&gt; |t| t.&lt;span&gt;coordinators&lt;/span&gt;.&lt;span&gt;size&lt;/span&gt; &lt;span&gt;&amp;gt;&lt;/span&gt; 0 &lt;span&gt;&amp;#125;&lt;/span&gt;.&lt;span&gt;collect&lt;/span&gt; \
    &lt;span&gt;&amp;#123;&lt;/span&gt; |task| task.&lt;span&gt;coordinators&lt;/span&gt;.&lt;span&gt;collect&lt;/span&gt; \
    &lt;span&gt;&amp;#123;&lt;/span&gt; |dude| &lt;span&gt;&amp;quot;- #{dude.name} should be working on #{task.name}.&amp;quot;&lt;/span&gt; &lt;span&gt;&amp;#125;&lt;/span&gt;&lt;span&gt;&amp;#125;&lt;/span&gt;.&lt;span&gt;flatten&lt;/span&gt;.&lt;span&gt;sort&lt;/span&gt;
&amp;nbsp;
  &lt;span&gt;# =&amp;gt; [&lt;/span&gt;
  &lt;span&gt;#      &amp;quot;- Adam Alpha should be working on Requirements Document.&amp;quot;, &lt;/span&gt;
  &lt;span&gt;#      &amp;quot;- Bob Beta should be working on Requirements Document.&amp;quot;,&lt;/span&gt;
  &lt;span&gt;#      &amp;quot;- Bob Beta should be working on Website.&amp;quot;,&lt;/span&gt;
  &lt;span&gt;#      &amp;quot;- Ed Epsilon should be working on Website.&amp;quot;&lt;/span&gt;
  &lt;span&gt;#    ]&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;Hideous and beautiful, all at once.&lt;/p&gt;

&lt;p&gt;Fork it at &lt;a href=&quot;http://github.com/ardekantur/gantty/&quot;&gt;its GitHub repository&lt;/a&gt;! I hope to add some more features over the weekend, like seeing task dependencies, percentage of completion, and resource focus percent on tasks.&lt;/p&gt;</content>
		<author>
			<name>shopvac4christ</name>
			<uri>http://blog.ardekantur.com</uri>
		</author>
		<source>
			<title type="html">Ardekantur</title>
			<subtitle type="html">A blog about computer science, Ruby, .NET, and other fun things on the edge of software engineering.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Ardekantur"/>
			<id>http://feeds.feedburner.com/Ardekantur</id>
			<updated>2008-11-21T23:30:32+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">My Faith is Restored</title>
		<link href="http://feeds.feedburner.com/~r/Ardekantur/~3/439449129/"/>
		<id>http://blog.ardekantur.com/2008/11/my-faith-is-restored/</id>
		<updated>2008-11-01T22:25:34+00:00</updated>
		<content type="html">&lt;p&gt;I neglected to add in &lt;a href=&quot;http://blog.ardekantur.com/2008/11/seriously-reconsidering-my-dedication-to-ruby/&quot;&gt;my previous post&lt;/a&gt; that it wasn&amp;#8217;t initially the size of the spawned processes that caused me to reformulate my approach to my website, it was the access time. A dozen or so off-hand measurements averaged the time to display the entire front page (a paragraph of text from a SQLite database) at 45 seconds, and that&amp;#8217;s being generous.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d like to put together the ideas that allowed me to clear up this issue, as well as solve another problem I was struggling with. This is my way of giving back to the community. As fun as I&amp;#8217;m sure it would be to ensconce myself in the cultures, practices, procedures, languages, politics, and other detritus of several large, entrenched open source projects just to solve a single problem&amp;#8230; oh wait.&lt;/p&gt;

&lt;p&gt;My problem surrounded three central elements. The website in question is a website for my undergraduate design seminar in Computer Science. As the designated administrative lead, my job is to keep everybody connected, organized, and on top of things. To this end, our group agreed on the use of Subversion, Trac, and a central website for any blog posts we feel would contribute to the discussion of our problem domain.&lt;/p&gt;

&lt;p&gt;How each person approaches a problem is nuanced, and &amp;#8212; if it can be explained and backed up with evidence &amp;#8212; does not have to rigidly adhere to one scheme or another. Whereas in the creation of my blog I was satisfied with subdomains, I wanted this project to use subdirectories off of a root domain: less typing to get to the beginning of a URL than the end, less futzing around with Apache, and so on.&lt;/p&gt;

&lt;p&gt;Thus:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://example.com/&lt;/code&gt; would be the blog,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://example.com/trac&lt;/code&gt; would be the Trac landing page, and&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://example.com/svn&lt;/code&gt; would be the Subversion repository end-point.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Already, the amount of code involved has exploded (Apache, &lt;code&gt;mod_wsgi&lt;/code&gt;, &lt;code&gt;mod_rewrite&lt;/code&gt;, and &lt;code&gt;mod_dav_svn&lt;/code&gt;, Subversion, Trac, Sinatra, Rack, Phusion Passenger) and no matter how I looked at it, the answer was going to be ugly. When everything was finally set up, the three applications were fighting for breathing room. I could run Trac and SVN together, and my application worked perfectly through Sinatra itself and on my dev machine, but putting them all up on the same site caused the Sinatra app to slow to a crawl on requests. It was when I finally disabled everything else but Passenger did I see the same problem occurring.&lt;/p&gt;

&lt;p&gt;Some people call it the &amp;#8216;Slow First Request&amp;#8217; problem, and recommend several pooling and request options in Passenger&amp;#8217;s configuration to mitigate the problem. I didn&amp;#8217;t see that as being the same problem, really: There&amp;#8217;s no reason why this application couldn&amp;#8217;t feel &amp;#8220;always on&amp;#8221;, ready for team members and potential meetings and presentations.&lt;/p&gt;

&lt;p&gt;I began disassembling my solution to narrow down the problem, and in doing so, considered replacements. I initially considered Apache my staple, and therefore beyond reproach, so I began at Passenger. I replaced it with &lt;a href=&quot;http://code.macournoyer.com/thin/&quot;&gt;Thin&lt;/a&gt;, and attached its instances to Apache with &lt;code&gt;mod_proxy&lt;/code&gt; and ilk. Now it ran like a dream! Then I re-enabled all the other sites in Apache.&lt;/p&gt;

&lt;p&gt;Now, I&amp;#8217;ll admit. I&amp;#8217;m not an HTTP guru. I may not fully understand &lt;code&gt;mod_rewrite&lt;/code&gt;, I might not completely grasp Apache configuration directives. You may not either. Or maybe you do, and you just can&amp;#8217;t fucking wrap your mind around why Apache refuses to redirect everything in its proper place even though everything makes sense to you, at 6:30 in the morning while you nurse a hangover. In this case, the shit I was shoveling finally convinced me to rip out Apache, and it was the best thing I could have done.&lt;/p&gt;

&lt;p&gt;I installed &lt;a href=&quot;http://lighttpd.net/&quot;&gt;lighttpd&lt;/a&gt; and immediately fell in love with it. First I configured Trac with it, before stepping back, aghast in horror in the amount of site-specific code filling the &lt;code&gt;lighttpd.conf&lt;/code&gt; file, and replaced it with a proxy to Trac&amp;#8217;s stand-alone server. Next, I wrote a proxy for Apache to deal with SVN &amp;#8212; out of the way, on another port number, since its &lt;code&gt;mod_dav_svn&lt;/code&gt; was more adept at handling the &lt;code&gt;htpasswd&lt;/code&gt;-specific authentication I required.&lt;/p&gt;

&lt;p&gt;And finally, I attached the Thin instances I was running to the configuration file. Now all Lighty did was exactly what it was supposed to: guide traffic to and fro.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;### Various Connections
$HTTP[&quot;host&quot;] == &quot;example.com&quot; {
proxy.server = (
        &quot;/trac&quot; =&amp;gt; (
                ( &quot;host&quot; =&amp;gt; &quot;127.0.0.1&quot;, &quot;port&quot; =&amp;gt; 9090 )
        ),
        &quot;/svn&quot; =&amp;gt; (
                ( &quot;host&quot; =&amp;gt; &quot;127.0.0.1&quot;, &quot;port&quot; =&amp;gt; 8080 )
        ),
        &quot;/&quot; =&amp;gt; (
                ( &quot;host&quot; =&amp;gt; &quot;127.0.0.1&quot;, &quot;port&quot; =&amp;gt; 3000 ),
                ( &quot;host&quot; =&amp;gt; &quot;127.0.0.1&quot;, &quot;port&quot; =&amp;gt; 3001 ),
                ( &quot;host&quot; =&amp;gt; &quot;127.0.0.1&quot;, &quot;port&quot; =&amp;gt; 3002 )
        )
    )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Beautiful. And not an iota more information than is necessary to do its job.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m running the Trac daemon with the following options:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/usr/bin/python /usr/bin/tracd -s -p 9090 -b 127.0.0.1 /var/trac/project/ --base-path=/trac -d
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;--base-path&lt;/code&gt; option ensures tracd doesn&amp;#8217;t get confused and try to redirect traffic to &lt;code&gt;http://example.com&lt;/code&gt;, instead of &lt;code&gt;http://example.com/trac&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So thanks Hongli, for an actually constructive suggestion. I did consider REE, before I took a step back and walked through everything. Phusion Passenger is a great product and I don&amp;#8217;t mean to knock on it, but I do worry that it&amp;#8217;s a sort of behemoth when compared to smaller Rack-lite applications that it can run. However, when it comes to understanding exactly why, I&amp;#8217;m way out of my league. I&amp;#8217;ll let the experts decide how to factor this in, or if my complaint has any merit at all.&lt;/p&gt;

&lt;p&gt;Believe it or not, Linus&amp;#8217; Law is not the universal solution to everybody&amp;#8217;s problem, nor is one &lt;a href=&quot;http://blog.ardekantur.com/2008/11/seriously-reconsidering-my-dedication-to-ruby/#comment-1723&quot;&gt;an idiot&lt;/a&gt; (around here it&amp;#8217;s okay to use bad words) if they don&amp;#8217;t immediately succeed in everything they do, the first time through. In my case, the solution was letting every piece of the puzzle fend for themselves, doing what they did best. And I didn&amp;#8217;t have to join a single mailing list, or ask for a single commit bit, or write a single specification. On top of that, I&amp;#8217;ve still helped the programming community, because now we all know a little bit more about how to handle this scenario.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d also like to take the opportunity to laugh at the idea that it was my Ruby application itself that was the bottleneck in this situation. While I admire &lt;a href=&quot;http://blog.ardekantur.com/2008/11/seriously-reconsidering-my-dedication-to-ruby/#comment-1718&quot;&gt;the kind of omniscience&lt;/a&gt; that doesn&amp;#8217;t even have to look at code to consider it &lt;code&gt;FAIL&lt;/code&gt;, that&amp;#8217;s not actually a diagnosis. That&amp;#8217;s zealotry disguised as nonchalance.&lt;/p&gt;</content>
		<author>
			<name>shopvac4christ</name>
			<uri>http://blog.ardekantur.com</uri>
		</author>
		<source>
			<title type="html">Ardekantur</title>
			<subtitle type="html">A blog about computer science, Ruby, .NET, and other fun things on the edge of software engineering.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Ardekantur"/>
			<id>http://feeds.feedburner.com/Ardekantur</id>
			<updated>2008-11-21T23:30:32+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Seriously Reconsidering My Dedication to Ruby</title>
		<link href="http://feeds.feedburner.com/~r/Ardekantur/~3/438965919/"/>
		<id>http://blog.ardekantur.com/2008/11/seriously-reconsidering-my-dedication-to-ruby/</id>
		<updated>2008-11-01T11:10:47+00:00</updated>
		<content type="html">&lt;p&gt;One Ruby web application. Sinatra and Rack, just under 300 lines. SQLite, almost no DB access.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# passenger-memory-stats 
-------------- Apache processes --------------
PID    PPID  Threads  VMSize    Private  Name
----------------------------------------------
2654   1     1        242.0 MB  0.0 MB   /usr/sbin/apache2 -k start
2102   2654  1        363.0 MB  4.3 MB   /usr/sbin/apache2 -k start
2135   2654  1        372.0 MB  5.0 MB   /usr/sbin/apache2 -k start
9454   2654  1        367.1 MB  4.9 MB   /usr/sbin/apache2 -k start
10339  2654  1        364.0 MB  3.8 MB   /usr/sbin/apache2 -k start
10396  2654  1        363.7 MB  15.7 MB  /usr/sbin/apache2 -k start
12279  2654  1        378.5 MB  6.5 MB   /usr/sbin/apache2 -k start
12280  2654  1        362.4 MB  6.3 MB   /usr/sbin/apache2 -k start
13714  2654  1        359.3 MB  5.4 MB   /usr/sbin/apache2 -k start
16431  2654  1        242.0 MB  0.2 MB   /usr/sbin/apache2 -k start
16433  2654  1        242.0 MB  0.4 MB   /usr/sbin/apache2 -k start
### Processes: 11
### Total private dirty RSS: 52.48 MB

--------- Passenger processes ----------
PID    Threads  VMSize    Private  Name
----------------------------------------
2097   13       143.7 MB  0.2 MB   /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2/ext/apache2/ApplicationPoolServerExecutable 0 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2/bin/passenger-spawn-server  /usr/bin/ruby1.8  /tmp/passenger_status.2654.fifo
2098   2        51.1 MB   1.5 MB   Passenger spawn server
16438  1        120.3 MB  20.5 MB  Rack: /webapps/AppOne
16440  1        120.3 MB  40.2 MB  Rack: /webapps/AppOne
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;What a fucking joke.&lt;/p&gt;</content>
		<author>
			<name>shopvac4christ</name>
			<uri>http://blog.ardekantur.com</uri>
		</author>
		<source>
			<title type="html">Ardekantur</title>
			<subtitle type="html">A blog about computer science, Ruby, .NET, and other fun things on the edge of software engineering.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Ardekantur"/>
			<id>http://feeds.feedburner.com/Ardekantur</id>
			<updated>2008-11-21T23:30:32+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Hooray, Actors!</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/438079472/"/>
		<id>http://jessenoller.com/?p=363</id>
		<updated>2008-10-31T14:17:49+00:00</updated>
		<content type="html">&lt;p&gt;A coworker just dropped an ancient artifact off for me to read:&lt;/p&gt;
&lt;div&gt;&lt;img src=&quot;http://jessenoller.com/wp-content/uploads/2008/10/img-0291.jpg&quot; alt=&quot;IMG_0291.JPG&quot; border=&quot;0&quot; width=&quot;300&quot; height=&quot;400&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Actors, concurrency and Kamaelia</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/435912658/"/>
		<id>http://jessenoller.com/?p=356</id>
		<updated>2008-10-29T14:57:53+00:00</updated>
		<content type="html">&lt;p&gt;Recently, I made an offhand comment &lt;a href=&quot;http://jessenoller.com/2008/10/27/guido-answers-your-questions/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; about:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I've actually started thinking about/sketching an actor model build on top of MP, using concepts from actors/monitors and things in the ecosystem today&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The ensuing comments and discussion were pretty good - but last night Michael Sparks (of Kamaelia) posted a darned nice comment:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Are you aware that a complete mini-axon using generators is tiny and the rest is optimisations and extra stuff that you find useful in real world systems? By tiny, I mean this small:&lt;br /&gt;   * &lt;a href=&quot;http://www.kamaelia.org/MiniAxonFull&quot;&gt;http://www.kamaelia.org/MiniAxonFull&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A mini-axon using processes would be equally lightweight (shorter probably) and pretty awesome.&lt;br /&gt;&lt;br /&gt;Also, it's easy to confuse the two halves of Kamaelia. If you think of Kamaelia as just an actor-type  implementation, then it's actually more an actor-like implementation, with STM &amp;amp; an internal SOA system of just over 2000 lines (which is how big Axon actually is, excluding comments &amp;amp; docs), with 80,000 lines of examples...&lt;br /&gt;&lt;br /&gt;However, personally I view it as a mechanism for building components which happen to be best used in a concurrent fashion. ie rather than viewing it as &quot;a mechanism for using concurrency&quot;, I view it as &quot;OK, assume we have concurrency, how can we use this to assist in building and maintaining systems&quot;. Axon also gives you the tools for taking these concurrent systems, and interfacing between concurrent systems and standard code. (&lt;a href=&quot;http://www.kamaelia.org/AxonHandle&quot;&gt;http://www.kamaelia.org/AxonHandle&lt;/a&gt;) &lt;br /&gt;&lt;br /&gt;As a result, I view Axon as a library which provides you with the tools wrapping up idioms useful for building collections of components which be a framework.&lt;br /&gt;&lt;br /&gt;Anyway, potato/potato, tomato/tomato - if you like, you like, if you don't, you don't.&lt;br /&gt;&lt;br /&gt;I'd love to replace our existing process based stuff btw with a multiprocessing based version though. If I was going to go down this route, I'd follow our mini axon tutorial to do so, largely becauseit's essentially the starting point I took with the multiprocess stuff recently and it worked out pretty well.&lt;br /&gt;&lt;br /&gt;Beyond this basic stuff though, I've noted that people generally start talking about co-ordination languages and building up pattern repositories. The interesting intersection between these two which you get if you call things components rather than actors is it becomes natural to create components called a chassis. These chassis often instantiate directly in concrete usable form concepts that you'd normally refer to as a pattern - Pipeline, Graphline, Carousel, Backplane, Seq, TPipe, etc.&lt;br /&gt;&lt;br /&gt;On a random note, you may want to check out MASCOT &quot;Modular Approach to Software Construction, Operation and Test&quot;. I heard about it late last year, and it appears to have the same sort of architecture as Kamaelia. Interestingly (to me) it makes the same key decision - when you send a message outside your component, you don't know who is going to receive it. This then enables (and requires) a higher level system for connecting components together. The upshot is highly reusable components. This doesn't entirely surprise me - my ethos came from recognising that asynchronous hardware systems &amp;amp; network systems look strikingly similar... (cf &lt;a href=&quot;http://www.slideshare.net/kamaelian/sociable-software&quot;&gt;http://www.slideshare.net/kamaelian/sociable-so...&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Anyway, reference for MASCOT: &lt;a href=&quot;http://async.org.uk/Hugo.Simpson/&quot;&gt;http://async.org.uk/Hugo.Simpson/&lt;/a&gt; - skip down to the end of the page for this PDF: &lt;a href=&quot;http://async.org.uk/Hugo.Simpson/MASCOT-3.1-Manual-June-1987.pdf&quot;&gt;http://async.org.uk/Hugo.Simpson/MASCOT-3.1-Man...&lt;/a&gt; I was really pleased to be pointed at MASCOT, largely because it showed a large number of other domains where the same basic model has been used for well over 30 years... Just with non-existent exposure, and slightly different metaphors. Though we, like it, also have mechanisms for automatically visualising systems, with a 1:1 correspondence. Beyond that this also gives us a model that matches Edward Lee's &quot;The Problem with threads&quot; - we'd released running code long before that paper was published :-)&lt;br /&gt;&lt;br /&gt;Anyway, I'm glad that you're looking at what we've done. If you use it, that'd be great, and I'll happily merge anything you'd like to have a life. (the only comment I'd make there is metaphors and accessibility count - this is surely the point of python? :-) If you don't take what we use etc but it helps you solidify your thoughts to &quot;No, I don't want that, I want this&quot;, then likewise, I'm equally glad. If you do that, I'd love to know what you do try, since I like to merge best practice concurrency ideas into Axon :-)&lt;br /&gt;&lt;br /&gt;I'd *REALLY* suggest looking at MASCOT though. Really made my Christmas last year when I was pointed at it.&lt;br /&gt;&lt;br /&gt;We're currently having lots of fun using concurrency, primarily by allowing it to make our lives easier, and forgettable about :) It'd be nice to see something similar on top of multiprocessing (which we'll do if you don't, but it'd be great if you did - but I'd understand if your view was that you prefer a pure actor (sender knows receiver) model.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;cite&gt;Originally posted as a &lt;a href=&quot;http://jessenoller.com/2008/10/27/guido-answers-your-questions/#comment-3352784&quot;&gt;comment&lt;/a&gt; by &lt;a href=&quot;http://disqus.com/people/aa2d0ea46169b401151a00b8b97de928/&quot;&gt;Michael Sparks&lt;/a&gt; on &lt;a href=&quot;http://www.jessenoller.com&quot;&gt;jessenoller.com comments&lt;/a&gt; using &lt;a href=&quot;http://disqus.com&quot;&gt;Disqus&lt;/a&gt;.&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;I wanted to pull that comment out and showcase what Michael has to say, and in some way, respond. First, yes - I am looking at Kamaelia (from here on out, I'm going to call it &quot;Kam&quot; - I keep transposing the ae). I actually ran through the mini-axon tutorial, and when I have time, I'm trying to tease apart the internals to better understand it.&lt;/p&gt;
&lt;p&gt;Fundamentally, I agree with you (Michael) about the aspects of making concurrency easier (and safer). Right now, I think Kam is a pretty darned good start - for a framework *grin*.&lt;/p&gt;
&lt;p&gt;When I made the comment I made, I didn't think it would get the response it got. There has been a dog-pile of discussions about concurrency best practices/etc and in fact, there's a discussion still going on on the python-list about concurrency stuff going on &lt;a href=&quot;http://mail.python.org/pipermail/python-list/2008-October/512902.html&quot; target=&quot;_blank&quot;&gt;right now&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Personally, I only work on the concurrency stuff part-part time - this includes my minor work on Python-Core. My day job is a test engineer - while I am building highly concurrent (and distributed) tests and I use multiprocessing and threading daily, it's not my full time pursuit. I am passionate about it, and I am passionate about improving python as a language, and library - and if I can do it as a day job and open source it, or get company time to do it, by golly I will.&lt;/p&gt;
&lt;p&gt;When I said &quot;I want to build an actor model&quot; - I was not necessarily talking about doing an implementation for python-core. I'm a big believer in learning-through-implementation - so when I said &quot;build x&quot;, not only did I mean &quot;build something for the world&quot; - I also meant &quot;build something for my own benefit&quot; so I can deep-dive into the concepts, problems etc.&lt;/p&gt;
&lt;p&gt;This is why I am adverse to jumping in and simply &quot;using&quot; a framework - not because I don't think it does something exceedingly well - trust me, I am an opportunistic developer - if I can find a library that does what I need *right now* - I'll use it.&lt;/p&gt;
&lt;p&gt;That being said - I am exploring Kamaelia, and yes hopefully I can steal some time to actually do an implementation of the process-based stuff with multiprocessing. I want to explore everything in the ecosystem today - my discussions with Adam Olsen around this stuff (and around &lt;a href=&quot;http://code.google.com/p/python-safethread/&quot; target=&quot;_blank&quot;&gt;python-safethread&lt;/a&gt;) and others has made me really want to explore solutions that help everyone, and take the best ideas and concepts and rolls it into something worthy of Python core.&lt;/p&gt;
&lt;p&gt;As I have said before - I believe there is room within Python as a language, and CPython as an implementation of that language - for a virtual buffet of helpful &lt;b&gt;libraries&lt;/b&gt; for concurrency and distributed systems. Right now, we have threading, async* and multiprocessing. There is plenty of room to grow. Maybe one day I can steal time to grab more of the concepts from java.util.concurrent and propose them via a PEP. Heck - maybe we can work as a group to propose an actor/monitor implementation for Python-Core.&lt;/p&gt;
&lt;p&gt;So - personally, and by way of responding to Michael in a more concrete way: I'm, &lt;b&gt;personally&lt;/b&gt; looking at anything I can to learn more about implementations and strategies. If something were to come out of it, and I felt strongly enough to propose inclusion in core, I would write and post a PEP - and not run in blindly.&lt;/p&gt;
&lt;p&gt;I've &lt;a href=&quot;http://code.google.com/p/testbutler/&quot; target=&quot;_blank&quot;&gt;got&lt;/a&gt; &lt;a href=&quot;http://code.google.com/p/python-multiprocessing/&quot; target=&quot;_blank&quot;&gt;more&lt;/a&gt; than &lt;a href=&quot;http://code.google.com/p/nose-testconfig/&quot; target=&quot;_blank&quot;&gt;enough&lt;/a&gt; stuff to &lt;a href=&quot;http://code.google.com/p/pyjavaproperties/&quot; target=&quot;_blank&quot;&gt;work on&lt;/a&gt; in addition to the day job and being a Dad, and yard work. Oh and the day job, which doesn't involve nearly as much distributed-and-concurrent systems in Python as I'd like :).&lt;/p&gt;
&lt;p&gt;Heck - thinking about it we'd need a good messaging implementation too. I'll put that on the pile too.&lt;/p&gt;
&lt;p&gt;Quick Rant (slightly off topic):&lt;/p&gt;
&lt;p&gt;Also, can we stop talking about the damned GIL? Yes, you need locks, No, you probably don't care about the GIL. Stop yammering about how &quot;broken&quot; CPython is because of it- CPython is an implementation, not the final one and not the only one. If the GIL really gets you excited, either drop to a C module, use multiprocessing or something else. The GIL is here to stay for some time - either propose a PEP (and a Patch) that doesn't break CPython or hush. Enough bike-shedding - discussion is great, especially when something comes out of it, but constantly berating/lamenting things is just a bike shed. The shed is purple, now move on. Purple!&lt;/p&gt;
&lt;p&gt;Required Reading ( in addition to Michael's links):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.kamaelia.org/Home&quot; target=&quot;_blank&quot;&gt;Kamaelia&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/python-safethread/&quot; target=&quot;_blank&quot;&gt;python-safethread&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://twistedmatrix.com/trac/&quot; target=&quot;_blank&quot;&gt;Twisted&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://dramatis.mischance.net/&quot; target=&quot;_blank&quot;&gt;Dramatis&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://osl.cs.uiuc.edu/parley/&quot; target=&quot;_blank&quot;&gt;Parley&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://www.valuedlessons.com/2008/06/message-passing-conccurrency-actor.html&quot; target=&quot;_blank&quot;&gt;Message Passing Conccurrency (Actor Model) in Python&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ajaxonomy.com/2008/news/toward-better-concurrency&quot; target=&quot;_blank&quot;&gt;Toward Better Concurrency&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ddj.com/hpc-high-performance-computing/200001985&quot; target=&quot;_blank&quot;&gt;The Pillars of Concurrency&lt;/a&gt;
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Fixing Slideshow (S9) and Syntax Highlighting within Markdown</title>
		<link href="http://feeds.feedburner.com/~r/Ardekantur/~3/434344327/"/>
		<id>http://blog.ardekantur.com/?p=163</id>
		<updated>2008-10-28T05:07:36+00:00</updated>
		<content type="html">&lt;p&gt;In another attempt to fill a blog entry title with as many buzzwords as I can, this diff can be applied to the code in your &lt;a href=&quot;http://slideshow.rubyforge.org/&quot;&gt;Slide Show&lt;/a&gt; library in order to take the suggestion of a previous developer and use CGI to unescape the HTML that comes back from syntax highlighting code, as opposed to manually trying to hit every element that might have been escaped.&lt;/p&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;diff diff&quot;&gt;Index: slideshow.rb
===================================================================
&lt;span&gt;--- slideshow.rb	&lt;span&gt;&amp;#40;&lt;/span&gt;revision &lt;span&gt;42&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;+++ slideshow.rb	&lt;span&gt;&amp;#40;&lt;/span&gt;working copy&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;@@ -&lt;span&gt;6&lt;/span&gt;,&lt;span&gt;6&lt;/span&gt; +&lt;span&gt;6&lt;/span&gt;,&lt;span&gt;7&lt;/span&gt; @@&lt;/span&gt;
 require 'fileutils'
 require 'ftools'
 require 'hpricot'
&lt;span&gt;+require 'cgi'&lt;/span&gt;
 require 'uv'
&amp;nbsp;
&amp;nbsp;
&lt;span&gt;@@ -&lt;span&gt;388&lt;/span&gt;,&lt;span&gt;10&lt;/span&gt; +&lt;span&gt;389&lt;/span&gt;,&lt;span&gt;7&lt;/span&gt; @@&lt;/span&gt;
           if Uv.syntaxes.include?&lt;span&gt;&amp;#40;&lt;/span&gt;lang&lt;span&gt;&amp;#41;&lt;/span&gt;
             code = e.inner_html.sub&lt;span&gt;&amp;#40;&lt;/span&gt;/^\s*#!\w+/, ''&lt;span&gt;&amp;#41;&lt;/span&gt;.strip
&amp;nbsp;
&lt;span&gt;-            code.gsub!&lt;span&gt;&amp;#40;&lt;/span&gt; &amp;quot;&amp;amp;lt;&amp;quot;, &amp;quot;&amp;lt;&amp;quot; &lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;-            code.gsub!&lt;span&gt;&amp;#40;&lt;/span&gt; &amp;quot;&amp;amp;gt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot; &lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;-            code.gsub!&lt;span&gt;&amp;#40;&lt;/span&gt; &amp;quot;&amp;amp;amp;&amp;quot;, &amp;quot;&amp;amp;&amp;quot; &lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;-            # todo: missing any other entities? use CGI::unescapeHTML?&lt;/span&gt;
&lt;span&gt;+            code = CGI::unescapeHTML&lt;span&gt;&amp;#40;&lt;/span&gt;code&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;
             logger.debug &amp;quot;code=&amp;gt;#&lt;span&gt;&amp;#123;&lt;/span&gt;code&lt;span&gt;&amp;#125;&lt;/span&gt;&amp;lt;&amp;quot;
&amp;nbsp;
             code_highlighted = Uv.parse&lt;span&gt;&amp;#40;&lt;/span&gt; code, &amp;quot;xhtml&amp;quot;, lang, opts.code_line_numbers?, opts.code_theme &lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content>
		<author>
			<name>shopvac4christ</name>
			<uri>http://blog.ardekantur.com</uri>
		</author>
		<source>
			<title type="html">Ardekantur</title>
			<subtitle type="html">A blog about computer science, Ruby, .NET, and other fun things on the edge of software engineering.</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Ardekantur"/>
			<id>http://feeds.feedburner.com/Ardekantur</id>
			<updated>2008-11-21T23:30:32+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Guido answers your questions…</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/433864005/"/>
		<id>http://jessenoller.com/?p=354</id>
		<updated>2008-10-27T18:36:27+00:00</updated>
		<content type="html">&lt;p&gt;Via &lt;a href=&quot;http://neopythonic.blogspot.com/2008/10/questions-answered.html&quot; target=&quot;_blank&quot;&gt;GVR's blog&lt;/a&gt; he's put answers up on the ask-a-google-engineer page for the top 20 questions.&lt;/p&gt;
&lt;p&gt;I'm seriously laughing here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Q: &quot;Why google choose python as the main programming?&quot;
&lt;li&gt; A: Incorrect this is.
&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Oh, and yay multiprocessing (see: &lt;a href=&quot;http://moderator.appspot.com/#e%253Dagltb2RlcmF0b3JyDQsSBlNlcmllcxjJAQw%252Bt%253Dagltb2RlcmF0b3JyDAsSBVRvcGljGP8BDA%252Bf%253Dagltb2RlcmF0b3JyDwsSCFF1ZXN0aW9uGMBeDA%252Bv%253D4%252Bs%253D1&quot; target=&quot;_blank&quot;&gt;this question&lt;/a&gt;) but man is there a lot of work to do. I've actually started thinking about/sketching an actor model build on top of MP, using concepts from actors/monitors and things in the ecosystem today&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">October Issue of Python Magazine is live.</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/433589042/"/>
		<id>http://jessenoller.com/?p=348</id>
		<updated>2008-10-27T13:50:54+00:00</updated>
		<content type="html">&lt;p&gt;&lt;img src=&quot;http://jessenoller.com/wp-content/uploads/2008/10/83.jpg&quot; alt=&quot;83.jpg&quot; border=&quot;0&quot; width=&quot;200&quot; height=&quot;259&quot; align=&quot;left&quot; /&gt;Another information rich issue of &lt;a href=&quot;http://pymag.phparch.com/c/issue/view/83&quot; target=&quot;_blank&quot;&gt;Python Magazine&lt;/a&gt; is live! This time, it's the October (stunning, I know) issue. The cover story is on &quot;Versioning your database with sqlalchemy-migrate&quot; - and of course, there's a short article from me on &quot;SSH Programming with Paramiko&quot;. You can see the run down for the article &lt;a href=&quot;http://pymag.phparch.com/c/issue/view/83&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A lot of good people put a lot of work into the magazine - Doug Hellmann doesn't let any of us slack off, and keeps us on target. If you don't already have a subscription - you should get one.&lt;/p&gt;
&lt;p&gt;Additionally, if you like writing - or even if you're new to writing, if you have and idea for an article please &lt;a href=&quot;http://pymag.phparch.com/c/pymag/p/write_for_us&quot; target=&quot;_blank&quot;&gt;submit&lt;/a&gt; it!&lt;/p&gt;
&lt;p&gt;Also remember, the people behind Python Magazine are having a conference in november - &lt;a href=&quot;http://pyworks.mtacon.com/&quot; target=&quot;_blank&quot;&gt;PyWorks&lt;/a&gt; is happening in Atlanta, GA on November 12-14th. I'll be doing a talk there on &lt;a href=&quot;http://pyworks.mtacon.com/c/schedule/talk/d1s3/4&quot; target=&quot;_blank&quot;&gt;threading/multiprocessing&lt;/a&gt;.&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Updated pyjavaproperties</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/430753967/"/>
		<id>http://jessenoller.com/?p=345</id>
		<updated>2008-10-24T14:07:42+00:00</updated>
		<content type="html">&lt;p&gt;I just pushed a minor update for &lt;a href=&quot;http://pypi.python.org/pypi/pyjavaproperties/&quot; target=&quot;_blank&quot;&gt;PyJavaProperties&lt;/a&gt; out - this just adds a simple list as an index of the keys as they're parsed, and appends new keys on the internal index. Next, I want to keep original comments and whitespace.&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Nose-testconfig version .5 uploaded.</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/429614754/"/>
		<id>http://jessenoller.com/?p=343</id>
		<updated>2008-10-23T13:10:30+00:00</updated>
		<content type="html">&lt;p&gt;Fixes a minor issue with python config file parsing.&lt;/p&gt;
&lt;p&gt;Next up, hierarchical YAML files!&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Backport of 2.6 Multiprocessing to 2.4/2.5</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/429607973/"/>
		<id>http://jessenoller.com/?p=341</id>
		<updated>2008-10-23T13:01:11+00:00</updated>
		<content type="html">&lt;p&gt;Thanks to the work of Christian Heimes and Skip Montanaro with a supporting role by me, the 2.6 version of Multiprocessing (pyprocessing) has been forked/adjusted for compatibility with Python 2.4/2.5.&lt;/p&gt;
&lt;p&gt;You can see the pypi package &lt;a href=&quot;http://pypi.python.org/pypi/multiprocessing/0.0.1-2.6.0&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;, and the google code project &lt;a href=&quot;http://code.google.com/p/python-multiprocessing/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We chose to do the back port for a variety of reasons - having the new API for the package makes it easier to jump into 2.6 if you're like me: a heavy pyprocessing user, not to mention that during the migration into python-core, a lot of bugs were fixed.&lt;/p&gt;
&lt;p&gt;Check it out, and feel free to file bugs. We're planning on back porting bug fixes from python-core to the project, and applicable bug fixes from the google code project into python-core.&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Blogging Disaster!</title>
		<link href="http://digitalspaghetti.me.uk/blogging-disaster"/>
		<id>tag:digitalspaghetti.me.uk,2008:blogging-disaster/1224630599</id>
		<updated>2008-10-21T23:10:12+00:00</updated>
		<content type="html">&lt;p&gt;Disaster has stuck my blog!  Today, while clearing out my spam (which I seem to get a lot of these days) it seems a possible bug in the comment interface of Habari all but one of my comments has been deleted.  I've checked and I don't have a recent enough backup, and I stupidly didn't  have the undelete plugin activated!&lt;/p&gt;&lt;p&gt;So if you have left a comment on the site and it's gone, sorry!&lt;/p&gt;&lt;p&gt;Now off to backup...!&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=OU3FM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=OU3FM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=jfUBm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=jfUBm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=14P8M&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=14P8M&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=rHdxm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=rHdxm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=582Dm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=582Dm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>digitalspaghetti</name>
			<uri>http://digitalspaghetti.me.uk/</uri>
		</author>
		<source>
			<title type="html">Digital Spaghetti's Feed</title>
			<subtitle type="html">A daily feed of good stuff</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/digitalspaghetti"/>
			<id>tag:digitalspaghetti.me.uk,2008-11-22:atom/0d5a09917de1e960922811d8c440fb799afedcf4</id>
			<updated>2008-11-22T09:28:58+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">YotD Update</title>
		<link href="http://www.stromcode.com/2008/04/18/yotd-update/"/>
		<id>http://www.stromcode.com/2008/04/18/yotd-update/</id>
		<updated>2008-10-19T02:30:17+00:00</updated>
		<content type="html">I've slowed down my posting quite a bit, and the reason is the game I'm working on is coming along a lot faster than I thought.

I had planned on posting a bunch of update videos, basically just capturing some of my unit tests and so on, partly because I thought ...&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=itq0u9G&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=itq0u9G&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=6DDR2cg&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=6DDR2cg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=t8F6NPg&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=t8F6NPg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=AkeI63G&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=AkeI63G&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=aqYWzlg&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=aqYWzlg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=FB2xdMG&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=FB2xdMG&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>stromdotcom</name>
			<uri>http://www.stromcode.com</uri>
		</author>
		<source>
			<title type="html">Stromcode</title>
			<subtitle type="html">XNA, C++, PHP, Artificial Intelligence, ALife and Game Development</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Stromcode?format=xml"/>
			<id>http://feeds.feedburner.com/Stromcode?format=xml</id>
			<updated>2008-11-21T08:30:10+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Camera Component Update</title>
		<link href="http://www.stromcode.com/2008/04/13/camera-component-update/"/>
		<id>http://www.stromcode.com/2008/04/13/camera-component-update/</id>
		<updated>2008-10-19T02:30:17+00:00</updated>
		<content type="html">I've updated my XNA camera component quite a bit.

Initially, moves were handled by passing in a new position vector, a new lookat vector, and the time required for the camera to get there.  This was pretty horrible because it required a lot of calculations for very little payoff.  The biggest ...&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=CIZrmLG&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=CIZrmLG&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=WwH11Zg&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=WwH11Zg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=eimReig&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=eimReig&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=RY6CLZG&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=RY6CLZG&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=J17KbPg&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=J17KbPg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=oTc83kG&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=oTc83kG&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>stromdotcom</name>
			<uri>http://www.stromcode.com</uri>
		</author>
		<source>
			<title type="html">Stromcode</title>
			<subtitle type="html">XNA, C++, PHP, Artificial Intelligence, ALife and Game Development</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Stromcode?format=xml"/>
			<id>http://feeds.feedburner.com/Stromcode?format=xml</id>
			<updated>2008-11-21T08:30:10+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Fixing .NET Installers</title>
		<link href="http://www.stromcode.com/2008/08/28/fixing-net-installers/"/>
		<id>http://www.stromcode.com/2008/08/28/fixing-net-installers/</id>
		<updated>2008-10-19T02:30:17+00:00</updated>
		<content type="html">Another ridiculous failure on the part of Microsoft to understand how small developers need their tools to work.

You've finished your .NET project and are ready to distribute. Visual Studio has spit out two files for you: a setup.exe which makes sure the user has the requirements (the targetted version of ...&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=dKhcsK&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=dKhcsK&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=BpR0ik&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=BpR0ik&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=psgkPk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=psgkPk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=X5hGoK&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=X5hGoK&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=yKClLk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=yKClLk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/Stromcode?a=TouQJK&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/Stromcode?i=TouQJK&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>stromdotcom</name>
			<uri>http://www.stromcode.com</uri>
		</author>
		<source>
			<title type="html">Stromcode</title>
			<subtitle type="html">XNA, C++, PHP, Artificial Intelligence, ALife and Game Development</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/Stromcode?format=xml"/>
			<id>http://feeds.feedburner.com/Stromcode?format=xml</id>
			<updated>2008-11-21T08:30:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">More McCain supporters prove why they are stupid.</title>
		<link href="http://digitalspaghetti.me.uk/more-mccain-supports-prove-why-they-are-stupid"/>
		<id>tag:digitalspaghetti.me.uk,2008:more-mccain-supports-prove-why-they-are-stupid/1224151372</id>
		<updated>2008-10-16T10:03:20+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://uk.youtube.com/watch?v=zRqcfqiXCX0&quot;&gt;:(&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=DuQZM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=DuQZM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=tT1Mm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=tT1Mm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=PFwWM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=PFwWM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=yLG1m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=yLG1m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=zF6lm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=zF6lm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>digitalspaghetti</name>
			<uri>http://digitalspaghetti.me.uk/</uri>
		</author>
		<source>
			<title type="html">Digital Spaghetti's Feed</title>
			<subtitle type="html">A daily feed of good stuff</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/digitalspaghetti"/>
			<id>tag:digitalspaghetti.me.uk,2008-11-22:atom/0d5a09917de1e960922811d8c440fb799afedcf4</id>
			<updated>2008-11-22T09:28:58+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">jMaps New Beta Release</title>
		<link href="http://digitalspaghetti.me.uk/jmaps-new-beta-release"/>
		<id>tag:digitalspaghetti.me.uk,2008:jmaps-new-beta-release/1224019869</id>
		<updated>2008-10-14T21:31:12+00:00</updated>
		<content type="html">&lt;p&gt;Hey folks, just a quick update - I've posted &lt;a href=&quot;http://groups.google.com/group/jmaps/browse_thread/thread/27e4835234f6fd0a&quot;&gt;some news&lt;/a&gt; on the&lt;a href=&quot;http://groups.google.com/group/jmaps/&quot;&gt; jMaps Google Group&lt;/a&gt; about a new release.&lt;br /&gt;&lt;br /&gt;There are quite a few underlying changes to the code, including a new build script to allow me to separate the code out for easier reading and will allow for other mapping libraries.&amp;nbsp; The API is also a lot cleaner, and I've provided a couple of details on how to use it.&lt;br /&gt;&lt;br /&gt;Fuller docs are coming soon, I just need to get &lt;a href=&quot;http://scriptdoc.org&quot;&gt;scriptdoc&lt;/a&gt; in &lt;a href=&quot;http://aptana.com&quot;&gt;Aptana&lt;/a&gt; to generate better ones with examples, but most of the code is commented.&lt;br /&gt;&lt;br /&gt;Please feel free to feedback on anything in the code, either on the group or in the issue tracker.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=x5JwM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=x5JwM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=76Eum&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=76Eum&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=iMrAM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=iMrAM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=ibgPm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=ibgPm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=qDJRm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=qDJRm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>digitalspaghetti</name>
			<uri>http://digitalspaghetti.me.uk/</uri>
		</author>
		<source>
			<title type="html">Digital Spaghetti's Feed</title>
			<subtitle type="html">A daily feed of good stuff</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/digitalspaghetti"/>
			<id>tag:digitalspaghetti.me.uk,2008-11-22:atom/0d5a09917de1e960922811d8c440fb799afedcf4</id>
			<updated>2008-11-22T09:28:58+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">McCain Supporters must die</title>
		<link href="http://digitalspaghetti.me.uk/mccain-supporters-must-die"/>
		<id>tag:digitalspaghetti.me.uk,2008:mccain-supporters-must-die/1223642416</id>
		<updated>2008-10-13T22:27:29+00:00</updated>
		<content type="html">&lt;p&gt;Ok, My title is a little sensationalist, but seriously as a UK citizen, I am following with great interest the upcoming US elections.&lt;br /&gt;&lt;br /&gt;I don't like McCain and his whole campaign. Being a Liberal European Socialist who is pro-choice, and atheist and against the war you would think that would be enough.  But then I saw something that made me a little sadder.&lt;br /&gt;&lt;br /&gt;I present &lt;a href=&quot;http://uk.youtube.com/watch?v=KjxzmaXAg9E&quot;&gt;this&lt;/a&gt; and &lt;a href=&quot;http://uk.youtube.com/watch?v=itEucdhf4Us&quot;&gt;this&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If McCain gets in because of these people - some who cannot even articulate or follow a train of thought for more than 30 seconds - then ALL of America is dead to me.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.barackobama.com&quot;&gt;Obama&lt;/a&gt; supporters, PLEASE!! You need to make sure this man, and the people that follow him don't win!  Get out there, show people who don't vote or who are on the fence that McCain = Stupidity.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href=&quot;http://www.barackobama.com&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/user/files/images/obama_normalcolor.jpg&quot; alt=&quot;Support Obama!&quot; align=&quot;center&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=ptLpM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=ptLpM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=o3qgm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=o3qgm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=guJsM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=guJsM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=YbjYm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=YbjYm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=cR1xm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=cR1xm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>digitalspaghetti</name>
			<uri>http://digitalspaghetti.me.uk/</uri>
		</author>
		<source>
			<title type="html">Digital Spaghetti's Feed</title>
			<subtitle type="html">A daily feed of good stuff</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/digitalspaghetti"/>
			<id>tag:digitalspaghetti.me.uk,2008-11-22:atom/0d5a09917de1e960922811d8c440fb799afedcf4</id>
			<updated>2008-11-22T09:28:58+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">jMaps &amp;amp; JavaScript: The Missing Manual</title>
		<link href="http://digitalspaghetti.me.uk/jmaps-javascript-the-missing-manual"/>
		<id>tag:digitalspaghetti.me.uk,2008:jmaps-javascript-the-missing-manual/1223925826</id>
		<updated>2008-10-13T21:39:17+00:00</updated>
		<content type="html">&lt;p&gt;Tonight I received an email from one of the Translators working for &lt;a href=&quot;http://oreilly.com&quot;&gt;O'Reilly&lt;/a&gt; on the German translation of &lt;a href=&quot;http://oreilly.com/catalog/9780596515898/&quot;&gt;JavaScript: The Missing Manual&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Turns out that the book uses &lt;a href=&quot;http://jquery.com&quot;&gt;jQuery&lt;/a&gt; a lot and one chapter features my own library, the &lt;a href=&quot;http://jmaps.digitalspaghetti.me.uk/&quot;&gt;jMaps&lt;/a&gt; library!  It was a bit of a surprise for me to learn this now, especially since the book as been out since June.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://jmaps.digitalspaghetti.me.uk/&quot;&gt;jMaps&lt;/a&gt; is one of these projects that I had the best of intentions for, but because I haven't done much mapping stuff myself it's been put to one side, but this is certainly a good confidence boost and I hope to soon make some more improvements to the library.&lt;br /&gt;&lt;br /&gt;I've had a few ideas already, and I'd love to hear yours too!&amp;nbsp; So please feel free to comment on any ideas or suggestions.&lt;br /&gt;&lt;br /&gt;If you would like to try out jMaps, you can download it from &lt;a href=&quot;http://source.ifies.org/digitalspaghetti/jmaps/overview/&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Quick Update&lt;br /&gt;&lt;br /&gt;I've been playing with some ideas, and here is a &lt;a href=&quot;http://digitalspaghetti.me.uk/user/files/images/mapifies.png&quot;&gt;sneak preview&lt;/a&gt; of one :)&amp;nbsp; Multiple Maps!&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=SIHZM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=SIHZM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=lNLDm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=lNLDm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=B2x1M&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=B2x1M&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=Mnumm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=Mnumm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=aCnem&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=aCnem&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>digitalspaghetti</name>
			<uri>http://digitalspaghetti.me.uk/</uri>
		</author>
		<source>
			<title type="html">Digital Spaghetti's Feed</title>
			<subtitle type="html">A daily feed of good stuff</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/digitalspaghetti"/>
			<id>tag:digitalspaghetti.me.uk,2008-11-22:atom/0d5a09917de1e960922811d8c440fb799afedcf4</id>
			<updated>2008-11-22T09:28:58+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">A nose plugin to run JUnit tests via Jython.</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/418603832/"/>
		<id>http://jessenoller.com/?p=339</id>
		<updated>2008-10-12T14:07:33+00:00</updated>
		<content type="html">&lt;p&gt;Floating an idea to all of you in pythonland - I've been sketching out a nose plugin that would be able to find and execute JUnit tests in your for your java code base.&lt;/p&gt;
&lt;p&gt;The reporting of the result would be unified - using nose-xunit for non-junit tests, you should get back one happy-shiny report for all of your tests.&lt;/p&gt;
&lt;p&gt;Anyone have any thoughts out there?&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">New project: pyjavaproperties</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/417747006/"/>
		<id>http://jessenoller.com/?p=337</id>
		<updated>2008-10-11T13:03:52+00:00</updated>
		<content type="html">&lt;p&gt;I just uploaded a new pypi package for &quot;pyjavaproperties&quot; - this is a fork of &lt;a href=&quot;http://code.activestate.com/recipes/496795/&quot; target=&quot;_blank&quot;&gt;this recipe&lt;/a&gt; with the authors permission.&lt;/p&gt;
&lt;p&gt;I'm working on a small number of improvements, but my real reason to do this was that - 1: I have to work with properties files. 2: I need it up there so it can be easy_installed and 3: It makes sense as a project!&lt;/p&gt;
&lt;p&gt;In any case, here's the pypi page:&lt;a href=&quot;http://pypi.python.org/pypi/pyjavaproperties/0.1&quot; target=&quot;_blank&quot;&gt; http://pypi.python.org/pypi/pyjavaproperties/0.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And the google code page: &lt;a href=&quot;http://code.google.com/p/pyjavaproperties/&quot; target=&quot;_blank&quot;&gt;http://code.google.com/p/pyjavaproperties/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Suggestions welcome. I am going to monkey in support for this in &lt;a href=&quot;http://pypi.python.org/pypi/nose-testconfig/&quot; target=&quot;_blank&quot;&gt;nose-testconfig&lt;/a&gt; as soon as I have some spare cycles.&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Hooray, retirement!</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/416897282/"/>
		<id>http://jessenoller.com/?p=329</id>
		<updated>2008-10-10T15:40:52+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/85301054@N00/2756840186&quot; title=&quot;View 'IMG_1702' on Flickr.com&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3280/2756840186_f5113b338f_t.jpg&quot; alt=&quot;IMG_1702&quot; border=&quot;0&quot; width=&quot;100&quot; height=&quot;75&quot; align=&quot;left&quot; /&gt;&lt;/a&gt;I don't talk politics or current events here - mainly because I'd come off a a Lolbertarian whack-job, but I just had a serious &quot;&lt;b&gt;what in the crap?!&lt;/b&gt; moment when I checked my 401k:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Personal Rate of Return from 01/01/2008 to 10/09/2008 is &lt;b&gt;-41.9%&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This is one of the moments I look at my daughter and think about the future and get really sullen, so instead, I'm going to go back to solving technical problems as I can't even rationally discuss this in my own head.&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">TestButler update (updated)</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/416802211/"/>
		<id>http://jessenoller.com/?p=325</id>
		<updated>2008-10-10T13:42:26+00:00</updated>
		<content type="html">&lt;p&gt;With the much-appreciated help of Brandon Barry (with whom I just happen to work) - there's been a needed update to the testbutler code base I couldn't get to - some highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Cleaned up the CSS, moved to &lt;a href=&quot;http://blueprint.gildedtalon.com/&quot; target=&quot;_blank&quot;&gt;blueprint&lt;/a&gt; for the larger portion of the CSS and the start of jQuery usage for the javascript portions
&lt;li&gt; Templates have been cleaned up/gotten a major facelift
&lt;li&gt; site-media has been cleaned up
&lt;li&gt; Deleted unused code I had in the prototype
&lt;li&gt; Models cleaned up
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Overall, it's looking much better. Yes, it's in a production-use now, and I love markdown syntax. You can see some screen shots &lt;a href=&quot;http://code.google.com/p/testbutler/wiki/Screenshots&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We ditched the roomba-picture, I need to find someone handy with artwork to maybe make some custom icons/pics for us (I really want a cartoony-robot-butler)&lt;/p&gt;
&lt;p&gt;There's a lot I'd like to do, obviously - but first I have to get started on the results trackers and the corresponding nose plugin to feed the results to the system. I figure I am going to use the nose-xunit plugin and some custom XSLT for now.&lt;/p&gt;
&lt;p&gt;One thing I need to figure out is if the django-markdown plugin allows for relative %url% links within a block of text so we can cross-link testcases, I may write a custom template tag.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Edit&lt;/b&gt;: Additionally, I just committed a change to remove all notion of &quot;component&quot; from the system. We decided that a test case could have any number of components, or none at all, and that it was more logically consistent to track those as tags-in-the-cloud. For example, a given test case might be tagged &quot;gui, regression, smoketest, performance&quot; or &quot;smoke, storage, gui&quot; etc. Being more flexible with sorting and organization was our goal.&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">&amp;amp;lt;head&amp;gt; Conference</title>
		<link href="http://digitalspaghetti.me.uk/head-conference"/>
		<id>tag:digitalspaghetti.me.uk,2008:-lt-head-conference/1223634863</id>
		<updated>2008-10-10T10:34:51+00:00</updated>
		<content type="html">&lt;p&gt;I'll be &quot;attending&quot; the &amp;lt;head&gt; conference - which have a 20% discount on ticket prices for TODAY ONLY!  Go check it out and support the conference!&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.headconference.com/&quot;&gt;&lt;img src=&quot;http://www.headconference.com/images/buttons/button_125x125.gif&quot; width=&quot;125&quot; height=&quot;125&quot; alt=&quot;&amp;lt;head&amp;gt; web conference: October 24-26, 2008&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=EOl7M&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=EOl7M&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=CTM0m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=CTM0m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=7VvHM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=7VvHM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=ADuWm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=ADuWm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=pFD8m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=pFD8m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>digitalspaghetti</name>
			<uri>http://digitalspaghetti.me.uk/</uri>
		</author>
		<source>
			<title type="html">Digital Spaghetti's Feed</title>
			<subtitle type="html">A daily feed of good stuff</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/digitalspaghetti"/>
			<id>tag:digitalspaghetti.me.uk,2008-11-22:atom/0d5a09917de1e960922811d8c440fb799afedcf4</id>
			<updated>2008-11-22T09:28:58+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Elgg and Open Data Definition</title>
		<link href="http://digitalspaghetti.me.uk/elgg-and-open-data-definition"/>
		<id>tag:digitalspaghetti.me.uk,2008:elgg-and-open-data-definition/1223592024</id>
		<updated>2008-10-09T22:40:38+00:00</updated>
		<content type="html">&lt;p&gt;Earlier today, I was thumbing through &lt;a href=&quot;http://upcoming.org&quot;&gt;upcoming.org&lt;/a&gt; when I saw a &lt;a href=&quot;http://upcoming.yahoo.com/event/1165225/&quot;&gt;local event&lt;/a&gt; for something called &lt;a href=&quot;http://elgg.org&quot;&gt;Elgg&lt;/a&gt;.&amp;nbsp; Having checked it out, it seems like a very interesting project - to me it's like &lt;a href=&quot;http://drupal.org&quot;&gt;Drupal&lt;/a&gt;, for social networks.&lt;br /&gt;&lt;br /&gt;At work, we have a lot of clients who are looking to social media as their &quot;next big thing&quot; and certainly Elgg looks like it's more than up to the task of creating micro-social networks that allow clients to engage with their customers.&amp;nbsp; I'd be interested in looking at creating some kind of &lt;a href=&quot;http://adobe.com&quot;&gt;Adobe AIR&lt;/a&gt; app that could interface with it for one.&lt;br /&gt;&lt;br /&gt;As I browsed the site however, I came across a link to something called the &lt;a href=&quot;http://www.opendd.net&quot;&gt;Open Data Definiton&lt;/a&gt;.&amp;nbsp; Being interested with anything with &quot;Open&quot; in front of it (&lt;a href=&quot;http://openid.net&quot;&gt;OpenID&lt;/a&gt;, &lt;a href=&quot;http://oauth.net&quot;&gt;OAuth&lt;/a&gt;) I decided to check it out.&lt;br /&gt;&lt;br /&gt;Having read the specs, I have to say I was impressed.&amp;nbsp; The idea is a few steps ahead of a similar idea I had for developer profiles that could be attached to distributed projects on source control like &lt;a href=&quot;http://www.selenic.com/mercurial&quot;&gt;Mercurial&lt;/a&gt; or &lt;a href=&quot;http://git.or.cz/&quot;&gt;Git&lt;/a&gt;.&amp;nbsp; My idea was to have the users profile contain data about open source projects they worked on, their programming skills with self-scoring and peer scoring through a voting mechinisim (&quot;At PHP I score myself a 8, other people score me 6&quot;) and other relivent data.&lt;br /&gt;&lt;br /&gt;I've posted my suggestion to the google group, and I hope to be able to discuss it at the upcoming meeting.&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=4l4RM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=4l4RM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=keW3m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=keW3m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=dPzjM&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=dPzjM&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=HhKLm&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=HhKLm&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?a=llH1m&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/digitalspaghetti?i=llH1m&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>digitalspaghetti</name>
			<uri>http://digitalspaghetti.me.uk/</uri>
		</author>
		<source>
			<title type="html">Digital Spaghetti's Feed</title>
			<subtitle type="html">A daily feed of good stuff</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/digitalspaghetti"/>
			<id>tag:digitalspaghetti.me.uk,2008-11-22:atom/0d5a09917de1e960922811d8c440fb799afedcf4</id>
			<updated>2008-11-22T09:28:58+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">New version of nose-testconfig uploaded.</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/415148467/"/>
		<id>http://jessenoller.com/?p=319</id>
		<updated>2008-10-08T21:12:20+00:00</updated>
		<content type="html">&lt;p&gt;I fixed a few knits Kumar pointed out, removed some overly aggressive eval'ing of ini file values, and fixed the damned rst docs.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://pypi.python.org/pypi/nose-testconfig/0.4&quot; target=&quot;_blank&quot;&gt;http://pypi.python.org/pypi/nose-testconfig/0.4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think 4 people in the world are using this - all 4 of them work with me, hooray!&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Threads can’t be serialized?!</title>
		<link href="http://feeds.feedburner.com/~r/Jessenollercom/~3/415040873/"/>
		<id>http://jessenoller.com/?p=317</id>
		<updated>2008-10-08T18:32:19+00:00</updated>
		<content type="html">&lt;p&gt;Note the subject is tongue-in-cheek - I realize you can't pickle threading.Thread and multiprocessing.Process, but for some (possibly sick) reason I want to do an implementation for both that implements __getstate__ and __setstate__ and changed the __repr__ for both to not refer to any sort of run-time state.&lt;/p&gt;
&lt;p&gt;You don't need to serialize the &lt;b&gt;function&lt;/b&gt; thats passed in: the assumption here is that you're serializing them prior to calling start() (because serializing a running thread would be awesome - in that &quot;hey my brain just melted&quot; sort of way). &lt;/p&gt;
&lt;p&gt;The best (read, only sane) use case would be to allow threads/processes to be defined in say, a YAML file and generated at parse-time (the client could call .start()) or sending a blob of serialized threads to a remote client and having it call start() to act as a slave.&lt;/p&gt;
&lt;p&gt;And that concludes the random thought for the day.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Edit&lt;/b&gt;: And in the comments, Ben Hayden posted a link to a version of threading.Thread which can be serialized. You can see it &lt;a href=&quot;http://code.google.com/p/benjhayden/source/browse/trunk/pickle_thread.py&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. I need to make a multiprocessing.Process version of it too, just, well, cause.&lt;/p&gt;</content>
		<author>
			<name>m0nk3yz</name>
			<uri>http://jessenoller.com</uri>
		</author>
		<source>
			<title type="html">jessenoller.com</title>
			<subtitle type="html">python, programming and other things</subtitle>
			<link rel="self" href="http://jessenoller.com/feed/"/>
			<id>http://jessenoller.com/feed/</id>
			<updated>2008-11-21T11:30:20+00:00</updated>
		</source>
	</entry>

</feed>
