<?xml version="1.0" encoding="utf-8"?>
        <rss 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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">
        <channel>
        <title>Owner Blogs</title><description>Owner Blogs Feed Informer</description><image>
            <url>http://feed.informer.com/images/fd.gif</url>
            <title>Powered By Feed Informer</title>
            <link>http://feed.informer.com/</link>
            </image>
        <link>http://app.feed.informer.com/digest3/T4NDU40JMU.html</link>
        <copyright>Respective post owners and feed distributors</copyright>
        <generator>http://feed.informer.com/</generator>

<item>
	<title>One Letter Repository Status for Git, Mercurial and Subversion</title>
	<description>&lt;p&gt;These days we&amp;#8217;re using a variety of version control systems and switching between them regularly.&lt;/p&gt;

&lt;p&gt;My most used command is checking my working directory status, so I&amp;#8217;ve distilled it down to a one-letter shortcut that determines which type of repository I&amp;#8217;m in, then does an appropriate status for that system.&lt;/p&gt;

&lt;p&gt;I just setup an alias like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;s='~/s/s.sh'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So just type &lt;code&gt;s&lt;/code&gt; and don&amp;#8217;t worry about which version control you&amp;#8217;re in.&lt;/p&gt;

&lt;div&gt;&lt;script src='https://gist.github.com/5118028.js?file='&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href="https://gist.github.com/briangershon/5118028/"&gt;Here&amp;#8217;s the code on gist.github.com&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/E9bDdnOmwK8" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/E9bDdnOmwK8/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/E9bDdnOmwK8/?</guid>
	<pubDate>Tue, 09 Apr 2013 07:53 GMT</pubDate>

</item>

<item>
	<title>Testing JavaScript Code Running Google Closure Library using Mocha and PhantomJS (or Jasmine)</title>
	<description>&lt;p&gt;Here are several options for setting up JavaScript unit testing for code built with the Google Closure Library, albeit these options are helpful for testing a wide variety of JavaScript projects.&lt;/p&gt;

&lt;p&gt;Google Closure Library is self-described as a &amp;#8220;broad, well-tested, modular, and cross-browser JavaScript library.&amp;#8221;&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re using the &lt;a href="http://www.limejs.com"&gt;LimeJS&lt;/a&gt; HTML5 game framework, which is built on this library.&lt;/p&gt;

&lt;h2&gt;Our Contestants&lt;/h2&gt;

&lt;h3&gt;1. Headless testing with Jasmine 1.2&lt;/h3&gt;

&lt;p&gt;Jasmine works well. There are two approaches you can use: an HTML runner with jasmine.js, or the Ruby-based runner. Originally we were hoping to take the same approach as the Ruby-runner (with all batteries included, including easy headless testing) but using Mocha and Node.js instead to be on a full JavaScript stack.  Though we ended up having to go to an HTML runner + mocha.js to get the DOM testing to work, in scenario 3 below.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In hindsight, by ending up with the HTML + JS approach in scenario 3, Jasmine and Mocha + PhantomJS are very similar approaches.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;2. Mocha testing on Node.js&lt;/h3&gt;

&lt;p&gt;Mocha testing on Node.js works well (easy setup, no html test runner required), but I wasn&amp;#8217;t able to get headless DOM working. If your tests don&amp;#8217;t require DOM, this is a good way to go. &lt;em&gt;One issue: It takes more effort to debug tests with breakpoints because the code is running on node.js. In the other scenarios, you can just add a &lt;code&gt;debugger&lt;/code&gt; line and debug the tests in the browser.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;3. Headless testing with Mocha and PhantomJS&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Our winner&lt;/strong&gt;: Headless testing with Mocha and PhantomJS via &lt;a href="https://github.com/metaskills/mocha-phantomjs"&gt;mocha-phantomjs&lt;/a&gt; allows us to use JavaScript tooling, headless DOM testing and a nice Jasmine BDD style for writing tests.&lt;/p&gt;

&lt;h3&gt;4. Testing with the Google Closure Library testing framework&lt;/h3&gt;

&lt;p&gt;You can use the Google Closure Library testing framework, which is more of a traditional JUnit style framework and not a BDD-style framework like Jasmine or Mocha. Please check out the Closure documentation for more info.&lt;/p&gt;

&lt;h2&gt;Let&amp;#8217;s Get Testing&lt;/h2&gt;

&lt;p&gt;Here&amp;#8217;s how each can be setup.&lt;/p&gt;

&lt;p&gt;Assume you keep your tests in a &lt;code&gt;my-project/spec&lt;/code&gt; folder and your code is under a peer &lt;code&gt;my-project/scripts&lt;/code&gt; folder. Assume all test-related files discussed below are in the &lt;code&gt;./spec&lt;/code&gt; folder and that tests are kicked off via a script in that folder.&lt;/p&gt;

&lt;h3&gt;1. Jasmine&lt;/h3&gt;

&lt;p&gt;This is a personal favorite. It has all batteries included and doesn&amp;#8217;t need a separate HTML runner for DOM testing if using the Ruby Gem. We liked this approach, and tried to do it with Mocha + node.js (to get the same features as the Ruby Gem, but on a JavaScript stack) though ultimately went with Scenario 3 below.&lt;/p&gt;

&lt;p&gt;For general setup of headless Jasmine testing, see my &lt;a href="https://github.com/briangershon/headless-jasmine-boilerplate"&gt;jasmine-headless-boilerplate&lt;/a&gt; repository.&lt;/p&gt;

&lt;p&gt;Once setup, to tailor for Google Closure Library, in &lt;code&gt;javascripts/support/jasmine.yml&lt;/code&gt; (setup by default with &lt;code&gt;jasmine init&lt;/code&gt;) add your project&amp;#8217;s base.js and generated deps.js file to &lt;code&gt;./spec&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;src_files:
    - scripts/libs/closure/closure/goog/base.js
    - scripts/deps.js
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can then just create a standard Jasmine test file with goog.require() statements at the top to bring in the module dependencies:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;goog.require('the.module.I.am.testing');
goog.require('a.dependency');

describe("the.module.I.am.testing", function () {

});
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;2. Mocha Testing on Node.js&lt;/h3&gt;

&lt;p&gt;After setting up node.js and npm, you can create a package.json file to make it easy to setup all the dependencies by just running &lt;code&gt;npm install&lt;/code&gt; in your &lt;code&gt;./spec&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;If you have a script that kicks off the tests, you can optionally add that to the &amp;#8220;scripts &gt; tests&amp;#8221; key like seen below so that you can just run &lt;code&gt;npm test&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Also, you&amp;#8217;ll need to use the &lt;a href="https://github.com/gatapia/nclosure"&gt;nclosure&lt;/a&gt; library to allow node.js to bring in dependencies via goog.require().&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;./spec&lt;/code&gt; create 3 files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;closure.json to tell nclosure library where your files are&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;package.json to setup all your node.js dependencies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;a run script&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Here are examples:&lt;/p&gt;

&lt;p&gt;closure.json&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  additionalDeps:['../scripts/deps.js'],
  closureBasePath:'/this/has/to/be/an/absolute/path/in/my/experience/scripts/libs/closure/'
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;It took some time to figure out the right file paths&lt;/strong&gt;. Basically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&amp;#8220;additionalDeps&amp;#8221; should be a relative path from where you&amp;#8217;re running the script that runs the tests. If you&amp;#8217;re running tests from a &lt;code&gt;./spec&lt;/code&gt; folder, and the code lives in a peer (to &lt;code&gt;./spec&lt;/code&gt;) ../scripts folder, use the example above.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;However the closureBasePath only worked as an absolute path, plus you leave off the trailing &lt;code&gt;/closure/goog&lt;/code&gt; (since often closure is in a lib/closure/closure/goog directory structure).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I assume this could be fixed with either a patch to nclosure or maybe I wasn&amp;#8217;t doing something correctly. I also tried setting this as a parameter to the actual &lt;code&gt;require('nclosure').nclosure();&lt;/code&gt; call at the top of the tests, but no difference. This would need to be solved to make it easy for a team to run tests locally.&lt;/p&gt;

&lt;p&gt;package.json&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  "name": "our-test-framework",
  "version": "0.0.0",
  "description": "## Unit Tests",
  "main": "index.js",
  "scripts": {
    "test": "sh runtests.sh"
  },
  "repository": "",
  "author": "",
  "license": "BSD",
  "dependencies": {
      "chai":"~1.3",
      "sinon": "~1.5",
      "nclosure": "~0.4",
      "mocha": "~1.6"
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;runtests.sh&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/sh
./node_modules/.bin/mocha --recursive --timeout 10000 --reporter spec your/folder/to/your/specs
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Here&amp;#8217;s an example test file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require('nclosure').nclosure();

goog.require('my.module.goes.here');
goog.require('one.of.your.dependencies');

describe("my.module.goes.here test", function () {

});
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;3. Mocha Testing on PhantomJS (node.js not required)&lt;/h3&gt;

&lt;p&gt;This is the current winner for our specific needs. It&amp;#8217;s mainly JavaScript based, runs headless DOM tests, and supports a nice BDD syntax.&lt;/p&gt;

&lt;p&gt;This has some additional dependencies beyond the setup above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install PhantomJS, which on OSX is as easy as &lt;code&gt;brew install phantomjs&lt;/code&gt; via Homebrew.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bring down mocha-phantomjs.coffee and the mocha-phantomjs folder from &lt;a href="https://github.com/metaskills/mocha-phantomjs"&gt;mocha-phantomjs&lt;/a&gt; and put those in your &lt;code&gt;./spec&lt;/code&gt; folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bring in dependencies mocha.js and mocha.css from root of &lt;a href="https://github.com/visionmedia/mocha"&gt;mocha repository&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bring in third-party libraries like &lt;a href="https://github.com/LearnBoost/expect.js/"&gt;expect.js&lt;/a&gt; and &lt;a href="http://sinonjs.org"&gt;sinon.js&lt;/a&gt; used by test runner HTML below. (We started with Chai&amp;#8217;s &amp;#8220;expect&amp;#8221; assertion framework, but the assertion code didn&amp;#8217;t nicely pass linting, so went with the very similar expect.js)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Instead of using the ./mocha test runner, your run-script can call each test like so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;phantomjs mocha-phantomjs.coffee javascripts/mycontroller_spec.html
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In addition to your test js file, you need an html file test runner to setup DOM for your tests.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s an example of mycontroller_spec.html:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Unit Tests&lt;/title&gt;
    &lt;meta charset="utf-8"&gt;
    &lt;link rel="stylesheet" href="../../../node_modules/mocha/mocha.css" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id="mocha"&gt;&lt;/div&gt;
    &lt;script src="../../../../scripts/libs/closure/closure/goog/base.js"&gt;&lt;/script&gt;
    &lt;script src="../../../../scripts/deps.js"&gt;&lt;/script&gt;
    &lt;script src="../../../javascripts/support/sinon-1.4.2.js"&gt;&lt;/script&gt;
    &lt;script src="../../../javascripts/support/mocha.js"&gt;&lt;/script&gt;
    &lt;script src="../../../javascripts/support/expect.js"&gt;&lt;/script&gt;
    &lt;script&gt;
      mocha.ui('bdd'); 
      mocha.reporter('html');
    &lt;/script&gt;
    &lt;script src="mycontroller_spec.js"&gt;&lt;/script&gt;
    &lt;script&gt;
      if (window.mochaPhantomJS) {
        mochaPhantomJS.run();
      } else {
        mocha.run();
      }
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The mycontroller_spec.js test file doesn&amp;#8217;t require any special code, just using the normal goog.require():&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;goog.require('my.module.goes.here');
goog.require('one.of.your.dependencies');

describe("my.module.goes.here test", function () {

});
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Other thoughts and ideas&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For tests requiring DOM: Is it possible to substitute zombie.js instead of phantomjs?  The main reason is that then the whole stack could be in node.js and has fewer dependencies (since it wouldn&amp;#8217;t require phantomjs and mocha-phantomjs).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Selenium is another option for testing code against DOM on real browsers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;References To Bookmark&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/LearnBoost/expect.js/"&gt;expect.js&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://sinonjs.org/docs/"&gt;Sinon.JS&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://robdodson.me/blog/2012/05/28/mocking-requests-with-mocha-chai-and-sinon/"&gt;Mocking Requests With Mocha, Chai and Sinon&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/M5adBuVL-_Y" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/M5adBuVL-_Y/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/M5adBuVL-_Y/?</guid>
	<pubDate>Wed, 24 Oct 2012 11:24 GMT</pubDate>

</item>

<item>
	<title>Favorite Tuesday Talks at 360iDev 2012</title>
	<description>&lt;p&gt;Here were four talks I enjoyed, plus Game Jam.&lt;/p&gt;

&lt;h2&gt;Poking a Hole in the Sandbox, using URLs on iOS&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;By Greg Pierce, &lt;a href="http://twitter.com/agiletortoise"&gt;@agiletortoise&lt;/a&gt;, &lt;a href="http://agiletortoise.com/blog/2012/9/11/360idev-poking-a-hole-in-the-sandbox-using-urls-on-ios.html"&gt;Slides&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Lightweight local messaging between apps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A way to test if certain apps are installed, great for cross promotion too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A protocol for iOS interapp communication &lt;a href="http://x-callback-url.com"&gt;http://x-callback-url.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;It’s All in the Tools&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;By Nathan Eror, &lt;a href="http://twitter.com/neror"&gt;@neror&lt;/a&gt;, &lt;a href="http://neror.us/JNhY"&gt;Slides&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How to wield Xcode with keyboard shortcuts (Jump bar: &lt;code&gt;^[1-6]&lt;/code&gt;, learn keys from top menu items &lt;code&gt;View&lt;/code&gt; and &lt;code&gt;Navigation&lt;/code&gt;), Behaviors, breakpoints (logging, sounds, shell scripts, llvm allows breakpoints without restarting app), and powerful lldb debugging (formatters, summarizers, python integration, &lt;code&gt;.lldbinit&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses &lt;code&gt;make&lt;/code&gt; to automating (things like removing sqlite databases), supports autocompletion. See his blog entry on this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mountain Lion has Python bindings for Cocoa &amp;#8211; see a nice Quartz example in his slides.  This was news to me, and after Googling around didn&amp;#8217;t find much into about this.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Creating Container View Controllers&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;By Bob McCune, &lt;a href="https://twitter.com/bobmccune"&gt;@bobmccune&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;These are now easier to create in iOS 5+. A subtle API for adding/removing child controllers, get children, new callbacks. Only use this API within your container. Avoid common mistakes: Outside callers (since invalidates containers view of the world), disobedient children, meddling parents (let children be children)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Demo code is here: &lt;a href="https://github.com/tapharmonic"&gt;https://github.com/tapharmonic&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Galcon&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;By Phil Hassey, &lt;a href="https://twitter.com/philhassey"&gt;@philhassey&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phil following his gaming development passions with &lt;a href="http://www.galcon.com"&gt;Galcon&lt;/a&gt; and other games, including his new &lt;a href="http://www.oneclickmac.com/dynamite-jack-for-mac-review/"&gt;Dynamite Jack&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Game Jam (7pm to 7am)&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Phil Hassey&amp;#8217;s Galcon talk motivated me to give Game Jam a try.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I enjoyed this for several hours before drinking and socializing set in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Had fun with cocos2d and box2d.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/DCsOVuwEOxw" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/DCsOVuwEOxw/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/DCsOVuwEOxw/?</guid>
	<pubDate>Wed, 12 Sep 2012 10:46 GMT</pubDate>

</item>

<item>
	<title>Favorite Monday Talks at 360iDev 2012</title>
	<description>&lt;p&gt;My favorite talks are the developer-heavy ones. Here were three I enjoyed today.&lt;/p&gt;

&lt;h2&gt;Advanced Debugging Code (on Sunday)&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;By Kendall Helmstetter Gelner, &lt;a href="http://twitter.com/kendalldevdiary"&gt;@kendalldevdiary&lt;/a&gt;, &lt;a href="https://github.com/KiGi/AdvancedDebuggingCode"&gt;Slides (pdf) and Sample Project on Github&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This talk was chalk full of debugging goodness: logging, instruments, LLDB, breakpoints, ARC (less code == less to debug), Pony Debugger, Charles, Core Data.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Developing for Reuse&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;By Andria Jensen, &lt;a href="http://twitter.com/andriajensen"&gt;@andriajensen&lt;/a&gt;, slides: &lt;a href="http://bit.ly/U3RA4V"&gt;http://bit.ly/U3RA4V&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Andria had a great presentation and her slides are very useful for best practices in modularizing code for Objective-C and Xcode.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This very topic was resonating with me last night (&lt;a href="http://blog.evolvingbits.com/blog/2012/09/09/ios-automated-testing-refactored/"&gt;iOS Automated Testing: Refactored&lt;/a&gt;), and although she didn&amp;#8217;t cover the unit testing pieces, she went way beyond the first step of &lt;code&gt;git submodule&lt;/code&gt; modularization and went into Xcode workspaces, static libraries, bundles, and categories.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;PhoneGap&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;By Andrew Trice, &lt;a href="http://twitter.com/andytrice"&gt;@andytrice&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Andrew is a great resource and has some interesting projects on &lt;a href="https://github.com/triceam"&gt;Github&lt;/a&gt; such as app-UI,  Lil-Doodle, Fresh-Food-Finder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&amp;#8220;What&amp;#8217;s the difference between PhoneGap and Cordova?&amp;#8221;  They&amp;#8217;re the same code base right now.  Cordova is the open source project, and PhoneGap is Adobe&amp;#8217;s distribution, and they own the PhoneGap name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some libraries he uses are Backbone.js, and &lt;a href="http://leaflet.cloudmade.com"&gt;Leaflet&lt;/a&gt; (&amp;#8220;An Open-Source JavaScript Library for Mobile-Friendly Interactive Maps by CloudMade&amp;#8221;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;He showed some good plugins, like &lt;a href="https://github.com/triceam/phonegap-plugins/tree/master/iPhone/ExternalScreen"&gt;second screen support&lt;/a&gt; (native PhoneGap code to support multiple screens).  PhoneGap Plugins are nice since they give JavaScript access to anything you can do in the native layer, and there are many plugins that have already been developed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Presentation Suggestion I have: Many of the PhoneGap examples are business apps (Apple Store, LinkedIn, BBC Olympics, Zombie Jombie, Wikipedia, Untappd, Bit Timer, US Census Browser) though there are JavaScript libraries out there (such as lime.js) that make PhoneGap a nice platform for gaming too.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;&amp;#8220;Stop it! That Hurts!&amp;#8221; Common iOS Anti-Patterns&lt;/h2&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;By Carl Brown, &lt;a href="http://twitter.com/carlbrwn"&gt;@carlbrwn&lt;/a&gt;, slides: &lt;a href="http://t.co/JRWPcd1B"&gt;http://t.co/JRWPcd1B&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;His whole talk is great. Topics include Error handling, Asynchronous, Date, Security, Caching, View tagging, Core Data results, don&amp;#8217;t mix read-only and read-write data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;He&amp;#8217;s in Austin, home of SXSW Interactive where it &amp;#8220;Looks like any idiot can make an App&amp;#8221;, sees a lot of (bad) code&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Suggestions&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Read good code &amp;#8211; and NOT these from Github Objective-C &amp;#8220;Most Watched&amp;#8221;: three20, asi-http-request, AFNetworking, facebook-ios-sdk, Restkit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;His &amp;#8220;Rocket Engine&amp;#8221; for Responsive Code (to make sure you&amp;#8217;re not doing much on main thread): &lt;code&gt;NSAssert(![NSThread isMainThread], @"BOOM");&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses NMVC pattern (&amp;#8220;N&amp;#8221; for Network), essentially networking happens at the data layer and not throughout code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Carl had some criticisms with RestKit, so I asked him more details after the talk.  The criticism is more that Restkit tries to abstract what&amp;#8217;s local and what&amp;#8217;s remote, and it&amp;#8217;s not always clear what&amp;#8217;s happening. He turned me onto a nice recommendation: &lt;a href="https://github.com/magicalpanda/MagicalRecord"&gt;MagicalRecord&lt;/a&gt; which is a Category for Core Data that handles fetching of remote data and adding to Core Data.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Summary&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Program sober and rested, if possible&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leave other language&amp;#8217;s patterns at the door&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Program idiomatically (&amp;#8220;The specific grammatical, syntactic, and structural character of a given language.&amp;#8221;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don&amp;#8217;t fight the frameworks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/SneUE-rtAx0" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/SneUE-rtAx0/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/SneUE-rtAx0/?</guid>
	<pubDate>Mon, 10 Sep 2012 16:24 GMT</pubDate>

</item>

<item>
	<title>iOS Automated Testing: Refactored</title>
	<description>&lt;p&gt;My mobile projects lately include various combinations of JavaScript and Objective-C. Usually either 100% native iOS, or JavaScript running on a native iOS (or Android) layer.&lt;/p&gt;

&lt;p&gt;I also like to dabble with various projects, and am tired of the heavy weight of setting up new Xcode projects when I just want to experiment with some concepts.  The JavaScript side is already much lighter.&lt;/p&gt;

&lt;p&gt;I consider it heavy because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I have various snippets strewn across projects, and&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;getting Xcode tests up and running sucks the life out of me when I just want to jump into some code. &lt;em&gt;True, new Xcode projects do create boilerplate tests, but still requires setup for including other 3rd-party libraries like OCMock.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;An example scenario:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Today I&amp;#8217;m dabbling with geofencing in an app, but tomorrow I may want to use that code in a hybrid Cordova/PhoneGap app, Thursday I might want to refactor geofencing into something else.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I&amp;#8217;m very happy with Jasmine for testing JavaScript, since it&amp;#8217;s easy to setup and use.  I created a &lt;a href="https://github.com/briangershon/headless-jasmine-boilerplate"&gt;jasmine-headless-boilerplate&lt;/a&gt; project that is a starting place for those wanting to setup and run Jasmine JavaScript tests with their projects, and also be able to run it headless on their CI server or on Travis CI.&lt;/p&gt;

&lt;h2&gt;The New Plan&lt;/h2&gt;

&lt;p&gt;So for my Objective-C code, I have formulated a plan to deal with both of these at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Modularization: I&amp;#8217;m going to focus on moving code out of specific apps and into a personal library.  I&amp;#8217;ll then include that as a &lt;code&gt;git submodule&lt;/code&gt; in any new project I begin, whether native or hybrid.  I&amp;#8217;ve been doing some of this modularization already by avoiding the impulse to add too much code directly into UIViewControllers, but rather putting code into custom classes that are then used by the UIViewController.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Testing: The personal library will also be housed in a bare bones Xcode project, which will only have unit tests and 3rd-party testing libraries (like OCMock), so that I can ensure that code is tested before it gets used in my projects.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;When I&amp;#8217;m done, I&amp;#8217;ll have a versatile and well-tested library that I can quickly add to any project or experiment.&lt;/p&gt;

&lt;h3&gt;Here&amp;#8217;s a Starter Project to play with: &lt;a href="https://github.com/briangershon/enjoyable-ios-testing"&gt;Enjoyable iOS Testing&lt;/a&gt;&lt;/h3&gt;

&lt;h2&gt;Other Xcode Testing Starter Projects and Resources&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;m now looking around for bare bones Xcode starter projects to use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/magicalpanda/Xcode-Templates"&gt;Xcode-Templates&lt;/a&gt; looks interesting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/pivotal/cedar"&gt;Cedar&lt;/a&gt; looks even more interesting since it&amp;#8217;s closely related to Jasmine and looks like it will blend well with my JavaScript work.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/zEmaiIr_Y8I" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/zEmaiIr_Y8I/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/zEmaiIr_Y8I/?</guid>
	<pubDate>Sun, 09 Sep 2012 14:53 GMT</pubDate>

</item>

<item>
	<title>With Great JavaScript Comes Great Inspiration</title>
	<description>&lt;p&gt;I&amp;#8217;d say the theme of Day Two at JSConf 2012 was &lt;strong&gt;inspiration&lt;/strong&gt;, and was another great day of talks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I think my favorite talk (best presentation, very pragmatic) was Jake Archibald&amp;#8217;s &amp;#8220;Application Cache&amp;#8221; &amp;#8211; why it&amp;#8217;s useful and the potholes you&amp;#8217;ll encounter while using it. You&amp;#8217;ll want to watch this video.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The best demo for me was the presentation prior, Thomas Valletta&amp;#8217;s &amp;#8220;The Web Game Console&amp;#8221;, where he talked about his experience developing his mobile game with HTML and JS. He wrote a Web Bowling game using HTML/JS on iOS as the controller, and a Node.js websocket server for displaying the bowling alley.  The source is on Github (so you can setup your own server if you want) and if multiple people play at the same time it turns into &amp;#8220;battle bowling&amp;#8221; with multiple balls at the same time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Project Bikeshed was a great demo too. Not only did its authors put on a great daily video series, but Bikeshed allows you to do many useful things such as importing Flash SWF files, automatically turning those into JavaScript and then allowing you to show, combine, manipulate, animate any of those elements and use them in your JavaScript projects.  He demo&amp;#8217;d an iPad JavaScript game that was powered by Bikeshed.  You can also run Bikeshed on Node.js and send that to devices. With a one-line change, he showed running both scenarios.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ok, another great demo was on Open Data in the B-Track by Daniel Beauchamp &amp; Edward Ocampo-Gooding. They actually packed about 7 small presentations into one and described their process of organizing a city hack-a-thon around Open Data and building a lot of apps for free for the benefit of your city and your community. Very inspired.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Node.js talk from Brian Ford inspired us with some interesting readings to check out (such as the &amp;#8220;Thinking Fast and Slow&amp;#8221; book) and the importance of leveraging communities outside of JavaScript, such as the experiences of the Ruby community.  He then had many concerns about Node.js repeating concurrency mistakes that Ruby had made. &lt;em&gt;Though I think I mainly left there with only some good book suggestions &amp;#8211; it felt like it ended abruptly since there was no time for questions (since presentation went long) and no specific next steps on how to avoid said concerns.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One of the &lt;strong&gt;most inspirational&lt;/strong&gt; talks was 19-year-old James Whelton&amp;#8217;s &amp;#8220;Changing the world one CoderDojo at a time&amp;#8221;. &lt;a href="http://coderdojo.com/about-us/"&gt;CoderDojo&lt;/a&gt; is &amp;#8220;a movement of free coding clubs for young people&amp;#8221;. Check out their site for a lot of inspiration and how to start a club yourself. Also turns out that JavaScript has been a very accessible language to use &amp;#8211; it requires no setup, is available everywhere, fun to work with, and can even land you a job down the road.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jacob Thornton&amp;#8217;s &amp;#8220;Brûlons les musées&amp;#8221; talk was also very entertaining, and you&amp;#8217;ll need to see the video. He led up to the power of the JavaScript community getting together more specifically around creating specs/tests (versus primarily getting together around an implementation), which then offer flexibility and healthy competition when implementing libraries that meet those specs. His example was creating Hogan.js, which is some ways was a rewrite of Mustache.js. The improvements were possible by leveraging the Mustache tests. Then Mustache was able to make improvements. By using the specs, separate projects were able to code and optimize independently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The final talk of the day was &lt;a href="http://falkvinge.net/"&gt;Rick Falkvinge&lt;/a&gt;&amp;#8217;s talk about politics, the Pirate Party and inspiration on how to change the world.  He told his story of how the Pirate Party has been able to make in-roads into mainstream politics, and what&amp;#8217;s possible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Green for Dinner&lt;/h2&gt;

&lt;p&gt;After the JSConf family photo, nine of us then went to a local vegetarian restaurant called &lt;a href="http://greenvegetarian.com/"&gt;Green&lt;/a&gt; which was amazing.  The place was packed the whole time while the atmosphere was very easy going. They had a great variety of original and tasty foods.&lt;/p&gt;

&lt;h2&gt;Boot2Gecko Phone&lt;/h2&gt;

&lt;p&gt;In the evening, I finally had a chance to play with Mozilla&amp;#8217;s Boot2Gecko phone and built a simple app. In &lt;a href="https://github.com/briangershon/accelo"&gt;Accelo&lt;/a&gt; the JSConf logo floats around the screen and moves as you tilt the phone.&lt;/p&gt;

&lt;p&gt;Development was fairly smooth and I was able to install my app as part of the Gaia update/install process, but didn&amp;#8217;t have luck yet setting it up to install as a stand-alone app.&lt;/p&gt;

&lt;p&gt;Albeit since the app is solely HTML/CSS/JS it works just fine by visiting the site &lt;a href="http://accelo.evolvingbits.com/accelo/"&gt;http://accelo.evolvingbits.com/accelo/&lt;/a&gt; on the Boot2Gecko phone (or even works on my Macbook Pro which apparently sends accelerometer events). However when viewing on iOS, the accelerometer events seem to be reversed, so not sure which implementation is off.&lt;/p&gt;

&lt;h2&gt;Thank you&lt;/h2&gt;

&lt;p&gt;Thanks JSConf for another great year of new friends, bull-riding, great talks, tasty food and inspiration.  I will miss the sunshine and the playtime, but excited to jump into the all new tech-wonders that I can use for my web and mobile projects back in Seattle.  The Firesky Resort in Scottsdale was a perfect conference location, and I was also very happy with my stay next door at &lt;a href="http://www.chaparralsuites.com/"&gt;Chaparral Suites&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Also a big thank you to my company &lt;a href="http://www.saltbox.com"&gt;Saltbox.com&lt;/a&gt;&lt;/strong&gt; who have sponsored me to attend JSConf this year!  We&amp;#8217;re developers of an online communication and learning application that allows Sales organizations to keep a pulse on what happening with their products, their customers and their competitors.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/kWLMhlL8KeU" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/kWLMhlL8KeU/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/kWLMhlL8KeU/?</guid>
	<pubDate>Wed, 04 Apr 2012 08:15 GMT</pubDate>

</item>

<item>
	<title>JSConf 2012: Play</title>
	<description>&lt;p&gt;On my flight to JSConf, the Southwest Airlines magazine kicked off the topic of Play in &lt;a href="http://spiritmag.com/features/article/its_called_play/"&gt;Its called Play&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This theme continued throughout JSConf 2012&amp;#8217;s Day One.&lt;/p&gt;

&lt;p&gt;Just a &lt;strong&gt;few&lt;/strong&gt; things to play with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Registration included getting an NFC &lt;a href="http://www.poken.com"&gt;Poken&lt;/a&gt;, taking pictures with guns and cowboy gear, and a bag of sponsor loot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;All attendees were given the first public Boot2Gecko phones from Mozilla with a &lt;a href="https://wiki.mozilla.org/B2G/DeveloperPhone"&gt;challenge to hack it and build apps&lt;/a&gt; by conference end.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stephan Herhut showed us the possibilities with true parallel programming and JavaScript using &lt;a href="https://github.com/rivertrail/rivertrail/wiki"&gt;Intel RiverTail&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Paul Irish showed us the latest in JavaScript tooling. His &lt;a href="http://dl.dropbox.com/u/39519/talks/jsconf-tools/index.html"&gt;presentation&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Max Shawabkeh walked us through &lt;a href="http://repl.it/"&gt;repl.it&lt;/a&gt; which runs 17 languages natively in JavaScript, including Python and Ruby. This is a great environment for new students to programming (since the only dependency is a web browser), or people wanting to play with compiler technology.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remy Sharp talked about using JavaScript to &amp;#8220;Build Anything&amp;#8221; and gave a list of things he&amp;#8217;s like to see browsers do, such as real-time notifications, strong desktop integration, direct access to hardware, ability to local install a JavaScript app, &amp;#8220;go naked&amp;#8221; (no browser chrome visible). He also talked about things we should be using today, such as web storage instead of cookies, using HTML5 tags for web form validation (i.e. instead of a crazy client-side email regular expression, use &lt;input type=email&gt;), History API, AppCache manifest for performance (since just relying on browser cache may mean your files disappear after cache fills up), EventSource particularly for mainly server-to-client pushes (in addition to websockets), Drag and Drop.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;David Nolen talked directly about the importance of Play and how ClosureScript was that playground for him. He was also inspired by the book &amp;#8221;&lt;a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;tid=10663"&gt;The Reasoned Schemer&lt;/a&gt;&amp;#8221;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dan Ingalls, &amp;#8220;principal architect, designer and implementor of five generations of Smalltalk environments&amp;#8221; took us through &lt;a href="http://www.lively-kernel.org/"&gt;Lively Kernel&lt;/a&gt; which you need to see in action.  It &amp;#8220;provides a complete platform for web applications, including dynamic graphics, network access, and development tools&amp;#8221; all in the browser.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attendees left Day One with new cowboy hats, and many rode the bull later that night at &lt;a href="http://www.srrestaurants.com/"&gt;Saddle Ranch&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/gvGYVxRcrCQ" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/gvGYVxRcrCQ/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/gvGYVxRcrCQ/?</guid>
	<pubDate>Tue, 03 Apr 2012 06:50 GMT</pubDate>

</item>

<item>
	<title>Thanks NotConf for a Great JSConf 2012 Pre-conference</title>
	<description>&lt;p&gt;Arriving PHX was flawless, the Twilio-sponsored shuttle was there to pick me up from the airport.&lt;/p&gt;

&lt;p&gt;After checking-in, it was sunny and mid-70s as a few of us awaited for a friendly volunteer-sponsored shuttle to whisk us over to &lt;a href="http://notconf.com/"&gt;NotConf&lt;/a&gt; in fine style.&lt;/p&gt;

&lt;p&gt;This one day event went off without a hitch and was a lot of fun.&lt;/p&gt;

&lt;p&gt;We arrived to free food, free local beer, t-shirts, sunshine, friendly faces &amp;#8211; and of course JavaScript.  30-min talks leap frogged 30 min demos.&lt;/p&gt;

&lt;h2&gt;Best talk&lt;/h2&gt;

&lt;p&gt;I was only there the last half of the day, so my favorite talk was Pamela Fox&amp;#8217;s (she also won best costume) &amp;#8220;Why ternary operators make me want to kick someone in the nuts: AKA code readability.&amp;#8221; She highlighted that most JavaScript developers are users of other people (library) code, and had many good points about what to do to make users lives much easier by making the code more approachable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Documentation &amp;#8211; but not too much (such as having two sets of docs that makes it unclear which are the definitive ones) and using doc generation tools to make docs part of the process and not manual&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make debugging headache free (by being clear, using less &amp;#8220;elite&amp;#8221; code, no crazy ternary operators) since at some point users will need to debug in there.  Use tools like jshint to keep your code consistent. Also, although you can write javascript without semi-colons, this is not what most users expect and can lead to pain for potential contributors and users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make it easy to contribute to the (library) project. A lot of dependencies for running tests could be one barrier.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Favorite Demo&lt;/h2&gt;

&lt;p&gt;My favorite demo was &lt;a href="http://deployd.com"&gt;deployd.com&lt;/a&gt; who had wired up an iRobot and a maze, and attendees could create a program that navigated the robot through it, complete with leaderboard. This demonstrated their cool &amp;#8220;instant backend&amp;#8221; for software developers and tinkerers to easily create a RESTful backend with no code &amp;#8211; which in this case was then downloaded to a robot. Their business card says it all with &amp;#8220;Join the Backend Liberation Movement&amp;#8221;.&lt;/p&gt;

&lt;h2&gt;Thank you&lt;/h2&gt;

&lt;p&gt;The closing event was of course outside, where we all wound down with beer, nice conversations, and a local musician who was playing for us in the courtyard. My pale Seattle skin even gained some color and was happy to absorb all that natural Vitamin D.&lt;/p&gt;

&lt;p&gt;Thanks to the organizers of NotConf.com &amp;#8211; it was an impressive one-day conference and a great start to JSConf 2012.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/IvWaqEE_Aoo" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/IvWaqEE_Aoo/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/IvWaqEE_Aoo/?</guid>
	<pubDate>Mon, 02 Apr 2012 06:36 GMT</pubDate>

</item>

<item>
	<title>Moved to Octopress</title>
	<description>&lt;p&gt;I&amp;#8217;m excited to announce I finally made the plunge to &lt;a href="http://octopress.org/"&gt;Octopress&lt;/a&gt; for my JavaScript and iOS developer blog.&lt;/p&gt;

&lt;p&gt;Please update your RSS reader to point to &lt;a href="http://blog.evolvingbits.com/atom.xml"&gt;this new feed&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll be migrating content off my &lt;a href="http://www.evolvingbits.com/"&gt;previous Wordpress blog&lt;/a&gt; over time.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/wvvvO-_Zlaw" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/wvvvO-_Zlaw/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/wvvvO-_Zlaw/?</guid>
	<pubDate>Sat, 31 Mar 2012 11:43 GMT</pubDate>

</item>

<item>
	<title>Sharpening the Mobile and JavaScript Swords</title>
	<description>&lt;p&gt;In the last couple of  years, JavaScript has really become hot for the next breed of web and mobile applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;JavaScript runs on a majority of mobile and desktop browsers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&amp;#8230; it runs on the server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&amp;#8230; it is used for developing desktop widgets and browser extensions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&amp;#8230; it is being used inside desktop applications. eg scripting for &lt;a href="http://kodapp.com/"&gt;Kod editor&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&amp;#8230; it naturally works well with the web &amp;#8211; easily handling JSON, HTTP and REST.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&amp;#8230; works well for new real-time communication techniques (eg websockets).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&amp;#8230; as a language it works well for asynchronous-style services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There&amp;#8217;s also a lot of innovation happening in the JavaScript space because it attracts both front-end and back-end developers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Over the past year I&amp;#8217;ve been working in the mobile application space primarily with native iOS and mobile-optimized websites.&lt;/p&gt;

&lt;p&gt;This year I plan to expand my mobile and JavaScript skills in the following areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create applications (and web services) using server-side JavaScript with &lt;a href="http://nodejs.org/"&gt;node.js&lt;/a&gt; and learn the ecosystem that has grown up around it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practice new &amp;#8221;&lt;a href="http://www.lukew.com/ff/entry.asp?933"&gt;mobile first&lt;/a&gt;&amp;#8221; and &amp;#8221;&lt;a href="http://www.alistapart.com/articles/responsive-web-design/"&gt;responsive web design&lt;/a&gt;&amp;#8221; web-development techniques where new websites are designed for mobile first, and then progressive enhanced so that the same site works well for larger screens and desktop browsers too. Mobile can no longer be thought of as a bolt-on feature, but needs to become central to web design and development efforts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attend &lt;a href="http://2011.jsconf.us/"&gt;JSConf 2011&lt;/a&gt; and &lt;a href="http://nodeconf.com/"&gt;NodeConf 2011&lt;/a&gt; which are both in early May in Portland, OR.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Play with more data stores.  CouchDB (for example) is a native JSON store that speaks HTTP. Mixed with client-side or server-side JavaScript (that easily works with JSON and naturally speaks HTTP) makes an interesting combination. A recent talk on &lt;a href="http://jsconf.eu/2010/speaker/nodejs_couchdb_crazy_delicious.html"&gt;node.js + CouchDB&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continue to work with the various approaches to building mobile applications to find the right tools for the job, whether native, web-based, or a mix.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continue to practice test-driven development in JavaScript.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/W-axfdwIfVk" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/W-axfdwIfVk/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/W-axfdwIfVk/?</guid>
	<pubDate>Wed, 12 Jan 2011 04:48 GMT</pubDate>

</item>

<item>
	<title>Highlights from DjangoCon 2010 (and videos to watch)</title>
	<description>&lt;p&gt;Here were some DjangoCon 2010 highlights for me, along with talk titles so you can find the full presentations online at http://djangocon.blip.tv/posts?view=archive&lt;/p&gt;

&lt;p&gt;&amp;#8220;Creating better apps&amp;#8221;&lt;/p&gt;

&lt;p&gt;Both Eric Florenzano (&amp;#8220;Why Django Sucks, and How We Can Fix It&amp;#8221;) and Alex Gaynor (&amp;#8220;Rethinking the Reusable Application Paradigm&amp;#8221;) had many useful things to say about creating better and more reusable apps.  The videos are worth watching, here are some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Narrower abstractions would make apps suck less &amp;#8211; such as not directly exposing models (create an API) so you can swap out model or implementation.  This was also a big part of Alex&amp;#8217;s talk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Class-based views are a nice way of creating an API and allow implementations to change over time.  There are various ways of doing class-based views and there isn&amp;#8217;t an official blessed way, but class-based views would be an improvement (and offer more flexibility) than current function-based views in Django.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&amp;#8220;Databases other than SQL&amp;#8221;&lt;/p&gt;

&lt;p&gt;With the growth in non-relational databases out there, I enjoyed starting to play with MongoDB (pyMongo and django-nonrel).  After hearing experiences from the &amp;#8220;NoSQL and Django Panel&amp;#8221; it&amp;#8217;s obvious that these are new technologies (relative to SQL) and that they are quite varied in what they support and the problems they solve.  There are also pros and cons with schemaless databases.&lt;/p&gt;

&lt;p&gt;Andrew Godwin (&amp;#8220;Step Away From That Database&amp;#8221;) also presented a nice range of databases &amp;#8211; Document databases (MongoDB, CouchDB), Key-value stores (Cassandra, Redis), Message Queues (AMQP, Celery), Graph databases &amp;#8211; and reminds us that filesystems are also key-value stores, and that version-control systems can provide a versioned storage.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Data Migration&amp;#8221;&lt;/p&gt;

&lt;p&gt;Brian Luft&amp;#8217;s talk (&amp;#8220;Data Herding: How to Shepherd Your Flock Through Valleys of Darkness&amp;#8221;) will resonate with anyone looking for better methods of moving from a legacy system to Django. He also highlights the opportunity and flexibility that Django framework provides for clients in moving them off of their desktop and legacy systems.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Website Security&amp;#8221;&lt;/p&gt;

&lt;p&gt;Adam Baldwin (&amp;#8220;Pony Pwning&amp;#8221;) gave a great talk on website security and things to be thinking about while building Django sites.&lt;/p&gt;

&lt;p&gt;Cross-Site Scripting (&amp;#8220;xss&amp;#8221;) vulnerability are alive and well. Though Django offers protections, these can be turned off or it&amp;#8217;s easy to make a mistake in the template layer and open yourself up. You can learn more and play with xss vulnerabilities: http://owasp-esapi-python-swingset.appspot.com/xss/django&lt;/p&gt;

&lt;p&gt;Adam suggests considering OWASP ESAPI, auditing templates, auditing reusable snippets, and educating designers.&lt;/p&gt;

&lt;p&gt;For REST services, good to consider django-piston rather than writing your own.&lt;/p&gt;

&lt;p&gt;Other things include checking upload extensions to avoid running arbitrary code, e.g. Django ImageField doesn&amp;#8217;t check extensions and could possibly run embedded code.  Apache &amp;#8220;mod_security&amp;#8221; as a nice monitoring tool that can let you know what&amp;#8217;s happening, as well as prevent some issues.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Exclusionary Establishment&amp;#8221;&lt;/p&gt;

&lt;p&gt;Eric Florenzano hit on some issues on the social engineering side of Django.  Examples were presented that send messages of &amp;#8220;your contributions aren&amp;#8217;t important&amp;#8221; out to the larger Django community &amp;#8211; enhancements that went through all the steps but didn&amp;#8217;t make it into core (eg truncatechars), key contributors not given committer rights (eg Alex Gaynor), no non-core developer code accepted into django.contrib.&lt;/p&gt;

&lt;p&gt;James Bennett&amp;#8217;s (&amp;#8220;Topics of Interest&amp;#8221;) reflected some of this too in the fact that there are very few core committers (14) and even fewer than understand the ORM and that they&amp;#8217;re having a hard time growing core-committers.  Eric&amp;#8217;s mention of Guido van Rossum&amp;#8217;s quote (creator of Python) &amp;#8220;give out more commit privileges sooner&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Participation could be easier and more inviting if more core devs are added and there is also less concern about breaking trunk.&lt;/p&gt;

&lt;p&gt;Something I&amp;#8217;ll add to this is that there were many talks submitted for DjangoCon so some were turned away, yet some presenters had 3 slots.  Many of the talks were very good, but I think it would be healthy to have some opportunities for new faces to present, and not the same ones each year. (transparency note: our talk was one that wasn&amp;#8217;t accepted)&lt;/p&gt;

&lt;p&gt;&amp;#8220;Become a Django Core Developer&amp;#8221;&lt;/p&gt;

&lt;p&gt;Given the concern about lack of core committers, Russell Keith-Magee (&amp;#8220;So you want to be a core developer?&amp;#8221;) was timely. In addition to going through the process of contributing code, he also mentioned that contributing to the Django community in the form of help (django-user list, stack overflow, etc) and writing new docs (tutorials, howtos, elaborating on existing docs) is key.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Interesting Apps and Projects&amp;#8221;&lt;/p&gt;

&lt;p&gt;The lightning talks and Eric Holscher&amp;#8217;s talk (&amp;#8220;Large Problems in Django, Mostly Solved&amp;#8221;) were a good source of Django apps to try if you&amp;#8217;re not already using them.&lt;/p&gt;

&lt;p&gt;Eric also shares his measure of what makes a solid reusable app &amp;#8211; needs to have an easy setup, a good upgrade path, good documentation and well-tested.&lt;/p&gt;

&lt;p&gt;Apps he mentioned were Haystack (search), Sphinx (documentation), South (db migration), Celery (delayed execution), Fabric (deployment), gunicorn.org (async server), pip and virtualenv (packaging), TastyPie and Piston (RESTful), Taggit (tagging), Hudson (continuous integration tool), django-filter (django admin filtering), djangopackages.com (for finding new apps).&lt;/p&gt;

&lt;p&gt;Some interesting things from the lightning talks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;http://djangopackages.com (a Django Dash project)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;http://readthedocs.org  (a Django Dash project)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;logbook - http://github.com/mitsuhiko/logbook&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&amp;#8220;Performance&amp;#8221;&lt;/p&gt;

&lt;p&gt;Frank Wiles&amp;#8217; talk (&amp;#8220;Alice in Performanceland &amp;#8211; Down the Rabbit Hole&amp;#8221;) was full of a lot of tasty morsels to help you &amp;#8220;do less&amp;#8221; and &amp;#8220;remove pressure on your server&amp;#8221; that ultimately increases the performance and responsiveness of your site.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Code Quality&amp;#8221;&lt;/p&gt;

&lt;p&gt;Human code review is best says Peter Baumgartner in his talk (&amp;#8220;Monitoring Code Quality in Your Django Project&amp;#8221;). There are also many great code quality tools out there that many of us use: test suites, code coverage, link/pep8, profiling, code complexity metrics, value &amp;#8211; and pulling this together via Hudson.  Also, creating a build in one step is offers new developers a fast way to get started on a project.&lt;/p&gt;

&lt;p&gt;&amp;#8220;Managed Django Hosting&amp;#8221;&lt;/p&gt;

&lt;p&gt;I missed Nate Aune&amp;#8217;s lightning talk on his DjangoZoom.com cloud deployment solution, but looks interesting. http://djangozoom.com/ponyexpress/&lt;/p&gt;

&lt;p&gt;One of the lightning talks discussed the django-servee project: http://www.servee.com/features/ http://github.com/servee/servee&lt;/p&gt;

&lt;p&gt;&amp;#8220;Seeing some New Faces&amp;#8221;&lt;/p&gt;

&lt;p&gt;It was nice meeting new people who are using Django in Washington State outside of Seattle, such as in Richland and Spokane, and reconnecting with friends from the Plone and greater Python communities.&lt;/p&gt;

&lt;p&gt;Here were some DjangoCon 2010 highlights for me, along with talk titles so you can find the full &lt;a href="http://djangocon.blip.tv/posts?view=archive"&gt;presentation videos online&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Creating better apps&lt;/h2&gt;

&lt;p&gt;Both Eric Florenzano (&amp;#8220;Why Django Sucks, and How We Can Fix It&amp;#8221;) and Alex Gaynor (&amp;#8220;Rethinking the Reusable Application Paradigm&amp;#8221;) had many useful things to say about creating better and more reusable apps.  The videos are worth watching, here are some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Narrower abstractions would make apps suck less &amp;#8211; such as not directly exposing models (create an API) so you can swap out model or implementation.  This was also a big part of Alex&amp;#8217;s talk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Class-based views are a nice way of creating an API and allow implementations to change over time.  There are various ways of doing class-based views and there isn&amp;#8217;t an official blessed way, but class-based views would be an improvement (and offer more flexibility) than current function-based views in Django.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Databases other than SQL&lt;/h2&gt;

&lt;p&gt;With the growth in non-relational databases out there, I enjoyed starting to play with djangon-nonrel with MongoDB.  This project also supports Google App Engine.&lt;/p&gt;

&lt;p&gt;After hearing experiences from the &amp;#8220;NoSQL and Django Panel&amp;#8221; it&amp;#8217;s obvious that these are new technologies (relative to SQL) and that they are quite varied in what they support and the problems they solve.  There are also pros and cons with schemaless databases that you should be aware of when picking your solution.&lt;/p&gt;

&lt;p&gt;Andrew Godwin (&amp;#8220;Step Away From That Database&amp;#8221;) also presented a nice range of databases &amp;#8211; Document databases (MongoDB, CouchDB), Key-value stores (Cassandra, Redis), Message Queues (AMQP, Celery), Graph databases &amp;#8211; and reminds us that filesystems are also key-value stores, and that version-control systems can provide a versioned storage.&lt;/p&gt;

&lt;h2&gt;Data Migration to Django&lt;/h2&gt;

&lt;p&gt;Brian Luft&amp;#8217;s talk (&amp;#8220;Data Herding: How to Shepherd Your Flock Through Valleys of Darkness&amp;#8221;) will resonate with anyone looking for better methods of moving from a legacy system to Django. He also highlights the opportunity and flexibility that Django framework provides for clients in moving them off of their desktop and legacy systems.&lt;/p&gt;

&lt;h2&gt;Website Security&lt;/h2&gt;

&lt;p&gt;Adam Baldwin (&amp;#8220;Pony Pwning&amp;#8221;) gave a great talk on website security and things to be thinking about while building Django sites.&lt;/p&gt;

&lt;p&gt;Cross-Site Scripting (&amp;#8220;xss&amp;#8221;) vulnerability are alive and well. Though Django offers protections, these can be turned off or it&amp;#8217;s easy to make a mistake in the template layer and open yourself up. You can learn more and play with xss vulnerabilities: &lt;a href="http://owasp-esapi-python-swingset.appspot.com/xss/django"&gt;http://owasp-esapi-python-swingset.appspot.com/xss/django&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adam suggests considering OWASP ESAPI, auditing templates, auditing reusable snippets, and educating designers.&lt;/p&gt;

&lt;p&gt;For REST services, good to consider django-piston rather than writing your own.&lt;/p&gt;

&lt;p&gt;Other things include checking upload extensions to avoid running arbitrary code, e.g. Django ImageField doesn&amp;#8217;t check extensions and could possibly run embedded code.  Apache &amp;#8220;mod_security&amp;#8221; as a nice monitoring tool that can let you know what&amp;#8217;s happening, as well as prevent some issues.&lt;/p&gt;

&lt;h2&gt;An Exclusionary Establishment?&lt;/h2&gt;

&lt;p&gt;Eric Florenzano hit on some issues on the social engineering side of Django.  He provided examples of situations that can send the messages of &amp;#8220;your contributions aren&amp;#8217;t important&amp;#8221; out to the larger Django community &amp;#8211; enhancements that went through all the steps but didn&amp;#8217;t make it into core (eg truncatechars), key contributors not given committer rights (eg Alex Gaynor), no non-core developer code accepted into django.contrib.&lt;/p&gt;

&lt;p&gt;James Bennett&amp;#8217;s (&amp;#8220;Topics of Interest&amp;#8221;) reflected some of this too in the fact that there are very few core committers (14) and even fewer than understand the ORM and that they&amp;#8217;re having a hard time growing core-committers.  Eric&amp;#8217;s mention of Guido van Rossum&amp;#8217;s quote (creator of Python) &amp;#8220;give out more commit privileges sooner&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Participation could be easier and more inviting if more core devs are added and there is also less concern about breaking trunk.&lt;/p&gt;

&lt;p&gt;Something I&amp;#8217;ll add: My understanding is that too many talks were submitted for DjangoCon so of course some were turned away, yet some presenters had more than 1 slot.  Many of the talks were very good, but I think it would be healthy to open up more opportunities for community members to present.&lt;/p&gt;

&lt;h2&gt;Improving Django and Becoming Core Developer&lt;/h2&gt;

&lt;p&gt;Given the concern about lack of core committers, Russell Keith-Magee (&amp;#8220;So you want to be a core developer?&amp;#8221;) was timely. In addition to going through the process of contributing code, he also mentioned that contributing to the Django community in the form of help (django-user list, stack overflow, etc) and writing new docs (tutorials, howtos, elaborating on existing docs) is key.&lt;/p&gt;

&lt;h2&gt;Interesting Apps and Projects&lt;/h2&gt;

&lt;p&gt;The lightning talks and Eric Holscher&amp;#8217;s talk (&amp;#8220;Large Problems in Django, Mostly Solved&amp;#8221;) were a good source of Django apps to try if you&amp;#8217;re not already using them.&lt;/p&gt;

&lt;p&gt;Eric also shares his measure of what makes a solid reusable app &amp;#8211; needs to have an easy setup, a good upgrade path, good documentation and well-tested.&lt;/p&gt;

&lt;p&gt;Apps he mentioned were Haystack (search), Sphinx (documentation), South (db migration), Celery (delayed execution), Fabric (deployment), gunicorn.org (async server), pip and virtualenv (packaging), TastyPie and Piston (RESTful), Taggit (tagging), Hudson (continuous integration tool), django-filter (django admin filtering), djangopackages.com (for finding new apps).&lt;/p&gt;

&lt;p&gt;Some interesting things from the lightning talks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://djangopackages.com"&gt;http://djangopackages.com&lt;/a&gt; (reusable apps, sites, tools &amp;#8211; a Django Dash project. Nice work &lt;a href="http://pydanny.com/"&gt;Daniel Greenfeld&lt;/a&gt;!)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://readthedocs.org"&gt;http://readthedocs.or&lt;/a&gt;g  (hosted help documents &amp;#8211; a Django Dash project)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://github.com/mitsuhiko/logbook"&gt;logbook&lt;/a&gt; - an easier way to add logging to Django&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Performance&lt;/h2&gt;

&lt;p&gt;Frank Wiles&amp;#8217; talk (&amp;#8220;Alice in Performanceland &amp;#8211; Down the Rabbit Hole&amp;#8221;) was full of a lot of tasty morsels to help you &amp;#8220;do less&amp;#8221; and &amp;#8220;remove pressure on your server&amp;#8221; that ultimately increases the performance and responsiveness of your site.&lt;/p&gt;

&lt;h2&gt;Improving your Code Quality&lt;/h2&gt;

&lt;p&gt;Human code review is best says Peter Baumgartner in his talk (&amp;#8220;Monitoring Code Quality in Your Django Project&amp;#8221;). There are also many great code quality tools out there that many of us use: test suites, code coverage, link/pep8, profiling, code complexity metrics, value &amp;#8211; and pulling this together via Hudson.  Also, creating a build in one step is offers new developers a fast way to get started on a project.&lt;/p&gt;

&lt;h2&gt;Managed Django Hosting&lt;/h2&gt;

&lt;p&gt;I missed Nate Aune&amp;#8217;s lightning talk on his DjangoZoom.com cloud deployment solution, but looks interesting. &lt;a href="http://djangozoom.com/ponyexpress/"&gt;http://djangozoom.com/ponyexpress/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the lightning talks discussed the django-servee project: &lt;a href="http://www.servee.com/"&gt;http://www.servee.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Thanks DjangoCon!&lt;/h2&gt;

&lt;p&gt;It was nice meeting new people using Django in Seattle and in other areas of Washington State, such as in Richland, Wenatchee and Spokane &amp;#8211; and reconnecting with friends from the Plone and greater Python communities.&lt;/p&gt;

&lt;p&gt;Thank you to the organizers, presenters and supporters for another great DjangoCon!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/Z6bNHBjlwkY" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/Z6bNHBjlwkY/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/Z6bNHBjlwkY/?</guid>
	<pubDate>Tue, 14 Sep 2010 14:33 GMT</pubDate>

</item>

<item>
	<title>TAF's TechStart Expo 2010</title>
	<description>&lt;p&gt;Brian Gershon headed down to White Center to see the final event of the season for TAF&amp;#8217;s &lt;a href="http://techaccess.org/TechStart/techstart.html"&gt;TechStart&lt;/a&gt; program.&lt;/p&gt;

&lt;p&gt;&amp;#8220;TechStart is TAF&amp;#8217;s free, yearlong after-school program for students in kindergarten through 8th grade. The focus of TechStart is providing science, technology, engineering, and math (STEM) enrichment to underserved children of color through project-based learning and advanced technology tools.&amp;#8221;&lt;/p&gt;

&lt;p&gt;There were three event themes in Robotics (using Lego Mindstorms), including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The Hand Crank Race where students had to build a robot, and power it by crank, and get to the finish line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Wind Turbine Event, where students had studied alternative wind energy and created a turbine connected to a robot. The robot would calculate the speed to determine which turbines had the best design.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And the Archery Event, where students are given the distance to the archery target when they show up to the event, and then they need to program their robots to try to stop perfectly on the center of the bullseye.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Here are &lt;a href="http://www.flickr.com/photos/brianfive/sets/72157624314208148/"&gt;photos from the event&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Also, here is some video from the Archery Event:&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/E6yBwX4NXNk" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/E6yBwX4NXNk/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/E6yBwX4NXNk/?</guid>
	<pubDate>Sat, 19 Jun 2010 23:55 GMT</pubDate>

</item>

<item>
	<title>TAF Academy's Final Projects in JavaScript</title>
	<description>&lt;p&gt;Alex Tokar, Yonas Seifu and Brian Gershon went down to check out the final projects at &lt;a href="http://schools.fwps.org/taf/"&gt;Technology Access Foundation&amp;#8217;s Academy class in Federal Way&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This was the first class there to teach JavaScript, taught by Seth Nelson and Susan Evans.&lt;/p&gt;

&lt;p&gt;We saw Tic-Tac-Toe, a yo-yo animation, a Magic Eight Ball game, &amp;#8220;guess that image&amp;#8221;, and even a slot machine.&lt;/p&gt;

&lt;p&gt;The students did a fine job, and it was impressive to see what 10th grade students were able to learn and accomplish in a limited amount of time.&lt;/p&gt;

&lt;p&gt;[caption id=&amp;#8221;attachment_188&amp;#8221; align=&amp;#8221;alignright&amp;#8221; width=&amp;#8221;300&amp;#8221; caption=&amp;#8221;Tic Tac Toe in JavaScript&amp;#8221;]&lt;img src="http://www.evolvingbits.com/wp-content/uploads/2010/06/tic-tac-toe-300x225.jpg" alt="Tic Tac Toe in JavaScript" /&gt;[/caption]&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/Dc9nVM8HjkI" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/Dc9nVM8HjkI/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/Dc9nVM8HjkI/?</guid>
	<pubDate>Sat, 19 Jun 2010 23:41 GMT</pubDate>

</item>

<item>
	<title>SURF iPhone and Android Incubator: Upcoming events and a strong initial Meetup</title>
	<description>&lt;p&gt;There was a nice turnout of around 40 people at the SURF Incubator on Wednesday Jan 13th.&lt;/p&gt;

&lt;p&gt;There were really three events being held at the same time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;SURF Open House&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SURF iPhone Coding Night Meetup&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;and a last minute merge of the &amp;#8220;iPhone App Developers&amp;#8221; Meetup&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The merging of events ultimately created a room full of interesting and engaged people who were networking and discussing mobile app development.&lt;/p&gt;

&lt;p&gt;I would say that most were there to network, and some were there to play with code.&lt;/p&gt;

&lt;p&gt;The networkers were a nice mix of entrepreneurs and people looking for iPhone developers. The coders were mainly new developers (and some graphic designers) that were getting into iPhone or Android development. The coding part of the session ended up very light because the event took on more of a networking feel.&lt;/p&gt;

&lt;p&gt;The Open House event was an active Q&amp;A session for those interested in the incubator, upcoming plans, and how to get involved.&lt;/p&gt;

&lt;p&gt;[caption id=&amp;#8221;attachment_185&amp;#8221; align=&amp;#8221;alignright&amp;#8221; width=&amp;#8221;400&amp;#8221; caption=&amp;#8221;Jeff Yochim, Brian Gershon, Dan Dosen. Photo by Seaton Gras.&amp;#8221;]&lt;img src="http://www.evolvingbits.com/wp-content/uploads/2010/01/surf_jeff_brian_dan.jpg" alt="Jeff Yochim, Brian Gershon, Dan Dosen. Photo by Seaton Gras." /&gt;[/caption]&lt;/p&gt;

&lt;p&gt;I personally made some new connections, reconnected with other iPhone developers and designers, and met people who I hadn&amp;#8217;t run across yet at other iPhone events.  The feeling was that there was pent up demand for iPhone networking and coding.&lt;/p&gt;

&lt;h2&gt;More about SURF Incubator&lt;/h2&gt;

&lt;p&gt;The SURF space is available as a location for people to collaborate and work on code together &amp;#8211; open every weekday during January.  The space is also available for other iPhone / Android events.  There are desks for people to pair up or meet in groups as well. The plan is to ultimately host many events and activities, and there is also permanent space for developers and those building businesses. This month is the Open House so people can start to explore and use the space.  &lt;a href="http://surfincubator.com"&gt;http://surfincubator.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The recent events have been geared toward iPhone, but the SURF Incubator will also host Android events. This would open up opportunities to create synergies between the two platforms.&lt;/p&gt;

&lt;h3&gt;Have feedback?&lt;/h3&gt;

&lt;p&gt;There is also a new IdeaScale portal for people to post feedback to at &lt;a href="http://surfincubator.ideascale.com"&gt;http://surfincubator.ideascale.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Upcoming Meetup Events at SURF&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The &amp;#8220;Seattle iPhone &amp; Android Incubator&amp;#8221; Meetup&lt;/strong&gt; is an umbrella for upcoming workshops and coding sessions at SURF.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The plan it to have host regular coding sessions/workshops around specific themes and experience levels.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Please join this Meetup for a calendar of upcoming events.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On Monday, there will be a &lt;a href="http://www.meetup.com/Seattle-iPhone-Android-Incubator/calendar/12331931/"&gt;Beginner iPhone SDK Xcode - Q &amp; A Discussion&lt;/a&gt; Meetup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;These events would also complement the existing NSCoder group by adding an additional location for those that can&amp;#8217;t make it to the University Village Zoka event.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The &amp;#8220;iPhone App Developers&amp;#8221; Meetup&lt;/strong&gt; hosted by Andrew will be located at SURF Incubator. I haven&amp;#8217;t attended this Meetup, but it looks to be a nice opportunity for networking.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;More iPhone-related events&lt;/h2&gt;

&lt;p&gt;We&amp;#8217;re fortunate to have many opportunities to meet and code in Seattle.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;XCoders &amp;#8211; which offer a presentation, post-meeting networking at Luau, and an active email list. There are two meetings per month: One in Seattle and one on the east side. &lt;a href="http://www.seattlexcoders.org/"&gt;http://www.seattlexcoders.org/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;NSCoder Night &amp;#8211; meets each Tuesdays at University Village Zoka in Seattle. &lt;a href="http://nscodernight.com/?cat=28"&gt;http://nscodernight.com/?cat=28&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/W037_lq_Prg" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/W037_lq_Prg/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/W037_lq_Prg/?</guid>
	<pubDate>Sun, 17 Jan 2010 13:38 GMT</pubDate>

</item>

<item>
	<title>Open Tagging on OSX: A Powerful Way to Organize</title>
	<description>&lt;p&gt;For each project I work on, I have a multitude of files, folders, applications, and web pages.&lt;/p&gt;

&lt;p&gt;My goal is to have shortcuts in one place, organized by project, as the ultimate launcher.&lt;/p&gt;

&lt;p&gt;Here were some good initial attempts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Firefox bookmarks might be a nice way to go, but doesn&amp;#8217;t make it easy to link to local files, so that solution was quickly dismissed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.manytricks.com/butler/"&gt;Butler&lt;/a&gt; did this well &amp;#8211; a quick click in the menu bar pulls up a hierarchical list of projects and shortcuts to resources for each project.  You could easily drag and drop URLs as well as local file shortcuts to Butler as well.  This approach basically created a nice external bookmark manager not tied to any one browser and able to link to files of all types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recently I noticed that Snow Leopard&amp;#8217;s improved Grid (in the Dock) now allows for navigating down a hierarchy of folders quickly, so though about putting my shortcuts there.  The only problem is that the dock is &amp;#8220;way down there&amp;#8221; (irregardless of where you put the dock) and takes time to mouse around.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Each tool took their own approach, and I had to pick one since I couldn&amp;#8217;t easily use multiple ones. Also, graphical solutions still take precious time to drag your mouse and navigate through the hierarchy.&lt;/p&gt;

&lt;p&gt;Then a better idea.&lt;/p&gt;

&lt;p&gt;Spotlight is quick and fast for searching so is ideal (just press apple-spacebar) though typing in search phrases still brings up lots of extra information I don&amp;#8217;t want.&lt;/p&gt;

&lt;p&gt;So how do I universally &amp;#8220;tag&amp;#8221; resources and bring them up quickly?&lt;/p&gt;

&lt;p&gt;First, the cool 2006 (and still usable) &lt;a href="http://lifehacker.com/169971/metadata-as-a-filing-system"&gt;metadata solution mentioned on LifeHacker&lt;/a&gt;: Apple-I on files you want to tag, then add a custom tag into the comment box. Prefix with &amp; so it&amp;#8217;s quick to find without bringing up a lot of other crap.  For my common Web Collective company shortcuts, I used &amp;wc.  Now, when I jump to Spotlight and type &amp;wc, I instantly see all my shortcuts.&lt;/p&gt;

&lt;p&gt;This was great, but then I found tagging nirvana on OSX.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An ecosystem of tagging tools has popped up around a free and open source &lt;a href="http://code.google.com/p/openmeta/"&gt;OpenMeta Tag&lt;/a&gt; standard.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenMeta means that you can now tag files, folders, emails, web pages, etc, with an assortment of tools, and then search for them with an assortment of tools.&lt;/strong&gt; No need for custom tagging in the file &amp;#8220;comment&amp;#8221; field, and no need to use a proprietary tagging system that locks you into one tool. (Btw, for web pages, I drag a shortcut from the browser to my file system, then tag the resulting .webloc file)&lt;/p&gt;

&lt;p&gt;The simplest workflow consists of tagging files by dragging/dropping them onto &lt;a href="http://hasseg.org/tagger/"&gt;Tagger&lt;/a&gt;, then pulling them up quickly in Spotlight.  To pull up all my shortcuts tagged with &amp;#8220;wc&amp;#8221; you just type &amp;#8220;tag:wc&amp;#8221;.  This is a free solution and works well.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.evolvingbits.com/wp-content/uploads/2009/09/tagger_window.png" alt="Tagger window" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.evolvingbits.com/wp-content/uploads/2009/09/Screen-shot-2009-09-25-at-10.31.39-PM.png" alt="Spotlight Search using tags" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next in the evolution are tools such as &lt;a href="http://gravityapps.com/tags/overview/"&gt;Tags&lt;/a&gt; or &lt;a href="http://www.nudgenudge.eu/punakea"&gt;Punakea&lt;/a&gt; or &lt;a href="http://www.ironicsoftware.com/leap/index.html"&gt;Leap&lt;/a&gt; &amp;#8211; which make it easy to tag, while also having nice integrated search features.&lt;/strong&gt; Tags makes it easy to tag email (in addition to files and folders), Leap (the creator of OpenMeta) is interesting because it has a very fast and flexible searching mechanism and basically does all the work of the Finder with the powerful addition of tagging and rating.  These are all paid applications &amp;#8211; well worth it if they help you to better organize.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m still playing around to find the right combination of tools for my own workflow.  See &lt;a href="http://code.google.com/p/openmeta/wiki/OpenMetaApplications"&gt;http://code.google.com/p/openmeta/wiki/OpenMetaApplications&lt;/a&gt; for a nice list.&lt;/p&gt;

&lt;p&gt;Tagger and Spotlight are working well for quick shortcuts &amp;#8211; Tags, Punakea and Leap start to show what a world would be like when relying less on hierarchy and more on tags.&lt;/p&gt;

&lt;p&gt;Hmmm, &lt;a href="http://web.me.com/jonstovell/Tag_Folders/Tag_Folders_Home.html"&gt;TagFolders&lt;/a&gt; looks pretty interesting too&amp;#8230;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/VOdEsNsPYUs" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/VOdEsNsPYUs/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/VOdEsNsPYUs/?</guid>
	<pubDate>Fri, 25 Sep 2009 21:23 GMT</pubDate>

</item>

<item>
	<title>DjangoCon 2009 Recap</title>
	<description>&lt;p&gt;After catching the great videos from last year&amp;#8217;s first DjangoCon I looked forward to attending this year.  I&amp;#8217;m glad I went.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ll be discussing &amp;#8220;What did we learn at DjangoCon?&amp;#8221; at this Thursday&amp;#8217;s Django Seattle. See &lt;a href="http://www.djangoseattle.org"&gt;http://www.djangoseattle.org&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;In the meantime, here are some high-level take-aways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Should JavaScript and RESTful services be part of the Django core?  JS is even more useful/powerful with the latest fast JS engines in Chrome, Firefox and Safari/Webkit. Competitor Rails builds in RESTful features - some promising ones for Django include django-piston and django-roa.  I liked how Ted Leung talked about &amp;#8220;science experiments&amp;#8221; and posed many ideas on what we may want to experiment with to get right before approaching Django core.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git - Though this doesn&amp;#8217;t directly relate to Django, DVCS systems like Git and Mercurial are in wide use.  SVN is a given, but now feel I need to know Git and Mercurial well - since popular projects are using these.  I also wanted to pick a &amp;#8220;pet&amp;#8221; DVCS to use as my default too.  I&amp;#8217;ve chosen Git (mainly because of git-svn and GitHub), but will be using Mercurial as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Django Tips and Tricks - Many to pick from, but I liked Query.as_sql() method to show the SQL the Django ORM generates on your behalf, the flexibility of using &amp;#8220;signals&amp;#8221; to loosely couple functionality (see django-signals-ahoy on bithub), reusing other Python WSGI middleware (such as repoze.bitblt, repoze.squeeze, repoze.profile), pylint/djangolint, class-based views, db schema migrations with South, much faster test speeds in Django 1.1, various test utilities floating around, talks on performance, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Django jobs are growing, and &lt;a href="http://ping.fm/WpCf4"&gt;Django also a popular platform for Start-ups&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check out the &lt;a href="http://djangocon.pbworks.com/Slides"&gt;DjangoCon2009 Wiki&lt;/a&gt; for slides and presentations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/Krnsjclj9NI" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/Krnsjclj9NI/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/Krnsjclj9NI/?</guid>
	<pubDate>Mon, 14 Sep 2009 16:21 GMT</pubDate>

</item>

<item>
	<title>Snow Leopard Smooth Except Python 32/64 Cocktail</title>
	<description>&lt;p&gt;&lt;strong&gt;UPDATE: Thanks to the helpful commenters, I found success getting an older Zope instance running on Python 2.4 on Snow Leopard using buildout.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE: This post is for installing Python 2.4 on a brand new Snow Leopard Instance.&lt;/strong&gt; If upgrading on top of Leopard, you may have to update easy_install, macports, etc.  More Googling around may be required.&lt;strong&gt;
&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Though I had to create two buildouts to get this to work &amp;#8211; is there a way to get this into one buildout?&lt;/p&gt;

&lt;p&gt;I first tried to create one buildout by combining  Florian Schulze&amp;#8217;s buildout recipe with a standard Zope recipe &amp;#8211; but since initial bootstrap was run by Python 2.5, I couldn&amp;#8217;t get the Zope instance to use the new Python 2.4. &lt;strong&gt;So I first ran a buildout to build Python 2.4 (using OSX-installed Python 2.5), then used that new Python 2.4 to run bootstrap.py on the Zope 2.8.x buildout.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s the recipe I used to just build Python 2.4 (requires Florian&amp;#8217;s buildout, see Alexander Limi&amp;#8217;s comment below for where to find this):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[buildout]
#extends = src/snowleopard.cfg     # no longer required as Joe mentions below
python-buildout-root = ${buildout:directory}/src
parts -=
   ${buildout:python25-parts}
   ${buildout:python26-parts}

[install-links]
prefix = /opt/local
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then I ran a simple Zope 2.8 buildout to see if it would compile (using new Python 2.4 to bootstrap), and it did!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[buildout]
parts =
   zope2
   instance

[zope2]
recipe = plone.recipe.zope2install
url = http://www.zope.org/Products/Zope/2.8.9.1/Zope-2.8.9.1-final.tgz

[instance]
recipe = plone.recipe.zope2instance
zope2-location = ${zope2:location}
user = admin:admin
http-address = 8080
debug-mode = on
verbose-security = on
&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;p&gt;Here is my initial post:&lt;/p&gt;

&lt;p&gt;I have to say &amp;#8211; most everything I&amp;#8217;ve installed on a fresh Snow Leopard install has worked flawlessly and swiftly &amp;#8211; except for (the minor inconvenience of) iStat not working.  &lt;strong&gt;UPDATE: iStat 2.0 is available for Snow Leopard now.&lt;/strong&gt; &lt;em&gt;There&amp;#8217;s a new beta of MenuMeters too for Snow Leopard&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;There are also nice subtle improvements, see Mac Life&amp;#8217;s &lt;a href="http://www.maclife.com/article/feature/100_snow_leopard_tips_tricks_and_features"&gt;100 Top Snow Leopard Tips, Trick and Features&lt;/a&gt; for improvements to Preview, Expose, Stacks, etc.  I&amp;#8217;ve very happy with the upgrade.&lt;/p&gt;

&lt;p&gt;Now for the bad news for those like myself who depend on Python 2.4 for Plone, since many versions of Zope require Python 2.4.  &lt;em&gt;I also use Python for Django, though that should run fine on Python that shipped with Snow Leopard.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can read many of the initial details around the web, but here&amp;#8217;s what I&amp;#8217;ve experienced and have been able to put together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Note that these details are for a fresh Snow Leopard install - there are a different set of issues if you&amp;#8217;re upgrading over your existing Leopard.  &lt;strong&gt;NEW: &amp;#8220;Clark&amp;#8217;s Tech Blog&amp;#8221; has a nice write-up about &lt;/strong&gt;&lt;a href="http://www.libertypages.com/clarktech/?p=719"&gt;upgrading Python after upgrading Leopard to Snow Leopard&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Snow Leopard ships with Python 2.5.4, and this runs as a 32-bit application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I also need 2.4 branches of Python too, so I tried rolling my own (as usual) and it didn&amp;#8217;t compile.  I then followed that thread for awhile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I then thought I pulled a fast one when I compiled from MacPorts and everything ran great!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&amp;#8230; but then I compiled Zope, and attempted to run an instance.  I saw a mysterious &amp;#8220;No such file or directory&amp;#8221; error.  Hmmm, I can navigate to that file, but running the script with my new Python interpretor was causing this error.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After digging around with Activity Monitor, I discovered that the Python I built from scratch was running as a 64-bit app &amp;#8211; while the Python that comes with Snow Leopard was only running 32-bit &amp;#8211; which is telling, since most everything else on Snow Leopard is running 64-bit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Guessing that the the mysterious &amp;#8220;No such file or directory&amp;#8221; (when the file and directory did indeed exist) was due to a &lt;strong&gt;weird cocktail of 32-bit pieces living with 64-bit pieces&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My latest theory was that I needed to figure out how to build Python as 32-bit.  I played with Macports and various architecture settings to hardwire this, but long-story-short &amp;#8211; the architecture override isn&amp;#8217;t used everywhere &amp;#8211; so parts still compile natively as 64-bit on Snow Leopard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The best thread on the topic (that&amp;#8217;s steadily growing) is here: &lt;a href="http://bugs.python.org/issue6802"&gt;http://bugs.python.org/issue6802&lt;/a&gt; with msg92153 left today&lt;/strong&gt;, which basically offers some additional settings for compiling Python as a 32-bit app (for Python 2.6).  Also mentions that Snow Leopard did some magic to get Python 2.5 working as a 32-bit app.&lt;strong&gt;
&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My hope is that once &amp;#8220;32-bit&amp;#8221; Python 2.4 happens, the rest of the Zope install, etc, will be back to the good ol&amp;#8217; days in Leopard.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;strong&gt;Plan B&amp;#8217;s:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Otherwise, to save some headache, I&amp;#8217;m wondering about installing a small Linux distro on VMWare as a local mini web-server where I can easily install Python and Zope &amp;#8211; though that&amp;#8217;s a bit of a pain too.&lt;/p&gt;

&lt;p&gt;Luckily I also have my old Leopard in a separate partition (see my &lt;a href="http://www.evolvingbits.com/2009/08/29/extra-life-for-my-macbook-pro-with-snow-leopard-and-inexpensive-hardware/"&gt;Extra life for my MacBook Pro with Snow Leopard and inexpensive hardware&lt;/a&gt; blog entry) and can boot that if necessary to work on various Zope/Plone sites (that required Python 2.4) while this is all being sorted out.&lt;/p&gt;

&lt;p&gt;Now time to see if I can get 32-bit Python 2.4.6 compiled and installed, while waiting for more patches and information to appear&amp;#8230;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/2hAFyLyDcx8" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/2hAFyLyDcx8/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/2hAFyLyDcx8/?</guid>
	<pubDate>Wed, 02 Sep 2009 20:11 GMT</pubDate>

</item>

<item>
	<title>Extra life for my MacBook Pro with Snow Leopard and inexpensive hardware</title>
	<description>&lt;p&gt;I&amp;#8217;m using the Snow Leopard upgrade as a chance to add some extra life to my (older) MacBook Pro (2,2).&lt;/p&gt;

&lt;p&gt;My goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Max out memory to 3GB (up from 2 GB) &amp;#8211; $29&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upgrade hard-drive to 500GB (up from 120GB) - $129 for a 2.5&amp;#8221; Seagate Momentus SATA 7200 RPM.  My current drive is 5400 RPM, so this will be a speed improvement too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I also want to install the OS from scratch as a chance to clean things out.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hey, I can then even upgrade my wife&amp;#8217;s laptop with my 120GB drive!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The steps have been pretty easy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Backup whole drive using &lt;a href="http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html"&gt;SuperDuper!&lt;/a&gt; to a bootable external drive.  If I didn&amp;#8217;t want to install Snow Leopard from scratch, you could then just transfer your previous OS back to the new hard-drive and be done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upgrade memory, piece of cake&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upgrade hard-drive. I like to do this sort of thing myself, albeit Apple is the official place to have this done.  This takes a Torx 6 screwdriver, and some patience, but was fairly easy to do thanks to &lt;a href="http://www.ifixit.com/Guide/Repair/MacBook-Pro-15-Inch-Core-Duo-Hard-Drive-Replacement/486/1"&gt;http://www.ifixit.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start Installing Leopard.  Note that you &lt;strong&gt;do not need to install Leopard first&lt;/strong&gt; for a brand new install.  I just put in Snow Leopard, and booted holding down &amp;#8220;C&amp;#8221; and the installer popped up.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Since the drive is large, I decided to take an extra step of partitioning my drive into 2.  You can run Disk Utility right before starting the install to create these.  One partition as my main one for Snow Leopard, and the other as a complete bootable Leopard exactly the way my laptop was before the upgrade &amp;#8211; just in case I forgot something &amp;#8211; and I can easily pull files over while doing the big reinstall-everything-from-scratch step.  SuperDuper! makes this easy &amp;#8211; both to backup your drive, and restore it on a new partition.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Frolic in all my new hard-drive space and anticipated speed improvements &amp;#8211; more memory, faster hard-drive and faster OS.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/nJWuQOsG8j4" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/nJWuQOsG8j4/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/nJWuQOsG8j4/?</guid>
	<pubDate>Sat, 29 Aug 2009 13:32 GMT</pubDate>

</item>

<item>
	<title>Django Seattle's Website Barn Raising Sprint: A Recap</title>
	<description>&lt;h2&gt;New Django Seattle Website&lt;/h2&gt;

&lt;p&gt;Thanks to 14 Sprinters who came together on July 25, we now have a Django Seattle Website at &lt;a href="http://www.djangoseattle.org"&gt;http://www.djangoseattle.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[caption id=&amp;#8221;attachment_60&amp;#8221; align=&amp;#8221;alignright&amp;#8221; width=&amp;#8221;640&amp;#8221; caption=&amp;#8221;Some of our Django Seattle Sprinters&amp;#8221;]&lt;img src="http://www.evolvingbits.com/wp-content/uploads/2009/07/django-seattle-sprint-group.jpg" alt="Some of our Django Seattle Sprinters" /&gt;[/caption]&lt;/p&gt;

&lt;p&gt;There was a lot of infrastructure work done at the sprint which is still in development and didn&amp;#8217;t make it to the live site yet &amp;#8211; but the experience of getting to know each other, and learning/sharing Django knowledge was another fine Sprint accomplishment.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s a brief summary of what people worked on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Integrated in Blogging, Profile and Calendar functionality from &lt;a href="http://code.google.com/p/django-basic-apps/"&gt;django-basic-apps&lt;/a&gt;. &lt;em&gt;Initially Pinax was explored, but had a lot of dependencies and seemed better for creating specific sites genres, but was challenging to incorporate into our existing site.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Created a Twitter portlet that shows live #djangoseattle Tweets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setup Flatpages for core content, and creating a database-driven menu&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Created a logo and initial site design and templates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setup Django on live server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Used the Django Debug Toolbar while developing the site&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some were playing with Django for the first time&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some floated around to help diagnose problems and help those new to Django&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;[caption id=&amp;#8221;attachment_59&amp;#8221; align=&amp;#8221;alignright&amp;#8221; width=&amp;#8221;640&amp;#8221; caption=&amp;#8221;Functionality brainstorm&amp;#8221;]&lt;img src="http://www.evolvingbits.com/wp-content/uploads/2009/07/django-seattle-sprint-whiteboard.jpg" alt="Functionality brainstorm" /&gt;[/caption]&lt;/p&gt;

&lt;h2&gt;Thank you Sprinters&lt;/h2&gt;

&lt;p&gt;Our sprinters (in alphabetical order) were: Andrew Beyer, Jon Callahan, Jesse Franceschini, Doug, Brian Gershon, Johann Heller, Paul Pham, Micah Ransdell, Leo Shklovskii, Trevor Smith, Jesse Snyder, Alex Tokar, Ragan Webber, Ben Wilber&lt;/p&gt;

&lt;h2&gt;Thank you Sponsors&lt;/h2&gt;

&lt;p&gt;Also a &lt;strong&gt;Big Thank You&lt;/strong&gt; to our sponsors, hosts and organizers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Jon Callahan at &lt;a href="http://mazamascience.com/"&gt;Mazama Science&lt;/a&gt; treated all 14 of us to a tasty &lt;a href="http://www.pccnaturalmarkets.com/"&gt;PCC Natural Markets&lt;/a&gt; lunch, coffee, drinks and snacks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Michael Kim at &lt;a href="http://grapevyn.com"&gt;Grapevyn&lt;/a&gt; brought in Top Pot Doughnuts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Paul Pham hosted us at his coworking space &lt;a href="http://www.officenomads.com/"&gt;Office Nomads&lt;/a&gt; which was a great place to have a sprint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leo Shklovskii at &lt;a href="http://www.evoworx.com/"&gt;Evoworx&lt;/a&gt; and Brian Gershon at &lt;a href="http://www.webcollective.coop"&gt;Web Collective&lt;/a&gt; had a great time organizing the sprint.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;We look forward to our next sprint!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/evolvingbits/~4/cFmb9DSbJPw" height="1" width="1"/&gt;</description>
	<link>http://feedproxy.google.com/~r/evolvingbits/~3/cFmb9DSbJPw/</link>
	<source url="http://feeds.feedburner.com/evolvingbits?format=xml">Evolving Bits</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/evolvingbits/~3/cFmb9DSbJPw/?</guid>
	<pubDate>Sun, 26 Jul 2009 23:00 GMT</pubDate>

</item>

<item>
	<title>Idealware compares Drupal, Plone, Wordpress and Joomla</title>
	<description>Nonprofit software info source Idealware has published what might be the best objective review of the top open source CMS solutions available today. Having read the report and having worked extensively with all four systems for many years I can definitely recommend it for anyone considering the content management software options.The report reinforces many of the messages I use to differenciate </description>
	<link>http://feedproxy.google.com/~r/EricMagnusonSocialpreneuring/~3/iH79tcHu-4I/idealware-compares-drupal-plone.html</link>
	<source url="http://feeds.feedburner.com/EricMagnusonSocialpreneuring">Eric Magnuson</source>
	<guid isPermaLink="false">http://feedproxy.google.com/~r/EricMagnusonSocialpreneuring/~3/iH79tcHu-4I/idealware-compares-drupal-plone.html?</guid>
	<pubDate>Fri, 03 Apr 2009 16:55 GMT</pubDate>

</item>


</channel></rss>

