<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet href="../site_translation.xslt" type="text/xsl"?>
<page name="source">
	<meta name="keywords" content="Macintosh, Mac OS X, Nathan Day, Software, Cocoa, Source Code, Sydney, Australia, Popup Dock, Cocoa Programming, AppleScripts"/>
	<page-list>
		<page name="news">News</page>
		<page name="popup_dock">Popup Dock</page>
		<page name="desktop_pictures">Desktop Pictures</page>
		<page name="source">Source Code</page>
		<page name="about_me">About Me</page>
	</page-list>
	<content>
		<item>
			<title>About</title>
			<sub-item>
				<p>Some of the source code I've written is available for other developers to use, there are really no restrictions on use of this code other than leave my name (Nathan Day) within the source code, especially if you make your source code public with my code in it. Though the code has been tested and is in use, you use it at your own risk. Some of the features that have been put in are for future use and so have not been as rigorously tested as actually used features. If you find any bugs or have any problems with any of the code then feel free to contact me <a href="mailto:nathan_day@mac.com">nathan_day@mac.com</a>.</p>

				<p>Each download is a Project Builder or Xcode project that was used to develop and do some testing, this provides you with some examples of how to use the code.</p>

				<p>Projects will often make use of common classes, categories or protocols, so if you download more than one project you could find yourself with duplicate files, in such cases I will try to make sure that the most recent version files will work in all projects.</p>
			</sub-item>
		</item>

		<!--
				NDAlias
		-->
		<item name="ndalias">
			<title>NDAlias</title>
			<sub-item>	
				<p>This is a simple class used to give access to alias records within Cocoa.</p>
				<p type="note" name="Update">There is now a category of <tt>NDAlias</tt> for reading and writing alias files, the file for the category as well as the <tt>NDResourceFork</tt> files do not need to be included within your project if you don't need this extra functionality.</p>
				<p type="note" name="Update"><tt>NDAlias</tt> now works with garbage collection and 64bit, thanks to Sean McBride.</p>
			</sub-item>
			<links>
				<link type="source_project" name="NDAlias.dmg"/>
				<link type="documentation" name="NDAlias" new-window="yes"/>
				<link type="github" name="ndalias"/>
			</links>
		</item>

		<!--
				NDAppleScriptObject
		-->
		<item name="ndapplescriptobject">
			<title>NDAppleScriptObject</title>
			<sub-item>
				<p><tt>NDAppleScriptObject</tt> allows the Cocoa programmer to write programs that can execute <i>AppleScript</i>s supplied by their users, instances can be created from <tt>NSString</tt>s, which are then compiled, compiled <i>AppleScript</i> files or from <tt>NSData</tt> instances containing a compiled <i>AppleScript</i>. The programmer can then execute the <i>AppleScript</i>s calling its run handler or by sending any AppleEvents to it, there is a convenience method to execute a scripts open handler which takes an <tt>NSArray</tt> of paths (<tt>NSString</tt>s) or <tt>NSURL</tt>s and converts it into an alias list before passing it to the open handler. <tt>NDAppleScriptObject</tt> also has support for the execution of scripts within separate threads.</p>
				<p type="note" name="Update"><tt>NDAppleScriptObject</tt> now lets you call <i>AppleScript</i> subroutines, both ordered parameters and labeled. A lot of the <tt>NSAppleEventDescriptor</tt> conversion stuff can now bee used with <tt>NSAppleScript</tt> and there is also a better implementation of the use of <i>AppleScript</i> components.</p>
				<p type="note" name="Depreciated"><tt>NDAppleScriptObject</tt> has been replaced by <a href="#ndscript"><tt>NDScript</tt></a>.</p>
			</sub-item>
			<links>
				<link type="source_project" name="NDAppleScriptObject.dmg"/>
				<link type="documentation" name="NDAppleScriptObject" new-window="yes"/>
			</links>
		</item>
		
		<!--
				NDFiber
		-->
		<item name="ndfiber">
			<title>NDFiber</title>
			<sub-item>
				<p><tt>NDFiber</tt> is an implementation of <i>fibers</i> in Objective-C. See <a href="http://en.wikipedia.org/wiki/Fiber_(computer_science)"><i>Fiber</i> (computer science)</a> for more information about fibers. This is just an initial release and only support yielding to a specified fiber, i.e. no queue, but you can implement this yourself.</p>
				<p>The main motivation for <tt>NDFiber</tt> is for use within the main thread since there are a few situations where things need to occur in the main thread making use of multiple threads difficult, for example <i>AppleScript</i> need to run in the main thread but doing so prevents any user interacting.</p>
			</sub-item>
			<links>
				<link type="source_project" name="NDFiber.dmg"/>
				<link type="documentation" name="NDFiber" new-window="yes"/>
				<link type="github" name="ndfiber"/>
			</links>
		</item>

		<!--
				NDLaunchServices
		-->
		<item name="ndlaunchservices">
			<title>NDLaunchServices</title>
			<sub-item>
				<p>This is a wrapper class for Apple's LaunchServices, it provides information that <tt>NSWorkspace</tt> doesn't like whether an application will open a particular file. It also has a better method for opening more than one file, if you try to use a loop with <tt>NSWorkspace</tt> to open more than one file and they are all to be opened by the same application that is not running yet then only one will be opened, LaunchServices has a way to open an <tt>NSArray</tt> of <tt>NSURL</tt>s.</p>
				<p>You can of cause access LaunchServices directly, but it's nice to have it all wrapped in a class, and it makes it easier for people who do not want to get into carbon.</p>
			</sub-item>
			<links>
				<link type="source_project" name="NDLaunchServices.dmg"/>
				<link type="documentation" name="NDLaunchServices" new-window="yes"/>
			</links>
		</item>

		<!--
				NDHotKeyEvent
		-->
		<item name="ndhotkeyevent">
			<title>NDHotKeyEvent</title>
			<sub-item>
				<p>This is a class for providing access to carbon hot keys from Cocoa, as well as acting as instances that represent particular hot key combinations, the class object provides some methods for managing all of the hot keys created with <tt>NDHotKeyEvent</tt>.</p>
				<p><tt>NDHotKeyEvent</tt> can send messages from both key down events and key up events and there is also a informal protocol to notify the target class when the <tt>NDHotKeyEvent</tt> instance is going to change target.</p>
<p>The <tt>NDHotKeyEvent</tt> project also comes with a class called <tt>NDHotKeyControl</tt> which can be used for obtaining hot key combinations from the user.</p>
			</sub-item>
			<links>
				<link type="source_project" name="NDHotKeyEvent.dmg"/>
				<link type="documentation" name="NDHotKeyEvent" new-window="yes"/>
			</links>
		</item>

		<!--
				NDProcess
		-->
		<item name="ndprocess">
			<title>NDProcess</title>
			<sub-item><p>Wrapper class for Apples Process Manager Functions.</p></sub-item>
			<links>
				<link type="source_project" name="NDProcess.dmg"/>
				<link type="documentation" name="NDProcess" new-window="yes"/>
			</links>
		</item>

		<!--
				NDResourceFork
		-->
		<item name="ndresourcefork">
			<title>NDResourceFork</title>
			<sub-item>
				<p>Class for simple resource fork manipulation. Has been available as part of NDAppleScriptObject but I thought I would make it separately available since <tt>NDAppleScriptObject</tt> will become obsolete with the release of jaguar. Has been tested more thoroughly, found some bugs to due with creating new resource forks which have been fixed, also added methods for reading and writing strings.</p>
			</sub-item>
			<links>
				<link type="source_project" name="NDResourceFork.dmg"/>
				<link type="documentation" name="NDResourceFork" new-window="yes"/>
			</links>
		</item>

		<!--
				NDRunLoopMessenger
		-->
		<item name="ndrunloopmessenger">
			<title>NDRunLoopMessenger</title>
			<sub-item>
				<p>This is a class for sending messages in a <tt>NSRunLoop</tt> from another thread, it doesn't have the overhead of Distributed Objects and is easier to use but can only handle messaging between threads in the same process/task. An instance is made within the <tt>NSRunLoop</tt> you want to message into and then other threads can send messages by use of methods like <tt>-target:performSelector:</tt> alternatively <tt>NDRunLoopMessenger</tt> can return a proxy which you can send messages to.</p>
			</sub-item>
			<links>
				<link type="source_project" name="NDRunLoopMessenger.dmg"/>
				<link type="documentation" name="NDRunLoopMessenger" new-window="yes"/>
			</links>
		</item>

		<!--
				NDScript
		-->
		<item name="ndscript">
			<title>NDScript</title>
			<sub-item>
				<p>NDScript is a replacement for <tt>NDAppleScriptObject</tt>, it covers everything that <tt>NDAppleScriptObject</tt> does but with support for much more advanced <i>AppleScript</i> concepts like inheritance and handling of AppleEvents. It is still in development but covers everything that <tt>NDAppleScriptObject</tt> does and so I have been recommending it over <tt>NDAppleScriptObject</tt>. The documentation for it is still incomplete (you can extract it using HeaderDoc) but most of it should be understandable from the header files and by looking at the example program that comes with it. <tt>NDScript</tt> should probable be treated as beta but some parts of it are well tested, especially the parts taken from <tt>NDAppleScriptObject</tt>. I am happy to answer any questions about it.</p>
			</sub-item>
			<links>
				<link type="source_project" name="NDScript.dmg"/>
			</links>
		</item>
	</content>
</page>