<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/1.5.2" -->
<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/"
>

<channel>
	<title>fdiv.net</title>
	<link>http://fdiv.net</link>
	<description>the floating point divide</description>
	<pubDate>Wed, 30 Jul 2008 17:51:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=1.5.2</generator>
	<language>en</language>

		<item>
		<title>Silicon Dioxide (SiO2)</title>
		<link>http://fdiv.net/2008/07/30/silicon-dioxide-sio2/</link>
		<comments>http://fdiv.net/2008/07/30/silicon-dioxide-sio2/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 17:50:33 +0000</pubDate>
		<dc:creator>cwright</dc:creator>
		
	<category>Social Story</category>
	<category>kineme</category>
	<category>Interactive Media</category>
	<category>Quartz Composer</category>
	<category>Apple</category>
	<category>Software Development</category>
	<category>Kosada</category>
		<guid>http://fdiv.net/2008/07/30/silicon-dioxide-sio2/</guid>
		<description><![CDATA[	In the wee small hours of this morning, Kineme Interactive Media released its first commercial product, QuartzCrystal.
	QuartzCrystal is an offline renderer that turns Quartz Compositions into portable QuickTime movies.  It supports 3rd party plugins, as well as patches that do not work in safe-mode-only environments (such as QuickTime Pro).  It also supports software [...]]]></description>
			<content:encoded><![CDATA[	<p><a href="http://kineme.net/product/QuartzCrystal"><img style="background: none;" align="right" alt="QuartzCrystal Logo" src="http://kineme.net/files/imagecache/product/files/QuartzCrystal-1.0.png" /></a>In the wee small hours of this morning, <a href="http://kineme.net/">Kineme Interactive Media</a> released its first commercial product, <a href="http://kineme.net/product/QuartzCrystal">QuartzCrystal</a>.</p>
	<p>QuartzCrystal is an offline renderer that turns Quartz Compositions into portable QuickTime movies.  It supports 3rd party plugins, as well as patches that do not work in safe-mode-only environments (such as QuickTime Pro).  It also supports software scene antialiasing, so if you have a Mac with plenty of RAM and a hard-core video card, you can make spectacularly beautiful renderings of your plugins, effects, and compositions.</p>
	<p>Beside QuartzCrystal, the only other product that renders and encodes compositions to movies is <a href="http://www.apple.com">Apple</a>&#8217;s own <a href="http://store.apple.com/us/product/D3380Z/A">QuickTime Pro</a>, which doesn&#8217;t support plugins, unsafe patches, or antialiasing.</p>
	<p><a href="http://kineme.net/product/QuartzCrystal"><img style="background: none;" alt="QuartzCrystal Main Window Screenshot" src="http://kineme.net/system/files/QuartzCrystal+Main+Window_1.png" /></a>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2008/07/30/silicon-dioxide-sio2/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Python&#8217;s Flying Circus</title>
		<link>http://fdiv.net/2008/02/22/pythons-flying-circus/</link>
		<comments>http://fdiv.net/2008/02/22/pythons-flying-circus/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 19:35:35 +0000</pubDate>
		<dc:creator>cwright</dc:creator>
		
	<category>kineme</category>
	<category>Antisocial Story</category>
	<category>Language</category>
	<category>Software Development</category>
		<guid>http://fdiv.net/2008/02/22/pythons-flying-circus/</guid>
		<description><![CDATA[	
	Lately I&#8217;ve been working on integrating (or, more accurately, attempting to integrate) the Python scripting language into some plugins for an application we develop plugins for.  We&#8217;ve wrapped many libraries with varying levels of success, so this one wasn&#8217;t going to be much different.  Or, so we thought.
	Technically, we&#8217;re interested in &#8220;Embedding&#8221; Python [...]]]></description>
			<content:encoded><![CDATA[	<p><img src="http://img.b33p.net/pub/cwIngHlMs0BtBweZ0BcHJrnBo3K6wYeW/thumbnail-256" align="right" alt="Python Logo" /></p>
	<p>Lately I&#8217;ve been working on integrating (or, more accurately, attempting to integrate) the Python scripting language into some plugins for an application we develop plugins for.  We&#8217;ve wrapped many libraries with varying levels of success, so this one wasn&#8217;t going to be much different.  Or, so we thought.<a id="more-118"></a></p>
	<p>Technically, we&#8217;re interested in &#8220;Embedding&#8221; Python &#8212; We have a native Objective-C application that needs to make use of the Python interpreter at various stages of execution.  The Python scripts are user-supplied, and are exceptionally free-form:  the functions they write can take variable numbers of inputs, produce variable numbers of outputs, and can use any Python modules they have installed.</p>
	<p>Unfortunately, this makes the embedding process somewhat complicated:  From Objective-C, we need to be able to parse the script, find all its functions, and get all those functions&#8217; input and output parameters.  From this data, we can expose the Python module&#8217;s interface usefully.  Unfortunately, Python does not appear to allow this kind of introspection from the outside (and it&#8217;s questionable whether or not it&#8217;s even possible from the inside.)</p>
	<p>In searching for information on this, <a href="http://davidf.sjsoft.com/mirrors/mcmillan-inc/embed.html">Numerous</a> <a href="http://www.developer.com/lang/other/article.php/2217941">Documents</a> are <a href="http://twistedmatrix.com/users/glyph/rant/extendit.html">Found</a> that <a href="http://www.linuxjournal.com/article/8497">Needlessly</a> <a href="http://www.python.org/doc/current/ext/embedding.html">Complicate</a> or Obfuscate the difference between Embedding and Extending.  As if it&#8217;s really that difficult (<strong>embed</strong> means &#8220;fix firmly and deeply in a surrounding mass&#8221; while <strong>extend</strong> means &#8220;cause to cover a larger area; make longer or wider&#8221;.  From these obvious definitions, we can infer that &#8220;Embedding&#8221; means putting something inside, while &#8220;Extending&#8221; means adding functionality or abilities.  Maybe it&#8217;s not so clear for non-native english speakers.  I don&#8217;t know.)</p>
	<p>Another annoying side-trip of this research was an overwhelmingly smug idea that almost reeks of Java.  This side effect is the recorded smarmy discussion of why one should &#8220;Extend&#8221; rather than &#8220;Embed&#8221; (these reasons are then used to explain away why there isn&#8217;t any good documentation on actually embedding Python).  The arguments go something like this:</p>
	<ul>
	<li>Python&#8217;s so good, cross-platform, and flexible that it&#8217;s actually more cost-effective to <em>Throw Out All Your C/C++/ObjC Code And Rewrite Everything In Python.</em></li>
	<li>Embedding is so cumbersome to code, and so difficult compared to embedding Python in Python, that you should <em>Throw Out All Your C/C++/ObjC Code And Rewrite Everything In Python.</em></li>
	<li>High-performance code can be written in C, and then called from within Python&#8217;s runtime when you actually need to performance boost.  Why not just <em>Throw Out All Your C/C++/ObjC Code And Rewrite Everything In Python</em> Except for the fast bits?</li>
	<li>If you embed Python, you&#8217;ll annoy Python developers who can&#8217;t access the modules they&#8217;re used to using.  Why not <em>Throw Out All Your C/C++/ObjC Code And Rewrite Everything In Python</em> so you don&#8217;t annoy your Python developers?</li>
	</ul>
	<p>These arguments cover some pretty diverse ground there.  Unfortunately, there are 2 fatals flaws in the list above.  </p>
	<p>First, embedded Python _Can_ in fact use installed modules just like raw Python, so point 4 above is flagrantly incorrect.  There are some suggestions that it&#8217;s simply annoying to develop in such an environment because namespaces are all strange (or wrong) and nothing works quite right.  Guess What:  Welcome To Plugin Development!  It&#8217;s like these Python developers have never worked on real projects before or something.</p>
	<p>Second, All of the above points assume that it&#8217;s possible to discard your entire code-base and rewrite everything.  While this is technically possible, it&#8217;s not very likely when you don&#8217;t have access to the source of the application to be discarded (in our case).  The unfortunate downside is that _All The Listed &#8220;Solutions&#8221; Hinge On This One Idea_.</p>
	<p>What&#8217;s with these non-solutions from allegedly flexible languages?  Even Objective-C, a compiled language, and the (totally undocumented) JavaVM-ObjC bridge, offer enough introspection to at least find methods and parameter counts without too much hassle.  Maybe Python does this just as simply, but if so, no one&#8217;s talking about it&#8230;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2008/02/22/pythons-flying-circus/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Announcing: kineme.net</title>
		<link>http://fdiv.net/2007/07/10/announcing-kinemenet/</link>
		<comments>http://fdiv.net/2007/07/10/announcing-kinemenet/#comments</comments>
		<pubDate>Tue, 10 Jul 2007 22:24:30 +0000</pubDate>
		<dc:creator>cwright</dc:creator>
		
	<category>Social Story</category>
	<category>kineme</category>
	<category>Interactive Media</category>
	<category>Quartz Composer</category>
	<category>Software Development</category>
		<guid>http://fdiv.net/2007/07/10/announcing-kinemenet/</guid>
		<description><![CDATA[	The Kineme Quartz Composer patches now have a proper home at http://kineme.net/, including forums, bug reports, comments, and feature requests &#8212; complete with voting!
	Along with the new site, a few new patches are available as well based on requests from users.

]]></description>
			<content:encoded><![CDATA[	<p><img align="right" src="http://img.b33p.net/pub/0xk3_shbAp63pte73kN2cEqQU7h_WlFM/thumbnail-256" alt="screenshot of kineme.net" />The Kineme Quartz Composer patches now have a proper home at <a href="http://kineme.net/">http://kineme.net/</a>, including forums, bug reports, comments, and feature requests &#8212; complete with voting!</p>
	<p>Along with the new site, a <a href="http://kineme.net/QuartzComposerPatches/ImageDownloaderBlockingPatch">few</a> <a href="http://kineme.net/QuartzComposerPatches/ShellCommandPatch">new</a> <a href="http://kineme.net/QuartzComposerPatches/SpeechSynthesisPatch">patches</a> are available as well based on requests from users.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2007/07/10/announcing-kinemenet/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>How to make Pop-Up Menus in Custom Quartz Composer Patches</title>
		<link>http://fdiv.net/2007/07/05/pop-up-menus-in-custom-quartz-composer-patches/</link>
		<comments>http://fdiv.net/2007/07/05/pop-up-menus-in-custom-quartz-composer-patches/#comments</comments>
		<pubDate>Thu, 05 Jul 2007 18:26:27 +0000</pubDate>
		<dc:creator>smokris</dc:creator>
		
	<category>Quartz Composer</category>
	<category>Apple</category>
	<category>Software Development</category>
		<guid>http://fdiv.net/2007/07/05/pop-up-menus-in-custom-quartz-composer-patches/</guid>
		<description><![CDATA[	Making pop-up menus in custom Quartz Composer patches is actually surprisingly easy.
	 This release is only compatible with Tiger (10.4).Please see kineme.net for Leopard-specific informations.
	1.  Set up a QCIndexPort input.  QCIndexPorts provide values from 0 to whatever max you specify using - (void)setMaxIndexValue:(unsigned int)max;.

	
@interface IndexPortPopUpDemoPatch : QCPatch
{
    QCIndexPort *inputPerson;
}
	
...
	
@end

	2.  [...]]]></description>
			<content:encoded><![CDATA[	<p><img align="right" src="http://img.b33p.net/pub/rdbO8vsyz_OYqrtRiObQF5xTYQzJqYES/png-indexed-64" alt="screenshot of a custom Quartz Composer patch's pop-up menu" />Making pop-up menus in custom Quartz Composer patches is actually surprisingly easy.</p>
	<div class="notice"><img src="/wp-content/themes/alternate0/stop.png" /> This release is only compatible with Tiger (10.4).<br />Please see <a href="http://kineme.net/Leopard">kineme.net</a> for Leopard-specific informations.</div>
	<p>1.  Set up a QCIndexPort input.  QCIndexPorts provide values from 0 to whatever max you specify using <code>- (void)setMaxIndexValue:(unsigned int)max;</code>.<br />
<a id="more-102"></a></p>
	<pre class="code">
@interface IndexPortPopUpDemoPatch : QCPatch
{
    QCIndexPort *inputPerson;
}
	
...
	
@end
</pre>
	<p>2.  Add the &#8220;menu&#8221; key to the port&#8217;s input attributes:</p>
	<pre class="code">
	&lt;key&gt;inputAttributes&lt;/key&gt;
	&lt;dict&gt;
		&lt;key&gt;inputPerson&lt;/key&gt;
		&lt;dict&gt;
			&lt;key&gt;description&lt;/key&gt;
			&lt;string&gt;Person&lt;/string&gt;
			&lt;key&gt;name&lt;/key&gt;
			&lt;string&gt;Person&lt;/string&gt;
			&lt;key&gt;menu&lt;/key&gt;
			&lt;array&gt;
				&lt;string&gt;Arthur Dent&lt;/string&gt;
				&lt;string&gt;Ford Prefect&lt;/string&gt;
				&lt;string&gt;Zaphod Beeblebrox&lt;/string&gt;
				&lt;string&gt;Marvin&lt;/string&gt;
				&lt;string&gt;Trillian&lt;/string&gt;
				&lt;string&gt;Slartibartfast&lt;/string&gt;
				&lt;string&gt;Agrajag&lt;/string&gt;
				&lt;string&gt;Wonko the Sane&lt;/string&gt;
			&lt;/array&gt;
		&lt;/dict&gt;
	&lt;/dict&gt;
</pre>
	<p>3.  Make sure you set the max index value in the <code>initWithIdentifier</code> function:</p>
	<pre class="code">
- (id)initWithIdentifier:(id)fp8
{
        id z=[super initWithIdentifier:fp8];
	
        [inputPerson setMaxIndexValue:7];
	
        return z;
}
</pre>
	<p>4.  Read the value out of the QCIndexPort using <code>- (unsigned int)indexValue;</code>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2007/07/05/pop-up-menus-in-custom-quartz-composer-patches/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>New Custom Quartz Composer Patch Xcode Template</title>
		<link>http://fdiv.net/2007/06/29/new-custom-quartz-composer-patch-xcode-template/</link>
		<comments>http://fdiv.net/2007/06/29/new-custom-quartz-composer-patch-xcode-template/#comments</comments>
		<pubDate>Fri, 29 Jun 2007 22:02:23 +0000</pubDate>
		<dc:creator>smokris</dc:creator>
		
	<category>Quartz Composer</category>
	<category>Apple</category>
	<category>Software Development</category>
		<guid>http://fdiv.net/2007/06/29/new-custom-quartz-composer-patch-xcode-template/</guid>
		<description><![CDATA[	Here&#8217;s a new version of the Xcode Template for Custom Quartz Composer Patches.
	Changes:
	
	Rebuilt from scratch &#8212; no longer depends on QCJP&#8217;s work &#8212; and, by extension, the Creative Commons &#8220;Attribution-NonCommercial-ShareAlike&#8221; license.  My Xcode Template, as of version 0.2, is released into the Public Domain.  You are free to use it for whatever &#8212; [...]]]></description>
			<content:encoded><![CDATA[	<p><img src="http://img.b33p.net/pub/WTRlYLwZRYymJDeKzyAod4p0-XrkDWhG/png-indexed-64" align="right" alt="Create a new Xcode project with this template" />Here&#8217;s a new version of the Xcode Template for Custom Quartz Composer Patches.</p>
	<p>Changes:</p>
	<ul>
	<li>Rebuilt from scratch &#8212; no longer depends on QCJP&#8217;s work &#8212; and, by extension, the Creative Commons &#8220;Attribution-NonCommercial-ShareAlike&#8221; license.  My Xcode Template, as of version 0.2, is released into the Public Domain.  You are free to use it for whatever &#8212; commercial or non-commercial.</li>
	<li>QCJP&#8217;s headers were replaced with headers assembled directly from the QuartzComposer framework &#8212; now located in the QuartzComposer/ folder of the project.  I&#8217;ve exported a few more headers than QCJP had constructed, so there&#8217;s some added functionality (namely, image input/output ports).</li>
	<li>The project now automatically assigns an icon to the patch bundle, and installs it in /Library/Graphics/Patches/ for you each time you build, for faster edit-build-test workflow.</li>
	</ul>
	<div class="notice"><img src="/wp-content/themes/alternate0/stop.png" /> This release is out-of-date.<br />Please see the <a href="http://kineme.net/XcodeTemplateForCustomQuartzComposerPatches">latest version</a>.</div>
	<p><strong><a href="http://softpixel.com/~smokris/widgets/quartzComposer/XcodeTemplateForCustomQuartzComposerPatches-0.2.pkg.zip">Download the installer, version 0.2</a>.</strong></p>
	<p>See the <a href="http://fdiv.net/2007/05/08/xcode-template-for-custom-quartz-composer-patches/">old version&#8217;s blogpost</a> for some additional instructions and user comments.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2007/06/29/new-custom-quartz-composer-patch-xcode-template/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Monstrous P5 Glove Patch for Quartz Composer</title>
		<link>http://fdiv.net/2007/05/20/monstrous-p5-glove-patch-for-quartz-composer/</link>
		<comments>http://fdiv.net/2007/05/20/monstrous-p5-glove-patch-for-quartz-composer/#comments</comments>
		<pubDate>Sun, 20 May 2007 17:08:55 +0000</pubDate>
		<dc:creator>smokris</dc:creator>
		
	<category>Interactive Media</category>
	<category>Quartz Composer</category>
	<category>Apple</category>
		<guid>http://fdiv.net/2007/05/20/monstrous-p5-glove-patch-for-quartz-composer/</guid>
		<description><![CDATA[	A few weeks ago I stumbled upon a P5 Glove listed on eBay for $20.  It arrived a couple of days later, and I started playing with libp5glove by Jason McMullan, Tim Kreger, and Ross Bencina.  I built a very simple Quartz Composer patch around it.
	&#160;
	
	 This release is only compatible with Tiger [...]]]></description>
			<content:encoded><![CDATA[	<p><img align="right" src="http://img.b33p.net/pub/cYRKyLGDq9ybiOyArOVokg0Mu7_96VPj/thumbnail-256" alt="Steve's gloved hand in front of the P5 Glove Quartz Composer Patch" />A few weeks ago I stumbled upon a P5 Glove listed on eBay for $20.  It arrived a couple of days later, and I started playing with <a href="http://www.simulus.org/p5glove/">libp5glove</a> by Jason McMullan, Tim Kreger, and Ross Bencina.  I built a very simple Quartz Composer patch around it.</p>
	<p>&nbsp;</p>
	<p><a id="more-92"></a></p>
	<div class="notice"><img src="/wp-content/themes/alternate0/stop.png" /> This release is only compatible with Tiger (10.4).<br />Please see <a href="http://kineme.net/">kineme.net</a> for Leopard-compatible patches.</div>
	<p><a href="http://softpixel.com/~smokris/widgets/quartzComposer/P5GlovePatch-0.1.zip"><strong>Get version 0.1 here</strong></a>.</p>
	<p>Notes:</p>
	<ul>
	<li>This depends on Tim Kreger&#8217;s OS X kernel extension &#8212; part of <a href="http://www.simulus.org/p5glove/p5OSX(u)_20061204.zip">P5osc</a>.  Install and enable the driver first.</li>
	<li>Make sure you&#8217;ve plugged the glove in before attempting to render the patch &#8212; there&#8217;s currently no way for it to detect the plugging/unplugging of the glove.</li>
	<li>Only a single glove at a time is supported.</li>
	</ul>
	<p><img src="http://img.b33p.net/pub/hVWjc2scgkIX6OeiwQm3rSLHSFSKOg50/png-indexed-64" alt="The P5 Glove Quartz Composer Patch" />
</p>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2007/05/20/monstrous-p5-glove-patch-for-quartz-composer/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Phidgets Patches for Quartz Composer</title>
		<link>http://fdiv.net/2007/05/16/phidgets-patches-for-quartz-composer/</link>
		<comments>http://fdiv.net/2007/05/16/phidgets-patches-for-quartz-composer/#comments</comments>
		<pubDate>Thu, 17 May 2007 03:18:51 +0000</pubDate>
		<dc:creator>smokris</dc:creator>
		
	<category>Interactive Media</category>
	<category>Quartz Composer</category>
	<category>Apple</category>
		<guid>http://fdiv.net/2007/05/16/phidgets-patches-for-quartz-composer/</guid>
		<description><![CDATA[	I made a pair of patches to allow Quartz Composer to directly interact with the Phidget InterfaceKit 0/0/4 (relay outputs) and 8/8/8 (digital inputs + analog inputs + digital outputs).
	&#160;
	&#160;
	
	 This release is only compatible with Tiger (10.4).Please see kineme.net for Leopard-compatible patches.
	Get version 0.1 here.
	Notes:
	
	These require the Phidget21 drivers to be installed.
	Device Labels are [...]]]></description>
			<content:encoded><![CDATA[	<p><img align="right" src="http://img.b33p.net/pub/Qbn6ehiZIyW8X6KNf1__y01JxF0Co32v/png-indexed-64" alt="Phidgets InterfaceKit 0/0/4 Patch" />I made a pair of patches to allow Quartz Composer to directly interact with the Phidget InterfaceKit <a href="http://phidgets.com/index.php?module=pncommerce&#038;func=itemview&#038;IID=12">0/0/4</a> (relay outputs) and <a href="http://phidgets.com/index.php?module=pncommerce&#038;func=itemview&#038;IID=85">8/8/8</a> (digital inputs + analog inputs + digital outputs).</p>
	<p>&nbsp;</p>
	<p>&nbsp;</p>
	<p><a id="more-90"></a></p>
	<div class="notice"><img src="/wp-content/themes/alternate0/stop.png" /> This release is only compatible with Tiger (10.4).<br />Please see <a href="http://kineme.net/">kineme.net</a> for Leopard-compatible patches.</div>
	<p><a href="http://softpixel.com/~smokris/widgets/quartzComposer/PhidgetPatches-0.1.zip"><strong>Get version 0.1 here</strong></a>.</p>
	<p><img align="right" src="http://img.b33p.net/pub/AeQJILaaGpvRjhkGUjjOWC3IM0diF9G7/png-indexed-64" alt="Phidgets InterfaceKit 8/8/8 Patch" />Notes:</p>
	<ul>
	<li>These require the <a href="http://phidgets.com/modules.php?op=modload&#038;name=Downloads&#038;file=index&#038;req=viewdownload&#038;cid=3">Phidget21</a> drivers to be installed.</li>
	<li>Device Labels are specified using POSIX <a href="http://en.wikipedia.org/wiki/Regular_expression">Regular Expressions</a>.</li>
	<li>Due to <a href="http://phidgets.com/index.php?name=PNphpBB2&#038;file=viewtopic&#038;p=6087">a bug in the Phidget21 driver</a>, I can&#8217;t manually fetch a list of interfaces, and so need to rely on notifications..  So if you change the Device Label regex, you&#8217;ll need to unplug-and-replug the Phidget for it to be recognized.</li>
	<li>Both patches are pink &#8220;Renderer&#8221; patches because they provide output from Quartz Composer &#8212; they are &#8220;sinks&#8221; in <a href="http://en.wikipedia.org/wiki/Graph_theory">graph theory</a>.  Given QC&#8217;s graph evaluation model, I haven&#8217;t yet found a way to make these patches reliably output data unless they&#8217;re (improperly) marked as &#8220;Renderer&#8221;s.</li>
	<li>Both patches should support multiple InterfaceKits of the same or differing types &#8212; as long as you specify non-overlapping Device Labels for each.  I haven&#8217;t been able to test this yet &#8212; my second InterfaceKit 8/8/8 should arrive later this week.</li>
	</ul>
	<p>Here&#8217;s a little test setup, using a distance sensor connected to one of the InterfaceKit 8/8/8&#8217;s analog inputs, which &#8212; via Quartz Composer &#8212; controls a relay output on the InterfaceKit 0/0/4.  <a href="http://re-cursive.com/">Beth</a> and <a href="http://rbtvance.com/">Robert</a> built the 0/0/4 into a box of 120VAC receptacles, into which I&#8217;ve plugged a light.</p>
	<p>Far from distance sensor = Relay off<br />
<img src="http://img.b33p.net/pub/H-4C8b67wxBHDf614zwMegW7itMg1IkO/thumbnail-448" alt="Far from distance sensor = Relay off" /></p>
	<p>Close to distance sensor = Relay on<br />
<img src="http://img.b33p.net/pub/jIkImen_mm43wKZUXXD2uTyDOvk24cCy/thumbnail-448" alt="Close to distance sensor = Relay on" /></p>
	<p>Piece of cake.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2007/05/16/phidgets-patches-for-quartz-composer/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Apple Remote Patch for Quartz Composer</title>
		<link>http://fdiv.net/2007/05/16/apple-remote-patch-for-quartz-composer/</link>
		<comments>http://fdiv.net/2007/05/16/apple-remote-patch-for-quartz-composer/#comments</comments>
		<pubDate>Wed, 16 May 2007 22:51:28 +0000</pubDate>
		<dc:creator>smokris</dc:creator>
		
	<category>Interactive Media</category>
	<category>Quartz Composer</category>
	<category>Apple</category>
		<guid>http://fdiv.net/2007/05/16/apple-remote-patch-for-quartz-composer/</guid>
		<description><![CDATA[	
	I took Martin Kahr&#8217;s Apple Remote Controller Wrapper Class and built a Quartz Composer patch around it.
	 This release is only compatible with Tiger (10.4).Leopard (10.5) includes a built-in Apple Remote patch.Please see also kineme.net for Leopard-compatible patches.
	Get version 0.1 here.
	Some notes:
	
	The events received from the Apple Remote are fairly strange to begin with..  [...]]]></description>
			<content:encoded><![CDATA[	<p><img align="right" src="http://img.b33p.net/pub/hXnu3c_5QiRUT1ZsR_SYCK05u4t1Jw81/thumbnail-256" alt="Apple Remote and Apple Remote patch" /></p>
	<p>I took Martin Kahr&#8217;s <a href="http://www.martinkahr.com/source-code/">Apple Remote Controller Wrapper Class</a> and built a Quartz Composer patch around it.</p>
	<div class="notice"><img src="/wp-content/themes/alternate0/stop.png" /> This release is only compatible with Tiger (10.4).<br />Leopard (10.5) includes a built-in Apple Remote patch.<br />Please see also <a href="http://kineme.net/">kineme.net</a> for Leopard-compatible patches.</div>
	<p><a href="http://softpixel.com/~smokris/widgets/quartzComposer/AppleRemotePatch-0.1.zip"><strong>Get version 0.1 here</strong></a>.</p>
	<p>Some notes:</p>
	<ul>
	<li>The events received from the Apple Remote are fairly strange to begin with..  You don&#8217;t simply get &#8220;key down&#8221; / &#8220;key up&#8221; events as I would have assumed, but instead get cooked events &#8212; for many of the buttons, holding the button down generates a different event than tapping it.</li>
	<li>My patch queues events, to ensure that each keypress is visible for at least one frame.</li>
	</ul>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2007/05/16/apple-remote-patch-for-quartz-composer/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Advanced custom Quartz Composer patch development documentation</title>
		<link>http://fdiv.net/2007/05/13/advanced-custom-quartz-composer-patch-development-documentation/</link>
		<comments>http://fdiv.net/2007/05/13/advanced-custom-quartz-composer-patch-development-documentation/#comments</comments>
		<pubDate>Sun, 13 May 2007 17:03:58 +0000</pubDate>
		<dc:creator>smokris</dc:creator>
		
	<category>Interactive Media</category>
	<category>Quartz Composer</category>
	<category>Apple</category>
	<category>Software Development</category>
		<guid>http://fdiv.net/2007/05/13/advanced-custom-quartz-composer-patch-development-documentation/</guid>
		<description><![CDATA[	In addition to writing the inspector panels for custom Quartz Composer patches tutorial, I spent this weekend writing up some advanced custom-patch-development documentation and posted it on QC Wiki:
	
	QCPatch Configuration
	QCPatch Events
	QCPatch Methods
	
]]></description>
			<content:encoded><![CDATA[	<p>In addition to writing the <a href="http://fdiv.net/2007/05/13/how-to-make-inspector-panels-for-custom-quartz-composer-patches/">inspector panels for custom Quartz Composer patches tutorial</a>, I spent this weekend writing up some advanced custom-patch-development documentation and posted it on QC Wiki:</p>
	<ul>
	<li><a href="http://www.quartzcompositions.com/phpBB2/mediawiki/index.php/QCPatch_Configuration">QCPatch Configuration</a></li>
	<li><a href="http://www.quartzcompositions.com/phpBB2/mediawiki/index.php/QCPatch_Events">QCPatch Events</a></li>
	<li><a href="http://www.quartzcompositions.com/phpBB2/mediawiki/index.php/QCPatch_Methods">QCPatch Methods</a></li>
	</ul>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2007/05/13/advanced-custom-quartz-composer-patch-development-documentation/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>How to make inspector panels for custom Quartz Composer patches</title>
		<link>http://fdiv.net/2007/05/13/how-to-make-inspector-panels-for-custom-quartz-composer-patches/</link>
		<comments>http://fdiv.net/2007/05/13/how-to-make-inspector-panels-for-custom-quartz-composer-patches/#comments</comments>
		<pubDate>Sun, 13 May 2007 16:52:17 +0000</pubDate>
		<dc:creator>smokris</dc:creator>
		
	<category>Interactive Media</category>
	<category>Quartz Composer</category>
	<category>Apple</category>
	<category>Software Development</category>
		<guid>http://fdiv.net/2007/05/13/how-to-make-inspector-panels-for-custom-quartz-composer-patches/</guid>
		<description><![CDATA[	
&#8230;in thirteen easy steps or your money back.
	 This release is only compatible with Tiger (10.4).Please see kineme.net for Leopard-specific informations.
	&#160;
	&#160;
	&#160;
	
	
	
	Start up Interface Builder:
	

	
	Make a new NIB, with a &#8220;Cocoa / Empty&#8221; starting point:
	

	
	Make a subclass of NSObject called QCInspector.  Then make a subclass of QCInspector with the class name of your patch, followed [...]]]></description>
			<content:encoded><![CDATA[	<p><img align="right" src="http://img.b33p.net/pub/BkjtipGDJ1aASf1CNhftutdiQ5doaxL5/png-indexed-64" width="256" height="248" /><br />
&#8230;in thirteen easy steps or your money back.</p>
	<div class="notice"><img src="/wp-content/themes/alternate0/stop.png" /> This release is only compatible with Tiger (10.4).<br />Please see <a href="http://kineme.net/Leopard">kineme.net</a> for Leopard-specific informations.</div>
	<p>&nbsp;</p>
	<p>&nbsp;</p>
	<p>&nbsp;</p>
	<p><a id="more-86"></a></p>
	<ol>
	<li>
	Start up Interface Builder:<br />
	<img src="http://img.b33p.net/pub/7a__sgwFQHfj6jpEKLBgEIIbgiy8wc_Y/png-indexed-64" width="160" height="87" />
</li>
	<li>
	Make a new NIB, with a &#8220;Cocoa / Empty&#8221; starting point:<br />
	<img src="http://img.b33p.net/pub/9Rf0DX5A8CbD8zgfD6mpaM7uXg9Sbclv/png-indexed-64" width="361" height="334" />
</li>
	<li>
	Make a subclass of <code>NSObject</code> called <code>QCInspector</code>.  Then make a subclass of <code>QCInspector</code> with the class name of your patch, followed by &#8220;UI&#8221;.  <code>P5GloveUI</code> in this case:<br />
	<img src="http://img.b33p.net/pub/5jMA2TvC_sVhtQtMsv3r7lN3hSaInoRJ/png-indexed-64" width="484" height="324" />
</li>
	<li>
	Drag a &#8220;CustomView&#8221; into the project:<br />
	<img src="http://img.b33p.net/pub/8ofhgM3fHcAhdbdtv-HSzXfJ6orN3CrD/png-indexed-64" width="344" height="273" />
</li>
	<li>
	Select &#8220;File&#8217;s Owner&#8221; and set its &#8220;Custom Class&#8221; to the UI subclass you created above (<code>P5GloveUI</code> in this case):<br />
	<img src="http://img.b33p.net/pub/UGZ-PXpWBELf_uG1L5OvzxCbAYJhw1vp/png-indexed-64" width="483" height="329" /><img src="http://img.b33p.net/pub/ubW9Avnwu9Xs3W_PAvu5BG3rIuBQpImW/png-indexed-64" width="296" height="477" />
</li>
	<li>
	Control-drag from &#8220;File&#8217;s Owner&#8221; to &#8220;View&#8221;, then &#8220;Connect&#8221; the view to the UI subclass&#8217;s &#8220;view&#8221; outlet:<br />
	<img src="http://img.b33p.net/pub/aHMVAytjLuJWQU1_r5YSlCeZjoABXRju/png-indexed-64" width="478" height="322" /><img src="http://img.b33p.net/pub/jEL9NsPQ0C1hwidyl5Pr56XcpJs3YmmA/png-indexed-64" width="295" height="477" />
</li>
	<li>
	Throw a few controls onto the View if you&#8217;d like:<br />
	<img src="http://img.b33p.net/pub/OflDuAmrCVgN2q0NzwnmQs0z0prf35yL/png-indexed-64" width="262" height="280" />
</li>
	<li>
	Save the NIB in your patch&#8217;s English.lproj folder, and add it to the project:<br />
	<img src="http://img.b33p.net/pub/zb8W0EwrFc9g0Q1mXWZqKF5S80oZJ369/png-indexed-64" width="547" height="474" /><img src="http://img.b33p.net/pub/JdtORbaFVy-03G-_bUvdcJZKEcCLpTaH/png-indexed-64" width="480" height="322" />
</li>
	<li>
	Add the QCInspector interface to your patch&#8217;s <code>qcplugin.h</code>:</p>
	<pre class="code">
@interface QCInspector : NSObject
{
	NSView *view;
	QCPatch *_patch;
	void *_unused2[4];
}
+ (id)viewNibName;
+ (id)viewTitle;
- (id)init;
- (void)didLoadNib;
- (id)patch;
- (void)setupViewForPatch:(id)fp8;
- (void)resetView;
- (id)view;
@end
</pre>
	</li>
	<li>
	Add <code>inspectorClassWithIdentifier</code> to your patch&#8217;s interface:</p>
	<p>P5Glove.h:</p>
	<pre class="code">
@interface P5Glove : QCPatch
	
...
	
+ (Class)inspectorClassWithIdentifier:(id)fp8;
@end
</pre>
	</li>
	<li>
	Implement <code>inspectorClassWithIdentifier</code>:</p>
	<p>P5Glove.m:</p>
	<pre class="code">
@implementation P5Glove : QCPatch
	
...
	
+ (Class)inspectorClassWithIdentifier:(id)fp8
{
	return [P5GloveUI class];
}
@end
</pre>
	</li>
	<li>
	Add the <code>P5GloveUI</code> class interface and implementation to your patch&#8217;s project:</p>
	<p>P5GloveUI.h:</p>
	<pre class="code">
@interface P5GloveUI : QCInspector
+ (id)viewNibName;	// IMP=0x97b89415
@end
</pre>
	<p>P5GloveUI.m:</p>
	<pre class="code">
@implementation P5GloveUI : QCInspector
+ (id)viewNibName
{
	return @\"P5GloveUI\";
}
</pre>
	</li>
	<li>
	Build and launch Quartz Composer.  You&#8217;ve got an inspector:<br />
	<img src="http://img.b33p.net/pub/PTW6DeGmY-s8U79pDrJpE4Em2obYuzo1/png-indexed-64" width="417" height="514" />
</li>
	<li>
	Enjoy.
</li>
	</ol>
]]></content:encoded>
			<wfw:commentRSS>http://fdiv.net/2007/05/13/how-to-make-inspector-panels-for-custom-quartz-composer-patches/feed/</wfw:commentRSS>
	</item>
	</channel>
</rss>
