<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="TidyWeblogger beta" -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://homepage.mac.com/simx/technonova/rss.xml" rel="self" type="application/rss+xml" />
    <title><![CDATA[Technological Supernova]]></title>
    <link>http://homepage.mac.com/simx/technonova/index.html</link>
    <description><![CDATA[Tech and computer-related ramblings and tidbits]]></description>
	<docs>http://blogs.law.harvard.edu/tech/rss</docs>
	<language>en</language>
    <webMaster>simX_other@mac.com (Simone Manganelli)</webMaster>
    <copyright>Simone Manganelli, 2003-2008</copyright>
    <lastBuildDate>Thu, 22 Oct 2009 17:46:07 -0700</lastBuildDate>
    <pubDate>Thu, 22 Oct 2009 17:46:07 -0700</pubDate>
    <generator>TidyWeblogger beta</generator>
    <item>
      <title><![CDATA[Finding the Right Cell Phone Plan]]></title>
      <link>http://homepage.mac.com/simx/technonova/tips/finding_the_right_cell_phone_plan.html</link>
      <description><![CDATA[<p>People are sometimes surprised to find out that I, despite being a computer programmer and keeping up with much of the Mac and technology news scene, don&#8217;t actually have a cell phone.</p>

<p>There&#8217;s are two reasons for this: 1) I don&#8217;t want to be on call all the time, and 2) I don&#8217;t want to spend a lot of money.  Reason #1 is frequently misunderstood: yes <strong>I know</strong> that I can simply turn off the phone.  Duh.  But what&#8217;s the point?  If I get a cell phone and have it off all the time, it&#8217;s just as good as not having one at all.  Besides, even if I did, I would be <em>tempted</em> to have it on all the time, and that&#8217;s the problem for me.  I don&#8217;t trust myself not to answer the phone when I shouldn&#8217;t.</p>

<p>(For what it&#8217;s worth, I <em>hate</em> it when people interrupt an in-person conversation to answer the phone.  I also hate it when people make a call in the car, or in a closed place where other people are forced to listen to your conversation and can&#8217;t have one of their own.  It&#8217;s obnoxious.  Stop it.)</p>

<p>Reason #2 is an easier point to get across: how much are you all paying for your iPhone plans again?  (I think my bro pays almost $100/month.)  I&#8217;m not willing to throw that much cash at AT&amp;T.</p>

<p>My current setup is a 2-year-old MacBook, and a Skype subscription.  For 45 euros (that&#8217;s ~$68) <strong>per year</strong>, I get unlimited phone calls to the U.S. &amp; Canada and voice mail.</p>

<p>Per year.</p>

<p>Oftentimes I lug my laptop around just to be able to have Skype access, though.  And that also requires that there&#8217;s a wireless hot spot I can access, or have access to a friend&#8217;s wireless network.  So it&#8217;s definitely inconvenient at times.</p>

<p>I&#8217;m looking to maybe get a cell phone if it can fit my requirements.  Here they are:</p>

<ol>
<li><p>The &#8220;phone&#8221; must be an iPhone or iPod touch.  I&#8217;m going to be doing iPhone development, and besides, I&#8217;ve used all the other phones a bit and I&#8217;ve read about them, and they&#8217;re just not going to work out for me.  So just don&#8217;t bother with even mentioning any other device.  Seriously, just don&#8217;t.</p></li>
<li><p>I want a persistent, unlimited wireless data connection, available when I need it, with reasonable coverage.  Achieving this must not require a laptop.</p></li>
<li><p>I will pay no more than $30/month.</p></li>
<li><p>I do not care about phone &#8220;minutes&#8221;, and I do not give a shit about SMS or MMS (seriously, why do you guys pay for that crap when you can just use AIM?).  I do not want them, nor will I pay for them.  I will continue to use Skype.</p></li>
<li><p>I am willing to entertain hacks or add-ons that can help fulfill the previous requirements (i.e.: if there&#8217;s a dongle that acts as a cell phone modem and doesn&#8217;t cost much per month, that is acceptable).  I am <strong>not</strong> willing to endure hacks that continually break or are unstable, etc.  It can have an up-front time and/or money commitment (up to $200), but this must be a one-time sunk cost only.</p></li>
<li><p>I must be able to upgrade to the latest software update as soon as it comes out.  No delays.  (This pretty much rules out any jailbreaking/unlocking of any kind.)</p></li>
<li><p>I need <em>at least</em> 40 GB of space.  My music collection is already 30 GB in size, and I&#8217;m not picking and choosing what music I want on my device.</p></li>
</ol>

<p>Here&#8217;s what I&#8217;ve looked into:</p>

<ol>
<li><p>My bro and dad have a family plan.  I could attach on to that, but that costs $10/month just to add another device to the plan, and another $30/month for the data.  That violates requirement #3.  Also, that would require an iPhone, which, at max, goes to 32 GB of storage, violating requirement #7.</p></li>
<li><p>AT&amp;T has a pay-as-you-go plan.  I would never use the minutes so I would never need to refill.  However, it seems that using such a plan, the <em>data</em> is <em>also</em> pay-as-you-go.  That&#8217;s going to violate requirement #3 as well.  Also, still the problem with not enough space.</p></li>
<li><p>Verizon has a dongle-thingy (MiFi) that hooks into its wireless network and provides a roaming wireless hot spot, but last I checked this was way too expensive.  It&#8217;s $40/month for a piddly 250 MB/month, and 10¢ per MB above that.  Hah!  Sorry, but no.</p></li>
</ol>

<p>Any other suggestions?</p>
]]></description>
      <pubDate>Thu, 22 Oct 2009 16:54:03 -0700</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/tips/finding_the_right_cell_phone_plan.html</guid>
	  
 </item>
<item>
      <title><![CDATA[ClickToFlash Killers]]></title>
      <link>http://homepage.mac.com/simx/technonova/software_development/clicktoflash_killers.html</link>
      <description><![CDATA[<p>One of the greatest features of ClickToFlash, in my opinion, is the ability to load H.264 files from YouTube in QuickTime, rather than having to load the Flash plugin.  Just searching for ClickToFlash on Twitter reveals a number of users who absolutely love the feature.  It&#8217;s amazing what this one feature can do to your CPU load, fan volume, and battery life, just by loading videos in a non-horribly-written plug-in.  You might even say that ClickToFlash has <a href="http://twitter.com/khiscott/status/4489784339">significantly contributed</a> to the fight against global warming!</p>

<div class="right-aside">If you happen to be an Adobe Flash plug-in developer and you&#8217;re reading this, seriously, WHAT THE FUCK?  The Flash plug-in has been on the Mac for around a decade, and we&#8217;ve been promised better performance time and time again.  Yet, still, the Mac Flash plug-in uses around 75% of the CPU under normal circumstances, compared to 10-25% of the CPU that the QuickTime plug-in typically uses and the good performance of the Windows Flash plug-in.  The only logical conclusion is that your code SUCKS ASS.</div>

<p>The problem is, the code to load the YouTube H.264 files is entirely custom.  What if we wanted to do the same thing for a different video site, like, say, Vimeo?  We&#8217;d have to write completely new code to account for this.</p>

<p>Well, I want to tackle this problem sooner rather than later.  Eliminating more bits of Flash from the web is cathartic.  There has been sparse talk about how to implement this (see <a href="http://rentzsch.lighthouseapp.com/projects/24342/tickets/235-modular-support-for-playing-back-h264-content-on-sites-other-than-youtube">the ticket</a> for the feature request), but no concrete plans.  (<a href="http://twitter.com/atnan">@atnan</a> has already figured out a general method <a href="http://gist.github.com/146789">for getting H.264 videos from Vimeo</a>.)</p>

<p>I&#8217;ve been thinking about this problem for a while.  But before figuring out an implementation proposal, we have to think about the goals of such a feature:</p>

<ol>
<li><p>Easily-supported code.  This means that we need to have all site plug-ins go through the exact same mechanism.  This includes the current custom YouTube support.  We want only one mechanism to maintain.  If there are bugs, we can fix it in one place, and <em>all</em> site plug-ins will reap the fix.</p></li>
<li><p>User-extensible.  We want users to be able to create their own site plug-ins and share them with the world, without having to learn Objective-C or go through the horrible UI that is git.  Part of this means site plug-ins that are relatively easy to create, with little programming knowledge, if possible.</p></li>
<li><p>Flexible.  Video sites will do weird things.  With YouTube, we already have to do <a href="http://github.com/rentzsch/clicktoflash/blob/6735c76ce1635e16cfa27b762af66686f0399cb9/Plugin/Plugin.m#L1702">HTML scraping</a> for embedded videos.  And we can&#8217;t rely on the flash variables that YouTube videos include, because sometimes they indicate the existence of a H.264 file that just isn&#8217;t there!  So we have to <a href="http://github.com/rentzsch/clicktoflash/blob/6735c76ce1635e16cfa27b762af66686f0399cb9/Plugin/Plugin.m#L1279">test for file existence</a> at a certain URL.  In short, the mechanism needs to be able to support whatever video site users think of throwing at it.  If we need to add a feature, we want to be able to do so without breaking existing site plug-ins.</p></li>
<li><p>Secure.  One possible example of an implementation is simply to have site plug-ins be executables which return a string for the URL of the video file.  But think about how much of a security hole this is: the executable could happily delete your home folder!  We don&#8217;t want that possibility with our site plug-ins.  That can conflict with our goal of flexibility, but we want to achieve a happy medium between the two.</p></li>
</ol>

<p>Today, on Twitter, I mentioned that I wanted to get this feature moving, and <a href="http://twitter.com/boredzo">@boredzo</a> came up with a preliminary implementation: define site plug-ins <a href="http://twitter.com/boredzo/status/4539573046">as a dictionary file</a>.  His proposal lacked some flexibility even for YouTube, but it was a good jumping-off point.  I spent a few hours looking through ClickToFlash&#8217;s YouTube code and created a dictionary file format that I think can reasonably satisfy all of the above four goals.</p>

<p>Because &#8220;site plug-ins&#8221; sounds boring, and ClickToFlash already is a &#8220;plug-in&#8221;, having plug-ins for a plug-in is kind of weird.  The name &#8220;extension&#8221; is already used by Firefox (let&#8217;s save <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=472271">a rant about Firefox</a> for another day entirely).  So I think we need a new name for these site plug-ins.</p>

<p>In the spirit of the cheeky copy on the <a href="http://rentzsch.github.com/clicktoflash/">ClickToFlash website</a>, I&#8217;d like to dub this feature &#8220;Flash killers&#8221;, or &#8220;killers&#8221; for short.  Yeah, yeah, I know, some of you will disapprove, but it&#8217;s one of the little things I do to keep me sane as a programmer.</p>

<p>Anyway, I&#8217;d like to walk you through three sample killers: two that replicate the existing functionality of ClickToFlash for YouTube, and one that would introduce H.264 support for Vimeo.  Note that <strong>not a single line of Objective-C code</strong> has been written to support killers, at this moment in time.  The whole reason for this post is to receive constructive criticism on the proposal before implementation.</p>

<p>For that reason, I ask that you <strong>read this entire post</strong> before commenting.  I&#8217;ll explain the decisions behind everything.</p>

<p>As mentioned before, killers are simply .plist files, or a dictionary of objects and keys that define how ClickToFlash will construct the URL for a video file.  Here&#8217;s the root view of a killer for YouTube:</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/clicktoflash-killers/youtube-proper-root-view.png" /></div>

<p>&#8220;Killer Name&#8221; and &#8220;Video Result MIME Type&#8221; are pretty self-explanatory.</p>

<p>Here&#8217;s the same killer showing the contents of the &#8220;Matching Regular Expression&#8221; and &#8220;Rejecting Regular Expression&#8221; dictionaries:</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/clicktoflash-killers/youtube-proper-reg-exps-match.png" /></div>

<p>There are three things that we use in the current ClickToFlash code to check for YouTube videos: the URL of the page that you&#8217;re on (the one you see in Safari&#8217;s address bar), the URL of the source flash file (the &#8220;.swf&#8221; file), and the flash variables themselves (which can contain the URL).  For embedded YouTube videos, we need to support regex matching of each of these URLs.  This killer does not support embedded YouTube videos; I&#8217;ll explain more about that later.  This one just supports actual YouTube pages.</p>

<p>So for non-embedded YouTube, we just need to match &#8220;youtube.com&#8221; or &#8220;youtube-nocookie.com&#8221; at the start of the page URL with an optional &#8220;http://&#8221; and an optional &#8220;www.&#8221;  (Please note, I am a regular expression rookie, so if you see any mistakes, please let me know.)</p>

<p>The &#8220;Rejecting Regular Expression&#8221; is the opposite &#8212; if the URL matches the regular expression in this dictionary, ClickToFlash won&#8217;t attempt to load the video file via this killer.  Because standard YouTube pages will <em>also</em> match the regular expression for source URL and Flashvars, which we use to check for embedded YouTube videos, we don&#8217;t want two killers matching for the same video.  (It actually probably doesn&#8217;t make that big of a difference if two killers match a given video, as the first killer to be loaded will just take precedence.)</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/clicktoflash-killers/youtube-proper-variants.png" /></div>

<p>Here we see support for the variants of YouTube.  Remember, YouTube has standard H.264 and HD H.264 versions available.  We want to support both, and add support for additional variants from other sites without having to create additional killers (which would cause problems, because the regular expression matching for the killers would be identical, at least in the case of YouTube).</p>

<p>Here, &#8220;Display Name&#8221; specifies what text will be displayed in the ClickToFlash view if the URL successfully loads.  &#8220;Return URL&#8221; also specifies the steps to construct the URL and the return URL string (the format of which we&#8217;ll get to in a moment.)</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/clicktoflash-killers/youtube-proper-variant-1-steps.png" /></div>

<p>Here we can see how we construct the URL of the MP4 file for YouTube.  ClickToFlash will support a limited number of step &#8220;types&#8221;, including flash-var-retrieve, regular-expression-match, download-resource, and because of this format, we can add support for additional step types in the future if deemed necessary.</p>

<p>Each step can contain three objects: &#8220;Type&#8221;, &#8220;Victim&#8221;, and &#8220;Action&#8221;.  Type indicates what ClickToFlash will do in that step, &#8220;Victim&#8221; indicates the string to perform the step on, and action represents the specific form of the type of step.  For flash variable retrieval, we don&#8217;t need an action, because this step simply retrieves the string for a given flash variable (specified in &#8220;Victim&#8221;).  Other steps do require an action: for example, a regular expression match actually needs a regular expression.</p>

<p>In addition, each step always returns a string.  If a certain step returns nil, then we&#8217;ll cancel out of the killer.  The result of each step is stored in an array for later retrieval.  So in these two steps, we retrieve the video_id and t flash vars.</p>

<p>In the &#8220;Return URL&#8221; object, we see how we refer to the results of the previous steps.  &#8220;%3A&#8221; and &#8220;%4A&#8221; represent the results of the steps in the killer.  Why start with &#8220;%3&#8221;?  Because &#8220;%0&#8221; is reserved for the page URL, &#8220;%1&#8221; is reserved for the Flash source URL, and &#8220;%2&#8221; is reserved for the Flashvars string.  The trailing character of the entity used for retrieving the results of a single step is to allow you to retrieve results from a <em>different</em> variant, which we see will come handy in a sec.</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/clicktoflash-killers/youtube-proper-variant-2-steps.png" /></div>

<p>In this pic, you can see that the YouTube HD variant has no steps.  How can that be?!  Well, we already retrieved the required strings in the previous variant, so we just refer to them again in the return URL.  &#8220;%3A&#8221; and &#8220;%4A&#8221; will return the same video_id and t flash vars as it did in the previous variant.  If we had a third variant, we could refer to the steps of the previous variant using &#8220;%3B&#8221; and &#8220;%4B&#8221; instead.</p>

<p>Why support this?  Because it saves processing time, and it will save network time in the case that you need to download an external resource, and need to refer to the same resource in two different variants.  You don&#8217;t want to download the same HTML file twice to scrape (as we might do for this killer), and you don&#8217;t want to spend the CPU time to scrape it twice, either.</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/clicktoflash-killers/youtube-embedded-reg-exps-match.png" /></div>

<p>Now let&#8217;s move on to embedded YouTube.  Remember how I said we didn&#8217;t want proper YouTube page videos to match for two different killers?  Here we use the &#8220;Rejecting Regular Expression&#8221; to that effect.  It&#8217;ll match &#8220;youtube.com&#8221; or &#8220;youtube-cookie.com&#8221;, but if those strings appear in the actual webpage URL (as it does for standard YouTube videos), then this killer will reject the match.</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/clicktoflash-killers/youtube-embedded-variant-1-steps.png" /></div>

<p>Here&#8217;s how we actually construct the URL.  Remember when I said we had to do HTML scraping?  Here&#8217;s where we do it.  Our first step is a regular-expression-match on the source URL of the Flash file, to extract the video_id parameter.  Then we actually have to <em>download</em> the HTML source of the corresponding YouTube page, which occurs in the second step.  In the third step, we do a regular expression match against the HTML source of the previous step, searching for the flash arguments.  The last step searches the results of the previous regular expression result to match the &#8220;t&#8221; flash var, which is the last item we need to construct the URL.</p>

<p>Note that victims do not need to be single entities, which are the results of previous steps.  You can construct strings that include the previous step result as a subset, if necessary.</p>

<p>Also, note the regular expression matching here.  (?&lt;  ) is a &#8220;look behind&#8221; parameter, forcing a string to have a certain other regular expression come immediately before the string.  Similarly, (?= ) is a &#8220;look ahead&#8221; parameter.</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/clicktoflash-killers/youtube-embedded-variant-2-steps.png" /></div>

<p>How does the HD variant for embedded YouTube videos work?  Easy-peasy!  We&#8217;ve already retrieved the &#8220;video_id&#8221; and &#8220;t&#8221; flash vars from the previous variant!  We don&#8217;t need to do <em>any</em> work here.  Just construct the return URL using the results of the previous variant (which in this case uses &#8220;fmt=22&#8221; to get the HD version rather than &#8220;fmt=18&#8221;)!</p>

<p>There&#8217;s one more thing you need to be aware of: in ClickToFlash&#8217;s current code, we need to actually check for the existence of a file at the constructed URL in order to make sure that one exists.  YouTube sometimes lies, and gives you &#8220;video_id&#8221; and &#8220;t&#8221; flash vars even though there&#8217;s no H.264 or HD version.  But this can be handled in ClickToFlash code &#8212; ClickToFlash will just check for the existence of a file at the return URL for you!</p>

<p>I hope you agree, this step-by-step method for constructing URLs is sufficiently powerful to allow for flexibility for the various websites out there.  Because the number of steps isn&#8217;t limited, if you need to download two external resource files, that&#8217;s absolutely supported!  If you need to do a vast number of regular expression matches and not just one, that&#8217;s supported!  And given the flexibility of the &#8220;Type&#8221; parameter, we can support future step types, like CSS selectors, XPath queries, and possibly even AppleScripts!</p>

<p>How does this live up to our original four goals?</p>

<ol>
<li><p>Easily maintainable code.  A defined set of steps and matching regular expression allows us to write one Objective-C class for every killer.</p></li>
<li><p>User-extensiblity is pretty evident.  Also, I believe the step-by-step mechanism makes it easier for novices to understand how a killer is set up, and attempt to make one of their own if they so please.</p></li>
<li><p>Flexibility is also pretty evident: this mechanism has been designed from the ground-up to support all the quirks of YouTube, and allows for future-proofing by adding additional step types, so I&#8217;m confident that it can handle the majority of the video sites out there.</p></li>
<li><p>Security: with this proposal, all that a malicious user can do is fetch flash variables, download resources, and match regular expressions on pieces of text.  I think that pretty much avoids any potential security holes that such a plug-in mechanism may have.  The only exception would be AppleScripts, since they could delete files if they so wanted, but we can discuss whether we want to add support for those or not.</p></li>
</ol>

<p>What are the deficiencies in this proposal?  I can see a number of them.</p>

<ol>
<li><p>It&#8217;s verbose.  I did this on purpose to aid &#8220;readability&#8221; of the killers, but I can see how it might be annoying to set up.</p></li>
<li><p>Kind of related to the previous deficiency, the mechanism for referring to results of previous steps is kind of awkward.  What if someone had a large number of steps?  Or what if they wanted to use a victim such as &#8220;http://asdf.com/?%4A=something&amp;%3A=something-else&#8221;, and not have the &#8220;%4A&#8221; match the result?  Would escaping the entity work reliably?</p></li>
<li><p>Localizability.  How to localize the keys in the dictionary for other languages, so that non-English speakers can still create killers and get them to run under any system language, including English?  Not sure how easy it will be with this mechanism.</p></li>
</ol>

<p>I&#8217;m not sure the answers to these questions, and maybe they&#8217;re things that we don&#8217;t really need to worry about.  In any case, if you&#8217;d like to play around with my Dictionary files, you can access them here:</p>

<ul>
<li><a href="http://homepage.mac.com/simx/clicktoflash-killers/YouTube-Proper.plist">YouTube Proper killer</a></li>
<li><a href="http://homepage.mac.com/simx/clicktoflash-killers/YouTube-Embedded.plist">YouTube Embedded killer</a></li>
<li><a href="http://homepage.mac.com/simx/clicktoflash-killers/Vimeo-Proper.plist">Vimeo Proper killer</a></li>
</ul>

<p>I&#8217;ve even added one that should support Vimeo&#8217;s H.264 files!</p>

<p>And now that you&#8217;ve read through the whole thing, comment away!  I welcome any and all discussion, since this is probably the single biggest feature I&#8217;ve attempted to undertake in ClickToFlash, and I want to get it right the first time.</p>
]]></description>
      <pubDate>Fri, 02 Oct 2009 02:38:49 -0700</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/software_development/clicktoflash_killers.html</guid>
	  
 </item>
<item>
      <title><![CDATA[From the Mouths of Developers]]></title>
      <link>http://homepage.mac.com/simx/technonova/reports/from_the_mouths_of_developers.html</link>
      <description><![CDATA[<p>I know everybody&#8217;s sick of hearing about MacHeist, but this entry has been in the making since before MacHeist III ever ended.  Before proceeding, if you haven&#8217;t already done so, please review my previous four posts on MacHeist: <a href="http://homepage.mac.com/simx/technonova/rants/macsheist.html" target="_blank">one</a>, <a href="http://homepage.mac.com/simx/technonova/rants/false_analogies.html" target="_blank">two</a>, <a href="http://homepage.mac.com/simx/technonova/rants/statistical_bias_in_macheist_participan.html" target="_blank">three</a>, <a href="http://homepage.mac.com/simx/technonova/rants/on_the_continuing_macheist_controversy.html" target="_blank">four</a>.</p>

<p>I&#8217;ve never been involved as a participant, customer, or developer in any of the three MacHeists.  So my <a href="http://homepage.mac.com/simx/technonova/rants/on_the_continuing_macheist_controversy.html" target="_blank">most recent post</a> was written mainly from the point of view of a conscientious consumer (although, it seems that some will dispute that assertion), analyzing the value of MacHeist to developers purely on a monetary basis.</p>

<p>After posting, I received a tweet asking me if I had asked the developers themselves about their participation in MacHeist.  I had initially dismissed this since this was round three of MacHeist, and besides, I&#8217;d probably worn out my welcome even before contacting them.  But I figured it was worth a shot, so I fired off some e-mails.</p>

<p>To my surprise, almost every developer that I contacted wrote back, and everyone was actually quite agreeable, despite the tone of my previous post.  All of the responses I received were thoughtful.  One even wrote back in Italian, and was quite poetic.  Each probably represented far more than a few minutes of time out of their day to respond to a troll on the internets.  For that, I must say that I am quite grateful.</p>

<p>Although a couple developers asked me not to publish their replies to my initial e-mail, some did allow me to do so.  Two developers, Oliver Breidenbach of Boinx Software Ltd. and Gus Mueller of Flying Meat, Inc., also answered some follow-up questions.  Andrew Welch, el Presidente of Ambrosia Software, Inc., consented to an extended interview.</p>

<p>The sheer amount of words spent on MacHeist in the following responses and Q&amp;As is pretty extensive.  I still highly recommend reading them unfiltered, especially the interview with Welch (in which we touch on the iPhone app store, similarities to retail store promotions, the Tweetblast, protectionism, and even penis sizes).  Here&#8217;s an executive summary of the main points that were made by developers:</p>

<ol>
<li><p>MacHeist is, first and foremost, used for marketing.  This is, by far, its main purpose.  All of the developers, even the more well-known ones, benefit greatly from the brand and product awareness generated by MacHeist.  They are all happy to sell their apps at a substantial discount in return for the sheer recognition that MacHeist creates for their company.</p></li>
<li><p>MacHeist is extremely effective at marketing.  They do it very well.  Time is simply better spent letting the marketers do the marketing.</p></li>
<li><p>None of the developers are particularly concerned about saturating the Mac marketplace with their products.  Every developer believes that even MacHeist&#8217;s reach is a miniscule proportion of the entire market for Mac apps, and that MacHeist helps them reach customers that never knew they wanted their app.</p></li>
<li><p>Since MacHeist is temporary and only comes once a year, developers don&#8217;t fear that it causes consumers to value their apps less.  In comparison, the factors causing the continual push towards 99¢ iPhone apps are always in effect.</p></li>
<li><p>All of the apps included in the MacHeist III bundle are fully-functioning, fully-upgradeable apps, just as if you had purchased it directly from the developer.</p></li>
</ol>

<p>Welch, in particular, adds some interesting insights:</p>

<ol>
<li><p>There is more than one reason to put an app in the bundle.  One is to spur awareness of a new product.  Another is to attract more users specifically to spur online play of that app.</p></li>
<li><p>Ambrosia found it similarly effective to bundle one of their apps on every new Mac, under a deal with Apple.</p></li>
</ol>

<p>I will refrain from additional commentary of my own since my opinions already shine through via the questions I posed.  Below are the e-mails and transcripts, straight from the devs.</p>

<hr class="centered">

<p><b>Developer: Zac Cohan<br />
Company: Acqualia Software<br />
Product: Picturesque</b></p>

<p>E-mail Response:</p>

<blockquote style="font-family:optima, verdana, arial, sans-serif; line-height:1.2em; font-size: 1.0em;"><p>Personally, we think MacHeist is great for consumers and developers and we don&#8217;t see them as a middle man, rather more as a marketing service. As you&#8217;ll probably know, for indie developers like ourselves it&#8217;s hard sometimes to get out there in the marketplace and we generally spend a lot more time on development than we do on marketing.</p>

<p>That&#8217;s where MacHeist comes in for us. They put a lot of time, energy and capital into building the MacHeist community, with the missions for example, and get our app out there in front of people. This really brings a lot of value to our company.</p>

<p>Here&#8217;s a quote from a comment on your blog post:</p>

<p>&#8220;I, for one, would never have thought to purchase Picturesque. for any price. but i&#8217;ve been so impressed with it i can definitely see paying for upgrades in the future, not to mention the word of mouth it will certainly receive in my own community.&#8221;</p>

<p>Awesome.</p>

<p>Cheers,</p>

<p>-Zac Cohan</p></blockquote>

<hr class="centered">

<p><b>Developer: Oliver Breidenbach<br />
Company: Boinx Software Ltd.<br />
Product: BoinxTV</b></p>

<p>Brief Q&amp;A via e-mail:</p>

<div style="margin: 0 3em 0 3em;"><p><span class="speaker">Breidenbach: </span>Our experience from past MacHeists is that this [whether consumers might perceive participating apps to be of lesser value after the MacHeist 3 promotion is over] is clearly not the case.</p>

<p>Quite a big chunk of your argument seems to be that the MacHeist guys make more money than the developers.</p>

<p>I think there is no single developer on the iTunes App Store who makes more money than Apple makes with the store. The same with the Apple Stores. If your customer buys a Mac to run your software on it, Apple makes more money on that Mac than you do on the software. In fact, with almost every distribution channel, the channel makes more money on the customer than you. Because the value lies in the customer.</p>

<p><span class="speaker">Manganelli: </span>That is a very interesting analogy that I had not considered.  You&#8217;re right that, in this case, Apple is the middleman.  However, what Apple provides is not simply marketing efforts, they provide the actual device on which the apps are created.  I think your analogy would be applicable if some <i>other</i> company made the hardware and Apple simply operated the App Store.</p>

<p>In the case of the App Store, it is the <i>sole</i> method by which developers can get their apps to consumers.  I would have a problem with this if Apple didn&#8217;t provide the actual iPhone.  However, they do, and so Apple adds value while taking a cut of the profits.</p>

<p>MacHeist, in contrast, provides no other benefit other than the distribution/marketing of the bundle.  Developers can still (and in almost all cases, do) sell their software directly to consumers.</p>

<p>So the problem that I have, as a consumer, is that the value of the marketing effort to me is zero.</p>

<p><span class="speaker">Breidenbach: </span>Yes, but they negotiated a damn good deal on your behalf as a consumer. Much like the retail chains Safeways, Walmart, etc., who use their purchase power to give customers and vendors a good deal. If you buy in large volumes from a vendor (like in this case MacHeist does from us) you are usually getting a steep discount. Which we can easily give as multiplication of software costs nothing. If someone came along and would purchase 100,000 licenses of your products, I doubt that you could ask for much more than we get from MacHeist.</p>

<p><span class="speaker">Manganelli: </span>The marketing that MacHeist provides does not allow the app to function, and it does not allow the app to function on a different device.  So whereas Apple is a value-added middleman, MacHeist is not. That&#8217;s why I struggle to accept that my money is well-spent if I purchase the bundle, even if I have to pay more for the apps I want outside the bundle.</p>

<p><span class="speaker">Breidenbach: </span>I can assure you that you would get more than your money&#8217;s worth and we would be happy to have you as a customer.</p>

<p>[&#8230;]</p>

<p><span class="speaker">Breidenbach: </span>The hard part about being a Mac developer is to attract customers and the MacHeist guys found a way to attract a lot of customers in a very short time and that is worth a lot of money.</p>

<p>But MacHeist adds to our revenue, it does not take away from it. So clearly we are better off with MacHeist, no matter how Phil and his team profit from it.</p>

<p>Of course we would be much better off if the 100,000 MacHeist customers would give us the full price, but the reality is that most of them would probably never hear about BoinxTV without the marketing efforts of MacHeist.</p></div>

<hr class="centered">

<b>Developer: Gus Mueller<br />
Company: Flying Meat, Inc.<br />
Product: Acorn</b>

<p>Initial E-mail Response:</p>

<blockquote style="font-family:optima, verdana, arial, sans-serif; line-height:1.2em; font-size: 1.0em;"><p>I actually wrote <a href="http://gusmueller.com/blog/archives/2009/03/acorn_is_in_macheist.html" target="_blank">my post</a> the second after Acorn was announced, beating alllll the other posts on MacHeist, because I knew what was coming.</p>

<p>Anyway, I don&#8217;t think consumers will think less of my applications.  Did people think less of Delicious Library? Textmate? Speed Download? Launchbar?  I know I don&#8217;t.</p>

<p>It&#8217;s business.  I thought the tradeoffs were good for me, at this particular time.  I&#8217;m most happy about getting Acorn into that many people&#8217;s hands.  I want people to <u>use</u> it, I think it&#8217;s a good app and it deserves to get the attention.</p></blockquote>

Follow-up Q&A via e-mail:

<div style="margin: 0 3em 0 3em;"><p><span class="speaker">Manganelli: </span>From your initial response, it seems like you value MacHeist mostly in terms of the marketing aspect.  How much importance do you place in the actual revenue generated?  What other forms of advertising do you do beyond MacHeist that would inform potential customers about your company/product?</p>

<p><span class="speaker">Mueller: </span>Revenue was not as important to me as getting Acorn into the hands of a bunch of people (which turned out to be around 90k folks).  Obviously I wasn&#8217;t going to do this for free, but money wasn&#8217;t the main draw.</p>

<p>The only form of advertising I do is to try and make a great product that people will talk about in a positive way.</p>

<p><span class="speaker">Manganelli: </span>Is the version of Acorn you include in the MacHeist III bundle a one-off build or a fully-functional, upgradeable build indistinguishable from your normal app download?</p>

<p><span class="speaker">Mueller: </span>Fully functional, and not restricted in anyway.  There is no distinction made between buying Acorn off my main store, or through MacHeist.</p>

<p><span class="speaker">Manganelli: </span>Are you worried about saturating a lot of your potential market by including Acorn in MacHeist III?</p>

<p><span class="speaker">Mueller: </span>Nope.  There are a ton of mac users out there.  MacHeist really just scratched the surface.</p>

<p><span class="speaker">Manganelli: </span>You&#8217;ve already indicated that you&#8217;re not worried that people who buy the MacHeist III bundle will value your app at a lower value, but aren&#8217;t you basically throwing your app at consumers?</p>

<p><span class="speaker">Mueller: </span>Well, I might be throwing my app at them- but they are throwing me money back so it&#8217;s ok.  Granted, it&#8217;s not as much as if every one of them had bought my app through my store, but most of these people hadn&#8217;t heard of Acorn anyway.  I&#8217;ve gotten a bunch of emails from people who were pretty happy with getting it, and said they didn&#8217;t know it existed.</p>

<p><span class="speaker">Manganelli: </span>Do you think that most of your customers don&#8217;t think of price as a good proxy for the value of an app?</p>

<p><span class="speaker">Mueller: </span>I can&#8217;t really answer this, since all I would come up with is a guess and that&#8217;s pretty worthless.</p>

<p><span class="speaker">Manganelli: </span>I had an exchange with a Twitter friend of mine; he wondered if I would value a Mac Pro less if Apple was offering it at a one-time $10 price to anybody who wanted it for a limited time.  My answer would be yes: if the actual retail price of the Mac Pro was $2000 even, I&#8217;d probably start valuing the Mac Pro at around $1000 because of Apple&#8217;s willingness to basically give away their product.  How do you respond to this?</p>

<p><span class="speaker">Mueller: </span>If Apple started selling Mac Pros for a limited time at 10 bucks, I&#8217;d probably buy 50 of them- they are awesome machines and worth every penny.</p>

<p><span class="speaker">Manganelli: </span>Is the MacHeist bundle different from this hypothetical situation?</p>

<p><span class="speaker">Mueller: </span>Yes, it is very different.  First of all, Apple would lose a ton of money on the sale. Second, the hypothetical you give is just crazy and isn&#8217;t based in reality.  MacHeist however, is.  And finally- I&#8217;m not losing any money by putting Acorn on sale.  Yes, there was a support spike, but it has gone back down to just about what it was before the sale.  And financially, I came out ahead.</p>

<p><span class="speaker">Manganelli: </span>A similar problem that iPhone developers have been dealing with is the steady push towards 99¢ apps.  In order to get noticed, you need to be on the Top Lists, and lowering the price bumps sales, making it more likely that the app will get onto the Top Lists.  With MacHeist, Mac app developers significantly lower the &#8220;price&#8221; of their apps in order to get a lot of marketing value out of it.  How is MacHeist similar or different from the iPhone app situation?</p>

<p><span class="speaker">Mueller: </span>I feel like I&#8217;m taking a test in highschool with that last sentence!</p>

<p>The two situations are similar, in that the prices are super low.</p>

<p>The main differences are:<br />
With MacHeist, I know who my customers are, so I can talk to them later on.<br />
With MacHeist, the price point of Acorn changes after 2 weeks.<br />
When MacHeist is over, I get to go back to a free market model.  I&#8217;m not trapped in an App Store.</p>

<p><span class="speaker">Manganelli: </span>Personally, I am a consumer who likes to watch where my money goes, and usually that means trying to avoid middlemen who don&#8217;t offer significant value to the product that I am purchasing.  To me, again, as a consumer, the marketing aspect of MacHeist does not appeal to me and therefore does not offer any value.  It doesn&#8217;t add anything to the app when I&#8217;m using it, either.  What reasons do I have as a conscientious consumer to buy the bundle if I want my money to directly benefit the developers of those apps?</p>

<p><span class="speaker">Mueller: </span>The money does directly benefit the developers.  However, the amount of money given to the developer isn&#8217;t the same amount as if you purchase it directly from me.  If that makes you feel guilty, feel free to buy the app through my store.  Buy 100 copies! However, it&#8217;s not like I mind.  I actively pointed people to MacHeist while the sale was going on- letting them know that they can get Acorn along with other apps for a great price.</p>

<p><span class="speaker">Manganelli: </span>I mean, that&#8217;s one of the best aspects of the internet, right?  It allows direct connections between people and companies who would ordinarily not be able to interact.  Why add middlemen back in?</p>

<p><span class="speaker">Mueller: </span>It&#8217;s not permanent.  And I added the middleman to reach a greater audience.</p>

<p><span class="speaker">Manganelli: </span>MacHeist is to indie Mac developers what the RIAA is to musical artists.  Is this analogy flawed?  Do you see the RIAA as a valuable resource for musical artists?  Does MacHeist provide the same value to you as the RIAA provides to artists, or are they different from the RIAA?</p>

<p><span class="speaker">Mueller: </span>It&#8217;s flawed.  I didn&#8217;t make MacHeist the sole outlet to get Acorn, and have no contractual obligations to them after the sale is over.  The only obligations I was under were to not talk about being in MacHeist before it went public, to not participate in another sale while MacHeist was in process, and to provide &#8220;real&#8221; licenses for Acorn.</p>

<p><span class="speaker">Manganelli: </span>What was your overall impression of my original article?  Did it strike you as arrogant for presuming to think of MacHeist as middlemen and for thinking the developers got a bad deal in the long run?  From the consumer&#8217;s perspective, do you think I have legitimate gripes in purchasing the bundle?  (I am not interested in getting sugar-coated answers here.  Feel free to be blunt and/or use profanity as I did in my own article.)</p>

<p><span class="speaker">Mueller: </span>Well, you called me a &#8220;cheap fucking bastard&#8221; in your article, which I don&#8217;t think I am.  You seem very angry about something!  I knew exactly what I was getting into when I signed the contract, so I know all the downsides.  For where I am with Acorn, the upsides outweighed the downsides.  I appreciate your concern though.</p>

<p><span class="speaker">Manganelli: </span>How do you feel about MacHeist&#8217;s marketing efforts, such as the TweetBlast?  There were two iterations of this phenomenon for MacHeist III, and I know I and some of my other contacts are quite annoyed at the MacHeist spam that invaded Twitter because of MacHeist&#8217;s efforts. What do you think?  Do you mind that your app is associated with such marketing efforts?</p>

<p><span class="speaker">Mueller: </span>MacHeist didn&#8217;t spam you, the folks you followed on twitter did.  Twitter != email.</p>

<p>Yes, Acorn is associated with the marketing efforts in a minor way- but like all things of this nature, it will probably be short lived.  Do you remember VoodooPad being part of MacHeist II?  Oh, you don&#8217;t? :)</p>

<p><span class="speaker">Manganelli: </span>Acorn was released in September of 2007.  MacHeist II started in November of 2007, and included Pixelmator, an app that is a sort of competitor to Acorn.  Do you have any data on how Acorn&#8217;s sales were affected by MacHeist II?  I know it may be difficult to assess MacHeist II&#8217;s affect, since your app was very new, but any info you could provide on this front would be extremely appreciated (especially if you&#8217;re willing to allow me to publish it).</p>

<p><span class="speaker">Mueller: </span>I don&#8217;t remember thinking that Pixelmator being in MacHeist affected sales, and I&#8217;m not even sure how I would measure such a scenario either.  I&#8217;m very happy with how Acorn 1.0 has sold- it&#8217;s certainly done waaaaay better than VoodooPad 1.0 or FlySketch 1.0 ever did.</p>

<p>For me, the point of getting a 1.0 out is to ship something.  The improvements come over time, and with that revenue increases.</p>

<p>MacHeist was important to Acorn, because now people know about it.  And I&#8217;ve had people find VoodooPad through MacHeist and buy that as well.  And some day when there is a paid upgrade to Acorn (as I do with all major releases of my products), maybe some of those customers who bought Acorn through MacHeist will send Flying Meat a little bit of cash to use the latest and greatest.</p></div>

<hr class="centered">

<b>Developer: Andrew Welch<br />
Company: Ambrosia Software, Inc.<br />
Product: WireTap Studio</b>

<p>Interview via IM:</p>

<div style="margin: 0 3em 0 3em;"><p><span class="speaker">Welch: </span>I&#8217;m game, I read your article, ask away sir!  ;)</p>

<p><span class="speaker">Manganelli: </span>Hehe, lol, I&#8217;m kinda surprised that you&#8217;re game given how&#8230; <em>cough</em>&#8230; controversial and profanity-laden it was. :)</p>

<p><span class="speaker">Welch: </span>Profanity has never bothered me. ;)</p>

<p><span class="speaker">Manganelli: </span>Ambrosia hasn&#8217;t participated in MacHeist before, right?</p>

<p><span class="speaker">Welch: </span>Yes, we participated in it last year.</p>

<p><span class="speaker">Manganelli: </span>Oh, wait, yeah Snapz was in it last year.</p>

<p><span class="speaker">Welch: </span>Correct.</p>

<p>[&#8230;]</p>

<p><span class="speaker">Welch: </span>So what questions did you have for me? Or did you just want to hear my thoughts on the whole thing, and why we&#8217;d be so insane as to participate? :)</p>

<p><span class="speaker">Manganelli: </span>I have a few specific questions, and then you can ramble, too. :)</p>

<p><span class="speaker">Welch: </span>Well, let me explain something to you first. MacHeist isn&#8217;t really a sale. Many people misunderstand this. MacHeist is actually a promotional event.</p>

<p><span class="speaker">Manganelli: </span>So the chief reason to participate in MacHeist is marketing? Getting the name of your product out in front of customers?</p>

<p><span class="speaker">Welch: </span>That is definitely the number one reason. Obviously we made money from MacHeist last year, and it was a reasonable sum of money, but the reality is that the whole event and exposure is worth substantially more. Heck, your article and others like them that add to the controversy are fantastic.  The more attention the event gets, the better it is for everyone involved.</p>

<p><span class="speaker">Manganelli: </span>I imagine so, yes. ;)</p>

<p><span class="speaker">Welch: </span>So here&#8217;s the thing. You might think that we&#8217;re devaluing our product, and flooding the market with potential lost sales on the cheap.  But the reality is that first of all, not everyone who buys the bundle is ever your customer. I can&#8217;t say exactly, but perhaps maybe 10% (being generous) of the people who buy the bundle will end up being a customer you end up supporting.</p>

<p>Second point is that all of the attention around the event is just fantastic for getting the word out on your product. This is especially vitally important for smaller developers who otherwise have apps that are not advertised much (if at all). Ambrosia probably gets slightly less benefit than do some other MacHeist participants. But the benefits of such a marketing &#8220;event&#8221; are huge.</p>

<p><span class="speaker">Manganelli: </span>So you mean 10% of the people who buy the bundle actually used Snapz, or 10% of the people who bought the bundle contacted you guys about an issue they were having with Snapz?</p>

<p><span class="speaker">Welch: </span>Yeah that&#8217;s just a guess, that 10% &#8212; but the point is you can&#8217;t assume that everyone who bought the bundle a) would have bought your product anyway and b) ends up using your product at all.  Neither is the case for the majority people for any particular product.</p>

<p><span class="speaker">Manganelli: </span>Right, I understand.</p>

<p><span class="speaker">Welch: </span>So let&#8217;s take 10% as a figure.  In reality, multiply your numbers by 10 to see how a product is being devalued. Then consider the cost of a huge marketing campaign that gets a whole lot of attention, and it&#8217;s pretty clear that especially for smaller developers, it actually can be a very smart thing to participate in.</p>

<p><span class="speaker">Manganelli: </span>Right. I did some extra calculations in the comments, but those were far more speculative because I didn&#8217;t have any reasonable guess for how many people actually use a product they purchased in the bundle.</p>

<p><span class="speaker">Welch: </span>We would not be doing this again if it were not a smart business decision. And not just a short-term one, but a long-term smart business decision.  Far from flooding the market with devalued sales, we actually found that Snapz sales went up &#8212; for a rather sustained period of time &#8212; after doing MacHeist.  That&#8217;s either from raw product awareness generated by the sale, or because of &#8220;grass roots&#8221; recommendations from people who got our product in the bundle, and recommended it to others.  So that&#8217;s essentially my take on it &#8212; are there any questions that come to mind that I might be able to answer for you?</p>

<p><span class="speaker">Manganelli: </span>Yeah, of course. First a few clarifications on what you&#8217;ve just said.  How do you measure the 10% figure? I don&#8217;t need the specific process, but just the method you gathered that data: e-mail support volume, or do you track how many people actually enter the serial number in your product activation dialogs?</p>

<p><span class="speaker">Welch: </span>Yeah, it&#8217;s part data, part educated guess. We will never know for absolute certainty, and there can be an infinite delay in someone actually becoming &#8220;your customer&#8221;.  But it makes sense, too.  Look at the bundle&#8230; you probably will see just a few apps that you&#8217;d actually end up using if you bought it. That&#8217;s the case for most people, and it&#8217;s still a good deal for them.  If someone who buys the bundle never uses your product, it&#8217;s not a support burden, and it&#8217;s definitely not a lost sale.</p>

<p><span class="speaker">Manganelli: </span>Oh, absolutely, yeah.</p>

<p><span class="speaker">Welch: </span>But again, it&#8217;s not a sale. It&#8217;s a marketing event. It really is.</p>

<p><span class="speaker">Manganelli: </span>OK. So Ambrosia, from what I can tell, is one of the more well-known companies that&#8217;s participating in the bundle this year. You guys send out PR material and announce stuff on your website, is there any other way that you guys market your products excluding that and MacHeist?</p>

<p><span class="speaker">Welch: </span>We do plenty of online and print advertising as well.  Full page ads in Macworld magazine, MacLife magazine, The Deck advertising, ads on podcast shows, ads on VersionTracker, ads on InsideMacGames, 404 network ads, etc.</p>

<p><span class="speaker">Manganelli: </span>And you still find that after a MacHeist promotion, there are more people buying your products (i.e. a sustained period of more sales), despite the rather extensive advertising you guys do on the web and in print?</p>

<p><span class="speaker">Welch: </span>Yes, and I think I can explain why. It&#8217;s the same reason why people flock to the stores in droves on Black Friday, and the same reason why places like woot.com do so well. People like to get &#8220;great deals&#8221;, and can understand and digest them if they come, say, one time a year.</p>

<p>That&#8217;s what MacHeist does well: they turn a sale into an event, and get people involved. We could just slash the price of our products for a week, and keep all of the profit ourselves, but we would not get near the number of eyeballs and attention that MacHeist gets from the collective of applications put together, and the whole &#8220;unlocking&#8221; deal.  It&#8217;s corny, but it works.</p>

<p><span class="speaker">Manganelli: </span>So that whole &#8220;unlocking&#8221; deal strikes me as a gimmick. Do you think that really affects how many people buy the MacHeist bundle? I mean, wouldn&#8217;t it tend to push people away from buying the bundle until those apps have been unlocked, if that&#8217;s what they&#8217;re really going for?</p>

<p>Or is it just another aspect of publicizing the event (i.e.: when it gets unlocked, they can send out a whole &#8216;nother barrage of e-mails publicizing MacHeist?).</p>

<p><span class="speaker">Welch: </span>It is a gimmick!  But it&#8217;s a gimmick that your average person who isn&#8217;t paying much attention to can understand and buy into. It creates a communual feeling of everyone working together to &#8220;get the deal&#8221;. Consumer swarming.</p>

<p>Those little red tag &#8220;sale&#8221; stickers are gimmicks too. But they work.</p>

<p><span class="speaker">Manganelli: </span>You mean at regular stores?</p>

<p><span class="speaker">Welch: </span>Yes. Christmas sales are complete and total gimmicks. Everyone knows this.
But it works, for merchants and consumers as well.</p>

<p><span class="speaker">Manganelli: </span>So you see MacHeist as something akin to the &#8220;Valentine&#8217;s Day Sale&#8221; at your local clothing store, only MacHeist is for Mac apps.</p>

<p><span class="speaker">Welch: </span>Yes. It&#8217;s as manufactured of an &#8220;event&#8221; as the various holiday sales are.  Everyone knows when Christmas is coming.  If the stores just tried to do independent sales on their own at random times of the year, it would not be nearly as effective.</p>

<p>They also have spent a LOT of money advertising the event to ensure this happens, BTW: hundreds of thousands of dollars worth.  But when they all get together and do it at one time&#8230; insta-consumer swarm! ;)</p>

<p><span class="speaker">Manganelli: </span>Lol, so, MacHeist is an even <em>better</em> marketer since they&#8217;ve managed to create an &#8220;event&#8221; out of no specific calendar day of the year. It&#8217;s just the &#8220;two week MacHeist event you don&#8217;t wanna miss&#8221;. ;)</p>

<p><span class="speaker">Welch: </span>Right.  That&#8217;s exactly how I view it. We&#8217;ve done sales on our own too, and they&#8217;ve been effective. But no individual company can do a sale on their own, just like no store can do a sale on their own, that will have nearly the power of a collective sale that happens once a year and resonates with consumers.</p>

<p>But remember, we&#8217;re not in it just for the sale at all. In fact, that&#8217;s not even the primary reason we&#8217;re in it. It&#8217;s an excellent marketing opportunity to get people familiar with your brand and product that you might not otherwise reach. This is especially crucial for smaller developers who don&#8217;t do the type of advertising and marketing that Ambrosia does.</p>

<p><span class="speaker">Manganelli: </span>Right, I would think that Ambrosia would be less inclined (but obviously not <em>dis</em>inclined) to participate because you guys have more means of getting your product&#8217;s name out there.</p>

<p><span class="speaker">Welch: </span>True enough. But it is still a very good opportunity for us in my estimation, and given how things went last year, in my experience.</p>

<p>It&#8217;s a balance &#8212; MacHeist is nothing without apps from developers that consumers want. The developer just needs to consider the cost/benefits of participating.  But many apps, especially those that are &#8220;under the radar&#8221; are also nothing if consumers don&#8217;t know about them. Making a great product is only one small part of the battle; you have to let consumers know about the product, and get them to try it, too.</p>

<p><span class="speaker">Manganelli: </span>Right.</p>

<p><span class="speaker">Welch: </span>As an example, look at &#8220;The Hit List&#8221;. It&#8217;s a great little application, very well designed and implemented. But there are many, many &#8220;to do list&#8221; pieces of software out there, and for a small independent developer, trying to market an app like this can be very much an uphill battle.</p>

<p><span class="speaker">Manganelli: </span>Yeah, absolutely. I think that&#8217;s one of the great things about the iPhone App Store: there&#8217;s one place where everyone can start looking for apps, and Apple lists every apps that it approves in that store.</p>

<p><span class="speaker">Welch: </span>The iPhone App store is even worse.  It desperately needs a &#8220;MacHeist&#8221; of some sort.  There&#8217;s sooooo much stuff up there, most people never see anything if it isn&#8217;t one one of the &#8220;top 10&#8221; lists.</p>

<p>That&#8217;s what promotions are about: getting product in front of consumers that they normally wouldn&#8217;t see. Your average person doesn&#8217;t cruise VersionTracker looking at new software that comes out daily.</p>

<p><span class="speaker">Manganelli: </span>True, but it&#8217;s a bit different for the iPhone since there&#8217;s only one place where you can ever get apps, whereas with the Mac there&#8217;s no central repository.  I see what you&#8217;re saying, though, about there being so many apps in the App Store that it&#8217;s hard to find the smaller ones anymore.</p>

<p><span class="speaker">Welch: </span>If I came out with a GREAT To Do list app for the iPhone right now, it would be BURIED. Who would ever see it?</p>

<p>It&#8217;s not just that it&#8217;s hard to find them, it&#8217;s that your average person doesn&#8217;t even bother looking. If they do look, they don&#8217;t go much past the &#8220;top 10&#8221; lists. That&#8217;s where promotional events like MacHeist come in: a big event that people who would never ever bother spending the time looking for XXX software will get onboard and participate in.</p>

<p>I think if they did MacHeist more than once a year &#8212; just like if stores tried to do Christmas sales more than one a year &#8212; it would severely dilute its effectiveness in the minds of consumers. Just as people look forward to the Christmas sale every year, they also look forward to MacHeist.</p>

<p><span class="speaker">Manganelli: </span>Right, I get where you&#8217;re coming from. But for the iPhone App Store, you can just go to iTunes and search for &#8220;to do list&#8221; and get right to what you&#8217;re looking for, and the results aren&#8217;t biased towards the more popular apps, as far as I can tell.</p>

<p><span class="speaker">Welch: </span> The average person doesn&#8217;t even know they necessarily want a piece of &#8220;to do&#8221; list software, though. And I think that&#8217;s the case with many apps in the MacHeist bundle.  People may not know they want or could use something until they see it. MacHeist is an event that makes them see it.</p>

<p><span class="speaker">Manganelli: </span>So I guess my own qualms with buying the MacHeist bundle sort of rest with something that I ranted about last year, that MacHeist seems to be profiting the most from the bundle and the developers don&#8217;t see much of the money. I understand the terms have changed this year (e.g.: developers get a percentage cut rather than a flat rate). But since you see MacHeist as primarily a marketing event, you would have no problem with MacHeist taking most of the money from the sales? That is, since it&#8217;s a <em>marketing</em> event, the <em>marketers</em> should get the most profit?</p>

<p><span class="speaker">Welch: </span>Last year it was a percentage too, btw.  So this isn&#8217;t a change for this year.</p>

<p><span class="speaker">Manganelli: </span>Ah, OK, my bad. But regardless of whether developers get a percentage or not, I guess the question still stands &#8212; since you value it more as a marketing event, it&#8217;s OK for the marketers to get the most money?</p>

<p><span class="speaker">Welch: </span>MacHeist is a marketing event &#8212; but like any marketing event, the idea is that the money you pay for the marketing/promotion ultimately ends up with you profiting somewhere down the line.  It would entirely depend on the product in question, its life cycle, where it stood in relation to competition in the market, etc.</p>

<p>We don&#8217;t <em>lose</em> any money by having our product be part of the bundle except for sales from people who would have bought our product already, but instead bought it from the bundle. Are there some of those sales? Sure. But our goal isn&#8217;t to reach frugal consumers, it is to reach a broader base of people who might not have seen our product, or known that they had any use for it.</p>

<p><span class="speaker">Manganelli: </span>Lol, OK. I have two more questions, but I&#8217;m already starting to anticipate your answers based on how you&#8217;ve framed MacHeist (a marketing event, rather than primarily focused on sales).</p>

<p>Why don&#8217;t you band together with other developers and push a bundle deal yourselves? I imagine the answer is because MacHeist has the dedicated resources to create a better marketing event since they&#8217;re focused on that, and so it&#8217;s far more valuable and a better use of your time if you leave the marketing to the marketing professionals, i.e.: MacHeist.</p>

<p><span class="speaker">Welch: </span>You&#8217;re correct. We participated in such an event a few years ago (which I believe was a direct response to the perceived &#8220;badness&#8221; of MacHeist). Because of relative lack of promotion, the event, and thus the sales, were relatively anemic.</p>

<p><span class="speaker">Manganelli: </span>OK. And how come having a yearly sales event like MacHeist doesn&#8217;t cause normal Mac software prices to be pushed to bargain-basement prices? That seems to be one of the main problems with the App Store &#8212; that apps need to push their prices down so that they gain publicity, and in the process consumers expect to pay 99¢ for an app. How is that different from MacHeist?</p>

<p><span class="speaker">Welch: </span>The same reason why Christmas sales don&#8217;t cause consumer goods prices to crash through the floor. It happens just once a year, and people know it is an atypical situation (which makes them all the more interested in getting involved in it so they don&#8217;t miss the deal). This is also why I think if they ever did MacHeist more than once a year, it would severely dilute its effectiveness.</p>

<p><span class="speaker">Manganelli: </span>OK, that makes sense. I guess my opinion largely came from thinking of MacHeist as a sales event rather than a marketing event.</p>

<p><span class="speaker">Welch: </span>I can absolutely understand that perspective.  I just think it is only a small part of the story.  We&#8217;ve been in business for over 15 years; I&#8217;m definitely not interested in just a short term sales bump so I can take a trip to the Caribbean. That&#8217;s not what building a sustainable business is about.</p>

<p><span class="speaker">Manganelli: </span>So the marketing/promotion part is the main reason why you participate, and the actual revenue you generate is icing on the cake.</p>

<p><span class="speaker">Welch: </span>That&#8217;s exactly how I see it, yes.</p>

<p><span class="speaker">Manganelli: </span>Mmk, makes sense.</p>

<p><span class="speaker">Welch: </span>With the caveat that you need to look at a particular product to see if it is a good fit for a promotion like MacHeist. Some products are not.</p>

<p><span class="speaker">Manganelli: </span>So products that have been on the market for a while and maybe are at the end of the life aren&#8217;t suited to MacHeist, since there&#8217;s probably not as much effort put into marketing/promotion of that product anyway?  i.e.: you&#8217;d get a better return on your &#8220;marketing investment&#8221; with a product that needs wider recognition.</p>

<p><span class="speaker">Welch: </span>What is MacHeist? It&#8217;s an event-based promotion, essentially a fabricated national holiday for Mac users. If you offer a product in MacHeist, you sacrifice some immediate sales revenue for broader awareness of the product. What products does it make sense to make this sacrifice for?</p>

<p>There are many types of products that it might make sense to make this type of sacrifice for. We&#8217;ve done similar things in the past where Apple bundled a copy of our products on every Mac that they sold. We were paid very little for every computer sold, but they sold a lot of computers.</p>

<p><span class="speaker">Manganelli: </span>Ah, that&#8217;s right, I think I got Deimos Rising with my G5 iMac.</p>

<p><span class="speaker">Welch: </span>We viewed that in a similar manner, not as an immediate source of revenue, but as a great way to broaden awareness for our brand and products.  We received far, far less from Apple per computer sold than from MacHeist per bundle sold. What&#8217;s the difference?</p>

<p><span class="speaker">Manganelli: </span>Far, far more awareness since it was on every Mac that Apple sold (or at least all of a specific model).</p>

<p><span class="speaker">Welch: </span>Sure, but the idea &#8212; and the sacrifice you make &#8212; is exactly the same. You&#8217;re selling your product for far less than list price, and in return you&#8217;re reaching people you normally might not have reached, and broadening awareness of your brand/product.  Same exact thing.</p>

<p><span class="speaker">Manganelli: </span>Right.  Can you make any comparisons between how effective MacHeist II was compared to the bundling that you did with Apple?</p>

<p><span class="speaker">Welch: </span>Effective in terms of&#8230;?</p>

<p><span class="speaker">Manganelli: </span>Well, I guess in terms of awareness of your company and other products? Do you see sales bumps for other products when you do a promotion like MacHeist or Mac bundling?</p>

<p><span class="speaker">Welch: </span>Keep in mind that this type of thing is not an exact science in terms of measuring the results. A certain amount of advertising/marketing can be really well measured, but many incidental aspects of it just cannot.</p>

<p>For instance, you got Deimos Rising on your Mac. Maybe you never would have bought it other wise, but you liked it, and told a friend about it, or some friends saw you playing it, and decided to get it too. How do you measure that? The answer is you can&#8217;t, really.</p>

<p>Or maybe prior to Deimos Rising, you&#8217;d never heard of Ambrosia, and went to check out what other games we had. Something that you would not have done if it didn&#8217;t come for free on your Mac. Again, how do you measure it?</p>

<p><span class="speaker">Manganelli: </span>That&#8217;s true, but ultimately me telling my friends about Deimos Rising will translate into some portion of sales, right?</p>

<p><span class="speaker">Welch: </span>What I can tell you is that overall, we saw sales of bundled products go up after doing both the Apple bundle, and MacHeist.  I honestly don&#8217;t remember the numbers for the Apple bundling, so I can&#8217;t give you a direct comparison. It&#8217;s been a while since they bundled it.</p>

<p><span class="speaker">Manganelli: </span>OK, no problem. But it was still a useful/worthwhile endeavor for Ambrosia to bundle Deimos Rising with Macs.</p>

<p><span class="speaker">Welch: </span>Yep, I&#8217;d do it again for sure.</p>

<p><span class="speaker">Manganelli: </span>One other question now that I think about it &#8212; this was never very clear to me, but is the version of Snapz Pro that you included in MacHeist II (and WireTap Studio in MacHeist III) exactly the same as what you would get if you purchased it directly from Ambrosia&#8217;s website? i.e.: you&#8217;d get the exact same registration system, etc, and you can upgrade it to future versions subject to the same terms as a normal purchase?</p>

<p>I heard some people say that you got one-off un-upgradeable builds from the bundle, and other people contradicting those reports, and others saying that MacHeist asked for registration systems to be taken out&#8230; what&#8217;s the deal with that?</p>

<p><span class="speaker">Welch: </span>Yes, the versions we&#8217;ve included in the MacHeist bundle are full versions of our products, fully supported by us, entitled to all of the upgrades, etc.  I believe this may vary from developer to developer, but I think developers who made the choice to limit the benefits of getting their product in the bundle may be being a bit penny wise but pound foolish.</p>

<p>I think there was an effort this year for the bundle to ensure that only full versions were included in the bundle, but I don&#8217;t know for sure that this is the case for all of the products included, so don&#8217;t hold me to it! ;)</p>

<p><span class="speaker">Manganelli: </span>Hehe OK.</p>

<p><span class="speaker">Welch: </span>All I can say is that for our products included in the MacHeist bundles, they are full-on versions of Snapz Pro X and WireTap Studio.</p>

<p><span class="speaker">Manganelli: </span>OK.</p>

<p><span class="speaker">Welch: </span>BTW, I think it&#8217;s fine that some people don&#8217;t like MacHeist, or think it&#8217;s a bad idea, etc. It&#8217;s very possible for reasonable people to disagree; I just wanted you to understand some of the reason why we felt that participating in MacHeist was a good idea for Ambrosia.</p>

<p><span class="speaker">Manganelli: </span>Yeah, your responses have definitely given me a different perspective on this whole thing.</p>

<p><span class="speaker">Welch: </span>Cool. It&#8217;s all good.  For some developers and some products, MacHeist might not be a good idea. For others it is. It&#8217;s definitely a good deal for consumers, and some money going to charity, especially these days, isn&#8217;t a bad thing either.</p>

<p>I don&#8217;t think any developers in the bundle are being &#8220;fooled&#8221; into it.  They may not have the same reasoning I do for being part of it, but I do think they are going into it with both eyes open.</p>

<p><span class="speaker">Manganelli: </span>Oh, right, I didn&#8217;t think that developers were being conned into participating, I&#8217;m sure you all knew what you were getting into. It just seemed, from my perspective, in the long run it wasn&#8217;t such a good deal; whereas the real value in MacHeist seems to be the marketing, which I don&#8217;t particularly value as a consumer.</p>

<p>One of the other unstated assumptions that went along with my post, I think, was that buyers of the bundle only really wanted one or, at max, two of the apps. This is certainly the case for me personally for any bundles that I&#8217;ve seen. So it struck me as a little weird that people would pay $39 to be split up among developers, MacHeist, and charity, rather than paying a little more and supporting the developer directly with a lot more dollars. But if buyers would like to try out some of the other products in the bundle, I guess I can see where added value comes in if that person recommends the app to someone else.</p>

<p><span class="speaker">Welch: </span>Well, that&#8217;s really the strength of the bundle, though. Every person who looks at it will only be interested in a few of the apps, perhaps (at least initially). However it will be a <em>different</em> few apps for each person. This is how much stronger the bundle is as a collective than it would be on its own.</p>

<p>But the more important point is the event that is MacHeist that causes people to look at these apps at all. You are fairly savvy as a Mac user, but I reckon there have to be some apps in the bundle you&#8217;ve never seen before, or if you had, you never downloaded to look at them.</p>

<p>Imagine how it would be for the average person who isn&#8217;t as savvy. They&#8217;ve heard of (maybe?) one app in the bundle, if they are lucky. So the huge event/sale that is MacHeist draws in eyeballs that we as developers might never have had.</p>

<p><span class="speaker">Manganelli: </span>Right.</p>

<p><span class="speaker">Welch: </span>Getting noticed is huge for any business.  Billions are spent every year just on getting noticed (marketing).</p>

<p><span class="speaker">Manganelli: </span>Right. There are some apps in the bundle that I haven&#8217;t heard of, Kinemac and BoinxTV for example, but really the only one that I would consider purchasing the bundle for would be WireTap Studio, and I already have that.</p>

<p><span class="speaker">Welch: </span>I hear ya. But it&#8217;s so cheap.  Can you resist? :D  Haha.</p>

<p><span class="speaker">Manganelli: </span>Haha, I&#8217;ve done so two years running. ;)  I confess there was one bundle that I bought a long time ago.  It was a &#8220;Mystery MacZOT 5&#8221;, and it was 5 apps for $5, but you didn&#8217;t know which apps. I figured I&#8217;d give it a shot &#8212; when they were finally revealed I didn&#8217;t need any of them, and haven&#8217;t used them since. :P</p>

<p><span class="speaker">Welch: </span>THE TRUTH COMES OUT! ;)</p>

<p><span class="speaker">Manganelli: </span>Don&#8217;t worry, I&#8217;ll definitely be editing that out of the transcript. ;)</p>

<p><span class="speaker">Welch: </span>Covering your tracks. Wise.</p>

<p>[&#8230;]</p>

<p><span class="speaker">Welch: </span>Some other developers may not even realize that MacHeist is a marketing event and not a sale&#8230; but they just aren&#8217;t aware of what it really is.  If they view it just as a way to ring the register, they probably aren&#8217;t seeing the big picture IMHO.</p>

<p>Some of the smaller developers that are included, they are getting absolutely fantastic exposure that they wouldn&#8217;t get otherwise. Huuuuuge.</p>

<p><span class="speaker">Manganelli: </span>Yeah, no kidding. I do have to say that MacHeist knows how to get people interested.</p>

<p><span class="speaker">Welch: </span>And people pay advertising firms a LOT of money to get eyeballs like that.  Consider how TV advertising is structured. The stations charge for ads based on the number of eyeballs they reach.</p>

<p><span class="speaker">Manganelli: </span>Yep.</p>

<p><span class="speaker">Welch: </span>It is what it is. What can I tell you, some people hate Christmas sales too. ;)</p>

<p><span class="speaker">Manganelli: </span>Lol, I&#8217;m personally not too fond of going to the store/mall when there are hordes of people around. :P</p>

<p><span class="speaker">Welch: </span>Yeah me either, so I buy stuff online when they do their Christmas sales.</p>

<p><span class="speaker">Manganelli: </span>Hehe so what you&#8217;re saying is that I should be more inclined to participate in MacHeist than the normal Christmas shopping event? ;)</p>

<p><span class="speaker">Welch: </span>Do whatever your conscience guides you to do. ;)</p>

<p><span class="speaker">Manganelli: </span>Ever the eloquent speaker (writer?). ;)</p></div>

<p>Later, after the MacHeist III promotional event ended:</p>

<div style="margin: 0 3em 0 3em;"><p><span class="speaker">Manganelli: </span>So I saw that Multiwinia is another Ambrosia app that you can get if you promote the MacHeist bundle to others.  Was the reasoning to do that the same as including WireTap Studio in the bundle? You wanted a lot of recognition for Multiwinia which is a relatively new Ambrosia app?</p>

<p><span class="speaker">Welch: </span>No, it was entirely different, really.  Multiwinia is a great game, but like all online games, it lives or dies by the depth of the competition available on the &#8216;net. We decided that it&#8217;d make a lot of sense to get a lot of copies of Multiwinia in people&#8217;s hands via this promotion to &#8220;snowball&#8221; the online gaming aspect of it.</p>

<p><span class="speaker">Manganelli: </span>Ah ha. That makes a lot of sense. I&#8217;ve seen Ambrosia apps (like pop-pop, although that&#8217;s old) have multiplayer aspects but not very many participants.  Is that also why you included pop-pop as well?  For the refer-a-friend deal?</p>

<p><span class="speaker">Welch: </span>pop-pop in is hayday had a lot of people playing it &#8212; perhaps this give-away will revitalize that. But every game has a lifecycle, people stop playing games eventually.</p>

<p><span class="speaker">Manganelli: </span>Right.</p>

<p><span class="speaker">Welch: </span>I personally really like pop-pop, and I hope a bunch of people start playing it again. :)</p>

<p><span class="speaker">Manganelli: </span>Yeah, me too, I&#8217;m glad it made the jump to Intel and Windows. :)</p>

<p>How do you feel about MacHeist&#8217;s TweetBlast promotion? I know there is a lot of resentment on Twitter (or, there is from what I can tell) about them basically getting bundle purchasers to spam their Twitter followers to get a couple more apps, one of which is Multiwinia. What do you think about that resentment? Do you feel Twitterers in particular might not want to deal with Ambrosia because you guys directly benefitted from the TweetBlast?</p>

<p>(From what I can tell, you don&#8217;t use Twitter so I don&#8217;t know if you personally have seen any resentment.)</p>

<p><span class="speaker">Welch: </span>Well, I think if I had to make an analogy, I think I&#8217;d say it is a lot less like &#8220;spamming&#8221; and a lot more like grass roots campaigning.  In other words, the Tweetblast was sent out by a lot of individuals who had something to gain to a relative few people each (those who followed them). Whereas spam is sent out by one person/entity to the masses.</p>

<p>I will grant you, though, that grass roots campaigners can be equally as annoying as mass mailings. Especially when they knock on your door during the day and ask you political questions. ;)</p>

<p><span class="speaker">Manganelli: </span>True, but the result is the same. As an example, I saw 5 or 6 tweets that were the same character for character, and the effective reach of the TweetBlast is the same as a mass-marketing e-mail.</p>

<p>(For what it&#8217;s worth, I unfollowed anybody who posted that tweet, but I suppose it&#8217;s not really a lost purchaser of the bundle for you. :P )</p>

<p><span class="speaker">Welch: </span>If someone dies in manslaughter or murder, the results are the same &#8212; but it is viewed in a very different light.  I&#8217;m really on the fence about the Tweetblast concept. I understand how it is annoying and intrusive. But it&#8217;s also something done on a voluntary basis by an awful lot of people.</p>

<p><span class="speaker">Manganelli: </span>I think that&#8217;s a bit of a straw man [the manslaughter vs. murder analogy]. It would be more like the difference between someone personally killing another and someone ordering a bunch of his minions to murder a person.  In either case, the man at the top should be held responsible, no?</p>

<p><span class="speaker">Welch: </span>I have a friend who asks me about buying Mary Kay products for my wife from time to time.  I don&#8217;t mind that the same way I do the &#8220;penis enlargement&#8221; emails I receive from spammers. And for the records, I&#8217;m comfortable with the size of my penis, thank you very much. ;)</p>

<p><span class="speaker">Manganelli: </span>Can I post that publicly? ;)</p>

<p><span class="speaker">Welch: </span>Sure.</p>

<p><span class="speaker">Manganelli: </span>Well, in any case, that situation is also different because it&#8217;s someone organically telling someone about another product. It&#8217;s not Mary Kay directing to this person exactly how and when to say it, and offering goods in return.</p>

<p>I mean, I would be far more charitable to the TweetBlast if, at the very least, there was a way for them to accept any form of tweet as long as it mentioned &#8220;MacHeist&#8221; and &#8220;Delicious Library 2&#8221;, and not a specifically crafted tweet.</p>

<p><span class="speaker">Welch: </span>I do think that the Tweetblast was somewhat of an abuse of the power of Twitter. But it&#8217;s been done before, in political campaigns here in the USA, they would organize mass tweets too.</p>

<p>I guess what has me knotted up about it is that yes, I can see how it would be annoying. But it&#8217;s also thousands of people doing it on their own volition to get the word out about something they care about. Isn&#8217;t that was Twitter is all about?  Do we really say to Twitter users &#8220;No, you can&#8217;t Tweet that&#8221;?</p>

<p><span class="speaker">Manganelli: </span>That is what Twitter is about, and no, we don&#8217;t say that, but it&#8217;s the way that they went about it. I don&#8217;t have a problem with people expressing their opinions about MacHeist, for example.  And isn&#8217;t that just as effective as a TweetBlast?</p>

<p><span class="speaker">Welch: </span>Well, it&#8217;s really just a high-tech version of &#8220;refer friends, and you get a discount or benefit&#8221; &#8212; a marketing technique that has been used for centuries. It&#8217;s just hyper-effective in this modern age.</p>

<p><span class="speaker">Manganelli: </span>I can see where you&#8217;re coming from regarding political campaigns, but just because politicians do it doesn&#8217;t mean it&#8217;s right. In fact, it may be quite the opposite. Well, I kid, I&#8217;m not <em>that</em> cynical.</p>

<p><span class="speaker">Welch: </span>I agree with you on that.  In fact in general, if politicians do it, it&#8217;s probably wrong. ;)</p>

<p><span class="speaker">Manganelli: </span>Well as with all things internets, things that become more hyper-effective also get hyper-annoying. I would think that marketers would need to adjust to the realities of the internets and make sure tactics are less intrusive to compensate.</p>

<p><span class="speaker">Welch: </span>But it&#8217;s not really politicians doing that, it&#8217;s people who support those politicians who are willingly doing the grass roots campaigning. It&#8217;s still annoying and intrusive, but if that&#8217;s what they want to do&#8230;</p>

<p><span class="speaker">Manganelli: </span>Yeah, I suppose. And I <em>do</em> have an inherent bias against marketing and MacHeist, so I won&#8217;t press that any further. I think I&#8217;ve mined all I wanted to out of this line of questioning. ;)</p>

<p><span class="speaker">Welch: </span>I think something the MacHeist guys do is they push the boundaries of marketing concepts using the new tools available. Sometimes they hit a home run, and sometimes they pee in people&#8217;s cornflakes.</p>

<p>I can absolutely understand the outrage regarding the Tweetblast, and really, we&#8217;re not benefitting much at all from it. The give-away is almost inconsequential in terms of revenue.</p>

<p><span class="speaker">Manganelli: </span>Right, but you do benefit from the increased number of users in the online play, hopefully anyway.</p>

<p><span class="speaker">Welch: </span>Possibly. My expectations are not terribly high for that, but you&#8217;re right, that is a possible benefit to us.</p>

<p><span class="speaker">Manganelli: </span>Okie.</p>

<p><span class="speaker">Welch: </span>If you want to ask me the real question, that is, would Ambrosia do something like this on our own to promote our products, the answer is no. We would not.  I&#8217;m not sure if that&#8217;s good or bad.</p>

<p>It&#8217;s good in that we wouldn&#8217;t be pissing off the same people who are mad about the Tweetblast now. But perhaps it is bad in that we&#8217;re not exploring the new frontiers in promotion.</p>

<p><span class="speaker">Manganelli: </span>What was your general impression of my article in the first place? (Not really interested in candy-coated opinions.) Did it strike you as arrogant for saying whether the deal was bad in the long run and for calling customers tightwads?</p>

<p><span class="speaker">Welch: </span>I enjoyed the article actually.  My overall impression was &#8220;He&#8217;s not realizing that MacHeist is a promotional event before it is a sale&#8221; and then the issue about tightwads.  I think everyone is always looking for a deal, especially in this economy.  But I thought it was a clearly and passionately written article, and so I enjoyed it.</p>

<p><span class="speaker">Manganelli: </span>FWIW, I got a <em>ton</em> of flak in the comments, but all the e-mail (which has been a grand total of about 5, thank god) I got was positive and/or constructive, except one.  Yeah, the economy aspect didn&#8217;t occur to me, which I think is one reason for the strong backlash.</p>

<p><span class="speaker">Welch: </span>Let me give you an example.  My wife wanted a treadmill. Don&#8217;t ask me why, we live on 17 acres, and right next to a walking trail that lots of people run on. We have about 5 months out of the year that are really nice outside here, though, and we have a newborn baby she&#8217;s looking after, so she wants to be able to run in the house.</p>

<p>So fair enough, I do the research, and I realize that a good quality treadmill &#8212; nothing too extravagant &#8212; is going to be between $2,000-$3,000. That&#8217;s not cheap at all.</p>

<p>So I find a company that makes the &#8220;Mercedes of the treadmill world&#8221; and find that they have an $7,800 (!!!) treadmill that they sell factory reconditioned for just $2,700. Great deal, says I, let&#8217;s get a Mercedes for the price of a Honda, by buying it used instead of new.</p>

<p>I order it, and I receive a call from the company saying that they didn&#8217;t have any used models of the one we ordered. They&#8217;d errantly left it up on their web site, so they were sending me a new one for the price of a used one, with a full 10 year warranty.
Am I a tightwad for wanting to pay a lot less for something of good quality? I guess, but I thought myself rather clever getting this deal on a reconditioned model :)</p>

<p><span class="speaker">Manganelli: </span>That&#8217;s been one of the big criticisms of my article. Here&#8217;s how I would respond:</p>

<p>I mean &#8220;tightwad&#8221; in the &#8220;conscientious consumer&#8221; sense. I think my article can come off a little arrogant because of this aspect too, but I <em>do</em> consciously think of where my money goes. For example, I used to visit a mini-golf place here in CA called Golfland, and I stopped going there because they donated $1000 in support to the effort for Prop. 8. It&#8217;s similar when I get a good deal from a company; I like to thank them profusely and send an e-mail to a manager if I got particularly good support from someone, and I make sure to give glowing recommendations to other potential customers (this happened just recently with a T-shirt company that I used).
So when I say &#8220;tightwads&#8221;, what I mean is that people don&#8217;t think about how the money would affect the developer. There&#8217;s a difference between a company giving a good deal to a single customer, and a company giving an <em>insane</em> deal to <em>tens of thousands</em> of customers.</p>

<p>So I don&#8217;t inherently have a problem with people going out and seeking a good deal on other products. It&#8217;s just that when participating in MacHeist and buying the bundle (or, for example, when participating in the TweetBlast), the customers are not thinking of the full ramifications of their money or actions.</p>

<p>Does that make sense?</p>

<p><span class="speaker">Welch: </span>Yeah, let me respond.  I think that you&#8217;re trying to be a nanny to the developers a bit too much. Developers know what they are getting into, the consumer shouldn&#8217;t have to think about how it is or isn&#8217;t affecting them IMHO.  But I&#8217;m with you on the Tweetblast thing, I can see some people not supporting MacHeist if they are offended by it.</p>

<p><span class="speaker">Manganelli: </span>Part of it is the portion of money that goes to developers, and part of it goes back to something we talked last time about money going to MacHeist, which is essentially a middleman that provides no added value to the app to me as a consumer. So &#8220;tightwads&#8221; in the sense that purchasers may not have considered the ramifications of the money/actions, so they&#8217;re really only interested in getting a good deal.  But I&#8217;m harping now.</p>

<p>I suppose I could be overthinking this too much in where the money goes, but it still just irks me a bit.</p>

<p><span class="speaker">Welch: </span>Aha, but see, MacHeist does add value. Enormous value, in fact.  They spent about $400,000 promoting MacHeist 2009, with a team of 15 people working on the project in various capacities.  Any idea what it&#8217;d cost to hire a PR firm to do similar promotional work for you? :)</p>

<p><span class="speaker">Manganelli: </span>Oh, yes, of course. I meant &#8220;added value&#8221; to the app in particular. As in, I don&#8217;t get any more functionality having purchased the app through MacHeist than I do through your normal sales channels.  We touched on this previously; I can see how MacHeist&#8217;s marketing efforts are extremely valuable to the developers.</p>

<p>Have you seen any effect of MacHeist III on sales of Snapz Pro X?</p>

<p><span class="speaker">Welch: </span>Too soon to tell, and many factors are at work. We&#8217;re working on major new versions of that product anyway, so none of that really matters to me.</p>

<p><span class="speaker">Manganelli: </span>OK, that&#8217;s cool. I was just wondering; I&#8217;m trying to see if sales of apps through bundles were gaining new customers to the app space rather than cannibalizing sales of other similar apps.  That&#8217;ll be pretty hard to figure out.</p>

<p><span class="speaker">Welch: </span>Yeah that&#8217;s the thing, with marketing/promotion, some things can be very precisely measured, but much of it is throw stuff to the wall to see what sticks.</p>

<p>You see <a href="http://forums.macworld.com/thread/112034?tstart=0" target="_blank">that comment</a> on a Macworld article?  The <a href="http://www.macworld.com/article/139830/2009/04/macheist.html" target="_blank">Macworld article</a> complaining about MacHeist Twitter spam with a screenshot of the Macworld MacHeist spam email. ;)</p>

<p>I think that actually is a very interesting statement on the duality of intentions here
Macworld editors are steamed about Twitter spam. Macworld the company sends out email spam. The Macworld editors argue the nuanced difference between the two.</p>

<p><span class="speaker">Manganelli: </span>Although, to be fair, Cohen doesn&#8217;t seem to be the one arguing the nuances, even though he would be the one being hypocritical.</p>

<p><span class="speaker">Welch: </span>I think there will always be the kind of battle between marketing and personal interests.  Twitter is just yet another battleground apparently.  BTW, we have slightly different priorities on where our consumer dollars go, you and I. Yours are perhaps better in a way, but for instance, I will not &#8220;buy American&#8221; &#8212; I think it&#8217;s pointless.</p>

<p><span class="speaker">Manganelli: </span>I&#8217;m not particularly wedded to a certain country of origin. Certainly cars, for example, is a good example of this; American cars are usually gas guzzlers. I actually consider myself to be a supporter of globalization. I think that&#8217;s where we&#8217;re inevitably headed.  I just like to know that my dollars are effectively used and go to good causes/people/groups after it leaves my hands.</p>

<p><span class="speaker">Welch: </span>The point is that to some people, &#8220;buying American&#8221; is as important as not buying from someone who supported Prop. 8 is to you. What is being supported/not supported doesn&#8217;t matter.</p>

<p><span class="speaker">Manganelli: </span>Well, again, functionality and form are definitely at the top of my criteria list when considering purchase. I won&#8217;t, for example, buy something extremely shitty just because it&#8217;s from a &#8220;green&#8221; or &#8220;nice&#8221; organization.</p>

<p>However, if I&#8217;m trying to decide between two things with similar functionality and form, and I need another criterion to differentiate between the two, then &#8220;green&#8221;/&#8221;worker-friendly&#8221;/&#8221;gay-friendly&#8221; may be the deciding factor.</p>

<p><span class="speaker">Welch: </span>Me, I refuse to buy American anything [on the sole basis that] it&#8217;s from this country. That is simple grass roots corporate welfare, and encourages the companies to put out garbage and the unions to continue feasting on the carcass of the dying company.  My dollars go to what I consider to be the best product. What better could you do for American companies than force them to make good product, or die?</p>

<p><span class="speaker">Manganelli: </span>Oh, absolutely. The &#8220;best product&#8221; is the first thing I use to decide on which product to purchase.  But sometimes you need other criteria because you can&#8217;t really tell which is the &#8220;best&#8221; product.</p>

<p><span class="speaker">Welch: </span>I&#8217;m more utilitarian, I guess, but I do think that the MacHeist guys earned their money.  It looks like our revenue from this sale is about 3 weeks worth of &#8220;normal&#8221; revenue to us.</p>

<p><span class="speaker">Manganelli: </span>I mean, consider this: you have the option of buying car A from salesman A, and you get the exact same deal, price, benefits, and convenience as buying that same car A from salesman B. However, subsequently, you learn that salesman A doesn&#8217;t provide health insurance or a living wage to his workers, whereas salesman B does. Do you not use that as a factor <em>at all</em> in considering who to buy the car from?</p>

<p><span class="speaker">Welch: </span>I&#8217;d probably buy from the guy I liked better. I&#8217;m shallow. ;)</p>

<p><span class="speaker">Manganelli: </span>LOL.  OK, fair enough.  How has Ambrosia been weathering the economic downturn, anyway?</p>

<p><span class="speaker">Welch: </span>Our sales are down, as you would expect.  I have talked to a number of businessmen in various forms of business, sales are all down a bit.</p>

<p><span class="speaker">Manganelli: </span>Enough to lay off anybody who was already working at Ambrosia?</p>

<p><span class="speaker">Welch: </span>Nah.  I think if I asked the employees if they minded the Tweetblast if it meant they could keep their jobs, they&#8217;d say they are okay with it hehe.</p>

<p><span class="speaker">Manganelli: </span>*LOL* Okie, well thanks again.</p>

<p><span class="speaker">Welch: </span>Sure thing.</p>
</div>
]]></description>
      <pubDate>Mon, 20 Jul 2009 10:29:17 -0700</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/reports/from_the_mouths_of_developers.html</guid>
	  
 </item>
<item>
      <title><![CDATA[The Myth About Reliability]]></title>
      <link>http://homepage.mac.com/simx/technonova/rants/the_myth_about_reliability.html</link>
      <description><![CDATA[<p>Khoi Vinh, over at Subtraction, wrote an article two years ago entitled <a href="http://www.subtraction.com/2007/07/16/designed-det" target="_blank">&#8220;Designed Deterioration&#8221;</a>, in which he writes about his cast iron skillet:</p>

<blockquote>
  <p>[I]t’s also a beautiful piece of design. After cooking in it and cleaning it up, I’ve spent a lot of time just looking it over, marveling at how its very deterioration has been incorporated into the design of the object, at how it’s gotten more attractive — less ignorant — the more I use it. I’m not particularly sentimental about much in my kitchen, but I would be heartbroken if you took away this iron skillet</p>
</blockquote>

<p>He contrasts this with the wear and tear that his PowerBook had received:</p>

<blockquote>
  <p>Looking at the digital technology I own, what moderate deterioration to be found — dents in my laptop, a gash in the side of a laser printer I own, the accumulated grime on my computer keyboard — doesn’t make these items more desirable at all. In fact, when I see the way the corner on my aluminum PowerBook has been warped due to a nasty fall from a chair, I cringe. Through this obvious, glaring example of use, of accumulated knowledge, the object itself hasn’t attained an additional whit of beauty.</p>
</blockquote>

<p>I first read this article over a year ago, and it&#8217;s always been in the back of my mind.  Every few months a new editorial or a new video rant about how digital technology (especially products from Apple) is too much about form over function, about how it deteriorates way too quickly, and how computer manufacturers should concentrate more on making their products last longer.  (Remember <a href="http://www.youtube.com/watch?v=BK3uUfMWy6I">that whole hooplah</a> about the iPod&#8217;s battery lasting only 18 months?)  I also frequently see <a href="http://earthlingsoft.net/ssp/blog/2008/11/oh_my">complaints from people</a> when they have to bring their computer in for repair, and then have to wade through the inevitable complaints about how digital technology is trash.</p>

<p>My gut instinct is always to roll my eyes at these kinds of articles.  And while Vinh&#8217;s article is probably one of the more eloquent ones to make this point, his article still elicits the same reaction from me. <br />
<br /></p>

<h2>Flawed Comparisons</h2>

<p>My first thought about Vinh&#8217;s article is this: is he seriously comparing a suitcase or a skillet to a <em>computer</em>?  Did he really just do that and expect us to take his article seriously?</p>

<p>For the most part, Vinh is comparing the outsides of computers, suitcases, and skillets.  But consider the contents of each: a suitcase is designed to keep one&#8217;s belongings protected and all in one place.  The typical contents of a suitcase are clothes.  Clothes can be bumped and tossed around and won&#8217;t be the worse for wear.  Clothes don&#8217;t have electrical components.  Clothes don&#8217;t have connections.  Occasionally you may be transporting fragile objects (like glass or maybe ceramics), but aside from their fragility (which can be mitigated with your clothes), they don&#8217;t have nearly as many potential problems with their innards as do computers.</p>

<p>In contrast, a computer&#8217;s contents are highly sensitive.  If you get a single scratch or a single speck of dust on the platters of a hard drive, you lose data.  If you spill liquid on the electronic components of a laptop, they typically short out and require replacement.  If a connection inside your computer comes loose — one that isn&#8217;t user-serviceable like RAM or your hard drive — it&#8217;ll require opening up and removing so many parts inside the laptop which requires skill that most users don&#8217;t have.</p>

<p>And therein lies the answer to Vinh&#8217;s question about why we take pride in pristine looks of our computers but not in the pristine looks of our suitcases.  It&#8217;s because of the contents of each.  A computer&#8217;s contents are fragile, so we try to minimize nicks and cracks on the <em>outside</em>, the result of which could have caused problems on the <em>inside</em>.  The higher the sustained damage of a computer on the outside, the more likely it is that damage has occurred on the <em>inside</em>.  A suitcase doesn&#8217;t inherently have any fragile contents, so we&#8217;re not as concerned about the outside sustaining damage.</p>

<p>The suggestion that computer manufacturers have not designed for deterioration is actually pretty ludicrous, especially because beauty is in the eye of the beholder.  Some people <em>like</em> the looks of scratched iPods.</p>

<p>Putting psychology aside, though, I question even the premise that suitcase or skillet manufacturers have designed for deterioration.  My dad is one of the best cooks that I know, and he prides himself on having absolutely <em>pristine</em> pots and pans.  Metal utensils are strictly forbidden when using his skillets; only wooden spoons and spatulas are allowed.  (He breaks this rule occasionally, but he&#8217;s still very careful when using metal utensils.)  It&#8217;s practically a sin to burn something on his pans, because it takes painstaking work (and is sometimes impossible) to get the burned material off.</p>

<p>It&#8217;s funny, because even Vinh himself cringes at the thought of having &#8220;seasoning&#8221; in his pan, the result of hundreds if not thousands of uses of the skillet.  But then he goes back to thinking that his skillet is indispensable.</p>

<p>The reason Vinh <em>actually</em> doesn&#8217;t want his skillet taken away is because he&#8217;s found a skillet that <em>works</em> well for him.  There are numerous little aspects of a skillet that make it enjoyable to use: the shape of the handle, whether the handle gets hot when you cook with it, whether the skillet is light enough to easily flip things with, the weight balance, the material used to create the skillet, etc.  If I brought him a skillet that worked better in every way to his old skillet, I bet he wouldn&#8217;t hesitate to start using the new one. <br />
<br /></p>

<h2>A Better Analogy</h2>

<p>I can also think of a number of other products that are decidedly non-electronic that don&#8217;t get better with increasing wear and tear.  Bikes, for example, look worse when they&#8217;re dirty and dinged.  Many buildings look like eyesores when they get dirt and smog and cracks on them.  Even suitcases and skillets, to a degree, look pretty bad when they&#8217;re banged up.</p>

<p>Overall, I think that suitcases and skillets are pretty poor objects to which to compare computers.</p>

<p>Here&#8217;s a better analogy: cars.</p>

<p>Cars are designed to look pristine on the outside.  When people get new cars, they try to delay that moment when they get their first ding.  (My dad, for example, recently got a new car.  Now he insists on parking in far-away spots that are at the end of a row, which only have one adjacent spot instead of two.  If that requires parking in the next lot over, he&#8217;ll do it.)  When people see an old classic car, they fantasize about buying it <em>and fixing it up</em>, and that includes getting a new paint job and banging out the dents and dings.</p>

<p>Not only that, but automobiles have reasonably complicated innards.  They contain engines and moving parts and potentially flammable liquids, in addition to some electronics similar to what computers contain.  More importantly, they <em>always</em> contain <em>humans</em>.</p>

<p>Is it any surprise that people are afraid to ding and bang up the outsides of their cars, when they contain ourselves? <br />
<br /></p>

<h2>Planned Obsolesence</h2>

<p>Vinh&#8217;s ulterior motive for penning this article, I suspect, is motivated by a more pernicious myth:</p>

<blockquote>
  <p>Of course, the blame for the absence of designed deterioration from these products can be laid squarely at the feet of a more widely accepted design concept: planned obsolescence. I will probably never buy another skillet to replace the one I own for as long as I live, even though a new one is extremely affordable.</p>
</blockquote>

<p>Bullshit.</p>

<p>Planned obsolescence is a myth, pure and simple.</p>

<p>The analogy of a skillet, here, is even more preposterous than the skillet&#8217;s use when talking about &#8220;designed deterioration&#8221;.  A skillet doesn&#8217;t contain millions of electronic components, which, if broken, can cause issues when using the skillet.  No, a skillet is composed of two things: the skillet and the handle.  That a skillet is more durable and has a longer lifetime than a computer is, seriously, <strong>no fucking surprise at all</strong>.</p>

<p>Let&#8217;s go back to a more reasonable analogy: automobiles.  Automobiles require <em>constant</em> maintenance and repairs, especially when they near the end of their life.  Not only do you have to fill your car with gas, but you have to continually add oil.  You have to add air to your tires.  It&#8217;s recommended to have your engine serviced every 50,000 miles or so.  Sometimes your transmission or radiator or carburetor breaks, and you have to spend hundreds or thousands of dollars to fix it.</p>

<p>Most people who use cars don&#8217;t have the expertise to repair their own cars, and when they take it to a mechanic, it often costs at <em>least</em> several percent of the original cost of the car.</p>

<p>Same for a computer.  Usually, your computer works pretty well and without problems for the first year or two of its life.  Then you start getting problems with the trackpad button not clicking correctly, or your optical drive failing to correctly burn DVDs, or your battery life starts deteriorating.  Without constant maintenance or repairs to your computer, it can fall into disrepair and stop working.</p>

<p>Not only that, but computers <em>can</em> and <em>do</em> last a long time.  The whole notion that a computer lasts a maximum of a few years is <em>bullshit</em>.  Our family&#8217;s original Mac Plus, bought around 1986, still works.  My original iMac, bought in 1998, still works to this day, without (if I remember correctly) a single repair.  My G4 iMac, bought in 2002, still works.  My dad&#8217;s aluminum PowerBook, originally purchased in 2005 or so, also still works.  And it&#8217;s not really limited to Apple computers either.  There are several computers still running Windows 95 at Stanford which operate expensive lab equipment.</p>

<p>More to the point, though, <em>your bad experience with your computer does not indicate anything about computers as a whole</em>.  People make this mistake all the time.  Repeat after me: the plural of &#8216;anecdote&#8217; is not &#8216;data&#8217;.</p>

<p>I&#8217;m not suggesting that computers typically last decades like automobiles do.  But they can.  And with continual maintenance, you can extend the life of any computer for at least half a decade, if not more.</p>

<p>Do people really think that computer manufacturers sit in a room and decide the average lifetime of their products?  Do executives <em>really</em> sit down and think up new features that use excess processing power simply to prevent older computers from running newer operating systems at acceptable speeds?  Do people really think that computer manufacturers would <em>not</em> jump at the chance to improve the reliability of their products without significantly increasing the cost?  <em>Of course they fucking would.</em> They&#8217;d trumpet and parade their newfound reliability in front of all consumers and other manufacturers (cf. <a href="http://www.apple.com/macbookpro/design.html">Apple</a>).</p>

<p>There&#8217;s no real reason to believe that intentionally shortening the lifetime of a computer would work to a manufacturer&#8217;s advantage, anyway!  Moore&#8217;s Law takes care of obsolescence.  Processor, memory, and graphics card technology are increasing <em>so</em> quickly, with programmers taking advantage of that increase in power so immediately, that even a perfectly functioning computer in pristine condition that lasts ten years would be hard-pressed to run cutting edge applications and operating systems.  Sure, you <i><a href="http://homepage.mac.com/simx/technonova/publications/curiosities_mac_os_x_on_a_bondi_blue_im.html">can</a></i> do it.  But it&#8217;s ridiculous to expect that it will be able to run cutting-edge software at an acceptable speed.  The pace of the computer industry is just too fast.</p>

<p>There are <em>always</em> new scientific applications and games that require more processing power, there is <em>always</em> new hardware and software innovations that take the place of older ones, and even if programmers optimized the <em>crap</em> out of operating systems and software, it wouldn&#8217;t take the place of the sheer processing power that newer computers provide.  Time is simply <em>better spent</em> obsoleting older computers through faster hardware and newer software than trying to maximize the lifetime of an individual computer model. <br />
<br /></p>

<h2>The Human Computer</h2>

<p>Reliability of hardware and even software is <em>always</em> a problem in the computer industry.  Physical components break down, and software inevitably has bugs created by imperfect code that cause it to function incorrectly.  It&#8217;s always worth it to try and find and fix bugs in software and to find ways to cost-effectively improve the reliability of hardware.  But it&#8217;s also worth it to realize that the current situation is to be expected.</p>

<p>Think about the human body.  It&#8217;s the result of <em>billions</em> of years of evolution of life on our planet.  Modern humans have only been around for hundreds of thousands of years — a very brief period of time compared to the age of the earth — but humans have still benefitted from all the previous evolution of life.</p>

<p>And despite all that time, humans still have problems.  Our organs still sometimes fail, requiring replacement.  Bones still get broken in accidents.  Humans still get sick from viruses as common as influenza.</p>

<p>And people expect computers — complicated tools created by humans — to not be subject to the same pitfalls that humans are?</p>

<p>Please.</p>
]]></description>
      <pubDate>Mon, 27 Apr 2009 02:48:55 -0700</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/rants/the_myth_about_reliability.html</guid>
	  
 </item>
<item>
      <title><![CDATA[On the Continuing MacHeist Controversy]]></title>
      <link>http://homepage.mac.com/simx/technonova/rants/on_the_continuing_macheist_controversy.html</link>
      <description><![CDATA[<p>[UPDATE 2009-03-26: For everyone who doesn&#8217;t seem to get this: I <em>know</em> that the developers were not forced to participate in this bundle.  That is irrelevant.  And yes, developers <em>will</em> get a huge sum of cash up front.  That is also irrelevant.  I think in the long run it&#8217;s a bad deal for developers, and consumers should think about where their money goes.  Why pay $39, a portion of which goes to MacHeist &#8212; middlemen who add no value to the actual <em>apps</em> themselves &#8212; when you can pay a little bit more and have <em>all</em> of your money go to the actual developers?</p>

<p>Put it this way: would you rather pay $10 to Universal Music Group for a music album, or $15 directly to the band in question?</p>

<p>Also, please see my <a href="http://homepage.mac.com/simx/technonova/rants/macsheist.html" target="_blank">three</a> <a href="http://homepage.mac.com/simx/technonova/rants/false_analogies.html" target="_blank">previous</a> <a href="http://homepage.mac.com/simx/technonova/rants/statistical_bias_in_macheist_participan.html" target="_blank">posts</a> on MacHeist before commenting.  Thanks.]</p>

<p>Gruber over at Daring Fireball <a href="http://daringfireball.net/linked/2009/03/25/macheist" target="_blank">writes</a>:</p>

<blockquote>
  <p>I’m unsure why there seems to be lingering controversy regarding the new MacHeist bundle. My issue with the first MacHeist bundle two years ago was that developers were offered flat fees, rather than percentage cuts. Clearly this is no longer the case. Gus Mueller, critic of the terms of the original bundle, is participating in this year’s, and he puts it plainly:</p>

<blockquote>
  <p>So why is Flying Meat participating in MacHeist time around, when I blasted it a couple of years ago? Well, it’s pretty simple. The folks at MacHeist fixed the payment terms after MacHeist 1, and developers are getting a much better deal now. Tada.</p>
</blockquote>

<p></blockquote></p>

<p>Gruber is a smart guy.  Sure, developers are getting percentage cuts now, but it&#8217;s hard to not come to the conclusion that developers are still getting screwed over, despite Mueller&#8217;s protestations to the contrary.  I&#8217;m surprised that Gruber doesn&#8217;t see this.</p>

<p>Really, I don&#8217;t care about what Phill Ryu or John Casasanta said or didn&#8217;t say.  Let&#8217;s do the math.</p>

<p>First off, let&#8217;s assume that the three &#8220;unlockable&#8221; apps will be unlocked this time around.  (I mean, really, do they <em>ever</em> not get unlocked?  It&#8217;s a stupid gimmick.)  That means that the value of the bundle is $950.75, and $975.70 for the first 25,000 buyers.  The bundle itself is selling for the &#8220;insanely low price&#8221; of $39.  Let&#8217;s put into perspective really how &#8220;insane&#8221; this actually is.</p>

<p>Assume the percentage cut for each developer depends upon the value that app adds to the bundle.  So we&#8217;ll use price as a proxy for the percentage cut that each developer makes.  iSale is worth $39.95, so the iSale developers might be getting 39.95/950.75 or 4.2% of the profits.  Pictureseque is worth $34.95, so its developers might be getting 34.95/950.75 or a 3.7% cut of the final profits.  And so on.</p>

<p>Now, remember, 25% of the profits go to charity.  So for every purchase of the bundle, $9.75 gets lopped off the top.  Of the leftover 75%, iSale gets 4.2% of the cut, or $1.23.</p>

<p>Let that sink in.  The developer of iSale is getting $1.23 for a single license of iSale, rather than the full $39.95.  The iSale developers are devaluing their own product, <span style="text-decoration: line-through;">supposedly</span> [EDIT: striking out the weasel word, thanks Flooey] of their own free will, by 97%.  In fact, <em>all</em> developers are devaluing their product by 97%.</p>

<div class="centered-text">
<table style="margin-left: auto; margin-right: auto;">
<tr><td><b>App<br />Name</b></td><td><b>Percentage<br />Cut*</b></td><td><b>Profit per<br />Bundle Sale</b></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>iSale</td><td>4.2%</td><td>$1.23</td></tr>
<tr><td>Picturesque</td><td>3.7%</td><td>$1.08</td></tr>
<tr><td>SousChef</td><td>3.2%</td><td>$0.92</td></tr>
<tr><td>World of Goo</td><td>2.1%</td><td>$0.62</td></tr>
<tr><td>PhoneView</td><td>2.1%</td><td>$0.61</td></tr>
<tr><td>LittleSnapper</td><td>4.1%</td><td>$1.20</td></tr>
<tr><td>Acorn</td><td>5.3%</td><td>$1.54</td></tr>
<tr><td>Kinemac</td><td>31.4%</td><td>$9.20</td></tr>
<tr><td>WireTap Studio</td><td>7.3%</td><td>$2.12</td></tr>
<tr><td>BoinxTV</td><td>20.9%</td><td>$6.12</td></tr>
<tr><td>The Hit List</td><td>7.4%</td><td>$2.15</td></tr>
<tr><td>Espresso</td><td>8.4%</td><td>$2.46</td></tr>
</table>
<br />
<div style="width: 300px; font-size: 10px; margin-left: auto; margin-right: auto;">*percentage cut based on a $950.75 bundle value; also based on Phill Ryu and John Casasanta taking a 0% cut and organizing MacHeist out of the goodness of their hearts</div>
</div>

<p>Kinemac, which regularly retails for $300, is <strong>not even getting $10</strong> for each sale of the bundle.  Who in their right mind would do such a thing?  I mean, really?  Talk about <em>insane</em>.</p>

<p>This is all assuming that Phill Ryu and John Casasanta get <em>no cut whatsoever</em>.  This also assumes that the developer of Big Bang Board Games <em>also</em> gets no cut.  Who knows what percentage Ryu and Casasanta are taking this time around?  The iSale developers are probably getting $1, not $1.23, for each bundle sold.</p>

<p>Fundamentally, what it comes down to is that those <em>consumers</em> who are participating in the MacHeist bundle are <strong>tightwads</strong>.  Even if you&#8217;re only interested in one of the apps in the bundle, it&#8217;s likely that only a little more than <em>one</em> of your dollars is going to the actual developer of that app.  And you&#8217;re doing it all because you can get that app for a really cheap price, especially if you&#8217;re looking to get BoinxTV or Kinemac, which normally cost $200 or $300, respectively.</p>

<p>And people are complaining at the bargain basement prices of <em>iPhone</em> apps.</p>

<p>Marco Arment is <a href="http://www.marco.org/89711524" target="_blank">being nice</a> when he says:</p>

<blockquote>
  <p>My point is whether it’s a good idea, as conscientious consumers, to accept such steep discounts on the products that we use and love.</p>

<p>My argument is that it’s not.</p>
</blockquote>

<p>Let&#8217;s just say it like it is, Marco.  If you&#8217;re buying MacHeist, <strong>you&#8217;re a cheap fucking bastard</strong>, and it makes me queasy that so many in the Mac community would buy into such a thing.</p>
]]></description>
      <pubDate>Wed, 25 Mar 2009 12:58:45 -0700</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/rants/on_the_continuing_macheist_controversy.html</guid>
	  
 </item>
<item>
      <title><![CDATA[Checking for Weak Linked Frameworks]]></title>
      <link>http://homepage.mac.com/simx/technonova/software_development/checking_for_weak_linked_frameworks.html</link>
      <description><![CDATA[<p>Let&#8217;s say you have an Xcode project, and you&#8217;d like to have support for a non-essential framework.  Typically, when you add a framework to a project, you go to [Project &#8212;> Add to Project…] and select the framework you&#8217;d like to add.  This is linking.  However, this method causes your program to simply not launch if that framework isn&#8217;t present.  This is bad.</p>

<p>So to let your program still run even when the framework in question isn&#8217;t present, you weakly link the framework instead.  Apple has some <a href="http://developer.apple.com/DOCUMENTATION/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html" target="_blank">good docs</a> about weak linking that explain the details.</p>

<p>Suffice it to say, if you&#8217;re weak linking a framework, uncheck the target membership box in the project sidebar for the framework you want to weak link, then get info on your target and add &#8220;-weak&#95;framework framework&#95;name&#8221;, where &#8220;framework&#95;name&#8221; would be &#8220;SDL&#95;mixer&#8221; if you want to weak link SDL&#95;mixer.framework.</p>

<p>Apple&#8217;s documentation also helpfully includes code that you can use to check whether or not the framework in question is installed or not.  Instead of specifically checking for the framework, you simply check if the pointer to the function you&#8217;re about to call from that framework actually exists.  Here&#8217;s the code from Apple&#8217;s docs:</p>

<pre>    int result = 0;

    if (MyWeakLinkedFunction != NULL)
    {
        result = MyWeakLinkedFunction();
    }
</pre>

<p>So you check if MyWeakLinkedFunction exists, and then execute it if it does.  Now take a look at <a href="http://homepage.mac.com/simx/.Movies/xcode-weak-linking.mov" target="_blank">a QuickTime movie</a> of me debugging an example of such code.  No, I&#8217;m not debugging with optimization on, and ignore all the other weird stuff about this code like the duplicated lines.  Just focus on which lines the debugger goes through.</p>

<p><span class="code">Mix&#95;OpenAudio</span> is a function from SDL&#95;mixer, correctly weakly linked in my project.  Notice that the debugger simply skips over the first <span class="code">Mix&#95;OpenAudio</span> if statement, and skips the <em>entire</em> second <span class="code">#ifdef &#95;&#95;macosx&#95;&#95;</span> block, even though <span class="code">&#95;&#95;macosx&#95;&#95;</span> is <em>clearly</em> defined since the debugger went through a similar <span class="code">#ifdef &#95;&#95;macosx&#95;&#95;</span> block at the top.</p>

<p>What&#8217;s going on?</p>

<p>The short explanation is that Apple&#8217;s suggested code simply doesn&#8217;t work.</p>

<p>Here&#8217;s what&#8217;s happening.  When you compile on Leopard, <span class="code">Mix&#95;OpenAudio</span>, or <span class="code">MyWeakLinkedFunction</span> as in the case of Apple&#8217;s sample code, always evaluates to true regardless of whether the framework is present or not.  So in the movie of me debugging, the line <span class="code">if (Mix&#95;OpenAudio == NULL)</span> always evaluates to false.  The compiler simply doesn&#8217;t compile those lines of code because of this, which explains why it simply skips over that if statement.  The compiler actually generates an &#8220;always evaluates to true&#8221; warning if you change the line to <span class="code">if (Mix&#95;OpenAudio)</span>.</p>

<p>Similarly, the second identical if statement inside the <span class="code">#ifdef &#95;&#95;macosx&#95;&#95;</span> block also always evaluates to false, and so the compiler omits that entire block, since no lines of code will ever be executed regardless of the outcome of the <span class="code">if (gameOptions [0].sound.bUseSDLMixer) {</span> line.</p>

<p>Apple&#8217;s docs spout BALD-FACED LIES.</p>

<p><span style="text-decoration: line-through">A Google search for &#8220;compiler weak linking&#8221; actually produces the solution as <a href="http://www.3dconnexion.com/forum/viewtopic.php?t=1223" target="_blank">the second search result</a>.  Instead of the Apple sample code in the docs (as reproduced above), use this code instead:</p>

<pre>    int result = 0;

    uintptr_t address = (uintptr_t)(MyWeakLinkedFunction);
    if (address != 0u)
    {
        result = MyWeakLinkedFunction();
    }
</pre>

<p>You need to specifically get the address of the function as a uintptr_t, and then test its equivalence to the literal &#8220;0u&#8221;, not &#8220;0&#8221;.</p>

<p>Thanks Richard Wright, I&#8217;m glad you posted your solution to the internets.</span></p>

<p>UPDATE 2009-03-11: Actually, it looks like <em>that</em> (now striked-out) solution doesn&#8217;t work either.  This was working fine in a debug build, but when I finally made a release build, the program crashed yet again when the weakly linked framework was not present.</p>

<p>After banging my head against the wall for a long time, I finally e-mailed the Cocoa-Dev mailing list, and Greg Parker from Apple helpfully suggested that the compiler was optimizing my code out.  He also included some other code that <em>isn&#8217;t</em> optimized out, and I have confirmed that it works under both Debug and Release builds:</p>

<pre>    int result = 0;

    void * volatile function_p = (void *)&(MyWeakLinkedFunction);
    if (function_p != NULL)
    {
        result = MyWeakLinkedFunction();
    }
</pre>
]]></description>
      <pubDate>Sat, 07 Mar 2009 22:15:46 -0800</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/software_development/checking_for_weak_linked_frameworks.html</guid>
	  
 </item>
<item>
      <title><![CDATA[Report Finds Internets are not 1/3 Pedophiles]]></title>
      <link>http://homepage.mac.com/simx/technonova/rants/report_finds_internets_are_not_13_pedop.html</link>
      <description><![CDATA[<p>My dad used to have a saying about chatrooms on the internets: 1/3 of them are teenagers, 1/3 of them are &#8220;sexual predators&#8221; going after those teenagers, and 1/3 of them are undercover FBI agents trying to catch the predators.</p>

<p>Unsurprisingly, when studies are <em>actually done</em>, it turns out that there&#8217;s not really a problem with underage sexual solicitation on the internet.  <a href="http://www.nytimes.com/2009/01/14/technology/internet/14cyberweb.html" target="_blank">So concluded the Safety Technical Task Force</a>, which was created by attorneys general of 49 states in the U.S.</p>

<p>According to the New York Times:</p>

<blockquote>The task force, led by the Berkman Center for Internet and Society at Harvard University, looked at scientific data on online sexual predators and found that children and teenagers were unlikely to be propositioned by adults online. In the cases that do exist, the report said, teenagers are typically willing participants and are already at risk because of poor home environments, substance abuse or other problems.</blockquote>

<p>Furthermore:</p>

<blockquote>Among the systems the technology board looked at included age verification technologies that try to authenticate the identities and ages of children and prevent adults from contacting them. But the board concluded that such systems “do not appear to offer substantial help in protecting minors from sexual solicitation.”</blockquote>

<p>Unsurprisingly, Richard Blumenthal, attorney general of Connecticut, &#8220;said he disagreed with the report&#8221;, says the New York Times.</p>

<p>When is it going to get through to people that this isn&#8217;t a problem?  I don&#8217;t think it <em>ever</em> was a problem.  Throughout my life, I&#8217;ve participated significantly in chatrooms on Hotline (remember that?), GameRanger (remember that?), various message boards, instant messenging, and website commenting all when I was under 18, and I never <em>once</em> got approached by anyone for sex.</p>

<p>In fact, the internets have significantly improved my ability to do things with random people that never would have happened otherwise.  I helped people fix problems on their Macs.  I wrote documentation for a programmer in Belgium who wrote a Hotline client.  I&#8217;ve learned a whole lot about Mac and iPhone development via Twitter.  All by communicating with people I hadn&#8217;t known before and whom I had never met in person.</p>

<p>Furthermore, I&#8217;ve met many, many people in person whom I first met online.  I&#8217;ve never had a problem with any one of them.  I&#8217;ve met some oddballs, and some people who I probably don&#8217;t want to meet again, but I&#8217;ve never been in any danger.</p>

<p>When are people going to realize that this is false outrage?  When are we going to stop devoting so much money and effort and time to try to stop a problem which doesn&#8217;t exist?  Meeting and conversing with people on the internet is pretty much the same as meeting and conversing with people in person.  You just have to be a little more cautious.</p>

<p>Would you give your physical address to someone the first time you meet them in person?  No.  So then don&#8217;t do it with someone you just met on the internet.</p>

<p>How do you meet someone in person whom you first met on the internet?  The same way you do when you first meet someone in person: you&#8217;re almost always in a public place, during the day, maybe with a friend or two, maybe over coffee or something.</p>

<p>When do you trust someone from the internets enough to give them your phone number?  After you&#8217;ve talked with them a few times, you get to know a little bit about them, after you&#8217;ve met them in person, etc.  This is probably less of a big deal now that cell phones have proliferated everywhere, and you already have a means of communicating with someone whom you met on the internet.</p>

<p>Seriously, it&#8217;s not that hard to exercise common sense.</p>
]]></description>
      <pubDate>Thu, 15 Jan 2009 19:51:35 -0800</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/rants/report_finds_internets_are_not_13_pedop.html</guid>
	  
 </item>
<item>
      <title><![CDATA[The "Visible At Launch" Gotcha]]></title>
      <link>http://homepage.mac.com/simx/technonova/software_development/the_visible_at_launch_gotcha.html</link>
      <description><![CDATA[<p>When I use sheets in a Cocoa project, I often put the sheet in its own nib file.  I create a subclass of NSWindowController that handles sheet dismissal, and includes the sheet callback method as well as methods that respond to button clicks on the sheet.  Then when I need that sheet, I just allocate and initialize a new controller, which calls NSWindowController&#8217;s -initWithWindowNibName: method to load a copy of the sheet from the nib.</p>

<p>Typically a sheet is only associated with one kind of parent window (like a document editor window), meaning it usually makes sense to simply include the sheet inside that parent window&#8217;s nib.  But putting the sheet in a nib by itself is useful if you have a lot of different kinds of windows, but you want to be able to attach an identical sheet to any one of them.  This is what I do with kill sheets in Memory Usage Getter, since they can attach to both the Tab View and List View windows, as well as to individual process history windows.</p>

<p>I was using the same technique when adding some sheets for TidyWeblogger, except I was encountering a weird problem: the sheets weren&#8217;t attaching to windows like they were supposed to do.  I was passing a valid reference to the sheet and to the parent window when using NSApp&#8217;s beginSheet:modalForWindow:&#8230; method, too.</p>

<p>Instead, the sheets just appeared in midair, attached to no window in particular, and as such, they couldn&#8217;t be moved around either.  Furthermore, when I clicked a button to dismiss the sheet, they didn&#8217;t go away immediately.  They only disappeared from the screen when I started interacting with a different window.</p>

<p>I <a href="http://twitter.com/simX/status/1033932878" target="_blank">posted about this problem</a> on Twitter, and <a href="http://twitter.com/fraserspeirs/statuses/1033936323" target="_blank">Fraser Speirs</a> pointed out the problem:</p>

<p>In the nib I created for my sheet, the &#8220;Visible At Launch&#8221; box for the sheet window itself was checked in the Behavior section of the Attributes inspector tab.  As soon as the nib was loaded, the window would appear, instead of waiting for me to tell the sheet to attach to a parent window.</p>

<p>The fix is simple.  For any sheets, make sure the &#8220;Visible At Launch&#8221; box is not checked.  After saving the nib and recompiling, everything worked perfectly.</p>
]]></description>
      <pubDate>Sat, 03 Jan 2009 04:43:03 -0800</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/software_development/the_visible_at_launch_gotcha.html</guid>
	  
 </item>
<item>
      <title><![CDATA[Sort Descriptors, NSTableView Bindings, and You]]></title>
      <link>http://homepage.mac.com/simx/technonova/software_development/sort_descriptors_nstableview_bindings_a.html</link>
      <description><![CDATA[<p>So if you’re using an NSTableView, an NSArrayController or an NSDictionaryController, and bindings to link the two, here’s a problem you might run into.</p>

<p>In Interface Builder, you can set NSTableViews to have autosave names, which allow table views to automatically save and restore various &#8220;settings&#8221; about the table view, like the column positions, column widths, hidden columns, column sorting, etc.  Just by virtue of giving the NSTableView an autosave name in Interface Builder, it should start saving and restoring all of these settings.</p>

<p>It was the column sorting that was giving me trouble.  Column widths and column positions were being saved perfectly fine, but my column sorting was always being reset to a default value after each launch.  This problem pissed me off for a day, and looking through various documentation didn’t help, because it suggested that sort descriptors should be autosaved and restored.</p>

<p>Other oddities with this problem is that it seemed that the NSTableView <em>was</em> saving the sort descriptors to my app’s plist preference file, but wasn’t <em>restoring</em> it.  I tried binding the NSTableView’s sort descriptors to an NSUserDefaultsController, and even <em>that</em> didn’t work.  I tried manually getting the preferences via an NSUserDefaults object, hoping to programatically set the NSTableView’s sort descriptors on launch.  What was weird was that when I tried to retrieve the sort descriptor settings that were <em>clearly</em> saved to the preference file, the NSUserDefaults object was returning null values for that key.</p>

<p>I’ve seen a <a href="http://www.cocoabuilder.com/archive/message/cocoa/2006/12/12/175812" target="_blank">few</a> <a href="http://weblog.scifihifi.com/2004/12/18/bindings-table-data-sources/" target="_blank">posts</a> about <a href="http://www.cocoabuilder.com/archive/message/cocoa/2007/11/18/193375" target="_blank">this</a>, but no answers.  Because the almighty Google indexes all, I thought I’d post my solution.</p>

<p>The issue is that your NSArrayController or NSDictionaryController <em>also</em> has sort descriptors, and these seem to take precedence over the NSTableView’s own sort descriptors.  But these sort descriptors don’t get autosaved along with the NSTableView’s other settings.  So while the NSTableView <em>does</em> seem to save the sort descriptors, it would seem that it attempts to restore them but then they get obliterated by your NS*Controller’s sort descriptors, which are reset to default values on every launch.</p>

<p>The solution here is to bind your <em>NSArrayController’s</em> (or NSDictionaryController’s) sort descriptors to an NSUserDefaultsController.  Select your controller, switch to the bindings tab in the inspector, and then click the &#8220;Sort Descriptors&#8221; disclosure triangle under the &#8220;Controller Content Parameters&#8221; section.</p>

<p>Check the &#8220;Bind to:&#8221; box, and select &#8220;Shared User Defaults Controller&#8221;.  (This will automatically create an NSUserDefaultsController instance in your nib.)  Set the controller key to &#8220;values&#8221; and the model key path to the key you want to use in your prefs file (for example, &#8220;sortDescriptors&#8221; is fine).  You’ll need an NSUnarchiveFromData value transformer, and you’ll also want to check the &#8220;Validates Immediately&#8221; box so that your sorting gets saved to prefs as soon as the user clicks a column heading to change the sort order.</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/controller_bindings.png" alt="Activating bindings for controller sort descriptors" /></div>

<p>You’ll also want to make sure that your NSTableColumns have sort keys and selectors.  This is easily done in Interface Builder as well.  Select each of your NSTableColumns in turn (the inspector should start with &#8220;Table Column&#8221; if your column is correctly selected), and switch to the Attributes tab.  For &#8220;Sort Key&#8221;, you’ll want to enter the model key path to your column data (in my case, my bindings controller key for the column is &#8220;arrangedObjects&#8221; and the model key path is &#8220;value.entryTitle&#8221;, so I put &#8220;value.entryTitle&#8221; in for my sort key).  For &#8220;Selector&#8221;, type in a method name that tells your program how to sort your NSTableView items (for example, &#8220;compare:&#8221; or &#8220;caseInsensitiveCompare:&#8221;).  Do this for each table column.</p>

<div class="centered-text"><img src="http://homepage.mac.com/simx/.Pictures/column_attributes.png" alt="Setting column sort keys and selectors for NSTableColumns" /></div>

<p>You should probably unbind your NSTableView’s sort descriptors as well, if you&#8217;ve left them bound from pulling out your hair trying to figure out this problem.</p>

<p>I&#8217;m not sure if I would classify this as a bug or not.  Is there any time when you would want sort descriptors for both the NSTableView <em>and</em> the NS*Controller that&#8217;s providing the NSTableView with data?  Otherwise, NSTableView&#8217;s sort descriptors bindings should probably be grayed out when its corresponding controller is connected.</p>

<p>In any case, hopefully this helps anybody else who comes across this problem.</p>
]]></description>
      <pubDate>Tue, 23 Dec 2008 03:13:45 -0800</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/software_development/sort_descriptors_nstableview_bindings_a.html</guid>
	  
 </item>
<item>
      <title><![CDATA[More TidyWeblogger Stuff]]></title>
      <link>http://homepage.mac.com/simx/technonova/software_development/more_tidyweblogger_stuff.html</link>
      <description><![CDATA[<p>As TidyWeblogger has taken over the job of posting entries to my weblogs, I found that my motivation to continue to develop the app has rapidly increased.  Here&#8217;s what&#8217;s changed in a little over a week.</p>

<ul>
<li><p>TidyWeblogger is now generating every single page on my weblogs.  Category pages, archive pages, entry pages, main page, RSS feed, dummy files, and a new addition, a JavaScript file that just contains an array of recent entries to use on other pages.  I&#8217;ve republished all pages so that they conform to my new templates, and everything&#8217;s working just dandy!</p></li>
<li><p>Take a look at the new archive sidebar item, as well as the new archive page itself.  The category stats are once again being updated, and the browse by date archive page is simply one long list of all entries on a single page.  I realized there&#8217;s no need whatsoever to have separate month and year archive pages, since it&#8217;s just a bunch of unnecessary clicks when a single page can present all the necessary information all at once.  It&#8217;s also convenient if you&#8217;re looking for an entry and not sure when it was posted.</p></li>
<li><p>JavaScript improvements have been made across the board.  And by &#8220;improvements&#8221; I mean that a lot of JavaScript has been ripped out.  iBlog created HTML files that constantly referred to the CommonLib.js file to create the sidebar items, the weblog and category titles, etc.  My templates do all this generation beforehand and create mostly static files.</p>

<p>It takes more time on my end, but I prefer that to more JavaScript on my pages.  For example, since the category stats are all static, all pages need to be regenerated when I publish a new entry in order for the stats on all pages to be accurate.  This is another case where it makes sense to publish a separate JavaScript file with the category stats, and have all pages get the stats from that file so that every page doesn&#8217;t need to be regenerated.</p>

<p>In any case, the only things that JavaScript is handling now is the Linkable Supernova sidebar item creation, and comments.  Category stats will probably be migrated back to JavaScript at some point.</p></li>
<li><p>I mentioned that TidyWeblogger creates dummy files.  It&#8217;s been doing that for a while: dummy files are needed in order for the comments system to work.  But I&#8217;ve added a new class of dummy files that TidyWeblogger creates now: for those entries that have the old crufty URLs from iBlog (the ones like &#8220;http://homepage.mac.com/simx/technonova/C486203617/E20071118034738/index.html&#8221;), TidyWeblogger creates a redirection page that points to the new URL.  Old comments on the new page are preserved, too.  In this way, both the old URLs are preserved, but everyone sees the new ones since the crufty ones redirect to pretty ones.</p></li>
<li><p>I also mentioned the new JavaScript file of recent entries.  This allows me to retire that <i>ridiculous</i> hack <a href="http://homepage.mac.com/simx/technonova/tips/minor_site_improvements.html" target="_blank">that I was using</a> to get a self-updating list of Linkable Supernova entries in the sidebar here.  Technological Supernova is no longer loading 11 invisible iframes with pages from Linkable Supernova just to get the titles of the pages.</p>

<p>The result is that loading pages here should be <em>much</em> faster now, and this should be especially noticeable on the iPhone or iPod touch.  It just now loads the RecentEntries.js file for Linkable Supernova, and then writes the list to HTML via JavaScript.  It&#8217;s much more reliable, too &#8212; previously, it used to fail to write any links sometimes.</p>

<p>Also, eliminating this hack allows my pages to validate again, at least according to the W3C validator.  Previously, it was throwing an error because I was using an &#8220;onLoad&#8221; attribute for the iframes.  I know, I know, validation shouldn&#8217;t be an end goal in and of itself, but it&#8217;s still a good indication of using web standards.</p></li>
<li><p>Speaking of validation, TidyWeblogger is using NSXMLDocument&#8217;s NSXMLDocumentTidyHTML option so that any generated content is transformed into valid XHTML automatically, as much as possible.  There are some validation errors it can&#8217;t correct, like adding a title attribute to all images, though.</p></li>
<li><p>Various other things have been fixed: I can force TidyWeblogger to republish all entry pages in one action, now.  Entry published dates now automatically update in the main window after a publish, and comments now will get enabled on publish even if the initial publish fails.</p></li>
</ul>

<p>I think another factor in my excitement to develop this app is that I&#8217;m learning a whole ton of new stuff in Cocoa programming, some of which stems from the Leopard improvements.  Here&#8217;s what I&#8217;ve learned over the past few days:</p>

<ul>
<li><p>Bindings!  I&#8217;ve finally gotten around to seeing the benefits of these things.  My initial attempt at bindings in TidyWeblogger was pretty unseemly because I was using a dictionary of entries with an NSArrayController, which controlled a proxy object that I would update programatically to synchronize with the dictionary of entries.</p>

<p>I later used bindings on a smaller problem, implementing an NSDictionaryController to control the values and titles of an NSPopUpButton.  Then I back-tracked and re-factored my initial attempt at bindings, with great success.</p>

<p>Bindings are really useful to eliminate glue code when initializing interface objects in an entry editor window, for example.  There&#8217;s absolutely no code whatsoever to make the popup buttons present the correct categories according to the relevant weblog, which is <em>nice</em>.  It also eliminates the need for any manual sorting code that was necessary when I created Memory Usage Getter; my table view of entries is automatically sortable by title, category, and date simply because it&#8217;s using bindings.</p></li>
<li><p>I finally figured out how to use the replacement for NSCalendarDate.  You need to use a combination of NSDate, NSCalendar, and NSDateComponents.  This is a change that came with Tiger, and it seems to have been done to accomodate calendars other than the Gregorian calendar which is used in the United States.</p></li>
<li><p>Creating toolbars in Interface Builder.  This is incredibly useful, because it eliminates the need to create any code for getting toolbars and their buttons to work.  You just drag and drop them into your window, and then connect outlets and actions just like you would do for a standalone NSButton.</p></li>
<li><p>I&#8217;ve been using more Objective-C 2.0 paradigms, like fast enumeration, which is pretty useful.  I haven&#8217;t started using @property and @synthesize declarations yet, but now that I&#8217;m using bindings, I can see exactly why and how they&#8217;re used.</p></li>
<li><p>Some of my coding conventions have slowly been changing as well.  Instead of using the alloc-init dance for stuff like NSMutableArrays and NSMutableDictionaries, I&#8217;ve started just using the -array and -dictionary constructors so that I don&#8217;t have to worry about releasing the objects later.  Similarly, my setters have gone from retain-then-release to equivalence-release-allocate to accomodate the setting of mutable objects from immutable counterparts.</p></li>
</ul>

<p>One of the things I think I&#8217;m most proud of in my code is that the method that&#8217;s generating all the HTML files is highly extensible, and I&#8217;ve only had to make minor modifications to allow the creation of archive pages, entry pages, main pages, etc.  It&#8217;s pretty sweet.</p>

<p>It&#8217;s especially great because when I want to add new template entities (things in the page templates like &#8220;{[ENTRYPAGEURL]}&#8221; which TidyWeblogger dynamically replaces according to which page is being created), I can do it once and not worry about it again.</p>

<p>My goals for future development, roughly in order:</p>

<ul>
<li>Publish category stats to a separate JavaScript file and have entries point to that instead.</li>
<li>Investigate why stylesheet cookies seem to not be consistently working.  Also, I&#8217;ll see if I can eliminate the flash of the sidebar in the wrong position.</li>
<li>Figure out why my table view isn&#8217;t auto-saving sorting.  Column positions and sizes <em>are</em> being auto-saved, though, so I&#8217;m not sure why sorting isn&#8217;t.  Can anybody help out with this?</li>
<li>Figure out how to get the table view to re-sort when information is updated, like the publish date.</li>
<li>Figure out why my NSTextView is loading with small fonts for Markdown entries.</li>
<li>Thread my interface.  Currently, publishing freezes the interface for minutes at a time if there are a lot of entries, because it&#8217;s all running in the main thread.</li>
<li>Figure out why undo isn&#8217;t supported in my entry NSTextViews.</li>
<li>Implement the dirty dot for entries, and update the entry composition windows with entry titles.</li>
<li>Test a few things that I haven&#8217;t been doing often, like reverting an entry, changing an entry&#8217;s category, or changing it&#8217;s custom URL.  Make sure these all work.</li>
<li>Fix the last remaining feature that&#8217;s still disabled: the next and previous links on the entry pages.  I might punt on this for a bit, because this may require some refactoring, again.</li>
<li>Implement the .Mac SDK (has it been renamed the MobileMe SDK yet?), so that I don&#8217;t have to rely on my iDisk being mounted in the Finder when publishing.</li>
<li>Implement local storage and composition of entries, and synchronization of local entries with the iDisk so that you don&#8217;t have to compose entries while online.</li>
</ul>

<p>That&#8217;s a tall order, but since I&#8217;ve been making rapid progress anyway, a lot of this stuff might get done sooner rather than later.</p>

<p>Yay development!</p>
]]></description>
      <pubDate>Fri, 19 Dec 2008 17:39:18 -0800</pubDate>
	  <guid>http://homepage.mac.com/simx/technonova/software_development/more_tidyweblogger_stuff.html</guid>
	  
 </item>

  </channel>
</rss>
