<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1942884879105975307</id><updated>2026-10-18T23:40:31.050-07:00</updated><category term="python"/><category term="skype4py"/><category term="libraries"/><category term="HTTP requests"/><category term="django"/><category term="git"/><category term="pythonistas"/><category term="sinatra"/><category term="skype"/><category term="skypekit"/><category term="4g"/><category term="APIs"/><category term="JSON"/><category term="YouTube"/><category term="amazon product api"/><category term="beanstalk"/><category term="beautifulsoup"/><category term="blogging"/><category term="books"/><category term="bottlenose"/><category term="etc"/><category term="extended attributes"/><category term="frameworks"/><category term="freelance craigslist gigs"/><category term="github"/><category term="google chrome"/><category term="hello"/><category term="hipchat"/><category term="ikea"/><category term="instant messaging"/><category term="lte"/><category term="mac"/><category term="meta data"/><category term="microframeworks"/><category term="mission statement"/><category term="mobility"/><category term="namecheap github fork"/><category term="new"/><category term="os x lion"/><category term="php"/><category term="purpose"/><category term="python cookbook"/><category term="python koans"/><category term="recipes"/><category term="ruby"/><category term="scraping"/><category term="sinatra clones"/><category term="sms"/><category term="src"/><category term="standing desk"/><category term="standing workstation"/><category term="technorati"/><category term="todo"/><category term="tools"/><category term="top5"/><category term="tutorial"/><category term="twitter"/><category term="update"/><category term="upgrade"/><category term="verizon"/><category term="voip"/><category term="web development"/><category term="whatismyip"/><category term="widgets"/><category term="xattr"/><category term="yql"/><title type='text'>killer python projects</title><subtitle type='html'>Random Python and software development-related musings.  Code samples, tutorials, lists, rants, etc.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-5309520479030532539</id><published>2012-07-16T15:02:00.001-07:00</published><updated>2012-07-17T09:48:07.396-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pythonistas"/><category scheme="http://www.blogger.com/atom/ns#" term="skype4py"/><category scheme="http://www.blogger.com/atom/ns#" term="skypekit"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial"/><title type='text'>No more skype4py, SkypeKit is here</title><content type='html'>App developers looking to leverage the Skype platform had a wonderful solution in Skype4Py, the open source python wrapper library. Skype4Py connected to the current Skype installation on the desktop enabling developers to make bots and applications.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, Skype4Py has not been in active development for quite sometime (the last checkin to the codebase was in 2009). At the time of this writing, Skype4Py was verified to be working on Windows 7, and is bound to work fine on OSX and *NIX but there is no saying how long it will continue to do so.&lt;br /&gt;
&lt;br /&gt;
This leaves us with one alternative to continue developing applications and bots on the Skype platform, &lt;a href=&quot;http://developer.skype.com/skypekit&quot;&gt;SkypeKit&lt;/a&gt;. In this post, we&#39;ll take a look at how get sign up for the skype developer program and also to download and use the skypekit for making a sample app to demonstrate the functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Introduction:&lt;/h3&gt;&lt;br /&gt;
Skypekit is, as their website says, a collection of software and APIs that allows internet-connected devices or applications to offer Skype voice and video calls. Skypekit is basically a headless Skype client that runs independently and without any user interface. Developer’s can make apps that will plug into Skypekit and make use of the intended text / audio / video functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Getting in&lt;/h3&gt;While Skype4Py was free to download and use, Skype4Py will set you back 5$ each for the desktop and the embedded versions. Head to your &lt;a href=&quot;http://developer.skype.com/account/projects&quot;&gt;projects&lt;/a&gt; page to join the Skype developer program by paying _US $5_.&lt;br /&gt;
&lt;br /&gt;
There are 4 programs listed there&lt;br /&gt;
&lt;br /&gt;
* Desktop API for Hardware&lt;br /&gt;
&gt;This is for just the documentation and reference.&lt;br /&gt;
* SkypeKit for Desktop&lt;br /&gt;
&gt;Members can read the documentation and also downlod the SDK, runtimes (OSX, *NIX and Windows)and keypairs and forum access.&lt;br /&gt;
* Desktop API for Software&lt;br /&gt;
&gt;This is for just the documentation and reference.&lt;br /&gt;
* SkypeKit for Embedded&lt;br /&gt;
&gt;Members can read the documentation and also downlod the SDK, runtimes (Embedded devices, android, iOS, etc.)and keypairs and forum access.&lt;br /&gt;
&lt;br /&gt;
For this post, We will look at the Skype for Desktop program as we&#39;ll be concentrating on writing apps / bots using the Python language on OSX.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The SDK&lt;/h3&gt;&lt;br /&gt;
Once you&#39;re done signing in, you need to download the SDK. You need to agree to the Skype Terms and conditions before the download starts. &lt;br /&gt;
&lt;br /&gt;
The SDK is a multi-platform SDK that lets you develop apps for skype using C++, Java or Python as your language. The SDK also packs the API documentation _AND_ examples for these three languages.&lt;br /&gt;
&lt;br /&gt;
The SDK downloads as a zipped file. Just fire up a terminal and extract the archive into a folder.&lt;br /&gt;
&lt;br /&gt;
`$ tar -zxvf skypekit-sdk_sdk-4.2.1.97_1379776.tar.gz`&lt;br /&gt;
&lt;br /&gt;
`$ cd skypekit-sdk_sdk-4.2.1.97_1379776`&lt;br /&gt;
&lt;br /&gt;
Hunt through the folders to see what they contain… You will notice that the `bin` folder is virtually empty. It just has a bunch of `netlogger` executables. As of Skypekit SDK version 3.2, the runtime which was previously in the bin folder has been removed.&lt;br /&gt;
&lt;br /&gt;
As mentioned previously, the documentation for each wrapper library is present in the `/interfaces/skype/{cpp_embedded|python|java}/documentation/index.html`.&lt;br /&gt;
&lt;br /&gt;
The tutorial code for each of these wrapper libraries is also present in `/examples/{language}/tutorial` folder.&lt;br /&gt;
&lt;br /&gt;
Moving on...&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The Runtime&lt;/h3&gt;&lt;br /&gt;
The Skype Runtime no longer exists in the bin folder. I just was informed this morning by Skype&#39;s Development Support team that in the latest release a generic runtime is included in the SDK download so you won&#39;t need to generate one anymore.&lt;br /&gt;
&lt;br /&gt;
The Runtime is the headless Skype instance that you use to connect your app with the skype network. This application apes most of the desktop app functionality but since it does not have a User Interface, developers are free to customize the look and feel of their application and interact with runtime using the language specific wrappers provided.&lt;br /&gt;
&lt;br /&gt;
According to Skype, &lt;strong&gt;this runtime can be used by anyone in your organization&#39;s account.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The Keypairs&lt;/h3&gt;&lt;br /&gt;
The keypairs are the last piece of the puzzle in the Skypekit tool before we head into the code. Each application registered on the skype developer page is bound to a unique key-pair of `Base64-encoded X.509 certificates` that authorize the application to interact with the skype services.&lt;br /&gt;
&lt;br /&gt;
Obtaining a key pair is pretty straight forward:&lt;br /&gt;
&lt;br /&gt;
* Head into your project page and click on the **Distribution key pair** link. Speficy a label and the CAPTCHA text.&lt;br /&gt;
&lt;br /&gt;
* Click on **Request key pair** and save your certificate. You will get a `.pem` file to download and use in your application.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;A Sample application&lt;/h3&gt;&lt;br /&gt;
Now that we&#39;ve done with the setup of our SDK and the skype runtime, lets go look at some of the examples provided…&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The pem file&lt;/h3&gt;&lt;br /&gt;
For the sake of simplicity in this sample, the first thing to do is to drop your key (the `.pem` file) into the `/examples/python/tutorial` folder.&lt;br /&gt;
&lt;br /&gt;
Open up `keypair.py` in your favourite editor and change &lt;br /&gt;
&lt;br /&gt;
`keyFileName = &#39;&#39;;` to `keyFileName = &#39;&lt;your key filename&gt;.pem&#39;;`&lt;br /&gt;
&lt;br /&gt;
Startup the skypekit runtime by heading into the folder where you extracted the runtime.&lt;br /&gt;
&lt;br /&gt;
`$ cd mac-x86-skypekit_4.2.1.870_1793622/bin/mac-x86/`&lt;br /&gt;
&lt;br /&gt;
`$ ./mac-x86-skypekit`&lt;br /&gt;
&lt;br /&gt;
Once the runtime kicks in, you&#39;ll see it print some messages like so:&lt;br /&gt;
&lt;br /&gt;
SkypeRuntime Copyright (C) 2003-2012 Skype Technologies S.A.&lt;br /&gt;
SkypeRuntime Version: 4.2/mac-x86-skypekit_4.2.1.870_1793622&lt;br /&gt;
Proprietary and confidential, do not share this application.&lt;br /&gt;
&lt;br /&gt;
and will continue to wait for programs to connect to it.&lt;br /&gt;
&lt;br /&gt;
Open another terminal instance and head into the `/examples/python/tutorial` folder.&lt;br /&gt;
&lt;br /&gt;
Lets start with a simple login script thats provided.&lt;br /&gt;
&lt;br /&gt;
`$ python login.py &lt;skypeusername&gt; &lt;skypepassword&gt;`&lt;br /&gt;
&lt;br /&gt;
This is what you&#39;re going to be seeing:&lt;br /&gt;
&lt;br /&gt;
****************************************************************************&lt;br /&gt;
SkypeKit Python Wrapper Tutorial: Account Login&lt;br /&gt;
****************************************************************************&lt;br /&gt;
Logging in with &lt;skypeusername&gt;&lt;br /&gt;
Login sequence: CONNECTING_TO_P2P&lt;br /&gt;
Login sequence: CONNECTING_TO_SERVER&lt;br /&gt;
Login sequence: LOGGING_IN&lt;br /&gt;
Login sequence: INITIALIZING&lt;br /&gt;
Login sequence: LOGGED_IN&lt;br /&gt;
You should now be able to see this account as online from other Skype instances.&lt;br /&gt;
Press ENTER to log out&lt;br /&gt;
&lt;br /&gt;
You will also notice that the runtime has emitted some messages during the same process indicating that there has been communication.&lt;br /&gt;
&lt;br /&gt;
In the same manner, to place a call to another skype user, the example code provided does so:&lt;br /&gt;
&lt;br /&gt;
`$ python call.py &lt;skypeusername&gt; &lt;skypepassword&gt; &lt;skypedestination&gt;`&lt;br /&gt;
&lt;br /&gt;
And there comes to end the post on SkypeKit.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://developer.skype.com/skypekit/forum&quot;&gt;For further documentation and support, head to the forums on the Skype developer page&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://developer.skype.com/skypekit/reference/python/html/help.html&quot;&gt;The API reference for using python on skypekit is available here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Have fun making great apps!!!&lt;br /&gt;
&lt;br /&gt;
And thanks to</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/5309520479030532539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/07/no-more-skype4py-skypekit-is-here.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/5309520479030532539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/5309520479030532539'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/07/no-more-skype4py-skypekit-is-here.html' title='No more skype4py, SkypeKit is here'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-7642778518019301070</id><published>2012-07-16T14:55:00.000-07:00</published><updated>2012-07-16T14:55:24.437-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ikea"/><category scheme="http://www.blogger.com/atom/ns#" term="standing desk"/><category scheme="http://www.blogger.com/atom/ns#" term="standing workstation"/><title type='text'>Super affordable standing workstation built from IKEA parts - less than $50</title><content type='html'>I&#39;ve been reading a lot about the health and productivity benefits of working at a standing desk for months now and today finally decided to head down to IKEA and grab the parts to build one.  The inspiration came from an article about &lt;a href=&quot;http://iamnotaprogrammer.com/Ikea-Standing-desk-for-22-dollars.html&quot;&gt;how to build a $22 IKEA standing desk&lt;/a&gt;.  This seemed the most sensible way to go about getting what I wanted.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; display: block;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiySlJDLeQUROEY6mHQ4Zm8QI9Z4-rcDzkYhYxts6xQgH_cx4_sjtplvyUFfP_vm7qfA5HoJTceQxIeInxCYPmkBTzDbFu9oNQ0u2vnZ6SO4ve5UzcInSo0aaidC8O4MYE0pHnZnPAC_fhY/s1600/ikea-standing-desk.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear:left ;margin-right:1em; margin-bottom:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;287&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiySlJDLeQUROEY6mHQ4Zm8QI9Z4-rcDzkYhYxts6xQgH_cx4_sjtplvyUFfP_vm7qfA5HoJTceQxIeInxCYPmkBTzDbFu9oNQ0u2vnZ6SO4ve5UzcInSo0aaidC8O4MYE0pHnZnPAC_fhY/s320/ikea-standing-desk.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;From IKEA&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;(2) Lack side tables - $19.98&lt;/li&gt;
&lt;li&gt;(1) Ekby Viktor 11&quot; shelf - $5.99&lt;/li&gt;
&lt;li&gt;(2) Ekby Valter shelf brackets - $8&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;strong&gt;From Home Depot&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;(4) 5/16&quot; x 3&quot; hex bolts - $1.24&lt;/li&gt;
&lt;li&gt;(8) 1/4&quot; washers - $0.88&lt;/li&gt;
&lt;li&gt;(4) 1/4&quot; hex nuts - $0.24&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
The only difference from the article I read was that I used the bolts to attach the brackets since the table legs are hollow and I didn&#39;t attach the shelf to the brackets.  Total was a touch over $60 with tax and gas to get there and back ($40 if you live close to an IKEA).  I love this setup and the only thing I&#39;m gonna change is to drop the bracket down about an inch and a half somehow to get the keyboard surface at a more comfortable level.  I also found that I needed to put something about 1/4&quot; thick under my keyboard to get it to be comfortable to type on; having the keyboard at an angle was hard on my wrists.</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/7642778518019301070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/07/super-affordable-standing-workstation.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/7642778518019301070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/7642778518019301070'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/07/super-affordable-standing-workstation.html' title='Super affordable standing workstation built from IKEA parts - less than $50'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiySlJDLeQUROEY6mHQ4Zm8QI9Z4-rcDzkYhYxts6xQgH_cx4_sjtplvyUFfP_vm7qfA5HoJTceQxIeInxCYPmkBTzDbFu9oNQ0u2vnZ6SO4ve5UzcInSo0aaidC8O4MYE0pHnZnPAC_fhY/s72-c/ikea-standing-desk.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-4092334561142643755</id><published>2012-05-26T16:57:00.000-07:00</published><updated>2012-05-26T16:57:10.245-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="extended attributes"/><category scheme="http://www.blogger.com/atom/ns#" term="meta data"/><category scheme="http://www.blogger.com/atom/ns#" term="xattr"/><title type='text'>Find out where files were downloaded from with Python and xattr</title><content type='html'>Ever forget where you downloaded a file from?  On OS X you can use HFS extended attributes to figure it out.  Linux and Windows also support extended attributes but I don&#39;t know much about their implementations.&lt;br /&gt;
&lt;br /&gt;
To find out where we downloaded a particular file from we can execute this command:&lt;br /&gt;
% xattr -p com.apple.metadata:kMDItemWhereFroms &lt;filename&gt;&lt;br /&gt;
&lt;br /&gt;
The results will look like:&lt;br /&gt;
nya:~/Downloads % xattr -p com.apple.metadata:kMDItemWhereFroms CentOS-5.8-i386-netinstall.iso &lt;br /&gt;
62 70 6C 69 73 74 30 30 A2 01 02 5F 10 4C 68 74&lt;br /&gt;
74 70 3A 2F 2F 79 75 6D 2E 73 69 6E 67 6C 65 68&lt;br /&gt;
6F 70 2E 63 6F 6D 2F 43 65 6E 74 4F 53 2F 35 2E&lt;br /&gt;
38 2F 69 73 6F 73 2F 69 33 38 36 2F 43 65 6E 74&lt;br /&gt;
4F 53 2D 35 2E 38 2D 69 33 38 36 2D 6E 65 74 69&lt;br /&gt;
6E 73 74 61 6C 6C 2E 69 73 6F 5F 10 2E 68 74 74&lt;br /&gt;
70 3A 2F 2F 79 75 6D 2E 73 69 6E 67 6C 65 68 6F&lt;br /&gt;
70 2E 63 6F 6D 2F 43 65 6E 74 4F 53 2F 35 2E 38&lt;br /&gt;
2F 69 73 6F 73 2F 69 33 38 36 2F 08 0B 5A 00 00&lt;br /&gt;
00 00 00 00 01 01 00 00 00 00 00 00 00 03 00 00&lt;br /&gt;
00 00 00 00 00 00 00 00 00 00 00 00 00 8B&lt;br /&gt;
&lt;br /&gt;
Attribute values are usually returned by the -p flag as strings; however, when the value contains nulls the information will be returned in hex instead.  This info isn&#39;t terribly useful so let&#39;s hop over into the Python REPL and take a look.&lt;br /&gt;
&lt;br /&gt;
&gt;&gt;&gt; import xattr&lt;br /&gt;
&gt;&gt;&gt; xattr.getxattr(&#39;CentOS-5.8-i386-netinstall.iso&#39;, &#39;com.apple.metadata:kMDItemWhereFroms&#39;)&lt;br /&gt;
&#39;bplist00\xa2\x01\x02_\x10Lhttp://yum.singlehop.com/CentOS/5.8/isos/i386/CentOS-5.8-i386-netinstall.iso_\x10.http://yum.singlehop.com/CentOS/5.8/isos/i386/\x08\x0bZ\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b&#39;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/4092334561142643755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/05/find-out-where-files-were-downloaded.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/4092334561142643755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/4092334561142643755'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/05/find-out-where-files-were-downloaded.html' title='Find out where files were downloaded from with Python and xattr'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-7195814125363600237</id><published>2012-04-30T18:53:00.000-07:00</published><updated>2012-04-30T18:53:19.708-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="books"/><title type='text'>6 Python Books Worth Buying/Reading/Borrowing/Stealing</title><content type='html'>&lt;table&gt;&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/1430210478/ref=as_li_ss_il?ie=UTF8&amp;tag=tecboorev0d-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430210478&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=1430210478&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=tecboorev0d-20&amp;ServiceVersion=20070822&quot; &gt;&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=tecboorev0d-20&amp;l=as2&amp;o=1&amp;a=1430210478&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot; /&gt;&lt;/td&gt;

&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0672329786/ref=as_li_ss_il?ie=UTF8&amp;tag=tecboorev0d-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0672329786&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0672329786&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=tecboorev0d-20&amp;ServiceVersion=20070822&quot; &gt;&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=tecboorev0d-20&amp;l=as2&amp;o=1&amp;a=0672329786&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot; /&gt;&lt;/td&gt;

&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0321767349/ref=as_li_ss_il?ie=UTF8&amp;tag=tecboorev0d-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321767349&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0321767349&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=tecboorev0d-20&amp;ServiceVersion=20070822&quot; &gt;&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=tecboorev0d-20&amp;l=as2&amp;o=1&amp;a=0321767349&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0596007973/ref=as_li_ss_il?ie=UTF8&amp;tag=tecboorev0d-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596007973&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0596007973&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=tecboorev0d-20&amp;ServiceVersion=20070822&quot; &gt;&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=tecboorev0d-20&amp;l=as2&amp;o=1&amp;a=0596007973&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot; /&gt;&lt;/td&gt;

&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/B006OYO9SK/ref=as_li_ss_il?ie=UTF8&amp;tag=tecboorev0d-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B006OYO9SK&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=B006OYO9SK&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=tecboorev0d-20&amp;ServiceVersion=20070822&quot; &gt;&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=tecboorev0d-20&amp;l=as2&amp;o=1&amp;a=B006OYO9SK&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot; /&gt;&lt;/td&gt;

&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/143021936X/ref=as_li_ss_il?ie=UTF8&amp;tag=tecboorev0d-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=143021936X&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=143021936X&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=tecboorev0d-20&amp;ServiceVersion=20070822&quot; &gt;&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=tecboorev0d-20&amp;l=as2&amp;o=1&amp;a=143021936X&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/7195814125363600237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/04/6-python-books-worth.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/7195814125363600237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/7195814125363600237'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/04/6-python-books-worth.html' title='6 Python Books Worth Buying/Reading/Borrowing/Stealing'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-7960507820715476744</id><published>2012-04-27T15:46:00.000-07:00</published><updated>2012-04-27T15:46:45.637-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="os x lion"/><category scheme="http://www.blogger.com/atom/ns#" term="upgrade"/><title type='text'>OS X Lion upgrade awesome but broke my python dev environment</title><content type='html'>OS X Lion brought some substantial improvements but required pretty much my entire development environment to be rebuilt. &amp;nbsp;Python got upgraded to 2.7 and required all of my modules to be reinstalled. &amp;nbsp;Apache wouldn&#39;t start because mod_fastcgi isn&#39;t provided for Lion. &amp;nbsp;XCode had to have the new version reinstalled and then the command line tools package installed to get gcc back. &amp;nbsp;I wish I would have known this before upgrading so that I was prepared. &amp;nbsp;It&#39;s well worth the upgrade and the inconveniences that come with it but just beware that your system will definitely require some additional setup after upgrading.</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/7960507820715476744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/04/os-x-lion-upgrade-awesome-but-broke-my.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/7960507820715476744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/7960507820715476744'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/04/os-x-lion-upgrade-awesome-but-broke-my.html' title='OS X Lion upgrade awesome but broke my python dev environment'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-2434255672979632409</id><published>2012-04-23T22:46:00.002-07:00</published><updated>2012-04-27T15:53:04.037-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google chrome"/><title type='text'>Google Chrome Performance Issues on OS X Snow Leopard</title><content type='html'>Lately I&#39;ve been using Opera because Chrome had gotten ungodly slow leaving me scratching my head since it used to be blazing fast. &amp;nbsp;Developing with a sluggish browser was a real pain in the ass but I finally got it back up to it&#39;s old speeds again; apparently when you run it in the developer mode used for extension development it&#39;s slow as hell. &amp;nbsp;I disabled some extensions that I no longer use and disabled developer mode and it&#39;s back to being awesome again.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbDzW48UQi8TmRhsUcp5YvrBDXCIGM_W6e2TE3NPNHjZUri79-fy3cxuhgSHPxuI10VhaEEOiFcL96P1_xD_jLU9iBb_DmsCb7QkmD1wpbp6z3BwIGPni_WwXth318hN2WAL126fyeCWie/s1600/Screen+Shot+2012-04-27+at+6.50.22+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbDzW48UQi8TmRhsUcp5YvrBDXCIGM_W6e2TE3NPNHjZUri79-fy3cxuhgSHPxuI10VhaEEOiFcL96P1_xD_jLU9iBb_DmsCb7QkmD1wpbp6z3BwIGPni_WwXth318hN2WAL126fyeCWie/s400/Screen+Shot+2012-04-27+at+6.50.22+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/2434255672979632409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/04/google-chrome-performance-issues-on-os.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/2434255672979632409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/2434255672979632409'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/04/google-chrome-performance-issues-on-os.html' title='Google Chrome Performance Issues on OS X Snow Leopard'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbDzW48UQi8TmRhsUcp5YvrBDXCIGM_W6e2TE3NPNHjZUri79-fy3cxuhgSHPxuI10VhaEEOiFcL96P1_xD_jLU9iBb_DmsCb7QkmD1wpbp6z3BwIGPni_WwXth318hN2WAL126fyeCWie/s72-c/Screen+Shot+2012-04-27+at+6.50.22+PM.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-7376830266874207357</id><published>2012-02-16T14:13:00.000-07:00</published><updated>2012-02-16T14:13:02.767-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="skype"/><category scheme="http://www.blogger.com/atom/ns#" term="skype4py"/><category scheme="http://www.blogger.com/atom/ns#" term="skypekit"/><title type='text'>Screw Skype4Py - Pony Up $5 and Get The SkypeKit for Python</title><content type='html'>My Skype4py post gets a lot of views even though it&#39;s minimally useful. &amp;nbsp;Skype4Py seems to have problems with 64-bit Python and really hasn&#39;t been actively maintained.&lt;br /&gt;
&lt;br /&gt;
You&#39;re really better off spending the $5 to gain access to the Python SkypeKit SDK if you want to develop apps using Skype. &amp;nbsp;Read the API reference and the examples of how to place calls, send messages, etc and then register for an account ($5 one-time fee).&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://developer.skype.com/skypekit/reference/python/html/help.html&quot; target=&quot;_blank&quot;&gt;SkypeKit Python SDK reference&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://developer.skype.com/signup&quot; target=&quot;_blank&quot;&gt;Register for Skype Developer Program&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/7376830266874207357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/02/screw-skype4py-pony-up-5-and-get.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/7376830266874207357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/7376830266874207357'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/02/screw-skype4py-pony-up-5-and-get.html' title='Screw Skype4Py - Pony Up $5 and Get The SkypeKit for Python'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-2019518169416111751</id><published>2012-02-07T14:36:00.000-07:00</published><updated>2012-02-07T14:36:36.112-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="new"/><category scheme="http://www.blogger.com/atom/ns#" term="python cookbook"/><category scheme="http://www.blogger.com/atom/ns#" term="recipes"/><title type='text'>NEW - Checkout the Activestate Python Cookbook Recipes in my sidebar</title><content type='html'>I recently added a widget with recipes from Activestate&#39;s Python Cookbook site that I find really helpful. &amp;nbsp;It&#39;s one of the first places that I go when I need to do something that I&#39;ve never done before (after Github of course). &amp;nbsp;Check them out as they&#39;re updated regularly (pulls from their RSS feed).</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/2019518169416111751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/02/new-checkout-activestate-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/2019518169416111751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/2019518169416111751'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2012/02/new-checkout-activestate-python.html' title='NEW - Checkout the Activestate Python Cookbook Recipes in my sidebar'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-3031405747487401690</id><published>2011-12-24T12:02:00.000-07:00</published><updated>2011-12-24T12:02:08.897-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="github"/><category scheme="http://www.blogger.com/atom/ns#" term="hipchat"/><category scheme="http://www.blogger.com/atom/ns#" term="instant messaging"/><title type='text'>Hipchat: The IM App That I&#39;ve Been Waiting For ...</title><content type='html'>I&#39;ve been waiting for years to have an IM app that I could use with the other developers on my team(s) to communicate about projects and integrate updates from source control and bug tracking. &amp;nbsp;I&#39;m not too keen on using proprietary apps or subscription-based apps in most situations but &lt;a href=&quot;https://www.hipchat.com/features&quot;&gt;Hipchat&lt;/a&gt;&amp;nbsp;has far exceeded my expectations in the few weeks that I&#39;ve been using it.&lt;br /&gt;
&lt;br /&gt;
Besides having a slick interface and the features that I need it uses XMPP/Jabber and has both desktop and web versions of the app (written using Adobe Air). &amp;nbsp;One of the features that I really like is when someone uses your username with an @ symbol preceding it and you&#39;re offline you&#39;ll receive an email with the message.&lt;br /&gt;
&lt;br /&gt;
We&#39;ve been using this primarily to have a record of our debates, conversations, and to have an ongoing record of important tidbits, URLs, git commits, etc. &amp;nbsp;It also has been helpful for having a log of our planning discussions which we can use when bringing new developers onboard to let them sort of get into our heads and see how the app developed to its current state.&lt;br /&gt;
&lt;br /&gt;
Go checkout Hipchat and &lt;a href=&quot;https://www.hipchat.com/sign_up&quot;&gt;signup for their free 30-day trial&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/3031405747487401690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/12/hipchat-im-app-that-ive-been-waiting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/3031405747487401690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/3031405747487401690'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/12/hipchat-im-app-that-ive-been-waiting.html' title='Hipchat: The IM App That I&#39;ve Been Waiting For ...'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-5620082327351302276</id><published>2011-12-17T15:10:00.000-07:00</published><updated>2011-12-17T15:10:23.550-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amazon product api"/><category scheme="http://www.blogger.com/atom/ns#" term="beautifulsoup"/><category scheme="http://www.blogger.com/atom/ns#" term="bottlenose"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Making The New Amazon Product API Easy to Work With</title><content type='html'>I&#39;m working on a new startup idea that I think will really rock the niche it&#39;s in and have been using the Amazon Product API a bunch. &amp;nbsp;They updated the API recently and now require you to send your associate id along with the query.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve tried several xml parsing libraries and several Amazon libraries and have decided that the current combination of BeautifulSoup and bottlenose are what I enjoy working with the most. &amp;nbsp;I&#39;ve been able to bang out tools for myself using this combo very quickly and have actually had fun building each one of them for a change.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;import bottlenose
from BeautifulSoup import BeautifulSoup

# Replace these values with your correct info
AWS_KEY = &#39;key_goes_here&#39;
SECRET_KEY = &#39;secret_goes_here&#39;
ASSOCIATE_ID = &#39;your_associate_id_goes_here&#39;

# Create a bottlenose object and initialize with our credentials
amazon = bottlenose.Amazon(AWS_KEY, SECRET_KEY)

# Query Amazon&#39;s Product API to perform an item lookup via the ASIN, returns the large response # group containing a ton of info, note that we must send the associate id now
response = amazon.ItemLookup(ItemId=&quot;B0018AFK38&quot;, ResponseGroup=&quot;Large&quot;, AssociateTag=ASSOCIATE_ID)

# Create a BS object from the XML response
soup = BeautifulSoup(response)

# A sample of the data that can be retrieved
print soup.find(&#39;itemid&#39;).string
print soup.find(&#39;formattedprice&#39;).string
print soup.find(&#39;detailpageurl&#39;).string
print soup.find(&#39;sku&#39;).string
print soup.find(&#39;content&#39;).string
print soup.find(&#39;title&#39;).string
print soup.find(&#39;department&#39;).string
print soup.find(&#39;smallimage&#39;).url.string
print soup.find(&#39;mediumimage&#39;).url.string
print soup.find(&#39;largeimage&#39;).url.string
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/5620082327351302276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/12/making-new-amazon-product-api-easy-to.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/5620082327351302276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/5620082327351302276'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/12/making-new-amazon-product-api-easy-to.html' title='Making The New Amazon Product API Easy to Work With'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-8944400455612792488</id><published>2011-11-30T13:42:00.000-07:00</published><updated>2011-11-30T13:42:24.875-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="beanstalk"/><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="update"/><title type='text'>If anyone cares what I&#39;m up to ...</title><content type='html'>I&#39;ve been using Python off and on for the past few months and really haven&#39;t had much time for blogging and such. &amp;nbsp;I&#39;m about midway through a project that&#39;s basically a link scanner that handles large volumes of links asynch using &lt;a href=&quot;http://kr.github.com/beanstalkd/&quot;&gt;beanstalkd&lt;/a&gt; and the &lt;a href=&quot;https://github.com/earl/beanstalkc&quot;&gt;beanstalkc&lt;/a&gt; python library. &amp;nbsp;Beanstalk is a great fit for basic asynch queueing needs.&lt;br /&gt;
&lt;br /&gt;
Today I also started working in django again (just modifying an existing site for someone). &amp;nbsp;It&#39;s nice to come back to django after a few months tearing my hair out in RoR land but still can&#39;t touch &lt;a href=&quot;http://pythonprojectwatch.blogspot.com/2011/05/web-development-microframeworks-roundup.html&quot;&gt;microframeworks&lt;/a&gt; for most of what I do.</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/8944400455612792488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/11/if-anyone-cares-what-im-up-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/8944400455612792488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/8944400455612792488'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/11/if-anyone-cares-what-im-up-to.html' title='If anyone cares what I&#39;m up to ...'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-479230990346173462</id><published>2011-11-28T13:34:00.000-07:00</published><updated>2011-11-28T13:36:00.473-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="4g"/><category scheme="http://www.blogger.com/atom/ns#" term="lte"/><category scheme="http://www.blogger.com/atom/ns#" term="mobility"/><category scheme="http://www.blogger.com/atom/ns#" term="verizon"/><title type='text'>The Perfect Solution for Programmers on the Go - Verizon Wireless Mifi LTE 4G Hotspot</title><content type='html'>I&#39;ve been fast approaching burnout and had to do something right away to stave it off; freelance programming and consulting is my main source of income. &amp;nbsp;My solution has been to start working outside in parks. &amp;nbsp;Fresh air and lots of sunlight seems to help me beat the office blues and remain productive.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.amazon.com/dp/B005EN6FUM/ref=as_li_qf_sp_asin_til?tag=tecboorev0d-20&amp;amp;camp=0&amp;amp;creative=0&amp;amp;linkCode=as1&amp;amp;creativeASIN=B005EN6FUM&amp;amp;adid=1GWESFP7V27EP7WEA64B&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ecx.images-amazon.com/images/I/216mrsyln7L._SL500_AA300_.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;The key to me being able to work outside and on the go has been my &lt;a href=&quot;http://www.amazon.com/gp/offer-listing/B005EN6FUM/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;tag=tecboorev0d-20&amp;amp;linkCode=am2&amp;amp;camp=217145&amp;amp;creative=399373&amp;amp;creativeASIN=B005EN6FUM&quot; style=&quot;text-align: -webkit-auto;&quot;&gt;mifi mobile LTE hotspot&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;http://www.assoc-amazon.com/e/ir?t=tecboorev0d-20&amp;amp;l=am2&amp;amp;o=1&amp;amp;a=B005EN6FUM&amp;amp;camp=217145&amp;amp;creative=399373&quot; style=&quot;border-bottom-style: none !important; border-color: initial !important; border-left-style: none !important; border-right-style: none !important; border-top-style: none !important; border-width: initial !important; margin-bottom: 0px !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 0px !important; text-align: -webkit-auto;&quot; width=&quot;1&quot; /&gt;that I bought at the Verizon store in the Metro Center mall here in Phoenix. &amp;nbsp;$50 is a small price to pay for the ultimate in mobility and speed.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve been able to get speeds comparable to my 15mbps DSL service I have at home in most areas. &amp;nbsp;The battery life is pretty good (about 4.5 hours in actual use). &amp;nbsp;I also was able to get a $50 mail-in rebate that basically got me the device for free. &amp;nbsp;Monthly service for 5gb of data is only $50.&lt;br /&gt;
&lt;br /&gt;
This would be a great addition to your toolbox if you&#39;re trying to live the 4HWW lifestyle or just want some extra freedom in where/when you can work on your code. &amp;nbsp;I would also buy this as a gift for any of my techie friends; they&#39;d love having one I&#39;m sure!</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/479230990346173462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/11/perfect-solution-for-programmers-on-go.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/479230990346173462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/479230990346173462'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/11/perfect-solution-for-programmers-on-go.html' title='The Perfect Solution for Programmers on the Go - Verizon Wireless Mifi LTE 4G Hotspot'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-9107402078040739453</id><published>2011-09-21T08:57:00.000-07:00</published><updated>2011-09-21T08:58:01.467-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="libraries"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>My Five Favorite Python Library Finds on Github This Week</title><content type='html'>&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/edsu/microdata&quot;&gt;https://github.com/edsu/microdata&lt;/a&gt; - (python library for extracting html5 microdata)&lt;br /&gt;
&lt;br /&gt;
I&#39;ve been working with HTML5 a lot especially when dealing with Wordpress blogs and was interested in what&#39;s available for HTML5 in Python.&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pneff/wsgiservice&quot;&gt;https://github.com/pneff/wsgiservice&lt;/a&gt; - (Python WSGI framework to create REST web services)&lt;br /&gt;
&lt;br /&gt;
Over the last few weeks I&#39;ve had the (mis)fortune of having to develop a public API for a company using PHP and the Slim framework. &amp;nbsp;Slim isn&#39;t bad but PHP is getting long in the teeth and it&#39;s just not nearly as fun to develop in as Python and Ruby. &amp;nbsp;wsgiservice looks like a good choice (from out of many) for building RESTful APIs.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mcfunley/etsy-python&quot;&gt;https://github.com/mcfunley/etsy-python&lt;/a&gt; - (Python access to the Etsy API)&lt;br /&gt;
&lt;br /&gt;
Esty&#39;s awesome. &amp;nbsp;Python&#39;s awesome. &amp;nbsp;Putting the two together and making a cool site or tool of some sort seems like a good idea and this module can certainly help.&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/liamks/pyitunes&quot;&gt;https://github.com/liamks/pyitunes&lt;/a&gt; - (Python Itunes Library parser)&lt;br /&gt;
&lt;br /&gt;
iTunes is hated my many but I love it and this library (although not maintained as well as it could be) allows access to my music collection. &amp;nbsp;I use it for fixing meta tags on my audio files.&lt;br /&gt;
&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/solex/python-odesk&quot;&gt;https://github.com/solex/python-odesk&lt;/a&gt; - (Python bindings for oDesk API )&lt;br /&gt;
&lt;br /&gt;
I work full-time on oDesk these days as a developer and am building some custom tools to make finding new jobs easier and to make visualizing some of my key statistics easier. &amp;nbsp;For instance, oDesk doesn&#39;t give you an earnings to date readout and I would like that. &amp;nbsp;I would also like to be able to filter jobs out so that I&#39;m never shown jobs below my minimum price point.&lt;/li&gt;
&lt;/ol&gt;
</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/9107402078040739453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/09/my-five-favorite-python-library-finds.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/9107402078040739453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/9107402078040739453'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/09/my-five-favorite-python-library-finds.html' title='My Five Favorite Python Library Finds on Github This Week'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-6157599025903097874</id><published>2011-09-10T18:55:00.000-07:00</published><updated>2011-09-10T18:55:43.389-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="APIs"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTP requests"/><category scheme="http://www.blogger.com/atom/ns#" term="JSON"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="YouTube"/><title type='text'>Working with YouTube API from Python - A Primer</title><content type='html'>Grabbing data from YouTube with Python is really simple and you can build a ton of apps using this information.  It&#39;s nothing more than making an HTTP GET request to the proper gdata URL.  Then we just take the response in JSON format, decode it, and then can work with it like any other Python dictionary.&lt;br /&gt;
&lt;pre&gt;#!/usr/bin/env python
import requests
import json

resp = requests.get(&quot;http://gdata.youtube.com/feeds/api/standardfeeds/most_popular?v=2&amp;amp;alt=jsonc&quot;)
if(resp.status_code == 200):
	data = json.loads(resp.content)
	for item in data[&#39;data&#39;][&#39;items&#39;]:
		print &quot;Video Title: %s&quot; % (item[&#39;title&#39;])
		print &quot;Video Category: %s&quot; % (item[&#39;category&#39;])
		print &quot;Video ID: %s&quot; % (item[&#39;id&#39;])
		print &quot;Video Rating: %f&quot; % (item[&#39;rating&#39;])
		print &quot;Embed URL: %s&quot; % (item[&#39;player&#39;][&#39;default&#39;])
		print
else:
	print &quot;There was a problem retrieving the data&quot;
&lt;/pre&gt;
The results look something like this:&lt;br /&gt;
&lt;pre&gt;Video Title: Minecraft - Dwarf Hole (Diggy Diggy Hole) Fan Song and Animation
Video Category: Shows
Video ID: fR7EAdPUqvQ
Video Rating: 4.862668
Embed URL: http://www.youtube.com/watch?v=fR7EAdPUqvQ&amp;amp;feature=youtube_gdata_player

Video Title: FAT KID FALLS
Video Category: Entertainment
Video ID: dCd8ojAdUbA
Video Rating: 4.671462
Embed URL: http://www.youtube.com/watch?v=dCd8ojAdUbA&amp;amp;feature=youtube_gdata_player

Video Title: Incredible Shade Illusion!
Video Category: Tech
Video ID: z9Sen1HTu5o
Video Rating: 4.793279
Embed URL: http://www.youtube.com/watch?v=z9Sen1HTu5o&amp;amp;feature=youtube_gdata_player

Video Title: David Guetta feat. Sia - Titanium
Video Category: Music
Video ID: Mb6mS6Yj_UA
Video Rating: 4.845408
Embed URL: http://www.youtube.com/watch?v=Mb6mS6Yj_UA&amp;amp;feature=youtube_gdata_player

Video Title: 50 Cal Machine Gun VS. 250 Watermelons
Video Category: Entertainment
Video ID: XyoAP10uKTk
Video Rating: 4.921269
Embed URL: http://www.youtube.com/watch?v=XyoAP10uKTk&amp;amp;feature=youtube_gdata_player

&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #f1c232;&quot;&gt;[ ... cut for space ... ]&lt;/span&gt;
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/6157599025903097874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/09/working-with-youtube-api-from-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/6157599025903097874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/6157599025903097874'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/09/working-with-youtube-api-from-python.html' title='Working with YouTube API from Python - A Primer'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-2781535777279346047</id><published>2011-09-10T18:08:00.000-07:00</published><updated>2011-09-10T18:14:23.574-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTTP requests"/><category scheme="http://www.blogger.com/atom/ns#" term="libraries"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Requests - Easiest, Most Enjoyable Way to Make HTTP Requests in Python</title><content type='html'>I&#39;ve been working for the last week designing and implementing an API for in-house use at a company in Georgia.  The API is being built with PHP5 and a micro-framework called &lt;a href=&quot;http://slimframework.com/&quot;&gt;Slim&lt;/a&gt;.  I would have preferred to build it in web.py but because ultimately this decision was left to the owners who are responsible for maintaining it&#39;s being done in PHP (a language that they&#39;re familiar with).&lt;br /&gt;
&lt;br /&gt;
One of the sore spots has been testing the API as we put it together.  In the end it will be used by the developers that they hired to write mobile phone applications.  I settled on using a Python script for testing the API but quickly tired of writing the HTTP request code using httplib2 and urllib2.  I set out for a better HTTP Request library and quickly found &lt;a href=&quot;http://www.blogger.com/python-requests.org&quot;&gt;Requests&lt;/a&gt;; an elegant and dead-simple library that makes writing code to work with HTTP Requests actually enjoyable.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; import requests
&amp;gt;&amp;gt;&amp;gt; r = requests.get(&quot;http://gdata.youtube.com/feeds/api/standardfeeds/most_popular?v=2&amp;amp;alt=jsonc&quot;)
&amp;gt;&amp;gt;&amp;gt; r.status_code
200
&amp;gt;&amp;gt;&amp;gt; print r.content
{&quot;apiVersion&quot;:&quot;2.1&quot;,&quot;data&quot;:{&quot;updated&quot;:&quot;2011-09-09T19:54:17.000-07:00&quot;,&quot;totalItems&quot;:99,&quot;startIndex&quot;:1,&quot;itemsPerPage&quot;:25,&quot;items&quot;:[{&quot;id&quot;:&quot;X9YMU0WeBwU&quot;,&quot;uploaded&quot;:&quot;2011-08-17T00:52:31.000Z&quot;,&quot;updated&quot;:&quot;2011-09-11T01:09:51.000Z&quot;,&quot;uploader&quot;:&quot;LadyGagaVEVO&quot;,&quot;category&quot;:&quot;Music&quot;,&quot;title&quot;:&quot;Lady Gaga - Yoü And I (Official Video)&quot;,&quot;description&quot;:&quot;Music video by Lady Gaga performing Yoü And I (Official Video). Lady Gaga&#39;s \&quot;Yoü And I\&quot; video received 1,054,214 video views on YouTube prior to the official VEVO video release.  © 2011 Interscope Records&quot;,&quot;tags&quot;:[&quot;You&quot;,&quot;and&quot;,&quot;new&quot;,&quot;video&quot;,&quot;song&quot;,&quot;official&quot;,&quot;Laurieann&quot;,&quot;Gibson&quot;,&quot;haus&quot;,&quot;of&quot;,&quot;gaga&quot;,&quot;Mother&quot;,&quot;Monster&quot;],&quot;thumbnail&quot;:{&quot;sqDefault&quot;:&quot;http://i.ytimg.com/vi/X9YMU0WeBwU/default.jpg&quot;,&quot;hqDefault

&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #f1c232;&quot;&gt;[ ... cut for space ... ]&lt;/span&gt;
&lt;/pre&gt;

I think I will also go back through and rewrite a bunch of my YQL code to use Requests instead for it&#39;s HTTP request needs.  This should be a standard part of your Python toolbox for sure.
</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/2781535777279346047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/09/requests-easiest-most-enjoyable-way-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/2781535777279346047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/2781535777279346047'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/09/requests-easiest-most-enjoyable-way-to.html' title='Requests - Easiest, Most Enjoyable Way to Make HTTP Requests in Python'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-5908287940878204790</id><published>2011-07-21T09:16:00.000-07:00</published><updated>2011-07-21T09:16:56.509-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="skype4py"/><title type='text'>Skype4Py Mac Problems  - Attach() Causes Segmentation Fault</title><content type='html'>I was looking forward to covering Skype4py some more today but when I fired up TextMate to do some coding I noticed that some of my existing scripts no longer worked with the new version of Skype that I have (5.1.0.968).&lt;br /&gt;
&lt;br /&gt;
My current setup is:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;OS X 10.6.8 (Snow Leopard)&lt;/li&gt;
&lt;li&gt;Python 2.6.1&lt;/li&gt;
&lt;li&gt;Skype4Py 1.0.32.0&lt;/li&gt;
&lt;li&gt;Skype 5.1.0.968&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
After doing a few searches I noticed that a bunch of other people are having issues on their Macs with Skype4Py as well; with most encountering segmentation faults when they try to execute the Attach() method on the Skype4Py.Skype() instance.  It&#39;s unclear what exactly is causing the seg fault but all indicators point at the library not being updated to reflect changes that were made to Skype (probably after the reverse-engineered Skype protocol details hit the internet).&lt;br /&gt;
&lt;br /&gt;
Quite simply here&#39;s what happens when you try a simple test script using Skype4Py:&lt;br /&gt;
&lt;pre&gt;# test.py
import Skype4Py

s = Skype4Py.Skype()
s.Attach()
&lt;/pre&gt;&lt;pre&gt;nya:skype tzayad$ python test.py 
Segmentation fault
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/5908287940878204790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/07/skype4py-mac-problems-attach-causes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/5908287940878204790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/5908287940878204790'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/07/skype4py-mac-problems-attach-causes.html' title='Skype4Py Mac Problems  - Attach() Causes Segmentation Fault'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-9106509861946586333</id><published>2011-07-03T18:03:00.000-07:00</published><updated>2011-07-21T09:21:31.859-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type='text'>Make Your Life as a PHP Developer Twice as Easy With phpsh</title><content type='html'>I know that this blog is supposed to be mainly about Python but this was just something that I felt needed to be shared regardless.  Many of us Python programmers either programmed in PHP at one time or we still do on presently.  I use a combination of Ruby, Python, and PHP in my daily work depending on what my clients existing codebase looks like and expect that many of you are no different.&lt;br /&gt;
&lt;br /&gt;
One of the features that I love the most about Python is it&#39;s powerful REPL.  I love that I can pop over into the console and start testing/fleshing out an idea on the spot.  I love being able to test new libraries this way as well which saves me tons of time.&lt;br /&gt;
&lt;br /&gt;
The developers at Facebook have brought PHP developers a powerful REPL now ala-Python to round out a solid toolbox that PHP developers already have.  The project is called &lt;a href=&quot;http://phpsh.org/&quot;&gt;phpsh&lt;/a&gt; and is written in Python.&lt;br /&gt;
&lt;br /&gt;
To give it a go, just clone their git repo to your machine and install the tool via setuptools.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ git clone git://github.com/facebook/phpsh.git
$ cd phpsh
$ sudo python setup.py install
$ phpsh
Starting php
Install pcntl to enable forking on every command.
type &#39;h&#39; or &#39;help&#39; to see instructions &amp;amp; features
php&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Every PHP developer out there that&#39;s not aware of this tool is seriously wasting hours upon hours of their time with each project they complete without phpsh.  Clone the git repo right now and start enjoying the benefits of an REPL like Python and Ruby developers have enjoyed for the longest time.</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/9106509861946586333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/07/make-your-life-as-php-developer-twice.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/9106509861946586333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/9106509861946586333'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/07/make-your-life-as-php-developer-twice.html' title='Make Your Life as a PHP Developer Twice as Easy With phpsh'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-6119950947774550168</id><published>2011-06-23T03:33:00.000-07:00</published><updated>2011-06-23T03:33:48.037-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="freelance craigslist gigs"/><title type='text'>How to Make Finding Freelance Development Jobs Way Easier</title><content type='html'>I get a lot of my freelance work from the Computer Gigs section of Craigslist for my local town (Phoenix) and others in the US.  It&#39;s become tedious to check the sites each day and filter through the myriad of jobs that are local-only or that don&#39;t fit my criteria.  So I imported all of the RSS feeds for the Computer Gigs section of each US city into my Google Reader account and started filtering away.  This has made things way easier and efficient.&lt;br /&gt;
&lt;br /&gt;
If you&#39;re like me and don&#39;t wanna spend time unnecessarily on setting this up today&#39;s your lucky day.  After I imported the feeds, renamed them all to something more meaningful and place them into a folder aptly named &quot;Craigslist Computer Gigs&quot; I exported the feed list to an OPML file which I&#39;m making available to the world.  Import the file into your Google Reader or other RSS feed reader and you can be cruising the CPG section of all US cities in no time.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://caseystrouse.com/uploads/craigslist-cpg-subscriptions.xml&quot;&gt;Download the subscription list&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/6119950947774550168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/06/how-to-make-finding-freelance.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/6119950947774550168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/6119950947774550168'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/06/how-to-make-finding-freelance.html' title='How to Make Finding Freelance Development Jobs Way Easier'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-5997073096122917831</id><published>2011-06-20T12:33:00.000-07:00</published><updated>2011-06-20T12:33:37.386-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="namecheap github fork"/><title type='text'>Just Forked My First Project on Github</title><content type='html'>I&#39;ve been wanting to contribute to some FOSS projects for quite some time now but never got around to doing it.  I was looking to write a webservice today that would allow a C# application I had to request domain information from my webservice which uses the namecheap.com API.&lt;br /&gt;
&lt;br /&gt;
I noticed a ruby library on github that allowed for the checking of domain availability and which looked like a good platform to start building my codebase on so I forked it and began adding functionality to it.  A few hours later I setup git and pushed my first changes to my forked repo.  Man it felt good!&lt;br /&gt;
&lt;br /&gt;
Hopefully someone finds the additional Namecheap.com API calls that I&#39;m implementing to be useful.  You can find my fork of the &lt;a href=&quot;https://github.com/cstrouse/namecheap&quot;&gt;namecheap library here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/5997073096122917831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/06/just-forked-my-first-project-on-github.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/5997073096122917831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/5997073096122917831'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/06/just-forked-my-first-project-on-github.html' title='Just Forked My First Project on Github'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-876973035078341231</id><published>2011-06-19T22:51:00.001-07:00</published><updated>2011-06-19T22:51:37.419-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="technorati"/><title type='text'>Claiming My Blog on Technorati</title><content type='html'>DZone and Reddit bring me decent amounts of traffic but I figured I should submit to Technorati as well.&lt;br /&gt;
&lt;br /&gt;
DSPTC3UHYKGU</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/876973035078341231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/06/claiming-my-blog-on-technorati.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/876973035078341231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/876973035078341231'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/06/claiming-my-blog-on-technorati.html' title='Claiming My Blog on Technorati'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-3024404925117457914</id><published>2011-06-19T13:57:00.000-07:00</published><updated>2011-06-19T13:57:16.767-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python koans"/><title type='text'>Master Python and TDD Through Python Koans</title><content type='html'>The other day a friend of mine who&#39;s interested in learning to program asked me for some advice on how best to approach the Ruby language.  After thinking for a few minutes I remembered coming across a great tutorial by &lt;a href=&quot;http://edgecase.com&quot;&gt;Edge Case&lt;/a&gt; called &lt;a href=&quot;http://rubykoans.com/&quot;&gt;Ruby Koans&lt;/a&gt; that walks you through all of the core language features, syntax, libraries, and test-driven development.&lt;br /&gt;
&lt;br /&gt;
I downloaded the koans to his home directory on my development server, explained how it works and then had him give it a shot.  He&#39;s progressing well and has already learned most of the core language syntax.  I myself have completed the koans in order to evaluate their efficacy and I&#39;m thoroughly impressed.  This should be the first step for learning a new language.&lt;br /&gt;
&lt;br /&gt;
Luckily many people have found the koans useful and have ported them to their favorite language; Python is no exception.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://bitbucket.org/gregmalcolm/python_koans/wiki/Home&quot;&gt;Download Python Koans&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/3024404925117457914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/06/master-python-and-tdd-through-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/3024404925117457914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/3024404925117457914'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/06/master-python-and-tdd-through-python.html' title='Master Python and TDD Through Python Koans'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-351197195330361390</id><published>2011-05-30T13:38:00.000-07:00</published><updated>2011-05-31T15:23:00.181-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pythonistas"/><category scheme="http://www.blogger.com/atom/ns#" term="twitter"/><title type='text'>15 Python Developers You Need To Follow On Twitter</title><content type='html'>I&#39;m fairly new to Twitter but have been coding in Python for quite some time.  I&#39;ve been trying to build up my list of people that I follow and who follow me.  While I was looking around I whipped up a list of some Python developers who have a lot of really interesting/helpful/insightful things to say about Python and things in general.&lt;br /&gt;
The following 15 people made the short list this time; there are way more Python developers extant than I have time/space to write about them so let this get you started.  I apologize in advance for those who I left out.&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;1.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a3.twimg.com/profile_images/54835222/74978-004_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/gutworth&quot;&gt;Benjamin Peterson&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;2.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a2.twimg.com/profile_images/371264970/mh2_reasonably_small.png&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/skippyhammond&quot;&gt;Mark Hammond&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;3.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a1.twimg.com/profile_images/1320257545/chicago-cubs-logo_reasonably_small.png&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/brian_curtin&quot;&gt;Brian Curtin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;4.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a0.twimg.com/profile_images/1244993088/300px-Victor_stinner_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/victor_stinner&quot;&gt;Victor Stinner&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;5.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a0.twimg.com/profile_images/762155936/pc_cartwheel_reasonably_small.jpeg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/pydanny&quot;&gt;Dan Greenfeld&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;6.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a1.twimg.com/profile_images/1276419269/pycon2011_language_summit_cropped_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/ncoghlan_dev&quot;&gt;Nick Coghlan&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;7.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a1.twimg.com/profile_images/605610498/jtauber_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/jtauber&quot;&gt;James Tauber&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;8.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a3.twimg.com/profile_images/73450913/IMG_0202_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/raymondh&quot;&gt;Raymond Hettinger&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;9.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a2.twimg.com/profile_images/424495004/GuidoAvatar_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/gvanrossum&quot;&gt;Guido van Rossum&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;10.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a2.twimg.com/profile_images/847529532/e839d38c7656fe0e2db4b72ac605a7e4_reasonably_small.jpeg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/OlivierVerdier&quot;&gt;Olivier Verdier&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;11.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a0.twimg.com/profile_images/1223433032/anto-bn3_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/antocuni&quot;&gt;Antonio Cuni&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;12.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a1.twimg.com/profile_images/907872100/twitter_profile_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/alfredodeza&quot;&gt;Alfredo Deza&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;13.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a0.twimg.com/profile_images/24858032/IMG_0675_reasonably_small.png&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/bkjones&quot;&gt;Brian K. Jones&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;14.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a3.twimg.com/profile_images/72719175/mypictr_last.fm_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/landtuna&quot;&gt;Jim Hunziker&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h1&gt;15.&lt;/h1&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://a0.twimg.com/profile_images/642151925/portrait_reasonably_small.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://twitter.com/#!/frr149&quot;&gt;Fernando Rodríguez&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;**UPDATE** - So this dude &lt;a href=&quot;http://www.reddit.com/user/coderanger&quot;&gt;coderanger&lt;/a&gt; on reddit posted some awesome stuff about &lt;a href=&quot;http://www.reddit.com/r/Python/comments/hods4/15_python_developers_you_need_to_follow_on_twitter/&quot;&gt;why these developers should be followed&lt;/a&gt;.  Sorry for being so lazy and not doing this myself! =p&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/351197195330361390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/05/15-python-developers-you-need-to-follow.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/351197195330361390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/351197195330361390'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/05/15-python-developers-you-need-to-follow.html' title='15 Python Developers You Need To Follow On Twitter'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-4746793060458777540</id><published>2011-05-23T12:02:00.000-07:00</published><updated>2011-05-23T12:02:21.316-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blogging"/><category scheme="http://www.blogger.com/atom/ns#" term="etc"/><title type='text'>Just How Much Does Your Choice of Headline Really Make For Your Blog Posts?</title><content type='html'>Over the months since I&#39;ve setup this blog I&#39;ve seen decent traffic levels. &amp;nbsp;I&#39;ve derived most of the visits from posting links on &lt;a href=&quot;http://dzone.com/&quot;&gt;DZone&lt;/a&gt;, &lt;a href=&quot;http://reddit.com/r/programming&quot;&gt;Reddit&lt;/a&gt;, &lt;a href=&quot;http://news.ycombinator.com/&quot;&gt;YCombinator&lt;/a&gt;, and then reposts from readers. &amp;nbsp;I&#39;ve noticed that some posts really pull in good traffic (like the post I wrote about &lt;a href=&quot;http://pythonprojectwatch.blogspot.com/2011/03/easily-interact-with-skype-api-using.html&quot;&gt;skype4py&lt;/a&gt;) and others just don&#39;t seem to catch on.&lt;br /&gt;
&lt;br /&gt;
I&#39;ve not had much luck in guessing which posts would generate the highest amounts of traffic and this got me thinking ...&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK4BbETKMUmD6QSAQFK7BDGUw9MFarIGVpgcziH4U7J7gKsdH7X-5lyE_aIRUrtC4nk2AOus8dPp81-EDQrY0J_4CrD0f-hAzSz1pVVQiJ1azVF64YyTb-xAhgvl6bJmn_MZvH0EovB7od/s1600/ppw-stats-may-2011.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;&quot; height=&quot;91&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK4BbETKMUmD6QSAQFK7BDGUw9MFarIGVpgcziH4U7J7gKsdH7X-5lyE_aIRUrtC4nk2AOus8dPp81-EDQrY0J_4CrD0f-hAzSz1pVVQiJ1azVF64YyTb-xAhgvl6bJmn_MZvH0EovB7od/s320/ppw-stats-may-2011.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The spike from posting web dev microframeworks to social media sites&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;So it seems that it all boils down to the headline/title that I choose for the post. &amp;nbsp;My latest post about &lt;a href=&quot;http://pythonprojectwatch.blogspot.com/2011/05/web-development-microframeworks-roundup.html&quot;&gt;web development microframeworks&lt;/a&gt; is boring and probably not of interest to most people; however, the skype4py post, while barely useful IMO has generated decent traffic and continued to bring in new readers via the search engines. &amp;nbsp;Another great post was &quot;&lt;a href=&quot;http://pythonprojectwatch.blogspot.com/2011/03/110-easier-web-scraping-with-yahoo.html&quot;&gt;110% easier screen scraping&lt;/a&gt;&quot; which I guess was because of its appeal to people who are frustrated with traditional screen scraping techniques.&lt;br /&gt;
&lt;br /&gt;
The bottom line seems to be that you must thoroughly research the demand for specific keywords and then make sure to have catchy titles that entice people to read the post. &amp;nbsp;I&#39;ve failed to do this for a lot of my posts and have suffered with low readership because of it. &amp;nbsp;Don&#39;t make the same mistake! &amp;nbsp;Spend the time researching search volume, ad costs, etc and nail down just what keywords will get you continued traffic.</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/4746793060458777540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/05/just-how-much-does-your-choice-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/4746793060458777540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/4746793060458777540'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/05/just-how-much-does-your-choice-of.html' title='Just How Much Does Your Choice of Headline Really Make For Your Blog Posts?'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK4BbETKMUmD6QSAQFK7BDGUw9MFarIGVpgcziH4U7J7gKsdH7X-5lyE_aIRUrtC4nk2AOus8dPp81-EDQrY0J_4CrD0f-hAzSz1pVVQiJ1azVF64YyTb-xAhgvl6bJmn_MZvH0EovB7od/s72-c/ppw-stats-may-2011.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-3546338097740309618</id><published>2011-05-22T09:49:00.000-07:00</published><updated>2011-05-22T11:09:40.031-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microframeworks"/><category scheme="http://www.blogger.com/atom/ns#" term="sinatra"/><category scheme="http://www.blogger.com/atom/ns#" term="sinatra clones"/><title type='text'>Web Development Microframeworks Roundup</title><content type='html'>As I&#39;m really into minimalism and lightweight tools I&#39;ve been working with and evaluating many microframeworks for web development recently.  Here are some of the more interesting frameworks across multiple languages that I&#39;ve found in my searches.  Sinatra is the first microframework that I&#39;ve worked with and many of these others are either straight clones of Sinatra or are loosely based on Sinatra and it&#39;s underlying design impetus.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e69138;&quot;&gt;Ruby&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.sinatrarb.com/&quot;&gt;Sinatra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://camping.rubyforge.org/&quot;&gt;Camping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.padrinorb.com/&quot;&gt;Padrino&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e69138; font-weight: bold;&quot;&gt;Python&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://webpy.org/&quot;&gt;WebPy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bottlepy.org/docs/dev/&quot;&gt;Bottly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://flask.pocoo.org/&quot;&gt;Flask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://denied.immersedcode.org/&quot;&gt;Denied&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e69138;&quot;&gt;Java&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.sparkjava.com/&quot;&gt;Spark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jacek99/Napalm&quot;&gt;Napalm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e69138;&quot;&gt;PHP&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.limonade-php.net/&quot;&gt;Limonade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jim/fitzgerald&quot;&gt;Fitzgerald&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://fatfree.sourceforge.net/&quot;&gt;Fat Free Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://slim.joshlockhart.com/&quot;&gt;Slim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e69138;&quot;&gt;Javascript&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://sammyjs.org/&quot;&gt;Sammy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e69138;&quot;&gt;C#&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/thecodejunkie/Nancy&quot;&gt;Nancy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e69138;&quot;&gt;Perl&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://perldancer.org/&quot;&gt;Dancer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://search.cpan.org/~beppu/Squatting-0.81/lib/Squatting.pm&quot;&gt;Squatting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Hopefully someone will find this listing of web development microframeworks useful.  I searched for hours trying to find all of the options and which ones are best.  Maybe this will save you some time in your search.&lt;/p&gt;&lt;p&gt;As a followup post I am planning on comparing/contrasting the Python frameworks.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/3546338097740309618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/05/web-development-microframeworks-roundup.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/3546338097740309618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/3546338097740309618'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/05/web-development-microframeworks-roundup.html' title='Web Development Microframeworks Roundup'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1942884879105975307.post-3062314329591508989</id><published>2011-04-06T15:05:00.000-07:00</published><updated>2011-04-06T15:05:41.141-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="sinatra"/><title type='text'>I&#39;m Taking a Break From Python</title><content type='html'>I have some contract work that I need to do which requires me to use Ruby and a framework called Sinatra.  So far it&#39;s pretty awesome but to me seems very similar to web.py.  Not sure how much longer I will continue to use it once this project is completed but there&#39;s a distinct possibility that I will keep it in my toolbox for a rainy day.</content><link rel='replies' type='application/atom+xml' href='http://pythonprojectwatch.blogspot.com/feeds/3062314329591508989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/04/im-taking-break-from-python.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/3062314329591508989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1942884879105975307/posts/default/3062314329591508989'/><link rel='alternate' type='text/html' href='http://pythonprojectwatch.blogspot.com/2011/04/im-taking-break-from-python.html' title='I&#39;m Taking a Break From Python'/><author><name>Casey</name><uri>http://www.blogger.com/profile/02765438123805854771</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ON9b4kbu6YXOO9NmGFUp6dNfHE1R_2dX9Lwf9rhWSw31n_2uu_zC0j3f7R7WqGSln108Owh7q_Svh_AL4BdaxNk5m8E-QzO87btudxwYw9nXNFIN_QOfM0AGgCIazg/s220/IMG_0004.jpg'/></author><thr:total>1</thr:total></entry></feed>