<?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>Cappuccino Blog</title>
	<atom:link href="http://cappuccino.org/discuss/feed/" rel="self" type="application/rss+xml" />
	<link>http://cappuccino.org/discuss</link>
	<description>Home of Cappuccino and Objective-J</description>
	<lastBuildDate>Thu, 19 Aug 2010 01:56:50 +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>GitHub Issues Update</title>
		<link>http://cappuccino.org/discuss/2010/08/18/github-issues-update/</link>
		<comments>http://cappuccino.org/discuss/2010/08/18/github-issues-update/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 17:33:56 +0000</pubDate>
		<dc:creator>me1000</dc:creator>
				<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=889</guid>
		<description><![CDATA[Three months ago we were thrilled to announce the introduction of our front end to GitHub Issues. Since then we have worked on specific bugs in the applications and added small features here and there. Today we are excited to announce the first major revision to our GitHub Issues! Below is a list of all [...]]]></description>
			<content:encoded><![CDATA[<p>Three months ago we were thrilled to announce the introduction of our front end to <a href="http://cappuccino.org/discuss/2010/05/13/github-issues-cappuccino-app-desktop-and-web/">GitHub Issues</a>. Since then we have worked on specific bugs in the applications and added small features here and there.</p>
<p>Today we are excited to announce the first major revision to our GitHub Issues! Below is a list of all the new features <a title="Nick Small" href="http://github.com/nciagra/" target="_blank">Nick Small</a> and <a title="Randy Luecke" href="http://github.com/me1000" target="_blank">Randy Luecke</a> have worked hard to introduce.</p>
<ul>
<li>Editable Issues</li>
<li>Swap orientation button in the browser version</li>
<li>Additional keyboard shortcuts</li>
<li>Additional columns with the ability to show and hide them by right clicking the table header</li>
<li>Additional search filters</li>
<li>Additional improvements for keyboard</li>
<li>Support for previewing issues before you submit them</li>
<li>Bulk operations on multiple issues at once</li>
<li>Notifications for unsaved comments and issues</li>
<li>OAuth</li>
<li>Full support for tagging</li>
</ul>
<p>&#8230;and of course various bug fixes!</p>
<p>You can view the application by visiting <a href="http://githubissues.heroku.com/" target="_blank">githubissues.heroku.com</a>, or you can download the <a href="http://download.cappuccino.org/Issues-2_1.zip">updated desktop version</a> (read more about how we make this work with <a href="http://cappuccino.org/discuss/2010/05/13/nativehost-run-your-cappuccino-applications-on-the-desktop/">NativeHost</a>).</p>
<p>In addition to this new version of the application Randy has worked hard on a browser extension to automatically convert GitHub URLs to use our Cappuccino app.</p>
<p>You can customize it to do any of the following:</p>
<ul>
<li>Automatically redirect you from GitHub.com issues to our application</li>
<li>Prompt you each time you enter an issues page to redirect you to our application</li>
<li>Click the button in the toolbar to redirect you to our application.</li>
</ul>
<p>If you are looking at a GitHub repository and click the button in the toolbar you will be redirected to that repository&#8217;s issues. If you&#8217;re not viewing a repository and click the button in the toolbar you will be redirected to the Issues application where you can select a repository and issue from there.</p>
<p><a href="http://github.com/downloads/Me1000/PrettyIssues/PrettyIssues.safariextz.zip"><img class="aligncenter size-full wp-image-905" title="GitHub Issues Safari Extension" src="http://cappuccino.org/discuss/wp-content/uploads/2010/08/screen.png" alt="GitHub Issues Safari Extension" width="572" height="55" /></a></p>
<p>This plugin has been open source and is available on <a href="http://github.com/Me1000/PrettyIssues">GitHub</a>, but if you just want to install it you can download it <a href="http://github.com/downloads/Me1000/PrettyIssues/PrettyIssues-1.1.safariextz.zip">here</a>.</p>
<p>We hope you are as excited about this revision as we are, and we hope this update will make our application even more useful to you!</p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/08/18/github-issues-update/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Community Highlights: Adventures in localizing a Cappuccino Application</title>
		<link>http://cappuccino.org/discuss/2010/07/29/community-highlights-adventures-in-localizing-a-cappuccino-application/</link>
		<comments>http://cappuccino.org/discuss/2010/07/29/community-highlights-adventures-in-localizing-a-cappuccino-application/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 04:06:26 +0000</pubDate>
		<dc:creator>ross</dc:creator>
				<category><![CDATA[Community Highlights]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=885</guid>
		<description><![CDATA[Community Highlights: Using Cappuccino to build the MemoryMiner Web Viewer Back with a second post is John Fox, creator of MemoryMiner, a digital storytelling application for Mac OS X. John writes about the steps he took to localize his Cappuccino application, a web viewer for MemoryMiner. The post comes complete with sample code, and its [...]]]></description>
			<content:encoded><![CDATA[<p>Community Highlights: Using Cappuccino to build the MemoryMiner Web Viewer</p>
<p>Back with a second post is John Fox, creator of MemoryMiner, a digital storytelling application for Mac OS X. John <a href="http://www.memoryminer.com/blog/?p=134">writes about the steps he took to localize his Cappuccino application,</a> a web viewer for MemoryMiner. </p>
<p>The <a href="http://www.memoryminer.com/blog/?p=134">post</a> comes complete with sample code, and its worth a read if you&#8217;re interested in localizing your own applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/07/29/community-highlights-adventures-in-localizing-a-cappuccino-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GitHub Issues Cappuccino App: Desktop and Web</title>
		<link>http://cappuccino.org/discuss/2010/05/13/github-issues-cappuccino-app-desktop-and-web/</link>
		<comments>http://cappuccino.org/discuss/2010/05/13/github-issues-cappuccino-app-desktop-and-web/#comments</comments>
		<pubDate>Thu, 13 May 2010 20:11:01 +0000</pubDate>
		<dc:creator>tolmasky</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=803</guid>
		<description><![CDATA[To showcase our new NativeHost technology, we&#8217;re proud to announce the brand new GitHub Issues App, written entirely in Cappuccino and available for both desktop and web: The online version is running on Heroku&#8217;s Node.js beta at http://githubissues.heroku.com. If you&#8217;re already using GitHub&#8217;s Issue tracking feature, then this app will work for you right out [...]]]></description>
			<content:encoded><![CDATA[<p>To showcase our new <a href = "http://cappuccino.org/discuss/2010/05/13/nativehost-run-your-cappuccino-applications-on-the-desktop">NativeHost</a> technology, we&#8217;re proud to announce the brand new GitHub Issues App, written entirely in Cappuccino and available for both desktop and web:</p>
<p><a href="http://githubissues.heroku.com/"><img src="http://cappuccino.org/discuss/wp-content/uploads/2010/05/tryitonline.png" alt="" title="Try it online" width="300" height="250" class="aligncenter size-full wp-image-850" align = "left"/></a></p>
<p><a href="http://download.cappuccino.org/Issues-1.0.zip"><img src="http://cappuccino.org/discuss/wp-content/uploads/2010/05/downloadit.png" alt="" title="Download it" width="300" height="250" class="aligncenter size-full wp-image-851" /></a></p>
<p>The online version is running on Heroku&#8217;s Node.js beta at <a href ="http://githubissues.heroku.com">http://githubissues.heroku.com</a>. If you&#8217;re already using GitHub&#8217;s Issue tracking feature, then this app will work for you right out of the box. Simply type in your repo&#8217;s identifier (username/reponame), and we&#8217;ll fetch all the issues for you. You can also log in with your GitHub account to access private repositories.</p>
<h3>Open Source</h3>
<p>The GitHub Issues app was put together by some truly excellent members of the Cappuccino community, and we&#8217;re open sourcing it so that it can serve as an example of how to build and architect a full blown application with Cappuccino and <a href = "http://280atlas.com">Atlas</a>.<br />
<center><br />
<a href="http://cappuccino.org/discuss/wp-content/uploads/2010/05/atlas-cat.png"><img src="http://cappuccino.org/discuss/wp-content/uploads/2010/05/atlas-cat.png" alt="" title="GitHub Issues App in Atlas" width="600" height="413" class="aligncenter size-full wp-image-806" /></a></center><br />
If you don&#8217;t have Atlas you can still build the app using the <a href = "http://cappuccino.org/discuss/2010/04/28/introducing-jake-a-build-tool-for-javascript/">Jakefile</a> in the repo, but you will need Atlas to edit the visual interface files. You can find the source code at <a href = "http://github.com/280north/issues">http://github.com/280north/issues</a>. So don&#8217;t just use it, clone it,  patch it, and of course, <a href = "http://githubissues.heroku.com/#280north/issues">file bugs</a>!</p>
<h3>Cappuccino, NativeHost, Heroku, Node, Oh My!</h3>
<p>This app uses and integrates a tremendous amount of new and exciting technology. If you take a look at the source you should find examples on how to do everything from setting up a server to talk to Cappuccino, to optionally deploying your app to the desktop, to talking to other JavaScript libraries:</p>
<ul>
<li>We use our brand new <a href = "http://cappuccino.org/discuss/2010/05/13/nativehost-run-your-cappuccino-applications-on-the-desktop">NativeHost</a> technology which allows the app to run both on web and desktop.</li>
<li>We make extensive use of the new tableview component, added in version 0.8</li>
<li>We integrate with <a href = "http://github.github.com/github-flavored-markdown/scripts/showdown.js">markdown</a> and <a href = "http://github.com/boucher/mustache.js">mustache.js</a> and show you how to intermingle Cappuccino chrome with HTML pages.</li>
<li>In web mode we use <a href = "http://nodejs.org/">node.js</a> running on <a href = "http://blog.heroku.com/archives/2010/4/28/node_js_support_experimental/">Heroku&#8217;s new Node Beta</a>.</li>
<li>We of course use the awesome <a href = "http://develop.github.com/p/issues.html">JSON GitHub Issues API</a>.</li>
<li>We lay out almost all our UI code visually in <a href = "http://280atlas.com">Atlas</a>.</li>
</ul>
<p>If you&#8217;d like to help improve the app, or just have questions about the code, make sure to get in touch with us and the rest of the Cappuccino community <a href="http://cappuccino.org/discuss/list.php">in the IRC channel</a> or <a href="http://cappuccino.org/discuss/list.php">on the mailing list</a></p>
<h3>Thanks!</h3>
<p>I wanted to thank everyone who helped bring this app together, including the fantastic guys at the <a href = "http://github.com">GitHub</a> and <a href = "http://heroku.com/">Heroku</a>, and of course <a href = "http://github.com/me1000/">Randy Luecke</a> and <a href ="http://github.com/luddep">Ludwig Pettersson</a> who actually did the hard work of putting this thing together.</p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/05/13/github-issues-cappuccino-app-desktop-and-web/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>NativeHost: Run your Cappuccino applications on the desktop</title>
		<link>http://cappuccino.org/discuss/2010/05/13/nativehost-run-your-cappuccino-applications-on-the-desktop/</link>
		<comments>http://cappuccino.org/discuss/2010/05/13/nativehost-run-your-cappuccino-applications-on-the-desktop/#comments</comments>
		<pubDate>Thu, 13 May 2010 20:10:55 +0000</pubDate>
		<dc:creator>tlrobinson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=759</guid>
		<description><![CDATA[Today we&#8217;re adding an exciting new open source component to the repertoire of Cappuccino tools. If you&#8217;ve checked out out any of the Atlas betas, you&#8217;re probably aware that they&#8217;re distributed as a desktop application. What you may not know is that despite this, Atlas is still itself a full fledged Cappuccino application (written in [...]]]></description>
			<content:encoded><![CDATA[<p>Today we&#8217;re adding an exciting <a href="http://github.com/280north/cappuccino/tree/master/Tools/NativeHost">new open source component</a> to the repertoire of Cappuccino tools. If you&#8217;ve checked out out any of the <a href="http://280atlas.com/">Atlas</a> betas, you&#8217;re probably aware that they&#8217;re distributed as a desktop application. What you may not know is that despite this, Atlas is still itself a full fledged Cappuccino application (written in Atlas no less). Atlas has had the ability to create both web and desktop applications from the start, requiring nothing but the click of a button:<br />
<center><a href="http://cappuccino.org/discuss/wp-content/uploads/2010/05/atlas-desktop-native.png"><img src="http://cappuccino.org/discuss/wp-content/uploads/2010/05/atlas-desktop-native.png" alt="" title="Choose Desktop or Browser" width="391" height="91" class="aligncenter size-full wp-image-793" /></a></center><br />
The way we&#8217;ve accomplished this is with a technology we call <a href="http://github.com/280north/cappuccino/tree/master/Tools/NativeHost">NativeHost</a>. NativeHost allows you to take existing Cappuccino applications and with no additional work target them for the desktop. It accomplishes this with an incredibly small and lightweight wrapper around the WebKit browser engine. In this respect, it is similar to a number of existing technologies, including <a href="http://www.adobe.com/products/air/">Adobe AIR</a> and <a href="http://www.appcelerator.com/">Titanium</a>, but that&#8217;s where the similarities end.</p>
<h3>Why deploy to the desktop?</h3>
<p>We believe that applications are moving to the web, but as things stand today, there are still some valid use cases for choosing to distribute a downloadable executable. By allowing you to seamlessly deploy to both desktop and web, we hope to remove one of the blockers keeping people from choosing HTML5 as their next target environment. There are a number of scenarios in which you might decide that the desktop currently fits your needs better:</p>
<ul>
<li>When your application needs access to the local filesystem or other native APIs not available to web applications running in browsers.</li>
<li>When you need enhanced offline access.</li>
<li>When your target users work in an environment that does not trust the cloud yet (providing a downloadable and not using any web buzz words goes a long way here).</li>
<li>When you need integration with OS features like the taskbar, dock, application switcher, etc.</li>
</ul>
<p>This is actually precisely why we created this technology. We were originally planning on releasing Atlas as a cloud-based IDE, but soon discovered our users were much more comfortable currently running it as a desktop app. With NativeHost, we can fulfill these needs today, but switch to the web in the future. Whatever your reasons are, NativeHost aims to provide the best solution for Cappuccino applications.</p>
<h3>Why NativeHost?</h3>
<p>Before creating NativeHost, we evaluated a number of existing solutions but found that they all suffer from either or both of two major drawbacks:</p>
<ul>
<li>Many tools require modification to the existing web app to work on the desktop, or worse, require you to target this environment from the beginning. They aren&#8217;t really about making web apps works well on the desktop, but rather for creating desktop apps using web technologies. We see this as the worst of both worlds: creating an application that can&#8217;t currently take advantage of all the native platform&#8217;s advantages, which simultaneously will require a lot of extra work to deploy on the web.</li>
<li>The flip side to this is tools that provide only a very thin layer around your web app and thus hardly feel native at all.</li>
</ul>
<p>Again, we feel that the ultimate distribution platform is the web, and that the desktop is almost a transitional necessity today. So with that in mind, we certainly didn&#8217;t want to create a tool that required adding a bunch of new API that won&#8217;t work online. However, we also wanted an experience that truly felt good on the desktop. NativeHost is able to accomplish this because it is so tightly integrated with Cappuccino. It provides a seamless experience to both the application developer and end user. The goal is to have any existing Cappuccino app <em>just work</em> on the desktop without requiring any new code. This is manifested in an increasing number of integration points:</p>
<ul>
<li>The Cappuccino &#8220;main menu&#8221; automatically populates the native Mac OS X menu bar. On other platforms it will do what is expected by users on that platform. For example, in a Windows version of NativeHost the menu would be attached the top of individual windows.</li>
<li>Cappuccino windows (CPWindow) automatically become &#8220;native&#8221; windows. In the browser Cappuccino windows are typically drawn inside the main browser window. In native host they become real operating system level windows that can be minimized, etc.</li>
<li>Secure access to the native file system without new API: use existing methods like XMLHttpRequest.</a>
<li>Cappuccino&#8217;s document architecture is integrated with the operating system.</li>
<li>Operating system open/save panels are used.</li>
<li>Just like any native application your application can register itself to open specific file types. When the operating system requests that your application open a document that information is passed on to Cappuccino for your application to handle.</li>
</li>
</ul>
<h3>Getting up and running with NativeHost</h3>
<p>The easiest way to try out NativeHost is with <a href="http://280atlas.com/">Atlas</a>. Open or create an application, select &#8220;Native Desktop&#8221; from the &#8220;Platform&#8221; menu, then press the &#8220;Build and Run&#8221; button. This will build and launch the current application using NativeHost.</p>
<p>We&#8217;ve also recently added support for NativeHost to the Cappuccino build tools. If your &#8220;Jakefile&#8221; does not contain tasks for &#8220;desktop&#8221; or &#8220;run-desktop&#8221; you can copy them out of a freshly generated project&#8217;s Jakefile (changing the application name where necessary).</p>
<p>Once you have an application with an updated Jakefile simply execute &#8220;jake run-desktop&#8221; within the project&#8217;s directory to build and launch the application using NativeHost.</p>
<p>NativeHost has some additional features, like the ability to start a webserver in the background to handle tasks using APIs not exposed to WebKit. We&#8217;ll talk more about these features in a future post.</p>
<p>Currently NativeHost supports Mac OS X, but we&#8217;re working on other platforms. If you&#8217;re experienced with developing native applications on other platforms and interested in helping out, feel free to get in touch.</p>
<p>If you have any problems using NativeHost, the Cappuccino community will happily help you out. Join us <a href="http://cappuccino.org/discuss/list.php">in the IRC channel</a>, <a href="http://cappuccino.org/discuss/list.php">on the mailing list</a>, or <a href="http://github.com/280north/cappuccino/issues">file a bug</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/05/13/nativehost-run-your-cappuccino-applications-on-the-desktop/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Introducing the Atlas Plugin API and MapKit</title>
		<link>http://cappuccino.org/discuss/2010/05/05/introducing-the-atlas-plugin-api-and-mapkit/</link>
		<comments>http://cappuccino.org/discuss/2010/05/05/introducing-the-atlas-plugin-api-and-mapkit/#comments</comments>
		<pubDate>Wed, 05 May 2010 00:46:04 +0000</pubDate>
		<dc:creator>tolmasky</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=744</guid>
		<description><![CDATA[We just shipped another update to the Atlas Beta today, and one of the coolest new features is the addition of a plugin API to allow you to create custom controls that you can use as easily as the ones you get by default. To kick this off we&#8217;ve provided a sample plugin for the [...]]]></description>
			<content:encoded><![CDATA[<p>We just shipped another update to the <a href ="https://atlas-beta.heroku.com/forums/downloads/topics/atlas-beta-13">Atlas Beta today</a>, and one of the coolest new features is the addition of a plugin API to allow you to create custom controls that you can use as easily as the ones you get by default. To kick this off we&#8217;ve provided a sample plugin for the Google Maps API. You can take a look at what its capable of here:</p>
<p><object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/R80R5mp9coE&#038;hl=en_US&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/R80R5mp9coE&#038;hl=en_US&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object></p>
<p>We&#8217;ve also put together a tutorial (see below) on how we built this plugin so that you can learn to do the same with your code. The MapKit framework and plugin are of course completely open source, so feel free to <a href = "http://github.com/280north/mapkit/">take a look</a>!</p>
<p><object width="600" height="375"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11486446&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=11486446&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="375"></embed></object>
<p><a href="http://vimeo.com/11486446">Atlas Plugin API Tutorial with MapKit</a> from <a href="http://vimeo.com/user2658887">280 North, Inc.</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/05/05/introducing-the-atlas-plugin-api-and-mapkit/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Introducing Jake: A Build Tool for JavaScript</title>
		<link>http://cappuccino.org/discuss/2010/04/28/introducing-jake-a-build-tool-for-javascript/</link>
		<comments>http://cappuccino.org/discuss/2010/04/28/introducing-jake-a-build-tool-for-javascript/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 07:42:55 +0000</pubDate>
		<dc:creator>tolmasky</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=660</guid>
		<description><![CDATA[Now that we&#8217;ve shipped Cappuccino 0.8, I wanted to take some time to describe in more detail what might be one of the most exciting new features our users may not even notice: Jake. Jake is a new build tool built entirely in JavaScript that runs on top of the CommonJS standard. As its name [...]]]></description>
			<content:encoded><![CDATA[<link rel="stylesheet" type="text/css" media="screen" href="/includes/tutorial.css"/>
<p>Now that we&#8217;ve <a href="http://cappuccino.org/discuss/2010/04/07/cappuccino-0-8/">shipped Cappuccino 0.8</a>, I wanted to take some time to describe in more detail what might be one of the most exciting new features our users may not even notice: <a href = "http://github.com/280north/jake">Jake</a>. Jake is a new build tool built entirely in JavaScript that runs on top of the CommonJS standard. As its name suggests, it is based on the existing and already popular Rake tool and benefits from the same simplicity.</p>
<h3>Since when does JavaScript need to be built?</h3>
<p>Well, JavaScript doesn&#8217;t <em>need</em> to be built, but if you look at almost every major library, you&#8217;ll notice all of them ship in some sort of built or &#8220;compiled&#8221; state. That&#8217;s because despite being an interpreted language, there is still plenty JavaScript can gain in the form of optimizations from a build phase. You can concatenate all your code into one file, minimize it, remove dead code, sprite the images associated with the code, and do all sorts of other interesting things that at the end of the day result in a faster web site for your users.</p>
<p>So the concept of building JavaScript is not new in any way. Jake is just a new tool that can help you do all this in a language that&#8217;s probably already familiar to you. But before I get into how to use Jake, I&#8217;d like to explain the need for such a tool when clearly people are already doing this with non-JavaScript alternatives.</p>
<h3>A brief history of build tools used by Cappuccino</h3>
<p>Jake is actually the third build tool we&#8217;ve used for Cappuccino since we started the project. Like many current JavaScript projects, Cappuccino used to use tools borrowed from other environments.</p>
<p>When we originally shipped Cappuccino, we used a combination of <a href = "http://ant.apache.org/">Apache Ant</a> and some custom built JavaScript tools. Our goal has always been to minimize the friction a user experienced when trying to build Cappuccino from scratch, and thus at the time Ant seemed like a good solution since it is cross platform and many people already have it installed with their Java distributions. Ant also let us call into JavaScript with a little bit of legwork. However, the problems with using Ant soon outweighed the benefits. Ant may be a great fit for Java projects since it was designed for that purpose and many of the build commands are tailored specifically for Java, but using it to build non-Java projects can sometimes be an incredibly frustrating ordeal. For starters, Ant uses XML configuration files, which means that performing simple logic can sometimes be quite a daunting task. Java programmers probably don&#8217;t notice this because Ant is smart enough to &#8220;understand&#8221; Java dependencies out of the box, but it had no idea how to deal with our JS files in anything but the most rudimentary way. The solutions usually involved using custom-built extensions which somewhat defeated the purpose of using Ant for its existing install base and portability.</p>
<p>As we tried to do increasingly complex operations during our build process, it became evident that Ant was no longer going to cut it, and so I set out to search for a new tool to replace it. I looked at a number of different options (even briefly trying make &#8212; bad idea), but one tool really stood out for me: Rake.</p>
<p>I think <a href = "http://rake.rubyforge.org/">Rake</a> is quite possibly the first build tool that I haven&#8217;t ended up hating. In fact, I really like Rake. One of the best parts about Rake is its simplicity: it chose to use Ruby itself instead of defining a configuration file format. That means that there&#8217;s really no &#8220;build&#8221; mindset you have to get into, and at the end of the day you&#8217;re just writing a really simple program. If at any point you need to do something out of the ordinary in your build process, you can always just code it. There&#8217;s no need to invent a new configuration property or hassle with trying to find some obscure &#8220;right&#8221; way to do things: you can just code it. Strangely enough, Rake also has the most intuitive built-in commands I have ever used. Creating dependencies is a breeze, and it is smart enough to handle things like cleaning a project very elegantly for you. If you&#8217;ve never tried Rake, you really should.</p>
<h3>So why not stick with Rake?</h3>
<p>Moving to Rake was a really great decision at the time, but Rake unfortunately had one problem that eventually got to us: it had to be written in Ruby. This is not a problem per se of course, and the truth is that Ruby is one of the reasons Rake shines. The DSL Ruby allows in Rake makes it truly a joy to use, but the unfortunate fact is that many our users simply don&#8217;t know Ruby, so interacting with the build system could prove difficult to them. This resulted in a number of problems:</p>
<ol>
<li>Users didn&#8217;t like having to install Ruby gems to build Cappuccino from scratch.</li>
<li>On top of the occasional Rhino bug, we now had to deal with Ruby incompatibilities across distributions and versions which were very difficult for us to deal with effectively as this was not our native environment.</li>
<li>Users were afraid to submit patches to the build scripts because they weren&#8217;t as knowledgable in Ruby.</li>
<li>Users were afraid to innovate in the build space for the same reason.</li>
<li>Users were less likely to use our optimization tools, because again, it required using the Ruby build process, installing gems, etc.</li>
<li>Since our product and our build tools were written in different languages, we were incapable of easily sharing code between the two. We had to jump through a lot of hoops to call JavaScript from Ruby (usually through Rhino), which resulted in pretty slow builds.</li>
</ol>
<p>So all in all, while Rake provided a pretty good &#8220;out of the box&#8221; experience for our users and contributors, it meant they were really stuck when something went wrong, and that they were not as capable of fixing or improving it. This is a pretty general problem in the JavaScript space I feel. You&#8217;ll notice that a lot of the work of &#8220;optimizing&#8221; and deploying JavaScript usually takes place in a different language. For example, most JavaScript compressors are written in Java. This is really unfortunate, because it creates an artificial rift between JavaScript programmers and the people trying to make their JavaScript really fast. One of our goals for Cappuccino 0.8 was to remedy this because we felt that there was still a tremendous amount left to be done in the JavaScript and web application optimizations, and we wanted all the help we could get. </p>
<h3>Jake</h3>
<p>Luckily for us, things had really changed since we originally shipped Cappuccino. Most importantly, there is now a real standard for running JavaScript on the command line: CommonJS. Recall for a moment that when we originally shipped Cappuccino, doing something a simple as reading a file in JavaScript was still an open question! At the time the best solution was to use Rhino and drop down to Java APIs. Not only was this slow, it was completely unportable to the other JavaScript engines that would come along like JavaScriptCore and V8. But with CommonJS around, it was now finally viable to write command line scripts in JavaScript.</p>
<p>So with these tools in hand we set out to write <a href = "http://github.com/280north/jake">Jake</a>: a JavaScript port of Rake. Again, we really liked Rake, so the goal was simply to expose the functionality of this tool to JavaScript. This ended up turning out quite well for us, because we didn&#8217;t have to worry about inventing a new build tool. The result is that most Rakefiles can be trivially &#8220;ported&#8221; to Jake, so a lot of the existing JavaScript projects that currently use Rake can quickly transition over.</p>
<p>Let&#8217;s quickly take a look at how to create build tasks with Jake:</p>
<pre>
<div class="codeblock" style="margin-bottom: 0px; border: 0px;"><span class = "keyword">var</span> task = <span class = "selector">require</span>("jake").task;

<span class = "selector">task</span> ("log", <span class="keyword">function</span>()
{
    <span class = "selector">print</span>("hey there!");
});</div>
</pre>
<p>That&#8217;s all there is to it. You simply call the task function, give it a name, and a closure that contains task&#8217;s instructions. If you want to set up a dependency, say on two other tasks, you can do so as well:</p>
<pre>
<div class="codeblock" style="margin-bottom: 0px; border: 0px;"><span class = "selector">task</span> ("log", ["task-one", "task-two"], <span class="keyword">function</span>()
{
    <span class = "selector">print</span>("hey there!");
});</div>
</pre>
<p>Now, log will first make sure to execute task-one and task-two before executing. If you&#8217;ve used Rake, this should look really familiar. Here is the same task in Rake for comparison:</p>
<pre>
<div class="codeblock" style="margin-bottom: 0px; border: 0px;"><span class = "selector">task</span> :log => [:task-one, :task-two] <span class = "keyword">do</span>
    <span class = "selector">echo</span> "hey there!"
<span class = "keyword">end</span></div>
</pre>
<p>Jake also includes a host of tools to make dealing with files super easy. This is how you would make sure to generate a new concatenated and compressed file every time you edit one of your original source files:</p>
<pre>
<div class="codeblock" style="margin-bottom: 0px; border: 0px;"><span class = "keyword">var</span> shrinksafe = <span class = "selector">require</span>("minify/shrinksafe"),
    read = <span class = "selector">require</span>("file").read,
    write = <span class = "selector">require</span>("file").write,
    filedir = <span class = "selector">require</span>("jake").filedir,
    FileList = <span class = "selector">require</span>("jake").FileList;

<span class = "selector">filedir</span> ("build/compressed.js", <span class = "keyword">new</span> FileList("*.js"), <span class = "keyword">function</span>()
{
    <span class = "keyword">var</span> result = "";

    (<span class = "keyword">new</span> FileList("*.js")).<span class = "selector">forEach</span>(<span class = "keyword">function</span>(filename)
    {
        result += shrinksafe.<span class = "selector">compress</span>(<span class = "selector">read</span>(filename));
    });

    <span class = "selector">write</span>("build/compressed.js", result);
});</div>
</pre>
<p>So what we&#8217;re doing here is creating a task for our &#8220;build/compressed.js&#8221; file.  The filedir task is nice enough to create the intermediate &#8220;build&#8221; directory for us (if you don&#8217;t want this behavior, you can use the file task instead). This task will only run any time one of the files in our project with the &#8220;.js&#8221; extension changes. So, if you don&#8217;t change any code, this task is skipped. The FileList object takes globs and is iterable, so when this task is called, it simply iterates over each of these files, reads them, compresses them, and writes out the concatenated result. Pretty easy. The best part is that since CommonJS supports a bunch of compressors, its really easy to write a task that uses whichever one generates the smallest file size:</p>
<pre>
<div class="codeblock" style="margin-bottom: 0px; border: 0px;"><span class = "selector">filedir</span> ("build/compressed.js", <span class = "keyword">new</span> FileList("*.js"), <span class = "keyword">function</span>()
{
    <span class = "keyword">var</span> smallest = <span class = "keyword">null</span>,
        compressors = ["minify/shrinksafe", "minify/closure-compiler"]; 

    compressors.<span class = "selector">forEach</span>(<span class = "keyword">function</span>(compressor)
    {
        <span class = "keyword">var</span> result = "";

        (<span class = "keyword">new</span> FileList("*.js")).<span class = "selector">forEach</span>(<span class = "keyword">function</span>(filename)
        {
            result += <span class = "selector">require</span>(compressor).<span class = "selector">compress</span>(<span class = "selector">read</span>(filename));
        });

        if (!smallest || result.length < smallest.length)
            smallest = result;
    });

    <span class = "selector">write</span>("build/compressed.js", smallest);
});</div>
</pre>
<h3>Already in use</h3>
<p>This isn&#8217;t a toy, we are actively using this as our only build system in Cappuccino. That means you can check out some pretty sophisticated examples by taking a look at the <a href = "http://github.com/280north/cappuccino/">Cappuccino source code</a>, or by talking to anyone who has shipped a Cappuccino project. Just ask to see their Jakefiles. If you already have a CommonJS platform installed, you can get jake by just using the tusk package manager:</p>
<pre>
<div class="codeblock" style="margin-bottom: 0px; border: 0px;">tusk install jake</div>
</pre>
<p>If not, you can head on over to <a href = "http://narwhaljs.org">narwhaljs.org</a> and download narwhal to get started writing JavaScript on the server and command line. Alternatively, you can download the Cappuccino source code and run our bootstrap script, which not only installs narwhal for you, but also custom tailors your installation to use the fastest JavaScript engine available for your machine that narwhal supports (this means that if you&#8217;re on a Mac you&#8217;ll get the super fast JavaScriptCore engine instead of the quite slow default Rhino one):</p>
<pre>
<div class="codeblock" style="margin-bottom: 0px; border: 0px;">$ git clone git://github.com/280north/cappuccino.git cappuccino
$ cd cappuccino
$ ./bootstrap.sh</div>
</pre>
<p>If you do this you&#8217;ll also be able to checkout out some of the cool extensions to Jake specifically for Cappuccino projects. We&#8217;ve created the bundle, framework, and app tasks that completely put together your project for you (similar to the gem tasks in Rake). These tasks implement some pretty cool optimizations, like our <a href = "http://cappuccino.org/discuss/2009/11/11/just-one-file-with-cappuccino-0-8/">automagic image spriting</a>. If you&#8217;re having any trouble, feel free to jump in our <a href = "irc://irc.freenode.net#cappuccino">IRC room</a> so we can answer your questions or comments on how to get set up building your projects with jake.</p>
<p>You can of course also <a href = "http://github.com/280north/jake">get the source code</a> as well and submit patches or <a href = "http://github.com/280north/jake/issues">file bugs</a>:</p>
<pre>
<div class="codeblock" style="margin-bottom: 0px; border: 0px;">$ git clone git://github.com/280north/jake.git
</div>
</pre>
<p>Perhaps one of the coolest results of this is that Cappuccino is really now self-hosting: <b>the entire stack is finally JavaScript</b> and easily accessible for hacking.</p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/04/28/introducing-jake-a-build-tool-for-javascript/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Cappuccino 0.8 Tools</title>
		<link>http://cappuccino.org/discuss/2010/04/12/cappuccino-0-8-tools/</link>
		<comments>http://cappuccino.org/discuss/2010/04/12/cappuccino-0-8-tools/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 18:40:47 +0000</pubDate>
		<dc:creator>tlrobinson</dc:creator>
				<category><![CDATA[Cappuccino]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=601</guid>
		<description><![CDATA[Cappuccino comes with a comprehensive set of tools for developing, debugging, optimizing, and deploying your Cappuccino applications. Those who have been following Cappuccino since the 0.7 release will notice some changes in the tools. The most important being that Cappuccino's tools are now written entirely in JavaScript and Objective-J.]]></description>
			<content:encoded><![CDATA[<p>Cappuccino comes with a comprehensive set of tools for developing, debugging, optimizing, and deploying your Cappuccino applications. Those who have been following Cappuccino since the 0.7 release will notice some changes in the tools. The most important being that Cappuccino&#8217;s tools are now written entirely in JavaScript and Objective-J.</p>
<p>The 0.7 release used <a href="http://rake.rubyforge.org/">Rake</a>, a Ruby build tool similar to &#8220;make&#8221;, to manage the build process of Cappuccino applications, as well as Cappuccino and Objective-J itself. In an effort to speed up the tools, reduce the number of dependencies, and allow us to focus on a single language family, we have replaced the Rake dependency with a simple port of Rake for JavaScript, aptly named <a href="http://github.com/280north/jake">Jake</a>. Since Jake is written in JavaScript, other JavaScript and Objective-J build tools like the Objective-J compiler can run within the same process, speeding up the build time significantly.</p>
<p>Additionally, we have expanded the command-line/server-side JavaScript environment used for Cappuccino&#8217;s tools, now available as a separate project called <a href="http://narwhaljs.org/">Narwhal</a>. Narwhal aims to support the emerging <a href="http://commonjs.org/">CommonJS</a> module and standard library specifications on multiple JavaScript engines.</p>
<p>We started working with the <a href="http://www.mozilla.org/rhino/">Rhino</a> engine, since the existing build tools were built on Rhino, and have recently added support for the JavaScriptCore / SquirrelFish engine. The performance of Narwhal on JavaScriptCore is an order of magnitude faster than Rhino, vastly improving build times. Currently &#8220;narwhal-jsc&#8221; supports Mac OS X, but other platform support is in progress.</p>
<p>Another major change was the refactoring of the <a href="http://wiki.github.com/280north/cappuccino/press">&#8220;press&#8221;</a> tool, which attempts to strip unnecessary files from your application bundle. As part of that refactoring we moved the &#8220;&#8211;flatten&#8221; feature, which inlines all code and files into one or more JavaScript files, into a separate tool, unsurprisingly called <a href="http://wiki.github.com/280north/cappuccino/flatten">&#8220;flatten&#8221;</a>. Flatten now supports splitting your application into multiple files which will be downloaded by the browser in parallel, via the &#8220;&#8211;split N&#8221; option.</p>
<p>For more information on all of these tools, check out the <a href="http://wiki.github.com/280north/cappuccino/Tools">Tools</a> wiki page.</p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/04/12/cappuccino-0-8-tools/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cappuccino 0.8</title>
		<link>http://cappuccino.org/discuss/2010/04/07/cappuccino-0-8/</link>
		<comments>http://cappuccino.org/discuss/2010/04/07/cappuccino-0-8/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 19:22:14 +0000</pubDate>
		<dc:creator>tolmasky</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=617</guid>
		<description><![CDATA[Cappuccino 0.8 is now available on the downloads page. This release has a ton of new features and fixes, and I&#8217;d like to thank everyone in the community that meticulously checked their existing software against the Release Candidates in the last few weeks. 10,000 Foot View Cappuccino 0.8 includes close to 100,000 lines of changes [...]]]></description>
			<content:encoded><![CDATA[<p>Cappuccino 0.8 is now available on the <a href = "http://cappuccino.org/download">downloads page</a>. This release has a ton of new features and fixes, and I&#8217;d like to thank everyone in the community that meticulously checked their existing software against the Release Candidates in the last few weeks. </p>
<h3>10,000 Foot View</h3>
<p>Cappuccino 0.8 includes close to 100,000 lines of changes from our last formal release, 0.7.1 (check out the <a href="http://github.com/280north/cappuccino/compare/0.7.1...v0.8.0">Github compare view</a> for this release). This ranges from new tests to brand new features to optimizing existing ones. And yet, despite this tremendous amount of change, we have almost no API differences (aside from API additions of course). The very few changes we do have are simply deprecated, not removed. This means that it will be incredibly easy to drop in the new version of Cappuccino and get all the benefits without spending a ridiculous amount of time changing your own code. This is of course the benefit of implementing an existing and proven spec. In fact, most the <a href = "http://cappuccino.org/learn/demos/">public Cappuccino projects</a> are already running this code.</p>
<p>Now that that&#8217;s out of the way, lets get to the good stuff: <b>what&#8217;s new?</b></p>
<h3>CPTableView and CPOutlineView</h3>
<p>Table views have been one of our most requested features since we launched Cappuccino about a year ago, and I&#8217;m happy to say that I think we have one of the best table view implementations out there with 0.8. <a href="http://cappuccino.org/discuss/2010/03/12/randy-luecke-becomes-a-committer/">Randy</a>, our latest committer, has spearheaded this feature for his own <a href = "http://timetableapp.com/">TimeTable</a> project and with help from a number other folks in the community it has become a truly awesome component, supporting immense amounts of rows, column sorting, drag and drop, and much more while still remaining incredibly performant. But don&#8217;t take my word for it, check it out yourself: </p>
<p><center><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/o9L-c9O-YcM&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/o9L-c9O-YcM&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></center></p>
<h3>Automagic Image Spriting</h3>
<p>We alluded to this feature a little while ago when we first announced it at JSConf EU, and now you can finally take it for a spin: <b>automatic</b> image spriting. Yes you read correctly, no more having to manually decide which images to sprite, or how to sprite. The brand new Cappuccino build tools are smart enough to sprite all your images together into one file (not several based on orientation), and of course works in all browsers including IE. You can find out more about the thinking behind this feature <a href = "http://cappuccino.org/discuss/2009/11/11/just-one-file-with-cappuccino-0-8/">here</a>.</p>
<h3>nib2cib Updates</h3>
<p>Along with all the new components we&#8217;ve added to Cappuccino, we&#8217;ve been keeping nib2cib up to date to allow you to use them in the easiest way possible. Most importantly, table views can now be created with simple drag and drop!</p>
<h3>The Whole Stack with CommonJS and Jake</h3>
<p>Although this isn&#8217;t necessarily a feature in Cappuccino itself, a lot of our users will be thrilled to know that getting and building Cappuccino from the repo (or building and optimizing your own Cappuccino apps) no longer has any external dependencies. In previous releases we relied on a combination of our own tools and a few Ruby tools like Rake. However, with the advent of the CommonJS standard (which our own team member Tom has been working on diligently), we&#8217;ve been able to move our <b>entire</b> development stack to JavaScript and Objective-J. That means that our community members will have an easier time writing tests, fixing bugs in the build process, and writing server side JS and Objective-J. Making this change has also allowed us to put a greater focus on <a href = "http://wiki.github.com/280north/cappuccino/tools">the tools</a> side of things and provide a host of improved applications like <a href = "http://wiki.github.com/280north/cappuccino/press">press</a> and <a href = "http://wiki.github.com/280north/cappuccino/flatten">flatten</a> to better optimize deploying your Cappuccino applications. We&#8217;ll be posting soon with more details about these.</p>
<p>And there&#8217;s way more in there as well. We are incredibly proud of this release and think it makes Cappuccino more compelling than ever. We&#8217;ll be at <a href = "http://jsconf.us/2010/">JSConf</a> showing some of this stuff off too, so if you&#8217;re attending, stop by and say hi!</p>
<p>- Francisco</p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/04/07/cappuccino-0-8/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Solving the JavaScript Memory Management Problem</title>
		<link>http://cappuccino.org/discuss/2010/04/01/solving-the-javascript-memory-management-problem/</link>
		<comments>http://cappuccino.org/discuss/2010/04/01/solving-the-javascript-memory-management-problem/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 00:01:58 +0000</pubDate>
		<dc:creator>ross</dc:creator>
				<category><![CDATA[Cappuccino]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Objective-J]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=606</guid>
		<description><![CDATA[JavaScript has some real problems. Anyone who has programmed for the web can attest to that. And anyone familiar with what we&#8217;re doing with Cappuccino will recognize that we&#8217;re not afraid to tackle those problems head on. When we created Objective-J we set out to create a set of true enhancements to the JavaScript language [...]]]></description>
			<content:encoded><![CDATA[<p>JavaScript has some real problems. Anyone who has programmed for the web can attest to that. And anyone familiar with what we&#8217;re doing with Cappuccino will recognize that we&#8217;re not afraid to tackle those problems head on. When we created Objective-J we set out to create a set of true enhancements to the JavaScript language that would add powerful new dynamic features to the language, like advanced automatic dependency resolution, truly dynamic message passing, and familiar classical inheritance. By all accounts it has been a tremendous success.</p>
<p>Lately, though, we&#8217;re beginning to realize that we didn&#8217;t quite go far enough. Memory issues have long plagued JavaScript developers. Because the garbage collector is opaque to the developer, and nothing like &#8220;finalize&#8221; is provided by the language, programmers often find themselves in situations where they are forced to hold on to an object reference for too long (or forever) creating a memory leak.</p>
<p>Just as we&#8217;ve done before, when we tackled this problem we decided to look at what has worked in the past. Finding inspiration in the elegant simplicity of C, we knew we&#8217;d found the right solution. And so, we&#8217;re pleased to announce the immediate availability of a manual memory management system in Cappuccino.</p>
<p>A lot of Cocoa developers disparaged garbage collection when it came to Objective-C, and we&#8217;ve come to realize they were absolutely right! Why rely on machines to solve problems for us when we can do it by hand. So, we&#8217;ve taken the Cocoa reference counting system and implemented it in JavaScript. We&#8217;ve replaced the existing no-op -retain, -release, and -autorelease methods with fully working implementations. When an object&#8217;s release count reaches 0, the object&#8217;s dealloc method will be called, and the memory will be able to be reclaimed. Now you have a clear way to clean up unwanted references when an object is no longer being used. Just make sure you do your reference counting correctly!</p>
<p>To do this right, we&#8217;ve created a global object table. These objects aren&#8217;t going anywhere on their own! If you don&#8217;t release an object, it will stick around forever, ensuring you&#8217;ll always have it when you need it. This global table acts as a lookup table for any object, allowing us to finally implement pointers in JavaScript. Since $ has become the coolest way to do completely non-standard lookups in an almost indecipherable way, we thought we&#8217;d jump on the bandwagon. Pass any pointer to $ and you&#8217;ll get the associated object! How do you get a pointer you ask? $$ of course! For example:</p>
<pre><code>
var o = [CPobject new]; // +new returns with a retain count of 1!
var p = $$(o); // returns a pointer to o

o === $(p); // we dereference the pointer and get the right object!</code></pre>
<p>Zombies come standard, too! Just set OBJJ_ZOMBIE_DETECTION to true and objj_msgSend will throw an exception if you ever message an object that&#8217;s been dealloc&#8217;d. </p>
<p>We&#8217;ve even take the time to properly -autorelease all objects returned from class methods in Foundation, but we&#8217;ve made absolutely no effort to properly retain those objects in Cappuccino code that uses them yet. So we need your help. Every line must be scrutinized (but we shouldn&#8217;t to automate this process, as it would surely be too error prone). Rather than focus on developing new features or fixing bugs in the issue tracker, we hope that all Cappuccino contributors will spend their time writing memory management code so that we can fully realize this web development revolution!</p>
<p>We&#8217;ll be including these exciting new features in a future release, so you should get started adding manual memory management code to every single line of Cappuccino you&#8217;ve ever written! In the meantime, check out the <a href="http://github.com/280north/cappuccino/commit/6678bba94f7778b245d8219292b3a6ac85d31678">working code on Github</a>.</p>
<p><em>Please note this is an April Fools joke!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/04/01/solving-the-javascript-memory-management-problem/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>New Cappuccino App: TimeTable</title>
		<link>http://cappuccino.org/discuss/2010/03/24/new-cappuccino-app-timetable/</link>
		<comments>http://cappuccino.org/discuss/2010/03/24/new-cappuccino-app-timetable/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 16:27:55 +0000</pubDate>
		<dc:creator>tolmasky</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cappuccino.org/discuss/?p=584</guid>
		<description><![CDATA[After many months of development Randy Luecke has finally released version 1.0 of his new Cappuccino project, TimeTable! We’re proud to share in the excitement as yet another Cappuccino application is made commercially available. TimeTable is an application designed for freelancers to keep track of their projects and clients. TimeTable boasts a plethora of features [...]]]></description>
			<content:encoded><![CDATA[<p>After many months of development <a href=”http://www.twitter.com/me1000”>Randy Luecke</a> has finally released version 1.0 of his new Cappuccino project, <a href ="http://timetableapp.com/">TimeTable</a>! We’re proud to share in the excitement as yet another Cappuccino application is made commercially available. TimeTable is an application designed for freelancers to keep track of their projects and clients. TimeTable boasts a plethora of features including integration with web services like Google Maps, Gmail, Google Voice, and Skype. </p>
<p>Randy’s commitment to Cappuccino is obvious when you look at the development he has done on the new CPTableView component, which was developed in parallel with TimeTable. In addition to the work he has done on CPTableView, Randy has also open sourced different components used throughout TimeTable, the most notable of which is the date picker component. Randy has been no stranger to the community as he continues to lend a helping hand in the mailing list and IRC channel. We look forward to the things Randy has in the pipeline for Cappuccino! </p>
<p>We’d like to share in Randy’s success by sponsoring a give away of 25 TimeTable accounts. To enter simply tweet: <a href="http://twitter.com/?status=I%20would%20like%20to%20enter%20to%20win%20a%20@timetableapp%20account%20http%3A//timetableapp.com/">“I would like to enter to win a @timetableapp account http://timetableapp.com/”</a>! On March 30th, 25 twitter users will be chosen at random to receive their free TimeTable account! If you don&#8217;t win TimeTable is still more than affordable at its incredible introductory price of $34.99 a year!</p>
<p><a href="http://www.timetableapp.com/blog/?p=131">Find out more about the TimeTable launch.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cappuccino.org/discuss/2010/03/24/new-cappuccino-app-timetable/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
