<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Salim Fadhley</title>
	<atom:link href="https://salimfadhley.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://salimfadhley.wordpress.com</link>
	<description>My Python development blog</description>
	<lastBuildDate>Wed, 01 Apr 2015 00:02:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='salimfadhley.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://secure.gravatar.com/blavatar/d59c78792ff204e388ed22d9301e1a31d2549ca01d4d2c1d56e440606fa54ddc?s=96&#038;d=https%3A%2F%2Fs0.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Salim Fadhley</title>
		<link>https://salimfadhley.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://salimfadhley.wordpress.com/osd.xml" title="Salim Fadhley" />
	<atom:link rel='hub' href='https://salimfadhley.wordpress.com/?pushpress=hub'/>
	<item>
		<title>Using Ansible to install Bittorrent Sync on all my PCs.</title>
		<link>https://salimfadhley.wordpress.com/2015/04/01/using-ansible-to-install-bittorrent-sync-on-all-my-pcs/</link>
					<comments>https://salimfadhley.wordpress.com/2015/04/01/using-ansible-to-install-bittorrent-sync-on-all-my-pcs/#respond</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Wed, 01 Apr 2015 00:01:18 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=47</guid>

					<description><![CDATA[There are so many PCs in my house, and they are becoming a pain to keep up to date and consistent. Recently I&#8217;ve been writing Ansible scripts to automate all the configuration I used to do by hand. It&#8217;s been my new season&#8217;s resolution not to do any more manual configuration, especially for my home [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>There are so many PCs in my house, and they are becoming a pain to keep up to date and consistent. Recently I&#8217;ve been writing Ansible scripts to automate all the configuration I used to do by hand. It&#8217;s been my new season&#8217;s resolution not to do any more manual configuration, especially for my home PCs.</p>
<p><a href="http://www.ansible.com/home">Ansible</a> makes installing software, SSH keys and setting up user accounts really easy. </p>
<p>It can even configure some aspects of better-behaved packages. For example, here&#8217;s my Ansible playbook for installing <a href="https://www.getsync.com/">Bittorrent Sync</a> &#8211; a fabulous alternative to rsync.</p>
<pre class="brush: plain; title: ; notranslate">
- hosts: btsync
  sudo: True
  tasks:
  - name: Add repository
    apt_repository: repo='ppa:tuxpoldo/btsync' update_cache=yes state=present

  - name: Install packages
    apt: pkg={{item}} state=installed
    with_items:
    - btsync
    - debconf-utils
    - btsync-gui
    - transmission-daemon

  - name: Configure BT Sync
    debconf: name='btsync' question='btsync/runas' value='sal' vtype='string'
    debconf: name='btsync' question='btsync/directory_root' value='/home/sal' vtype='string'
    debconf: name='btsync' question='btsync/webgui-bindaddr' value='0.0.0.0' vtype='string'
    debconf: name='btsync' question='btsync/folder_defaults-use_lan_broadcast' value='true' vtype='boolean'
    debconf: name='btsync' question='btsync/log_size' value='1' vtype='string'
    debconf: name='btsync' question='btsync/folder_defaults-use_dht' value='true' vtype='boolean'

  - name: Regenerate BT Sync's config file
    command: dpkg-reconfigure -f noninteractive btsync

  - name: Restart BT Sync service
    service: name='btsync' state=restarted
</pre>
<p>First of all it ensures that the PPA containing the Bittorrent Sync software is installed. Setting update_cache to &#8220;yes&#8221; is the equivalent of an <em>apt-get update</em>.</p>
<p>Next it installs a bunch of packages required to run and configure the applications I need. Ansible provides an interface to allow me to set debconf variables but does not seem to provide anthing to recompile the configuration, hence I have to remotely execute the dpkg-reconfigure command. </p>
<p>Once it&#8217;s all done I can simply restart the service.</p>
<p>To get all this working easily I need a few extra things. First of all, a hosts file &#8211; that defines the group of hosts that I want to install this package to. I&#8217;ve defined a group of hosts called &#8220;btsync&#8221; &#8211; these are all of the machines I want to install the Bittorrent software onto.</p>
<pre class="brush: plain; title: ; notranslate">
[btsync]
bobnit
ahfang
tinyenid
halob
</pre>
<p>It&#8217;s just a list of host-names in an ini-style text-file.</p>
<p>And I also need a handy way to run it. To save me from remembering the command-line syntax I wrote a small shall-script:</p>
<pre class="brush: plain; title: ; notranslate">
#!/usr/bin/env bash
source venv/bin/activate
export ANSIBLE_HOSTS=./hosts
ansible-playbook -s --ask-sudo-pass --ask-pass btsync.yml
</pre>
<p>The <strong>-s</strong> option forces everything to run as if from a sudo command. The <strong>&#8211;ask-sudo-pass</strong> and <strong>&#8211;ask-pass</strong> command line arguments make the playbook-runner ask the user for passwords before starting. That saves me from having to store any passwords in any of the configuration files.</p>
<p>Running the script should produce an output a little like this:</p>
<p><a href="https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png"><img data-attachment-id="49" data-permalink="https://salimfadhley.wordpress.com/2015/04/01/using-ansible-to-install-bittorrent-sync-on-all-my-pcs/ansible_output/#main" data-orig-file="https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png" data-orig-size="844,764" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ansible_output" data-image-description="" data-image-caption="" data-medium-file="https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png?w=300" data-large-file="https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png?w=690" src="https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png?w=690&#038;h=624" alt="ansible_output"   class="aligncenter size-large wp-image-49" srcset="https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png?w=660 660w, https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png?w=150 150w, https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png?w=300 300w, https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png?w=768 768w, https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png 844w" sizes="(max-width: 660px) 100vw, 660px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2015/04/01/using-ansible-to-install-bittorrent-sync-on-all-my-pcs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>

		<media:content url="https://salimfadhley.wordpress.com/wp-content/uploads/2015/03/ansible_output.png?w=660" medium="image">
			<media:title type="html">ansible_output</media:title>
		</media:content>
	</item>
		<item>
		<title>Advertise a new Python job by making a github push</title>
		<link>https://salimfadhley.wordpress.com/2015/03/13/advertise-a-new-python-job-by-making-a-github-push/</link>
					<comments>https://salimfadhley.wordpress.com/2015/03/13/advertise-a-new-python-job-by-making-a-github-push/#respond</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Fri, 13 Mar 2015 22:16:00 +0000</pubDate>
				<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=44</guid>

					<description><![CDATA[My colleagues Steve Stagg has created a wonderful new thing &#8211; an entirely free Python jobs board. Anybody can add a new job simply by making a GitHub pull request. It&#8217;s a work of genius because it&#8217;s the absolute simplest possible solution to a problem that&#8217;s been bothering me for weeks &#8211; and the beauty of [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>My colleagues Steve Stagg has created a wonderful new thing &#8211; an <a title="Python Job Board" href="http://pythonjobs.github.io/" target="_blank">entirely free Python jobs board</a>.</p>
<p>Anybody can add a new job simply by making a GitHub pull request. It&#8217;s a work of genius because it&#8217;s the absolute simplest possible solution to a problem that&#8217;s been bothering me for weeks &#8211; and the beauty of this solution is that they&#8217;ve figured out a way to make a service that we&#8217;d normally have to pay for <a title="New, Free Python jobs vboard" href="http://mauveweb.co.uk/posts/2015/03/python-jobs-board.html" target="_blank">entirely free</a>.</p>
<p>Not so long ago we used to advertise on the Python.org job board &#8211; it was a very effective way to find good people. Unfortunately the old board relied on the good will of a very small pool of volounteers and nobody within the Python Foundation seems to have the time to work on it. It&#8217;s not been updated since last summer. We wanted to create an alternative that wouldn&#8217;t be such a burden for the community that runs it &#8211; and that means we needed something that would be cheap to host and cheap to administer. The solution wasto run this jobs board like an open-source software project.</p>
<p>If you want to submit a new job to this site all you have to do is <a href="https://github.com/pythonjobs/jobs" target="_blank">make a GitHub pull request to the jobs repo</a>. There are no forms to fill in. There&#8217;s no money to pay. Advertising for a developer job is no longer something you get an HR department to do &#8211; it becomes part of your development workflow.</p>
<p>Certainly submitting a job on this site is going to seem a bit technically challenging for the kinds of people who normally work in recruiting &#8211; but I think that&#8217;s a feature and not a bug: We hope that by taking advantage of GitHub&#8217;s well proven code-review mechanism and it&#8217;s superb scalability we can make a community driven job board that helps developers find their perfect jobs &#8211; and we can make it entirely free of charge forever.</p>
<p>These are the principles we want to aspire to:</p>
<ul>
<li><strong>Absolutely Free, Forever</strong>: We don&#8217;t want to charge for posting a job advert &#8211; ever.</li>
<li><strong>Anybody can post</strong>: From multinational to mom &amp; pop business you are welcome to advertise your jobs.</li>
<li><strong>Agents, IT Consultancies and Headhunters &#8211; you are welcome too</strong>: We just want you to be open about exactly who you are recruiting for.</li>
<li><strong>Everything is open source</strong>: The code we use to build the static site, even our collection of jobs. Feel free to take it all, or better still help us to improve.</li>
</ul>
<p>We just launched the site yesterday &#8211; we are really keen to know how you feel about this new service. If you have any feedback please <a href="https://github.com/pythonjobs/jobs/issues" target="_blank">log an issue via our GitHub tracker</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2015/03/13/advertise-a-new-python-job-by-making-a-github-push/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>
	</item>
		<item>
		<title>My newest project: Getting code onto Pyboards the easy way</title>
		<link>https://salimfadhley.wordpress.com/2014/10/18/my-newest-project-getting-code-onto-pyboards-the-easy-way/</link>
					<comments>https://salimfadhley.wordpress.com/2014/10/18/my-newest-project-getting-code-onto-pyboards-the-easy-way/#comments</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Sat, 18 Oct 2014 23:04:07 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[pybkick]]></category>
		<category><![CDATA[pyboard]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=41</guid>

					<description><![CDATA[My latest python project is a way of making Mycro Python &#8220;pyboards&#8221; easier to use. Pyboards are small microcomputers which can execute code written in Micropython, which is a Python3 compatible language. It has the same grammar as cPython3 and includes a small subset of the standard library. They are an amazing invention because they open [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>My <a href="https://github.com/salimfadhley/pybkick">latest python project</a> is a way of making Mycro Python &#8220;pyboards&#8221; easier to use.</p>
<p>Pyboards are small microcomputers which can execute code written in Micropython, which is a Python3 compatible language. It has the same grammar as cPython3 and includes a small subset of the standard library.</p>
<p>They are an amazing invention because they open up the world of microprocessor development to just about anybody with basic computing knowledge. They don&#8217;t require a compiler or any special SDK. You can get projects running on a Pyboard with just a text-editor.</p>
<p><img data-attachment-id="42" data-permalink="https://salimfadhley.wordpress.com/2014/10/18/my-newest-project-getting-code-onto-pyboards-the-easy-way/dsc_20602/#main" data-orig-file="https://salimfadhley.wordpress.com/wp-content/uploads/2014/10/dsc_20602.jpg" data-orig-size="1761,1761" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;4&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D3300&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1413502800&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;35&quot;,&quot;iso&quot;:&quot;400&quot;,&quot;shutter_speed&quot;:&quot;0.25&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;,&quot;latitude&quot;:&quot;51.597222222222&quot;,&quot;longitude&quot;:&quot;-0.13666666666667&quot;}" data-image-title="DSC_2060~2" data-image-description="" data-image-caption="" data-medium-file="https://salimfadhley.wordpress.com/wp-content/uploads/2014/10/dsc_20602.jpg?w=300" data-large-file="https://salimfadhley.wordpress.com/wp-content/uploads/2014/10/dsc_20602.jpg?w=690" class="alignnone size-medium wp-image-42 aligncenter" src="https://salimfadhley.wordpress.com/wp-content/uploads/2014/10/dsc_20602.jpg?w=300&#038;h=300" alt="DSC_2060~2" width="300" height="300" srcset="https://salimfadhley.wordpress.com/wp-content/uploads/2014/10/dsc_20602.jpg?w=300 300w, https://salimfadhley.wordpress.com/wp-content/uploads/2014/10/dsc_20602.jpg?w=600 600w, https://salimfadhley.wordpress.com/wp-content/uploads/2014/10/dsc_20602.jpg?w=150 150w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>The suggest way to deploy code to a PyBoard is to mount it as a USB Mass Storage device, and then edit files directly on the device, or simply copy over the relevant files from a PC. This approach can be problematic because if the pyboard is reset, it can cause the Mass Storage drive to be suddenly unmounted. At best this will cause confusion in the operating system when an open file-system just disappears.</p>
<p>Worse problems can occur if the device needs to be factory reset &#8211; this will wipe the code on the device and will require everything to be re-copied. If you were editing directly on the pyboard then you&#8217;ve just lost all your code. Clearly this way of working is not optimal.</p>
<p>Using USB Mass Storage mode is a real pain. It would be much simpler to have something that was able to use the Serial mode connection to quickly copy code across without any kind of stateful connection. Achieving that kind of developer friendly connection is the goal of this project.</p>
<p><a href="https://pypi.python.org/pypi/pybkick/0.0.1">PybKick 0.0.1 was released just yesterday</a>. My first attempt can quickly copy a directory of python code onto pyboard and not much else. Right now it does not know how to handle heirarchies of code, or how to put code anywhere other than the root directory of the pyboard.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2014/10/18/my-newest-project-getting-code-onto-pyboards-the-easy-way/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>

		<media:content url="https://salimfadhley.wordpress.com/wp-content/uploads/2014/10/dsc_20602.jpg?w=300" medium="image">
			<media:title type="html">DSC_2060~2</media:title>
		</media:content>
	</item>
		<item>
		<title>Low-hassle PEP-396</title>
		<link>https://salimfadhley.wordpress.com/2014/07/29/low-hassle-pep-396/</link>
					<comments>https://salimfadhley.wordpress.com/2014/07/29/low-hassle-pep-396/#comments</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Tue, 29 Jul 2014 00:07:38 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=39</guid>

					<description><![CDATA[PEP-396 suggests that all python packages should provide a __version__ attribute. This should contain a string in the form x.y.z which gives you the package&#8217;s version number. That seems simple enough, except that Python does not provide an obvious way to set this attribute. It would be a tremendous waste of time to set this [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://legacy.python.org/dev/peps/pep-0396/">PEP-396</a> suggests that all python packages should provide a __version__ attribute. This should contain a string in the form x.y.z which gives you the package&#8217;s version number.</p>
<p>That seems simple enough, except that Python does not provide an obvious way to set this attribute. It would be a tremendous waste of time to set this manually before each script.</p>
<p>The obvious (and in my opinion wrong) way to fix this problem is to add something to the release process which automatically writes some text to the package&#8217;s __init__ file. Personally I don&#8217;t like self-modifying code. Python is dynamic enough already!</p>
<p>A much simpler way to do it is to exploit the pkg_resource module. In your package&#8217;s main __init__.py file, simply add the following lines:</p>
<pre class="brush: python; title: ; notranslate">
import pkg_resources
__version__ = pkg_resources.working_set.by_key['&lt;your package name&gt;'].version
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2014/07/29/low-hassle-pep-396/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>
	</item>
		<item>
		<title>Find the most common item in a sequence of items</title>
		<link>https://salimfadhley.wordpress.com/2013/07/16/find-the-most-common-item-in-a-sequence-of-items/</link>
					<comments>https://salimfadhley.wordpress.com/2013/07/16/find-the-most-common-item-in-a-sequence-of-items/#respond</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Tue, 16 Jul 2013 21:56:30 +0000</pubDate>
				<category><![CDATA[TIL]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=35</guid>

					<description><![CDATA[Here&#8217;s a puzzler posed to me by Chris Laffra, one of the Bank of America Python gurus: Given a finite sequence of objects which contain some repetition find the most common object. Here&#8217;s an example followed by my own naive solution: This is pretty basic stuff, and the only thing I can say in defence [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Here&#8217;s a puzzler posed to me by Chris Laffra, one of the Bank of America Python gurus: Given a finite sequence of objects which contain some repetition find the most common object.</p>
<p>Here&#8217;s an example followed by my own naive solution:</p>
<pre class="brush: python; title: ; notranslate">

input = 'aaabaccabdaabacccabdagatacaccacba'

counts = [(input.count(x), x) for x in set(input)]
sortedCounts = sorted(counts, key=lambda x:-x[0])
print sortedCounts[0][1]

</pre>
<p>This is pretty basic stuff, and the only thing I can say in defence of this first solution is that I bashed it out quickly. But after a few minutes of pondering I managed to find the optimal solution:</p>
<pre class="brush: python; title: ; notranslate">

print max(input, key=input.count)

</pre>
<p>That&#8217;s only 18 bytes, not including whitespace and the print statement. This is a lovely example of what makes Python truly expressive &#8211; the ability to say a great deal in very few keystrokes.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2013/07/16/find-the-most-common-item-in-a-sequence-of-items/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>
	</item>
		<item>
		<title>Using SublimeText2 with VirtualEnv</title>
		<link>https://salimfadhley.wordpress.com/2013/06/15/using-sublimetext2-with-virtualenv/</link>
					<comments>https://salimfadhley.wordpress.com/2013/06/15/using-sublimetext2-with-virtualenv/#respond</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Sat, 15 Jun 2013 21:13:37 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=27</guid>

					<description><![CDATA[I recently switched from using Eclipse as my main Python development environment to SublimeText2. The main reason to switch was that Sublime seems to work better on smaller screens: I figured that a little investment in learning this package might make me more productive when I work on my laptop. The problem with Sublime is [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I recently switched from using Eclipse as my main Python development environment to SublimeText2. The main reason to switch was that Sublime seems to work better on smaller screens: I figured that a little investment in learning this package might make me more productive when I work on my laptop.</p>
<p>The problem with Sublime is that when first installed it does not do a whole lot other than edit text. You need to configure your project or build-settings before it can actually launch code you&#8217;ve written. And while it does come with some pre-set &#8216;Build Systems&#8217; (that&#8217;s Sublime&#8217;s jargon for a run-configuration), none of them are ideally suitable for Python development with VirtualEnv.</p>
<p>After a great deal of trial and error I&#8217;ve come across a formula for setting things up which seems to work rather well. First of all, you need to set up each of your workspaces in a standardized way.</p>
<ul>
<li><span style="font-family:Consolas, Monaco, monospace;"><span style="font-size:12px;line-height:18px;">Begin by making a new virtualenv &#8211; use whatever configuration you like, for example:</span></span></li>
</ul>
<pre class="brush: plain; title: ; notranslate">

virtualenv myproject

</pre>
<ul>
<li>Next checkout whatever code you want to work on into the /src folder of your new virtualenv dir. This folder should be the location of your setup.py file</li>
<li>Activate the virtual environment in the usual way:</li>
</ul>
<pre class="brush: plain; title: ; notranslate">

source myproject/bin/activate

</pre>
<ul>
<li><span style="font-family:Consolas, Monaco, monospace;"><span style="font-size:12px;line-height:18px;">Build your project, install any test-dependencies and verify that everything works from the command-prompt.</span></span></li>
</ul>
<p>Now that your basic environment is provisioned, all you need to do is provide a sublime-project file. <a href="https://github.com/salimfadhley/jenkinsapi/blob/master/misc/jenkinsapi.sublime-project">Here is one I made earlier</a>. Save that file into your main project folder (not the /src folder). You might have to edit some of the paths to point to the actual locations of your tests. Since all my projects use the same configuration layout I can recycle most of this configuration from one project to another. The only things I ever need to change are the locations of specific things in my projects.</p>
<p>The important section to take note of is build_systems &#8211; these are the various configurations for how to run my project. You will notice that I don&#8217;t actually use the activate or deactivate commands. Rather than modify the environment it turned out to be a great deal easier just to ensure that everything is invoked using the virtualenv&#8217;s copy of Python rather than the system version.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2013/06/15/using-sublimetext2-with-virtualenv/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>
	</item>
		<item>
		<title>Yo Dawg, I heard you like Jenkins</title>
		<link>https://salimfadhley.wordpress.com/2013/06/15/yo-dawg-i-heard-you-like-jenkins/</link>
					<comments>https://salimfadhley.wordpress.com/2013/06/15/yo-dawg-i-heard-you-like-jenkins/#respond</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Sat, 15 Jun 2013 01:31:34 +0000</pubDate>
				<category><![CDATA[JenkinsAPI]]></category>
		<category><![CDATA[testing]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=19</guid>

					<description><![CDATA[These past few days I&#8217;ve been busy re-factoring my JenkinsAPI project. One of my goals was to greatly increase test-coverage. It&#8217;s somewhat ironic that a project that was all about testing had very few tests. Most of the tests in this package try to do something to a Jenkins server and then check for consistency: [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>These past few days I&#8217;ve been busy re-factoring my <a href="https://github.com/salimfadhley/jenkinsapi">JenkinsAPI</a> project. One of my goals was to greatly increase test-coverage. It&#8217;s somewhat ironic that a project that was all about testing had very few tests.</p>
<p>Most of the tests in this package try to do something to a Jenkins server and then check for consistency:</p>
<p>For example you can start with a new, clear Jenkins. If you add a new Jenkins job and then read-back the list of jobs you might expect to see one more job in that list. This sort of test is easy to get working on a PC, you simply start up Jenkins before running the tests. But what of the situation where these tests are run on a remote CI server, for example on Jenkins. Any tests that connect back to the server and mess about with that server&#8217;s configuration are bound not to work reliably.</p>
<p><a href="https://salimfadhley.wordpress.com/wp-content/uploads/2013/06/3uuvse.jpg"><img data-attachment-id="22" data-permalink="https://salimfadhley.wordpress.com/2013/06/15/yo-dawg-i-heard-you-like-jenkins/3uuvse/#main" data-orig-file="https://salimfadhley.wordpress.com/wp-content/uploads/2013/06/3uuvse.jpg" data-orig-size="554,369" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="I heard you like Jenkins" data-image-description="" data-image-caption="" data-medium-file="https://salimfadhley.wordpress.com/wp-content/uploads/2013/06/3uuvse.jpg?w=300" data-large-file="https://salimfadhley.wordpress.com/wp-content/uploads/2013/06/3uuvse.jpg?w=554" class="size-medium wp-image-22 aligncenter" alt="I heard you like Jenkins" src="https://salimfadhley.wordpress.com/wp-content/uploads/2013/06/3uuvse.jpg?w=300&#038;h=199" width="300" height="199" srcset="https://salimfadhley.wordpress.com/wp-content/uploads/2013/06/3uuvse.jpg?w=300 300w, https://salimfadhley.wordpress.com/wp-content/uploads/2013/06/3uuvse.jpg?w=150 150w, https://salimfadhley.wordpress.com/wp-content/uploads/2013/06/3uuvse.jpg 554w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>In order to get this kind of test working in a Jenkins environment the solution I found was to launch another Jenkins.</p>
<p>I wrote a <a href="https://github.com/salimfadhley/jenkinsapi/blob/master/jenkinsapi_utils/jenkins_launcher.py">threaded Jenkins launcher</a> which starts a background sub-process and then monitors the Stdout and Stderr streams for error conditions. It returns, keeping the sub-process alive once the Jenkins server has fully started. We keep a reference to the subprocess so that when all the tests are complete I can shut the whole thing down.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2013/06/15/yo-dawg-i-heard-you-like-jenkins/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>

		<media:content url="https://salimfadhley.wordpress.com/wp-content/uploads/2013/06/3uuvse.jpg?w=300" medium="image">
			<media:title type="html">I heard you like Jenkins</media:title>
		</media:content>
	</item>
		<item>
		<title>London Python Dojo @ Bank of America</title>
		<link>https://salimfadhley.wordpress.com/2013/06/14/london-python-dojo-bank-of-america/</link>
					<comments>https://salimfadhley.wordpress.com/2013/06/14/london-python-dojo-bank-of-america/#respond</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Fri, 14 Jun 2013 21:34:36 +0000</pubDate>
				<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=12</guid>

					<description><![CDATA[London Python Dojo, June 2013 at Bank of America, a set on Flickr. Old new now, but last week&#8217;s London Python Dojo was in my office building. I helped organize it. Here are the pictures.]]></description>
										<content:encoded><![CDATA[<div style="padding:0;overflow:hidden;margin:0;width:500px;"><a href="http://www.flickr.com/photos/salimfadhley/8974045482/in/set-72157633978504760/" title="DSC_0106" style="text-decoration:none;"><img src="https://i0.wp.com/farm6.staticflickr.com/5321/8974045482_763ce210db_s.jpg" alt="DSC_0106" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8974045430/in/set-72157633978504760/" title="DSC_0114" style="text-decoration:none;"><img src="https://i0.wp.com/farm9.staticflickr.com/8115/8974045430_52c27b31db_s.jpg" alt="DSC_0114" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8974045344/in/set-72157633978504760/" title="DSC_0116" style="text-decoration:none;"><img src="https://i0.wp.com/farm3.staticflickr.com/2862/8974045344_e77491a011_s.jpg" alt="DSC_0116" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972853325/in/set-72157633978504760/" title="DSC_0118" style="text-decoration:none;"><img src="https://i0.wp.com/farm4.staticflickr.com/3801/8972853325_ac03fbbc94_s.jpg" alt="DSC_0118" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972853311/in/set-72157633978504760/" title="DSC_0124" style="text-decoration:none;"><img src="https://i0.wp.com/farm4.staticflickr.com/3748/8972853311_6b4ef12f48_s.jpg" alt="DSC_0124" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972853273/in/set-72157633978504760/" title="DSC_0127" style="text-decoration:none;"><img src="https://i0.wp.com/farm3.staticflickr.com/2857/8972853273_2ddd19b622_s.jpg" alt="DSC_0127" style="padding:0 0 10px;width:75px;height:75px;float:left;" /></a><br /><a href="http://www.flickr.com/photos/salimfadhley/8974045112/in/set-72157633978504760/" title="DSC_0129" style="text-decoration:none;"><img src="https://i0.wp.com/farm6.staticflickr.com/5342/8974045112_8f4c3bd64a_s.jpg" alt="DSC_0129" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972853139/in/set-72157633978504760/" title="DSC_0134" style="text-decoration:none;"><img src="https://i0.wp.com/farm3.staticflickr.com/2878/8972853139_085696a06a_s.jpg" alt="DSC_0134" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972853047/in/set-72157633978504760/" title="DSC_0135" style="text-decoration:none;"><img src="https://i0.wp.com/farm4.staticflickr.com/3782/8972853047_63855ce222_s.jpg" alt="DSC_0135" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972852979/in/set-72157633978504760/" title="DSC_0137" style="text-decoration:none;"><img src="https://i0.wp.com/farm9.staticflickr.com/8394/8972852979_729ddf1384_s.jpg" alt="DSC_0137" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8974044918/in/set-72157633978504760/" title="DSC_0138" style="text-decoration:none;"><img src="https://i0.wp.com/farm4.staticflickr.com/3777/8974044918_1e4d6d8015_s.jpg" alt="DSC_0138" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972852893/in/set-72157633978504760/" title="DSC_0140" style="text-decoration:none;"><img src="https://i0.wp.com/farm3.staticflickr.com/2865/8972852893_415532d90b_s.jpg" alt="DSC_0140" style="padding:0 0 10px;width:75px;height:75px;float:left;" /></a><br /><a href="http://www.flickr.com/photos/salimfadhley/8972852833/in/set-72157633978504760/" title="DSC_0144" style="text-decoration:none;"><img src="https://i0.wp.com/farm3.staticflickr.com/2870/8972852833_7e40cc87f3_s.jpg" alt="DSC_0144" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8974044692/in/set-72157633978504760/" title="DSC_0149" style="text-decoration:none;"><img src="https://i0.wp.com/farm4.staticflickr.com/3691/8974044692_ab2f443e91_s.jpg" alt="DSC_0149" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8974044654/in/set-72157633978504760/" title="DSC_0152" style="text-decoration:none;"><img src="https://i0.wp.com/farm9.staticflickr.com/8138/8974044654_07a7b21296_s.jpg" alt="DSC_0152" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972852673/in/set-72157633978504760/" title="DSC_0156" style="text-decoration:none;"><img src="https://i0.wp.com/farm4.staticflickr.com/3687/8972852673_758723e993_s.jpg" alt="DSC_0156" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972852625/in/set-72157633978504760/" title="DSC_0160" style="text-decoration:none;"><img src="https://i0.wp.com/farm3.staticflickr.com/2843/8972852625_48e0beaa9a_s.jpg" alt="DSC_0160" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972852595/in/set-72157633978504760/" title="DSC_0166" style="text-decoration:none;"><img src="https://i0.wp.com/farm3.staticflickr.com/2872/8972852595_2a35e7cb81_s.jpg" alt="DSC_0166" style="padding:0 0 10px;width:75px;height:75px;float:left;" /></a><br /><a href="http://www.flickr.com/photos/salimfadhley/8972852555/in/set-72157633978504760/" title="DSC_0175" style="text-decoration:none;"><img src="https://i0.wp.com/farm9.staticflickr.com/8114/8972852555_06dd7cf448_s.jpg" alt="DSC_0175" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972852455/in/set-72157633978504760/" title="DSC_0179" style="text-decoration:none;"><img src="https://i0.wp.com/farm9.staticflickr.com/8533/8972852455_7e710746d1_s.jpg" alt="DSC_0179" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8972852417/in/set-72157633978504760/" title="DSC_0182" style="text-decoration:none;"><img src="https://i0.wp.com/farm3.staticflickr.com/2872/8972852417_b1c9b2da1b_s.jpg" alt="DSC_0182" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8974044252/in/set-72157633978504760/" title="DSC_0186" style="text-decoration:none;"><img src="https://i0.wp.com/farm6.staticflickr.com/5446/8974044252_c57e17dc48_s.jpg" alt="DSC_0186" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8974044184/in/set-72157633978504760/" title="DSC_0190" style="text-decoration:none;"><img src="https://i0.wp.com/farm6.staticflickr.com/5451/8974044184_5680552bd1_s.jpg" alt="DSC_0190" style="padding:0 10px 10px 0;width:75px;height:75px;float:left;" /></a><a href="http://www.flickr.com/photos/salimfadhley/8974044122/in/set-72157633978504760/" title="DSC_0192" style="text-decoration:none;"><img src="https://i0.wp.com/farm6.staticflickr.com/5337/8974044122_bf8500618d_s.jpg" alt="DSC_0192" style="padding:0 0 10px;width:75px;height:75px;float:left;" /></a></div>
<div style="font-size:.8em;margin-top:0;margin-bottom:5px;">
<p><a href="http://www.flickr.com/photos/salimfadhley/sets/72157633978504760/">London Python Dojo, June 2013 at Bank of America</a>, a set on Flickr.</p>
</div>
<p>Old new now, but last week&#8217;s London Python Dojo was in my office building. I helped organize it. Here are the pictures.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2013/06/14/london-python-dojo-bank-of-america/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>

		<media:content url="http://farm6.staticflickr.com/5321/8974045482_763ce210db_s.jpg" medium="image">
			<media:title type="html">DSC_0106</media:title>
		</media:content>

		<media:content url="http://farm9.staticflickr.com/8115/8974045430_52c27b31db_s.jpg" medium="image">
			<media:title type="html">DSC_0114</media:title>
		</media:content>

		<media:content url="http://farm3.staticflickr.com/2862/8974045344_e77491a011_s.jpg" medium="image">
			<media:title type="html">DSC_0116</media:title>
		</media:content>

		<media:content url="http://farm4.staticflickr.com/3801/8972853325_ac03fbbc94_s.jpg" medium="image">
			<media:title type="html">DSC_0118</media:title>
		</media:content>

		<media:content url="http://farm4.staticflickr.com/3748/8972853311_6b4ef12f48_s.jpg" medium="image">
			<media:title type="html">DSC_0124</media:title>
		</media:content>

		<media:content url="http://farm3.staticflickr.com/2857/8972853273_2ddd19b622_s.jpg" medium="image">
			<media:title type="html">DSC_0127</media:title>
		</media:content>

		<media:content url="http://farm6.staticflickr.com/5342/8974045112_8f4c3bd64a_s.jpg" medium="image">
			<media:title type="html">DSC_0129</media:title>
		</media:content>

		<media:content url="http://farm3.staticflickr.com/2878/8972853139_085696a06a_s.jpg" medium="image">
			<media:title type="html">DSC_0134</media:title>
		</media:content>

		<media:content url="http://farm4.staticflickr.com/3782/8972853047_63855ce222_s.jpg" medium="image">
			<media:title type="html">DSC_0135</media:title>
		</media:content>

		<media:content url="http://farm9.staticflickr.com/8394/8972852979_729ddf1384_s.jpg" medium="image">
			<media:title type="html">DSC_0137</media:title>
		</media:content>

		<media:content url="http://farm4.staticflickr.com/3777/8974044918_1e4d6d8015_s.jpg" medium="image">
			<media:title type="html">DSC_0138</media:title>
		</media:content>

		<media:content url="http://farm3.staticflickr.com/2865/8972852893_415532d90b_s.jpg" medium="image">
			<media:title type="html">DSC_0140</media:title>
		</media:content>

		<media:content url="http://farm3.staticflickr.com/2870/8972852833_7e40cc87f3_s.jpg" medium="image">
			<media:title type="html">DSC_0144</media:title>
		</media:content>

		<media:content url="http://farm4.staticflickr.com/3691/8974044692_ab2f443e91_s.jpg" medium="image">
			<media:title type="html">DSC_0149</media:title>
		</media:content>

		<media:content url="http://farm9.staticflickr.com/8138/8974044654_07a7b21296_s.jpg" medium="image">
			<media:title type="html">DSC_0152</media:title>
		</media:content>

		<media:content url="http://farm4.staticflickr.com/3687/8972852673_758723e993_s.jpg" medium="image">
			<media:title type="html">DSC_0156</media:title>
		</media:content>

		<media:content url="http://farm3.staticflickr.com/2843/8972852625_48e0beaa9a_s.jpg" medium="image">
			<media:title type="html">DSC_0160</media:title>
		</media:content>

		<media:content url="http://farm3.staticflickr.com/2872/8972852595_2a35e7cb81_s.jpg" medium="image">
			<media:title type="html">DSC_0166</media:title>
		</media:content>

		<media:content url="http://farm9.staticflickr.com/8114/8972852555_06dd7cf448_s.jpg" medium="image">
			<media:title type="html">DSC_0175</media:title>
		</media:content>

		<media:content url="http://farm9.staticflickr.com/8533/8972852455_7e710746d1_s.jpg" medium="image">
			<media:title type="html">DSC_0179</media:title>
		</media:content>

		<media:content url="http://farm3.staticflickr.com/2872/8972852417_b1c9b2da1b_s.jpg" medium="image">
			<media:title type="html">DSC_0182</media:title>
		</media:content>

		<media:content url="http://farm6.staticflickr.com/5446/8974044252_c57e17dc48_s.jpg" medium="image">
			<media:title type="html">DSC_0186</media:title>
		</media:content>

		<media:content url="http://farm6.staticflickr.com/5451/8974044184_5680552bd1_s.jpg" medium="image">
			<media:title type="html">DSC_0190</media:title>
		</media:content>

		<media:content url="http://farm6.staticflickr.com/5337/8974044122_bf8500618d_s.jpg" medium="image">
			<media:title type="html">DSC_0192</media:title>
		</media:content>
	</item>
		<item>
		<title>TIL: You can assign to list slices</title>
		<link>https://salimfadhley.wordpress.com/2013/06/14/til-you-can-assign-to-list-slices/</link>
					<comments>https://salimfadhley.wordpress.com/2013/06/14/til-you-can-assign-to-list-slices/#respond</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Fri, 14 Jun 2013 21:11:05 +0000</pubDate>
				<category><![CDATA[TIL]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=6</guid>

					<description><![CDATA[An oddity of Python brought to my attention by Daniel Pope:]]></description>
										<content:encoded><![CDATA[<p>An oddity of Python brought to my attention by Daniel Pope:</p>
<pre class="brush: python; title: ; notranslate">
foo = range(10)
print(foo)
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

foo[2:-2] = [&quot;stoat&quot;, &quot;ferret&quot;, &quot;wombat&quot;]
print(foo)
# [0, 1, 'stoat', 'ferret', 'wombat', 8, 9]

foo[:] = []
print(foo)
# []
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2013/06/14/til-you-can-assign-to-list-slices/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>
	</item>
		<item>
		<title>TIL: Google Goggles can correctly identify Python code.</title>
		<link>https://salimfadhley.wordpress.com/2013/06/14/til-google-goggles-can-correctly-identify-python-code/</link>
					<comments>https://salimfadhley.wordpress.com/2013/06/14/til-google-goggles-can-correctly-identify-python-code/#respond</comments>
		
		<dc:creator><![CDATA[Salim Fadhley]]></dc:creator>
		<pubDate>Fri, 14 Jun 2013 20:42:20 +0000</pubDate>
				<category><![CDATA[TIL]]></category>
		<guid isPermaLink="false">http://salimfadhley.wordpress.com/?p=3</guid>

					<description><![CDATA[Untitled, a photo by salimfadhley on Flickr. 1. Enable Google Goggles on your Android Device. 2. Take a picture of some published python code. 3. Wait a moment or two&#8230; Google Goggles will OCR that code and look it up. In this case it&#8217;s correctly identified that I&#8217;m working on JenkinsAPI and it&#8217;s even told [&#8230;]]]></description>
										<content:encoded><![CDATA[<div style="margin:0 0 10px;padding:0;font-size:.8em;line-height:1.6em;"><a href="http://www.flickr.com/photos/salimfadhley/9043156523/" title="Untitled"><img src="https://i0.wp.com/farm8.staticflickr.com/7291/9043156523_43b25faaa0.jpg" alt="Untitled by salimfadhley" /></a><br /><span style="margin:0;"><a href="http://www.flickr.com/photos/salimfadhley/9043156523/">Untitled</a>, a photo by <a href="http://www.flickr.com/photos/salimfadhley/">salimfadhley</a> on Flickr.</span></div>
<p>1. Enable Google Goggles on your Android Device.</p>
<p>2. Take a picture of some published python code.</p>
<p>3. Wait a moment or two&#8230; Google Goggles will OCR that code and look it up. In this case it&#8217;s correctly identified that I&#8217;m working on JenkinsAPI and it&#8217;s even told me where I could get it (if I didn&#8217;t already have it cloned).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://salimfadhley.wordpress.com/2013/06/14/til-google-goggles-can-correctly-identify-python-code/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/9db9915317e241a64b5501eafea6aaf612d0feb70b83404be51a6f60a92429bb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Salim Fadhley</media:title>
		</media:content>

		<media:content url="http://farm8.staticflickr.com/7291/9043156523_43b25faaa0.jpg" medium="image">
			<media:title type="html">Untitled by salimfadhley</media:title>
		</media:content>
	</item>
	</channel>
</rss>
