<?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>Tue, 31 Aug 2010 18:00:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>I’m Not Going Back</title>
		<link>http://atomized.org/2010/08/i%e2%80%99m-not-going-back/</link>
		<comments>http://atomized.org/2010/08/i%e2%80%99m-not-going-back/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 17:20:16 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[digg]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=777</guid>
		<description><![CDATA[I’ve gotten a lot of responses to my post about Digg, and I want to clarify a couple things. Talent I wrote, Even if they still have the systems and the desire to roll back, they don’t have the talent to maintain Digg v3. I wasn’t saying that the current team is untalented. I know [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve gotten a lot of responses to <a href="http://atomized.org/2010/08/they-can%e2%80%99t-go-back/">my post about Digg</a>, and I want to clarify a couple things.</p>
<h2>Talent</h2>
<p>I wrote, <q>Even if they still have the systems and the desire to roll back, they don’t have the talent to maintain Digg v3.</q> I wasn’t saying that the current team is untalented. I know them to be an extremely bright group, and I have great respect for them. They are my friends and co-workers, and I meant them no disrespect.</p>
<p>I’ll put it another way: The institutional knowledge needed to maintain and extend Digg v3 no longer exists. The people who knew how Digg v3 works – and more importantly <em>why</em> it works that way – are gone. The people who still work there haven&#8217;t worked with the v3 code in any significant way in many months. It’s not that they <em>couldn’t</em> do it, but it would take some time to get up to speed with the v3 code.</p>
<p>Every indication from Digg has been that they will continue iterating on v4, and I think that’s the right thing to do. But I also think that going back is simply not an option, for the reasons I outlined.</p>
<h2>Failure</h2>
<p>I also said, <q>rolling back to v3 would be an admission that v4 is a failure,</q> which some might see as me calling v4 a failure. I don&#8217;t think that’s the case; it’s too early to say that it’s a failure or a success. Certainly, some people are upset, and this should surprise no one. Everyone at Digg knew that <em>any change</em> would make some number of users angry.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/08/i%e2%80%99m-not-going-back/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>They Can’t Go Back</title>
		<link>http://atomized.org/2010/08/they-can%e2%80%99t-go-back/</link>
		<comments>http://atomized.org/2010/08/they-can%e2%80%99t-go-back/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 03:59:07 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[digg]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=767</guid>
		<description><![CDATA[Digg v4 finally launched last week, and it’s taking a lot of fire, for both design decisions and technical issues. There are a lot of angry users asking them to go back to the old version. This is simply not going to happen. Love it or hate it, v4 is here to stay. Digg v4 [...]]]></description>
			<content:encoded><![CDATA[<p>Digg v4 finally launched last week, and it’s <a href="http://t3chh3lp.com/blog/tomorrow-is-abandon-digg-day-its-getting-ugly.html">taking a lot</a> <a href="http://digg.com/news/technology/digg_4_goes_live_ish_to_the_public">of fire</a>, for both design decisions and technical issues. There are a lot of angry users <a href="http://www.gopetition.com/petitions/we-want-old-digg-back.html">asking them to go back to the old version</a>. This is simply not going to happen. Love it or hate it, v4 is here to stay.</p>
<p>Digg v4 is not a redesign, not a reskin, it is a 100% <i>rewrite</i>. It’s completely new design, code, architecture, and infrastructure. It has almost no relationship to the v3 system whatsoever.</p>
<p>When we were figuring out how to launch v4, we settled on an extended side-by-side beta alongside v3, with a cutover when it was deemed good enough.</p>
<p>There were a few options on the table for managing the transition:</p>
<ol>
<li>Keep the data completely separate during the beta period.</li>
<li>Have a one-way migration, where actions on v3 would show up on v4.</li>
<li>Have a two-way migration, where actions on either site would show up on the other.</li>
</ol>
<p>We abandoned #1 because it would make the beta site less useful, and we’d still have to migrate the data eventually. We also wanted to be able to test v4 with the same data as we had on v3 to shake out bugs and get a feeling for the differences.</p>
<p>Option #3 was axed due to complexity. We didn’t even know what v4 would be like, and there might not be equivalent actions; and we didn’t have time to solve the problem of suppressing looping actions. That left #2 as the only viable option, and that’s the one we went with.</p>
<p>Now, assuming they deployed new servers for v4 and left the ones with v3 systems alone, it <i>might</i> be possible to relaunch Digg v3. It’s extremely unlikely it will ever happen, because it wouldn’t have any of the data accumulated since v4 launched. Getting all the data back into v3 would be a significant undertaking, and they’re still trying to get v4 under control. Not to mention the huge political implications: Rolling back to v3 would be an admission that v4 is a failure, and I just don’t see that happening.</p>
<p><ins datetime="2010-08-31T04:07:23+00:00">I forgot to add: Even if they still have the systems and the desire to roll back, they don’t have the talent to maintain Digg v3. Nearly everyone who built and worked on the legacy Digg codebase has left the company. When I started at Digg, the engineering team was: Joe Stump, Matt Erkkila, Eli White, Steve Williams, Steve French, Kurt Wilms, Nancy White, Bill Shupp, and Micah Snyder. Operations had Ron Gorodetzky, Scott Baker, and Tim Ellis. Except for Matt, everyone else has moved on. There were others, but those people were the core team that made the legacy code work, and they’re gone now.</ins></p>
<p><ins datetime="2010-08-31T17:54:43+00:00">Edited again to add: <a href="http://atomized.org/2010/08/i%E2%80%99m-not-going-back/">I wasn’t saying that the current team is untalented</a>. I know them to be an extremely bright group, and I have great respect for them.</ins></p>
<p><em>Disclaimer: I worked for Digg from 2008-2010, and wrote a lot of the early code that would become Digg v4. I left Digg in May. My opinions are purely my own, and I have no inside knowledge of what has happened since I left or what will be happen in the future.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/08/they-can%e2%80%99t-go-back/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Hudson/GitHub build process that works</title>
		<link>http://atomized.org/2010/08/a-hudsongithub-build-process-that-works/</link>
		<comments>http://atomized.org/2010/08/a-hudsongithub-build-process-that-works/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 23:10:44 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[simplegeo]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=759</guid>
		<description><![CDATA[I’m a huge fan of Hudson, and have been since I discovered it. The biggest issue I’ve had with it is that the Git plugin just isn’t very good. The situation has improved lately, with Andrew Bayer making significant improvements. With the features he’s added, reasonable and non-hacky workflows are no possible. After some experimentation, [...]]]></description>
			<content:encoded><![CDATA[<p>I’m a huge fan of <a href="http://hudson-ci.org">Hudson</a>, and have been since I discovered it. The biggest issue I’ve had with it is that the <a href="http://wiki.hudson-ci.org/display/HUDSON/Git+Plugin">Git plugin</a> just isn’t very good.</p>
<p>The <a href="http://issues.hudson-ci.org/browse/HUDSON-7276">situation</a> <a href="http://issues.hudson-ci.org/browse/HUDSON-7176">has</a> <a href="http://issues.hudson-ci.org/browse/HUDSON-6902">improved</a> <a href="http://issues.hudson-ci.org/browse/HUDSON-6856">lately</a>, with <a href="http://github.com/abayer">Andrew Bayer</a> making significant improvements. With the features he’s added, reasonable and non-hacky workflows are no possible.</p>
<p>After some experimentation, this is what we’ve settled on at SimpleGeo:</p>
<ol>
<li>Developers work on whatever branches they choose.</li>
<li>The work is reviewed and merged to the <code>pending</code> branch when it passes.</li>
<li>Hudson polls the <code>pending</code>branch. Changes are merged to <code>master</code> (in the repo on Hudson), and the build is performed.</li>
<li>If the build was successful, the result is pushed to the <code>master</code> branch of the repo on GitHub.</li>
</ol>
<p>This works extremely well with GitHub’s Organizations and forking mechanism. Everyone at SimpleGeo has read-only access to all our repos. Each repo is owned by a particular team, and all team members have read-write access. Because of how Organizations work, any member can fork a private repo, and it will stay private — they don’t even need to be on a paid account. If someone wants to contribute to another team’s code, they just fork it, commit to their fork, and send a pull request to the owners. From there, the changes get reviewed and integrated into the <code>pending</code> branch, which triggers Hudson.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/08/a-hudsongithub-build-process-that-works/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Frame tiling and centering in Emacs</title>
		<link>http://atomized.org/2010/08/frame-tiling-and-centering-in-emacs/</link>
		<comments>http://atomized.org/2010/08/frame-tiling-and-centering-in-emacs/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 02:05:46 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=751</guid>
		<description><![CDATA[Since Emacs predates the widespread adoption of the modern GUI andmouse, its vernacular can be somewhat hard to follow. What you would call a window in a modern GUI is called a frame in Emacs. A window is a panel of a frame in Emacs. Most window managers have some facility to arrange the visible [...]]]></description>
			<content:encoded><![CDATA[<p>Since Emacs predates the widespread adoption of the modern GUI andmouse, its vernacular can be somewhat hard to follow. What you would call a <i>window</i> in a modern GUI is called a <i>frame</i> in Emacs. A <i>window</i> is a panel of a frame in Emacs.</p>
<p>Most window managers have some facility to arrange the visible windows. With Emacs, you cna programmatically manipulate a frame’s size and position from Lisp.</p>
<p>There are a few ways I like to arrange my Emacs frames. I generally use one or two – more are harder to manage – and dedicate them to specific purposes. One always has code buffers in it, and the other can have compilation buffers, IRC, w3m, unit test output, or any other variety of programming-related tools.</p>
<p>When I work with a single frame, I like it to be centered on my screen. When I have two, I like them to be next to each other, in the center. Since it’s hard to align by hand, I wrote some code do to it for me.</p>
<pre>
(defun screen-usable-height (&#038;optional display)
  "Return the usable height of the display.

Some window-systems have portions of the screen which Emacs
cannot address. This function should return the height of the
screen, minus anything which is not usable."
  (- (display-pixel-height display)
     (cond ((eq window-system 'ns) 22)
           (t 0))))

(defun screen-usable-width (&#038;optional display)
  "Return the usable width of the display.

This works like `screen-usable-height', but for the width of the display."
  (display-pixel-width display))

(defun frame-sort-ltr (frames)
  "Sort frames by their visual order, left to right.

This method takes a list of frames, and returns that list, sorted
by the visual display order. This is determined by comparing the
left position of the frames; the leftmost frames are returned
first."
  (sort frames (lambda (framea frameb)
                 (< (frame-parameter framea 'left)
                    (frame-parameter frameb 'left)))))

(defun frame-box-get-center (w h cw ch)
  "Center a box inside another box.

Returns a list of `(TOP LEFT)' representing the centered position
of the box `(w h)' inside the box `(cw ch)'."
  (list (/ (- cw w) 2) (/ (- ch h) 2)))

(defun frame-get-center (frame)
  "Return the center position of FRAME on its display."
  (frame-box-get-center (frame-pixel-width frame) (frame-pixel-height frame)
                        (screen-usable-width) (screen-usable-height)))

(defun frame-center (&#038;optional frame)
  "Center a frame on the screen."
  (interactive)
  (apply 'set-frame-position
         `(,(or frame (selected-frame)) ,@(frame-get-center frame))))

(defun frame-tile-horizonal ()
  "Tile visible frames horizontally.

This function tiles visible frames, distributing them evenly
across the display, and centering them vertically.

It doesn't know about multi-head displays, and will probably fail
dramatically if used in such an environment."
  (interactive)
  (let ((pos)
        (offset 0)
        (vwidth (/ (screen-usable-width) (length (visible-frame-list)))))
    (dolist (frame (frame-sort-ltr (visible-frame-list)))
      (setq pos (frame-box-get-center (frame-pixel-width frame)
                                      (frame-pixel-height frame)
                                      vwidth (screen-usable-height)))
      (set-frame-position frame (+ offset (car pos)) (cadr pos))
      (incf offset vwidth))))

(defun frame-tile-center-horizonal ()
  "Tile visible frames horizontally, center-weighted.

Rather than tiling frames evenly across the available width of
the display, this function tiles them into the center of the
display, adding a 2% margin in between frames.

It doesn't know about multi-head displays, and will probably fail
dramatically if used in such an environment."
  (interactive)
  (let* ((framewidth (apply '+ (mapcar 'frame-pixel-width (visible-frame-list))))
         (margin (/ (screen-usable-width) 50)) ;; = (/ s-u-w *.02) = 2%
         (totalwidth (+ framewidth (* margin
                                      (- (length (visible-frame-list)) 1))))
         (offset (car (frame-box-get-center totalwidth 0 (screen-usable-width)
                                            (screen-usable-height)))))

    (dolist (frame (frame-sort-ltr (visible-frame-list)))
      (set-frame-position frame offset (cadr (frame-get-center frame)))
      (incf offset (+ margin (frame-pixel-width frame))))))

(defun frame-restore-defaults (frame)
  (modify-frame-parameters frame default-frame-alist))

(defun frame-default ()
  (interactive)
  (mapcar 'frame-restore-defaults (frame-list))
  (if (> (length (frame-list)) 1)
      (frame-tile-center-horizonal)
    (frame-center)))

(provide 'ime-frame)
</pre>
<p>You can also call <code>M-x frame-tile-center-horizonal</code> or <code>M-x frame-center</code> by hand, if you like.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/08/frame-tiling-and-centering-in-emacs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scratch buffers for Emacs</title>
		<link>http://atomized.org/2010/08/scratch-buffers-for-emacs/</link>
		<comments>http://atomized.org/2010/08/scratch-buffers-for-emacs/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 03:44:55 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=748</guid>
		<description><![CDATA[I often find myself needing to quickly work on some code that’s mostly unrelated to my task at hand. This comes up often when pair programming and code reviews, where you might want to illustrate a tactic without adding useless code to your current buffer. Ordinarily, you’d use *scratch*, but it’s useful to have your [...]]]></description>
			<content:encoded><![CDATA[<p>I often find myself needing to quickly work on some code that’s mostly unrelated to my task at hand. This comes up often when pair programming and code reviews, where you might want to illustrate a tactic without adding useless code to your current buffer.</p>
<p>Ordinarily, you’d use <code>*scratch*</code>, but it’s useful to have your scratch buffer use mode for the language you want to write code in, and <code>*scratch*</code> doesn’t fulfill this unless you’re hacking on emacs-lisp.</p>
<p>To this end, I created <a href="http://github.com/ieure/scratch-el">scratch-el</a>, a bit of code for doing just this.</p>
<p>When you invoke it with <code>M-x scratch</code>, it gives you a scratch buffer with the same mode as your current buffer. So if you’re editing Python code, you get a <code>*python*</code> buffer which uses python-mode. If you’re in a shell, you get a shell-script-mode buffer, and so on.</p>
<p>If you invoke it with a prefix argument, as <code>C-u M-x scratch</code>, it will prompt you for the mode to use, which can be helpful if you want to noodle on a SQL query while editing your app code. There is tab completion support for all known major modes.</p>
<p>If you want to save the resulting work, it’s just a <code>C-x C-w</code> away.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/08/scratch-buffers-for-emacs/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Reading Apress PDF eBooks on an iPad</title>
		<link>http://atomized.org/2010/06/reading-apress-pdf-ebooks-on-an-ipad/</link>
		<comments>http://atomized.org/2010/06/reading-apress-pdf-ebooks-on-an-ipad/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 18:29:20 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[apress]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=740</guid>
		<description><![CDATA[Say that you’ve recently purchased an Apress eBook in PDF form. Say that you’d like to read this book on your iPad or other mobile reading device. Say that it’s unlikely that your device will support the password protection which is applied to your eBook. Say that, despite this, you would prefer to read your [...]]]></description>
			<content:encoded><![CDATA[<p>Say that you’ve recently purchased an Apress eBook in PDF form. Say that you’d like to read this book on your iPad or other mobile reading device. Say that it’s unlikely that your device will support the password protection which is applied to your eBook. Say that, despite this, you would prefer to read your eBook however you damn well please.</p>
<ol>
<li>Own a Mac. If you do not currently own a Mac, go purchase one. I’ll wait.</li>
<li>Open the PDF in Preview.</li>
<li>Enter the password when prompted. (<a href="http://twitter.com/ieure/status/17431341971">Which, inexplicably, is your email address</a>.)</li>
<li>File→Save As</li>
<li><code>YOU_SUCK_APRESS.pdf</code></li>
<li>Rejoice in the knowledge that you can read your book however you please, despite the fact that it would have been easier to steal than purchase. Also, if you didn’t previously own a Mac, they’re pretty great, too.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/06/reading-apress-pdf-ebooks-on-an-ipad/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Resolving Merge Conflicts the Easy Way with SMerge &amp; KMacro</title>
		<link>http://atomized.org/2010/06/resolving-merge-conflicts-the-easy-way-with-smerge-kmacro/</link>
		<comments>http://atomized.org/2010/06/resolving-merge-conflicts-the-easy-way-with-smerge-kmacro/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 17:58:48 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[conflicts]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[merging]]></category>
		<category><![CDATA[resolve]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=732</guid>
		<description><![CDATA[If you&#8217;ve ever had to deal with merge conflicts, you know it&#8217;s not much fun. Fortunately, Emacs can help. Piece of Cake The first component we&#8217;re going to work with is smerge. SMerge is invaluable; it&#8217;s a minor mode which allows you to quickly navigate between conflicts and choose which you&#8217;d like to keep. Normally, [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever had to deal with merge conflicts, you know it&#8217;s not much fun. Fortunately, Emacs can help.</p>
<h2>Piece of Cake</h2>
<p>The first component we&#8217;re going to work with is <em>smerge</em>. SMerge is invaluable; it&#8217;s a minor mode which allows you to quickly navigate between conflicts and choose which you&#8217;d like to keep. Normally, you must invoke it explicitly with <code>M-x smerge-mode</code>, but there’s an easier way.</p>
<pre>
(defun sm-try-smerge ()
  (save-excursion
    (goto-char (point-min))
    (when (re-search-forward "^<<<<<<< " nil t)
      (smerge-mode 1))))

(add-hook 'find-file-hook 'sm-try-smerge t)
</pre>
<p>Throw this in your <code>.emacs</code>, and smerge-mode will be enabled for files which contain conflict markers. If you’re a Git user (and you should be), the markers will have the branch names they came from tacked on the end. The minor mode will disable itself when there are no more conflicts left in the buffer.</p>
<p>All SMerge’s bindings start with a shared prefix, which is <code>C-c ^</code> by default. This is somewhat cumbersome, but you can change it in customize (<code>M-x customize-variable RET smerge-command-prefix RET</code>). The bindings you’ll want to be familiar with are:</p>
<ul>
<li><code>C-c ^ n</code> – Move to the next conflict.</li>
<li><code>C-c ^ p</code> – Move to the previous conflict.</li>
<li><code>C-c ^ RET</code> – Keep the version of the code point resides in.</li>
<li><code>C-c ^ m</code> – Keep <em>my</em> version of the code. This is the version that was in the branch you merged <em>to</em>.</li>
<li><code>C-c ^ o</code> – Keep the <em>other</em> version of the code. This is the version that was in the branch you merged <em>from</em>.</li>
<li><code>C-c ^ a</code> – Keep <em>all</em> versions of the code. You’ll probably need to edit it to completely resolve the conflict.</li>
</ul>
<h2>Another Slice</h2>
<p>Let’s say that you have a file where you want to resolve each conflict the same way. You either want to keep the changes from the branch you merged, or the changes you've made in your branch. SMerge helps a lot with this, but there’s not reason to kill your fingers when you have KMacro. Let’s assume that you want changes in the branch you merged to take precedence.</p>
<ol>
<li><code>C-x (</code> – Start recording a keyboard macro.</li>
<li><code>C-x ^ n</code> – Move to the next conflict.</li>
<li><code>C-x ^ o</code> – Resolve the conflict by choosing the other version.</li>
<li><code>C-x )</code> – Stop recording the macro.</li>
</ol>
<p>Now, you can apply this macro as many times as you like with:</p>
<ol>
<li><code>M-x kmacro-call-macro RET</code> – Run the macro.</li>
<li><code>RET</code> – Run the macro again; repeat until all conflicts are resolved.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/06/resolving-merge-conflicts-the-easy-way-with-smerge-kmacro/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>So long, unlimited data</title>
		<link>http://atomized.org/2010/06/so-long-unlimited-data/</link>
		<comments>http://atomized.org/2010/06/so-long-unlimited-data/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 17:11:11 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[at&t]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=721</guid>
		<description><![CDATA[So AT&#038;T has just axed unlimited data plans for iPhone &#038; iPad, replacing them with ever so slightly cheaper (by $5) plans capped at 2gb. You can argue that this doesn&#8217;t affect that many people, that most people will pay less and be fine, but I think the more interesting angle is how this reveals [...]]]></description>
			<content:encoded><![CDATA[<p>So AT&#038;T has just <a href="http://theappleblog.com/2010/06/02/att-announces-iphone-tethering-cuts-price-and-quality-of-3g-service/">axed unlimited data plans</a> for iPhone &#038; iPad, replacing them with ever so slightly cheaper (by $5) plans capped at 2gb.</p>
<p>You can argue that this doesn&#8217;t affect that many people, that most people will pay less and be fine, but I think the more interesting angle is how this reveals how AT&#038;T just does not understand user experience the way Apple does. With unlimited data, you can whip out your phone wherever you are and use it. You never have to worry about your data usage, ever. Because you don&#8217;t have that barrier, you use the phone more. Because you use the phone more, you&#8217;re going to buy more apps and tell your friends, and they&#8217;ll buy phones and apps. It creates an ecosystem of consumption where everyone wins.</p>
<p>But now? Now you&#8217;ll be tempted to go look at your usage before streaming that movie. Now there will be a psychological barrier, however small, that makes you think twice about using your phone. More friction in the user experience. What Apple understands is that this friction, no matter how small, is an impediment to using the device, and they seek to eliminate as much of it as possible. AT&#038;T either <a href="http://www.fakesteve.net/2009/12/a-not-so-brief-chat-with-randall-stephenson-of-att.html">doesn&#8217;t understand or doesn&#8217;t care</a>.</p>
<p>I have a rule of thumb, which is: Any deal, no matter how good it may seem to you, is usually more beneficial to the offerer. For example, how many times have you been offered 15% off your purchase if you sign up for a store credit card? I <em>guarantee</em> that they make the offer because they know that they will more than make up that one-time 15% on recurring fees, interest, and profit from purchases made with the card.</p>
<p>There&#8217;s just no way AT&#038;T would do this unless they made money by doing it. Since they&#8217;re cutting the cost of the plan, you know they&#8217;re going to make that up somewhere. <a href="http://blog.nielsen.com/nielsenwire/online_mobile/iphone-users-watch-more-video-and-are-older-than-you-think/">There are 6.4 million active iPhone users in the US</a>, which adds up to $32m in lost revenue at $5 less per user.</p>
<p>Where do you think they&#8217;re going to make that up? Some of it is going to be in overages, though <a href="http://twitter.com/chartier/status/15253908750">AT&#038;T is more reasonable than some</a>. But I&#8217;d wager that a big part of it comes from the recently announced <a href="http://www.zdnet.com/blog/btl/at-ts-etf-hike-lock-in-those-iphone-customers-for-as-long-as-possible/34871">ETF hike</a>, which nearly doubled for iPhone users.</p>
<p>The only bright side to all this is that it seems like they&#8217;re telegraphing and end to iPhone exclusivity. They&#8217;re lowering the cost of staying slightly and significantly taxing the cost to exit, which suggests knowledge of a user exodus and an attempt to prevent it.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/06/so-long-unlimited-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs builds on hiatus</title>
		<link>http://atomized.org/2010/05/emacs-builds-on-hiatus/</link>
		<comments>http://atomized.org/2010/05/emacs-builds-on-hiatus/#comments</comments>
		<pubDate>Tue, 04 May 2010 17:30:50 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=719</guid>
		<description><![CDATA[My nightly Cocoa Emacs builds are going on a brief hiatus while I reshuffle things. They should be back soon, hosted on Amazon S3 like the official 23.1 release.]]></description>
			<content:encoded><![CDATA[<p>My <a href="http://atomized.org/wp-content/cocoa-emacs-nightly/">nightly Cocoa Emacs</a> builds are going on a brief hiatus while I reshuffle things.</p>
<p>They should be back soon, hosted on Amazon S3 like the official 23.1 release.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/05/emacs-builds-on-hiatus/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Brief Note on iPad</title>
		<link>http://atomized.org/2010/04/brief-note-on-ipad/</link>
		<comments>http://atomized.org/2010/04/brief-note-on-ipad/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 01:17:12 +0000</pubDate>
		<dc:creator>Ian</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[ipad]]></category>

		<guid isPermaLink="false">http://atomized.org/?p=708</guid>
		<description><![CDATA[Item Cost in 2009 (1977) USD Apple Ⅱ w/4kb RAM $4,542.41 ($1,298) 16gb WiFi iPad $499 Developer Program $99 13” MacBook Pro $1,199 Subtotal $1,797 Difference $2,745.41 Even if the iPad/iPhone ecosystem is less open in the comes-with-schematics sense, it’s far more accessible. For less than $2,000, you have access to the same tools and [...]]]></description>
			<content:encoded><![CDATA[<table>
<tr>
<th>Item</th>
<th>Cost in 2009 (1977) USD</th>
</tr>
<tr>
<td><a href="http://en.wikipedia.org/wiki/Apple_2#cite_ref-8">Apple Ⅱ w/4kb RAM</a></td>
<td>$4,542.41 ($1,298)</td>
</tr>
<tr>
<td><a href="http://store.apple.com/us/browse/home/shop_ipad/family/ipad?mco=OTY2ODA0NQ">16gb WiFi iPad</a></td>
<td>$499</td>
</tr>
<tr>
<td>Developer Program</td>
<td>$99</td>
</tr>
<tr>
<td><a href="http://store.apple.com/us/browse/home/shop_mac/family/macbook_pro?mco=OTY2ODExMA">13” MacBook Pro</a></td>
<td>$1,199</td>
</tr>
<tr>
<th>Subtotal</th>
<th>$1,797</th>
</tr>
<tr>
<th>Difference</th>
<th>$2,745.41</th>
</tr>
</table>
<p>Even if the iPad/iPhone ecosystem is less open in the <a href="http://www.boingboing.net/2010/04/02/why-i-wont-buy-an-ipad-and-think-you-shouldnt-either.html">comes-with-schematics sense</a>, it’s far more <em>accessible</em>. For less than $2,000, you have access to the same tools and marketplace as anyone else.</p>
<p>For every get-off-my-lawn iPad curmudgeon, I bet there’s a half dozen kids who see slick apps and decide to go build their own.</p>
]]></content:encoded>
			<wfw:commentRss>http://atomized.org/2010/04/brief-note-on-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.160 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-02 17:13:58 -->
