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

<channel>
	<title>Cocoa &#038; Medicine</title>
	<atom:link href="http://guelich.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://guelich.net/blog</link>
	<description>A programmer studying medicine in rural New England</description>
	<pubDate>Fri, 11 Apr 2008 23:56:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>The Value of Design, pt. 1</title>
		<link>http://guelich.net/blog/2008/04/11/the-value-of-design-pt-1</link>
		<comments>http://guelich.net/blog/2008/04/11/the-value-of-design-pt-1#comments</comments>
		<pubDate>Fri, 11 Apr 2008 23:56:57 +0000</pubDate>
		<dc:creator>Scott Guelich</dc:creator>
		
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://guelich.net/blog/2008/04/11/the-value-of-design-pt-1/</guid>
		<description><![CDATA[For some time now I have wanted to post about the value of creativity and original design in software development. Much has been written in the last couple years about the importance of presentation in the Mac community. Forget lickable, nowadays a good Mac app needs to be downright delicious. But less has been said [...]]]></description>
			<content:encoded><![CDATA[<p>For some time now I have wanted to post about the value of creativity and original design in software development. Much has been written in the last couple years about the importance of presentation in the Mac community. Forget lickable, nowadays a good Mac app needs to be downright <a href="http://www.rogueamoeba.com/utm/posts/Article/DeliciousGeneration-2006-11-06-10-00">delicious</a>. But less has been said about the value of higher level of design &#8212; that more ephemeral quality that captures application flow and feel. Fortunately, Google&#8217;s recent HuddleChat debacle provides a perfect context for such a discussion.</p>
<p><b>Google burns Campfire</b></p>
<p>In case you missed it, earlier this week Google created a big stir by announcing a new application called HuddleChat during one of their <a href="http://code.google.com/campfire/">campfire</a> sessions. It was intended as a working demo for their new <a href="http://code.google.com/appengine/">App Engine</a> service, but it quickly created an uproar from many in the development community who felt that Google developers had blatantly ripped off another application. As irony would have it, that application&#8217;s name happened to be <a href="http://www.campfirenow.com/">Campfire</a>, and it was created by some company called <a href="http://www.37signals.com/">37Signals</a> (never heard of them, but apparently they&#8217;re big in the <a href="http://www.rubyonrails.org/">mining transportation industry</a>). Anyhow, sensitive to the bad PR they were suddenly generating, Google quickly <a href="http://www.huddlechat.com/">yanked the cord on HuddleChat</a>.</p>
<p>That should have been the end of the story, but it wasn&#8217;t.</p>
<p><span id="more-21"></span></p>
<p>As soon as HuddleChat was shut down, a second uproar arose from users who insisted that HuddleChat was killed unfairly. Much of their anger was directed at 37Signals. With straight, albeit apoplectic, faces they argued that 37Signals somehow twisted Google&#8217;s arm, forcing them to kill HuddleChat in order to quell competition. The punchline is that 37Signals, this company that reportedly goes around bullying online behemoths <a href="http://www.37signals.com/svn/">only has 10 employees</a>.</p>
<p>So in the span of a few days, two actions by Google created two angry groups who were angry for two different reasons: (1) developers angry at Google for creating HuddleChat, and (2) potential HuddleChat users angry at the first group for killing HuddleChat. To keep this simple, let&#8217;s come up with labels for these two groups. We&#8217;ll call the first group &#8220;the brewmasters&#8221; and second group &#8220;the freeloaders.&#8221;</p>
<p><b>Freeloaders</b></p>
<p>I&#8217;m not going to convince the freeloaders they&#8217;re wrong because they&#8217;re unlikely to listen to me, and not just because I&#8217;m calling them freeloaders. They cite idealistic principles like competition and unfair power wielded by The Man (apparently implying that <a href="http://www.loudthinking.com/">DHH</a> is, in fact, the man), but if you sift through their rants, it becomes clear that basically they&#8217;re just mad that someone took away their keg. You see, 37Signals actually charges money for Campfire, while Google was providing HuddleChat for free.</p>
<p>When HuddleChat was announced, the freeloaders came running (&#8221;Free beer!&#8221;). Unfortunately, the brewmasters who showed up recognized that Google was in fact giving away someone else&#8217;s beer for free, which just didn&#8217;t seem right. When the grown ups at Google learned this, they agreed and quickly pulled the tap. The brewmasters applauded the move, while the freeloaders cried party foul and started protesting. Of course, the freeloaders had done nothing special to earn free beer, let alone someone else&#8217;s beer, but to the adolescent mind offering something for free and not following through is akin to stealing something that already belonged to them. The freeloaders posted angry blog comments, insisting that they were important decision makers who would drive business away from 37Signals in retaliation, and to demonstrate this they went and created an online petition&#8230; via <a href="http://www.facebook.com/group.php?gid=11166488639">a facebook group</a>. (Awww, how cute.)</p>
<p>So that&#8217;s the context. Next post I&#8217;ll elaborate on the value of design by extending this gratuitous beer analogy to brewmasters and brewers.</p>
]]></content:encoded>
			<wfw:commentRss>http://guelich.net/blog/2008/04/11/the-value-of-design-pt-1/feed</wfw:commentRss>
		</item>
		<item>
		<title>Automated battery monitor</title>
		<link>http://guelich.net/blog/2008/04/01/automated-battery-monitor</link>
		<comments>http://guelich.net/blog/2008/04/01/automated-battery-monitor#comments</comments>
		<pubDate>Tue, 01 Apr 2008 18:43:37 +0000</pubDate>
		<dc:creator>Scott Guelich</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://guelich.net/blog/2008/04/01/automated-battery-monitor/</guid>
		<description><![CDATA[Woot is all charged up over 4/1.
Antidote:


#!/usr/bin/ruby

require "hpricot"
require "open-uri"

def growl ( title, message )
    system "growlnotify", "-m", message, "-t", title
end

while (1)
    begin
        doc = Hpricot( open("http://www.woot.com/") )
        item = (doc/"h3#ctl00_ContentPlaceHolder_TitleHeader").text
      [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.woot.com/">Woot</a> is <a href="http://www.woot.com/Blog/BlogEntry.aspx?BlogEntryId=4435">all charged up</a> over 4/1.</p>
<p>Antidote:</p>
<p><code>
<pre>
#!/usr/bin/ruby

require "hpricot"
require "open-uri"

def growl ( title, message )
    system "growlnotify", "-m", message, "-t", title
end

while (1)
    begin
        doc = Hpricot( open("http://www.woot.com/") )
        item = (doc/"h3#ctl00_ContentPlaceHolder_TitleHeader").text
        raise "Failed to parse title" if item == ""

        if not item =~ /Decker/
            growl "Woot!", item
            system "open -g http://www.woot.com/"
            break
        end
        sleep 30
    rescue
        growl "Ruby Error!", $!
    end
end
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://guelich.net/blog/2008/04/01/automated-battery-monitor/feed</wfw:commentRss>
		</item>
		<item>
		<title>Shaking the dust off</title>
		<link>http://guelich.net/blog/2008/03/22/shaking-the-dust-off</link>
		<comments>http://guelich.net/blog/2008/03/22/shaking-the-dust-off#comments</comments>
		<pubDate>Sun, 23 Mar 2008 02:19:17 +0000</pubDate>
		<dc:creator>Scott Guelich</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://guelich.net/blog/2008/03/22/shaking-the-dust-off/</guid>
		<description><![CDATA[It&#8217;s time to start blogging again.
When I started this blog, I planned to primarily explore areas like bioinformatics where medicine and technology come together. However, over the past year my interests in programming and medicine have remained on distinctly parallel paths. They just have not come together.
Currently I am hard at work on a Mac [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s time to start blogging again.</p>
<p>When I started this blog, I planned to primarily explore areas like bioinformatics where medicine and technology come together. However, over the past year my interests in programming and medicine have remained on distinctly parallel paths. They just have not come together.</p>
<p>Currently I am hard at work on a Mac app that should be out this summer (WWDC with any luck) and have had lots of ideas for strictly Mac programming posts. So for the near future this blog will primarily focus on Mac application coding.</p>
]]></content:encoded>
			<wfw:commentRss>http://guelich.net/blog/2008/03/22/shaking-the-dust-off/feed</wfw:commentRss>
		</item>
		<item>
		<title>An ugly marriage</title>
		<link>http://guelich.net/blog/2007/04/14/an-ugly-marriage</link>
		<comments>http://guelich.net/blog/2007/04/14/an-ugly-marriage#comments</comments>
		<pubDate>Sat, 14 Apr 2007 17:11:43 +0000</pubDate>
		<dc:creator>Scott Guelich</dc:creator>
		
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://guelich.net/blog/2007/04/14/an-ugly-marriage/</guid>
		<description><![CDATA[&#8220;Don&#8217;t be evil.&#8221; That&#8217;s Google&#8217;s informal corporate motto, which they proudly advertise. Like a lot of companies started by young innovators, they try to uphold the idealism of their founders, and though they may have grown to become a multi-billion dollar corporate giant, they&#8217;re mostly a gentle giant. So when news came out that Google [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Don&#8217;t be evil.&#8221; That&#8217;s Google&#8217;s <a href="http://investor.google.com/conduct.html">informal corporate motto</a>, which they proudly advertise. Like a lot of companies started by young innovators, they try to uphold the idealism of their founders, and though they may have grown to become a multi-billion dollar corporate giant, they&#8217;re mostly a gentle giant. So when news came out that <a href="http://www.nytimes.com/2007/04/14/technology/14DoubleClick.html?em&#038;ex=1176609600&#038;en=032569e12b24e42e&#038;ei=5087%0A">Google has decided to buy DoubleClick</a>, it left many of us stunned. If there&#8217;s an online company that <a href="http://alistapart.com/articles/clickthru">epitomizes evil</a>, it&#8217;s DoubleClick.</p>
<p>If you aren&#8217;t familiar with them, DoubleClick is in the business of selling banner ads &#8212; those flashing, annoying advertisements that sit above, beside, and even above those web pages you visit. That, in and of itself, is not why I dislike them &#8212; in fact, thanks to <a href="http://www.privoxy.org/">Privoxy</a>, I almost never see their ads. But I&#8217;ve been doing the web thing long enough to recall back in 2000 when DoubleClick announced an frighteningly Orwellian scheme to <a href="http://news.com.com/2100-1023-236092.html">identify every single web user and track the pages they visit</a>.</p>
<p><span id="more-16"></span></p>
<p>After DoubleClick&#8217;s announcement there was an uproar. Numerous organizations including EPIC and the ACLU <a href="http://www.epic.org/privacy/internet/ftc/DCLK_comp_pr.html">filed</a> <a href="http://www.cdt.org/testimony/000225ftcdcstatement.shtml">petitions</a> with the FTC, which <a href="http://news.com.com/2100-1023-237007.html">launched a 10 month investigation</a>. Eventually DoubleClick backed off of its position and the investigation was dropped.</p>
<p>Fast forward several years and the poster child of online privacy invasion is getting hitched to the poster child of online corporate responsibility. I suppose we could interpret this in a positive way and hope that Google&#8217;s values infect those of the DoubleClick unit more than the other way around. But I can help but feel a bit nervous.</p>
]]></content:encoded>
			<wfw:commentRss>http://guelich.net/blog/2007/04/14/an-ugly-marriage/feed</wfw:commentRss>
		</item>
		<item>
		<title>Running mogenerator from Xcode</title>
		<link>http://guelich.net/blog/2007/01/01/running-mogenerator-from-xcode</link>
		<comments>http://guelich.net/blog/2007/01/01/running-mogenerator-from-xcode#comments</comments>
		<pubDate>Mon, 01 Jan 2007 22:22:16 +0000</pubDate>
		<dc:creator>Scott Guelich</dc:creator>
		
		<category><![CDATA[AppleScript]]></category>

		<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://guelich.net/blog/2007/01/01/running-mogenerator-from-xcode/</guid>
		<description><![CDATA[If you do any Mac development with CoreData and don&#8217;t know about Jonathan Rentzsch&#8217;s mogenerator, you should definitely check it out. Getting started with mogenerator has all the info you need to download and install it (update: see his latest info about mogenerator 1.1). mogenerator saves a bunch of work, but it&#8217;s an early release [...]]]></description>
			<content:encoded><![CDATA[<p>If you do any Mac development with <a href="http://developer.apple.com/macosx/coredata.html">CoreData</a> and don&#8217;t know about Jonathan Rentzsch&#8217;s <a href="http://rentzsch.com/code/mogenerator/">mogenerator</a>, you should definitely check it out. <a href="http://www.pyrusmalus.com/blog/archives/2006/11/06/getting_started_with_mogenerator.html">Getting started with mogenerator</a> has all the info you need to download and install it (update: see <a href="http://www.pyrusmalus.com/blog/archives/2007/01/03/mogenerator_v1_1.html">his latest info about mogenerator 1.1</a>). mogenerator saves a bunch of work, but it&#8217;s an early release so at this point there&#8217;s no Xcode integration. And although I&#8217;m quite fond of the Terminal, I don&#8217;t like bouncing over to it whenever I need to regenerate my classes. Thus, it wasn&#8217;t long before I decided to see if I could at least add mogenerator to Xcode&#8217;s script menu. It turned out to be a little more involved than I expected&#8230;</p>
<p><span id="more-6"></span><br />
The author of mogenerator is working on better Xcode integration for a future release, but I figured it was likely that I would still want to invoke mogenerator manually before compile time, if only to get the full advantages of code completion when I add new properties. My goal was to create something that would eliminate having to write any project specific commands or configuration. I wanted a single menu/key command that would run mogenerator against the data models in my current project.</p>
<p>Via AppleScript I found I could easily determine which project was open in Xcode, along with its path. The dictionary also said I could get the project&#8217;s data models &#8212; but didn&#8217;t work that reliably. Fortunately, the project path was enough, because it only requires a couple simple Unix commands to find all the data model files in the folder and run mogenerator against them.</p>
<p>The next step was to read through <a href="http://developer.apple.com/documentation/DeveloperTools/Conceptual/XcodeUserGuide/Contents/Resources/en.lproj/07_03_custom_scripts/chapter_48_section_1.html">Using Scripts To Customize Xcode</a>. I won&#8217;t go through the details, but ultimately I ended up with a menu item stuck right onto the end of the Design menu that let me run mogenerator. Cool, huh?</p>
<p><img src="/images/screenshots/xcode-design-menu.png" alt="Xcode's Design menu" /></p>
<p>Except it didn&#8217;t work &#8212; you&#8217;ll notice that it&#8217;s inactive in the screenshot. That&#8217;s because, so far as I can tell, Xcode assumes that all custom scripts modify source code, so they&#8217;re only active when a source file is open &#8212; and the data modeler doesn&#8217;t count. When I first installed the script, it worked so long as I clicked on an *.h or *.m document before invoking it, but I recently decided to experiment with using TextMate as my primary editor, so now I never have a source file active in Xcode.</p>
<p>So I had to find a plan B. I turned to the system script menu &#8212; the one that lives as a status menu on the right side of your toolbar, which you activate via the AppleScript Utility. Installing the script there works pretty well, except that I haven&#8217;t been able to figure out how to assign it a keyboard shortcut.</p>
<p><img src="/images/screenshots/system-script-menu.png" alt="Script menu" /></p>
<p>In any case now I can easily run mogenerator against all the data models in any open Xcode project. No trips to the Terminal nor project specific configuration needed. Here&#8217;s the script.</p>
<p><a href="applescript://com.apple.scripteditor?action=new&#038;script=%28%2A%0A %2A ----------------------------------------------------------------------------------------------%0A %2A Run mogenerator script%0A %2A Processes all .xcdatamodel files in whatever Xcode project is active%0A %2A %0A %2A by Scott Guelich 12-27-2006%0A %2A %0A %2A INSTALLATION%3A%0A %2A Drag this script to %7E%2FLibrary%2FScripts%2FApplications%2FXcode%0A %2A %0A %2A Note%3A The script will appear in the system-wide Script Menu%2C%0A %2A which is different than the script menu that appears left of Help in Xcode.%0A %2A If you don%27t see another Script Menu%2C Run the AppleScript Utility and%0A %2A check %22Show Script Menu in menu bar%22.%0A %2A %0A %2A mogenerator was created by Jonathan %22Wolf%22 Rentzsch%0A %2A and is available at http%3A%2F%2Frentzsch.com%2Fcode%2Fmogenerator%0A %2A ----------------------------------------------------------------------------------------------%0A %2A%29%0A%0A-- Override these properties as needed on your system%0Aproperty mogeneratorPath %3A %22%2Fusr%2Flocal%2Fbin%2Fmogenerator%22%0Aproperty showConfirmation %3A true%0A%0A-- ----------------------------------------------------------------------------------------------%0A%0Atell application %22Xcode%22%0A%09set mogeneratorPathCheck to %22%22%0A%09activate%0A%09try%0A%09%09set mogeneratorPathCheck to do shell script %22%0A%09%09%09if %5B%5B -e %5C%22%22 %26 mogeneratorPath %26 %22%5C%22 %5D%5D%3B then%0A%09%09%09%09echo %5C%22%22 %26 mogeneratorPath %26 %22%5C%22%3B%0A%09%09%09else%0A%09%09%09%09echo %60which mogenerator%60%3B%0A%09%09%09fi%0A%09%09%22%0A%09%09if mogeneratorPathCheck starts with %22no mogenerator%22 then%0A%09%09%09display dialog %22Could not find mogenerator script on your system. %22 %26 %C2%AC%0A%09%09%09%09%22Please edit this script and set the mogeneratorPath property%22 %C2%AC%0A%09%09%09%09buttons %7B%22Cancel%22%7D default button %22Cancel%22 with icon 1%0A%09%09end if%0A%09%09set mogeneratorPath to mogeneratorPathCheck%0A%09%09%0A%09%09set projectPath to the POSIX path of %C2%AC%0A%09%09%09%28the project directory of the active project document as text%29%0A%09%09%0A%09%09set output to do shell script %22%0A%09%09%09cd %5C%22%22 %26 projectPath %26 %22%5C%22%3B%0A%09%09%09find . -name %27%2A.xcdatamodel%27 -print %7C sed %27s%2F%5E..%2F  %2F%27%3B%0A%09%09%22%0A%09%09if output %3D %22%22 then%0A%09%09%09display dialog %22Could not find any xcdatamodel files in your current project. %22 %26 %C2%AC%0A%09%09%09%09%22Is the right project active in Xcode%3F Also%2C note this script doesn%27t support %22 %26 %C2%AC%0A%09%09%09%09%22referenced files that don%27t live in your project folder.%22 %C2%AC%0A%09%09%09%09buttons %7B%22Cancel%22%7D default button %22Cancel%22 with icon 1%0A%09%09else if showConfirmation then%0A%09%09%09display dialog %22Run mogenerator against the following files%3F%5Cn%22 %26 output with icon 1%0A%09%09end if%0A%09%09set output to do shell script %22%0A%09%09%09cd %5C%22%22 %26 projectPath %26 %22%5C%22%3B%0A%09%09%09find . -name %27%2A.xcdatamodel%27 -print0 %7C xargs -0 %5C%22%22 %26 mogeneratorPath %26 %22%5C%22 -model%0A%09%09%22%0A%09%09if output %E2%89%A0 %22%22 then%0A%09%09%09display dialog %22Unexpected error invoking mogenerator%3A%22 %26 output %C2%AC%0A%09%09%09%09buttons %7B%22Cancel%22%7D default button %22Cancel%22 with icon 1%0A%09%09end if%0A%09on error number errorNumber%0A%09%09if errorNumber is equal to -128 then -- user cancelled%2C do nothing%0A%09%09else if errorNumber is equal to -1728 then -- can%27t get POSIX path to Xcode project%0A%09%09%09display dialog %22Unable to get the current project%27s path in Xcode. %22 %26 %C2%AC%0A%09%09%09%09%22Are you sure you have a project open%3F%22 %C2%AC%0A%09%09%09%09buttons %7B%22Cancel%22%7D default button %22Cancel%22 with icon 1%0A%09%09else%0A%09%09%09display dialog %22Unknown error running mogenerator%3A %22 %26 errorNumber %C2%AC%0A%09%09%09%09buttons %7B%22Cancel%22%7D default button %22Cancel%22 with icon 1%0A%09%09end if%0A%09end try%0Aend tell"><img src="/images/icons/applescript.png" alt="AppleScript" style="vertical-align:-8px"/>Run mogenerator.scpt</a><br />
<code>
<pre>
(*
 * ----------------------------------------------------------------------------------------------
 * Run mogenerator script
 * Processes all .xcdatamodel files in whatever Xcode project is active
 *
 * by Scott Guelich 12-27-2006
 *
 * INSTALLATION:
 * Drag this script to ~/Library/Scripts/Applications/Xcode
 *
 * Note: The script will appear in the system-wide Script Menu,
 * which is different than the script menu that appears left of Help in Xcode.
 * If you don't see another Script Menu, Run the AppleScript Utility and
 * check "Show Script Menu in menu bar".
 *
 * mogenerator was created by Jonathan "Wolf" Rentzsch
 * and is available at http://rentzsch.com/code/mogenerator
 * ----------------------------------------------------------------------------------------------
 *)

-- Override these properties as needed on your system
property mogeneratorPath : "/usr/local/bin/mogenerator"
property showConfirmation : true

-- ----------------------------------------------------------------------------------------------

tell application "Xcode"
	set mogeneratorPathCheck to ""
	activate
	try
		set mogeneratorPathCheck to do shell script "
			if [[ -e \"" &#038; mogeneratorPath &#038; "\" ]]; then
				echo \"" &#038; mogeneratorPath &#038; "\";
			else
				echo `which mogenerator`;
			fi
		"
		if mogeneratorPathCheck starts with "no mogenerator" then
			display dialog "Could not find mogenerator script on your system. " &#038; ¬
				"Please edit this script and set the mogeneratorPath property" ¬
				buttons {"Cancel"} default button "Cancel" with icon 1
		end if
		set mogeneratorPath to mogeneratorPathCheck

		set projectPath to the POSIX path of ¬
			(the project directory of the active project document as text)

		set output to do shell script "
			cd \"" &#038; projectPath &#038; "\";
			find . -name '*.xcdatamodel' -print | sed 's/^../  /';
		"
		if output = "" then
			display dialog "Could not find any xcdatamodel files in your current project. " &#038; ¬
				"Is the right project active in Xcode? Also, note this script doesn't support " &#038; ¬
				"referenced files that don't live in your project folder." ¬
				buttons {"Cancel"} default button "Cancel" with icon 1
		else if showConfirmation then
			display dialog "Run mogenerator against the following files?\\n" &#038; output with icon 1
		end if
		set output to do shell script "
			cd \"" &#038; projectPath &#038; "\";
			find . -name '*.xcdatamodel' -print0 | xargs -0 \"" &#038; mogeneratorPath &#038; "\" -model
		"
		if output ≠ "" then
			display dialog "Unexpected error invoking mogenerator:" &#038; output ¬
				buttons {"Cancel"} default button "Cancel" with icon 1
		end if
	on error number errorNumber
		if errorNumber is equal to -128 then -- user cancelled, do nothing
		else if errorNumber is equal to -1728 then -- can't get POSIX path to Xcode project
			display dialog "Unable to get the current project's path in Xcode. " &#038; ¬
				"Are you sure you have a project open?" ¬
				buttons {"Cancel"} default button "Cancel" with icon 1
		else
			display dialog "Unknown error running mogenerator: " &#038; errorNumber ¬
				buttons {"Cancel"} default button "Cancel" with icon 1
		end if
	end try
end tell
</pre>
<p></code></p>
<p><b>Update:</b> You can also <a href="/downloads/Xcode-menu-for-mogenerator.zip">download the code</a> for the original <i>non-working</i> solution (actually, it might work well enough if you use Xcode as your primary editor). To me it seems like a bug that the menu item for an Xcode user script which specifies that it doesn&#8217;t receive text input (via PBXInput=None) becomes inactive unless a text document is open. I filed it as rdar://problem/4905038 (<a href="http://rentzsch.com/notes/rdarUrls">rdar:// urls</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://guelich.net/blog/2007/01/01/running-mogenerator-from-xcode/feed</wfw:commentRss>
		</item>
		<item>
		<title>First Post</title>
		<link>http://guelich.net/blog/2006/12/29/hello-world</link>
		<comments>http://guelich.net/blog/2006/12/29/hello-world#comments</comments>
		<pubDate>Fri, 29 Dec 2006 14:40:15 +0000</pubDate>
		<dc:creator>Scott Guelich</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://guelich.net/blog/2006/12/29/hello-world/</guid>
		<description><![CDATA[So as it says on my about page, I went from being a professional programmer to a med student. Given that I love traveling so much, I&#8217;m still not sure what I was thinking giving up the next several years of my life&#8230; but here I am.
It&#8217;ll be interesting to see what this blog will [...]]]></description>
			<content:encoded><![CDATA[<p>So as it says on my <a href="/blog/about/">about page</a>, I went from being a professional programmer to a med student. Given that I love <a href="/blog/photos/">traveling</a> so much, I&#8217;m still not sure what I was thinking giving up the next several years of my life&#8230; but here I am.</p>
<p>It&#8217;ll be interesting to see what this blog will look like and who the audience will be, if any. I don&#8217;t know that there are a lot of people out there with interests in both technology and medicine, and whether readers with expertise in one will mind sifting through posts about the other. Of course, there is a whole field of inquiry into <a href="http://en.wikipedia.org/wiki/Bioinformatics">bioinformatics</a>, so maybe the combined interest is larger than I realize.</p>
<p>I already have a few programming posts in mind, which should be up shortly. I&#8217;ll also have lots to say about med school, but we&#8217;re still on holiday break and I&#8217;m enjoying the vacation.</p>
]]></content:encoded>
			<wfw:commentRss>http://guelich.net/blog/2006/12/29/hello-world/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
