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

<channel>
	<title>toxicsoftware.com &#187; Software</title>
	<atom:link href="http://toxicsoftware.com/tag/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://toxicsoftware.com</link>
	<description>RANDOMIZE USR 0</description>
	<lastBuildDate>Sun, 01 Aug 2010 17:49:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Run Python Script</title>
		<link>http://toxicsoftware.com/run-python-script/</link>
		<comments>http://toxicsoftware.com/run-python-script/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 16:14:16 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[Automator]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[public]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Source]]></category>

		<guid isPermaLink="false">http://toxicsoftware.com/run-python-script/</guid>
		<description><![CDATA[Important see updates at end of post I&#8217;ve written an Automator action that allows you to write python scripts directly inside your Automator workflow. &#8220;Run Python Script&#8221; Automator action (catchy title) is written using Python and PyObjC (now built-in to &#8230; <a href="http://toxicsoftware.com/run-python-script/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Important</em> see updates at end of post</p>

<p>I&#8217;ve written an Automator action that allows you to write python scripts directly inside your Automator workflow.</p>

<p><a href="http://www.flickr.com/photos/61285556@N00/2110974754" title="View 'RunPythonScriptIcon' on Flickr.com"><img src="http://farm3.static.flickr.com/2237/2110974754_6e5540298b_o.png" alt="RunPythonScriptIcon" /></a></p>

<p>&#8220;<a href="http://bitbucket.org/schwa/toxic-public/src/tip/Projects/Automator/RunPythonScriptAction/Output/Run%20Python%20Script.action.tar.bz2">Run Python Script</a>&#8221; Automator action (catchy title) is written using Python and <a href="http://pyobjc.sourceforge.net/">PyObjC</a> (now built-in to Mac OS X 10.5). Apple already provides &#8220;Run AppleScript&#8221; and &#8220;Run Shell Script&#8221; actions with Automator which give Automator a high degree of flexibility. However Python is my preferred scripting language and by writing a custom action purely for Python I was able to take advantage of some PyObjC features that in my opinion make my action superior to the provided Apple scripting action. I&#8217;m releasing all the <a href="http://bitbucket.org/schwa/toxic-public/src/tip/Projects/Automator/RunPythonScriptAction/">source code</a> to the action under the <a href="http://www.opensource.org/licenses/bsd-license.php">BSD Open Source</a> license.</p>

<p>One of the main advantages of the action is that Python (with the help of PyObjC) understands the AppleEvent descriptors that Automator uses to pass data between workflow actions. This allows the user to create a custom action that accepts and provides data of any type. In contrast Apple&#8217;s &#8220;Run Shell Script&#8221; action can only accept and provide text (usually limited to file paths). Some work does need to be done to make working with any data (which is represented by NSAppleEventDescriptor objects) more convenient.</p>

<p>The default Python script for a new action in a workflow follows:</p>

<pre><code>import sys

def main(input, *args, **kwargs):
    '''Your script goes here.'''
    print 'Hello world'
    return sys.stdout
</code></pre>

<p><a href="http://www.flickr.com/photos/61285556@N00/2110978140" title="View 'RunPythonScriptMain' on Flickr.com"><img src="http://farm3.static.flickr.com/2286/2110978140_4c336656f7_m.jpg" alt="RunPythonScriptMain" /></a></p>

<p>This is pretty simple. The action will optionally convert the input into Python types (currently limited to converting typeAlias AppleEvent descriptors into path strings) to allow simple processing. Output is (optionally) converted from Python types to native Automator types. See the Examples directory for more.</p>

<p>The following screenshot shows the action used in a real workflow. This workflow asks the user for a keyword and then the Python action downloads photos from the <a href="http://morguefile.com/">morguefile</a> public stock photo archive that are related to the keyword. Once download it performs some processing on the files (scales them to 640 by 480) and produces a PDF &#8220;Contact Book&#8221; from the images.</p>

<p><a href="http://www.flickr.com/photos/61285556@N00/2110196661" title="View 'RunPythonScriptScreenshot' on Flickr.com"><img src="http://farm3.static.flickr.com/2169/2110196661_e9f178f475_m.jpg" alt="RunPythonScriptScreenshot" /></a></p>

<p>The <a href="http://bitbucket.org/schwa/toxic-public/src/tip/Projects/Automator/RunPythonScriptAction/">source code</a> uses a 10.5 specific technique to create Python based bundles. It also has a simple Python syntax colouring NSTextView (using Python itself to colourise the source).</p>

<p>I&#8217;m calling the Action a 0.1 release and have some plans/ideas for further releases. See the <a href="http://bitbucket.org/schwa/toxic-public/src/tip/Projects/Automator/RunPythonScriptAction/TODO.txt">TODO list</a>.</p>

<p><em>Update</em>: I&#8217;ve added a <a href="http://toxicsoftware.com/s3_uploader/">sample script</a> showing how to upload files to Amazon S3 from within a workflow.</p>

<p>The code in subversion is a lot newer than the binary I&#8217;m linking to. If possible do a  checkout and build the plugin yourself.</p>

<p><em>Update</em>: This Automator action has issues on Snow Leopard and some Leopard versions. Use at your own risk.</p>

<p><em>Update</em>: Automator&#8217;s &#8220;Run Terminal Script&#8221; looks like it supports and understands Python native. That means, although my .action was better (syntax highlighting, better control of input and output, better logging, etc), I probably won&#8217;t bother to update it to Snow Leopard.</p>

<p><img src="http://toxicsoftware.com/wordpress/wp-content/uploads/Screen-shot-2009-10-16-at-11.02.36-AM.png" alt="Screen shot 2009-10-16 at 11.02.36 AM.png" border="0" width="25%" height="25%" /></p>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/run-python-script/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>FlexTime 1.0 finished</title>
		<link>http://toxicsoftware.com/flextime-10-finished/</link>
		<comments>http://toxicsoftware.com/flextime-10-finished/#comments</comments>
		<pubDate>Thu, 17 Aug 2006 16:48:56 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[Headline]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://toxicsoftware.com/blog/flextime-10-finished/</guid>
		<description><![CDATA[Daniel Jalkut of Red Sweater infamy has released FlexTime, a Mac OS X timer application. Of interest to me is that FlexTime might well be the first released Mac OS X application to make used of my Toxic Progress Indicator &#8230; <a href="http://toxicsoftware.com/flextime-10-finished/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Daniel Jalkut of <a href="http://www.red-sweater.com/">Red Sweater</a> <a href="http://www.red-sweater.com/blog/136/insane-in-the-ui-brain">infamy</a> has <a href="http://www.red-sweater.com/blog/171/flextime-10">released</a> <a href="http://www.red-sweater.com/flextime/">FlexTime</a>, a Mac OS X timer application. Of interest to me is that FlexTime might well be the first released Mac OS X application to make used of my <a href="/toxic_progress_indicator/">Toxic Progress Indicator</a> Cocoa Widget, as seen in the following screenshot:</p>

<p><img src="http://toxicsoftware.com/wordpress//uploads//FlexTime.png" border="0" height="348" width="641" alt="FlexTime.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/flextime-10-finished/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quickies</title>
		<link>http://toxicsoftware.com/quickies/</link>
		<comments>http://toxicsoftware.com/quickies/#comments</comments>
		<pubDate>Fri, 16 Jun 2006 00:42:07 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[Kip]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[NodeBox]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Red-Sweater]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[wxWidgets]]></category>

		<guid isPermaLink="false">http://toxicsoftware.com/blog/quickies/</guid>
		<description><![CDATA[Daniel Jalkut of Red-Sweater scores a hat-trick with three very interesting blog posts. Of special interest to me, is his posting about the redesign of his blog using NodeBox. I actually introduced Daniel to NodeBox, little did I know he&#8217;d &#8230; <a href="http://toxicsoftware.com/quickies/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li>Daniel Jalkut of <a href="http://www.red-sweater.com/blog">Red-Sweater</a> scores a hat-trick with three <a href="http://www.red-sweater.com/blog/146/blog-redesign">very</a> <a href="http://www.red-sweater.com/blog/145/another-ui-bites-the-dust">interesting</a> <a href="http://www.red-sweater.com/blog/144/take-the-money-and-run">blog</a> posts. Of special interest to me, is his posting about the <a href="http://www.red-sweater.com/blog/146/blog-redesign">redesign of his blog</a> using <a href="http://nodebox.net/">NodeBox</a>. I actually introduced Daniel to NodeBox, little did I know he&#8217;d do so much with it. Very cool.</li>

<li><a href="http://thekip.com/Site/about%20kip.html">The Kip</a> is a strange tool for archiving, indexing and displaying PDF files. The interface is quite distinctive and a mixture between iPhoto and <a href="http://del.icio.us">del.icio.us</a>. I really like the embedding scanner functionality. See Apple? Not every scanner application has to suck. The Kip is given a yellow card for uploading a bunch of PDFs to my .mac account without asking my permission and unencrypted to boot!</li>

<li><a href="http://toxicsoftware.com/wordpress//uploads//wxHelloWorld.zip">wxHelloWorld</a> is the canonical <a href="http://wxWidgets.org/">wxWidgets</a> &#8220;<a href="http://wxwidgets.org/docs/tutorials/hello.htm">Hello World</a>&#8221; application inside an XCode project. This version is built using the DarwinPorts wxWidgets installation. I had to struggle to work out how to build wxWidgets based applications inside XCode (although in retrospect it is quite simple). Hopefully this little project will save other people from some of the struggle I went through.</li>

<li><a href="http://atomicbird.com/">Tom Harrington</a> has announced <a href="http://ironcoder.org/blog/2006/06/14/sparkle-plus/">Sparkle Plus</a>. This is a fork of Andy Matuschak&rsquo;s <a href="http://andymatuschak.org/pages/sparkle">Sparkle</a> auto-update framework for Cocoa. SparklePlus is hosted on <a href="http://ironcoder.org">ironcoder.org</a> and becomes the first Mac OS X open source project hosted by Ironcoder.</li>

<li>An application I&#8217;ve been working on has finally left QA and has entered beta today. And there was much rejoicing (until the big reports start rolling in of course).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/quickies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AquaticPrime Warning</title>
		<link>http://toxicsoftware.com/aquaticprime-warning/</link>
		<comments>http://toxicsoftware.com/aquaticprime-warning/#comments</comments>
		<pubDate>Thu, 08 Jun 2006 02:24:55 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[AquaticPrime]]></category>
		<category><![CDATA[Cracks]]></category>
		<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Licensing]]></category>
		<category><![CDATA[Software Registration]]></category>

		<guid isPermaLink="false">http://toxicsoftware.com/blog/aquaticprime-warning/</guid>
		<description><![CDATA[AquaticPrime is a &#8220;secure registration method for your shareware applications, released as free open-source software&#8221;. AquaticPrime uses &#8220;RSA encryption to provide excellent security &#8211; the same that is used to protect government documents&#8221;. This makes it sound like AquaticPrime is &#8230; <a href="http://toxicsoftware.com/aquaticprime-warning/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.aquaticmac.com/">AquaticPrime</a> is a &#8220;secure registration method for your shareware applications, released as free open-source software&#8221;.</p>

<p>AquaticPrime uses &#8220;RSA encryption to provide excellent security &#8211; the same that is used to protect government documents&#8221;. This makes it sound like AquaticPrime is a great solution for Software Developers wanting to prevent piracy by adopting a software licensing scheme. A lot of <a href="http://groups.yahoo.com/group/macsb/">Macintosh Small Business</a> developers are using or are considering using AquaticPrime.</p>

<p>Unfortunately for them, AquaticPrime is incredibly easy to crack. I am not a <a href="http://en.wikipedia.org/wiki/Computer_security">computer security</a> expert and I am definitely not a <a href="http://en.wikipedia.org/wiki/Cracker_%28computing%29">software cracker</a>, but I was able to crack an application that used AquaticPrime in less than thirty minutes with almost no preparation time. In fact, I am pretty sure that my crack will work with almost all applications that use AquaticPrime.</p>

<p>Aquatic Prime uses a technique similar to one discussed by Allan Odgaard on his <a href="http://macromates.com/sigpipe/archives/2004/09/05/using-openssl-for-license-keys/#comment-82">blog</a>. <a href="http://en.wikipedia.org/wiki/Public_key_cryptography">Public Key cryptography</a> techniques are used to generate linked public and a private keys. The private key is kept by the software developer and the public key is shipped inside the application&#8217;s binary. When a user buys a copy of the software, a license file is signed using the private key. The software can then use its public key to verify that the license key was signed by the public key. Someone trying to steal a copy of the software would be unable to forge their own license files because the public key works with one and only one private key.</p>

<p>The technique I used to defeat AquaticPrime involved creating my own private and public keys (using the AquaticPrime utility itself) and then generating a fake license  key (registered to a &#8220;John Doe&#8221;) using the new private key. The trick then was cracking the test application and convincing it to use my public key instead of the real key.</p>

<p>To track the application, I needed a way of writing code that could be executed by the targeted application. Fortunately, there are a plethora of methods to do that on Mac OS X: <a href="http://www.unsanity.com/haxies/ape">Application Enhancer</a>, <a href="http://rentzsch.com/mach_inject/">MachInject</a>, <a href="http://www.cocoadev.com/index.pl?InputManager">InputManagers</a>, and <a href="http://culater.net/software/SIMBL/SIMBL.php">SIMBL</a> plugins are just some of the many ways of forcing third-party applications to run foreign code. I chose to use a SIMBL plugin because I had never used SIMBL before and wanted to learn a little about it. Creating a SIMBL plug-in turned out to be incredibly easy and I had my code running inside the targeted application in just a few minutes. In a couple of minutes more, I had created an object that was masquerading as an <a href="http://aquaticmac.com/guide/validate.php">AquaticPrime</a> object. The final step was to make my masquerading object ignore the application&#8217;s public key and use my fake public key instead. Once this was achieved I loaded my (or rather John Doe&#8217;s) fake license key into the application and found that I had cracked the application.</p>

<p>It really was as simple as that. Of course there were a few WTF moments and application crashes, but nothing unusual during development (especially development of this kind). The code currently only works with AquaticPrime&#8217;s Objective-C interface, but the same principles can be used for the pure C interface too. I have tried this technique on two shareware applications and it worked fine with both. I am reasonably confident that it should work with most AquaticPrime using applications.</p>

<p>The method used to defeat AquaticPrime isn&#8217;t particularly obscure, and in fact is just one of many methods that could be used to defeat it. However this method is particularly nice in that you&#8217;re not really hacking the application using a more brute force method. You&#8217;re merely providing it with bad data, which it then uses to validate your bad license (kind of like Garbage In, Garbage out), in all other ways AquaticPrime is working as normal and is blissfully unaware that it has been cracked. This means that some of the techniques that developers can use to find out if their software has been cracked are impossible.</p>

<p>AquaticPrime is a well written, documented and marketed piece of software. But it suffers from this huge design flaw. AquaticPrime is exceptionally easy to crack, either with this method or with a variety of other, possibly cruder methods. Many of these methods are equally applicable to other registration schemes, so it is somewhat unfair to single AquaticPrime out. But because AquaticPrime provides all the source code and headers to anyone, it makes it really easy for anyone to crack. Although hiding the source code would have been a form of &#8220;<a href="http://en.wikipedia.org/wiki/Security_through_obscurity">security through obscurity</a>&#8220;, this would have at least slowed me down considerable. As it was, I was handed everything I needed to crack this software on a plate. And if I can crack this software in less than 30 minutes, I am sure crackers who do this thing professionally would have had even less trouble.</p>

<p>Even more worrying, this technique doesn&#8217;t just work on a single application, it will work on all applications that use AquaticPrime. I don&#8217;t know how many applications out there use AquaticPrime, but each is vulnerable to the same crack and all would be cracked essentially &#8220;for free&#8221;. There are some things a developer could do to shore up this vulnerability, but in reality most solutions are probably just as easily cracked.</p>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/aquaticprime-warning/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>mdfind2 updated</title>
		<link>http://toxicsoftware.com/mdfind2-updated/</link>
		<comments>http://toxicsoftware.com/mdfind2-updated/#comments</comments>
		<pubDate>Sat, 03 Jun 2006 15:22:11 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[mdfind]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Spotlight]]></category>

		<guid isPermaLink="false">http://toxicsoftware.com/mdfind2-updated/</guid>
		<description><![CDATA[I&#8217;ve just updated mdfind2. The most important change is that it is now a universal binary. I&#8217;ve also improved the command-line parsing (it now uses getopt_long) and prints usage information on error. Links: Subversion Repository: http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Spotlight/mdfind2/ Binary: http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Spotlight/mdfind2/Output/mdfind2.tar.bz2]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just updated <a href="/blog/mdfind2">mdfind2</a>. The most important change is that it is now a universal binary. I&#8217;ve also improved the command-line parsing (it now uses getopt_long) and prints usage information on error.</p>

<p>Links:</p>

<p>Subversion Repository: <a href="http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Spotlight/mdfind2/">http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Spotlight/mdfind2/</a></p>

<p>Binary: <a href="http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Spotlight/mdfind2/Output/mdfind2.tar.bz2">http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Spotlight/mdfind2/Output/mdfind2.tar.bz2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/mdfind2-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Iron Coder &#8211; Progress Report 1</title>
		<link>http://toxicsoftware.com/iron_coder_progress_report_1/</link>
		<comments>http://toxicsoftware.com/iron_coder_progress_report_1/#comments</comments>
		<pubDate>Sat, 04 Mar 2006 09:40:21 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[It has been a little over 6 hours since the API for the ironcoder.org competition was announced. The first 24 hours of Iron Coder were supposed to be used as a familiarisation period to learn the API. Fortunately I&#8217;m not &#8230; <a href="http://toxicsoftware.com/iron_coder_progress_report_1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It has been a little over 6 hours since the API for the ironcoder.org competition was announced. The first 24 hours of Iron Coder were supposed to be used as a familiarisation period to learn the API. Fortunately I&#8217;m not totally unfamiliar with the accessibility API and a year or two ago I created a crude proof of concept for a neat little toy that used the API. So I&#8217;ve actually been coding during since the start of the project. I&#8217;m taking my old toy code and polishing it up and improving upon it. I have some neat ideas for it.</p>

<p>Now the real trick will have to happen tomorrow (uh &#8211; later today) when I&#8217;ll need to take the Iron Coder theme and apply it to my project. I&#8217;m hoping for a really tacky theme, like Elvis Presley impersonators or Pink Lawn Flamingos. Jonathan &#8216;Wolf&#8217; Rentzsch really picked a great API (all hail the chairman) and I am sure he won&#8217;t let us down with his choice of theme.</p>

<p>I&#8217;m not the only one starting coding early &#8211; I know a few people wont have much time during the second day of the competition so are hoping to score points on their use of the API alone. The beauty of this competition (I think, this is still our first attempt so who really knows how things will turn) is that it just encourages cool hacks.</p>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/iron_coder_progress_report_1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>iMeem</title>
		<link>http://toxicsoftware.com/imeem/</link>
		<comments>http://toxicsoftware.com/imeem/#comments</comments>
		<pubDate>Fri, 27 Jan 2006 22:25:22 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[Headline]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I wasn&#8217;t really impressed with the new iMeem buzzword enabled chat application until a bunch of us from #macsb poked under its hood and saw Mono sitting there. It looks like the first non-trivial (correct me if I&#8217;m wrong) Mono &#8230; <a href="http://toxicsoftware.com/imeem/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I wasn&#8217;t really impressed with the new <a href="http://imeem.com/">iMeem</a> buzzword enabled chat application until a bunch of us from <a href="irc://irc.freenode.net/%23macsb">#macsb</a> poked under its hood and saw <a href="http://www.mono-project.com/Main_Page">Mono</a> sitting there. It looks like the first non-trivial (correct me if I&#8217;m wrong) Mono application has shipped for Mac OS X. And what&#8217;s more it looks good. It looks just like a native Cocoa application. Not surprising considering it uses a <a href="http://allan.imeem.com/blogentry/gbgC7kTg">C# to Cocoa bridge</a> (and not <a href="http://www.mono-project.com/CocoaSharp">Cocoa#</a> because apparently that <a href="http://allan.imeem.com/blogentry/V4WWWKQU">sucks</a>). You can download the <a href="http://www.imeem.com/developers.aspx">bridge</a> here. This definitely changes the face of cross-platform development on the Mac, I wonder if <a href="http://www.friday.com/bbum/2006/01/11/google-earth-for-mac-big-disappointment/">Google</a> is taking note.</p>

<p>More linke: <a href="http://zacwhite.com/blog/?p=36">http://zacwhite.com/blog/?p=36</a></p>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/imeem/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>A Fistful of Yojimbos</title>
		<link>http://toxicsoftware.com/a_fistful_of_yojimbos/</link>
		<comments>http://toxicsoftware.com/a_fistful_of_yojimbos/#comments</comments>
		<pubDate>Tue, 24 Jan 2006 04:46:15 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Everyone has been posting about how cool Bare Bone&#8217;s new Yojimbo application is. But so far no one has mentioned what a really freaking cool name it has.]]></description>
			<content:encoded><![CDATA[<p><a href="http://ranchero.com/?comments=1&#38;postid=1266">Everyone</a> has <a href="http://2lmc.org/spool/id/5275">been</a> <a href="http://mjtsai.com/blog/2006/01/23/yojimbo-10/">posting</a> <a href="http://www.gusmueller.com/blog/archives/2006/1/23.html#1419">about</a> how <a href="http://www.oreillynet.com/pub/wlg/9088?CMP=OTC-13IV03560550&amp;ATT=Yojimbo:+a+new+direction+for+Bare+Bones">cool</a> <a href="http://www.barebones.com/">Bare Bone&#8217;s</a> new <a href="http://www.barebones.com/products/yojimbo/index.shtml">Yojimbo</a> application is. But so far no one has mentioned what a really <a href="http://en.wikipedia.org/wiki/Yojimbo_%28film%29">freaking cool</a> <a href="http://www.imdb.com/title/tt0055630/">name</a> it has.</p>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/a_fistful_of_yojimbos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Plugin Enabler for Voodoo Pad</title>
		<link>http://toxicsoftware.com/python_plugin_enabler_for_voodoo_pad/</link>
		<comments>http://toxicsoftware.com/python_plugin_enabler_for_voodoo_pad/#comments</comments>
		<pubDate>Mon, 23 Jan 2006 02:25:38 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://toxicsoftware.com/python_plugin_enabler_for_voodoo_pad/</guid>
		<description><![CDATA[I&#8217;ve written a plugin for the extremely cool VoodooPad application that allows you to write your own plugins for VoodooPad using Python. Gus (VoodooPad&#8217;s author) describes it best on his blog. Gus helped me write the plugin and provided a &#8230; <a href="http://toxicsoftware.com/python_plugin_enabler_for_voodoo_pad/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve written a plugin for the extremely cool <a href="http://flyingmeat.com/voodoopad/">VoodooPad</a> application that allows you to write your own plugins for VoodooPad using Python. Gus (VoodooPad&#8217;s author) describes it best on his <a href="http://www.gusmueller.com/blog/archives/2006/1/21.html">blog</a>. Gus helped me write the plugin and provided a new plugin API in VoodooPad (which is why it requires VoodooPad 2.5.3) to help get past a limitation in PyObjc. Gus now owns the plugin but my original subversion repository for the code is here: <a href="http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Projects/VoodooPad/VoodooPad%20PythonPlugin/">http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Projects/VoodooPad/VoodooPad%20PythonPlugin/</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/python_plugin_enabler_for_voodoo_pad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Metadata Importer 1.0.6 Released</title>
		<link>http://toxicsoftware.com/python_metadata_importer_106_released/</link>
		<comments>http://toxicsoftware.com/python_metadata_importer_106_released/#comments</comments>
		<pubDate>Sun, 22 Jan 2006 20:09:14 +0000</pubDate>
		<dc:creator>schwa</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://toxicsoftware.com/python_metadata_importer_106_released/</guid>
		<description><![CDATA[I&#8217;ve just released version 1.0.6 of my Python Metadata Importer plugin. What&#8217;s new: Support for Intel architecture. UTType now includes Python&#8217;s OS Creator code. Slightly better error handling Python Metadata Importer shouldn&#8217;t die when indexing Python files it doesn&#8217;t understand. &#8230; <a href="http://toxicsoftware.com/python_metadata_importer_106_released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released version 1.0.6 of my Python Metadata Importer plugin. What&#8217;s new:</p>

<ul>
<li>Support for Intel architecture.</li>
<li>UTType now includes Python&#8217;s OS Creator code.</li>
<li>Slightly better error handling</li>
<li>Python Metadata Importer shouldn&#8217;t die when indexing Python files it doesn&#8217;t understand.</li>
</ul>

<p>Direct download:</p>

<p><a href="/downloads/software/Python%20Metadata%20Importer.dmg">Python Metadata Importer.dmg</a></p>

<p>Source code:</p>

<p><a href="http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Projects/Spotlight/Python%20Metadata%20Importer/">http://toxic-public.googlecode.com/svn/tags/BlogTag_20070927_729/Projects/Spotlight/Python%20Metadata%20Importer/</a></p>

<p>About Python Metadata Importer:</p>

<p>Allows Spotlight to import and index Python script source code. Various metadata are imported from the source code including function and class names, version, author and description.</p>

<p>Related Postings:</p>

<ul>
<li><a href="/blog/python_metadata_importer_released_for_tiger/">Python Metadata Importer Released for Tiger</a></li>
<li><a href="/blog/spoke_at_phadorg_meeting_tonight/">Spoke at phad.org meeting tonight</a></li>
<li><a href="/blog/lisp_metadata_importer/">Lisp Metadata Importer</a></li>
<li><a href="/blog/ruby_spotlight_importer/">Ruby Spotlight Importer</a></li>
<li><a href="/blog/python_metadata_importer_101_released/">Python Metadata Importer 1.0.1 Release</a></li>
<li><a href="/blog/python_metadata_importer_released_for_tiger/">Python Metadata Importer Released for Tiger</a></li>
<li><a href="/blog/conf_metadata_importer/">Conf Metadata Importer</a></li>
<li><a href="/blog/creating_a_generic_config_file_spotlight_importer/">Creating a Generic Config File Spotlight Importer</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://toxicsoftware.com/python_metadata_importer_106_released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
