<?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>As The Code Grows</title>
	<atom:link href="http://asthecodegrows.robertbeverly.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://asthecodegrows.robertbeverly.com</link>
	<description>...may the search engines help me discover what I forgot I knew.</description>
	<lastBuildDate>Sun, 08 Apr 2012 17:32:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Two quotes and the cognitive dissonance between them</title>
		<link>http://asthecodegrows.robertbeverly.com/2012/04/08/two-quotes-and-the-cognitive-dissonance-between-them/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2012/04/08/two-quotes-and-the-cognitive-dissonance-between-them/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 17:32:38 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=204</guid>
		<description><![CDATA[I came across two quotations. Here they are: Nothing is particularly hard if you divide it into small jobs. - Henry Ford If the brain were so simple we could understand it, we would be so simple we couldn&#8217;t. - Lyall Watson I noticed I had written both of these on the same sheet of [...]]]></description>
			<content:encoded><![CDATA[<p>I came across two quotations. Here they are:</p>
<p>Nothing is particularly hard if you divide it into small jobs.<br />
- Henry Ford</p>
<p>If the brain were so simple we could understand it, we would be so simple we couldn&#8217;t.<br />
- Lyall Watson</p>
<p>I noticed I had written both of these on the same sheet of paper. Individually I agree with each of them. In particular, I like the Lyall Watson quote, which is both amusing and well thought out. In a few words it dismisses the hopes and dreams of psychologists, neuroscientists, artificial intelligence researchers, and projects that strive toward true self-replicating machines. At least, it does all that if you choose to take it that far. But it also preserves the magic and complexity of the human mind. To my ear, it both resonates with and contradicts Henry Ford&#8217;s quote.</p>
<p>I admit I&#8217;m taking two things completely out of context. Ford was talking about manufacturing, and Watson was talking about the brain. But let&#8217;s give ourselves license here. We&#8217;ll take these quotes out of the rich contexts from which they were generated, and set them together in an empty room. </p>
<p>Which, if either, is true? Or can they agree on some level?</p>
<p>Complex decisions have at their root a mass of very simple ones. I&#8217;ll hold that hypothesis out for criticism, but as far as I understand the mind it must be true. We don&#8217;t have the capacity to hold all of world politics in out minds at once, for example. It&#8217;s just too big a subject. Perhaps that&#8217;s why we get annoyed when people spout sweeping generalities rather than using detailed arguments. &#8220;How did you come to that conclusion,&#8221; we ask, or &#8220;what makes you say that?&#8221; These are the questions we ask in response to a general statement, particularly one we disagree with, and they imply that whole world-views hinge on the smaller details. We question unpopular decisions in the same way.</p>
<p>We act based on our understanding of how the action will affect a series of surrounding events and circumstances. Sometimes we vacillate in the decision-making process because it is difficult to find an ideal solution. &#8220;If I tell Jenny about Bob and Jean, I&#8217;ll be betraying Bob; but if Jenny finds out later that I know, she&#8217;ll never speak to me again.&#8221; We are alternately pulled toward two different solutions, based on which consequence we are evaluating in a given moment. In these situations, we often rely on tie-breakers from the realm of morality or experience. &#8220;Honesty is always the best policy; I&#8217;ll just be honest and Bob will have to understand.&#8221; Or: &#8220;Putting my nose in other people&#8217;s business has only ever caused trouble. I can&#8217;t be involved in their problems; I won&#8217;t say anything.&#8221; One simple factor added into the equation gives us the ability to break the decision loop and return to action.</p>
<p>Maybe we can&#8217;t fully understand something as complex as the human brain. I&#8217;m not positive we can understand something as complex as a modern automobile or a computer chip, at least not all at once. We can understand their parts. We can even understand fairly intricate parts at one time, but to visualize the whole we are forced to let the parts fade into the background, become blurred, and at best to remember some detail about how they can interact with the parts around them. Often, we switch to a serial mode of thinking. We see the things as a series of events because we can not focus our attention on the entire thing without losing something. We come up with something like: <em>Combustion drives the piston, which turns a shaft, where the force is converted via belts and gears to an axle, which rotates a tire, which translates torque to linear motion along the road</em>. Such an understanding is a simplified construct. The elements of time and synchronicity are lost in the translation, so we have a simple series rather than an orchestra of simultaneous events.</p>
<p>None of that means we can&#8217;t make a car, however. I question whether anyone can fully comprehend a car in a single thought, because of the nature of comprehension and of thoughts. But we can still understand a car in the way that we&#8217;re good at understanding things, in parts. Computers are similarly gifted, perhaps as a reflection of their makers. So can we make a computer that thinks, and that passes the Turing test, and that passes whatever tests we come up with after that when our pride is injured by the idea that machines could some day rival us as thinkers? Well, nothing is particularly difficult if you divide it into small jobs.</p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2012/04/08/two-quotes-and-the-cognitive-dissonance-between-them/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash and Flash server security</title>
		<link>http://asthecodegrows.robertbeverly.com/2012/02/08/flash-and-flash-server-security/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2012/02/08/flash-and-flash-server-security/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 14:06:42 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=201</guid>
		<description><![CDATA[Here are 5 keys that I think are the crux of non-annoying flash security (annoying security would be the kind that never works because of DRM, pops up password dialogs in your face, causes users to suffer or jump through hoops, etc). They basically fit together to form a whole, but if you implemented one [...]]]></description>
			<content:encoded><![CDATA[<p>Here are 5 keys that I think are the crux of non-annoying flash security (annoying security would be the kind that never works because of DRM, pops up password dialogs in your face, causes users to suffer or jump through hoops, etc). They basically fit together to form a whole, but if you implemented one or more you would be at least slightly better off (the estimated age of a capable attacker might rise from 6 to 12 years old).</p>
<p>1. Serve your flash files to otherwise authenticated users through Apache, Tomcat, a CMS or LMS, or your blog&#8217;s security plugin. Preferably to a &#8220;trusted&#8221; (synonym for non-technical? j/k) user base.<br />
2. Use SWF verification if your server supports it (Adobe&#8217;s does, Red5 doesn&#8217;t as of this writing). You&#8217;ll only serve SWF documents that you&#8217;ve whitelisted, and others will not be able to get content directly from the rtmp/flash server. This will be even more useful if combined with #3.<br />
3. Domain lock your flash files so that they can only run when served from your domain. People can get around this, but if you use SWF verification with it, then getting around the domain lock invalidates the SWF to the server. That means an attacker would still have to find a way around the verification to use a counterfeit SWF, which raises the bar a bit. While you&#8217;re at it, it won&#8217;t hurt to use an obfuscation/encryption tool to prevent casual decompiling and reading publish() string names, server addresses, etc. I wouldn&#8217;t count on it deterring a real attacker though.<br />
4. Put restraints on anything else that&#8217;s practical for your use &#8211; stream names, virtual hosts, etc.<br />
5. Consider using SSL, RTMPE. I admit I&#8217;m not at the moment, but I&#8217;m not holding business meetings over the connection either.</p>
<p>It seems like there are 1,000 pages written about configuring a crossdomains.xml&#8230; don&#8217;t believe that will actually slow anyone down. But the things I list above are worth looking in to.</p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2012/02/08/flash-and-flash-server-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Laggy file navigation at startup with xfce Thunar: fix</title>
		<link>http://asthecodegrows.robertbeverly.com/2012/01/18/laggy-file-navigation-at-startup-with-xfce-thunar-fix/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2012/01/18/laggy-file-navigation-at-startup-with-xfce-thunar-fix/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 23:03:10 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=195</guid>
		<description><![CDATA[This applies to the last two or three distributions of Linux that use Thunar as file manager, notably Xubuntu or others using Xfce for the desktop. The problem is that the first time you open the file manager, you have to wait a very long time to see anything. This can persist for several minutes [...]]]></description>
			<content:encoded><![CDATA[<p>This applies to the last two or three distributions of Linux that use Thunar as file manager, notably Xubuntu or others using Xfce for the desktop. The problem is that the first time you open the file manager, you have to wait a very long time to see anything. This can persist for several minutes after booting, even with multicore systems with lots of RAM. Some people also get error messages.</p>
<p>The reason seems to be that Thunar is waiting for gvfs-xxx to return with network devices. Rather than allowing the user to breathe by showing them the interface, it does nothing until this process returns (30 seconds to several minutes). Reportedly there is a bug with one of the gvfs modules that I won&#8217;t pretend to have analyzed in detail. The Thunar behavior is known to the developers, and I believe they are working on it&#8230; but what to do for now?</p>
<p>Well here&#8217;s a fix that works for me on Xubuntu 11.10. Do this:</p>
<pre class='prettyprint'>sudo nano /usr/share/gvfs/mounts/network.mount</pre>
<p>(with editor of your choice if nano doesn&#8217;t do it for you)&#8230; This file is only a few lines long. Change this:</p>
<pre class='prettyprint'>
Exec=/some/exec
AutoMount=true
</pre>
<p>to this:</p>
<pre class='prettyprint'>
#Exec=/some/exec
Exec=''
AutoMount=false
</pre>
<p>The next time you reboot, you&#8217;ll start off with a usable and responsive GUI. Yay.</p>
<p>One or the other change to network.mount might even be enough. Note that this will disable Thunar&#8217;s (ill-fated) search for remote drives &#8212; not much of a fix if you need that functionality, I admit. But if you need your file manager to mount remote drives, you can always try another manager.</p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2012/01/18/laggy-file-navigation-at-startup-with-xfce-thunar-fix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VirtualBox 4.1.8</title>
		<link>http://asthecodegrows.robertbeverly.com/2012/01/17/virtualbox-4-1-8/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2012/01/17/virtualbox-4-1-8/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 06:20:42 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=193</guid>
		<description><![CDATA[VirtualBox is my new best friend. Soooo many 64-bittish problems, not to mention OS X problems (if developing anything other than Cocoa) can be solved simply by installing 32-bit linux in VirtualBox. Now to see if my Py2App distributions actually run on the mac :)]]></description>
			<content:encoded><![CDATA[<p>VirtualBox is my new best friend. Soooo many 64-bittish problems, not to mention OS X problems (if developing anything other than Cocoa) can be solved simply by installing 32-bit linux in VirtualBox. Now to see if my Py2App distributions actually run on the mac :)</p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2012/01/17/virtualbox-4-1-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forcing 32 bit Python in OS X 10.6 +</title>
		<link>http://asthecodegrows.robertbeverly.com/2012/01/16/forcing-32-bit-python-in-os-x-10-6/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2012/01/16/forcing-32-bit-python-in-os-x-10-6/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 17:29:01 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=184</guid>
		<description><![CDATA[Lots of python libraries fail to install or fail to work under 64 bit python. Here&#8217;s a cheesy non-programmatic hack to make 32-bit python the default. 1. Find the path to the python installation you want to default to 32-bit mode in your .bash_profile nano .bash_profile Mine is at /Library/Frameworks/Python.framework/Versions/2.7/bin 2. Go to the python [...]]]></description>
			<content:encoded><![CDATA[<p>Lots of python libraries fail to install or fail to work under 64 bit python. Here&#8217;s a cheesy non-programmatic hack to make 32-bit python the default.</p>
<p>1. Find the path to the python installation you want to default to 32-bit mode in your .bash_profile</p>
<pre class="prettyprint">nano .bash_profile</pre>
<p>Mine is at /Library/Frameworks/Python.framework/Versions/2.7/bin</p>
<p>2. Go to the python installation in Finder. Observe the aliases (shortcuts / symlinks) to various python configurations. If you&#8217;re not sure what you&#8217;re looking for, stop and go find out about aliases and symlinks, what they are, and what they look like in OS X (obligatory &#8220;don&#8217;t proceed if you don&#8217;t know what you&#8217;re doing&#8221;).</p>
<p>3. Rename the alias called &#8220;python&#8221; to &#8220;python-64&#8243;. There is no existing alias with that name because &#8220;python&#8221; defaults to the 64-bit configuration whenever possible.</p>
<p>4. Right click &#8220;python-32&#8243; or, if you prefer, &#8220;python2.7-32&#8243; (which is not an alias, but is what the alias points to). Select &#8220;Make Alias&#8221;. Rename the new alias &#8220;python&#8221;.</p>
<p>5. Now any time you type &#8220;python&#8221; in the Terminal, 32-bit python will start. Even better, when other programs start python in various ways, or the python launcher starts, they will default to 32-bit python.</p>
<p>6. If you ever want to go back and default to 64-bit again, just delete your python alias and remove &#8220;-64&#8243; from &#8220;python-64&#8243;.</p>
<p>By the way, don&#8217;t believe what you read in the man pages about this stuff:</p>
<pre class="prettyprint">
# this doesn't work!
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes
# neither does this!
export VERSIONER_PYTHON_PREFER_32_BIT=yes</pre>
<p>The Mac versioner stuff only applies to the Mac pre-installed python. It will not have any effect on your python 2.7 installation!</p>
<p>And one final caveat. If you&#8217;ve installed libraries under 64-bit python, you might get a &#8220;wrong architecture&#8221; error running in 32-bit mode. You can either run those programs under 64-bit, or assuming you can install 32-bit configurations of your libraries, do that.</p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2012/01/16/forcing-32-bit-python-in-os-x-10-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ndexr &#8211; index a directory and output a json file of its contents</title>
		<link>http://asthecodegrows.robertbeverly.com/2012/01/04/ndexr-index-a-directory-and-output-a-json-file-of-its-contents/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2012/01/04/ndexr-index-a-directory-and-output-a-json-file-of-its-contents/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 16:57:27 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=178</guid>
		<description><![CDATA[New python project at https://sourceforge.net/projects/ndexr/ Currently it indexes a directory specified in interactive mode or by a config file, and writes a json file cataloging the directory&#8217;s contents. You can also specify the output file and the files types to index. It is made to be easy to extend with your own scripts&#8230; ie: if [...]]]></description>
			<content:encoded><![CDATA[<p>New python project at <a title="ndexr indexes files and outputs to json" href="https://sourceforge.net/projects/ndexr/" target="_blank">https://sourceforge.net/projects/ndexr/</a></p>
<p>Currently it indexes a directory specified in interactive mode or by a config file, and writes a json file cataloging the directory&#8217;s contents. You can also specify the output file and the files types to index.</p>
<p>It is made to be easy to extend with your own scripts&#8230; ie: if you want to recursively index a directory tree you can. If you want to index files on a server and send them once a week to some other server you can. If you want to use it to let clients search a directory without actually having access to it, you certainly can (you&#8217;ll have to supply apache or some other web server obviously).</p>
<p>I&#8217;ll probably extend it to automatically handle recursive indexing, and optional indexing of directories (as of right now it indexes files only, because that&#8217;s what I needed it to do today :)</p>
<p>It&#8217;s simple, not much code, and its only job will stay in the domain of indexing files and spitting out json. Check it out if you think it&#8217;s useful to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2012/01/04/ndexr-index-a-directory-and-output-a-json-file-of-its-contents/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stretching a 1-pixel image to make a resizeable border or shadow</title>
		<link>http://asthecodegrows.robertbeverly.com/2012/01/01/stretching-a-1-pixel-image-to-make-a-resizeable-border-or-shadow/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2012/01/01/stretching-a-1-pixel-image-to-make-a-resizeable-border-or-shadow/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 06:32:48 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=173</guid>
		<description><![CDATA[This comes up a lot, so I&#8217;m positing an image to illustrate the idea. Here&#8217;s my related stack overflow answer, which uses the technique to make a shadow around a UITableView section of arbitrary size and shape.]]></description>
			<content:encoded><![CDATA[<p>This comes up a lot, so I&#8217;m positing an image to illustrate the idea.</p>
<p><a href="http://asthecodegrows.robertbeverly.com/wp-content/uploads/2012/01/Untitled-1-01.png"><img class="alignnone size-full wp-image-174" title="Stretch one pixel gradient to make a resizeable border or shadow effect" src="http://asthecodegrows.robertbeverly.com/wp-content/uploads/2012/01/Untitled-1-01.png" alt="" width="400" height="275" /></a></p>
<p>Here&#8217;s <a title="Shadow around UITableView" href="http://stackoverflow.com/questions/8627146/how-could-i-add-a-shadow-to-a-grouped-uitableview-as-seen-in-the-official-twitt/8692115#8692115" target="_blank">my related stack overflow answer</a>, which uses the technique to make a shadow around a UITableView section of arbitrary size and shape.</p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2012/01/01/stretching-a-1-pixel-image-to-make-a-resizeable-border-or-shadow/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Batch plist to JSON conversion</title>
		<link>http://asthecodegrows.robertbeverly.com/2011/12/29/batch-plist-to-json-conversion/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2011/12/29/batch-plist-to-json-conversion/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 16:11:41 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=167</guid>
		<description><![CDATA[Posted this to sourceforge last night: plist2json: Batch convert plist files to JSON Feature list: Convert any number of plist&#8217;s to json Command line &#8211; type a directory to convert or drag and drop folder to Terminal Works with OS X, should work fine in most Linux distros Compact, easy to modify for your own [...]]]></description>
			<content:encoded><![CDATA[<p>Posted this to sourceforge last night:</p>
<p><a title="plist2json - batch convert plist to json" href="https://sourceforge.net/projects/plist2json/" target="_blank">plist2json: Batch convert plist files to JSON</a></p>
<p>Feature list:</p>
<ul>
<li>Convert any number of plist&#8217;s to json</li>
<li>Command line &#8211; type a directory to convert or drag and drop folder to Terminal</li>
<li>Works with OS X, should work fine in most Linux distros</li>
<li>Compact, easy to modify for your own needs</li>
</ul>
<p>It&#8217;s easier to use than the rough one-at-a-time version I posted before. Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2011/12/29/batch-plist-to-json-conversion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Convert plist to JSON</title>
		<link>http://asthecodegrows.robertbeverly.com/2011/12/20/convert-plist-to-json/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2011/12/20/convert-plist-to-json/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 17:45:39 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=153</guid>
		<description><![CDATA[EDIT: see my plist2json post for a better version Here&#8217;s a python program to convert a plist to JSON. You&#8217;ll need to type in the input and output filenames in the GUI (ie: /Users/bob/myDirectory/file.plist). It will overwrite the output file if it already exists. If anyone wants a version for batch processing, feel free to [...]]]></description>
			<content:encoded><![CDATA[<p>EDIT: see my <a href="http://asthecodegrows.robertbeverly.com/?p=167">plist2json post</a> for a better version</p>
<p>Here&#8217;s a python program to convert a plist to JSON. You&#8217;ll need to type in the input and output filenames in the GUI (ie: /Users/bob/myDirectory/file.plist). It will overwrite the output file if it already exists. If anyone wants a version for batch processing, feel free to modify it or send me a request. Tested in Python 2.7.2.</p>
<pre class="prettyprint"># By Rab Beverly: http://www.robertbeverly.com
# Author assumes no responsibility for damages.
# Use this code however you wish.
# Attribution is not required.

import json
from plistlib import readPlist
import StringIO
import Tkinter

class Converter:

    def __init__(self):
        """ ... """
        self.root = root = Tkinter.Tk()
        root.title('Converter')
        # inFile
        inLabel = Tkinter.Label(root, text='plist file (in):')
        inLabel.grid(column=0, row=0)
        # grabbable entry field
        self.inFileBox = Tkinter.Entry(root, width=30)
        self.inFileBox.grid(column=1, row=0)
        # outFile
        outLabel = Tkinter.Label(root, text='JSON file (out):')
        outLabel.grid(column=0, row=1)
        # grabbable entry field
        self.outFileBox = Tkinter.Entry(root, width=30)
        self.outFileBox.grid(column=1, row=1)
        # Button to grab fields
        convertButton = Tkinter.Button(root, text='Convert',
                                      command=self.makeConversion)
        convertButton.grid(column=0, row=3)
        # A quit button
        quitButton = Tkinter.Button(root, text='Quit',
                                    command=self.onExit)
        quitButton.grid(column=1, row=3)
        root.mainloop()

    def onExit(self):
        self.root.quit()

    def makeConversion(self):
        """ grab the configuration values, convert, and write """
        inFile = self.inFileBox.get()
        outFile = self.outFileBox.get()

        plist = open(inFile,"r").read()
        theData = StringIO.StringIO(plist)
        plist_dict = readPlist(theData)
        open(outFile,"w").write(json.dumps(plist_dict))

Converter()</pre>
<p>Download it:</p>
<p><a href="http://asthecodegrows.robertbeverly.com/wp-content/uploads/2011/12/plist-to-json.py_.zip">plist-to-json.py (zip file, ~4KB)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2011/12/20/convert-plist-to-json/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Python 2.7 and XCode 4</title>
		<link>http://asthecodegrows.robertbeverly.com/2011/12/01/python-2-7-and-xcode-4/</link>
		<comments>http://asthecodegrows.robertbeverly.com/2011/12/01/python-2-7-and-xcode-4/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 21:06:11 +0000</pubDate>
		<dc:creator>Robert Beverly</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://asthecodegrows.robertbeverly.com/?p=148</guid>
		<description><![CDATA[Here&#8217;s a relevant link for setting up a project (I&#8217;m using it for cross-platform development, not PyObj-C): Python + XCode @ SO For debugging you&#8217;ll probably have to go outside XCode, or figure out how to set Python debugging up properly. Supposedly LLDB has support, but in XCode you&#8217;ll get SIGTRAP when you run your [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a relevant link for setting up a project (I&#8217;m using it for cross-platform development, not PyObj-C): <a rel="nofollow" href="http://stackoverflow.com/questions/5276967/python-in-xcode-4" target="_blank">Python + XCode @ SO</a></p>
<p>For debugging you&#8217;ll probably have to go outside XCode, or figure out how to set Python debugging up properly. Supposedly LLDB has support, but in XCode you&#8217;ll get SIGTRAP when you run your program. Personally I think I&#8217;ll debug outside XCode, then figure out how to set up LLDB+Py+XCode4 if and only if I have so much debugging that running from another environment becomes a chore.</p>
]]></content:encoded>
			<wfw:commentRss>http://asthecodegrows.robertbeverly.com/2011/12/01/python-2-7-and-xcode-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

