<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>pyx</title>
<link>http://ulaluma.com/pyx/</link>
<description></description>
<language>en-us</language>
<copyright>Copyright 2008</copyright>
<lastBuildDate>Tue, 29 Jul 2008 16:33:40 -0800</lastBuildDate>
<pubDate>Wed, 30 Jul 2008 10:06:44 -0800</pubDate>
<generator>http://www.movabletype.org/?v=3.35</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 

<item>
<title>Eventlet 0.7 and Spawning 0.7 Released</title>
<description><![CDATA[<h1>Eventlet 0.7</h1>

<p>Eventlet 0.7 fixes some very long-standing bugs. First of all, there was a CPU leak in the select hub which would cause an http keep-alive connection to consume 100% CPU while it was open. The problem was that every file descriptor was being passed in to select, even if the callback for the readiness mode was None. This bug has been in since the very beginning of eventlet, and it's great to have it fixed!</p>

<p>Second, another old bug. It's now possible to use Eventlet's SSL client to talk to Eventlet's SSL server. There was a subtle bug in the way SSL sockets would raise an error in some conditions instead of returning '' to indicate the connection was closed.</p>

<p>Finally, some memory leaks in the libevent and libev hubs (fairly new code) were fixed, so if you're using Eventlet with libevent or libev try it out and see how it performs for you.</p>

<p>Also, this release pulls in a bunch of API additions from the Linden SVN repository. Ryan Williams is now maintaining an HG repository which is synched with the SVN repository, so integrating patches between branches will now be much easier.</p>

<p><b>Update July 30, 2008</b>This release of eventlet also supports stackless-pypy again. I had to check for the absence of the socket.ssl object, and re-enable the poll hub. To try this out, check out and translate pypy-c following the instructions <a href="http://codespeak.net/pypy/dist/pypy/doc/getting-started.html">on the pypy site</a>, and then run one of the eventlet examples (for example, "./pypy-c /Users/donovan/src/eventlet/examples/wsgi.py")</p>

<p>Download Eventlet 0.7 from PyPI: <a href="http://pypi.python.org/pypi/eventlet/0.7">http://pypi.python.org/pypi/eventlet/0.7</a>

<h1>Spawning 0.7</h1>

<p>Spawning has improved a lot since I last wrote about it. It now has a command line script, "spawn", which makes it easy to quickly serve any wsgi application. The concurrency strategy is also now extremely flexible and can be configured for a plethora of use cases.</p>

<p>The default is to use one non-blocking i/o process with a threadpool, which makes it easy to use with any existing wsgi applications out there that assume shared memory and the ability to block.</p>

<p>However, it's possible to independently configure the number of i/o processes, the number of threads, and even configure it to be single-process, single-thread, with fully non-blocking i/o (thanks to eventlet's monkey patching abilities).</p>

<p><b>Update July 30, 2008</b>This release of spawning also has an experimental Django factory. To run a Django app under Spawning, run "spawn --factory=spawning.django_factory.config_factory mysite.settings".</p>

<p>Take a look at the Spawning PyPI entry for more information: <a href="http://pypi.python.org/pypi/Spawning/0.7">http://pypi.python.org/pypi/Spawning/0.7</a></p>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2008/07/eventlet_07_and.html</link>
<guid>http://ulaluma.com/pyx/archives/2008/07/eventlet_07_and.html</guid>
<category></category>
<pubDate>Tue, 29 Jul 2008 16:33:40 -0800</pubDate>
</item>
<item>
<title>Spawning 0.1 Released</title>
<description><![CDATA[<p>Spawning is an experimental mashup between Paste and eventlet. It provides a server_factory for Paste Deploy that uses eventlet.wsgi. It also has some other nice features, such as the ability to run multiple processes to take advantage of multicore processors and multiprocessor machines, and graceful code reloading when modules change or the svn revision of a directory changes. Graceful reloading means new processes are immediately started which start serving new incoming requests, but old processes hang around processing the old requests until those requests are complete.</p>

<p>This is very early still. The code is currently hard-coded to run one process, but once I figure out how to use Paste Deploy's configuration files a bit better I will make it configurable. I mostly wanted to get it out quickly because Ian Bicking asked for it in the comments of my <a href="http://ulaluma.com/pyx/archives/2008/06/eventlet_05_rel.html#comments">last blog post</a>, and to get feedback. I'd like more of this code to be shared between Spawning and mulib's 'mud' server. I also need a better name than Spawning.</p>

<p>You can download a tarball <a href="http://soundfarmer.com/eventlet/Spawning-0.1.tar.gz">here</a> or you can clone the Mercurial repository <a href="http://donovanpreston.com:8888/spawning">here.</a></p>
]]>
</description>
<link>http://ulaluma.com/pyx/archives/2008/06/spawning_01_rel.html</link>
<guid>http://ulaluma.com/pyx/archives/2008/06/spawning_01_rel.html</guid>
<category></category>
<pubDate>Mon, 16 Jun 2008 19:10:28 -0800</pubDate>
</item>
<item>
<title>Eventlet 0.5 Released</title>
<description><![CDATA[<p>The last release of eventlet was 0.2, which we did when we re-open-sourced the fork of eventlet I worked on while I was at Linden Lab. 0.2 was released quite a while ago, and eventlet has seen significant improvement in the meantime.</p>

<p>The main change in this release is the ability to use libevent as the multiplexing api instead of raw select or poll. If libevent and the Python wrapping are not installed, eventlet will still fall back, first checking for the presence of poll and falling back to select if it is not available.</p>

<p>Another major change in this release is a much improved eventlet.wsgi server. The wsgi server now supports Transfer-Coding: chunked as well as Expect: 100 Continue, and is quite fast. I tested it against an eventlet based wsgi server I wrote which uses wsgiref (from the Python 2.5 standard library) and my informal tests showed eventlet.wsgi being several hundred requests a second faster at serving a "Hello, World!" wsgi application.</p>

<p>This release also features significant refactoring, cleaner code, support for cooperative operations on pipes (and unix domain sockets) as well as sockets, more tests, and docstrings for pretty much everything. The documentation, which was non-existant before, is now pretty comprehensive.</p>

<p>To install, just "easy_install eventlet" and start hacking!</p>

<p>
<ul>
	<li>PyPI page: <a href="http://pypi.python.org/pypi/eventlet/0.5">http://pypi.python.org/pypi/eventlet/0.5</a></li>
	<li>Overview: <a href="http://wiki.secondlife.com/wiki/Eventlet">http://wiki.secondlife.com/wiki/Eventlet</a></li>
	<li>Documentation: <a href="http://wiki.secondlife.com/wiki/Eventlet/Documentation">http://wiki.secondlife.com/wiki/Eventlet/Documentation</a></li>
	<li>Mercurial Repository: <a href="http://donovanpreston.com:8888/eventlet">http://donovanpreston.com:8888/eventlet</a></li>
</ul>
</p>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2008/06/eventlet_05_rel.html</link>
<guid>http://ulaluma.com/pyx/archives/2008/06/eventlet_05_rel.html</guid>
<category></category>
<pubDate>Thu, 12 Jun 2008 11:49:47 -0800</pubDate>
</item>
<item>
<title>REST + Actors</title>
<description><![CDATA[<p>I had a really good idea over the weekend for using eventlet and mulib to combine the concepts of REST and Actors. Eventlet has had an Actor class for a while now, but I haven't really used it for anything. After otakup0pe twittered a link to the Reia language (everyone knows how much of a language geek I am) I started thinking about Actors again and how I could have applied them to various work problems I solved in the last few years. The last time I really tried to do anything serious with Actors was when I wrote the latest version of Pavel on top of the just-written (at the time) eventlet. I also tried to mix a prototype object system in there and the actor coroutines were implicit in the semantics of usage (an Actor which called a method on another Actor would be implicitly causing a switch into the other Actor's coroutine), which in retrospect was perhaps a bit too ambitious.</p>

<p>Ryan Williams wrote the current eventlet Actor (eventlet.coros.Actor) and it's much simpler and more straightforward: You override the received method to handle messages, and other actors call the cast method to send messages. This is different from my previous implementation (and also what my ideal would be) in that you get called back for every message, meaning the main coroutine is generic and there's no need to keep track of where the Actor's coroutine is to serialize an actor. This means it would be possible to request a representation of an Actor at any time between messages. The state would include all the Python instance variables along with all the unhandled messages currently in the Actor's mailbox.</p>

<p>So, with that realization, it suddenly becomes trivial to write a mulib handler for the Actor class. GET and PUT with the appropriate content types (application/json for example) would get or set the current state of the Actor. DELETE would delete it. POST enqueues a message in the actor's mailbox (it just calls cast with the body of the request). Simple and straightforward. I'm totally going to do this soon -- it probably would have been faster to just do the implementation rather than blog about it :-)</p>

<p>Oh, one more thing -- to enhance the experience of actually using these semantics, the cast method should become a generic method that dispatches based on pattern matching (using mulib.shaped). I haven't figured out what an efficient implementation of this would look like yet, but I'm going to try a brute-force implementation just for fun.</p>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2008/06/rest_actors.html</link>
<guid>http://ulaluma.com/pyx/archives/2008/06/rest_actors.html</guid>
<category></category>
<pubDate>Mon, 02 Jun 2008 10:42:20 -0800</pubDate>
</item>
<item>
<title>Template on PUT</title>
<description>I just had a cool idea. Usually, people run HTML templating engines on GET. They fetch some data, load an HTML template, and then mash the two together. My idea is to instead run the templating engine on PUT. The body of the PUT would have the data to be templated. The URL that was PUT to would determine which template to use. The response from the PUT would contain the fully templated output, equivalent to what the client would get by doing a GET to that url at any point afterwards.

</description>
<link>http://ulaluma.com/pyx/archives/2008/05/template_on_put.html</link>
<guid>http://ulaluma.com/pyx/archives/2008/05/template_on_put.html</guid>
<category></category>
<pubDate>Wed, 14 May 2008 12:55:28 -0800</pubDate>
</item>
<item>
<title>REST to LSL via Python and Comet</title>
<description><![CDATA[<p>For those that may not know, I got a job at Linden Lab, the creators of Second Life. I really enjoy what I do, and I find this reduces the urge to work on recreational programming on the kinds of things that I enjoy. (It has also seemed to reduce my blog output to almost nil.)</p>

<p>I've had a project on the back burner for a while that involves pushing data into LSL (the Linden Scripting Language runtime that Second Life uses) over <a href="http://en.wikipedia.org/wiki/Comet_(programming)">Comet</a>.</p>

<p>And it works amazingly well! Of course, I just had to toss <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a> in there as well.</p>

<p>I'll release this code as open source next week. Meanwhile, here's a movie to show you what the hell I am talking about. I also like how this movie shows off the surreal aspect of collaborative programming!</p>

<embed src="http://soundfarmer.com/content/movies/rest-lsl-comet-bridge.mov" height="600" width="798" autoplay="false"></embed>

]]>
</description>
<link>http://ulaluma.com/pyx/archives/2007/09/rest_to_lsl_via_python_and_comet.html</link>
<guid>http://ulaluma.com/pyx/archives/2007/09/rest_to_lsl_via_python_and_comet.html</guid>
<category></category>
<pubDate>Sun, 30 Sep 2007 00:08:24 -0800</pubDate>
</item>
<item>
<title>My blog is growing weeds...</title>
<description><![CDATA[<p>It's been over a year now since I posted to this blog. What happened? I got a job at Linden Lab just over a year ago. Somehow, my blogging just stopped during that time. I have been busy though, and have been using twitter recently. I'll probably start posting here again with more frequency, as I have lots of things to talk about, but until then check out my twitter:</p>

<p><a href="http://twitter.com/donovanpreston">http://twitter.com/donovanpreston</a></p>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2007/06/my_blog_is_grow.html</link>
<guid>http://ulaluma.com/pyx/archives/2007/06/my_blog_is_grow.html</guid>
<category></category>
<pubDate>Fri, 08 Jun 2007 17:17:45 -0800</pubDate>
</item>
<item>
<title>Awesome</title>
<description><![CDATA[<a href="http://item.slide.com/i/uid=xMSTXOmcSLEA6VtJkKLBU8gpjvGBg-a6VjoCtm9EqOxePF8Rs-o29Um-fpzIp5TVajSMFiFH9vk"><img src="http://item.slide.com/i/uid=xMSTXOmcSLEA6VtJkKLBU8gpjvGBg-a6VjoCtm9EqOxePF8Rs-o29Um-fpzIp5TVajSMFiFH9vk" width="600" /></a>

<p>Picked this up at Kid Robot in the Haight this weekend. It is so freaking awesome. I want more, but <a href="http://dot-s.net/">can't read japanese :-)</a></p>

<a href="http://item.slide.com/i/uid=dYs0FyrwTPK9GYdMJTY-a-tzeHHtHE8bTHqb3V-8AdxjoJGx_E0GmcyhYWEYtJMTjdqN9xOp3tA"><img src="http://item.slide.com/i/uid=dYs0FyrwTPK9GYdMJTY-a-tzeHHtHE8bTHqb3V-8AdxjoJGx_E0GmcyhYWEYtJMTjdqN9xOp3tA" width="600" /></a>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2006/05/awesome.html</link>
<guid>http://ulaluma.com/pyx/archives/2006/05/awesome.html</guid>
<category></category>
<pubDate>Mon, 01 May 2006 22:18:03 -0800</pubDate>
</item>
<item>
<title>Running Ubuntu on Mac OS X</title>
<description><![CDATA[<p>One of the first things I did when I got my MacBook is install Parallels, CPU virtualization software that lets me run Windows XP in a window on Mac OS X, so I can easily test our site with Internet Explorer. It's very fast, and very, very friendly.</p>

<p>Recently I was tasked with discovering whether it is possible to do non-blocking file reads and writes to a filesystem that is mounted over NFS. I tried on OS X, and I was unable to get a read to return EWOULDBLOCK. So, I decided to install Ubuntu on Parallels. I downloaded the iso, burned it to a CD, created a new virtual machine, and installed it.</p>

<p>Everything worked flawlessly. Ubuntu has always been incredibly high quality, and it has only gotten nicer in the year since I used it last. It's polished, beautiful, and just works. It is definitely something that I could install on my machine for my Mom with a web browser and mail reader.</p>

<p>Here's a screenshot:</p>

<a href="http://www.soundfarmer.com/pictures/screenshots/ubuntu-parallels.png">
<img width="600" height="800" src="http://www.soundfarmer.com/pictures/screenshots/ubuntu-parallels.png" />
</a>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2006/04/running_ubuntu.html</link>
<guid>http://ulaluma.com/pyx/archives/2006/04/running_ubuntu.html</guid>
<category></category>
<pubDate>Tue, 25 Apr 2006 16:59:32 -0800</pubDate>
</item>
<item>
<title>Writing your Python REPL history to a file</title>
<description><![CDATA[<p>Something I have often wished for is the ability to save the history of a Python interactive session to a file. I often screw around in the interpreter to figure out how I am going to implement something, and it is tedious to go through and copy/paste all the lines out of the terminal into an editor and clean it up. Luckily, I discovered there is an easier way in the readline module:</p>

<pre>
import readline
readline.write_history_file('my_history.py')
</pre>

<p>I'm sure this is going to come in handy many times.</p>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2006/04/writing_your_py.html</link>
<guid>http://ulaluma.com/pyx/archives/2006/04/writing_your_py.html</guid>
<category></category>
<pubDate>Mon, 03 Apr 2006 19:10:49 -0800</pubDate>
</item>
<item>
<title>New Slide Transitions</title>
<description><![CDATA[<p>One of the new transitions we have been working on at Slide:</p>

<p><embed src="http://widget.slide.com/cticker/648940/ticker.swf" quality="high" scale="noscale" salign="l" flashvars="site=widget.slide.com&channel=648940" wmode="transparent" width="500" height="375" name="flashticker" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"/></p>

<p>Very busy at work lately. Getting a lot accomplished, and it is challenging, fun work. We're starting to ramp up pretty fast and I have been doing scalability work on the backend, which is surprisingly enjoyable after doing web front end work for so long.</p>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2006/03/new_slide_trans.html</link>
<guid>http://ulaluma.com/pyx/archives/2006/03/new_slide_trans.html</guid>
<category></category>
<pubDate>Fri, 24 Mar 2006 22:59:59 -0800</pubDate>
</item>
<item>
<title>Introducing NevowPavel</title>
<description><![CDATA[<img height="600" src="http://soundfarmer.com/pictures/screenshots/NevowPavel.png" />
<p>I'm at SuperHappyDevHouse VII tonight. I went to II, and had a good time, but haven't been able to get back until now for various reasons. It was supposed to be last weekend, which falls on my weekend I am scheduled to work in the city, but for some reason it got bumped to this weekend. My goal for tonight is to release some code which was written almost a year ago: <a href="http://www.soundfarmer.com/darcs/NevowPavel">NevowPavel</a>. If you have a short attention span, watch the <a href="http://soundfarmer.com/content/movies/PavelScreencast.mov">screencast</a>, wherein I explain the basic idea behind the project and give a demonstration of the currently implemented features.</p>

<p>This is the secret LivePage project I wrote about the last time I went to SHDH. It is a multiuser real-time updating wiki similar to and inspired by (the precursor to) <a href="http://jotlive.com/">Jot Live</a>, the "live" version of Jot that broadcasts real-time updates to everyone that is participating. The difference with the NevowPavel implementation is that it is "spatial". Instead of editing a contiguous page of text, each piece of text is contained in a sticky note which can be moved and resized at will to organize the information as one wishes.</p>

<p>Links are also handled in an interesting way. Links are inserted by dragging out a link instead of a sticky and typing a new page name. Following the link takes you to the new page, where you can create and organize new pieces of information. Each page has a user list, so you can see who is there editing with you. To organize information cross-page, you drag stickies onto links. People who are on other pages see the information appear magically.</p>

<p>The ultimate goal of these template objects which you can spatially place in the page is for them to be pluggable. New types of objects should be able to be created which can provide code which renders content and handles input events for instances placed in the page. Eventually, the code should be through-the-web programmable. Obviously this involves lots of different things, like run-time code modification, restricted code execution, perhaps distributed code (to move code across multiple Pavel servers), and some sort of persistence. I'm also working on a Prototype-based object system with very simple persistence which is coming along well, but isn't integrated with the old project at all yet. This is a multi-year project, so check back again next year :-)</p>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2006/01/introducing_nev.html</link>
<guid>http://ulaluma.com/pyx/archives/2006/01/introducing_nev.html</guid>
<category></category>
<pubDate>Sun, 29 Jan 2006 04:37:56 -0800</pubDate>
</item>
<item>
<title>Slide Show of Photos from Paradise</title>
<description><![CDATA[<p>I have been working at <a href="http://slide.com/">Slide</a> for a few months now. We are working on making photo sharing and real-time media communication easy to use. We've made a lot of progress on the web site recently, and one of the things we are working on is making embedding a Slide Show in an external web page easier. Here is one of my Slide Shows, pictures of my trip to Michigan this summer immediately before I began working at Slide.</p>

<p>
<embed allowScriptAccess="never" src="http://www.slide.com/images/flashticker.swf" quality="high" scale="noscale" salign="l" flashvars="site=www.slide.com&channel=3059" wmode="transparent" width="600" height="97" name="flashticker" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
<br><font size="1">Get the <a href="http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&promoid=BIOW">latest version of Flash</a> to view Slide Show, above.  <a href="http://www.slide.com">Visit Slide.com</a> to create your own Slide Show</font>
</p>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2005/12/slide_show_of_p.html</link>
<guid>http://ulaluma.com/pyx/archives/2005/12/slide_show_of_p.html</guid>
<category></category>
<pubDate>Sat, 17 Dec 2005 17:40:33 -0800</pubDate>
</item>
<item>
<title>Virt</title>
<description><![CDATA[Something weird happened to me recently. I had my first screaming-crying-girl-throwing-her-panties fanboy moment for some guy I discovered on teh intarnets. He's virt (<a href="http://virt.vgmix.com">http://virt.vgmix.com</a>) and I felt so ecstatic from sleep depravation and listening to his music that I wrote him the following email:

<blockquote>
<p>I have no idea how I came across your site. Probably after reading the wikipedia Chiptunes page and searching around a bit (since you don't seem to be linked on there... go add yourself!). I had the contents of your Chiptunes page on my ipod for a while before I really listened to it a lot. The first song I downloaded and listened to a lot was the thriller cover, which I thought was just so cheesy to be brilliant. I used it to test a Mac audio editing application I was working on this summer, SoundFarmer. Check it out:
</p><p>
<a href="http://donovanpreston.slide.com/c/SoundFarmer ">http://donovanpreston.slide.com/c/SoundFarmer</a>
</p><p>

Specifically:
</p><p>

<a href="http://item.slide.com/y/uid=5eilEp2bBu3zp7fdnfWThvdchdJNe1P50VhphDVUTV35s_UPnkCLsZB6WKutK_7Y/SoundFarmerAugust05.png
">http://item.slide.com/y/uid=5eilEp2bBu3zp7fdnfWThvdchdJNe1P50VhphDVUTV35s_UPnkCLsZB6WKutK_7Y/SoundFarmerAugust05.png</a>
</p><p>

I didn't really listen to much of the other stuff from the chiptunes page or thriller for a while. Then, I was at the gym yesterday on the treadmill, sorta in the zone, just closing my eyes and concentrating fully on what I was hearing. I think it was in the middle of "blastoff", right about 1:08, where the progression slams right through the fucking roof and the chorus kicks in and breaks it down and then the next section starts slicing microthin shavings through your brain with the distorted guitar and then here we go up and up and up and arpeggio and staccato and tension hold and release and OH FUCK YEAH bring it back around to the chorus again!!! I was almost in tears. I actually had chills. Goosebumps. (All while sweating my ass off at the gym!) I am not shitting you.
</p><p>

Anyway, I went and downloaded every other single mp3 I could find on your site earlier this morning (say hi to your server logs for me ;-) and was digging the gameboy choons but it wasn't until I got to MC Nachbar that I realized that you are a fucking GENIUS. GEE-NEE-USSSSSS. A fucking polymath. So I wanted to mail you and let you know. You made my year.
</p><p>

Nostalgia and speculation on the nature of human creativity follows:
</p><p>

When I was in highschool, I found a copy of SoundTrecker (a Mac mod tracker) and a few mods somewhere. Pretty soon I was downloading mods from boards as fast as I could. At one point I had an entire syquest 44 cart filled up with em. Pretty amazing over a 9600 baud modem! I remember when I eventually had a 28.8 and I could download mods faster than I could listen to them... that was quite an epiphany (I had the same epiphany when I discovered mp3 ftp servers a few years later when I worked at the state of michigan, which had a T3. I have not yet had that epiphany with movie torrents yet, but I have a feeling we're close. I also don't really like video as a media). Then when I was in college I found my favorite song ever... FOOP.MOD, a brilliant breakbeat choon that I still love to this day. I was also buying CDs at the time from various random techno acts of the day, but with the exception of Aphex Twin, Luke Vibert, and Mike Paradinas, I was continually disappointed. There was just something about the raw emotion and uncut feel of mods that compelled me much more than some random crappy-ass major label release.
</p><p>

There is a psychic difference between the product that one creates for love versus money. When someone really, truly loves something and does their absolute best, it bleeds out between the lines, oozes all over your hands and sticks to you and won't wash off. I work at slide because I love programming, and the fact that I get paid is a pleasurable side effect. It is this raw hot plasma passion that fuels the internet, the blogs-versus-journalists and mp3-versus-record-mafia battles. The 9 to 5 work week and the boss-employee fiction is a recent creation in human evolution. The creative drive of which I speak is not. It may not happen tomorrow, but the politcal and social fads of the day will fade. They will be replaced with new social customs and norms. Each step of the way humanity will delude itself into thinking this custom is "natural" and has somehow always existed. But the only thing that has always existed is the creative big bang. God. The Universe. Order from chaos, strange attractors in the cellular automata. Find it, feel it, follow it, hold on.
</p><p>

So yeah. Thank you for who you are and for letting me see it through the magic of the internet.
</p>
</blockquote>

If I don't post to my blog more often it is going to become a barren wasteland, so perhaps I shall begin posting on a wider range of topics like this one.
]]>
</description>
<link>http://ulaluma.com/pyx/archives/2005/11/virt.html</link>
<guid>http://ulaluma.com/pyx/archives/2005/11/virt.html</guid>
<category></category>
<pubDate>Fri, 18 Nov 2005 12:09:27 -0800</pubDate>
</item>
<item>
<title>JavaScript sucks ass, part one million</title>
<description><![CDATA[<p>In the spirit of Bob Ippolito's JavaScript Sucks posts, here is one of my own. Sit down and let me tell you a tale about the little language that is so close to being good, yet so far...</p>

<p>Recently, I changed jobs. I joined a company called <a href="http://slide.com/">slide</a>, which is building a hybrid photo sharing application using a combination of fat client and rich web technologies. In my drive to create responsive web applications I have been exploring techniques which make heavier and heavier use of client-side JavaScript. I now find myself doing less and less Python and more and more JavaScript rendering code.</p>

<p>I don't really mind this too much. I think JavaScript is a reasonable language, with reasonable anonymous function syntax, real closures with mutable parent scopes, and prototype inheritance (with the most bizarre implementation that unfortunately renders it almost unusable). However, every once in a while I hit some issue which drives me absolutely insane trying to debug.</p>

<p>Here is what I ran in to. The following:</p>

<pre>{'foo': 1}</pre>

<p>Is not valid syntax. However, the following:</p>

<pre>foo = {'foo': 1}</pre>

<p>Works fine. I ran in to this issue while trying to eval constructed strings of javascript. Even though eval returns a result, giving it a single JavaScript object literal results in an exception. Tacking on an assignment at the beginning fixes the issue. Ugly.</p>]]>
</description>
<link>http://ulaluma.com/pyx/archives/2005/10/javascript_suck.html</link>
<guid>http://ulaluma.com/pyx/archives/2005/10/javascript_suck.html</guid>
<category></category>
<pubDate>Wed, 05 Oct 2005 20:03:08 -0800</pubDate>
</item>


</channel>
</rss>