<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jessenoller.com &#187; Apple</title>
	<atom:link href="http://jessenoller.com/category/technology/apple/feed/" rel="self" type="application/rss+xml" />
	<link>http://jessenoller.com</link>
	<description>python, programming and other things</description>
	<lastBuildDate>Wed, 11 Jan 2012 19:01:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Django, mod_wsgi, Apache and OS X — do it.</title>
		<link>http://jessenoller.com/2009/07/24/django-mod_wsgi-apache-and-os-x-do-it/</link>
		<comments>http://jessenoller.com/2009/07/24/django-mod_wsgi-apache-and-os-x-do-it/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 18:40:17 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://jessenoller.com/?p=655</guid>
		<description><![CDATA[So, I'm one of those people where I don't like running things "too far" from what a production setup might look like (I code on OS/X, deploy to Linux). This is why I jump(ed) through various hoops on my OS X system to get Apache/Django/mod_wsgi/etc all up and running and happy (not for serving ...]]></description>
			<content:encoded><![CDATA[<p><img src="http://jessenoller.com/wp-content/uploads/2009/07/whut-2.jpg" alt="whut_2.jpg" border="5" width="108" height="117" align="right" />So, I’m one of those people where I don’t like running things “too far” from what a production setup might look like (I code on OS/X, deploy to Linux). This is why I jump(ed) through various hoops on my OS X system to get Apache/Django/mod_wsgi/etc all up and running and happy (not for serving the site; just developing).</p>
<p>Since I like simple/succinct guides, I thought I’d post what I did so others can follow in my stead. </p>
<p><b>Note:</b> These instructions work with the python 2.5 version which ships with Leopard, or a self-compiled version of 2.6 (which is what I prefer) — see the <a href="http://code.google.com/p/modwsgi/wiki/InstallationOnMacOSX" target="_blank">InstallationOnMacOSX</a> mod_wsgi page. Additionally, see the “Missing Code For Architecture” section for possible work-arounds if you find yourself needing 32 bit execution of Apache; I think the “Forcing 32 Bit Execution” are preferred over the “thinning” of the Apache binary.</p>
<p>First, download and install mod_wsgi on leopard, this is as easy as (on Leopard):</p>
<pre>
curl -o mod_wsgi.tgz http://modwsgi.googlecode.com/files/mod_wsgi-2.5.tar.gz
tar -xzf mod_wsgi.tgz
cd mod_wsgi-2.5
./configure
make
sudo make install
</pre>
<p>Now, edit (via sudo) /etc/apache2/httpd.conf and add the line:</p>
<pre>
LoadModule wsgi_module libexec/apache2/mod_wsgi.so
</pre>
<p>After the rest of the LoadModule lines. Cool.</p>
<p>Invariably all of my directions play with virtualenv/virtualenvwrapper and pip:</p>
<pre>
mkvirtualenv django
cdvirtualenv
easy_install pip
pip install http://media.djangoproject.com/releases/1.1/Django-1.1-rc-1.tar.gz
django-admin.py startproject mysite
django-admin.py startapp myapp
cd mysite
mkdir apache
mkdir media
</pre>
<p>Now, that just sets up the skeleton — the meat of the wsgi configuration goes in apache/ in the mysite/apache directory. The first file is named mysite.wsgi:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p655code1'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6551"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p655code1"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">sys</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#Calculate the path based on the location of the WSGI script.</span>
apache_configuration = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>__file__<span style="color: black;">&#41;</span>
project = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>apache_configuration<span style="color: black;">&#41;</span>
workspace = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>project<span style="color: black;">&#41;</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>workspace<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'DJANGO_SETTINGS_MODULE'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'mysite.settings'</span>
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>
application = django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>.<span style="color: black;">WSGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>This does the needed wsgi project magic for the Django application — don’t worry about the interpreter path; we’ll do that next.</p>
<p>Next up is a file named apache_django_wsgi.conf, this looks like this:</p>
<pre>
# mod_wsgi configuration directives - I like having stdout access, the other two
# options run mod_wsgi in daemon mode - more on this in a minute.
WSGIPythonHome /&lt;path to virtualenv&gt;
WSGIRestrictStdout Off
WSGIDaemonProcess django
WSGIProcessGroup django

#
# This should be the path of the /mysite/media directory
# for example "/Users/jesse/mysite/media/"
#
Alias /site_media/ "&lt;PATH TO&gt;/mysite/media/"
&lt;Directory "&lt;PATH TO&gt;/mysite/media"&gt;
Order allow,deny
Options Indexes
Allow from all
IndexOptions FancyIndexing
&lt;/Directory&gt;

#
# Directory path to the admin media, for example:
#

Alias /media/ "&lt;PATH TO&gt;/virtualenv/site-packages/django/contrib/admin/media/"
&lt;Directory "&lt;PATH TO&gt;/virtualenv/site-packages/django/contrib/admin/media"&gt;
Order allow,deny
Options Indexes
Allow from all
IndexOptions FancyIndexing
&lt;/Directory&gt;

#
# Path to the mysite.wsgi file, for example:
# "/Users/jesse/mysite/apache/mysite.wsgi"
#

WSGIScriptAlias / "&lt;PATH TO&gt;/mysite/apache/mysite.wsgi"

&lt;Directory "&lt;PATH TO&gt;/mysite/apache"&gt;
Allow from all
&lt;/Directory&gt;
</pre>
<p>The apache_django_wsgi.conf file is the meat-and-potatoes here. This sets up all the paths/permissions, and is in Apache httpd.conf format. You can pretty much logjam any apache configuration directive here that you like.</p>
<p>Your final step is to once again edit (via sudo) /etc/apache2/httpd.conf and add a line like this at the verrrrry bottom:</p>
<pre>
Include "/path to/mysite/apache/apache_django_wsgi.conf"
</pre>
<p>And then run “sudo apachectl restart”</p>
<p>You should now be able to hit http://127.0.0.1/ and see the friendly and inviting django welcome page. Note, that if you are using sqlite as your database, you should chmod a+rw the file, so that processes which are not you can mess with it.</p>
<p>There’s a final piece to this though. Normally, if you run mod_wsgi in embedded mode, you’re going to need to restart apache every single time you make a change to your django app.</p>
<p>Ah! But we’re running in daemon mode. This means all you need to do when you change a file is:</p>
<pre>
touch mysite/apache/mysite.wsgi
</pre>
<p>This will trigger a reload and magic happens. Me being as lazy as I am (ask my wife) ended up snagging Bruno Bord’s <a href="http://github.com/brunobord/tdaemon/tree/master" target="_blank">tdaemon</a> script, and hacking it up a bit. The tdaemon script will watch a directory and run tests. Well, I wanted it to watch a directory (and let me filter sub directories) and then run that touch command. So I reused my watcher.py (<a href="http://bitbucket.org/jnoller/snippets/src/tip/watcher.py" target="_blank">here</a>) — I used this to monitor my sphinx tree and run builds as well (and other stuff). Here’s how I’d use this:</p>
<pre>
workon django
cdvirtualenv
cd mysite
python ~/.slash/bin/watcher.py --command "touch apache/mysite.wsgi" -f media
</pre>
<p>This will auto-fire the touch command whenever it detects a file change (including svn updates). </p>
<p><b>You can also do this another way</b><br />
In my rush to reuse a tool I use a bit (watcher) I skipped past the mod_wsgi document section on code reloading that shows how to setup a monitor which will watch .py file changes and kill the wsgi daemon, <a href="http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode" target="_blank">here</a>. If you scroll down a bit, you’ll see the “Monitoring For Code Changes” section. All you need to do here is copy the code from the wiki into a module on your PYTHONPATH — in my case, I wrote it to mysite/apache/wsgi_monitor.py (just for this example! you should put it someplace else!) and then changed the mysite.wsgi file to import it, and set it up:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p655code2'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6552"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code" id="p655code2"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">sys</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#Calculate the path based on the location of the WSGI script.</span>
apache_configuration = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>__file__<span style="color: black;">&#41;</span>
project = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>apache_configuration<span style="color: black;">&#41;</span>
workspace = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>project<span style="color: black;">&#41;</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>workspace<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span>apache_configuration<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># you probably shouldn't do this.</span>
<span style="color: #ff7700;font-weight:bold;">import</span> wsgi_monitor
wsgi_monitor.<span style="color: black;">start</span><span style="color: black;">&#40;</span>interval=<span style="color: #ff4500;">1.0</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'DJANGO_SETTINGS_MODULE'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'ui.settings'</span>
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>
application = django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>.<span style="color: black;">WSGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>This method — once you reload apache — will watch the project for changes and then kill the wsgi daemon (forces a reload). So there you go — two ways of doing it.</p>
<p>The nice thing about this setup is that I can make production version of the wsgi scripts and check them in, but keep local “my copies” (ala local_settings.py) additionally, I don’t have to jump through hoops to get static media and content served up via the django development server. </p>
<p>Additional reading:</p>
<ul>
<li> <a href="http://code.djangoproject.com/wiki/django_apache_and_mod_wsgi" target="_blank">http://code.djangoproject.com/wiki/django_apache_and_mod_wsgi</a>
<li> <a href="http://ericholscher.com/blog/2008/jul/8/setting-django-and-mod_wsgi/" target="_blank">http://ericholscher.com/blog/2008/jul/8/setting-django-and-mod_wsgi/</a>
<li> <a href="http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango" target="_blank">http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango</a>
</ul>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2009/07/24/django-mod_wsgi-apache-and-os-x-do-it/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Evernote invites.</title>
		<link>http://jessenoller.com/2008/04/30/evernote-invites/</link>
		<comments>http://jessenoller.com/2008/04/30/evernote-invites/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 12:36:56 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2008/04/30/evernote-invites/</guid>
		<description><![CDATA[Just a quick note - I've got 10 Evernote invites - if you don't know what Evernote is, check out the Ars review here. Post in the comments if you'd like to test drive it. I'm going to need an email address.

So far, I'm loving it - but I'm also someone with about 500+ ...]]></description>
			<content:encoded><![CDATA[<p>Just a quick note — I’ve got 10 <a href="http://evernote.com/" target="_blank">Evernote</a> invites — if you don’t know what Evernote is, check out the Ars review <a href="http://arstechnica.com/journals/apple.ars/2008/04/29/areview-of-evernote-with-invites-exclusive-iphone-preview" target="_blank">here</a>. Post in the comments if you’d like to test drive it. I’m going to need an email address.</p>
<p>So far, I’m loving it — but I’m also someone with about 500+ bookmarks in Safari, a ton of “to read” stuff saved on my hard drive, and over 100 RSS feeds in NetNewsWire. So something to help me archive/save/search everything is key.</p>
<p>Now I just want PDF indexing support.</p>
<p><strong>Ok, I have 10 more left!</strong></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2008/04/30/evernote-invites/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Per Ars: Sun is talking about porting Java to the iPhone (and an idea for python)</title>
		<link>http://jessenoller.com/2008/03/08/per-ars-sun-is-talking-about-porting-java-to-the-iphone-and-an-idea-for-python/</link>
		<comments>http://jessenoller.com/2008/03/08/per-ars-sun-is-talking-about-porting-java-to-the-iphone-and-an-idea-for-python/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 23:45:20 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2008/03/08/per-ars-sun-is-talking-about-porting-java-to-the-iphone-and-an-idea-for-python/</guid>
		<description><![CDATA[Ok. So Sun has come out stating they're starting work based on the SDK released by Apple for the iPhone earlier this week to port the JDK over to the iPhone. 

Quoting the sun rep:"Now, the iPhone is open" as a target platform, Klein said. The free JVM would be made available via Apple's ...]]></description>
			<content:encoded><![CDATA[<p><img src="http://jessenoller.com/wp-content/uploads/2008/03/coffee-poster.png" alt="coffee poster.png" border="0" width="106" height="150" align="left" />Ok. So Sun has come out stating they’re starting work based on the SDK released by Apple for the iPhone earlier this week to <a href="http://arstechnica.com/journals/apple.ars/2008/03/08/java-for-iphone-coming-soon" target="_blank">port the JDK over to the iPhone</a>. </p>
<p>Quoting the sun rep:<br />
<blockquote>“Now, the iPhone is open” as a target platform, Klein said. The free JVM would be made available via Apple’s AppStore marketplace for third-party applications.</p></blockquote>
<p>Now, as comments there and elsewhere have pointed out — there’s a clause in the Agreement that comes with the SDK forbidding applications from being placed on the AppStore that can execute/interpret “other applications” — to whit:</p>
<blockquote><p>3.3.2) An Application may not itself install or launch other executable code by any means, including without limitation through the use of a plug-in architecture, calling other frameworks, other APIs or otherwise. No interpreted code may be downloaded and used in an Application except for code that is interpreted and run by Apple’s Published APIs and builtin interpreter(s).</p></blockquote>
<p>So — unless Sun plans on making a JDK that a) doesn’t run anything or b) can be compiled into an application that is to <b>be sold</b> on the AppStore (providing the runtime for the app, like a self-standing .jar/.war) then I can’t see this happening, and option a is about as useful as a toilet bowl filled with taco meat.<img src="http://jessenoller.com/wp-content/uploads/2008/03/theoffice.jpg" alt="theoffice.jpg" border="0" width="124" height="111" align="right" /></p>
<p>On the other hand, option b: Making a runtime they release outside of the app store for application developers to use to write an application in Java and then have it compile-down to an Objective-C runtime/bytecode binary — then it could work, but those would be some *fat* binaries without a lot of magic.</p>
<p>Now — could the same thing be done with Python? Perhaps. Right now we have the pyObjC bridge that ships with Leopard that allows you mostly unfettered access into the Objective-C/OSX programming environment. This means you can build “native” applications in Python.</p>
<p>I doubt these bindings will work/exist on the iPhone, which means you want some utility to take Python code and “interpret” it down into an Objective-C binary, i.e.: an embed-able environment ala what Sun may end up having to do where you write an app in pyObjC/Python and the app+runtime is compiled down into Objective-C. </p>
<p>Again, without a lot of trickery, these would be fatass binaries — probably fatter than the notion of the universal binaries most people ship nowadays for OS/X. </p>
<p>It’s a thought — now I should get back to poking at Objective-C and other pre-pycon hackery. This is something people more versed in compilers, runtimes and with more free time than me will probably explore.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2008/03/08/per-ars-sun-is-talking-about-porting-java-to-the-iphone-and-an-idea-for-python/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>For those of you looking to brush up/get into objective-c…</title>
		<link>http://jessenoller.com/2008/03/08/for-those-of-you-looking-to-brush-upget-into-objective-c/</link>
		<comments>http://jessenoller.com/2008/03/08/for-those-of-you-looking-to-brush-upget-into-objective-c/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 17:01:29 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2008/03/08/for-those-of-you-looking-to-brush-upget-into-objective-c/</guid>
		<description><![CDATA[Because you, like me, are interested in writing some iPhone apps (and apple is only allowing objective-C stuff right now :sad:) - here is a free eBook I kept in my pocket for when I wanted to finally dive in.

It's call "BecomeAnXcoder" from CocoaLab]]></description>
			<content:encoded><![CDATA[<p>Because you, like me, are interested in writing some iPhone apps (and apple is only allowing objective-C stuff right now :sad:) — here is a free eBook I kept in my pocket for when I wanted to finally dive in.</p>
<p>It’s call <a href="http://www.cocoalab.com/?q=becomeanxcoder" target="_blank">“BecomeAnXcoder” from CocoaLab</a></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2008/03/08/for-those-of-you-looking-to-brush-upget-into-objective-c/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Brent Simmons on NetNewsWire 3.1â€™s  Release as Freeware</title>
		<link>http://jessenoller.com/2008/01/11/brent-simmons-on-netnewswire-31%e2%80%99s-release-as-freeware/</link>
		<comments>http://jessenoller.com/2008/01/11/brent-simmons-on-netnewswire-31%e2%80%99s-release-as-freeware/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 14:12:35 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2008/01/11/brent-simmons-on-netnewswire-31%e2%80%99s-release-as-freeware/</guid>
		<description><![CDATA[NetNewWire, my favorite feed reader ever has gone totally free: Brent Simmons on NetNewsWire 3.1â€™s  Release as Freeware. I highly recommend NetNewWire for feed management on OS/X especially for the clipping/blogging features. I've never quite been able to "get into" online readers (much like my continued need to use an offline mail clients) ...]]></description>
			<content:encoded><![CDATA[<p>NetNewWire, my favorite feed reader ever has gone totally free: <a href="http://inessential.com/?comments=1&#038;postid=3461">Brent Simmons on NetNewsWire 3.1â€™s  Release as Freeware</a>. I highly recommend NetNewWire for feed management on OS/X especially for the clipping/blogging features. I’ve never quite been able to “get into” online readers (much like my continued need to use an offline mail clients) but NNW also syncs with NewGator’s online systems — which means you can browse your feeds with their online apps as well.</p>
<p>The cross-synchronization and the iPhone optimized version of the online client is what keeps me hooked (also the cold fact that without it, I’d have to prune my list of 117 feeds (including 6 planets and reddit/dzone)).</p>
<p>Yeah, it happened a few days ago, I’m still wading through a backlog of posts.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2008/01/11/brent-simmons-on-netnewswire-31%e2%80%99s-release-as-freeware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PyObjC: Run in Python automator action.</title>
		<link>http://jessenoller.com/2007/12/15/pyobjc-run-in-python-automator-action/</link>
		<comments>http://jessenoller.com/2007/12/15/pyobjc-run-in-python-automator-action/#comments</comments>
		<pubDate>Sat, 15 Dec 2007 14:36:21 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2007/12/15/pyobjc-run-in-python-automator-action/</guid>
		<description><![CDATA[This is an excellent post from yesterday - the author outlines how, using 10.5 PyObjC bindings and the Leopard Automator, you can add a "run python script" automator action.

I particularly like his followup post on where he outlines how to use the new 'run in python' action to ship files off to Amazon's S3 ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://toxicsoftware.com/run-python-script/" target="_blank">This is an excellent post</a> from yesterday — the author outlines how, using 10.5 PyObjC bindings and the Leopard Automator, you can add a “run python script” automator action.</p>
<p>I particularly like his <a href="http://toxicsoftware.com/s3_uploader/" target="_blank">followup post</a> on where he outlines how to use the new ‘run in python’ action to ship files off to Amazon’s S3 storage.</p>
<p>The latter of the two posts actually hooked me up with the<a href="http://code.google.com/p/boto/" target="_blank"> “boto” python module</a> — which looks like an excellent module for interacting with Amazon’s web services, something I’ve been examining recently for a side-project. </p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2007/12/15/pyobjc-run-in-python-automator-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PyObjc 2: Leopard, Python 2.5.1 and You.</title>
		<link>http://jessenoller.com/2007/12/14/pyobjc-2-leopard-python-251-and-you/</link>
		<comments>http://jessenoller.com/2007/12/14/pyobjc-2-leopard-python-251-and-you/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 14:32:50 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2007/12/14/pyobjc-2-leopard-python-251-and-you/</guid>
		<description><![CDATA[So, most everyone know that Apple released OS/X Leopard a bit ago - I was on the early adopter train, and have not had any problems (except for the occasional spaces crash because I mash buttons fast).

One of the cooler things that came out with Leopard was a completely overhauled PyObjC built-in. Including Webkit ...]]></description>
			<content:encoded><![CDATA[<p>So, most everyone know that Apple released OS/X Leopard a bit ago — I was on the early adopter train, and have not had any problems (except for the occasional spaces crash because I mash buttons fast).</p>
<p>One of the cooler things that came out with Leopard was a completely overhauled PyObjC built-in. Including Webkit bindings, and many other things (see <a href="http://www.friday.com/bbum/2007/10/27/pyobjc-20-pyobjc-in-leopard/" target="_blank">here</a> and <a href="http://ronaldoussoren.blogspot.com/2007/07/sneak-preview-of-pyobjc-20.html" target="_blank">here</a> for more details), a built-in version of twisted and many other things.</p>
<p>However, I was a moron. I was knee-deep in debugging a problem and compulsively replaced my came-with-leopard version of Python with the python.org python 2.5.1 build. (Anyone with tips on how to undo this, please let me know). </p>
<p>Once I dropped in the 2.5.1 version: poof. I managed to wipe out all of the delicious stuff built into my shiny new OS, which made me a sad panda. Once the PyObjC 2.0 stuff hit the PyObjC SVN tree (<a href="http://svn.red-bean.com/pyobjc/branches/pyobjc2" target="_blank">here</a>) though, I was filled with hope that I could at least restore the PyObjC stuff.</p>
<p>Alas! It was not to be. Come to find out, there’s a hard coded string in the macpython makefile which causes the pyobjc build to use the wrong SDK and puke and die. After much wailing and gnashing of teeth, I gave up not realizing what the problem was. You should see a problem like this:<br />
<code><br />
C compiler: gcc -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -fno-common -dynamic -DNDEBUG -g -O3</p>
<p>compile options: ‘-I/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5 –c’<br />
gcc: Modules/_Foundation_nscoder.m<br />
Modules/_Foundation_nscoder.m: In function Ã¢Â€Â˜imp_NSCoder_encodeArrayOfObjCType_count_at_Ã¢Â€Â™:<br />
Modules/_Foundation_nscoder.m:220: error: Ã¢Â€Â˜NSUIntegerÃ¢Â€Â™ undeclared (first use in this function)<br />
Modules/_Foundation_nscoder.m:220: error: (Each undeclared identifier is reported only once<br />
Modules/_Foundation_nscoder.m:220: error: for each function it appears in.)<br />
Modules/_Foundation_nscoder.m:220: error: syntax error before Ã¢Â€Â˜countÃ¢Â€Â™<br />
Modules/_Foundation_nscoder.m:228: error: syntax error before Ã¢Â€Â˜iÃ¢Â€Â™<br />
Modules/_Foundation_nscoder.m:249: error: Ã¢Â€Â˜countÃ¢Â€Â™ undeclared (first use in this function)<br />
Modules/_Foundation_nscoder.m:256: error: Ã¢Â€Â˜iÃ¢Â€Â™ undeclared (first use in this function)<br />
</code></p>
<p>However, last night I was snowed-in at work and in between bug fixes for work, I managed to <a href="http://article.gmane.org/gmane.comp.python.pyobjc.devel/4606" target="_blank">dig up a post (with fix)</a> on the issue I was having (thanks Barry).</p>
<p>The short answer is sync the tree from subversion, and then edit the following file:<br />
<code><br />
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config/Makefile<br />
</code></p>
<p>And remove the <b>“-isysroot /Developer/SDKs/MacOSX10.4u.sdk”</b> chunk of text. Drop into the sync’ed svn tree and run the 02-develop-all.sh script. Now I can happily import WebKit:<br />
<code><br />
Python 2.5.1 (r251:54869, Apr 18 2007, 22:08:04)<br />
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin<br />
Type "help", "copyright", "credits" or "license" for more information.<br />
>>> import WebKit<br />
>>><br />
</code></p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2007/12/14/pyobjc-2-leopard-python-251-and-you/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Posting from iPhone send food</title>
		<link>http://jessenoller.com/2007/07/01/posting-from-iphone-send-food/</link>
		<comments>http://jessenoller.com/2007/07/01/posting-from-iphone-send-food/#comments</comments>
		<pubDate>Sun, 01 Jul 2007 17:46:35 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2007/07/01/posting-from-iphone-send-food/</guid>
		<description><![CDATA[After much waiting my iphone is all setup and configured i am going to have to get used to typing on it though. I have fat thumbs. 

And yes - it is as good as you've heard.]]></description>
			<content:encoded><![CDATA[<p>After much waiting my iphone is all setup and configured i am going to have to get used to typing on it though. I have fat thumbs. </p>
<p>And yes — it is as good as you’ve heard.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2007/07/01/posting-from-iphone-send-food/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TextMate 1.5</title>
		<link>http://jessenoller.com/2006/01/06/textmate-15/</link>
		<comments>http://jessenoller.com/2006/01/06/textmate-15/#comments</comments>
		<pubDate>Fri, 06 Jan 2006 13:21:00 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2006/01/06/textmate-15/</guid>
		<description><![CDATA[TextMate 1.5 is released!

I'll tell you this much - ever since I watched this screen cast by a guy using it for Python, I've spent a lot more time working on the more interesting language features.

I've added a lot of stuff pertinent to my work in the snippets, tab triggers, etc. I really have ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://macromates.com/blog/archives/2006/01/06/textmate-15/">TextMate 1.5 is released!</a></p>
<p>I’ll tell you this much — ever since I watched <a href="//macromates.com/textmate/screencast.rss">this screen cast</a> by a guy using it for Python, I’ve spent a lot more time working on the more interesting language features.</p>
<p>I’ve added a lot of stuff pertinent to my work in the snippets, tab triggers, etc. I really have not been this happy with an editor in some time.</p>
<p>Really, you should check it out.</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2006/01/06/textmate-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AlmostVPN — Trac</title>
		<link>http://jessenoller.com/2005/11/04/almostvpn-trac/</link>
		<comments>http://jessenoller.com/2005/11/04/almostvpn-trac/#comments</comments>
		<pubDate>Fri, 04 Nov 2005 12:14:00 +0000</pubDate>
		<dc:creator>jesse</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://jessenoller.com/2005/11/04/almostvpn-trac/</guid>
		<description><![CDATA[Ran across this app via version tracker: AlmostVPN - Trac

It's interesting - it's an SSH tunneling manager that sits in the Pref. Pane in OS/X instead of being a standalone application. For those of us who have to VPN a lot, but despise things like the official Cisco VPN client (on any damned platform) ...]]></description>
			<content:encoded><![CDATA[<p>Ran across this app via version tracker: <a href="http://www.leapingbytes.com/almostvpn">AlmostVPN — Trac</a></p>
<p>It’s interesting — it’s an SSH tunneling manager that sits in the Pref. Pane in OS/X instead of being a standalone application. For those of us who have to VPN a lot, but despise things like the official Cisco VPN client (on any damned platform) this might be useful (if you have ssh access into the corporate network).</p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://jessenoller.com/2005/11/04/almostvpn-trac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Object Caching 1531/1699 objects using disk: basic

Served from: jessenoller.com @ 2012-02-07 03:11:24 -->
