Cappuccino ProjectModern app development on the webhttp://www.cappuccino-project.org/blog/2018-04-14T00:00:00+00:00Cappuccino Core DevelopersCappCon 2018 and the release of Cappuccino 1.0!/blog/2018/04/cappuccino-1-0-is-announced.html2018-04-14T00:00:00+00:002018-04-14T00:00:00+00:00Martin Carlberg<h4>Details</h4>
<p>We are excited to announce the release of version 1.0 of the Cappuccino frameworks on September 4, 2018 at Université de Liège in Belgium. This is exactly 10 years after the first commit to GitHub.</p>
<p>We encourage you to <a href="https://www.meetup.com/CappCon/events/248886408/">come and join us in...</a></p><h4>Details</h4>
<p>We are excited to announce the release of version 1.0 of the Cappuccino frameworks on September 4, 2018 at Université de Liège in Belgium. This is exactly 10 years after the first commit to GitHub.</p>
<p>We encourage you to <a href="https://www.meetup.com/CappCon/events/248886408/">come and join us in Liège, Belgium</a> on this day to celebrate and learn more about this major release of the Cappuccino framework. Speakers will show the latest and greatest features. We will also talk about why this framework makes web development easier compared to other frameworks that change all the time over the years. In the evening we will have a release party where you can meet and talk with fellow web developers. <a href="https://www.meetup.com/CappCon/events/248886408">See the meetup for details</a>.</p>
<p>We don’t have a fixed number of features that will be included in this release but here is a list of some candidates:</p>
<ol>
<li>Node support (not ready yet but aiming for the 1.0 release).</li>
<li>New flat CSS based theme for all user interface controls. This is to be called Aristo 3 (not ready yet but aiming for the 1.0 release).</li>
<li>CPTextView mimics NSTextView from Mac OS X. It brings a rich text control to the framework. This is much more than traditional web text editors as it doesn’t rely entirely on the browser but rather actually understands content layout and formatting. This was included in the last release but is a major feature and has a lot of fixes and improvements ready to go for 1.0.</li>
<li>Source Map support when debugging. Step line by line in the browser debugger using the original source files.</li>
</ol>
<p>I’m sure there will be more features in this release and if you want something to be included please let us know. There are also issues and <a href="https://github.com/cappuccino/cappuccino">pull requests on the Github repository</a> where you can join in on the discussions. You can vote on issues and pull requests to let the developers know what you want to be included.</p>
<p>We are also encouraging you to help develop new features and fixes. If you want to help please <a href="http://cappuccino-project.org/contribute.html">get involved!</a></p>
<p>Have you noticed that the e-mail list is a little more quiet these days? Almost all of the developer discussions are on Gitter currently, <a href="https://gitter.im/cappuccino/cappuccino">so please join us there</a>.</p>
<p>The first release candidate of version 1.0 is scheduled for August 4, 2018. After that we will only accept bug fixes for the 1.0 release. Exceptions from this will be handled on a case by case basis.</p>
<p><em>- Martin Carlberg</em></p>
<p><a href="https://www.meetup.com/CappCon/events/248886408">Register for CappCon 2018</a> | <a href="https://gitter.im/cappuccino/cappuccino">Join the discussion</a> | <a href="/downloads.html">Download Cappuccino</a></p>
Cappuccino 0.9.10/blog/2017/07/cappuccino-0-9-10.html2017-07-11T00:00:00+00:002017-07-11T00:00:00+00:00Alexandre Wilhelm<p>We are very proud to release this new version of Cappuccino: 0.9.10! This release follows a bit more than a year from 0.9.9 and as usual we have been quite busy. We are pretty sure that you will be as excited as us about the new improvements made to...</p><p>We are very proud to release this new version of Cappuccino: 0.9.10! This release follows a bit more than a year from 0.9.9 and as usual we have been quite busy. We are pretty sure that you will be as excited as us about the new improvements made to Cappuccino.</p>
<h4>Notable Improvements</h4>
<h5>CPTextView</h5>
<p>After years of development, the new <code>CPTextView</code> brings a rich text control to Cappuccino. This is much more than traditional web text editors as it doesn’t rely much on the browser but instead actually understands content layout and formatting, allowing incredible control over the details and integration with the rest of Cappuccino.</p>
<p><a href="/img/cpo-uploads/2017/05/CPTextView-4b3ca19c.png"><img width="1088" height="1258" src="/img/cpo-uploads/2017/05/CPTextView-4b3ca19c.png" /></a></p>
<h5>CPViewAnimator and CPAnimationContext</h5>
<p>Cappuccino now provides a new, easy way to create smooth animations. Take a look at the example under <code>Tests/Manual/CPAnimationPropertyContainerTest</code>.</p>
<h5>Node as Javascript Engine</h5>
<p>You can now use <code>node</code> as your javascript engine when using/building Cappuccino. More informations can be found <a href="http://www.cappuccino-project.org/blog/2017/04/cappuccino-on-node-js.html">here</a>.</p>
<p>Cappuccino 0.9.10 will still use the javascript engine <code>jsc</code> by default. However, <code>node</code> will be the default engine from now on in the master branch of Cappuccino, so feel free to play with it and help to contribute to it! This should be great news especially if you are on a platform which doesn’t support JavaScriptCore: you should get a substantial speedup by switching.</p>
<hr>
<p>Thanks to all the <a href="https://github.com/cappuccino/cappuccino/graphs/contributors">Cappuccino contributors</a>. We’d also like to call out Frank Rehwinkel who did the node integration for narwhal and Daniel Boehringer for his work on the CPTextView. Keep doing a good work like this! Thanks!</p>
<p>As always the full change log and release notes are available <a href="/cappuccino-release-notes.html">here</a>.</p>
<p>We hope you are as excited about Cappuccino 0.9.10 as we are and that you will help us spread the word, and that you will create some fantastic applications with it!</p>
<p><em>- The Cappuccino Core Developer Team</em></p>
<p><a href="/downloads.html">Download Cappuccino 0.9.10</a></p>
<p><a href="/cappuccino-release-notes.html">Full Release Notes</a></p>
Cappuccino on Node.js/blog/2017/04/cappuccino-on-node-js.html2017-04-10T00:00:00+00:002017-04-10T00:00:00+00:00Martin Carlberg<h3>Background</h3>
<p>Up until now Cappuccino has only been able to build on two different Javascript engines, <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino">Rhino</a> (Linux and Mac) and <a href="https://developer.apple.com/reference/javascriptcore">JavaScriptCore</a> (Mac). Rhino is very old, slow and is based on Java. JavaScriptCore is very fast and modern but runs only...</p><h3>Background</h3>
<p>Up until now Cappuccino has only been able to build on two different Javascript engines, <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino">Rhino</a> (Linux and Mac) and <a href="https://developer.apple.com/reference/javascriptcore">JavaScriptCore</a> (Mac). Rhino is very old, slow and is based on Java. JavaScriptCore is very fast and modern but runs only on Mac OS X. Almost everyone else in the Javascript world is using <a href="https://nodejs.org">Node.js</a>.</p>
<h3>Announcement</h3>
<p>Today we are proud to announce Cappuccino support for Node.js. This is made possible thanks the great work of <a href="https://github.com/FrankReh">Frank Rehwinkel</a>.</p>
<h3>How it is done</h3>
<p>There has been multiple attempts to support this over the last couple of years and I think the reason for Frank’s success is that he did focus on the main issue and asked the right question. Why can’t you run it on Node.js if you can run it on JavaScriptCore? </p>
<p>Cappuccino uses the Javascript Narwhal library to run its build scripts. Narwhal can be run on multiple Javascript engines and we have supported Rhino and JavaScriptCore for many years. It is possible to support additional Javascript engines by implementing a specific API. That would glue Narwhal together with the Javascript engine of Node.js and this is what Frank has done.</p>
<h3>How to use it</h3>
<p>Everything works as before except we can now choose Node.js as the Javascript engine instead of Rhino or JavaScriptCore. In the next release of Cappuccino it will be included and ready to use out of the box. For now, if you want to try it just follow the instructions below:</p>
<ol>
<li>Make sure <a href="https://nodejs.org">Node.js</a> is installed.</li>
<li>The latest <a href="https://github.com/cappuccino/cappuccino-base">Cappuccino-Base</a> is needed. It is included in the latest version of Cappuccino. It’s most easily installed by following the instructions <a href="http://www.cappuccino-project.org/#download">here</a>.</li>
<li>Some Node.js modules are required. Run the Bash script at <span style="white-space: nowrap"><code><Your Narwhal Folder>/packages/narwhal-node/bin/npm-install</code>.</span></li>
<li>There are also some small changes to the Cappuccino framework necessary to support Node.js. They are not included in the latest version so you should use the master branch from <a href="https://github.com/cappuccino/cappuccino">Github</a>.</li>
<li>Set the environment variable <code>NARWHAL_ENGINE</code> to <code>node</code>. In Bash this is <code>export NARWHAL_ENGINE=node</code>.</li>
</ol>
<p>Now everything works as normal and you can build the downloaded (step 4 above) Cappuccino framework with <code>jake install</code>.</p>
<h3>Performance</h3>
<p>Node.js is much faster than Rhino and is up to par with JavaScriptCore. Here are some build tests done with the different engines using the command <code>jake install</code> on a MacBook Pro:</p>
<ol>
<li>Node: 2 minutes</li>
<li>JavascriptCore: 2 minutes</li>
<li>Rhino: 5 minutes 30 seconds</li>
</ol>
<h3>The next step</h3>
<p>As soon as possible we will drop support for Rhino as it is old and not maintained. It will allow us to be more up to date and for example support the ES6 release of Javascript. </p>
<p>The build process is still dependent on a couple of non Javascript tools like <a href="https://gcc.gnu.org">gcc</a> and <a href="http://shrinksafe.dojotoolkit.org">ShrinkSafe</a> etc. When we have removed all dependencies it will be much easier to build Cappuccino on all platforms including Windows. Also in the long run it would be nice to remove Narwhal and maybe replace Jake (our build system) with something more modern. Work is being done to remove gcc and if you want to get involved in working with removing any of these dependancies please get in contact with us on the <a href="https://groups.google.com/forum/#!forum/objectivej">mailing list</a> or on <a href="https://gitter.im/cappuccino/cappuccino">Gitter</a>.</p>
Cappuccino News 2016 November 1st/blog/2016/11/cappuccino-news-2016-11-01.html2016-11-01T00:00:00+00:002016-11-01T00:00:00+00:00Alexandre Wilhelm<p>Here’s a quick update on what’s new with Cappuccino recently.</p>
<h3>Community</h3>
<p>A new tutorial has been added to the website! If you want to learn about the basic of the <code>CPTableView</code>, you should read this new tutorial <a href="http://www.cappuccino-project.org/learn/simple-tableview.html">here</a>. Thanks to <code>kicsipixel</code> for his help...</p><p>Here’s a quick update on what’s new with Cappuccino recently.</p>
<h3>Community</h3>
<p>A new tutorial has been added to the website! If you want to learn about the basic of the <code>CPTableView</code>, you should read this new tutorial <a href="http://www.cappuccino-project.org/learn/simple-tableview.html">here</a>. Thanks to <code>kicsipixel</code> for his help!</p>
<h3>Cappuccino</h3>
<h5>New</h5>
<ul>
<li><p>New: <code>CPTextView</code> in AppKit. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/0aeccbb02cf611ac447b3dfd04ebb2f55387c880">0aeccb</a> <a href="https://github.com/cappuccino/cappuccino/commit/bea03de5627a149f6b9ce9dd75ef8bd93596b10d">bea03d</a>
<a href="https://github.com/cappuccino/cappuccino/commit/65f701d459b115c7540bedc312685fe54da3a3a0">65f701</a>)</p></li>
<li><p>New: <code>CGContextText</code> in CoreGraphics. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/315a7b9e6a7f542bd83ae0c35932c0dff82d53c8">315a7b9</a>)</p></li>
</ul>
<h5>Changes/Fixes</h5>
<ul>
<li><p>Fixed: editing in a cell-based <code>CPTableView</code> was broken in an editing session. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/1360caaa8133c34a7f4ae6b5d1a7330219f43598">1360caa</a>)</p></li>
<li><p>Fixed: <code>xCodeCapp</code> was broken under macOS Sierra. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/dd62c08b09b78ac1dbad8f745d21c2a6fe1d594a">dd62c0</a>)</p></li>
<li><p>New: manual test for <code>CPSegmentedControl</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/6061323c361acca64952a107963fa88ae93f8e42">606132</a>)</p></li>
<li><p>New: documentation for autoscroll of <code>CPView</code>. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/5059028e8abf3611b7e166d825b44bcfff1af8c9">5059028</a>)</p></li>
<li><p>Fixed: typo in the documentation of <code>CPControl</code>. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/2f82fb842d3155d09c4786371e5c58b35191c7ff">2f82fb8</a>)</p></li>
<li><p>Fixed: formatting of <code>CPView</code>. (<a href="https://github.com/ahankinson">ahankinson</a> - <a href="https://github.com/cappuccino/cappuccino/commit/c2b7cc7964f368e6994bdd8e5229e02a137ee570">c2b7cc7</a>)</p></li>
<li><p>Fixed: optimization of the tracking areas feature in <code>CPView</code>. (<a href="https://github.com/didierkorthoudt">didierkorthoudt </a> - <a href="https://github.com/cappuccino/cappuccino/commit/969d1dff2a36ce073758605253cc29a8c2d86d09">969d1d</a>)</p></li>
<li><p>Fixed: issues in <code>CPAnimationContext</code> and <code>CPView</code> animator. Added cucumber tests for <code>CPAnimationContext</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/4b55a691503273ee9bcb4cf01025110a8e14a6a0">4b55a69</a>)</p></li>
<li><p>Fixed: incorrect type declaration in <code>CPCache</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/62e5d8d8419844327552b711b07e60d85dc2c2c2">62e5d8d</a>)</p></li>
<li><p>Fixed: selection in <code>CPTabView</code> when defined through <code>nib2cib</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/c4bf67d133934ec62077f5272e50529046da55f4">c4bf67d</a>)</p></li>
<li><p>New: <code>CPTabView</code> loads the views asynchronously when possible. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/0eb196e852fa8d310f0e3fa2ed3f5a421566bdd4">0eb196e</a>)</p></li>
</ul>
Table view tutorial/blog/2016/09/table-view-tutorial.html2016-09-12T00:00:00+00:002016-09-12T00:00:00+00:00Alexander Ljungberg<p>We have today posted a new tutorial for our learning section, written by <a href="https://github.com/kicsipixel">kicsipixel</a>.</p>
<p>The tutorial is a getting starting guide for the powerful table view control. It really showcases how productive you can be with the tools that come out of the box...</p><p>We have today posted a new tutorial for our learning section, written by <a href="https://github.com/kicsipixel">kicsipixel</a>.</p>
<p>The tutorial is a getting starting guide for the powerful table view control. It really showcases how productive you can be with the tools that come out of the box with Cappuccino.</p>
<p>The new tutorial can be found <a href="/learn/simple-tableview.html">here</a>.</p>
Cappuccino News 2016 September 1st/blog/2016/09/cappuccino-news-2016-09-01.html2016-09-01T00:00:00+00:002016-09-01T00:00:00+00:00Alexandre Wilhelm<p>Here’s a quick update on what’s new with Cappuccino recently.</p>
<h3>Community</h3>
<p>If you missed the CappCon2016, you can find the story of this amazing day <a href="http://www.cappuccino-project.org/blog/2016/04/cappcon-2016.html">here</a>! Videos and slides have been released.</p>
<p>In a bit of sad news for the Cappuccino Community, Aparajita...</p><p>Here’s a quick update on what’s new with Cappuccino recently.</p>
<h3>Community</h3>
<p>If you missed the CappCon2016, you can find the story of this amazing day <a href="http://www.cappuccino-project.org/blog/2016/04/cappcon-2016.html">here</a>! Videos and slides have been released.</p>
<p>In a bit of sad news for the Cappuccino Community, Aparajita Fishman has left the Cappuccino project to take on a role at Apple. Thanks you for all your great work on Cappuccino and we hope you’ll show them how it’s done over at Apple! More information <a href="http://www.cappuccino-project.org/blog/2016/08/aparajita-leaves.html">here</a>.</p>
<p>Taking a step back to look at the last 6 months, we can see lots of improvements and news. To pick just a few, <code>CPView</code> has been optimized, while <code>CPAnimationContext</code> and <code>CPViewAnimator</code> have been added to the framework. As always, minor bugs have been fixed. The full list is below.</p>
<p>We are getting close to a new release Cappuccino 0.9.10, which will probably be released in October 2016!</p>
<h3>Cappuccino</h3>
<h5>New</h5>
<ul>
<li><p>New: <code>CPAnimationContext</code> and <code>CPViewAnimator</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/598a6ebaed43f65fa91374cdfa2a976fc4cd19e4">598a6eb</a>)</p></li>
<li><p>New: Sweden / Swedish as a possible locale. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/41a741724f7da85835ed3b7e12eee1376b0b0cfc">41a7417</a>)</p></li>
<li><p>New: <code>CPViewController -viewWill/DidAppear</code> and <code>CPViewController viewWill/didDisappear</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/fedc721432bb30c244030a5f632ca27474b966c2">fedc7214</a>)</p></li>
<li><p>New: show successfully loaded <code>NSClasses</code> in <code>nib2cib</code> verbose. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/dde805931dbb2d04ad0ec8124da2b1cc5d2a0bd2">dde8059</a>)</p></li>
</ul>
<h5>Changes/Fixes</h5>
<ul>
<li><p>Fixed: bump <code>XcodeCapp</code> copyright year. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/087e811586879d9ceedb5316a5fb49f784653c8d">087e811</a>)</p></li>
<li><p>Fixed: <code>CPNumber</code> intValue did not return an integer. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/fa07bc143e2427c2a1d373b5ea7149eb3d34d883">fa07bc1</a>)</p></li>
<li><p>Fixed: missed some version number bumps in the 0.9.9 release. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/e13f5ed730f52c77836654df2ad3f41e00b599f1">e13f5ed</a>)</p></li>
<li><p>Fixed: formatting <code>CPCache</code>. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/42d7e4312bcfe4c7d1257e1aff9c5a5c68f71495">42d7e43</a>)</p></li>
<li><p>Fixed: crash when having a <code>CPTableViewHeader</code> without a <code>CPTableView</code>. (<a href="https://github.com/Dogild">Dogild</a> - <a href="https://github.com/cappuccino/cappuccino/commit/c24c3868bb78d942e4309d18329da4f2cedd84a9">c24c386</a>)</p></li>
<li><p>Fixed: cache control was not set properly in <code>CPURLRequest</code>. (<a href="https://github.com/Dogild">Dogild</a> - <a href="https://github.com/cappuccino/cappuccino/commit/5c60819668b1446127e4989e059bc6f3b3c46cee">5c60819</a>)</p></li>
<li><p>Fixed : <code>capp_env</code> did not use the master version of cappuccino. (<a href="https://github.com/primalmotion">primalmotion</a> - <a href="https://github.com/cappuccino/cappuccino/commit/584aebf76bf644fc18a630cf30be445301ec394b">584aebf</a>)</p></li>
<li><p>Fixed: cursor key binding methods did not fire in IE 11. (<a href="https://github.com/herbatnik">herbatnik</a> - <a href="https://github.com/cappuccino/cappuccino/commit/43a248069921716ae2d30879ef9d7481b0ba3cfa">43a2480</a>)</p></li>
<li><p>Fixed: first <code>CPPopUpItem</code> is always selected if selected binding value is set before content binding value. (<a href="https://github.com/mrcarlberg">mrcarlberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/5c58552d9165b0f5804e624ca7a0cb1472260519">5c58552</a>)</p></li>
<li><p>Fixed: <code>CPObjectController -setEntityName</code> did not work. (<a href="https://github.com/mrcarlberg">mrcarlberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/cd92ebd69cad6b3cd6014614f3ff2f8935faa332">cd92ebd</a>)</p></li>
<li><p>Fixed: ‘Unknown function getPropertyCSSValue’ error in Chrome in <code>CPAnimationContext</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/57189183d642e02c5724c82af178f19788cc0d3b">571891</a>)</p></li>
<li><p>Fixed: <code>CPTableView</code> <code>viewBasedCib</code> manual test was broken due to <code>CPBox</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/1575c2bc10715199d092ca359a624ddfe75375ee">1575c2b</a>)</p></li>
<li><p>Fixed: manual test <code>SmartFoldersDemo</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/ffcac677e0d41bcd5e54654540f510f626d5d7e1">ffcac67</a>)</p></li>
<li><p>Fixed: <code>CPCollectionView</code> content binding. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/f67fafdb8ece3a6cd921c63c9d9eaf9f58c86493">f67faf</a>)</p></li>
<li><p>Fixed: when dependent key paths use a relationship, only the first added observer would observe the attribute for the relationship object. (<a href="https://github.com/mrcarlberg">mrcarlberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/ae5d31746e9d157f2500a6e4a5996fb0d451a577">ae5d317</a>)</p></li>
<li><p>Fixed: <code>CPViewController -isViewLoaded</code> property was always set to NO in async mode. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/3e6e5f95ecc088126445eafa25e910263f7e6bf4">3e6e5f9</a>)</p></li>
<li><p>Fixed: <code>CPObject +implementsSelector:</code> did not work with proxies and KVO swizzled classes. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/a1926982c64216041e74e3502732e9ee7cf95b2e">a192698</a>)</p></li>
<li><p>Fixed: date comparisons in <code>CPPredicateEditor</code>. (<a href="https://github.com/eussam">eussam</a> - <a href="https://github.com/cappuccino/cappuccino/commit/818d5d782fe3771563b0ada4e3f1e9af8aff0030">818d5d5</a>)</p></li>
<li><p>Fixed: unit tests for <code>CPPredicateEditor</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/c38daac6469e2cae92a07d9fc3f9f0991bef5d08">c38daac</a> <a href="https://github.com/cappuccino/cappuccino/commit/c31f5b1d593484379dca362567b5e1b06a487b9b">c31f5b1</a>)</p></li>
<li><p>Fixed: <code>CPPredicateEditor</code> predicate when the template has a <code>CPFloatAttributeType</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/333e112e375f74e0d812cc9c02f2d90e2a825b05">333e112</a>)</p></li>
<li><p>New: enable autoscrolling for table view columns. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/abb0799817aaad2a10e093eeaae3c30907a202dd">abb0799</a>)</p></li>
<li><p>Fixed: <code>CPColorPanel</code> always opened in main platform window. (<a href="https://github.com/didierkorthoudt">didierkorthoudt</a> - <a href="https://github.com/cappuccino/cappuccino/commit/9273c9ee10e109ca3698306c975ef85a6280ba85">9273c9e</a>)</p></li>
<li><p>Fixed: <code>CPTextField</code> didn’t optimize tracking areas management. (<a href="https://github.com/didierkorthoudt">didierkorthoudt</a> - <a href="https://github.com/cappuccino/cappuccino/commit/1927bb479813ffc3849d421aa424c356ab49425f">1927bb4</a>)</p></li>
<li><p>Fixed: right mouse clicking during a drag operation canceled it. (<a href="https://github.com/didierkorthoudt">didierkorthoudt</a> - <a href="https://github.com/cappuccino/cappuccino/commit/a28f9ceebac335a2a983dfd59ab0e5e100454bf8">a28f9ce</a>)</p></li>
<li><p>Fixed: the background of the brightness slider had a uniform color in <code>CPColorPicker</code> (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/a84a7bb7c344ec674341fd12248fff8f7838cbb8">a84a7bb</a>)</p></li>
<li><p>New: merged in the parser and compiler that is used in the node objj-runtime. (<a href="https://github.com/mrcarlberg">mrcarlberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/e134f910aadb6ccf9a518e00d0dd7d85107d53fb">e134f91</a>)</p></li>
<li><p>Fixed: missing import in <code>CPCollectionView</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/5f12291ac4fab4351f0cfbc85df88066ac6ad329">5f1229</a>)</p></li>
<li><p>New: removed Native Host. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/5bc3609ad7def39309d939e68e8497d428763527">5bc3609</a>)</p></li>
<li><p>Fixed: <code>CPView</code> received multiple <code>-viewDidHide/Unhide</code> messages. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/12dde5154fbe9e1b27ec5a5d98ac6cb4993b38e1">12dde51</a>)</p></li>
<li><p>New: removed rakefile. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/80bfeb1a29ba52a0a3fd35a0189c48f9e8b5971e">80bfeb1</a>)</p></li>
<li><p>Fixed: XcodeCapp 'Preferences’ menu item not in the standard place. (<a href="https://github.com/enquora">enquora</a> - <a href="https://github.com/cappuccino/cappuccino/commit/b09cb2480464e1dccf45c40e892e344b7766d138">b09cb24</a>)</p></li>
<li><p>Fixed: <code>nib2cib</code>'ed files different with jake release and jake deploy. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/f4c11d14e734cb6e78dd998735cbfac8af4734b8">f4c11d1</a>)</p></li>
<li><p>Fixed: XcodeCapp <code>nib2cib</code> incorrect vs jake release. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/3e56c8ed8b27284defdf9f46e0e9809b644fde3a">3e56c8e</a>)</p></li>
<li><p>Fixed: <code>CPPasteBoard</code> dead code. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/a2960a7997ff82b12d9c679a449e46459d7dd4ee">a2960a7</a>)</p></li>
<li><p>Fixed: missing requirements in the README. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/f9cc77382a5fb3909198b22683a52c6d851d4274">f9cc773</a>)</p></li>
<li><p>Fixed: scrolling events were not dispatched to the <code>CPApp</code> on slower system under Chrome 52. (<a href="https://github.com/daboe01">daboe01</a> - <a href="https://github.com/cappuccino/cappuccino/commit/e4fce08effcee54287eaaa512ccf14891e805cad">e4fce08</a>)</p></li>
<li><p>Fixed: iOS virtual keyboard “done” button not working and tapping other text fields while editing (often) not working. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/4395c0764841655d1213002d9cd8da230b05f365">4395c07</a>)</p></li>
</ul>
<h3>Cucapp</h3>
<h5>Changes/Fixes</h5>
<ul>
<li>Fixed: the function <code>dumpGuiObject</code> was called two times for the class <code>CPScrollView</code> (<a href="https://github.com/t00f">t00f</a> - <a href="https://github.com/cappuccino/cucapp/commit/732d77ee8e686c74745df7dd4e128996920ad3f6">732d77e</a>)</li>
</ul>
Aparajita Fishman Leaves/blog/2016/08/aparajita-leaves.html2016-08-24T00:00:00+00:002016-08-24T00:00:00+00:00Alexander Ljungberg<p>As of last month, Aparajita Fishman has left the Cappuccino project to take on a role at Apple.</p>
<p>Aparajta was one of our longest serving core developers. He joined the team in 2011 and has contributions going back to mid 2010 before that. He contributed...</p><p>As of last month, Aparajita Fishman has left the Cappuccino project to take on a role at Apple.</p>
<p>Aparajta was one of our longest serving core developers. He joined the team in 2011 and has contributions going back to mid 2010 before that. He contributed countless hours to the benefit of all who enjoy Cappuccino. Some highlights include the Cup upload framework, extensive work on font metrics, XcodeCapp, <code>CPSearchField</code>, how themes are defined, our documentation, <code>CPLog</code>, <code>CPGraphics</code> drawing, <code>CPFormatter</code>, <code>capp_lint</code>, <code>nib2cib</code>, key view loop, child windows, and the list goes on. Along the way he fixed countless bugs: so many it would be silly to try to list them all. Seriously, <a href="https://github.com/cappuccino/cappuccino/commits?author=aparajita">see for yourself</a>.</p>
<p>Aparajita, thank you for all your great work on Cappuccino and we hope you’ll show them how it’s done over at Apple!</p>
<p><em>- The Cappuccino Core Developer Team</em></p>
CappCon 2016/blog/2016/04/cappcon-2016.html2016-04-17T00:00:00+00:002016-04-17T00:00:00+00:00Alexandre Wilhelm<h3>Major releases</h3>
<p>Cappuccino 0.9.9 has been released! This release arrives almost exactly a year after the 0.9.8 version and in that year we have been busy. No matter what your Cappuccino app is about, there is something in this release for you. As always...</p><h3>Major releases</h3>
<p>Cappuccino 0.9.9 has been released! This release arrives almost exactly a year after the 0.9.8 version and in that year we have been busy. No matter what your Cappuccino app is about, there is something in this release for you. As always the full change log and release notes are available <a href="/cappuccino-release-notes.html">here</a>.</p>
<p><a href="https://github.com/nuagenetworks/nukit">NUKit</a>, <a href="https://github.com/nuagenetworks/nukit-theme">NUAristo</a>, <a href="https://github.com/nuagenetworks/objj-bambou">Bambou</a> and <a href="https://github.com/nuagenetworks/garuda">Garuda</a> have been released by Antoine Mercadal and Christophe Serafin from <a href="http://www.nuagenetworks.net">Nuage Networks</a>. This collection of frameworks allows you to easily create a new Cappuccino Application which will communicate with a ReST Python server generated by Garuda. And good news, it’s lightweight due to the flat theme NUAristo!</p>
<p><a href="https://github.com/mrcarlberg/LightObject">LightObject Framework</a> has been released by Martin Carlberg from <a href="http://www.oops.se">Oops</a>. Now you can create your Cappuccino Application model through Xcode. Martin showed this framework communicating with an Objective-J server running on NodeJS during the Cappcon.</p>
<h3>The 31st March 2016</h3>
<p>The CappCon 2016 was held at the University Of Liège in Belgium. Around 50 people came for this day and there were talks for everybody - technical talks as well as abstract talks about Cappuccino.</p>
<h3>The Talkers</h3>
<ul>
<li><p><a href="https://youtu.be/pdUv9ewZhM4">Introduction video</a>.</p></li>
<li><p><a href="https://twitter.com/slevenbits">Alexander Ljunberg</a> introduced the audience to Cappuccino and the 0.9.9 release. Nice talk presenting how strong the foundations of Cappuccino are and why this framework was created. You can find the video <a href="https://youtu.be/kCu2_PPn_qE">here</a> as well as the slides used <a href="/downloads/cappCon2016/CappCon%202016%20Keynote.pdf">here</a>.</p></li>
<li><p><a href="https://twitter.com/primalmotion">Antoine Mercadal</a> showed a nice demo about the product they are creating at <a href="http://www.nuagenetworks.net">Nuage Networks</a>. Nuage Networks took the occasion to release new open source frameworks and Antoine Mercadal showed a demo of these new toys. The new frameworks released are <a href="https://github.com/nuagenetworks/nukit">NUKit</a>, <a href="https://github.com/nuagenetworks/nukit-theme">NUAristo</a>, <a href="https://github.com/nuagenetworks/objj-bambou">Bambou</a> and <a href="https://github.com/nuagenetworks/garuda">Garuda</a>. You can find the video <a href="https://youtu.be/9hqpS_pJf3A">here</a> as well as the slides used <a href="/downloads/cappCon2016/AntoineMercadal-CappCon2016.pdf">here</a>.</p></li>
<li><p><a href="https://twitter.com/mrcarlberg">Martin Carlberg</a> presented how <a href="http://www.oops.se">Oops</a> uses Cappuccino. Our Swedish core team member showed us a demo of the <a href="https://github.com/mrcarlberg/LightObject">LightObject Framework</a>, a Core Data framework for Cappuccino. Notably the server used for the demo was written in Objective-J and runs on NodeJS. You can find the video <a href="https://youtu.be/j_W_kLBoPIw">here</a> as well as the slides used <a href="/downloads/cappCon2016/MartinCarlberg-CappCon2016.pdf">here</a>.</p></li>
<li><p><a href="https://twitter.com/rwelephant">Tim Howell</a> told us his story with Cappuccino and his company <a href="http://www.rwelephant.com">RWElephant</a>. New to Cappuccino and wondering about how difficult it is to use this framework? You should watch this story where Tim explains how he learned Cappuccino and Cocoa during a road trip. You can find the video <a href="https://youtu.be/dae0-u1fBvY">here</a> as well as the slides used <a href="/downloads/cappCon2016/RWElephant-CappCon2016.pdf">here</a>.</p></li>
<li><p><a href="https://twitter.com/wilhelmalex">Alexandre Wilhelm</a> showed what kind of testing tools Cappuccino provides. If you want to learn more about testing, OJTest, Cucapp or Cucumber you need to watch his talk. You can find the video <a href="https://youtu.be/pC1FB0FURYs">here</a> and the slides used <a href="/downloads/cappCon2016/AlexandreWilhelm-CappCon2016.pdf">here</a>.</p></li>
<li><p><a href="https://twitter.com/t00f67">Christophe Serafin</a> presented tricks and tips for Cappuccino during his talk. What Jake is, how it works, how to organize your project, your xibs and more. If you are about to create a new application, you should watch his presentation. You can find the video <a href="https://youtu.be/oTOYJiKw17g">here</a> and the slides used <a href="/downloads/cappCon2016/ChristopheSerafin-CappCon2016.pdf">here</a>.</p></li>
<li><p><a href="https://twitter.com/slevenbits">Alexander Ljunberg</a> closed this dense day with a “What’s next ?” talk. You can find the video <a href="https://youtu.be/e7Xx8EQy1xo">here</a>.</p></li>
</ul>
<h3>Every good thing has an end</h3>
<p>After 8 hours of talking about Cappuccino, it was the time to celebrate this second CappCon! We guess we all agree that Belgium beers have a good reputation (which they deserve) and we hope that everybody had fun during this evening!</p>
<p>We hope that everybody enjoyed this CappCon and had a great time in Belgium!</p>
<p>It was very exciting for us and we hope to organize another CappCon soon again!</p>
<p>To finish , we would like to thanks our sponsors who made this possible! Thank you to <a href="http://www.nuagenetworks.net">Nuage Networks</a>, <a href="http://www.oops.se">Oops</a>, <a href="http://www.rwelephant.com">RWElephant</a> and the <a href="https://www.ulg.ac.be">University of Liège</a>.</p>
<p><em>- The Cappuccino Core Developer Team</em></p>
Cappuccino News 2016 April 1st/blog/2016/04/cappuccino-news-2016-04-01.html2016-04-01T00:00:00+00:002016-04-01T00:00:00+00:00Alexandre Wilhelm<p>Here’s a quick update on what’s new with Cappuccino in the last month.</p>
<h3>Community</h3>
<p>Cappuccino 0.9.9 has now been released! This release follows almost exactly a year from 0.9.8 and in that year we have been busy. No matter what your Cappuccino app...</p><p>Here’s a quick update on what’s new with Cappuccino in the last month.</p>
<h3>Community</h3>
<p>Cappuccino 0.9.9 has now been released! This release follows almost exactly a year from 0.9.8 and in that year we have been busy. No matter what your Cappuccino app is about, there is something in this release for you. You should check it out <a href="http://www.cappuccino-project.org/blog/2016/03/cappuccino-0-9-9.html">at the official release post</a>.</p>
<p>If you missed the CappCon2016, we will provide the story, videos, powerpoint and pictures about this amazing day at the Univeristy of Liège soon!</p>
<h3>Cappuccino</h3>
<h5>New</h5>
<ul>
<li><p>New: Cappuccino 0.9.9. (<a href="https://github.com/aljungberg">aljungberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/ecac17a00a1e39dae59435d2bcc3558be95a0025">ecac17a</a>)</p></li>
<li><p>New: added method <code>CPViewController -loadViewAsynchronously:</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/b12d1491d469fd1979276e1caea22c3c4525346d">b12d149</a>)</p></li>
<li><p>New: <code>nib2cib</code> support for <code>CPButton -imageScaling</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/edbc1baf323813af48ced3e695449a301d0ffc14">edbc1ba</a>)</p></li>
<li><p>New: added gitter badge in the README. (<a href="https://github.com/Dogild">Dogild</a> - <a href="https://github.com/cappuccino/cappuccino/commit/598a482538397107d122f372ff3360af5f841134">598a482</a>)</p></li>
</ul>
<h5>Changes/Fixes</h5>
<ul>
<li><p>Fixed: race condition when editing a <code>CPTextField</code> in a <code>CPTableView</code> with a double click, focus was lost in some conditions. (<a href="https://github.com/aparajita">aparajita</a> - <a href="https://github.com/cappuccino/cappuccino/commit/8f1191733beaf0f402018240804298bcfe8c1cf1">8f11917</a>)</p></li>
<li><p>Fixed: no exception thrown if a plist was not valid in <code>CPKeyedUnarchiver</code>. (<a href="https://github.com/mrcarlberg">mrcarlberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/a995f3ab520836fdfce216287b851f84ff10ad38">a995f3a</a>)</p></li>
<li><p>New: <code>CPNumber -integerValue</code> and <code>CPString -integerValue</code>. (<a href="https://github.com/mrcarlberg">mrcarlberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/a10dfa4ab40e31c2a773c9d1f1bebebbdcd0bcaa">a10dfa4</a>)</p></li>
<li><p>Fixed: outdated sourcemap syntax prevented showing the right sources when debugging in the browser. <code>//@ sourceURL=...</code> has now been replaced by <code>//# sourceURL=...</code> when compiling Objective-J code. (<a href="https://github.com/mrcarlberg">mrcarlberg</a> - <a href="https://github.com/cappuccino/cappuccino/commit/3ba215887cc40f3f7287675c376f02c063ed2cbd">3ba2158</a>)</p></li>
<li><p>Fixed: <code>CPSearchField</code> did not support <code>CPMenuItem -setIndentationLevel:</code>. (<a href="https://github.com/cacaodev">cacaodev</a> - <a href="https://github.com/cappuccino/cappuccino/commit/6d1a094b1517edac9f835f136d5f3f0e82b03fe9">6d1a094</a>)</p></li>
</ul>
<h3>Cucapp</h3>
<h5>Changes/Fixes</h5>
<ul>
<li><p>Fixed: accidental Nuage Networks specific code related to text fields made it into the general release. (<a href="https://github.com/Dogild">Dogild</a> - <a href="https://github.com/cappuccino/cucapp/commit/67c767c8b3ca17e75d52e8f19efed028b64df41d">67c767c</a>)</p></li>
<li><p>Fixed: wrong default path for loading Cucapp in the CLI (<a href="https://github.com/Dogild">Dogild</a> - <a href="https://github.com/cappuccino/cucapp/commit/a924fcf5e26dc9e0a890a63873c65c6a5773a7ea">a924fcf</a>)</p></li>
<li><p>Fixed: private API <code>_mainDOMWindow</code> did not actually return the main DOM window but the key DOM window. (<a href="https://github.com/Dogild">Dogild</a> - <a href="https://github.com/cappuccino/cucapp/commit/2fe795f5e853f148d95a22ea18a8df39b4304ddd">2fe795f</a>)</p></li>
</ul>
Cappuccino 0.9.9/blog/2016/03/cappuccino-0-9-9.html2016-03-31T00:00:00+00:002016-03-31T00:00:00+00:00Alexander Ljungberg<p>As announced at CappCon 2016, Cappuccino 0.9.9 has now been released! This release follows almost exactly a year from 0.9.8 and in that year we have been busy. No matter what your Cappuccino app is about, there is something in this release for you...</p><p>As announced at CappCon 2016, Cappuccino 0.9.9 has now been released! This release follows almost exactly a year from 0.9.8 and in that year we have been busy. No matter what your Cappuccino app is about, there is something in this release for you.</p>
<h4>Notable Improvements</h4>
<p>There is one backwards incompatible change. See the notes on tracking areas below.</p>
<h5>Full strings based localisation support</h5>
<p>You can now localise your Cappuccino app the same way you would a Mac app. Many translation professionals know how to work with strings files and you might already have a favourite from your Mac or iOS apps. Now you can leverage those same resources for web apps. You can translate any text in your code as well as full cib files.</p>
<p>Whenever you want to use a string that can be translated:</p>
<pre><code>:::objj
[myTextField setStringValue:CPLocalizedString(@"Languages are hard.", @"")];
</code></pre>
<p>Then provide the translation in a <code>.strings</code> file:</p>
<pre><code>"Languages are hard." = "言語は難しいです。";
</code></pre>
<p>For more information, please refer to the Cocoa documentation for now. (As always, we are looking to improve our own documentation and invite you to help us out by writing tutorials or docs pages. We’d really appreciate it!)</p>
<p>There is one significant difference with Cocoa: you need to tell Cappuccino the names of your strings files. Cappuccino can’t guess which files you have since it can’t list folder contents through your web browser.</p>
<p>You do this by adding some keys to your <code>Info.plist</code> file:</p>
<pre><code>:::xml
<key>CPBundleLocalizableStrings</key>
<array>
<string>Localizable.strings</string>
<string>SecondLocalizable.strings</string>
<string>MainMenu.strings</string>
</array>
<key>CPBundleTypeOfLocalization</key>
<string>CPBundleBaseLocalizationType</string>
</code></pre>
<p>At this time, the locale detection is not perfect (because web browser standards for communication locale preferences are not perfect), but it should work for major languages and locales automatically.</p>
<h5>User Notification Center</h5>
<p>Deliver notifications to the user through their browser’s built in notification support. The browser may ask the user if they want to allow notifications, but assuming they do, your app will be able to send little OS level alerts whenever something of interest happens.</p>
<p>For example, in Safari this is how it might look like (but this will work in other browsers than Safari as well):</p>
<p><a href="/img/cpo-uploads/2016/03/CPUserNotification-1-edf6d9f5.png"><img width="456" height="187" src="/img/cpo-uploads/2016/03/CPUserNotification-1-edf6d9f5.png" /></a>
<a href="/img/cpo-uploads/2016/03/CPUserNotification-2-55b733c1.png"><img width="358" height="97" src="/img/cpo-uploads/2016/03/CPUserNotification-2-55b733c1.png" /></a></p>
<p>Note that user notifications are not supported by all browsers, and cannot be used from <code>file://</code> URLs in many (any?) current browser. So in other words, use a webserver to serve even your test pages if you want to try this feature.</p>
<h5>Cache</h5>
<p><code>CPCache</code> is a class which lets you easily cache objects which are expensive to create, and then set various policies (cost or count based) as to when to evict cached objects. It’s one of those classes you end up writing yourself sooner or later in every big app and now you no longer have to.</p>
<h5>Tracking Areas</h5>
<p>The new <code>CPTrackingArea</code> support brings tracking areas to Cappuccino. This should lead to performance benefits in your app since fewer irrelevant mouse events will be passed.</p>
<p>This is the only backwards incompatible change of Cappuccino 0.9.9: if you relied on <code>CPView</code> subclasses receiving <code>mouseEntered:</code>, <code>mouseExited:</code> or <code>mouseMoved:</code> events, you will now need to use a tracking area.</p>
<p>The easiest approach is to add an <code>updateTrackingAreas</code> method to your custom view code:</p>
<pre><code>- (void)updateTrackingAreas
{
[self removeAllTrackingAreas];
[self addTrackingArea:[[CPTrackingArea alloc] initWithRect:CGRectMakeZero()
options:CPTrackingMouseEnteredAndExited | CPTrackingMouseMoved | CPTrackingActiveInKeyWindow | CPTrackingInVisibleRect
owner:self
userInfo:nil]];
}
</code></pre>
<p>(<code>removeAllTrackingAreas</code> is a convenience method in Cappuccino that does not exist in Cocoa.)</p>
<p>Consider this code a starting point. If you would like to have improved performance, you should be smarter about your tracking areas and make your areas as small as possible with as few active tracking options as you need.</p>
<p>Check out this <a href="https://github.com/cappuccino/cappuccino/wiki/CPTrackingArea-introduction">tracking area introduction</a> on our wiki for more information.</p>
<h5>Retina support</h5>
<p>High DPI resolutions are now supported by default.</p>
<h5>capp_env</h5>
<p>This is a great new tool which gives you something like Python virtual environments for your Cappuccino apps. For all the details, see <a href="/blog/2016/03/capp_env.html">our capp_env tutorial</a>.</p>
<h5>XcodeCapp 4</h5>
<p>XcodeCapp 4 comes with a brand new UI and much improved work flow for heavy users. You can find all the details in our updated <a href="/learn/xcode-basics.html">XcodeCapp tutorial</a>.</p>
<p><a href="/img/cpo-uploads/2016/03/xcodecapp-4-18b54c56.png"><img width="800" height="622" src="/img/cpo-uploads/2016/03/xcodecapp-4-18b54c56.png" /></a></p>
<h4>Performance Improvements</h4>
<p>There are performance improvements across the board in Cappuccino 0.9.9 – for some apps performance is up to 20% faster. There is no additional work needed: just upgrade and benefit. Enjoy!</p>
<hr>
<p>As always the full change log and release notes are available <a href="/cappuccino-release-notes.html">here</a>.</p>
<p>We hope you are as excited about Cappuccino 0.9.9 as we are and that you will help us spread the word, and that you will create some fantastic applications with it!</p>
<p><em>- The Cappuccino Core Developer Team</em></p>
<p><a href="/downloads.html">Download Cappuccino 0.9.9</a></p>
<p><a href="/cappuccino-release-notes.html">Full Release Notes</a></p>
Virtual Environments for Cappuccino/blog/2016/03/capp_env.html2016-03-05T00:00:00+00:002016-03-05T00:00:00+00:00Antoine Mercadal<h3>capp_env</h3>
<p>It’s been a little while, but Cappuccino Tools now have a newcomer: <code>capp_env</code>. This new tool is like <code>virtualenv</code> for Python. It makes it possible to create multiple self-contained Cappuccino environments. This way you can have multiple parallel...</p><h3>capp_env</h3>
<p>It’s been a little while, but Cappuccino Tools now have a newcomer: <code>capp_env</code>. This new tool is like <code>virtualenv</code> for Python. It makes it possible to create multiple self-contained Cappuccino environments. This way you can have multiple parallel Cappuccino installations, with different sets of libraries, and they won’t interfere with each other. This is extremely useful when you work on multiple projects with multiple branches. Here at Nuage Networks, we (sadly) have to deal with a lot of different branches. Each of them uses a specific version of Cappuccino, and a specific version of all our internal Frameworks. Before <code>capp_env</code>, switching from one branch to another required a lot of time to actually rebuild the different libraries and Cappuccino itself. And that was just not right.</p>
<p><code>capp_env</code> fixes this problem by providing a way to keep different Cappuccino versions in confined environments. When you switch from a branch to another, you will just need to switch environment as well.</p>
<p>The way it works is simple. First you create some new environments by doing:</p>
<pre><code>capp_env -p ~/.cappuccino/environments/master
capp_env -p ~/.cappuccino/environments/v0.9.9 #teasing :)
</code></pre>
<p>This will run a bootstrap process and install the latest <code>cappuccino-base</code> into that folder.</p>
<p>Then you can activate it by doing:</p>
<pre><code>source ~/.cappuccino/environments/master/bin/activate
</code></pre>
<p>This will update your <code>$PATH</code> to take binaries from the environment in question. It will also set <code>$CAPP_BUILD</code> to match.</p>
<p>From this point you can easily switch between different environments with just a simple command:</p>
<pre><code>source ~/.cappuccino/environments/master/bin/activate
git checkout master
jake install
source ~/.cappuccino/environments/v0.9.9/bin/activate
git checkout v0.9.9
jake install
</code></pre>
<p>This example would build and install the master branch in <code>~/.cappuccino/environments/master/narwhal</code> and Cappuccino 0.9.9 into `~/.cappuccino/environments/v0.9.9.</p>
<p>Now if you do:</p>
<pre><code>source ~/.cappuccino/environments/master/bin/activate
cd TNKit && jake release && jake debug
</code></pre>
<p>It will build the TNKit using the master version of Cappuccino.</p>
<pre><code>source ~/.cappuccino/environments/v0.9.9/bin/activate
cd TNKit && jake release && jake debug
</code></pre>
<p>And this will build the <code>TNKit</code> using the 0.9.9 version. As per the environment you’re in, doing <code>capp gen -F TNKit .</code> will either use the version built against the master, or the version built against 0.9.9, respectively.</p>
<p>To deactivate an environment you can either type <code>capp_env_deactivate</code> or close your Terminal.</p>
<p>Available today in Cappuccino’s master. Enjoy!</p>