<?xml version="1.0" encoding="UTF-8"?><feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:thr="http://purl.org/syndication/thread/1.0"
  xml:lang="en"
  >
  <id>http://livingcode.org/feed/atom</id>
  <updated>2009-11-13T19:33:25Z</updated>
  <title type="text">Living Code</title>
  <subtitle type="text">Programming for the Fun of It</subtitle>
  <link rel="self" type="application/atom+xml" href="http://livingcode.org/feed" />
  <link rel="alternate" href="http://livingcode.org" />
  <rights type="text">Copyright 2009</rights>
  <generator uri="http://wordpress.org/" version="2.8.6">WordPress</generator>
      <entry>
    <id>http://livingcode.org/2009/tab-dumping-with-applescript-and-back-to-python</id>
    <title type="html"><![CDATA[Tab Dumping with AppleScript and back to Python]]></title>
    <updated>2009-01-31T20:04:19Z</updated>
    <published>2009-01-31T19:58:31Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2009/01/31/tab-dumping-with-applescript-and-back-to-python/feed" thr:count="4"  />
    <link rel="alternate" href="http://livingcode.org/2009/01/31/tab-dumping-with-applescript-and-back-to-python" />
    <category scheme="http://livingcode.org" term="Mac" />
    <category scheme="http://livingcode.org" term="Projects" />
    <category scheme="http://livingcode.org" term="Python" />
    <category scheme="http://livingcode.org" term="Tutorial" />
    <summary type="html"><![CDATA[
Goal: Iterate through all my (OS X Safari) browser windows and make a list of titles and urls which is then placed in the clipboard ready to be pasted into an email or blog post.
This is an update to Tab Dumping in Safari. That still works well as the basis for extending any Cocoa-based application [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2009/01/31/tab-dumping-with-applescript-and-back-to-python"><![CDATA[<p><img src='http://livingcode.org/wp-content/uploads/2009/01/rock.jpg' alt='Rock' /></p>
<p><strong>Goal:</strong> Iterate through all my (OS X Safari) browser windows and make a list of titles and urls which is then placed in the clipboard ready to be pasted into an email or blog post.</p>
<p>This is an update to <a href="http://livingcode.org/2006/tab-dumping-in-safari">Tab Dumping in Safari</a>. That still works well as the basis for extending any Cocoa-based application at runtime, but it relies on SIMBL, which while it is a great bit of code, essentially is abusing the InputManager interface.  Some developers and users shun such hacks, and at least one Apple application checks for them at startup and warns you from using them.</p>
<p>I have been running the <a href="http://webkit.org/">WebKit</a> nightlies, which are like Safari, but with newer code and features (most importantly to me right now, a Firebug-like developer toolkit).  WebKit warns at startup that if you&#8217;re running extensions (such as SIMBL plugins) it may make the application less stable.  I was running both <a href="http://haoli.dnsalias.com/">Saft</a> and my own tab dumping plugin, and WebKit was crashing a lot.  So I removed those and the crashes went away.  I miss a handful of the Saft extensions (but not having to update it for every Safari point release), and I found I <em>really</em> miss my little tab-dumping tool.</p>
<p>I toyed with the idea of rewriting it as a service, which would then be available from the services menu, but couldn&#8217;t figure out how to access the application&#8217;s windows and tabs from the service.  So I tried looking at Safari&#8217;s scriptable dictionary, using the AppleScript Script Editor.  Long ago, John Gruber had <a href="http://daringfireball.net/2003/05/safaris_unscriptable_tabs">written</a> about the frustration with Safari&#8217;s tabs not being scriptable, but a glance at the scripting dictionary showed me this was no longer the case (and probably hasn&#8217;t been for years, I haven&#8217;t kept track).</p>
<p>I am a complete n00b at AppleScript.  I find the attempt at English-like syntax just confuses (and irritates) me no end.  But what I wanted looked achievable with it, so I armed myself with some examples from Google searches, and Apple&#8217;s intro pages and managed to get what I wanted working.  It may not be the best possible solution (in fact I suspect the string concatenation may be one of the most pessimal methods), but it Works For Me™.</p>
<p>In Script Editor, paste in the following:</p>
<p><code>
<pre>
set url_list to ""
-- change WebKit to Safari if you are not running nightlies
tell application "WebKit"
  set window_list to windows
  repeat with w in window_list
    try
      set tab_list to tabs of w
      repeat with t in tab_list
        set url_list to url_list &#038; name of t &#038; "\n"
        set url_list to url_list &#038; URL of t &#038; "\n\n"
      end repeat
    on error
      -- not all windows have tabs
    end try
  end repeat
  set the clipboard to url_list
end tell
</pre>
<p></code></p>
<p>I had to use AppleScript Utility to add the script menu to my menu bar.  From there it was easy to create script folders that are specific to both WebKit and Safari and save a copy of the script (with the appropriate substitution, see comment in script) into each folder.  Now I can copy the title and URL of all my open tabs onto the clipboard easily again, without any InputManager hacks.</p>
<p>I had some recollection that is a way to do this from Python, so I looked and found <a href="http://appscript.sourceforge.net/">Appscript</a>.  I was able to install this with a simple <code>easy_install appscript</code> and quickly ported most of the applescript to Python.  The only stumbling block was that I couldn&#8217;t find a way to access the clipboard with appscript, and I didn&#8217;t want to have to pull in the PyObjC framework just to write to the clipboard. So I used <code>subprocess</code> to call the command-line <code>pbcopy</code> utility.</p>
<p><code>
<pre>
#!/usr/local/bin/python
from appscript import app
import subprocess
tab_summaries = []
for window in app('WebKit').windows.get():
    try:
        for tab in window.tabs.get():
            name = tab.name.get().encode('utf-8')
            url = tab.URL.get().encode('utf-8')
            tab_summaries.append('%s\n%s' % (name, url))
    except:
        # not all windows have tabs
        pass
clipboard = subprocess.Popen('pbcopy', stdin=subprocess.PIPE)
clipboard.stdin.write('\n\n'.join(tab_summaries))
</pre>
<p></code></p>
<p>The remaining hurdle was simply to put the Python script I&#8217;d written into the same Scripting folder as my AppleScript version. For me this was <code>~/Library/Scripts/Applications/WebKit/</code>. When run from the scripts folder, your usual environment is not inherited, so the <code>#!</code> line must point to the version of Python you are using (and which has Appscript installed). You should also make the script executable.  Adding <code>.py</code> or any other extension is not necessary.</p>
<p>Overall, while I found AppleScript to be very powerful, and not quite as painful as I remembered, I found the Python version (warts and all) to be easier to work with. Combined with the fact that the script folder will run non-Applescript scripts, this opens up new worlds for me.  I have hesitated in the past to write a lot of SIMBL-based plugins, tempting though it may be, because they are hacks, and they run in <em>every</em> Cocoa-based application.  But adding application-specific (or universal) scripts, in Python, is pure, unadulterated goodness.</p>
]]></content>
        </entry>
    <entry>
    <id>http://livingcode.org/2006/back-to-the-drawing-board</id>
    <title type="html"><![CDATA[Back to the Drawing Board]]></title>
    <updated>2008-01-16T07:02:55Z</updated>
    <published>2006-11-14T06:59:01Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2006/11/13/back-to-the-drawing-board/feed" thr:count="0"  />
    <link rel="alternate" href="http://livingcode.org/2006/11/13/back-to-the-drawing-board" />
    <category scheme="http://livingcode.org" term="Python" />
    <summary type="html"><![CDATA[Well, I&#8217;ve been promising this off and on here in my intermittent blog, but I&#8217;ve had the code up on Google code hosting for some time now, my kids have tested out the latest version, I&#8217;ve fixed some bugs introduced when PyObjC switched from distutils to setuptools. It is still pretty raw, unpolished, unoptimized, but [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2006/11/13/back-to-the-drawing-board"><![CDATA[<p>Well, I&#8217;ve been promising this off and on here in my intermittent blog, but I&#8217;ve had the code up on Google code hosting for some time now, my kids have tested out the latest version, I&#8217;ve fixed some bugs introduced when PyObjC switched from distutils to setuptools. It is still pretty raw, unpolished, unoptimized, but I&#8217;m ready to let the world see it and let me know what they think.</p>
<p>Current features of Drawing Board:</p>
<ul>
<li>Freehand sketching: This is the main point of the software</li>
<li>Onion-skinning: See previous frame dimmed behind current frame</li>
<li>Create new frames: Either blank, or containing a copy of the current frame. Copied frames include the entire undo stack for the frame, so you can copy, and then undo a portion of the frame</li>
<li>Change colours and line sizes</li>
<li>Change the opacity of the window (this is a hack to allow you to trace images until I get image backgrounds implemented)</li>
<li>Scale and translate the frame</li>
<li>Remove current frame (not undo-able)</li>
<li>Export as SVG</li>
<li>Export frame as PNG or JPEG (PNG includes alpha for any area not drawn)</li>
</ul>
<p>There is basic file handling, which may be useful as example code for learning Cocoa programming using Python. I&#8217;m still working at adding drawing tools besides freehand drawing, and I have ideas for a lot of other things, but the main idea is to keep the program from getting in your way&#8211;to keep as close to possible as sketching with a pencil on paper, but to make the process of creating simple animations easier.</p>
<p>Two features that are pretty close, and are important to the goal of the project, are export as Flash and export as Quicktime. Those will be coming sooner, rather than later.</p>
<p>The project page is at <a href="http://livingcode.org/project/drawingboard">http://livingcode.org/project/drawingboard</a> and you can find links there to the binary download, the source repository, and the bug/feature tracker. I&#8217;ve also set up Google groups for the Living Code projects: <a href="http://groups.google.com/group/livingcode-users">http://groups.google.com/group/livingcode-users</a> and <a href="http://groups.google.com/group/livingcode-developer">http://groups.google.com/group/livingcode-developer</a> for ongoing discussions.</p>
<p>A few people have seen me demo this program at the Vancouver Python Workshop and at Bar Camp Vancouver and expressed an interest, so I hope it can be of use, both in learning to program OS X with Python, and for creating animations. Please let me know what you find useful and what could be improved!</p>
]]></content>
        </entry>
    <entry>
    <id>http://livingcode.org/2008/pyobjc-at-vanpyz</id>
    <title type="html"><![CDATA[PyObjC at VanPyZ]]></title>
    <updated>2008-01-16T07:11:45Z</updated>
    <published>2006-10-03T07:03:04Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2006/10/02/pyobjc-at-vanpyz/feed" thr:count="0"  />
    <link rel="alternate" href="http://livingcode.org/2006/10/02/pyobjc-at-vanpyz" />
    <category scheme="http://livingcode.org" term="Python" />
    <summary type="html"><![CDATA[On Tuesday, October 3rd, at 7 pm, the Vancouver Python and Zope user&#8217;s group (VanPyZ) will be hosting two speakers. Paul Prescod will be discussing full-stack web frameworks in Python, and I will be presenting OS X programming in Python. This will probably not be a repeat of my presentation at the Vancouver Python Workshop [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2006/10/02/pyobjc-at-vanpyz"><![CDATA[<p>On Tuesday, October 3rd, at 7 pm, the Vancouver Python and Zope user&#8217;s group (<a href="http://www.vanpyz.org/index_html_wiki">VanPyZ</a>) will be hosting two speakers. Paul Prescod will be discussing full-stack web frameworks in Python, and I will be presenting OS X programming in Python. This will probably not be a repeat of my presentation at the Vancouver Python Workshop (<a href="http://livingcode.org/slides/vanpyw_2006-08-05.pdf">PDF slides</a>, for anyone who is interested) but using <a href="http://livingcode.org/project/drawingboard/">Drawing Board</a> and the <a href="http://livingcode.org/entry/tab_dumping_in_safari.html">InputManager hack</a> to show how you can use <a href="http://pyobjc.sourceforge.net/">PyObjC</a> to build new applications in Python quickly and extend existing Cocoa applications easily. My focus these days is on how to take control of your computer and make it work for you, rather than the other way around.</p>
<p>The VanPyZ meeting will be at the <a href="http://www.uniserve.com/">Uniserve</a> office, where Paul and I now work, Suite 1550, 1055 West Hastings Street, in Vancouver, BC. <a href="http://www.vmunix.com/mark/blog/archives/2006/09/18/announcing-chlo-mayo/">Mark Mayo</a> took time out from his new baby (congratulations, Mark!) to create an Upcoming <a href="http://upcoming.org/event/111453">event</a> for it. We&#8217;ll be going out for drinks afterwards, so come hang out with the Vancouver pythoneers.</p>
]]></content>
        </entry>
    <entry>
    <id>http://livingcode.org/2006/mac-os-x-software-favorites-part-one-basics</id>
    <title type="html"><![CDATA[Mac OS X Software Favorites Part One: Basics]]></title>
    <updated>2008-01-25T20:53:10Z</updated>
    <published>2006-09-11T07:12:48Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2006/09/10/mac-os-x-software-favorites-part-one-basics/feed" thr:count="0"  />
    <link rel="alternate" href="http://livingcode.org/2006/09/10/mac-os-x-software-favorites-part-one-basics" />
    <category scheme="http://livingcode.org" term="Mac" />
    <summary type="html"><![CDATA[Yesterday was my last day at my job for the past five years, and with it I left my Macbook Pro (it was a nice tool, but they own it). Coincidentally, I&#8217;m now setting up my new Macbook. Since I know several other people who are setting up new Macs, I thought I&#8217;d give my [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2006/09/10/mac-os-x-software-favorites-part-one-basics"><![CDATA[<p>Yesterday was my last day at my job for the past five years, and with it I left my Macbook Pro (it was a nice tool, but they own it). Coincidentally, I&#8217;m now setting up my new Macbook. Since I know several other people who are setting up new Macs, I thought I&#8217;d give my thoughts on some of the best software available. Since that&#8217;s a big topic, I&#8217;m going to break it up into several posts, starting with the basics: Application Launcher, Text Editor, Web Browser, Newsreader</p>
<h3>Macbook vs. Macbook Pro</h3>
<p>Before diving into the software, just a note on the hardware. I&#8217;m going with a black Macbook for several reasons. First, it looks really cool, and I can&#8217;t deny that appeals to me. Second, it is somewhat smaller and lighter than the smallest Macbook Pros, and since I carry my laptop to and from work every day by foot or bicycle, that matters (I&#8217;m getting two power bricks so I can leave one in each location to save even more weight). Third, the wifi reception is much better. Encasing an antenna in plastic appears to work better than encasing it in aluminum, go figure. Macbook Pros are more powerful, but only a bit, and mainly for heavy-duty 3D, which isn&#8217;t really my thing. We&#8217;ll see how much this matters in practice. White vs. Black Macbook: the white ones are rumored to stain really easily, plus did I mention that the black ones look really freaking cool? The Macbook is cheaper than the Macbook Pro, but that&#8217;s not a big factor in why I&#8217;m choosing it (since once again, work will own it, just a different work&#8211;more on that later). The Macbook also gets better battery life, is slightly less crotch-scaldingly hot, and so far I&#8217;m liking the keyboard a lot.</p>
<h3>Application Launcher: Quicksilver</h3>
<p>I used to use <a href="http://ranchero.com/tigerlaunch/">TigerLaunch</a> (free, open source), and still do on other Macs in the family, but once you&#8217;ve tried <a href="http://quicksilver.blacktree.com/">Quicksilver </a>(free, beta) there&#8217;s no going back. I&#8217;m still working on becoming a <a href="http://theappleblog.com/2006/02/14/quicksilver-tutorials-round-up/">Quicksilver power user</a>, but just the app-launching and file-searching facility is worth using this tool for. TigerLaunch is great for its simplicity, and Quicksilver is great for making you wonder how you ever got along without it. I&#8217;ve heard wonderful things about <a href="http://www.cocoatech.com/">PathFinder</a> ($34.95USD) and keep meaning to try it, but haven&#8217;t gotten to it yet. First I need to learn how to write Quicksilver plugins in Python&#8230;</p>
<h3>Editor: TextMate</h3>
<p>I used to use Pico on Unix and BBEdit Lite on Mac OS 7, back in the day. I couldn&#8217;t stand either vi or emacs. I wanted a T-shirt that read, &#8220;I&#8217;d rather die than use vi.&#8221; Then I worked at a company where the only editor you could count on being installed was vi and I began to get its keystrokes etched into the memory of my fingers. I&#8217;m not even that good at it, but sometimes vi can be so damn fast. Of course, I don&#8217;t use classic vi, but a nice modern <a href="http://macvim.org/OSX/index.php">Vim</a> (free, open source). I&#8217;ve tried to switch back to Mac editors a few times: <a href="http://www.barebones.com/products/textwrangler/">TextWrangler</a> (free, the OS X incarnation of BBEdit Lite), <a href="http://www.codingmonkeys.de/subethaedit/">SubEthaEdit</a> ($35USD, great for collaborative editing), <a href="http://smultron.sourceforge.net/">Smultron</a> (free, open source). These are all great editors, but each one lacked something that kept me from switching over completely. I had been hearing about <a href="http://macromates.com/">TextMate</a> (€39EUR) for some time, but had trouble getting excited over a commercial editor when there were so many free ones to choose from. I finally gave it a serious try and I&#8217;m hooked. It still isn&#8217;t as easy to search as vi is, but the way it can be expanded on with plugins and the general fit and feel are great.</p>
<h3>Browser: Safari + Saft</h3>
<p>Safari is shaping up to be a great browser, fast and powerful. There are a few details that are missing, but nearly all of them are satisfied with the <a href="http://haoli.dnsalias.com/">Saft</a> ($12USD) extension, which provides great ad filtering, improves the way windows and tabs are handled, and gives shortcuts for accessing search sites from the address bar, among many other features. Safari itself takes two kinds of plugins, <a href="http://developer.apple.com/technotes/tn/tn2020.html">Netscape-style</a> plugins and <a href="http://developer.apple.com/documentation/InternetWeb/Conceptual/WebKit_PluginProgTopic/index.html">WebKit</a> plugins. Unfortunately, these are only triggered when their target mime types are loaded, so they can&#8217;t readily be used to extend the way the application itself works. So all of the Safari extensions that I&#8217;m aware of are implemented as InputManagers (see my post on <a href="http://livingcode.org/entry/tab_dumping_in_safari.html">TabDump</a> for more on InputManagers). My TabDump extension is the other extension that I find indispensable, which is why I wrote it, but more important than TabDump itself is the example it gives for writing your own extensions to Safari or any other (Cocoa) application. That&#8217;s what I love about OS X, you can get into it and take control of your own machine, make it your own. You can do that with Linux, of course, but the high-level of Cocoa applications make a huge difference. Back to browsers, I also recommend the <a href="http://www.flip4mac.com/wmv_download.htm">Flip4Mac</a> plugin, to allow your browser to play Windows Media files directly. Finally, I also keep <a href="http://www.mozilla.com/firefox/">Firefox</a> (free, open-source) around for its advanced features. It&#8217;s not my main browser, but it has features that show where the browser (and all applications) will be going in the future. I may have to do a separate post just about the cool features coming in <a href="http://wiki.mozilla.org/Firefox2">Firefox 2</a> (currently in beta) and <a href="http://wiki.mozilla.org/Firefox3">Firefox 3</a>. Other good browsers to keep around for testing are <a href="http://www.caminobrowser.org/">Camino</a> (the Firefox engine with a Cocoa UI) and <a href="http://www.opera.com/">Opera</a> (free). For more Safari plugins and extensions than you could ever use, check the listings at <a href="http://pimpmysafari.com/">Pimp My Safari</a>.</p>
<h3>Newsreader: NetNewsWire</h3>
<p>I realize that Safari now supports RSS feeds in some fashion, but it really isn&#8217;t a newsreader. I&#8217;m not crazy about trying to put every possible application into the browser. If you have to work betwwen Windows, OS X, and Linux, or some combination thereof, then things like <a href="http://mail.google.com/mail/">GMail</a> and <a href="http://www.bloglines.com/">Bloglines</a> can be a godsend, otherwise you&#8217;re probably better off with a dedicated desktop app. <a href="http://www.newsgator.com/NGOLProduct.aspx?ProdID=NetNewsWire">NetNewsWire</a> ($29.95USD) is a desktop app that is so good, it was the most popular newsreader (by far) for a long time, even though it only ran on OS X. Since being acquired by NewsGator, it&#8217;s still as good, but now synchronizes your feeds with the NewsGator site, so you get the best of both worlds: a top-notch desktop app, and a webapp that stays sychronized with it. I have a feeling that in the near future, nearly all applications will work this way. And if you can&#8217;t afford the price, they still offer NetNewsWire Lite for free (and I happily used it for a couple of years before upgrading).</p>
<h3>Mail: Mail.app</h3>
<p>Apple gives you a decent email program with OS X, nothing too fancy. It keeps getting better (mostly) with each new release. There has been some complaints about Mail.app in OS 10.4 changing to a proprietary format (which they did in order to integrate with Spotlight) and I&#8217;ll have more to say about that in a future post. I have tried using Gmail (when I was mostly using Windows at work) and <a href="http://www.mozilla.com/thunderbird/">Thunderbird</a> (free, open-source), and coming back to Mail.app is like a breath of fresh air. For nearly everything I do, Mail.app is better. It&#8217;s far from perfect, and sites like HawkWings specialize in plugins and extensions for Mail.app, but it sure works for me. I do wonder why email programs are still so hard to get right. Since email is basically the oldest use of the internet (and networks generally), and the original &#8220;killer app,&#8221; if we don&#8217;t know how to do email yet, what hope do we have for anything that&#8217;s actually complicated? Of course, perhaps because they have been around for so long, choice of email programs tends to be very personal, so all I can say is, Mail.app works for me. I also recommend the <a href="http://home.cc.gatech.edu/eaganj/MailApp">AttachmentScannerPlugin</a> by James Eagan, who also provides a <a href="http://www.bazza.com/~eaganj/weblog/2006/03/29/demystifying-mail-app-plugins/">tutorial on writing plugins for Mail.app</a> which is generally applicable to extending Cocoa programs and using their undocumented private APIs. Also, he uses Python and PyObjC to write the plugin, which makes me happy.</p>
<p>Regular reader(s) were probably wondering how I was going to get that plug for Python and PyObjC in there, eh?</p>
]]></content>
        </entry>
    <entry>
    <id>http://livingcode.org/2006/bar-camp-tomorrow</id>
    <title type="html"><![CDATA[Bar Camp Tomorrow]]></title>
    <updated>2008-01-25T21:27:43Z</updated>
    <published>2006-08-26T07:30:29Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2006/08/25/bar-camp-tomorrow/feed" thr:count="0"  />
    <link rel="alternate" href="http://livingcode.org/2006/08/25/bar-camp-tomorrow" />
    <category scheme="http://livingcode.org" term="News" />
    <summary type="html"><![CDATA[Tomorrow, from 6PM to Saturday at 6PM will be the Bar Camp Vancouver. I&#8217;ll be heading over there with my neighbor, former co-worker, and original member of Pluto, John Ounpuu, currently of Sutori fame. I&#8217;m planning on ducking out to sleep at home rather than camping there, but I&#8217;m sure it will be a great [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2006/08/25/bar-camp-tomorrow"><![CDATA[<p>Tomorrow, from 6PM to Saturday at 6PM will be the <a href="http://barcamp.org/BarCampVancouver">Bar Camp Vancouver</a>. I&#8217;ll be heading over there with my neighbor, former co-worker, and original member of Pluto, John Ounpuu, currently of <a href="http://sutori.com/">Sutori</a> fame. I&#8217;m planning on ducking out to sleep at home rather than camping there, but I&#8217;m sure it will be a great time. If there is time I may reprise my presentation on Python, OS X, and Kids from the Vancouver Python Workshop. If time is short I may still be able to demo Drawing Board. If time is really short I&#8217;ll still try to squeeze in a demo of the new hack I figured out last night (see next post). I&#8217;m also hoping to find some time to hack on turtle graphics for OS X, since I&#8217;m so close to having a working port of the standard library turtle graphics in PyObjC. But the main thing I&#8217;m excited about is meeting folks, it&#8217;s going to be a <a href="http://barcamp.org/BarCampVancouverRegistry">great crowd</a>.</p>
<p>Vancouver is such a great place. There&#8217;s the standard stuff: Great weather, beautiful beaches, forests and mountains. Then there is all the rest: lots of interesting geeks of various stripes, cool places to work, small conferences to attend. I&#8217;ve had so much more fun at the Vancouver Python Workshop and Northern Voices than at big anonymous events like JavaOne and OOPSLA. There&#8217;s just no contest. And BarCamp is all about being a small, intimate event&#8211;that appears to be its whole entire purpose. I can hardly wait.</p>
]]></content>
        </entry>
    <entry>
    <id>http://livingcode.org/2006/vancouver-python-workshop</id>
    <title type="html"><![CDATA[Vancouver Python Workshop]]></title>
    <updated>2008-01-21T02:32:41Z</updated>
    <published>2006-08-20T15:04:20Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2006/08/20/vancouver-python-workshop/feed" thr:count="0"  />
    <link rel="alternate" href="http://livingcode.org/2006/08/20/vancouver-python-workshop" />
    <category scheme="http://livingcode.org" term="Python" />
    <summary type="html"><![CDATA[[Updated 2006-08-20 to add links. All (most?) presentations are being posted on the proceedings page]
Last weekend I attended the Vancouver Python Workshop here in town. I love this conference because it&#8217;s small and local, but attracts a great crowd. There were a few folks I know mainly from the edu-sig mailing list. Guido was there [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2006/08/20/vancouver-python-workshop"><![CDATA[<p>[Updated 2006-08-20 to add links. All (most?) presentations are being posted on the <a href="http://www.vanpyz.org/conference/2006/proceedings/">proceedings</a> page]</p>
<p>Last weekend I attended the Vancouver Python Workshop here in town. I love this conference because it&#8217;s small and local, but attracts a great crowd. There were a few folks I know mainly from the <a href="http://mail.python.org/mailman/listinfo/edu-sig">edu-sig</a> mailing list. Guido was there to give the keynote, I got to talk with <a href="http://blog.ianbicking.org/">Ian Bicking</a> a fair bit, and I had never realized that <a href="http://www.cs.sfu.ca/people/Faculty/Profile/tjd.html">Toby Donaldson</a> is a fellow Vancouverite.</p>
<h3>Friday night: Keynotes</h3>
<p><a href="http://www.artima.com/weblogs/index.jsp?blogger=guido">Guido</a> (van Rossum, creator of Python, for anyone reading this who is not soaking in Python every day) gave a keynote on the state of the upcoming Python 3000. Since I make an effort to keep up with this there wasn&#8217;t much in the way of surprises here, but it&#8217;s always good to hear it from the BDFL&#8217;s mouth. I&#8217;m excited by what&#8217;s happening in Python lately, both in language changes and in the libraries, and I think Python 3000 will be a move in the right direction when it comes.</p>
<p><a href="http://blogs.msdn.com/hugunin/">Jim Hugunin</a>, initiator of the <a href="http://scipy.org/NumPy">Numeric</a> extension, <a href="http://www.jython.org/Project/index.html">Jython</a> (Python on the Java virtual machine), and most recently <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython">IronPython</a> (Python on Microsoft&#8217;s dotNet virtual machine) also gave a keynote. He showed how having Python running in the same runtime as your C# code allows you to have stack traces all the way down, which is an advantage over <a href="http://pyobjc.sourceforge.net/">PyObjC</a>. It also helps to be binding to a language which is garbage collected. In PyObjC they go to lengths to make the runtime behave like garbage-collected Python, but there are still some edge cases that can sneak in and bite you. Of course, Apple&#8217;s announcement of garbage-collected Objective-C in <a href="http://www.apple.com/macosx/leopard/xcode.html">XCode 3</a> next year should fix that. Jim&#8217;s an engaging speaker and seems like a really nice guy. And since both Google (&#8221;do no evil&#8221;) and Microsoft (&#8221;evil empire&#8221;) were represented, balance was maintained in the Force.</p>
<p>After the keynotes there was a reception at the <a href="http://www.steamworks.com/gastown_index.htm">Steamworks</a> brew pub, which is a great place. Staying up late drinking may not be the best way to kick off a conference that starts at 8 am the next day though. I was home by midnight, but I heard from many others that they were out until 3 am. Ouch.</p>
<h3>Saturday: Workshop Day One</h3>
<p>This was an intense day for me. I was scheduled to give a presentation, but then Paul (Prescod, my friend and co-worker, and one of the conference organizers) asked me to also give a lightning talk and be on a panel discussion. Since I didn&#8217;t have time to prepare much for these I was a bit nervous. On top of already being nearly sick with stage fright getting ready for the presentation I did prepare for.</p>
<p>Guido hadn&#8217;t had time for questions after his keynote the night before, so the conference kicked off with a Q&#038;A session for him. After that was the lightning talks, and I gave the first one. Aside from not having time to prepare, I had never given a lightning talk before. I demo&#8217;d Drawing Board, the animation tool I&#8217;ve been working on for my kids, which filled my five minutes pretty easily. I got some nice feedback about it too, which is especially gratifying since after I&#8217;ve been working on something for awhile I tend to only see all the problems I know it has, rather than what is good about it. Drawing Board has been a real struggle for me, both in learning PyObjC and the &#8220;Cocoa Way&#8221; of doing things, and trying to push it into new territory, so I was pleased with how its first public demo was received.</p>
<p>After the lightning talks I attended the beginning of Paul&#8217;s tutorial for newcomers to Python to try and pick up some tips. After lurking on the edu-sig mailing list, I&#8217;m trying to organized some Python classes at my daughter&#8217;s school for the kids there. Paul&#8217;s approach was more towards people already programming in other languages, so I didn&#8217;t get much there that I could use, but it gave me some things to think about at least.</p>
<p>Ian Bicking&#8217;s talk on <a href="http://wsgi.org/wsgi">WSGI</a> got extended from one 45-minute slot to two, and I only got so sit in on the first half, because it overlapped with my presentation. I loved his hand-drawn slides and his take on the &#8220;Internet is a series of tubes&#8221; meme. He&#8217;s a good presenter and WSGI is important stuff for Python, giving it the kind of basic web framework that Servlets gives to Java, which Python has desperately needed for a long time. Now if I could just wrap my brain around <a href="http://pythonpaste.org/">Paste</a> I think I could achieve web enlightenment&#8230;</p>
<p>My talk, &#8220;OS X, Python, and Kids&#8221; went well. I used the whole 45 minutes (not like last time I presented when I went nervously through my presentation in 10 minutes and was then left embarrassed on stage), took some good questions, and people seemed to be engaged. I&#8217;ve posted my slides, with notes based on what I was talking about during the presentation, <a href="http://livingcode.org/entry/livingcode.org/slides/vanpyw_2006-08-05.pdf">here</a> (3MB PDF). The feedback from this presentation, where I used several of my projects as examples of what you can accomplish with PyObjC, was very good, at least from the folks who came up to me. A couple of people even sounded like they were on the fence about whether to switch to Macs and I might have given them a push.</p>
<p>After my talk, and lunch, was the panel discussing how to embed C, C++, C#, and other languages in Python. We had Jim Hugunin (IronPython), Tom Weir (using SWIG on a proprietary project), Samuele Pedroni (of <a href="http://codespeak.net/pypy/dist/pypy/doc/news.html">PyPy</a>), and me. There was no moderator, and while I&#8217;ve followed the various tools to wrap libraries for Python, and I&#8217;ve used a lot of libraries that are wrapped for Python, I haven&#8217;t actually done much wrapping myself, so I tried to be a moderator and get the conversation going. <a href="http://www.swig.org/">SWIG</a> seemed to be used by the most people in the room, and while as a user of SWIG I&#8217;ve struggled with it, since any project that uses it seems to be dependent on a very specific version which you then have to find, download, and install. So I&#8217;m not a big SWIG fan. On the other hand, folks who use it for wrapping C code can freeze the version they&#8217;re using and more or less rely on it, so it works great for them (although I guess debugging is still a bear). I still thing SWIG is part of the problem, not part of the solution.</p>
<p>At the end of day one was a great BBQ at <a href="http://www.city.vancouver.bc.ca/parks/rec/beaches/locarno.htm">Locarno Beach</a>. Daniela and I took the kids, then we stayed on the beach to watch the final night of the <a href="http://www.hsbccelebrationoflight.com/fireworks/">Celebration of Light</a> fireworks. It was Mexico&#8217;s turn to light up the sky and they did a spectacular job, winning the four-night competition with Italy, China, and the Czech Repulic. So then there was an encore display, and then we tried to get home through the gridlock that follows fireworks in Vancouver. We got home by midnight, washed the sand of the kids, and put them to bed.</p>
<h3>Sunday: Workshop Day Two</h3>
<p>After two late nights (for me) and early mornings (for weekends) I&#8217;m beginning to feel really beat. I&#8217;m also coming down from the adrenaline high I was on yesterday, before and after presenting. I was also distracted by trying to implement the Turtle module in the standard library from Tkinter to PyObjC (and simultaneously port my Kutia turtle program from Tkinter to PyObjC). I actually got pretty far with it, but probably need to post some questions on the PyObjC mailing list to get it finished.</p>
<p>The morning started with a status report on PyPy from Samuele Pedroni, one of the furthest travellers to the conference, coming in from Italy. I&#8217;m fascinated by the progress PyPy has made, going from thousands of times slower than CPython to only a couple of times slower. PyPy is Python implemented in Python, specifically implemented in a subset of Python which can be efficiently compiled to C, called <a href="http://codespeak.net/pypy/dist/pypy/doc/coding-guide.html#restricted-python">RPython</a>. This is similar to how <a href="http://ftp.squeak.org/docs/OOPSLA.Squeak.html">Squeak</a> Smalltalk is implemented (a small, compilable subset of Python is used to implement the rest). The advantage of PyPy is that because the language definition itself is relatively high level, they can quickly implement all kinds of interesting things, like <a href="http://codespeak.net/pypy/dist/pypy/doc/stackless.html">Stackless</a> Python, compiling python to dotNet or Java, even experimenting with compiling <a href="http://codespeak.net/pypy/dist/pypy/doc/getting-started.html#translating-the-flow-graph-to-javascript-code">Python to Javascript</a>. It&#8217;s a very interesting project and a lot of fun to watch. I&#8217;m rooting for them.</p>
<p>Next was Wilson Fowlie&#8217;s presentation on <a href="http://pyparsing.wikispaces.com/">PyParsing</a>. I had lunch with Wilson and he&#8217;s a great guy. He shouldn&#8217;t be so self-deprecating in his presentation because he had great information and it was an interesting topic. Parsing libraries are an area where Python has an excess of riches, and it can be difficult to decide what to use. Wilson made his choice and is happy with it, and makes a pretty convincing case for choosing PyParsing. It would be interesting to see projects such as <a href="http://docutils.sourceforge.net/rst.html">reStructured Text</a>, <a href="http://www.freewisdom.org/projects/python-markdown/">PyMarkdown</a>, and <a href="http://dom.eav.free.fr/">PyTextile</a> all built on top of the same basic parsing engine. Next time I have a file type to parse I will give PyParsing a try, based on this Wilson&#8217;s presentation.</p>
<p>After lunch, <a href="http://www.eskimo.com/~jet/">James Thiele</a> gave a talk on embedding domain specific languages in Python, mainly revolving around the hooks Python gives you for importing libraries. By using the import hooks you can import code as Python objects which is not Python code. This is pretty cool, especially when coupled with the previous talk on Parsing.</p>
<p>There was a panel discusson on Little Languages, which both Wilson and James were on, but by now fatigue and distraction were taking their toll and I wasn&#8217;t a very good audience.</p>
<p>After lunch there was a presentation by Leonardo Almeida on Python and Zope in Brazil, which was basically that they are both widely used, in both business and government, but companies that use them don&#8217;t want to talk about it because they regard Python as their secret weapon.</p>
<p>David Ostrowski gave a talk on teaching with Python in graduate computer science classes, but I didn&#8217;t really enjoy the presentation. I was too tired and his points about Python were too familiar. I didn&#8217;t hear anything new, but it all appeared to be new to him. More power to him, I guess.</p>
<p>There were some good lightning talks at the end of the conference, including Brian Quinlan showing a hack he&#8217;d whipped up after the earlier talk on importing domain specific languages. He showed how to use the import hooks and the csv module to load comma separated value files as native python datatypes.</p>
<p>To close the conference, <a href="http://www.spectrum.ieee.org/careers/careerstemplate.jsp?ArticleId=p020505">Ian Caven</a> gave a great show about how he and a partner built up a successful business using Python (and OS X). They restore movies for DVD release and they use hundreds of Macs running in parallel, with all the processing managed by Python. It&#8217;s a great story and Ian is a great presenter, so that was a high note to end the conference on.</p>
<p>Looking forward to next time, for sure. Thanks to all the organizers!</p>
]]></content>
        </entry>
    <entry>
    <id>http://livingcode.org/2006/pastels</id>
    <title type="html"><![CDATA[Pastels]]></title>
    <updated>2008-01-21T04:43:10Z</updated>
    <published>2006-08-20T02:37:58Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2006/08/19/pastels/feed" thr:count="0"  />
    <link rel="alternate" href="http://livingcode.org/2006/08/19/pastels" />
    <category scheme="http://livingcode.org" term="Python" />
    <summary type="html"><![CDATA[[Update: Thanks to Blake Winton for pointing out that the project page link to the Pastels download was broken, fixed now. Also added a link to the project page.]
Pastels is an example project for creating an OS X screensaver in Python using PyObjC. By extension it could be used as an example for building nearly [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2006/08/19/pastels"><![CDATA[<p>[Update: Thanks to Blake Winton for pointing out that the project page link to the Pastels download was broken, fixed now. Also added a link to the project page.]</p>
<p>Pastels is an example project for creating an OS X screensaver in Python using PyObjC. By extension it could be used as an example for building nearly any plugin or bundle for OS X. It started when I had an idea for drawing a simple squiggle, over and over, while cycling the colours and moving the squiggle around. I was very pleased with how it turned out.</p>
<p>Project page: <a href="http://livingcode.org/project/pastels/">http://livingcode.org/project/pastels/</a></p>
<p>It&#8217;s also my first attempt at hosting an open-source project at Google with their new hosting program. If it works out well I will add more of my projects there, which will save me trying to set up and configure Subversion on Dreamhost for public access (probably not difficult, but one more thing I don&#8217;t have to do means more time for writing example code and tutorials).</p>
<p>I&#8217;m working on the tutorial text to go along with this project, so ask any questions you have and I&#8217;ll try to get to them in the tutorial.</p>
<p>If you are seeing this on my site (as opposed to the Atom feed), there are some changes I&#8217;m making to the site that I&#8217;d like to point out. I&#8217;ve added pages for projects and mini-projects which use the same stylesheet and includes as the rest of the site. I know the stylesheet is uglyless than completely attractive right now&#8211;the first thing was to get everything factored and consistent, then to make it pretty. The projects page only has one item on it (Pastels), but that should be changing now that I have the infrastructure set up the way I want it. Nearly all the projects I mentioned in my presentation at the Vancouver Python Workshop will get their own pages soon. More about that in my next post.</p>
]]></content>
        </entry>
    <entry>
    <id>http://livingcode.org/2006/xml-article-without-the-xml</id>
    <title type="html"><![CDATA[XML Article without the XML]]></title>
    <updated>2008-01-21T05:02:55Z</updated>
    <published>2006-08-05T04:52:30Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2006/08/04/xml-article-without-the-xml/feed" thr:count="0"  />
    <link rel="alternate" href="http://livingcode.org/2006/08/04/xml-article-without-the-xml" />
    <category scheme="http://livingcode.org" term="Python" />
    <summary type="html"><![CDATA[My latest article for David Mertz&#8217;s column XML Matters is up at IBM developerWorks: Lighter than microformats: Picoformats Ajax without X, Microformats without angle brackets went live a couple of days ago. It isn&#8217;t so much about XML as how to avoid XML. My feelings towards XML are that it is useful and good, but [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2006/08/04/xml-article-without-the-xml"><![CDATA[<p>My latest article for <a href="http://gnosis.cx/dW/">David Mertz&#8217;s </a>column <a href="http://www.ibm.com/developerworks/views/xml/libraryview.jsp?search_by=xml+matters">XML Matters</a> is up at <a href="http://www.ibm.com/developerworks">IBM developerWorks</a>: <a href="http://www-128.ibm.com/developerworks/library/x-matters46/">Lighter than microformats: Picoformats</a> <em>Ajax without X, Microformats without angle brackets</em> went live a couple of days ago. It isn&#8217;t so much about XML as how to avoid XML. My feelings towards XML are that it is useful and good, but overused and not a panacea. By providing some alternatives, maybe some of the backlash against the &#8220;XML everywhere for everything&#8221; meme can be averted.</p>
<p>I&#8217;ve been meaning to post about the article, but I keep getting caught up preparing my presentation for the <a href="http://www.vanpyz.org/conference">Vancouver Python Workshop</a> on Saturday (the workshop starts Friday August 3rd and goes through Sunday August 5th). My talk this year is on using [PyObjC] to create applications and plugins for OS X using Python. I&#8217;ll get the slides up after, as soon as I can. I&#8217;m also planning on doing a shorter version of this talk at <a href="http://upcoming.org/event/87852">Bar Camp Vancouver</a> which is 6 pm Friday, August 25 to 6 pm Saturday, August 26.</p>
<p>And I should have mentioned the Google talk at the<a href="http://www.bcgsc.ca/vanhpc/"> Vancouver High Performance Computing User Group</a> before it happened on July 27th. Narayanan &#8216;Shiva&#8217; Shivakumar came up from their Seattle office to present mostly old information from their published papers such as The <a href="http://labs.google.com/papers/gfs.html">Google File System</a>, <a href="http://labs.google.com/papers/mapreduce.html">MapReduce</a>, and <a href="http://video.google.com/videoplay?docid=7278544055668715642">BigTable</a> (video). The talk over beers after was fun, and it was good to see my friend <a href="http://www.vmunix.com/mark/">Mark</a> and find out he has a <a href="http://www.vmunix.com/mark/blog/">blog</a>, even if it&#8217;s over my head much of the time.</p>
<p>Well, that&#8217;s my update dump. More stuff on actually using PyObjC coming Real Soon Now.</p>
]]></content>
        </entry>
    <entry>
    <id>http://livingcode.org/2006/screencast-in-cocoa-python</id>
    <title type="html"><![CDATA[Screencast in Cocoa (Python)]]></title>
    <updated>2008-01-23T06:31:12Z</updated>
    <published>2006-03-11T03:58:06Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2006/03/10/screencast-in-cocoa-python/feed" thr:count="0"  />
    <link rel="alternate" href="http://livingcode.org/2006/03/10/screencast-in-cocoa-python" />
    <category scheme="http://livingcode.org" term="Python" />
    <summary type="html"><![CDATA[I noticed that jwz is trying to take a screenshot in Cocoa and having trouble. I&#8217;m happy to see that he&#8217;s porting his awesome collection of screensavers to OS X, that&#8217;s great news. As for taking screen shots, I&#8217;m amazed it is as hard as it seems to be&#8211;heck even the new Nokia Series 60 [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2006/03/10/screencast-in-cocoa-python"><![CDATA[<p>I noticed that jwz is trying to <a href="http://jwz.livejournal.com/608233.html">take a screenshot</a> in Cocoa and having trouble. I&#8217;m happy to see that he&#8217;s porting his awesome collection of screensavers to OS X, that&#8217;s great news. As for taking screen shots, I&#8217;m amazed it is as hard as it seems to be&#8211;heck even the new Nokia Series 60 give you the ability to take screeenshots from Python now. In any case, here is a method that works for me under PyObjC. It assumes it is part of a Cocoa object and that you&#8217;ve done a from <span class="code">AppKit import *</span> already. Since I can&#8217;t comment on jwz&#8217;s blog (whether it&#8217;s because I don&#8217;t use LiveJournal or because I do use Safari, I don&#8217;t know), I&#8217;ll post it here instead.</p>
<pre>def screenShot(self):
    rect = NSScreen.mainScreen().frame()
    image = NSImage.alloc().initWithSize_((rect.size.width, rect.size.height))
    window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(
        rect,
        NSBorderlessWindowMask,
        NSBackingStoreNonretained,
        False)
    view = NSView.alloc().initWithFrame_(rect)
    window.setLevel_(NSScreenSaverWindowLevel + 100)
    window.setHasShadow_(False)
    window.setAlphaValue_(0.0)
    window.setContentView_(view)
    window.orderFront_(self)
    view.lockFocus()
    screenRep= NSBitmapImageRep.alloc().initWithFocusedViewRect_(rect)
    image.addRepresentation_(screenRep)
    view.unlockFocus()
    window.orderOut_(self)
    window.close()
    return image</pre>
<p>I cribbed this several months ago from some example Cocoa code, but forgot to make a note of where I got it. If anyone recognizes this pattern, please let me know so I can attribute it.</p>
<p>[Update 2006-03-10]</p>
<p>Nils Soffer pointed out:</p>
<blockquote>
<pre>A simpler solution:</pre>
<pre>
try:</pre>
<pre>    screenshot = 'screenshort.pdf'</pre>
<pre>    os.system('screencapture -i %s' % screenshot)</pre>
<pre>    image = NSImage.alloc().initWithContentsOfFile_(screenshot)</pre>
<pre>finally:</pre>
<pre>    os.remove(screenshot)</pre>
<p>:-)</p></blockquote>
<p>Which reminds me, you can also use the command-line <span class="code">screencapture -c</span> to go to the clipboard instead of a file.  This might be faster, but I haven&#8217;t tested it yet.  I still think there should be a Cocoa method to grab the underlying framebuffer of the screen. Besides the <span class="code">-c</span> flag to send the image to the clipboard there is also a <span class="code">-C</span> flag to capture the cursor as well.</p>
<p>[Update 2008-01-22]</p>
<p>Digging through old mail as I move this entry from my custom blog setup to Wordpress, I found where I got this code from originally. It&#8217;s from the Irate Scotsman&#8217;s <a href="http://mattgemmell.com/source">Screen Sharing </a>code.  Thanks, Matt!</p>
]]></content>
        </entry>
    <entry>
    <id>http://livingcode.org/2006/silent-blog</id>
    <title type="html"><![CDATA[Silent Blog]]></title>
    <updated>2008-01-23T06:33:11Z</updated>
    <published>2006-03-04T06:31:15Z</published>
    <author>
      <name>Dethe</name>
      <email>delza@livingcode.org</email>
<uri>http://livingcode.org/</uri>    </author>
    <link rel="replies" type="application/atom+xml" href="http://livingcode.org/2006/03/03/silent-blog/feed" thr:count="0"  />
    <link rel="alternate" href="http://livingcode.org/2006/03/03/silent-blog" />
    <category scheme="http://livingcode.org" term="Python" />
    <summary type="html"><![CDATA[Yes, I&#8217;ve been quiet for awhile. No, I&#8217;m not going to apologize, and I wish more bloggers would stop apologizing when they take time off. One of the great things about Atom/RSS feeds is that I can keep up with blogs that are posted to infrequently, which includes some of my favorites. Don&#8217;t feel like [...]]]></summary>
      <content type="html" xml:base="http://livingcode.org/2006/03/03/silent-blog"><![CDATA[<p>Yes, I&#8217;ve been quiet for awhile. No, I&#8217;m not going to apologize, and I wish more bloggers would stop apologizing when they take time off. One of the great things about Atom/RSS feeds is that I can keep up with blogs that are posted to infrequently, which includes some of my favorites. Don&#8217;t feel like you need to post all the time&#8211;we&#8217;ve all got plenty of other things to read!</p>
<p>My quiet time is going to continue for a bit longer, but while I won&#8217;t apologize, I will at least explain. Here&#8217;s what I&#8217;m doing instead with the couple of hours I have between putting the kids to bed and going to bed myself.</p>
<ul>
<li>Writing the OS X version of the file uploader for The Conversation Network. At some point this will be made public, and the idea is to open source it. I&#8217;ll be sure to point that out when it happens. It&#8217;s been really great to have this opportunity to work with Doug Kaye and the rest of the gang from ITConversations, after being an admirer (and consumer) of their work for some time.</li>
<li>Attended the Northern Voice and Moose Camp conference, where I was fortunate enough to co-moderate a session on community and blogs with Nancy White</li>
<li>Writing my own weblog software. Blogger has a better interface than manilasites, but that&#8217;s not saying much. I&#8217;m also trying to port my old content from manilasites, plus my pre-blog-era work, plus my paper journal. All of this will be hosted at livingcode.org in the near future.</li>
<li>Writing more articles for IBM developerWorks, I hope to have more to say about that Real Soon Now</li>
<li>Generally organizing the livingcode site better, getting projects their own pages, putting code into SVN. Trying to use Sourceforge was a huge failure, their interface is just too crufty and they still don&#8217;t support Subversion. But Dreamhost (where livingcode.org is hosted) does support Subversion now, so I&#8217;m going to be moving all my public code over there.</li>
<li>I wrote a screensaver using PyObjC which I&#8217;m hoping to get included in their distribution as an example, but I need to do some refactoring first (in the time leftover from other projects). I want to write that up too, it was pretty interesting to work on.</li>
<li>I periodically take a stab at porting VPython to the Aqua environment. I have some ideas for this (some of them probably heretical to the VPython folks), but need time to work on them. Notice a pattern emerging?</li>
<li>Porting Apple&#8217;s Sketch demo application from ObjectiveC to PyObjC.</li>
<li>Several of these things are just precursors to DrawingBoard, my animation program for kids. I really, really want to be working on that, but need to get some of the smaller projects finished and out of my head so I can concentrate.</li>
<li>Exploring programming environments for my kids. My nine-year-old daughter and I will try competing in the PyWeek game challenge later this month.</li>
<li>I&#8217;m sure I&#8217;ve forgotten several significant things.</li>
</ul>
<p>More news as it happens.</p>
]]></content>
        </entry>
  </feed>
