<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Shifting Bits by Patrick Altman: Latest Entries</title><link>http://paltman.com/</link><description /><language>en-us</language><lastBuildDate>Mon, 09 Nov 2009 00:00:00 PST</lastBuildDate><geo:lat>36.180507</geo:lat><geo:long>-86.60111</geo:long><image><link>http://creativecommons.org/licenses/by-nc-nd/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><meta xmlns="http://pipes.yahoo.com" name="pipes" content="noprocess" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/PatrickAltman" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Links for 2009-11-08 [del.icio.us]</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/eGHO9oMuGaQ/altman</link><pubDate>Mon, 09 Nov 2009 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2009-11-08</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/index.html"&gt;Closure Library API Documentation (Closure Library API Documentation - JavaScript)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/eGHO9oMuGaQ" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/altman#2009-11-08</feedburner:origLink></item><item><title>Links for 2009-11-07 [del.icio.us]</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/0oZlbRC3qAU/altman</link><pubDate>Sun, 08 Nov 2009 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2009-11-07</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://github.com/rpbertp13/kiwi"&gt;rpbertp13's kiwi at master - GitHub&lt;/a&gt;&lt;br/&gt;
mvc framework for jQuery and REST interfaces&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/0oZlbRC3qAU" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/altman#2009-11-07</feedburner:origLink></item><item><title>Links for 2009-11-06 [del.icio.us]</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/RZ6PCTQW6Pk/altman</link><pubDate>Sat, 07 Nov 2009 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2009-11-06</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://online.wsj.com/article/SB10001424052748703740004574513463106012106.html#printMode"&gt;How Junot Diaz, Kazuo Ishiguro and Orhan Pamuk Write - WSJ.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/RZ6PCTQW6Pk" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/altman#2009-11-06</feedburner:origLink></item><item><title>Links for 2009-11-05 [del.icio.us]</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/nH3PsZPdZ0c/altman</link><pubDate>Fri, 06 Nov 2009 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2009-11-05</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.bestinclass.dk/index.php/2009/11/beautiful-code-take-1/"&gt;Beautiful code&amp;thinsp;&amp;mdash;&amp;thinsp;The Manifesto &amp;laquo; BEST IN CLASS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.atlassian.com/software/jira/tour/"&gt;Issue Tracking &amp;amp; Bug Tracking - Product Tour - JIRA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/nH3PsZPdZ0c" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/altman#2009-11-05</feedburner:origLink></item><item><title>Links for 2009-11-04 [del.icio.us]</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/CXYQ9vS5d94/altman</link><pubDate>Thu, 05 Nov 2009 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2009-11-04</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://paulstamatiou.com/review-att-3g-microcell"&gt;Review: AT&amp;amp;T 3G MicroCell &amp;mdash; PaulStamatiou.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/CXYQ9vS5d94" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/altman#2009-11-04</feedburner:origLink></item><item><title>Links for 2009-11-03 [del.icio.us]</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/ydw8Zsu1OeI/altman</link><pubDate>Wed, 04 Nov 2009 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2009-11-03</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Gyokuro"&gt;Gyokuro - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lazypython.blogspot.com/2009/11/introduction-to-unladen-swallow.html"&gt;Lazy Pythonista: Introduction to Unladen Swallow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pulseapp.com/"&gt;Small Business Cash Flow Management - Pulse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nodebox.net/code/index.php/Home"&gt;NodeBox | Home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://historyshots.com/"&gt;HistoryShots - Information Graphics - History Related&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://webkit.org/blog/829/web-inspector-updates/"&gt;Surfin&amp;rsquo; Safari - Blog Archive &amp;raquo; Web Inspector Updates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/ydw8Zsu1OeI" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/altman#2009-11-03</feedburner:origLink></item><item><title>John Piper on the Prosperity Gospel</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/KBXzgb64-DY/</link><description>&lt;p&gt;John Piper is certainly one of my favorites and this brief interview is excellent.  He explains why the prosperity gospel in its many forms is an abomination.
&lt;/p&gt;
&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/jLRue4nwJaA&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/jLRue4nwJaA&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;Something that became apparent to me after watching this is that the extreme end of the spectrum is easily identified and most would agree is bad.  However, how much is around us everyday that is of the more subtler end.  Maybe at times without even intending to be.
&lt;/p&gt;
&lt;p&gt;This is what I love about Piper.  He makes you think.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=KBXzgb64-DY:0af24cqlfx8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=KBXzgb64-DY:0af24cqlfx8:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=KBXzgb64-DY:0af24cqlfx8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=KBXzgb64-DY:0af24cqlfx8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=KBXzgb64-DY:0af24cqlfx8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/KBXzgb64-DY" height="1" width="1"/&gt;</description><pubDate>Tue, 03 Nov 2009 20:50:09 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/nov/03/john-piper-on-the-prosperity-gospel/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/nov/03/john-piper-on-the-prosperity-gospel/</feedburner:origLink></item><item><title>Links for 2009-11-01 [del.icio.us]</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/9GTLG5Z-RNk/altman</link><pubDate>Sun, 01 Nov 2009 23:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/altman#2009-11-01</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.sciencedaily.com/releases/2009/10/091026172052.htm"&gt;Link Between Alcohol And Cancer Explained: Alcohol Activates Cellular Changes That Make Tumor Cells Spread&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://werkzeug.pocoo.org/"&gt;Welcome // Werkzeug&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/9GTLG5Z-RNk" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/altman#2009-11-01</feedburner:origLink></item><item><title>So You Want to Write a Book?</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/IlzIKRzQ3HM/</link><description>&lt;p&gt;It's November again that means it's another time with a lot of people are focused on writing. I think it all got started with the &lt;a href="http://www.nanowrimo.org/"&gt;National Novel Writing Month&lt;/a&gt; but it has been co-opted by other groups or efforts as well.
&lt;/p&gt;
&lt;p&gt;For example there is the &lt;a href="http://www.nablopomo.com/"&gt;National Blog Posting Month&lt;/a&gt;, which even had sub groups focused around particular topics -- &lt;a href="http://ericholscher.com/blog/2008/nov/1/blog-post-day-keeps-doctor-away/"&gt;Django anyone?&lt;/a&gt;.  Also, the folks at &lt;a href="http://www.pragprog.com/"&gt;Pragmatic Programmers&lt;/a&gt; have started there own focused effort of encouraging technical book writing this month, called &lt;a href="http://praglife.typepad.com/pragmatic_life/2009/10/prag-pro-wri-mo.html"&gt;PragProWriMo&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;This is something that has long peeked my interest.  I am an on again / off again blogger (or is that rambler).  Not to long ago I published a feature article for &lt;a href="http://pymag.phparch.com/"&gt;Python Magazine&lt;/a&gt; and have several more article ideas queued up.  I have written outlines and discussed ideas with various publishers about writing a book, however, I have never moved forward with the idea.
&lt;/p&gt;
&lt;p&gt;It always and inevitably comes down to not having enough spare time.  I am not giving up on the idea and once again this month I am inspired to figure out how to carve up enough time to make headway on some of my book ideas, but I am not optimistic.
&lt;/p&gt;
&lt;p&gt;That said, I found an excellent series of posts by &lt;a href="http://pragdave.blogs.pragprog.com/pragdave/"&gt;Dave Thomas aka PragDave&lt;/a&gt; entitled &amp;quot;So You Want to Write A Book&amp;quot; or SYWTWAB (why do people with technical bents always tend to make acronyms out of evertyhing?) that was authored more than 2 years ago but is still very useful and inspiring today.
&lt;/p&gt;

&lt;h2&gt;SYWTWAB 1 - So You Want to Write A Book&lt;/h2&gt;
&lt;p&gt;This &lt;a href="http://pragdave.blogs.pragprog.com/pragdave/2007/03/sywtwab_1_so_yo.html"&gt;intro post&lt;/a&gt; to the series summarizes with some good advice that the only way to see a book through is start with Passion, Evangelism, and Practical Knowledge, on the topic you want to write about.  For the topics I want to write about I am lacking in none of these, so we'll see about how to do it with limited time.
&lt;/p&gt;

&lt;h2&gt;SYWTWAB 2 - The Hero's Journey&lt;/h2&gt;
&lt;p&gt;In &lt;a href="http://pragdave.blogs.pragprog.com/pragdave/2007/03/sywtwab_2_the_h.html"&gt;this post&lt;/a&gt;, Dave discusses how to transform otherwise dry and boring material to engage the reader like good fiction.  This is accomplished through leveraging storytelling patterns like &amp;quot;The Hero's Journey&amp;quot;.  Good stuff!
&lt;/p&gt;

&lt;h2&gt;SYWTWAB 3 - The Hero's Journey: Are You Experienced&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://pragdave.blogs.pragprog.com/pragdave/2007/03/sywtwab_3_the_h.html"&gt;The Dreyfus Model and taking your Hero from novice to expert&lt;/a&gt; make a very good point that learning and gaining experience is not a linear progression even though most technical books are written this way.  Start with simple but meaty examples showing practical and useful solutions and lead up to more conceptual and theoretical toward the end.  I can't tell you how many books I have read that are just the opposite (1 or 2 chapters at the beginning explaining very abstract terms about a new technology that I just want to get rolling with and further have less of a context to appreciate the abstract).
&lt;/p&gt;

&lt;h2&gt;SYWTWAB 4 - Readers on Your Shoulders&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://pragdave.blogs.pragprog.com/pragdave/2007/03/sywtwab_4_reade.html"&gt;Putting readers on your shoulders&lt;/a&gt; is an interesting concept where Dave suggests imagining people that you know at three different levels of expertise.  Then you imagine how they'd react to reading what you are writing as you write it.  This sounds very much like developing &lt;a href="http://www.cooper.com/journal/2003/08/the_origin_of_personas.html"&gt;Personas&lt;/a&gt; when designing a software system.  Get to know and make the &amp;quot;users&amp;quot; real as you are creating to keep in touch with your &amp;quot;audience&amp;quot;.
&lt;/p&gt;

&lt;h2&gt;SYWTWAB 5 - Finding Your Voice&lt;/h2&gt;
&lt;p&gt;Dave says to &lt;a href="http://pragdave.blogs.pragprog.com/pragdave/2007/03/sywtwab_5_findi.html"&gt;throw your first 30 so pages away&lt;/a&gt; when starting a new book.  This will take the pressure off at the beginning and help remove writers block.  It will also help to find a natural rhythm for words and phrasing that will be your true voice.
&lt;/p&gt;

&lt;h2&gt;SYWTWAB 6 - Wrandom Writing Wrules&lt;/h2&gt;
&lt;p&gt;A bunch of &lt;a href="http://pragdave.blogs.pragprog.com/pragdave/2007/03/sywtwab_6_wrand.html"&gt;good tips in this article&lt;/a&gt;:
&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;
     No distractions
 &lt;/li&gt;

 &lt;li&gt;
     Don't fuss with formatting
 &lt;/li&gt;

 &lt;li&gt;
     Scheduling your writing time
 &lt;/li&gt;

 &lt;li&gt;
     Do the difficult parts first (once you establish your voice)
 &lt;/li&gt;

 &lt;li&gt;
     Cut and paste, frequently.
 &lt;/li&gt;

 &lt;li&gt;
     Get feedback, early and often.
 &lt;/li&gt;

 &lt;li&gt;
     Save and backup often
 &lt;/li&gt;

 &lt;li&gt;
     Cross reference
 &lt;/li&gt;

 &lt;li&gt;
     Write Light Outlines, Not Detailed Ones
 &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;SYWTWAB 7 - Reviewers, And How Not to Kill Them&lt;/h2&gt;
&lt;p&gt;This &lt;a href="http://pragdave.blogs.pragprog.com/pragdave/2007/03/sywtwab_7_revie.html"&gt;last post&lt;/a&gt; provides some tips on dealing with varying approaches and personalities found in reviewers.  Dave also stresses how it is important to cherish reviewer feedback as its hard to make a book really great without it.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=IlzIKRzQ3HM:umAhMk-ecwI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=IlzIKRzQ3HM:umAhMk-ecwI:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=IlzIKRzQ3HM:umAhMk-ecwI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=IlzIKRzQ3HM:umAhMk-ecwI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=IlzIKRzQ3HM:umAhMk-ecwI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/IlzIKRzQ3HM" height="1" width="1"/&gt;</description><pubDate>Sun, 01 Nov 2009 12:46:23 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/nov/01/so-you-want-to-write-a-book/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/nov/01/so-you-want-to-write-a-book/</feedburner:origLink></item><item><title>Buffered Writes with httplib</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/WVmB8PK7Wig/</link><description>&lt;p&gt;I was wresting pretty vigorously with trying to fix a bug in &lt;a href="http://studionow.github.com/pybrightcove"&gt;pybrightcove&lt;/a&gt; for
   past several days.  The problem was occurring when trying to send a very large
   file (&amp;gt;2GB).  I was getting &lt;code&gt;out of memory&lt;/code&gt; exceptions on the server
   sporadically and when I didn't get them, it was another exception that said
   something about blowing the upper limit on a Python string.
&lt;/p&gt;
&lt;p&gt;That led me to investigate the code I that I previously borrowed from another
   project I found that was doing multipart form encode POSTs.  It was using
   urllib2 to send the data, which meant that it had to load all the data up into
   memory before sending it across the wire.
&lt;/p&gt;
&lt;p&gt;This seemed pretty bad to me and I thought for sure that there had to be a more
   reasonable approach to sending data -- an approach that I have
   used many times before would be to simply do a buffered read/write.  However,
   for the life of me I couldn't figure out how to do this with the classes that
   I found available to me within the urllib2 framework.  And the stuff I did start
   considering (writing my own Handler and/or subclasses the Request object), seemed
   unnatural and fighting the library instead of working with it.
&lt;/p&gt;
&lt;p&gt;After taking a step back, I realized that the Python based &lt;a href="http://code.google.com/apis/gdata/clientlibs.html"&gt;Google Data&lt;/a&gt; &lt;a href="http://code.google.com/p/gdata-Python-client/"&gt;client&lt;/a&gt;,
   written and published by Google, was capable of sending &amp;gt;2GB files via its API
   and it's client was pure Python.  So I downloaded the code and started tinkering
   with how to make use of the &lt;code&gt;http_core&lt;/code&gt; module found in the &lt;code&gt;atom&lt;/code&gt; framework.
&lt;/p&gt;
&lt;p&gt;I copied over the module to pybrightcove as it seemed pretty independent (it
   only relies on core Python modules).  Right away I noticed that it used a more
   lower level framework within Python called &lt;code&gt;httplib&lt;/code&gt;, allowing it to build up
   the request and do a buffered read/write for file data.
&lt;/p&gt;
&lt;p&gt;I had to modify it quite a bit to get it to suit my needs with &lt;code&gt;pybrightcove&lt;/code&gt;
   since the multi-part body needed to be formatted slightly different for the
   Brightcove Media API.  However, after about an hour of inspecting POST bodies
   with &lt;a href="http://www.charlesproxy.com/"&gt;Charles&lt;/a&gt; (highly recommended, by the way), I got things working.
&lt;/p&gt;
&lt;p&gt;So, with this addition, I am calling this v1.0 for the &lt;code&gt;pybrightcove&lt;/code&gt; library.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=WVmB8PK7Wig:FBPqXtIXs_0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=WVmB8PK7Wig:FBPqXtIXs_0:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=WVmB8PK7Wig:FBPqXtIXs_0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=WVmB8PK7Wig:FBPqXtIXs_0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=WVmB8PK7Wig:FBPqXtIXs_0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/WVmB8PK7Wig" height="1" width="1"/&gt;</description><pubDate>Mon, 12 Oct 2009 10:23:39 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/oct/12/buffered-writes-with-httplib/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/oct/12/buffered-writes-with-httplib/</feedburner:origLink></item><item><title>Future of the Dollar</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/2WbORKZZfNc/</link><description>&lt;p&gt;&lt;object id="cnbcplayer" height="380" width="400" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" &gt;
   &lt;param name="type" value="application/x-shockwave-flash"/&gt;
   &lt;param name="allowfullscreen" value="true"/&gt;
   &lt;param name="allowscriptaccess" value="always"/&gt;
   &lt;param name="quality" value="best"/&gt;
   &lt;param name="scale" value="noscale" /&gt;
   &lt;param name="wmode" value="transparent"/&gt;
   &lt;param name="bgcolor" value="#000000"/&gt;
   &lt;param name="salign" value="lt"/&gt;
   &lt;param name="movie" value="http://plus.cnbc.com/rssvideosearch/action/player/id/1275511738/code/cnbcplayershare"/&gt;
   &lt;embed name="cnbcplayer" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer" allowfullscreen="true" allowscriptaccess="always" bgcolor="#000000" height="380" width="400" quality="best" wmode="transparent" scale="noscale" salign="lt" src="http://plus.cnbc.com/rssvideosearch/action/player/id/1275511738/code/cnbcplayershare" type="application/x-shockwave-flash" /&gt;
   &lt;/object&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=2WbORKZZfNc:SNTtNUcvr9g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=2WbORKZZfNc:SNTtNUcvr9g:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=2WbORKZZfNc:SNTtNUcvr9g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=2WbORKZZfNc:SNTtNUcvr9g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=2WbORKZZfNc:SNTtNUcvr9g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/2WbORKZZfNc" height="1" width="1"/&gt;</description><pubDate>Sun, 27 Sep 2009 21:23:22 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/sep/27/future-of-the-dollar/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/sep/27/future-of-the-dollar/</feedburner:origLink></item><item><title>Logical Delete Support in Django</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/1u-T2N1RWag/</link><description>&lt;p&gt;I have had a small set of functionality that I have copied to several projects and thought it was time to abstract it out as its own pluggable Django app.  Thus, a new django app has been released onto the public -- &lt;a href="http://github.com/paltman/django-logicaldelete/tree/master"&gt;django-logicaldelete&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;Check it out and let me know what you think!
&lt;/p&gt;
&lt;p&gt;Here is the &lt;a href="http://github.com/paltman/django-logicaldelete/blob/c902d033fc3b14ebbeb6927c2477e6985afb968b/README.md"&gt;README.md&lt;/a&gt; copied for your reading pleasure:
&lt;/p&gt;

&lt;h2&gt;Django Logical Delete&lt;/h2&gt;
&lt;p&gt;This is a small and simple app that I threw together to get some reuse out of 
   something I do in nearly every project and every model I create.  It's too easy
   for good data to get deleted and it be unrecoverable.  It's also too easy to
   fix this by overriding the model's delete() method and just flagging records
   as deleted and then leveraging Django's Managers to override default behavior
   so that logically deleted items are not returned in querysets.
&lt;/p&gt;
&lt;p&gt;There are two exceptions however, that I have found useful to this rule.
&lt;/p&gt;
&lt;ol&gt;
 &lt;li&gt;
     In the admin I like to see everything with an indicator of whether or not 
        it has been deleted, with the ability to filter down to just active records,
        (or deleted for that matter).
 &lt;/li&gt;

 &lt;li&gt;
     I still think it is a valid request when an item is fetched for by it's
        primary key value, that the object should return, even if it is marked as
        deleted.
 &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Using django-logicaldelete&lt;/h3&gt;
&lt;p&gt;Using the app is pretty simple:
&lt;/p&gt;
&lt;ol&gt;
 &lt;li&gt;
     Put the logicaldelete sub-folder in your Python Path.
 &lt;/li&gt;

 &lt;li&gt;
     Inherit from &lt;code&gt;logicaldelete.models.Model&lt;/code&gt; for all models that you wish to 
   share in this functionality.
 &lt;/li&gt;

 &lt;li&gt;
     Create and/or Register admins for each of these models using &lt;code&gt;logicaldelete.admin.ModelAdmin&lt;/code&gt;
 &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Additional&lt;/h2&gt;
&lt;p&gt;Logical deletes are handled by date stamping a &lt;code&gt;date_removed&lt;/code&gt; column.  In addition, a &lt;code&gt;date_created&lt;/code&gt; 
   and &lt;code&gt;date_modified&lt;/code&gt; columns will be populated as a convenience.
&lt;/p&gt;

&lt;h3&gt;Possible Extensions&lt;/h3&gt;
&lt;p&gt;You can easily subclass these two classes to provide generic and useful functionality
   to your models.  &lt;br /&gt;
&lt;/p&gt;

&lt;h4&gt;UUID Primary Key&lt;/h4&gt;
&lt;p&gt;I typically using UUID fields for my primary keys because they enable
   me to shard my tables if and when I need to, in addition, they provide an obfuscated 
   id to my data (people can't determine how many of a certain object I have in my database, 
   if I don't want them to know, but simply looking an an integer id in the URL).
&lt;/p&gt;

&lt;h4&gt;Sequence Field&lt;/h4&gt;
&lt;p&gt;Many times I find it useful to have an integer field on my models that allow for and explicitly
   controlled sequencing.  I normally implement this as a sort descending implementation where the
   data is sorted from high to low by sequence value.
&lt;/p&gt;
&lt;p&gt;In order to to implement this you'd subclass both the Model and ModelAdmin, where the Model 
   would be an obvious simple addition of an IntegerField, the ModelAdmin, would override &lt;code&gt;get_query_set&lt;/code&gt;,
   to do something like:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class SequencedModel(logicaldelete.models.Model):
    sequence = models.IntegerField()


class MyLogicalDeletedManager(logicaldelete.models.LogicalDeletedManager):
    def get_query_set(self):
        if self.model:
            qs = super(MyLogicalDeletedManager, self).get_query_set().filter(date_removed__isnull=True)
            if SequencedModel in inspect.getmro(self.model):
                qs = qs.order_by('-sequence')
            return qs
&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=1u-T2N1RWag:BGVWEMhou5k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=1u-T2N1RWag:BGVWEMhou5k:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=1u-T2N1RWag:BGVWEMhou5k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=1u-T2N1RWag:BGVWEMhou5k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=1u-T2N1RWag:BGVWEMhou5k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/1u-T2N1RWag" height="1" width="1"/&gt;</description><pubDate>Sun, 23 Aug 2009 13:46:02 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/aug/23/providing-logical-delete-support-in-django/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/aug/23/providing-logical-delete-support-in-django/</feedburner:origLink></item><item><title>White House Pulls Informant Email</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/FCQEAn5r0H8/</link><description>&lt;p&gt;The White House recently pulled the plug on &lt;a href="http://www.whitehouse.gov/blog/Facts-Are-Stubborn-Things/"&gt;the email address that citizen informants were asked to report contents of emails and casual conversations to that disagreed with the President's Healthcare agenda&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;In sending an email this morning to the address, I promptly received this notice:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;This is an automatically generated Delivery Status 
Notification

Delivery to the following recipient failed permanently:

    flag@whitehouse.gov

Technical details of permanent failure:
Google tried to deliver your message, but it was rejected by 
the recipient domain. We recommend contacting the other 
email provider for further information about the cause of 
this error. The error that the other server returned was: 
550 550 5.2.1 &amp;lt;flag@whitehouse.gov&amp;gt;... The email address you 
just sent a message to is no longer in service.
&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=FCQEAn5r0H8:BaoAoKolaJU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=FCQEAn5r0H8:BaoAoKolaJU:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=FCQEAn5r0H8:BaoAoKolaJU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=FCQEAn5r0H8:BaoAoKolaJU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=FCQEAn5r0H8:BaoAoKolaJU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/FCQEAn5r0H8" height="1" width="1"/&gt;</description><pubDate>Mon, 17 Aug 2009 09:43:12 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/aug/17/white-house-pulls-informant-email/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/aug/17/white-house-pulls-informant-email/</feedburner:origLink></item><item><title>Why I Created &amp;quot;Flag This Obama&amp;quot;</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/y79wq4KuGPY/</link><description>&lt;p&gt;I thought I should post and explain why I felt compelled to put up the &lt;a href="http://www.flagthisobama.com"&gt;Flag This Obama&lt;/a&gt; site.
&lt;/p&gt;
&lt;p&gt;For those that might have missed it, the White House published a blog entry, titled &lt;a href="http://www.whitehouse.gov/blog/Facts-Are-Stubborn-Things/"&gt;Facts are Stubborn Things&lt;/a&gt; on the official &lt;a href="http://www.whitehouse.gov/blog/"&gt;White House blog&lt;/a&gt; asking for people to inform on their fellow citizens if they said things that were not aligned with the Administration.
&lt;/p&gt;
&lt;p&gt;The exact phrasing: 
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;There is a lot of disinformation about health insurance 
   reform out there, spanning from control of personal 
   finances to end of life care.  These rumors often travel
   just below the surface via chain emails or through casual 
   conversation.  Since we can’t keep track of all of them 
   here at the White House, we’re asking for your help. If 
   you get an email or see something on the web about health
   insurance reform that seems fishy, send it to flag@whitehouse.gov.
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Read quickly, there may be little alarm due to the careful couching of this request, however, consider just what they are asking Americans to do.  The administration wants people to take emails or &amp;quot;casual conversation&amp;quot; and using the litmus test of &amp;quot;seems fishy&amp;quot;, forward the email or report the conversation by sending an email to a special address that the White House has set up to track these reports.  Reports about what people say.
&lt;/p&gt;
&lt;p&gt;Furthermore, in the post and in the videos, Linda Douglass, Communications Director for White House Health Reform Office, purports that we not read HR3200, or related bills, but rather listen to what the President is saying as she links other videos where President Obama is speaking about different aspects of healthcare reform.  She goes on to allude that anything that contradicts his statements are &amp;quot;disinformation&amp;quot; and should reported so that &amp;quot;they can track&amp;quot; them.
&lt;/p&gt;
&lt;p&gt;Well, a number of things that the President has said in the past, and shows every intention of pursuing via his public agenda, would put the US Constitution in disagreement with him. I don't consider the Constitution &amp;quot;disinformation&amp;quot;.  Therefore, following their wishes, I posted the text of our Constitution and sent and email to flag@whitehouse.gov reporting the site.  &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Despite Ms. Douglass' desire for Americans to just listen to President Obama and take him at his word, and despite some of our &lt;a href="http://www.cnsnews.com/public/Content/Article.aspx?rsrcid=50677"&gt;very own Congressmen&lt;/a&gt; &lt;a href="http://www.cnsnews.com/public/cnsnewstv/video.aspx?v=GduzuzqGqG"&gt;bragging about not reading or being able to understand the bills&lt;/a&gt; (but still supporting them nonetheless), I firmly believe it's our duty as American's to read and understand not only our Constitution, but also the laws that our representatives are writing and trying to pass.
&lt;/p&gt;
&lt;p&gt;It's not practical for us to read everything that Congress produces.  You have to pick your battles.  But pick something.  Learn about it.  Become a voice of reason in this insane world we are living in.  There is good reason our Founders set up our system of checks and balances and that the original public schools taught the Constitution as soon as children learned to read.  The only way to preserve liberty is for voting citizens to guard and protect our Constitution.
&lt;/p&gt;
&lt;p&gt;A republic only stands as long as her people are engaged and keep a suspicious eye on how their elected leaders actually lead.
&lt;/p&gt;
&lt;p&gt;At a breakneck speed, we are losing our country as we know it.
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.webcastr.com/videos/news/obama-explains-rush-for-health-care-overhaul.html"&gt;We are being told to rush through these bills&lt;/a&gt;.  &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;We are &lt;a href="http://republicans.oversight.house.gov/News/PRArticle.aspx?NewsID=625"&gt;being intimidated by the White House&lt;/a&gt; to not even have debate on these issues.  &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;We are not even considering what the Constitution has to say on the matter, a document that took us from a few scattered rebels in the late 1700s to the greatest country on earth in just over a hundred years. 
&lt;/p&gt;
&lt;p&gt;So, yes Mr. President, I disagree with you, but so does our Constitution.  &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;So does, the very bill (HR3200) that you are saying needs to be passed (yes, unlike members of congress, I have read it).
&lt;/p&gt;
&lt;p&gt;Mr. President, I call on you to read, respect, and obey our Constitution.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=y79wq4KuGPY:y0HZOSVN3dI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=y79wq4KuGPY:y0HZOSVN3dI:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=y79wq4KuGPY:y0HZOSVN3dI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=y79wq4KuGPY:y0HZOSVN3dI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=y79wq4KuGPY:y0HZOSVN3dI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/y79wq4KuGPY" height="1" width="1"/&gt;</description><pubDate>Thu, 06 Aug 2009 10:02:58 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/aug/06/why-i-created-flag-this-obama/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/aug/06/why-i-created-flag-this-obama/</feedburner:origLink></item><item><title>US Soldier Schools Senator McCaskill</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/8JmG2mKr2OY/</link><description>&lt;p&gt;I love this.
&lt;/p&gt;
&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/y98HxYbsdBM&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/y98HxYbsdBM&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=8JmG2mKr2OY:5l81hrxNJ9o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=8JmG2mKr2OY:5l81hrxNJ9o:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=8JmG2mKr2OY:5l81hrxNJ9o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=8JmG2mKr2OY:5l81hrxNJ9o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=8JmG2mKr2OY:5l81hrxNJ9o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/8JmG2mKr2OY" height="1" width="1"/&gt;</description><pubDate>Wed, 29 Jul 2009 16:23:57 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/jul/29/us-soldier-schools-senator-mccaskill/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/jul/29/us-soldier-schools-senator-mccaskill/</feedburner:origLink></item><item><title>Objective-C Rookie Mistake with NSArray</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/jW3BuYOBYfk/</link><description>&lt;p&gt;So, I am pretty engrossed in learning Objective-C and the Cocoa Framework, with a primary aim of joining the iPhone app craze.  I have 2 or 3 iPhone app ideas that I want to turn into reality and get released to the store, but first, I need to learn this new platform and language.
&lt;/p&gt;
&lt;p&gt;So far, I am very impressed with XCode and Interface Builder.  What you would pay for to develop in on Windows Machines (Visual Studio), Apple gives away for free as part of the Operating System.  How cool is that?!
&lt;/p&gt;
&lt;p&gt;I ran into my first debugging situation tonight where I couldn't figure out why my little sample/learning app was crashing.  I was getting a &lt;code&gt;EXC_BAD_ACCESS&lt;/code&gt; error message in the debugger on an &lt;code&gt;NSArray initWithObjects&lt;/code&gt; call.  It turns out one of the strings in my list was not prefixed by the &lt;code&gt;@&lt;/code&gt; symbol.
&lt;/p&gt;
&lt;p&gt;So, I had:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NSArray *array = [[NSArray alloc] initWithObjects: @&amp;quot;Patrick&amp;quot;, &amp;quot;Amy&amp;quot;, @&amp;quot;Joshua&amp;quot;, nil];
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When I should have had:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NSArray *array = [[NSArray alloc] initWithObjects: @&amp;quot;Patick&amp;quot;, @&amp;quot;Amy&amp;quot;, @&amp;quot;Joshua&amp;quot;, nil];
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;While the syntax is bit clunkier when primarily used to developing in Python, IDE and the depth and breadth of the Cocoa APIs are pretty insane.  I feel like I am going to more be gluing stuff together, rather than writing software.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=jW3BuYOBYfk:RUoq5TeWWfo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=jW3BuYOBYfk:RUoq5TeWWfo:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=jW3BuYOBYfk:RUoq5TeWWfo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=jW3BuYOBYfk:RUoq5TeWWfo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=jW3BuYOBYfk:RUoq5TeWWfo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/jW3BuYOBYfk" height="1" width="1"/&gt;</description><pubDate>Mon, 27 Jul 2009 23:30:42 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/jul/27/objective-c-rookie-mistake-with-nsarray/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/jul/27/objective-c-rookie-mistake-with-nsarray/</feedburner:origLink></item><item><title>pybrightcove v0.9 Released</title><link>http://feedproxy.google.com/~r/PatrickAltman/~3/fv3J85GCZMo/</link><description>&lt;p&gt;&lt;img src="http://img.skitch.com/20090531-qjy37qurjfq448f3wmn48fdx22.png" border="0" align="left" /&gt;Since my previous release (v0.1) of &lt;a href="http://studionow.github.com/pybrightcove/"&gt;pybrightcove&lt;/a&gt;, I have completely changed my approach and rewrote the library.
&lt;/p&gt;
&lt;p&gt;This was for a number of reasons, but primarily the direction I was heading was just plain ugly and clunky to use.  It required to much knowledge about how the underlying API worked in order to be able to use it.
&lt;/p&gt;
&lt;p&gt;Now you really only have to think about the objects you want to manipulate, namely a Video and a Playlist.  You can find examples of how to use it on the &lt;a href="http://wiki.github.com/studionow/pybrightcove"&gt;project wiki&lt;/a&gt;, but one quick one to show you how you would upload a video:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from pybrightcove import Video
video = Video(filename='yourvideo.mov', name='My Video', short_description='My description')
video.tags.append('tag1')
video.tags.append('tag2')
video.save()
print video.id  ## This is now populated with the Brightcove video id
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So, &lt;a href="http://github.com/studionow/pybrightcove/downloads"&gt;download v0.9&lt;/a&gt; today and let me know what you think.  Or better yet, &lt;a href="http://github.com/studionow/pybrightcove/tree/master"&gt;fork pybrightcove&lt;/a&gt; and help make it better.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=fv3J85GCZMo:EUkMWdRgjFo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=fv3J85GCZMo:EUkMWdRgjFo:2mJPEYqXBVI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=2mJPEYqXBVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=fv3J85GCZMo:EUkMWdRgjFo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?i=fv3J85GCZMo:EUkMWdRgjFo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PatrickAltman?a=fv3J85GCZMo:EUkMWdRgjFo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PatrickAltman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PatrickAltman/~4/fv3J85GCZMo" height="1" width="1"/&gt;</description><pubDate>Sun, 31 May 2009 14:46:02 -0600</pubDate><guid isPermaLink="false">http://paltman.com/2009/may/31/pybrightcove-v09-released/</guid><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><feedburner:origLink>http://paltman.com/2009/may/31/pybrightcove-v09-released/</feedburner:origLink></item></channel></rss>
