<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.potionfactory.com" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Software Development</title>
 <link>http://www.potionfactory.com/blog/archives/software-development/feed</link>
 <description>The taxonomy view with a depth of 0.</description>
 <language>en</language>
<item>
 <title>Interview of Yours Truly</title>
 <link>http://www.potionfactory.com/blog/2008/05/19/interview-yours-truly</link>
 <description>&lt;p&gt;Will Holmes was kind enough to interview me on his blog. I talk about square watermelons and Don Norman. I hear they&#039;re giving away licenses of Tangerine! and Voice Candy too.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://wphj.wordpress.com/2008/05/19/potion-factory-interview-giveaway/&quot; rel=&quot;nofollow&quot;&gt;Link to Interview&lt;/a&gt;&lt;/p&gt;
</description>
 <comments>http://www.potionfactory.com/blog/2008/05/19/interview-yours-truly#comments</comments>
 <category domain="http://www.potionfactory.com/blog/archives/potion-factory">Potion Factory</category>
 <category domain="http://www.potionfactory.com/blog/archives/software-development">Software Development</category>
 <pubDate>Mon, 19 May 2008 15:19:18 -0700</pubDate>
 <dc:creator>Andy Kim</dc:creator>
 <guid isPermaLink="false">228 at http://www.potionfactory.com</guid>
</item>
<item>
 <title>Best Crash Report Ever</title>
 <link>http://www.potionfactory.com/blog/2008/01/06/best-crash-report-ever</link>
 <description>&lt;p&gt;I was chatting with a developer friend about crash reports and as one thing led to another, after a quick Gmail search, I ended up showing him this one particular crash report I got sometime last year:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
A flash of lightning could be seen through the north-facing window, the squak of the dark night&#039;s crow taunted me from a distance as I just reloaded the library in Tangerine. Shortly after a masked butcher, knife and all, broke through my thrice-locked front door barking threats of murder, Tangerine! unexpectedly quit. As a father feels when he loses his son, I felt an overwhelming sadness until I was warmly greeted by Apple&#039;s &quot;YOUR PROGRAM CRASHED, BROTHA!!&quot; window suggesting I relaunch Tangerine. That&#039;s what brings me here, composing this message to you. I have personally attached the Crash Long Contents for your reviewal. I can only hope, pray, that you will use it to correct the wrong that I have experienced. Now I must bid you adieu.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I cringe whenever I get a crash report, but if they were all like this, I wouldn&#039;t mind so much.&lt;/p&gt;
&lt;p&gt;It&#039;s from a Mr. Eric L. Pheterson. I hope he doesn&#039;t mind my publishing it here. Oh, and the bug was fixed a long time ago.&lt;/p&gt;
</description>
 <comments>http://www.potionfactory.com/blog/2008/01/06/best-crash-report-ever#comments</comments>
 <category domain="http://www.potionfactory.com/blog/archives/cool">Cool</category>
 <category domain="http://www.potionfactory.com/blog/archives/software-development">Software Development</category>
 <category domain="http://www.potionfactory.com/blog/archives/tangerine">Tangerine!</category>
 <pubDate>Sun, 06 Jan 2008 16:32:42 -0800</pubDate>
 <dc:creator>Andy Kim</dc:creator>
 <guid isPermaLink="false">223 at http://www.potionfactory.com</guid>
</item>
<item>
 <title>How to Keep Backwards Compatibility and be Less Grumpy About It</title>
 <link>http://www.potionfactory.com/blog/2007/11/04/how-keep-backwards-compatibility-and-be-less-grumpy-about-it</link>
 <description>&lt;p&gt;I dread backwards compatibility. I dread it because it means that for every product that I need to keep backwards compatible, the testing burden is at least twice as big. The math is simple: testing on two major OS versions and two processor types can be as much as 4 times of stuff I&#039;d rather not be doing.&lt;/p&gt;
&lt;p&gt;The last time I had to maintain a product with backwards compatibility, this is what I used to do:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build then copy application to test machine.&lt;/li&gt;
&lt;li&gt;Get it to fail. This is the one part where I don&#039;t have to work very hard.&lt;/li&gt;
&lt;li&gt;Try to fix while scratching head then proceed to littering print statements all over the code.&lt;/li&gt;
&lt;li&gt;Go back to step 1.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can make this process a little less sucky by configuring Xcode to copy after each build, or by mounting a share so that there&#039;s no copying at all. But in the end, debugging with print statements alone is limiting and time consuming. There has to be a better way, right?&lt;!--break--&gt;&lt;/p&gt;
&lt;p&gt;The better way turns out to be handsomely better and it&#039;s called remote debugging. A remote debugger is usually used for kernel hacking or for developing full-screen applications such as games, but it&#039;s quite handy for fixing backward compatibility problems—especially if your app no longer builds on Tiger.&lt;/p&gt;
&lt;p&gt;With remote debugging, I can code in Xcode 3—my new favorite IDE—then just hit command-Y. It works as any great software should. Like magic. The application launches on the test machine and you&#039;re off debugging as if it were running locally. You can set breakpoints, examine variables and stack traces, fix and continue, or whatever else that gdb can do. There&#039;s no longer a cycle of doom, and as a result, I&#039;m a much happier person.&lt;/p&gt;
&lt;p&gt;There are just 3 things you need to do to get stress free debugging on older systems with Xcode:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set up password-less ssh for logging into your test machine.&lt;/li&gt;
&lt;li&gt;Share the build directory in a way that both machines can access it through the same path&lt;/li&gt;
&lt;li&gt;Configure a new executable in Xcode for remote debugging.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The Xcode User Guide does a fine job of explaining these steps succinctly.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://developer.apple.com/documentation/DeveloperTools/Conceptual/XcodeUserGuide/Contents/Resources/en.lproj/06_02_db_set_up_debug/chapter_42_section_7.html#//apple_ref/doc/uid/TP40002699-SW28&quot;&gt;Xcode User Guide — Debugging Programs Remotely&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some additional tips:&lt;/p&gt;
&lt;p&gt;1. If your test machine has a different kind of processor, duplicate your Debug build configuration and set it up to build a universal binary.&lt;/p&gt;
&lt;p&gt;2. Use &quot;DWARF with dSYM File&quot; as your debug metadata format. With the other two options, breakpoints set through the Xcode UI didn&#039;t work for me.&lt;/p&gt;
</description>
 <comments>http://www.potionfactory.com/blog/2007/11/04/how-keep-backwards-compatibility-and-be-less-grumpy-about-it#comments</comments>
 <category domain="http://www.potionfactory.com/blog/archives/cocoa">Cocoa</category>
 <category domain="http://www.potionfactory.com/blog/archives/software-development">Software Development</category>
 <category domain="http://www.potionfactory.com/blog/archives/tips">Tips</category>
 <pubDate>Sun, 04 Nov 2007 03:35:01 -0800</pubDate>
 <dc:creator>Andy Kim</dc:creator>
 <guid isPermaLink="false">215 at http://www.potionfactory.com</guid>
</item>
<item>
 <title>Licensing Scheme Switch</title>
 <link>http://www.potionfactory.com/node/160</link>
 <description>&lt;h3&gt;Announcement&lt;/h3&gt;
&lt;p&gt;With the release of Tangerine! we moved to a new licensing scheme across all of our applications. If you upgrade Podcast Maker or Voice Candy and all of a sudden find that it thinks that you are not registered and your trial has expired, it is because you need to put in your new license key. We emailed them out ahead of time, but you may not have gotten it for one reason or another. In that case, please go &lt;a href=&quot;https://secure.potionfactory.com/store/lost_license&quot;&gt;here&lt;/a&gt; to retrieve your license.&lt;/p&gt;
&lt;h3&gt;But... Why?&lt;/h3&gt;
&lt;p&gt;So why would we go through the eye-poking pain of updating every order in the database, not to mention having to write code that we don&#039;t enjoy writing? Well, there are several reasons why it&#039;s all justified.&lt;!--break--&gt; With Podcast Maker we wrote code first and asked questions later. Thus, when we were done with the code, we looked to Kagi as the best solution to quickly take the product to market. We had to abandon them to our own custom store eventually, but it was... sufficient... at the time. The attractive thing about Kagi was that they provided us with a ready to go licensing code. We knew that it was a generic solution that is easier to reverse engineer, and we were proven right recently. A leaked license key can be blocked, but a new license key generated by the crackers is a different game altogether.&lt;/p&gt;
&lt;p&gt;With the release of Voice Candy we moved to a license file based system while still accepting the old Kagi license keys in Podcast Maker. While it is cool and some people do prefer the convenience of just double clicking a file to register, it proved to be a burden on us support wise. Most of the times, it wasn&#039;t even the users&#039; fault or ours. Some email servers classify email as spam more readily if it contains attachments of unknown extensions and others block it altogether. Some email clients such as Eudora do not even allow file extensions longer than 20 characters, rendering the license file useless for the user, and sometimes even turning the user into a mad and angry user.&lt;/p&gt;
&lt;p&gt;So in the end, we are back to issuing license keys but generated with our own algorithm. I&#039;m hoping that the crackers will leave us alone for now (uhm... because we are nice guys?), but I get a feeling that that&#039;s just wishful thinking.&lt;/p&gt;
</description>
 <comments>http://www.potionfactory.com/node/160#comments</comments>
 <category domain="http://www.potionfactory.com/blog/archives/podcastmaker">Podcast Maker</category>
 <category domain="http://www.potionfactory.com/blog/archives/software-development">Software Development</category>
 <category domain="http://www.potionfactory.com/blog/archives/voicecandy">Voice Candy</category>
 <pubDate>Tue, 12 Dec 2006 15:43:55 -0800</pubDate>
 <dc:creator>Andy Kim</dc:creator>
 <guid isPermaLink="false">160 at http://www.potionfactory.com</guid>
</item>
<item>
 <title>Release Happy</title>
 <link>http://www.potionfactory.com/blog/2006/05/23/release-happy</link>
 <description>&lt;p&gt;Developers experience a &lt;em&gt;high&lt;/em&gt; when releasing 1.0 software. The sensation that it&#039;s finally done! Each and every one of the congratulatory letters really makes one feel proud too. I relate the experience to taking a ginormous dump (uhm... don&#039;t take that too literally). Here are links to two newly released softwares, each deserving a look, and what their devs have to say:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&quot;el&quot; href=&quot;http://www.happyapps.com/blog/2006/05/my-post-webnotehappy-10-experience/&quot;&gt;My Post WebNoteHappy 1.0 Experience&lt;/a&gt; by Luis of HappyApps who just released &lt;a class=&quot;el&quot; href=&quot;http://happyapps.com/webnotehappy&quot;&gt;WebNoteHappy&lt;/a&gt;, a better bookmark manager for your Mac.&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;el&quot; href=&quot;http://www.gigliwood.com/weblog/MacOSX/Post_Release_Stress.html&quot;&gt;Post Release Stress&lt;/a&gt; by Dan of Karelia who just released &lt;a class=&quot;el&quot; href=&quot;http://www.sandvox.com&quot;&gt;Sandvox 1.0&lt;/a&gt; along with Terrence.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A big congratulations and a round of applause to these developers for getting their one dot oh&#039;s out the door. Keep an eye on their blogs because now that they have released their software, I&#039;m sure they&#039;ll be writing more often, just as this dev hopes to. They are both good writers in addition to great developers.&lt;/p&gt;
</description>
 <comments>http://www.potionfactory.com/blog/2006/05/23/release-happy#comments</comments>
 <category domain="http://www.potionfactory.com/blog/archives/software-development">Software Development</category>
 <pubDate>Tue, 23 May 2006 02:45:31 -0700</pubDate>
 <dc:creator>Andy Kim</dc:creator>
 <guid isPermaLink="false">57 at http://www.potionfactory.com</guid>
</item>
<item>
 <title>Iron Coder #0</title>
 <link>http://www.potionfactory.com/blog/2006/03/06/iron-coder-0</link>
 <description>&lt;p&gt;&lt;img alt=&quot;Iron Chef&quot; style=&quot;float: right; margin-left: 15px&quot; src=&quot;http://www.potionfactory.com/blog/wp-content/uploads/2006/03/iron_chef.gif&quot; /&gt;&lt;/p&gt;
&lt;p&gt;In the spirit of the show &lt;em&gt;Iron Chef&lt;/em&gt;, some mac developers have joined together for the first ever Iron Coder contest. Developers are given 24 hours to come up with something cool given an API and a theme. The API for the first contest was Accessibility and the theme was Mardi Gras.&lt;/p&gt;
&lt;p&gt;Here are our entries (with source code!):&lt;/p&gt;
&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.potionfactory.com/code/ironcoder0/JinKim.dmg&quot;&gt;&lt;img alt=&quot;Jin&#039;s submission&quot; src=&quot;http://www.potionfactory.com/blog/wp-content/uploads/2006/03/ironcoder_jin.png&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.potionfactory.com/code/ironcoder0/AndyKim.tar.bz2&quot;&gt;&lt;img alt=&quot;Andy&#039;s submission&quot; src=&quot;http://www.potionfactory.com/blog/wp-content/uploads/2006/03/ironcoder_andy.png&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ironcoder.org&quot; class=&quot;el&quot;&gt;Jump to Iron Coder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;UPDATE&lt;/b&gt;: You can get all of the entries &lt;a href=&quot;http://ironcoder.org/entries.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;UPDATE 2&lt;/b&gt;:  &lt;a href=&quot;http://lucaseckels.blogspot.com/&quot;&gt;Lucas Eckels&lt;/a&gt; got the honor of being the first ever Iron Coder with his entry &lt;em&gt;Symphony&lt;/em&gt;. Congratulations Lucas. On a completely separate note, Steve Harris of &lt;a href=&quot;http://www.reinventedsoftware.com&quot;&gt;Reinvented Software&lt;/a&gt; and &lt;a href=&quot;http://www.reinventedsoftware.com/feeder&quot;&gt;Feeder&lt;/a&gt; fame has created a mash-up of our submissions titled &lt;em&gt;GrassyKnoll&lt;/em&gt;. You can now shoot beads at passing windows. Grab the mash-up &lt;a href=&quot;http://www.potionfactory.com/code/ironcoder0/GrassyKnoll.zip&quot;&gt;here&lt;/a&gt; for some good laughs!&lt;/p&gt;
&lt;p&gt;&lt;!-- technorati tags start --&gt;&lt;br /&gt;
&lt;p style=&quot;text-align:right;font-size:10px;&quot;&gt;Technorati Tags: &lt;a href=&quot;http://www.technorati.com/tag/ironcoder&quot; rel=&quot;tag&quot;&gt;ironcoder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- technorati tags end --&gt;&lt;/p&gt;
</description>
 <comments>http://www.potionfactory.com/blog/2006/03/06/iron-coder-0#comments</comments>
 <category domain="http://www.potionfactory.com/blog/archives/potion-factory">Potion Factory</category>
 <category domain="http://www.potionfactory.com/blog/archives/software-development">Software Development</category>
 <pubDate>Mon, 06 Mar 2006 01:24:56 -0800</pubDate>
 <dc:creator>Andy Kim</dc:creator>
 <guid isPermaLink="false">38 at http://www.potionfactory.com</guid>
</item>
<item>
 <title>Hidden Gem</title>
 <link>http://www.potionfactory.com/blog/2005/10/13/hidden-gem</link>
 <description>&lt;p&gt;Lots of announcements today from Apple. New iMacs, Video iPods, blah blah blah. It&#039;s the only thing that anybody is talking about. I&#039;m going to tell you about something else that is cool today.&lt;/p&gt;
&lt;p&gt;We were brainstorming sometime before the release of iTunes 5, and I came to think about sliders. They are useful but pretty hard to use. If you want to change the value of the slider continuously, you have to grab the tiny knob and drag it around. For something like a volume slider, a real world knob is much easier to operate and more precise than anything in a computer. Well, a lot of people have mice with scroll-wheels nowadays so why not use it with the slider! Just move the mouse over a slider and scroll to adjust the value. Pretty nice idea I thought and proceeded to check a few apps to see if it was already done that way by default in OS X. Nope.&lt;/p&gt;
&lt;p&gt;When iTunes 5 came out, I unconsciously flicked my scroll-wheel over its volume slider. It moved! I felt like a young padawan using the force for the first time. It was very strange, but in a good way. I didn&#039;t think that anybody would be &lt;em&gt;that&lt;/em&gt; detail oriented, or put another way: &lt;em&gt;anal&lt;/em&gt;. Some programmer at Apple must have been thinking the same thing as me about around the same time because that feature sure wasn&#039;t there in iTunes 4. Creepy. I might have a twin separated at birth working at Apple...&lt;/p&gt;
&lt;p&gt;So yeah, you can use your mouse wheel to adjust volume in iTunes 5... uhm... 6. I think it&#039;s a nice touch.&lt;/p&gt;
&lt;p&gt;I haven&#039;t put that in into Podcast Maker yet, but I will eventually.&lt;/p&gt;
</description>
 <comments>http://www.potionfactory.com/blog/2005/10/13/hidden-gem#comments</comments>
 <category domain="http://www.potionfactory.com/blog/archives/software-development">Software Development</category>
 <pubDate>Thu, 13 Oct 2005 11:36:22 -0700</pubDate>
 <dc:creator>Andy Kim</dc:creator>
 <guid isPermaLink="false">7 at http://www.potionfactory.com</guid>
</item>
</channel>
</rss>
