<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Atomized</title>
	<atom:link href="http://atomized.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://atomized.org</link>
	<description>Fragmenting reality.</description>
	<lastBuildDate>Fri, 12 Mar 2010 17:52:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Why I’m Not Switching Back To Linux Any Time Soon</title>
		<link>http://atomized.org/2010/03/why-i%e2%80%99m-not-switching-back-to-linux-any-time-soon/</link>
		<comments>http://atomized.org/2010/03/why-i%e2%80%99m-not-switching-back-to-linux-any-time-soon/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 17:52:14 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[wtf]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=695</guid>
		<description><![CDATA[This is the updated Ubuntu File Browser:

Fully 30% of the window height is administrative debris. There are ten arrow buttons. The window close control is directly above the Edit menu.
Complexity is not your friend. Fitt’s Law is not your enemy.
]]></description>
			<content:encoded><![CDATA[<p>This is the <a href="http://www.jonobacon.org/2010/03/03/refreshing-the-ubuntu-brand/">updated</a> Ubuntu File Browser:</p>
<p><a href="http://atomized.org/wp-content/uploads/2010/03/ubuntu-wtf.png"><img src="http://atomized.org/wp-content/uploads/2010/03/ubuntu-wtf.png" alt="" title="Ubuntu’s new file manager." width="658" height="455" class="aligncenter size-full wp-image-696" /></a></p>
<p>Fully 30% of the window height is <a href="http://tomayko.com/writings/administrative-debris">administrative debris</a>. There are <strong>ten arrow buttons</strong>. The window close control is <a href="http://yokozar.org/blog/archives/194">directly above the Edit menu</a>.</p>
<p>Complexity is not your friend. <a href="http://en.wikipedia.org/wiki/Fitt's_law">Fitt’s Law</a> is not your enemy.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/03/why-i%e2%80%99m-not-switching-back-to-linux-any-time-soon/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Debug Tracing Cassandra With Lazyboy</title>
		<link>http://atomized.org/2010/02/debug-tracing-cassandra-with-lazyboy/</link>
		<comments>http://atomized.org/2010/02/debug-tracing-cassandra-with-lazyboy/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 15:07:40 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[lazyboy]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=690</guid>
		<description><![CDATA[Lazyboy 0.7.5 (which I just released) has a pretty great new feature, debug tracing. This is a great way to see what your application is doing and how long it takes. Using the debug trace facility is simple:
import lazyboy as lzb

lzb.add_pool('Keyspace', servers=['127.0.0.1:9160'], debug=True,
           slow_thresh=100)
conn = [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://github.com/digg/lazyboy/tree/lazyboy-0.7.5">Lazyboy 0.7.5</a> (which I just released) has a pretty great new feature, debug tracing. This is a great way to see what your application is doing and how long it takes. Using the debug trace facility is simple:</p>
<pre class="src src-python"><span style="color: #7f007f;">import</span> lazyboy <span style="color: #7f007f;">as</span> lzb

lzb.add_pool(<span style="color: #8b2252;">'Keyspace'</span>, servers=[<span style="color: #8b2252;">'127.0.0.1:9160'</span>], debug=<span style="color: #7f007f;">True</span>,
           slow_thresh=100)
<span style="color: #a0522d;">conn</span> = lzb.get_pool(<span style="color: #8b2252;">'Keyspace'</span>)
</pre>
<p>What this does is return a connection object with tracing enabled. Every call made to Cassandra will be logged at the <code>DEBUG</code> level, and any call which takes longer than <code>slow_thresh</code> milliseconds will be logged at the <code>WARNING</code> level. When you use Lazyboy, you’ll see logs in this form:</p>
<pre class="src src-python">lzb.slice_iterator(lzb.Key(<span style="color: #8b2252;">"Keyspace"</span>, <span style="color: #8b2252;">"ColumnFamily"</span>, <span style="color: #8b2252;">"RowKey"</span>), count=1)

<span style="color: #b22222;"># -&gt; DEBUG:DebugTraceClient:72ms: 127.0.0.1:9160 -&gt; get_slice(('Keyspace', 'RowKey', {'column_family': 'ColumnFamily', 'keyspace': 'Keyspace', 'super_column': None, 'key': 'RowKey'}, SlicePredicate(column_names=None, slice_range=SliceRange(count=1, start='', reversed=False, finish='')), 1), {})
</span>
lzb.slice_iterator(lzb.Key(<span style="color: #8b2252;">"Keyspace"</span>, <span style="color: #8b2252;">"ColumnFamily"</span>, <span style="color: #8b2252;">"RowKey"</span>))

<span style="color: #b22222;"># -&gt; WARNING:DebugTraceClient:861ms: 127.0.0.1:9160 -&gt; get_slice(('Keyspace', 'RowKey', {'column_family': 'ColumnFamily', 'keyspace': 'Keyspace', 'super_column': None, 'key': 'RowKey'}, SlicePredicate(column_names=None, slice_range=SliceRange(count=10000, start='', reversed=False, finish='')), 1), {})
</span></pre>
<p>This should be pretty self-explanatory. You can see what calls were made to the Thrift client, the exact arguments, and how long it took. If you’d like to use a custom logger, you can pass a logging instance in the <code>log</code> keyword:</p>
<pre class="src src-python"><span style="color: #7f007f;">import</span> logging

lzb.add_pool(<span style="color: #8b2252;">'Keyspace'</span>, servers=[<span style="color: #8b2252;">'127.0.0.1:9160'</span>], debug=<span style="color: #7f007f;">True</span>,
           slow_thresh=100, log=logging.getLogger(<span style="color: #8b2252;">'Lazyboy'</span>))
<span style="color: #a0522d;">conn</span> = lzb.get_pool(<span style="color: #8b2252;">'Keyspace'</span>)
</pre>
<p>You might want to do this to enable debugging, since the default logger configuration is set higher than <code>DEBUG</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/02/debug-tracing-cassandra-with-lazyboy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pep8 &amp; pylint in Emacs</title>
		<link>http://atomized.org/2010/02/pep8-pylint-in-emacs/</link>
		<comments>http://atomized.org/2010/02/pep8-pylint-in-emacs/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 19:02:00 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=685</guid>
		<description><![CDATA[I do a lot of hacking on Python these days, and of course, I use Emacs. The built-in python-mode has the ability to run pychecker on your source, but doesn&#8217;t integrate other tools. I like to run pep8.py &#038; pylint regularly to keep my code clean, so I hacked together compilation-derived modes to drive them.
Compile.el [...]]]></description>
			<content:encoded><![CDATA[<p>I do a lot of hacking on Python these days, and of course, I use Emacs. The built-in python-mode has the ability to run pychecker on your source, but doesn&#8217;t integrate other tools. I like to run pep8.py &#038; pylint regularly to keep my code clean, so I hacked together compilation-derived modes to drive them.</p>
<p>Compile.el is really great for this kind of thing, since it lets you quickly navigate over the lines mentioned in the program&#8217;s output. It&#8217;s quite efficient, and I enjoy it immensely. One note of interest: pep8.py doesn&#8217;t output line numbers in order, which confuses compile-mode. I just pipe the output through sort to work around this.</p>
<p>The code is on GitHub: <a href="http://gist.github.com/302847">python-pep8.el</a> and <a href="http://gist.github.com/302848">python-pylint.el</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/02/pep8-pylint-in-emacs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Problem With iPhone Gaming</title>
		<link>http://atomized.org/2010/02/a-problem-with-iphone-gaming/</link>
		<comments>http://atomized.org/2010/02/a-problem-with-iphone-gaming/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 07:50:13 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[assassin's creed]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=680</guid>
		<description><![CDATA[There’s a fairly irritating problem with many iPhone games. It drives me nuts. It’s the fixed use of the 90° counter-clockwise landscape orientation. If you look at this photo from the Assassin’s Creed Ⅱ demo at the Apple event back in September 2009, you can see what I mean:

The problem is that when you hold [...]]]></description>
			<content:encoded><![CDATA[<p>There’s a fairly irritating problem with many iPhone games. It drives me nuts. It’s the fixed use of the 90° counter-clockwise landscape orientation. If you look at this photo from the Assassin’s Creed Ⅱ demo at the Apple event back in September 2009, you can see what I mean:</p>
<div style="text-align: center"><img src="http://atomized.org/wp-content/uploads/2010/02/assassinscreed2iphone.jpg" alt="" title="Assassin’s Creed Ⅱ" width="450" height="500" class="aligncenter size-full wp-image-681"></div>
<p>The problem is that when you hold the phone, you cover the speaker and the headphone port. Whoops: No sound for you. Assassin’s Creed is far from the only game that does this. It seems like such a no-brainer, I don’t know why everybody chooses this orientation. Maybe developers are targeting iPod Touch instead of iPhone? Its headphone jack is in the top-right position when in the same orientation. It seems like a trivial thing to add, but nobody seems to do it. Hell, you could probably detect the type of device and put it in the right orientation automatically. Nobody does, and it sucks, and it bugs me whenever I try to play a game.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/02/a-problem-with-iphone-gaming/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Where Shall We Have Lunch?</title>
		<link>http://atomized.org/2009/12/where-shall-we-have-lunch/</link>
		<comments>http://atomized.org/2009/12/where-shall-we-have-lunch/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 18:59:05 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=669</guid>
		<description><![CDATA[In The Hitchhiker’s Guide to the Galaxy, Douglas Adams wrote:
The History of every major Galactic Civilization tends to pass through three distinct and recognizable phases, those of Survival, Inquiry and Sophistication, otherwise known as the How, Why and Where phases. For instance, the first phase is characterized by the question ‘How can we eat?’ the [...]]]></description>
			<content:encoded><![CDATA[<p>In <i>The Hitchhiker’s Guide to the Galaxy</i>, <a href="http://en.wikiquote.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy#Chapter_35">Douglas Adams wrote</a>:</p>
<blockquote><p>The History of every major Galactic Civilization tends to pass through three distinct and recognizable phases, those of Survival, Inquiry and Sophistication, otherwise known as the How, Why and Where phases. For instance, the first phase is characterized by the question ‘How can we eat?’ the second by the question ‘Why do we eat?’ and the third by the question ‘Where shall we have lunch?</p></blockquote>
<p></p>
<p>I think this applies directly to programming as well. I’d characterize the questions as:</p>
<ol>
<li>How can I do it?</li>
<li>Why did I do it like that?</li>
<li>What tool will do it for me?</li>
</ol>
<p>At first, a new programmer just wants to know how to make something work – You could also call this the <q>Why doesn’t this work?</q> question.  There’s a <a href="http://stackoverflow.com">whole</a> <a href="http://experts-exchange.com/">industry</a> around helping people – <a href="http://answers.yahoo.com/">not just programmers</a> – with the this problem. The failure of this approach is its tendency to create cargo-cult coders, programmers who can get something done, but can’t explain their choices or method. Many have no desire to, or may not even realize that they should. Their world is full of (in the words of Rumsfeld) unknown unknowns.</p>
<p>I think the advancement of a programmer is strongly linked to self-examination, figuring out why you did something and if there’s a better way. If you don’t understand the failings of your approach, you have no chance to improve it. Programming is strange, and hard, and unnatural, and it’s important to be vigilant about the code you write. Humans in general are creatures of habit, and programmers seem to be particularly vulnerable its stultifying effect. We rely heavily on techniques and patterns, and it’s easy to fall into the trap of habit and stop reflecting.</p>
<p>Asking why is one of my favorite interview tactics. I’ll look over the candidate’s site, or a project they worked on, and find something interesting or unusual to ask them about. People who are strong candidates have answers, and poor candidates don’t. Even if their reasons are dumb, or you don’t agree with them, the ability to explain their choices shows that <b>they thought about the problem.</b></p>
<p>One of the questions in <i>Coders at Work</i> was, (paraphrasing) <q>Do you think programming is engineering, craftsmanship, or something else?</q> I think it depends on the programmer – programming is what you make of it. Some programmers are craftsmen, some are engineers, and there sure are a lot of lowest-bid contractors out there.</p>
<p>It’s a very immature discipline, relative to the engineering or craftsmanship parallels. We’re still in the survival stage now, but it’s time to start challenging ourselves, reaching out for sophistication.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2009/12/where-shall-we-have-lunch/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>New Moleskine Day</title>
		<link>http://atomized.org/2009/12/new-moleskine-day-2/</link>
		<comments>http://atomized.org/2009/12/new-moleskine-day-2/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 00:43:55 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[journal]]></category>
		<category><![CDATA[moleskine]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=659</guid>
		<description><![CDATA[I decided to start writing regularly somewhere around 2006. I was feeling frustrated that my handwriting was illegible and difficult, and sought a way to improve it. I’ve kept a journal ever since, filling a page or two each time I sit down to write. I try to write daily, but sometimes I fail, and [...]]]></description>
			<content:encoded><![CDATA[<p>I decided to start writing regularly somewhere around 2006. I was feeling frustrated that my handwriting was illegible and difficult, and sought a way to improve it. I’ve kept a journal ever since, filling a page or two each time I sit down to write. I try to write daily, but sometimes I fail, and ther can be a period of a month or so between entries.</p>
<p>This is the second full-size Moleskine I’ve filled; This one lasted from August 2008 to December 2009, which is about as long as the first one. I went through a number of pens and inks on the first, but settled on a Pilot Knight fountain pen filled with Noodler’s Bulletproof Black by the time I finished it. I used the same pen through the second one, though I switched to Noodler’s Heart of Darkness and swapped the regluar medium nib for an italic.</p>

<a href='http://atomized.org/2009/12/new-moleskine-day-2/img_0612/' title='Journal, front'><img width="150" height="150" src="http://atomized.org/wp-content/uploads/2009/12/IMG_0612-150x150.jpg" class="attachment-thumbnail" alt="" title="Journal, front" /></a>
<a href='http://atomized.org/2009/12/new-moleskine-day-2/img_0613/' title='Journal, pages'><img width="150" height="150" src="http://atomized.org/wp-content/uploads/2009/12/IMG_0613-150x150.jpg" class="attachment-thumbnail" alt="" title="Journal, pages" /></a>
<a href='http://atomized.org/2009/12/new-moleskine-day-2/img_0614/' title='Journal, rear'><img width="150" height="150" src="http://atomized.org/wp-content/uploads/2009/12/IMG_0614-150x150.jpg" class="attachment-thumbnail" alt="" title="Journal, rear" /></a>

<p>I wrote on the right-hand page, and pasted a photo on from the day I wrote the entry on the opposite page. It’s a good feeling – the journal ends up with a nice heft, and it gives you a sense of progress. It adds literal weight to the words inside.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2009/12/new-moleskine-day-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I Have Failed at Minimalism</title>
		<link>http://atomized.org/2009/12/i-have-failed-at-minimalism/</link>
		<comments>http://atomized.org/2009/12/i-have-failed-at-minimalism/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 05:06:51 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=653</guid>
		<description><![CDATA[I recently went through a major shift in my life, which made me decide to fully embrace minimalism. My short-term goal was to dramatically reduce the number of my physical possessions, to the point where I could comfortably fit everything into a car.
I’m declaring it a failure.
Why?
I reevaluated what I consider important. Owning lots of [...]]]></description>
			<content:encoded><![CDATA[<p>I recently went through a major shift in my life, which made me decide to fully embrace minimalism. My short-term goal was to dramatically reduce the number of my physical possessions, to the point where I could comfortably fit everything into a car.</p>
<p>I’m declaring it a failure.</p>
<h2>Why?</h2>
<p>I reevaluated what I consider important. Owning lots of cool stuff not only seemed unimportant, it suddenly felt suffocating. It has to be stored and maintained and moved. I spent so much time and energy spent on these things which did nothing to improve my life.</p>
<p>I resolved two things:</p>
<ol>
<li>I would get rid of all the unnecessary stuff I have.</li>
<li>I wouldn’t buy any more.</li>
</ol>
<p>Minimalism is <i>hard</i>. Step one is <i>incredibly</i> hard. As humans, we find significance in all sorts of insignificant things. Nearly anything we come into possession to is imbued with this near-mystic emotional value. Maybe the thing itself isn’t important, but it reminds you of the time you got it, or who you got it from. I tried to turn a critical eye, but the proportion of things I got rid of to the things I didn’t was completely backwards.</p>
<p>Fortunately, I found the second goal easy. It has much value; it’s a minimalist preemptive strike. You don’t have to discard that which you don’t acquire.</p>
<p>I think there are multiple reasons why I failed, but the primary one is simply that <i>I wasn’t minimal in my approach to minimalism.</i> I saw minimalism as an end, but my chosen means was to boil the ocean.</p>
<p>While I consider this attempt a failure, I’m not giving up. It’s hard to reverse the trend of a few decades, but even a small step towards minimalism is a step in the right direction. So I’ll strive for it, and try to be more pragmatic in my decisions.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2009/12/i-have-failed-at-minimalism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conversation With A Craigslist Scammer</title>
		<link>http://atomized.org/2009/11/conversation-with-a-craigslist-scammer/</link>
		<comments>http://atomized.org/2009/11/conversation-with-a-craigslist-scammer/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 23:26:58 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=643</guid>
		<description><![CDATA[I recently posted my old MacBook Pro on Craigslist. It seems that any time you try to sell electronic stuff on Craigslist these days, you get scammers trying to get you to ship it to God knows where. I usually ignore these guys, but I felt like responding this time.
From: Dylan Lewis

I WANT TO KNOW [...]]]></description>
			<content:encoded><![CDATA[<p>I recently posted my old MacBook Pro on Craigslist. It seems that any time you try to sell electronic stuff on Craigslist these days, you get scammers trying to get you to ship it to God knows where. I usually ignore these guys, but I felt like responding this time.</p>
<div><em><em>From: Dylan Lewis</em></em></div>
<blockquote>
<p>I WANT TO KNOW IF YOUR ITEM IS STILL AVAILABLE FOR SALE?</p>
<p>Sent from iPhone</p>
</blockquote>
<p></p>
<div><em><em>From: Ian</em></em></div>
<blockquote>
<p>It is.</p>
</blockquote>
<p></p>
<div><em><em>From: Dylan</em></em></div>
<blockquote>
<p>Hello</p>
<p>Thank for your reply? Am very interested in buying your item and i will like to buy this item now reason is that i want to buy it for my son and i will be offer you $850 for the item so i will provide you $150 for the shipping cost so provide me your paypal email so that i can make the payment.</p>
<p>Thank</p>
</blockquote>
<p></p>
<p>I was only asking $750, so it’s pretty clear that this guy is a scammer.</p>
<div><em><em>From: Ian</em></em></div>
<blockquote>
<p>Your offer of $1000 is very generous, but not enough. I couldn&#8217;t possibly accept any less than $1200.</p>
</blockquote>
<p></p>
<div><em><em>From: Dylan</em></em></div>
<blockquote>
<p>ok&#8230;no problem i will pay $1200 for the item and send me your paypal email address so that i can make the payment&#8230;ok</p>
</blockquote>
<p></p>
<div><em><em>From: Ian</em></em></div>
<blockquote>
<p>I&#8217;m very sorry, I meant $1300. I apologize, I must have mistyped. It can be a little hard to ger thinga righy since I spilled that beer on the keyboard.</p>
<p>In addition to the $1300, I will also need two beers.</p>
</blockquote>
<p></p>
<div><em><em>From: Ian</em></em></div>
<blockquote>
<p>ok&#8230;no problem i will pay $1300 for the item and send me your paypal email address so that i can make the payment&#8230;ok</p>
</blockquote>
<p></p>
<div><em><em>From: Ian</em></em></div>
<blockquote>
<p>$1300 <em><em>and</em></em> two beers. I&#8217;m not sure how you can send me payment in beer over the Internet, as nobody has invented BeerPal yet.</p>
</blockquote>
<p></p>
<div><em><em>From: Ian</em></em></div>
<blockquote>
<p>Dylan, I haven&#8217;t heard back from you, and it makes me very sad. I&#8217;m sure your son would like this MacBook Pro very much, and it&#8217;s quite a bargain for $1300 and two beers.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2009/11/conversation-with-a-craigslist-scammer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Two unresolved Snow Leopard regressions</title>
		<link>http://atomized.org/2009/11/two-unresolved-snow-leopard-regressions/</link>
		<comments>http://atomized.org/2009/11/two-unresolved-snow-leopard-regressions/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 00:22:37 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=640</guid>
		<description><![CDATA[
If your wallpaper is stored on your iDisk, it is reset to the default when you reboot. In 10.5, the wallpaper was copied to the local disk; in 10.6, it’s loaded from the remote disk. In order to change it back, one must first change the wallpaper to a different one &#8211; even though it [...]]]></description>
			<content:encoded><![CDATA[<ol>
<li>If your wallpaper is stored on your iDisk, it is reset to the default when you reboot. In 10.5, the wallpaper was copied to the local disk; in 10.6, it’s loaded from the remote disk. In order to change it back, one must first change the wallpaper to a different one &#8211; even though it is displaying the default, OS X continues to think that it&#8217;s using the correct one, and does nothing when you give it the same file.</li>
<li>It is significantly harder to drag and drop in between Spaces. In 10.5, you could begin dragging a file, activate Spaces, move the pointer to the desired space, and deactivate Spaces; you would be switched to the correct space. In 10.6, the space is not activated until it is clicked, which is impossible when dragging a file. If you deactivate spaces with the pointer on the desired space, you are sent back where you started. In order to drag between Spaces in 10.6, you must hover the pointer over the target space for a few seconds instead.</li>
</ol>
<p>Additionally, the animation when switching Spaces is significantly slower and less smooth.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2009/11/two-unresolved-snow-leopard-regressions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP Objects: Still Pretty Damn Slow</title>
		<link>http://atomized.org/2009/11/php-objects-still-pretty-damn-slow/</link>
		<comments>http://atomized.org/2009/11/php-objects-still-pretty-damn-slow/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 00:56:00 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=626</guid>
		<description><![CDATA[Brandon Savage takes issue with my post benchmarking objects and arrays.
His argument is a straw man. My post is about a specific application – simple, flat data, where the primary concern is ease of syntax for accessing that data. He generalizes that position into one of OOP vs. non-OOP, which is not even remotely close [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.brandonsavage.net/">Brandon Savage</a> <a href="http://www.brandonsavage.net/five-tips-to-make-good-object-oriented-code-better/">takes issue</a> with my post <a href="/2009/02/really-damn-slow-a-look-at-php-objects/">benchmarking objects and arrays</a>.</p>
<p>His argument is a straw man. My post is about a specific application – simple, flat data, where the primary concern is ease of syntax for accessing that data. He generalizes that position into one of OOP vs. non-OOP, which is not even remotely close to what I wrote.</p>
<p>So, let me be clear. OOP is, generally, good. His tips on writing OOP code are also generally good. In fact, I <a href="http://github.com/digg/pattern">wrote a  class</a> to make dependency injection painless. Other paradigms, like functional programming, are also good.</p>
<p>This is not about that. This is about what’s faster for simple data storage: arrays or stdClass instances. The answer was, and still is, arrays.</p>
<p>I took the code from the previous post and re-ran it against PHP 5.3.0 on Snow Leopard. Everything else is is the same as in the other test. I added two new measures. One using <code>$x = array('a' => 'a', 'b' => 'b')</code>, and one with an object class with a constructor, like so:</p>
<pre language="php">
class AnObject
{
    public $a;
    public $b;

    public function __construct($a, $b)
    {
        $this->a = $a;
        $this->b = $b;
    }
}
</pre>
<p>Here are the results:</p>
<table>
<thead>
<tr>
<th>Method</th>
<th>Time (in seconds)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Arrays (create, then assign)</td>
<td>.6226</td>
</tr>
<tr>
<td>Arrays (literal syntax)</td>
<td>.5346</td>
</tr>
<tr>
<td>Objects (create, then assign)</td>
<td>1.01</td>
</tr>
<tr>
<td>Objects (assign in constructor)</td>
<td>1.4354</td>
</tr>
</tbody>
</table>
<p>As you can see, things are better than in PHP 5.2, but arrays are still faster in every case.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2009/11/php-objects-still-pretty-damn-slow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
