<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>some kinda developer guy</description><title>Jon Bringhurst</title><generator>Tumblr (3.0; @fintler)</generator><link>http://bringhurst.org/</link><item><title>Preventing delete of has_many children in Rails 3</title><description>&lt;p&gt;If you’ve tried to use rails 3 validate on a destroy, you might notice that error messages which were set in the before_destroy don’t get passed back to the user.&lt;/p&gt;

&lt;p&gt;It seems like many people out there have posted code that tries to tell you that you can set the record.errors in the model. Well, let me tell you that it doesn’t work for various reasons.&lt;/p&gt;

&lt;p&gt;Here’s an example of a workaround I’m using where a building contains many rooms.&lt;/p&gt;

&lt;p&gt;&lt;script src="http://gist.github.com/904621.js"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;As you can see, an RecordInvalid is thrown from the model and caught in the controller. Then, in the controller, the flash is set to the error message.&lt;/p&gt;</description><link>http://bringhurst.org/post/4374192029</link><guid>http://bringhurst.org/post/4374192029</guid><pubDate>Tue, 05 Apr 2011 17:46:00 -0400</pubDate></item><item><title>Space filling curves as interconnection topology</title><description>&lt;p&gt;I haven’t been able to find much information on how space filling curves, like
Hilbert curves, are used in network interconnection topology in supercomputers.
So, this post is my attempt at putting the information in one place. We’ll
start off with an introduction to gray encoding and how it relates to Hilbert
curves.&lt;/p&gt;

&lt;p&gt;So, gray codes are the concept of the day here. Gray codes are just another
binary representation of integer counting (1, 2, 3, 4, 5, …). They were used
back in the day for mechanical counting because of a key property — only one
bit changes for every value that a gray code is incremented or decremented.
This made it simple for a sensor to tell when the value had changed because
only one bit would be flipped every time. This is in contrast to normal binary
counting where it’s common for multiple bits to be flipped for every time the
value is incremented or decremented which makes it difficult to tell if the
bits have all completely flipped into their final state.&lt;/p&gt;

&lt;p&gt;Gray codes also have another special property. Some people like to call gray
codes “reflected binary codes”. This property makes the generation of gray
codes feel very similar to the generation of a fractal. For example, start off
with the one bit gray codes — you have 0 and 1. Now, to get two bit gray
codes, you write it forwards and backwards (0, 1, 1, 0). Then, prepend 0s to
the first half of the numbers and 1s to the second half of the numbers (00, 01,
11, 10) and you end up with the two bit gray codes. To get the n-bit gray
codes, you repeat the process n times from the base case.&lt;/p&gt;

&lt;p&gt;Now the cool stuff. Gray codes have yet another story to tell. You can use gray
codes to reference a coordinate in a space filling curve known as a
“Hilbert Curve”. Ignore the word “curve” for now — it’s just going to confuse
you. If you’re like most people, you’re going to think of a curve as a smooth
turn on a roller coaster or the shape of a hot air balloon. You’ll think of
Hilbert curves like that eventually, but not now. Right now, you can safely
think of Hilbert curves in appearance as similar to the maze puzzles
on a paper placemat from a roadside greasy spoon that you solved with a wax
crayon as a child.&lt;/p&gt;

&lt;p&gt;So, how do you use gray codes to reference locations in Hilbert curves? Lets
start off with the two bit gray codes. Just use each value like an x-y
coordinate. So, we have the coordinates of (0, 0), (0, 1), (1, 1), (1, 0) as
our first order Hilbert curve.&lt;/p&gt;

&lt;pre style="color:black;"&gt;

                     (0, 1)  *---------*  (1, 1)
                             |         |
                             |         |
                             |         |
                             |         |
                     (0, 0)  *         *  (1, 0)

&lt;/pre&gt;

&lt;p&gt;Now, lets try to do the second order Hilbert curve using the four bit gray
codes. To do this, we need to utilize the fractal properties of the Hilbert
curve. Each coordinate in the first order Hilbert curve needs to be replaced
by a new sub-curve that is the same shape as the first order curve. This new
sub-curve will be translated and rotated to fit in with the design of the
first order Hilbert curve. Once each of the coordinates has been replaced, we
end up with a second order Hilbert curve.&lt;/p&gt;

&lt;pre style="color:black;"&gt;

                      *-------*       *-------*
                      |       |       |       |
                      |       |       |       |
                      |       |       |       |
                      *       *-------*       *
                      |                       |
                      |                       |
                      |                       |
                      *-------*       *-------*
                              |       |
                              |       | 
                              |       |
                      *-------*       *-------*

&lt;/pre&gt;

&lt;p&gt;To address each of the coordinates in the second order Hilbert curve with gray
codes, we need to reference the original location of the coordinate that was
replaced by the sub-curve. So, for example, the lower-right corner in the
second order Hilbert curve has a gray code with bits that start with “10…”.
We can then get the rest of the gray code by again picturing the single order
Hilbert curve and rotating the visualization and then referencing that same
point after rotations in the lower order. So, the remaining part of the code is
“00” — which makes the code for the lower-right corner “1000”. Using the same
concept, you can use a gray code to find the location in a Hilbert curve.&lt;/p&gt;

&lt;p&gt;Now, how does the conversion from gray codes to Hilbert graphs and back
actually help us when it comes to network topology? Lets look at a third order
Hilbert curve for some perspective.&lt;/p&gt;

&lt;pre style="color:black;"&gt;

                    *---*   *---*   *---*   *---*
                    |   |   |   |   |   |   |   |
                    *   *---*   *   *   *---*   *
                    |           |   |           |
                    *---*   *---*   *---*   *---*
                        |   |           |   |
                    *---*   *---*---*---*   *---*
                    |                           |
                    *   *---*---*   *---*---*   *
                    |   |       |   |       |   |
                    *---*   *---*   *---*   *---*
                       (3)  |  (7)      |
                (2) *---*   *---*   *---*   *---*
                    |   |       |   |       |   |
                (1) *   *---*---*   *---*---*   *
                       (4) (5) (6)

&lt;/pre&gt;

&lt;p&gt;Start from the lower left corner of the curve and start ordering each
coordinate as you go along. As you pass each coordinate, calculate a rough
estimate of the physical difference in distance between each coordinate.
You’ll find that as you go, coordinates that are close to each other tend to
also be close to each other in their ordering. The number of each coordinate as
you go along and give each a value is known as the “Hilbert integer”.&lt;/p&gt;

&lt;p&gt;Now that we have a bit of a base, we can try to relate this to interconnection
topology. First things first, we need to have a picture of a 3 dimensional
Hilbert curve. So, instead of filling up a 2 dimensional space through each
order of the curve, we fill up a 3 dimensional space by adding a rotation into
the third dimension to each translate and rotation in 2 dimensional space.&lt;/p&gt;

&lt;pre style="color:black;"&gt;

                           *       *
                           |\      |
                           | \     |
                           |  *    |  *
                           |  |    |  |
                           *-------*  |
                              |       |
                              |       |
                              *-------*

&lt;/pre&gt;

&lt;p&gt;Now that we have a topology that closely resembles the node structure in a 3D
torus network structure, we can start thinking about how nodes are allocated.&lt;/p&gt;

&lt;p&gt;Remember the concept of a Hilbert integer? That’s going to be the node ID of
every node in the supercomputer. When the Hilbert integers of each node are
generated, they’re stored by the central resource manager and stored for the
duration of the resource manager’s lifecycle. After being sorted into a one
dimensional array, the node IDs can then be effectively used by a scheduler to
provide resources to jobs at a level of abstraction where the scheduler doesn’t
need to worry about the actual node topology.&lt;/p&gt;</description><link>http://bringhurst.org/post/3623873036</link><guid>http://bringhurst.org/post/3623873036</guid><pubDate>Thu, 03 Mar 2011 14:41:00 -0500</pubDate></item><item><title>A simple gluUnProject Port for Javascript WebGL Applications</title><description>&lt;p&gt;I just created a new github project with a standalone version of my Javascript gluUnProject port. Everything that’s not owned by SGI is under a public domain license. There are no dependencies on Google Closure or Lanyard.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://github.com/fintler/webgl-unproject"&gt;http://github.com/fintler/webgl-unproject&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re interested in an example, you can see it in action at &lt;a href="http://github.com/fintler/lanyard"&gt;http://github.com/fintler/lanyard&lt;/a&gt; in the lanyard.BasicOrbitView object.&lt;/p&gt;</description><link>http://bringhurst.org/post/2909874748</link><guid>http://bringhurst.org/post/2909874748</guid><pubDate>Mon, 24 Jan 2011 11:59:15 -0500</pubDate></item><item><title>Star Trek Red Shirt Gingerbread Man Cookie Cutter</title><description>&lt;p&gt;FoxTrot recently posted a &lt;a href="http://i.imgur.com/OSMyF.jpg"&gt;comic&lt;/a&gt; that features a redshirt as a gingerbread cookie. I figure, what the heck — I’m going make some real ones.&lt;/p&gt;

&lt;p&gt;The first step is making the cookie cutter. I took a trip to the local big box hardware store and ended up grabbing some aluminium roofing trim that I could easily slice up with a pair of old scissors. It cost $2 for 10 feet of it (I only ended up using like 2 feet).&lt;/p&gt;

&lt;p&gt;&lt;img width="400px" src="http://i.imgur.com/1sCdm.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;The next step was to plan out what I wanted the cookies to look like. I whipped up a little image that I thought was appropriate.&lt;/p&gt;

&lt;p&gt;&lt;img width="400px" src="http://i.imgur.com/MQdKz.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;Then, I got to work with the scissors and cut the aluminium into strips. I ended up using a pair of pliers for the tricky edges. With a little bit of effort (and taking care not to slice up my hands) the cutter starts to take shape.&lt;/p&gt;

&lt;p&gt;&lt;img width="400px" src="http://i.imgur.com/FEbCN.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;After finishing that up, I added a few scrap pieces for support and put everything together with plain old clear packaging tape.&lt;/p&gt;

&lt;p&gt;&lt;img width="400px" src="http://i.imgur.com/bV6IZ.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;As I type this, I’m waiting for the gingerbread dough to chill in my fridge. I’ll make sure I post the results soon.&lt;/p&gt;</description><link>http://bringhurst.org/post/2393188291</link><guid>http://bringhurst.org/post/2393188291</guid><pubDate>Mon, 20 Dec 2010 17:26:00 -0500</pubDate></item><item><title>Introducing a Completely Javascript 3D Map - Lanyard</title><description>&lt;p&gt;GIS on the web is going to hit a new level of awesome soon. I’ve been working on an entirely-written-in-Javascript 3D map for a bit now. It’s based on Closure Tools and NASA’s Worldwind and uses WebGL for hardware acceleration.&lt;/p&gt;

&lt;p&gt;A few minutes ago, I just managed to get the tiled blue marble layer working. Here’s a screenshot of the results:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://i.imgur.com/kp4DH.png"&gt;&lt;img width="500px" src="http://i.imgur.com/kp4DH.png"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or, if you have a WebGL enabled browser, take a look at the live demo (It’s buggy, click-to-drag doesn’t work well. Try out the mouse-scroll-wheel-zoom for some nifty tile disappearing and reappearing action based on the zoom level.) :&lt;/p&gt;

&lt;p&gt;&lt;a href="http://github.bringhurst.org/lanyard-pre-demo-2/"&gt;&lt;a href="http://github.bringhurst.org/lanyard-pre-demo-2"&gt;http://github.bringhurst.org/lanyard-pre-demo-2&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, if you’re a developer, take a look at the &lt;a href="http://github.com/fintler/lanyard"&gt;source on my github&lt;/a&gt;. I *heart* patches.&lt;/p&gt;</description><link>http://bringhurst.org/post/1604688707</link><guid>http://bringhurst.org/post/1604688707</guid><pubDate>Wed, 17 Nov 2010 19:55:34 -0500</pubDate></item><item><title>WebGL Ignite Presentation</title><description>&lt;p&gt;&lt;a href="https://docs.google.com/a/bringhurst.org/present/edit?id=0AdH17XwkEpmbZGRkNzJ0eG1fMTRmOXFnenpkNw&amp;hl=en"&gt;Here’s a copy&lt;/a&gt; of the presentation I’m doing for &lt;a href="http://www.ignite-nm.com/"&gt;Ignite NM&lt;/a&gt; tonight. Enjoy.&lt;/p&gt;</description><link>http://bringhurst.org/post/1168194729</link><guid>http://bringhurst.org/post/1168194729</guid><pubDate>Wed, 22 Sep 2010 14:44:43 -0400</pubDate></item><item><title>Java bug in Safari</title><description>&lt;p&gt;Back in April of 2008, when I was still at &lt;a href="http://www.temple.edu"&gt;Temple&lt;/a&gt;, I took a non-CS major class on security. In addition to creating &lt;a href="http://github.com/fintler/xnufuzz"&gt;a nifty little utility to bring an xnu kernel to its knees&lt;/a&gt;, I also did some work with &lt;a href="http://en.wikipedia.org/wiki/Fuzz_testing"&gt;fuzz testing&lt;/a&gt; web browsers. I ended up coming across a nice little bug in the width attribute of an applet tag. In the interest of full disclosure, I think it’s time to finally put this in public. This is the email I sent Apple:

&lt;/p&gt;&lt;blockquote&gt;Date: Sun, 4 May 2008 12:47:26 -0400&lt;br/&gt;
From: “Jonathan Bringhurst”&lt;br/&gt;
To: product-security@apple.com&lt;br/&gt;
Subject: integer overflow in safari, controlled null write to heap&lt;br/&gt;&lt;br/&gt;
Hey Apple Security People,&lt;br/&gt;&lt;br/&gt;
There’s a little problem with safari and java. Here an example…&lt;br/&gt;&lt;br/&gt;
“&lt;META HTTP-EQUIV=”Refresh” content=”0;URL=blah.html”&gt;&lt;APPLET WIDTH=”129999999” CODE=”aaaaaa.class”&gt;”&lt;br/&gt;&lt;br/&gt;
This leads to a fault…&lt;br/&gt;&lt;br/&gt;
“Invalid memory access of location b254b000 eip=26730fb0&lt;br/&gt;&lt;br/&gt;
Program received signal EXC_BAD_ACCESS, Could not access memory.&lt;br/&gt;
Reason: KERN_INVALID_ADDRESS at address: 0xb254b000&lt;br/&gt;
[Switching to process 2677 thread 0x1d703]&lt;br/&gt;
0x26730fb0 in AnyIntSetRect ()”&lt;br/&gt;&lt;br/&gt;
It seems to be an integer overflow in this loop inside AnyIntSetRect()…&lt;br/&gt;&lt;br/&gt;
0x26730fb0 &lt;AnyIntSetRect+64&gt;:  mov    %edi,(%edx,%eax,4)&lt;br/&gt;
0x26730fb3 &lt;AnyIntSetRect+67&gt;:  inc    %eax&lt;br/&gt;
0x26730fb4 &lt;AnyIntSetRect+68&gt;:  cmp    %eax,%esi&lt;br/&gt;
0x26730fb6 &lt;AnyIntSetRect+70&gt;:  ja     0x26730fb0 &lt;AnyIntSetRect+64&gt;&lt;br/&gt;&lt;br/&gt;
As you can see, eax gets blown up. Since it seems we can control the edx base, it’s trivial to do wild null writes into the heap. With some additional trickery, we’re able to control exactly where those nulls stop and get some priv escalation (think overwriting a euid, but instead modifying js privs).&lt;br/&gt;&lt;br/&gt;
Although it may seem like this is the java team’s fault, there really&lt;br/&gt;
should be a sanity check in safari for this.&lt;/blockquote&gt;
&lt;br/&gt;
Here’s their (relatively) quick response:&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;From: product-security@apple.com&lt;br/&gt;
To: jon@nospam-bringhurst.org&lt;br/&gt;
Subject: Re: integer overflow in safari, controlled null write to heap&lt;br/&gt;
Date: Tue,  6 May 2008 09:39:25 -0700 (PDT)&lt;br/&gt;&lt;br/&gt;
Please include the line below in follow-up emails for this request.&lt;br/&gt;&lt;br/&gt;
Follow-up:  47541419&lt;br/&gt;&lt;br/&gt;
Hello,&lt;br/&gt;&lt;br/&gt;
Thank you for forwarding this issue to us. We take any report of a potential security issue very seriously.&lt;br/&gt;&lt;br/&gt;
You should have already received our automated response message.  This message is being sent to you by a security analyst who has reviewed your note.  The issue is being investigated, and we appreciate the time you have taken to report it to us.  If we need additional information, you will hear from us very soon.&lt;br/&gt;&lt;br/&gt;
Because of the potentially sensitive nature of security vulnerabilities, we ask that this information remain between you and Apple while we investigate it further.&lt;br/&gt;&lt;br/&gt;
You’ll notice a number at the top of this email.  Including that number in any further emails you send to us on this issue will help us rapidly associate it with your original report.&lt;br/&gt;&lt;br/&gt;
We do not automatically provide status updates on issues as we work on them, but please feel free to request one if needed by replying to this message.&lt;br/&gt;&lt;br/&gt;
Best regards,&lt;br/&gt;&lt;br/&gt;
Apple Product Security team&lt;br/&gt;
&lt;a href="http://www.apple.com/support/security/"&gt;http://www.apple.com/support/security/&lt;/a&gt;&lt;br/&gt;
PGP Key ID: 0xB8469E6D&lt;br/&gt;
Fingerprint: FD20 40DB F7BC 37B9 6E78 4C3B C800 A2AB B846 9E6D&lt;/blockquote&gt;
&lt;br/&gt;
Finally, only a few days ago, I received this email:&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;From: product-security@apple.com&lt;br/&gt;
To: jon@nospam-bringhurst.org&lt;br/&gt;
Subject: Re: integer overflow in safari, controlled null write to heap&lt;br/&gt;
Date: Wed, 14 Apr 2010 14:40:16 -0700 (PDT)&lt;br/&gt;&lt;br/&gt;
Please include the line below in follow-up emails for this request.&lt;br/&gt;&lt;br/&gt;
Follow-up:  47541419&lt;br/&gt;&lt;br/&gt;
Hello,&lt;br/&gt;&lt;br/&gt;
When we address an issue in a Security Update, we like to give credit to the person who reported the issue to us. The information is typically in the following format:&lt;br/&gt;&lt;br/&gt;
    Credit to &lt;Person&gt; of &lt;Company or School or Agency&gt; for reporting this issue.&lt;br/&gt;&lt;br/&gt;
You can see examples of this at &lt;a href="http://support.apple.com/kb/HT1222"&gt;http://support.apple.com/kb/HT1222&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;
Would you please let us know if you would like to be credited, and the information you would like us to use?&lt;br/&gt;&lt;br/&gt;
Thanks.&lt;br/&gt;
Mihaela&lt;br/&gt;&lt;br/&gt;
Apple Product Security team&lt;br/&gt;
&lt;a href="http://www.apple.com/support/security/"&gt;http://www.apple.com/support/security/&lt;/a&gt;&lt;br/&gt;
PGP Key ID: 0xDB539AED&lt;br/&gt;
Fingerprint: 4B55 5F62 FAE8 BC41 BA9A 4D70 89B3 3F9F DB53 9AED&lt;/blockquote&gt;
&lt;br/&gt;
I take it that since they’re ready to release a patch (after two years of development that must be an AWESOME patch), it’s time to finally put all of this out there in public.</description><link>http://bringhurst.org/post/561917665</link><guid>http://bringhurst.org/post/561917665</guid><pubDate>Fri, 30 Apr 2010 19:55:00 -0400</pubDate></item><item><title>Checking out multiple projects in one subversion repo</title><description>&lt;p&gt;If you’ve ever had to deal with a subversion repository with multiple projects that all have separate “trunk”, “branches”, and “tags”, you may find this script quite useful.&lt;/p&gt;

&lt;p&gt;To use it, you can specify multiple project names and the tag or branch that you want to check out for each of them. If no flags are specified, it’ll default to checking out from trunk.&lt;/p&gt;

&lt;p&gt;&lt;script src="http://gist.github.com/385651.js"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;I’ve been using this on a daily basis for a little while and I think I’ve weeded out most of the obvious bugs.&lt;/p&gt;</description><link>http://bringhurst.org/post/561501649</link><guid>http://bringhurst.org/post/561501649</guid><pubDate>Fri, 30 Apr 2010 15:48:00 -0400</pubDate></item><item><title>Apparently the student loan reform bill passed the house this week.</title><description>&lt;p&gt;Apparently the student loan reform bill passed the house this week.&lt;/p&gt;</description><link>http://bringhurst.org/post/199121757</link><guid>http://bringhurst.org/post/199121757</guid><pubDate>Mon, 28 Sep 2009 08:26:26 -0400</pubDate></item><item><title>My little project finally has a matrix abstraction… http://bit.ly/4qVYJv</title><description>&lt;p&gt;My little project finally has a matrix abstraction… &lt;a href="http://bit.ly/4qVYJv"&gt;http://bit.ly/4qVYJv&lt;/a&gt;&lt;/p&gt;</description><link>http://bringhurst.org/post/197598913</link><guid>http://bringhurst.org/post/197598913</guid><pubDate>Sat, 26 Sep 2009 14:05:59 -0400</pubDate></item><item><title>Nice, I think I might use this for trailreporter.com RT @gisuser consider Drupal Nice Map...</title><description>&lt;p&gt;Nice, I think I might use this for trailreporter.com RT @gisuser consider Drupal Nice Map &lt;a href="http://su.pr/2YVYLy"&gt;http://su.pr/2YVYLy&lt;/a&gt; (via @jimmyrocks)&lt;/p&gt;</description><link>http://bringhurst.org/post/197598919</link><guid>http://bringhurst.org/post/197598919</guid><pubDate>Sat, 26 Sep 2009 14:05:59 -0400</pubDate></item><item><title>resistance is futile (if &lt; 1 ohm)</title><description>&lt;p&gt;resistance is futile (if &lt; 1 ohm)&lt;/p&gt;</description><link>http://bringhurst.org/post/197598916</link><guid>http://bringhurst.org/post/197598916</guid><pubDate>Sat, 26 Sep 2009 14:05:59 -0400</pubDate></item><item><title>Statistically, software engineers are the worst drivers. And here I was, thinking no one could drive...</title><description>&lt;p&gt;Statistically, software engineers are the worst drivers. And here I was, thinking no one could drive but me :) &lt;a href="http://bit.ly/7Csxz"&gt;http://bit.ly/7Csxz&lt;/a&gt;&lt;/p&gt;</description><link>http://bringhurst.org/post/196620851</link><guid>http://bringhurst.org/post/196620851</guid><pubDate>Fri, 25 Sep 2009 10:02:28 -0400</pubDate></item><item><title>RT @kevinferrero @colinmlenton hey … do you guys have an insane amount of issues with the...</title><description>&lt;p&gt;RT @kevinferrero @colinmlenton hey … do you guys have an insane amount of issues with the network in the basement Annenberg lab?&lt;/p&gt;</description><link>http://bringhurst.org/post/195654164</link><guid>http://bringhurst.org/post/195654164</guid><pubDate>Thu, 24 Sep 2009 04:59:04 -0400</pubDate></item><item><title>RT @phillybikeclub An electric bike that travels 30 miles at 32 kph for $0.10usd (about...</title><description>&lt;p&gt;RT @phillybikeclub An electric bike that travels 30 miles at 32 kph for $0.10usd (about 1500mpg)… &lt;a href="http://pimobility.com/"&gt;http://pimobility.com/&lt;/a&gt;&lt;/p&gt;</description><link>http://bringhurst.org/post/195654162</link><guid>http://bringhurst.org/post/195654162</guid><pubDate>Thu, 24 Sep 2009 04:59:03 -0400</pubDate></item><item><title>If you break a unit test, removing the unit test is not “fixing” it. Bleh.</title><description>&lt;p&gt;If you break a unit test, removing the unit test is not “fixing” it. Bleh.&lt;/p&gt;</description><link>http://bringhurst.org/post/195654150</link><guid>http://bringhurst.org/post/195654150</guid><pubDate>Thu, 24 Sep 2009 04:59:01 -0400</pubDate></item><item><title>Gotta take advantage of Restaurant Week — http://tr.im/zpXD. (via @hectcastro)</title><description>&lt;p&gt;Gotta take advantage of Restaurant Week — &lt;a href="http://tr.im/zpXD."&gt;http://tr.im/zpXD.&lt;/a&gt; (via @hectcastro)&lt;/p&gt;</description><link>http://bringhurst.org/post/194647521</link><guid>http://bringhurst.org/post/194647521</guid><pubDate>Tue, 22 Sep 2009 22:52:27 -0400</pubDate></item><item><title>2009 mono remixes of the Beatles sound way better than stereo ones.</title><description>&lt;p&gt;2009 mono remixes of the Beatles sound way better than stereo ones.&lt;/p&gt;</description><link>http://bringhurst.org/post/194647432</link><guid>http://bringhurst.org/post/194647432</guid><pubDate>Tue, 22 Sep 2009 22:52:19 -0400</pubDate></item><item><title>WebGL works great in Firefox.</title><description>&lt;p&gt;WebGL works great in Firefox.&lt;/p&gt;</description><link>http://bringhurst.org/post/193563299</link><guid>http://bringhurst.org/post/193563299</guid><pubDate>Mon, 21 Sep 2009 15:54:29 -0400</pubDate></item><item><title>RT @freepress Wow, FCC launches www.openinternet.gov. Big move.</title><description>&lt;p&gt;RT @freepress Wow, FCC launches &lt;a href="http://www.openinternet.gov"&gt;www.openinternet.gov&lt;/a&gt;. Big move.&lt;/p&gt;</description><link>http://bringhurst.org/post/193563297</link><guid>http://bringhurst.org/post/193563297</guid><pubDate>Mon, 21 Sep 2009 15:54:29 -0400</pubDate></item></channel></rss>

