<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/2.0.5" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Matt Croydon::Postneo</title>
	<link>http://www.postneo.com</link>
	<description>what comes next?</description>
	<pubDate>Wed, 11 Feb 2009 22:06:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.5</generator>
	<language>en</language>
			<item>
		<title>Installing PyLucene on OSX 10.5</title>
		<link>http://www.postneo.com/2009/02/11/installing-pylucene-on-osx-105</link>
		<comments>http://www.postneo.com/2009/02/11/installing-pylucene-on-osx-105#comments</comments>
		<pubDate>Wed, 11 Feb 2009 22:04:29 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Java</category>

		<category>Apple</category>

		<category>Python</category>

		<guid isPermaLink="false">http://www.postneo.com/2009/02/11/installing-pylucene-on-osx-105</guid>
		<description><![CDATA[I was pleasantly surprised at my experience installing PyLucene this morning on my OSX 10.5 laptop.  The installation instructions worked perfectly without a hiccup.  This may not be impressive if you&#8217;ve never installed (or attempted to install) PyLucene before.
I tried once a year or so back and was unsuccessful.  The build process [...]]]></description>
			<content:encoded><![CDATA[<p>I was pleasantly surprised at my experience installing <a href="http://lucene.apache.org/pylucene/">PyLucene</a> this morning on my OSX 10.5 laptop.  The <a href="http://lucene.apache.org/pylucene/documentation/install.html">installation instructions</a> worked perfectly without a hiccup.  This may not be impressive if you&#8217;ve never installed (or attempted to install) PyLucene before.</p>
<p>I tried once a year or so back and was unsuccessful.  The build process just never worked for me and I couldn&#8217;t find a binary build that fit my OS + Python version + Java version combination.</p>
<p>Check out PyLucene:</p>
<pre>
$ svn co http://svn.apache.org/repos/asf/lucene/pylucene/trunk pylucene
</pre>
<p>Build JCC.  I install Python packages in my home directory and if you do so too you can omit sudo before the last command, otherwise leave it in:</p>
<pre>
$ cd pylucene/jcc
$ python setup.py build
$ sudo python setup.py install
</pre>
<p>Now we need to edit PyLucene&#8217;s Makefile to be configured for OSX and Python 2.5.  If you use a different setup than the one that ships with OSX 10.5, you&#8217;ll have to adjust these parameters to match your setup.</p>
<p>Edit the Makefile:</p>
<pre>
$ cd ..
$ nano Makefile
</pre>
<p>Uncomment the 5 lines Below the comment <tt># Mac OS X (Python 2.5, Java 1.5)</tt>.  If you have installed a different version of Python such as 2.6, there should be a combination that works for you.  Here&#8217;s what I uncommented:</p>
<pre>
# Mac OS X  (Python 2.5, Java 1.5)
PREFIX_PYTHON=/usr
ANT=ant
PYTHON=$(PREFIX_PYTHON)/bin/python
JCC=$(PYTHON) -m jcc --shared
NUM_FILES=2
</pre>
<p>Save the file, exit your editor, and build PyLucene:</p>
<pre>
$ make
</pre>
<p>If it doesn&#8217;t build properly check the settings in your Makefile.</p>
<p>After a successful build, install it (again you can omit sudo if you install Python packages locally and not system-wide):</p>
<pre>
$ sudo make install
</pre>
<p>Now verify that it&#8217;s been installed:</p>
<pre>
$ python
Python 2.5.1 (r251:54863, Nov 11 2008, 17:46:48)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&gt;&gt;&gt; import lucene
&gt;&gt;&gt;
</pre>
<p>If it imports without a problem you should have a working PyLucene library.  Rejoice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2009/02/11/installing-pylucene-on-osx-105/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sphinx Search with PostgreSQL</title>
		<link>http://www.postneo.com/2009/02/06/sphinx-search-with-postgresql</link>
		<comments>http://www.postneo.com/2009/02/06/sphinx-search-with-postgresql#comments</comments>
		<pubDate>Sat, 07 Feb 2009 04:03:31 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Open Source</category>

		<category>Python</category>

		<guid isPermaLink="false">http://www.postneo.com/2009/02/06/sphinx-search-with-postgresql</guid>
		<description><![CDATA[While I don&#8217;t plan on moving away from Apache Solr for my searching needs any time soon, Jeremy Zawodny&#8217;s post on Sphinx at craigslist made me want to take a closer look.  Sphinx works with MySQL, PostgreSQL, and XML input as data sources, but MySQL seems to be the best documented.  I&#8217;m a [...]]]></description>
			<content:encoded><![CDATA[<p>While I don&#8217;t plan on moving away from <a href="http://lucene.apache.org/solr/">Apache Solr</a> for my searching needs any time soon, Jeremy Zawodny&#8217;s <a href="http://jeremy.zawodny.com/blog/archives/010869.html">post on Sphinx at craigslist</a> made me want to take a closer look.  Sphinx works with MySQL, PostgreSQL, and XML input as data sources, but MySQL seems to be the best documented.  I&#8217;m a PostgreSQL guy so I ran in to a few hiccups along the way.  These instructions, based on <a href="http://www.sphinxsearch.com/wiki/doku.php?id=sphinx_on_debian_gnu_linux">instructions on the Sphinx wiki</a>, got me up and running on Ubuntu Server 8.10.</p>
<p>Install build toolchain:</p>
<pre>
$ sudo aptitude install build-essential checkinstall
</pre>
<p>Install Postgres:</p>
<pre>
$ sudo aptitude install postgresql postgresql-client \
postgresql-client-common postgresql-contrib \
postgresql-server-dev-8.3
</pre>
<p>Get Sphinx source:</p>
<pre>
$ wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz
$ tar xzvf sphinx-0.9.8.1.tar.gz
$ cd sphinx-0.9.8.1
</pre>
<p>Configure and make:</p>
<pre>
$ ./configure --without-mysql --with-pgsql \
--with-pgsql-includes=/usr/include/postgresql/ \
--with-pgsql-lib=/usr/lib/postgresql/8.3/lib/
$ make
</pre>
<p>Run checkinstall:</p>
<pre>
$ mkdir /usr/local/var
$ sudo checkinstall
</pre>
<p>Sphinx is now installed in <tt><span class="pre">/usr/local</span></tt>.  Check out <tt><span class="pre">/usr/local/etc/</span></tt> for configuration info.</p>
<p>Create something to index:</p>
<pre>
$ createdb -U postgres test
$ psql -U postgres test
test=# create table test (id integer primary key not null, text text);
test=# insert into test (text) values ('Hello, World!');
test=# insert into test (text) values ('This is a test.');
test=# insert into test (text) values ('I have another thing to test.');
test=# -- A user with a password is required.
test=# create user foo with password 'bar';
test=# alter table test owner to foo;
test=# \q
</pre>
<p>Configure sphinx (replace <tt><span class="pre">nano</span></tt> with your editor of choice):</p>
<pre>
$ cd /usr/local/etc
$ sudo cp sphinx-min.conf.dist sphinx.conf
$ sudo nano sphinx.conf
</pre>
<p>These values worked for me.  I left configuration for indexer and searchd unchanged:</p>
<pre>
source src1
{
  type = pgsql
  sql_host = localhost
  sql_user = foo
  sql_pass = bar
  sql_db = test
  sql_port = 5432
  sql_query = select id, text from test
  sql_query_info = SELECT * from test WHERE id=$id
}

index test1
{
  source = src1
  path = /var/data/test1
  docinfo = extern
  charset_type = utf-8
}
</pre>
<p>Reindex:</p>
<pre>
$ sudo mkdir /var/data
$ sudo indexer --all
</pre>
<p>Run searchd:</p>
<pre>
$ sudo searchd
</pre>
<p>Play:</p>
<pre>
$ search world

Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/usr/local/etc/sphinx.conf'...
index 'test1': query 'world ': returned 1 matches of 1 total in 0.000 sec

displaying matches:
1. document=1, weight=1

words:
1. 'world': 1 documents, 1 hits
</pre>
<p>Use Python:</p>
<pre>
cd sphinx-0.9.8.1/api
python
&gt;&gt;&gt; import sphinxapi, pprint
&gt;&gt;&gt; c = sphinxapi.SphinxClient()
&gt;&gt;&gt; q = c.Query('world')
&gt;&gt;&gt; pprint.pprint(q)
{'attrs': [],
 'error': '',
 'fields': ['text'],
 'matches': [{'attrs': {}, 'id': 1, 'weight': 1}],
 'status': 0,
 'time': '0.000',
 'total': 1,
 'total_found': 1,
 'warning': '',
 'words': [{'docs': 1, 'hits': 1, 'word': 'world'}]}
</pre>
<p>If you add new data and want to reindex, make sure you use the <tt><span class="pre">&#8211;rotate</span></tt> flag:</p>
<pre>
sudo indexer --rotate --all
</pre>
<p>This is an extremely quick and dirty installation designed to give me a sandbox<br />
to play with.  For production use you would want to run as a non-privileged user<br />
and would probably want to have an <tt><span class="pre">/etc/init.d</span></tt> script for searchd or run it<br />
behind <tt><span class="pre">supervised</span></tt>.  If you&#8217;re looking to experiment with Sphinx and MySQL,<br />
there should be plenty of documentation out there to get you started.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2009/02/06/sphinx-search-with-postgresql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kansas Primary 2008 recap</title>
		<link>http://www.postneo.com/2008/08/06/kansas-primary-2008-recap</link>
		<comments>http://www.postneo.com/2008/08/06/kansas-primary-2008-recap#comments</comments>
		<pubDate>Wed, 06 Aug 2008 10:31:51 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Python</category>

		<category>Django</category>

		<category>Journalism</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/08/06/kansas-primary-2008-recap</guid>
		<description><![CDATA[I&#8217;m winding down after a couple of very long days preparing for our coverage of the 2008 Kansas (and local) primaries.  As always it&#8217;s been an exhausting but rewarding time.  We&#8217;ve come a long way since the first election I wrote software for and was involved with back in 2006 (where election night [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m winding down after a couple of very long days preparing for our coverage of the <a href="http://www2.ljworld.com/news/politics/elections/2008/">2008 Kansas (and local) primaries</a>.  As always it&#8217;s been an exhausting but rewarding time.  We&#8217;ve come a long way since the first election I wrote software for and was involved with back in 2006 (where election night involved someone <a href="http://www.flickr.com/photos/postneo/203412799/">accessing an AS/400 terminal</a> and shouting numbers at me for entry).  Our election app has become a lot more sophisticated, our data import process more refined, and election night is a whole lot more fun and loads less stressful than it used to be.  I thought I&#8217;d go over some of the highlights while they&#8217;re still fresh in my mind.</p>
<p style="text-align: center"><a href="http://www.flickr.com/photos/postneo/2737469267/" title="Douglas County Comission 2nd District Democratic primary section by postneo, on Flickr"><img src="http://farm4.static.flickr.com/3294/2737469267_e6710440d4_m.jpg" width="240" height="167" alt="Douglas County Comission 2nd District Democratic primary section" /></a></p>
<p>Our election app is definitely a success story for both the benefits of structured data and incremental development.  Each time the app gets a little more sophisticated and a little smarter.  What once wasn&#8217;t used until the night of the election has become a key part of our election coverage both before and after the event.  For example, this year we had an overarching <a href="http://www2.ljworld.com/news/politics/elections/2008/">election section</a> and also sections for indivudual races, like <a href="http://www2.ljworld.com/news/politics/elections/2008/kansas/douglas_county/commission_2nd/primary/democratic/">this section for the Douglas County Commission 2nd district Democratic primary</a>.  These sections tie together our coverage of the individual races: Stories, photos and videos about the race, our <a href="http://www2.ljworld.com/elections/2008/aug/05/candidates/nancy_thellman/">candidate profiles</a>, any <a href="http://www2.ljworld.com/chats/2008/jul/24/ken_adkinson/">chats we&#8217;ve had with the candidates</a>, <a href="http://media.ljworld.com/pdf/2008/elections/ken_adkinson.pdf">campaign finance documents</a>, and <a href="http://www2.ljworld.com/candidateselectors/2008/douglas_county_commission_2nd_district/">candidate selectors</a>, an awesome app that has been around longer than I have that lets users see which candidates they most agree with.  On election night they&#8217;re smart enough to display results as they come in.</p>
<p style="text-align: center"><a href="http://www.flickr.com/photos/postneo/2736423765/" title="Election results start coming in by postneo, on Flickr"><img src="http://farm4.static.flickr.com/3020/2736423765_01df75eabd_m.jpg" width="234" height="240" alt="Election results start coming in" /></a> <a href="http://www.flickr.com/photos/postneo/2736479197/" title="Results rolling in by postneo, on Flickr"><img src="http://farm4.static.flickr.com/3138/2736479197_1bb691538d_m.jpg" width="240" height="202" alt="Results rolling in" /></a> <a href="http://www.flickr.com/photos/postneo/2737510304/" title="County commission races almost done by postneo, on Flickr"><img src="http://farm4.static.flickr.com/3174/2737510304_e8901d8b71_m.jpg" width="240" height="209" alt="County commission races almost done" /></a></p>
<p>This time around, the newsroom also used our tools to swap out which races were displayed on the homepage throughout the night.  We lead the night with results from Leavenworth County, since they were the first to report.  The newsroom spent the rest of the nice swapping in one or more race on the homepage as they saw fit.  This was a huge improvement over past elections where we chose ahead of time which races would be featured on the homepage.  It was great to see the newsroom exercise editorial control throughout the night without having to involve editing templates.</p>
<p style="text-align: center"><a href="http://www.flickr.com/photos/postneo/2737253494/" title="More results by postneo, on Flickr"><img src="http://farm4.static.flickr.com/3103/2737253494_4afacb53eb_m.jpg" width="240" height="180" alt="More results" /></a></p>
<p>On the television side, 6 News Lawrence took advantage of some new hardware and software to display election results prominently throughout the night.  I kept catching screenshots during commercial breaks, but the name of the race appeared on the left hand side of the screen with results paging through on the bottom of the screen.  The new hardware and software allowed them to use more screen real estate to provide better information to our viewers.  In years past we&#8217;ve had to <a href="http://www.jacobian.org/writing/2006/nov/08/breaking-news/">jump through some hoops</a> to get election results on the air, but this time was much easier.  We created a custom XML feed of election data that their new hardware/software ingested continuously and pulled results from.  As soon as results were in our database they were on the air.</p>
<p>The way that election results make their way in to our database has also changed for the better over the past few years.  We have developed a great relationship with the <a href="http://www.douglas-county.com/depts/cl/cl_home.aspx">Douglas County Clerk</a>, Jamie Shew and his awesome staff.  For several elections now they have provided us with timely access to detailed election results that allow us to provide <a href="http://www2.ljworld.com/elections/2008/aug/05/races/douglas_county_commission_2nd_district/">precinct-by-precinct results</a>.  It&#8217;s also great to be able to compare local results with statewide results in state races.  We get the data in a structured and well-documented fixed-width format and import it using a custom parser we wrote several elections ago.</p>
<p>State results flow in via a short script that uses <a href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a> to parse and import data from the <a href="http://www.kssos.org/ent/kssos_ent.html">Kansas Secretary of State site</a>.  That script ran every few minutes throughout the night and was updating results well after I went to bed.  In fact it&#8217;s running right now while we wait for the last few precincts in Hodgeman County to come in.  This time around we did enter results from a few races in Leavenworth and Jefferson counties by hand, but we&#8217;ll look to automate that in November.</p>
<p>As always, election night coverage was a team effort.  I&#8217;m honored to have played my part as programmer and import guru.  As always, it was great to watch <a href="http://mintchaos.com/">Christian Metts</a> take the data and make it both beautiful and meaningful in such a short amount of time.  Many thanks go out to the fine folks at Douglas County and all of the reporters, editors, and technical folk that made our coverage last night possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/08/06/kansas-primary-2008-recap/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DjangoCon!</title>
		<link>http://www.postneo.com/2008/08/01/djangocon</link>
		<comments>http://www.postneo.com/2008/08/01/djangocon#comments</comments>
		<pubDate>Fri, 01 Aug 2008 06:28:42 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Django</category>

		<category>Journalism</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/08/01/djangocon</guid>
		<description><![CDATA[I&#8217;m a little late to the announcement party, but I&#8217;ll be attending DjangoCon and sitting on a panel about Django in Journalism with Maura Chace and Matt Waite.  The panel will be moderated by our own Adrian Holovaty.
I think the panel will be pretty fantastic but I can&#8217;t help be just as terrified as [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a little late to the announcement party, but I&#8217;ll be attending <a href="http://djangocon.org/">DjangoCon</a> and sitting on a panel about Django in Journalism with <a href="http://www.paragiraffe.com/">Maura Chace</a> and <a href="http://www.mattwaite.com/">Matt Waite</a>.  The panel will be moderated by our own <a href="http://holovaty.com/blog/">Adrian Holovaty</a>.</p>
<p>I think the panel will be pretty fantastic but I can&#8217;t help be just as terrified as my fellow panelists.  I love that we&#8217;ll have both Journalist-programmers and Programmer-journalists on the panel, and I love that Django is so often the glue that brings the two together.</p>
<p>DjangoCon is going to be awesome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/08/01/djangocon/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Natalie Anne Croydon</title>
		<link>http://www.postneo.com/2008/06/01/natalie-anne-croydon</link>
		<comments>http://www.postneo.com/2008/06/01/natalie-anne-croydon#comments</comments>
		<pubDate>Sun, 01 Jun 2008 13:17:22 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Web Services</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/06/01/natalie-anne-croydon</guid>
		<description><![CDATA[
Last weekend, our first child, Natalie Anne Croydon was born.  I&#8217;ve been trying to keep up with Flickr photos and updated my twitter feed a lot during the labor and delivery process (what a geek!).  Thanks to everyone for their kind words and congratulations.
For more pictures, check my Flickr archive starting on May [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.flickr.com/photos/postneo/2525627861/" title="Passed out by postneo, on Flickr"><img src="http://farm3.static.flickr.com/2329/2525627861_4f06c3518d.jpg" width="500" height="375" alt="Passed out" /></a></p>
<p>Last weekend, our first child, Natalie Anne Croydon was born.  I&#8217;ve been trying to keep up with <a href="http://flickr.com/photos/postneo">Flickr photos</a> and updated my <a href="http://twitter.com/mc">twitter feed</a> a lot during the labor and delivery process (what a geek!).  Thanks to everyone for their kind words and congratulations.</p>
<p>For more pictures, check <a href="http://flickr.com/photos/postneo/archives/date-posted/2008/05/24/">my Flickr archive starting on May 24</a> or <a href="http://flickr.com/photos/postneo/tags/natalie">my photos tagged &#8220;Natalie&#8221;</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/06/01/natalie-anne-croydon/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Arduino: Transforming the DIY UAV Community</title>
		<link>http://www.postneo.com/2008/05/12/arduino-transforming-the-diy-uav-community</link>
		<comments>http://www.postneo.com/2008/05/12/arduino-transforming-the-diy-uav-community#comments</comments>
		<pubDate>Tue, 13 May 2008 01:32:30 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Open Source</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/05/12/arduino-transforming-the-diy-uav-community</guid>
		<description><![CDATA[It&#8217;s been pretty awesome watching the homebrew UAV community discover and embrace Arduino.  Back in January community leader Chris Anderson discovered and fell in love with Arduino.  Today he posted information and the board design for an Arduino-powered UAV platform.  Because everything is open, it&#8217;s very easy to combine functionality from other [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been pretty awesome watching the <a href="http://diydrones.ning.com/">homebrew UAV community</a> discover and embrace Arduino.  <a href="http://diydrones.ning.com/profiles/blog/show?id=705844%3ABlogPost%3A19556">Back in January</a> community leader Chris Anderson discovered and fell in love with <a href="http://arduino.cc">Arduino</a>.  Today <a href="http://diydrones.ning.com/profiles/blog/show?id=705844%3ABlogPost%3A35640">he posted information and the board design for an Arduino-powered UAV platform</a>.  Because everything is open, it&#8217;s very easy to combine functionality from other boards in order to reduce the cost:</p>
<p>
<blockquote>The decision to port the <a href="http://diydrones.com/profiles/blog/show?id=705844%3ABlogPost%3A731">Basic Stamp autopilot</a> to Arduino turned out to be an unexpected opportunity to make something really cool. I&#8217;ve taken Jordi&#8217;s <a href="http://diydrones.com/profiles/blog/show?id=705844%3ABlogPost%3A35313">open source RC multiplexer/failsafe board</a>, and mashed it up with an Arduino clone to create &#8220;ArduPilot&#8221;, perhaps the cheapest autopilot in the world. ($110! That&#8217;s one-third the price of <a href="http://paparazzi.enac.fr/wiki/index.php/Get_Hardware">Paparazzi</a>)</p></blockquote>
<p>As with their other projects, the UAV schematics, board design, and Arduino control software will be released before they&#8217;re done.  It&#8217;s quite awesome to realize just how cheap the Arduino-based autopilot is:</p>
<p>
<blockquote>That&#8217;s a $110 autopilot, thanks to the open source hardware. By comparison, the Basic Stamp version of this, with processor, development board and failsafe board, would run you $300, and it&#8217;s not as powerful</p></blockquote>
<p>I&#8217;ve been quite impressed by how quickly the Arduino autopilot has gotten off the ground (pun only slightly intended).  The decision to port the existing Basic Stamp code to Arduino was made <a href="http://diydrones.ning.com/profiles/blog/show?id=705844%3ABlogPost%3A34592">just over a week ago</a>.  While I haven&#8217;t seen the control code, it looks like the team are well on their way.</p>
<p>I love it when geek topics collide, and this is about as good as it gets.  I&#8217;ll be keeping a close eye on the ArduPilot, and I can&#8217;t wait to see it in the skies.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/05/12/arduino-transforming-the-diy-uav-community/feed/</wfw:commentRss>
		</item>
		<item>
		<title>This whole number reuse thing has gone too far</title>
		<link>http://www.postneo.com/2008/05/04/this-whole-number-reuse-thing-has-gone-too-far</link>
		<comments>http://www.postneo.com/2008/05/04/this-whole-number-reuse-thing-has-gone-too-far#comments</comments>
		<pubDate>Sun, 04 May 2008 10:17:08 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Mobile</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/05/04/this-whole-number-reuse-thing-has-gone-too-far</guid>
		<description><![CDATA[This madness needs to stop!
Espoo, Finland - Nokia today unveiled a trio of mobile devices that balance stunning and sophisticated looks with the latest in mobile functionality. All three devices, the Nokia 6600 fold, the Nokia 6600 slide and the Nokia 3600 slide present a smooth, minimalist design and an appealing array of easy-to-use features. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.nokia.com/A4136001?newsid=1213901">This madness needs to stop!</a></p>
<blockquote><p>Espoo, Finland - Nokia today unveiled a trio of mobile devices that balance stunning and sophisticated looks with the latest in mobile functionality. All three devices, the Nokia 6600 fold, the Nokia 6600 slide and the Nokia 3600 slide present a smooth, minimalist design and an appealing array of easy-to-use features. The devices range in price from 175 EUR to 275 EUR before taxes and subsidies and are expected to start shipping during the third quarter of 2008.</p>
</blockquote>
<p>I know that Nokia have a finite set of product names when we&#8217;re talking about 4 digit numbers.  Aside from the Nseries and Eseries and a handful of other products, Nokia are pretty keen on assigning 4 digit numbers as product names.  While often confusing, at least it avoids product names like RAZR or ENv.  I don&#8217;t quite get the naming of the 6600 fold and the 6600 slide though.  Either someone in Espoo has the attention span of a goldfish or they expect that S60 consumers do.</p>
<p>Us S60 owners are a pretty loyal and knowledgeable bunch.  We do our research and know our history.  I may be wrong, but I&#8217;d venture that a good number of S60 users could name a dozen or more S60 models from the <a href="http://en.wikipedia.org/wiki/Nokia_7650">7650</a> to the <a href="http://en.wikipedia.org/wiki/Nokia_N-Gage">N-Gage</a> to the <a href="http://en.wikipedia.org/wiki/Nokia_N95">N95</a>.  Surely a good chunk of us would rattle off the <a href="http://en.wikipedia.org/wiki/Nokia_6600">6600</a> in the process.  We might also remember the <a href="http://en.wikipedia.org/wiki/Nokia_3600">3600</a> as the awkward American cousin of the 3650.</p>
<p>You know, that business phone from 2003 that brought significant hardware and software upgrades to the table compared to the 7650 and the <a href="http://en.wikipedia.org/wiki/Nokia_3650">3650</a>.  I sure remember it as if it were yesterday.</p>
<p>Every once in awhile someone raises a stink about Nokia reusing a product number.  Usually it&#8217;s a product number from the 80&#8217;s or 90&#8217;s and the word &#8220;Classic&#8221; is attached to the new phone.  I&#8217;m OK with that.  I just think that it&#8217;s a little early to be reusing a product code from 2003 in a market segment of geeks and power users.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/05/04/this-whole-number-reuse-thing-has-gone-too-far/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Python for S60: back in the saddle</title>
		<link>http://www.postneo.com/2008/03/28/python-for-s60-back-in-the-saddle</link>
		<comments>http://www.postneo.com/2008/03/28/python-for-s60-back-in-the-saddle#comments</comments>
		<pubDate>Fri, 28 Mar 2008 12:09:39 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Python</category>

		<category>Mobile</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/03/28/python-for-s60-back-in-the-saddle</guid>
		<description><![CDATA[I had the opportunity to meet Jürgen Scheible and Ville Tuulos, authors of the Mobile Python book at PyCon a few weeks ago.  They graciously gave me a copy of their book, which is an absolutely fantastic guide to writing S60 apps in Python.  It seems like every time I look away from [...]]]></description>
			<content:encoded><![CDATA[<p>I had the opportunity to meet Jürgen Scheible and Ville Tuulos, authors of the <a href="http://www.mobilepythonbook.org/">Mobile Python</a> book at PyCon a few weeks ago.  They graciously gave me a copy of their book, which is an absolutely fantastic guide to writing S60 apps in Python.  It seems like every time I look away from <a href="http://wiki.opensource.nokia.com/projects/Python_for_S60">Python for S60</a> it gets better, and this time was no exception.  Everything is just a little more polished, a few more APIs are supported (yay sensor API!), and the community and learning materials available have grown tremendously.</p>
<p>While I didn&#8217;t get a chance to hang out too long during the sprints, I did pull together some code for a concept I&#8217;ve wanted to do for a long time: a limpet webcam that I can stick on something and watch it ride around the city.  Specifically I thought it would be cool to attach one to a city bus and upload pictures while tracing its movements.</p>
<p>So here&#8217;s my quick 19 line prototype that simply takes a picture using the camera API and uploads the saved photo using ftplib copied over from the Python 2.2.2 standard library.  It&#8217;s called <a href="http://postneo.com/projects/pys60/webcam.py.txt">webcam.py</a>.  I haven&#8217;t run it since PyCon, so <a href="http://postneo.com/projects/pys60/webcam.jpg">the most recent photo</a> is from the PyS60 intro session.</p>
<p>Working with PyS60 again was absolutely refreshing.  I write Python code (using <a href="http://www.djangoproject.com/">Django</a>) at work but writing code for a mobile device again got the creative juices flowing.  I&#8217;m trying to do more with less in my spare time, but I definitely need to make more time for PyS60 in my life.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/03/28/python-for-s60-back-in-the-saddle/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PyCon 2008</title>
		<link>http://www.postneo.com/2008/03/13/pycon-2008</link>
		<comments>http://www.postneo.com/2008/03/13/pycon-2008#comments</comments>
		<pubDate>Thu, 13 Mar 2008 11:31:56 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Python</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/03/13/pycon-2008</guid>
		<description><![CDATA[I&#8217;m headed out the door to PyCon 2008.  Yay!
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m headed out the door to <a href="http://us.pycon.org/2008/about/">PyCon 2008</a>.  Yay!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/03/13/pycon-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Covering Kansas Democratic Caucus Results</title>
		<link>http://www.postneo.com/2008/02/05/covering-kansas-democratic-caucus-results</link>
		<comments>http://www.postneo.com/2008/02/05/covering-kansas-democratic-caucus-results#comments</comments>
		<pubDate>Wed, 06 Feb 2008 01:19:06 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Projects</category>

		<category>Django</category>

		<category>Journalism</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/02/05/covering-kansas-democratic-caucus-results</guid>
		<description><![CDATA[I think we&#8217;re about ready for caucus results to start coming in.
We&#8217;re covering the Caucus results at LJWorld.com and on Twitter.
Turnout is extremely heavy.  So much so that they had to split one of the caucus sites in two because the venue was full.
Later&#8230;
How did we do it?
We gained access to the media results [...]]]></description>
			<content:encoded><![CDATA[<p>I think we&#8217;re about ready for caucus results to start coming in.</p>
<p>We&#8217;re covering the Caucus results at <a href="http://ljworld.com/">LJWorld.com</a> and <a href="http://twitter.com/ljworld">on Twitter</a>.</p>
<p>Turnout is extremely heavy.  So much so that they had to split one of the caucus sites in two because the venue was full.</p>
<p><em>Later&#8230;</em></p>
<p>How did we do it?</p>
<p>We gained access to the media results page from <a href="http://ksdp.org/">the Kansas Democratic Party</a> on Friday afternoon.  On Sunday night I started writing a scraper/importer using <a href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a> and rouging out the <a href="http://www.djangoproject.com/">Django</a> models to represent the caucus data.  I spent Monday refining the models, helper functions, and front-end hooks that our designers would need to visualize the data.  Monday night and in to Tuesday morning was spent finishing off the importer script, exploring <a href="http://code.google.com/apis/chart/">Google Charts</a>, and making sure that Ben and <a href="http://mintchaos.com/">Christian</a> had everything they needed.</p>
<p>After a few hours of sleep, most of the morning was spent testing everything out on our staging server, fixing bugs, and improving performance.  By early afternon Ben was wrapping up <a href="http://ktka.com/">KTKA</a> and Christian was still tweaking his design in Photoshop.  Somewhere between 1 and 2 p.m. he started coding it up and pretty soon we had our results page running on test data on the staging server.</p>
<p>While the designers were finishing up I turned my focus to the planned <a href="http://twitter.com/ljworld">Twitter feed</a>.  Thanks to some handy wrappers from <a href="http://www.b-list.org/">James</a>, I wrote a quick script that generated a short message based on the caucus results we had, compared it to the last version of the message, and <a href="http://twitter.com/ljworld">sent a post to Twitter</a> if the message had changed.</p>
<p style="text-align: center"><a href="http://twitter.com/ljworld"><img src="http://postneo.com/pix/lj_election_twitter.png" /></a></p>
<p>Once results started coming in, we activated <a href="http://www2.ljworld.com/elections/2008/feb/05/races/democratic_presidential_nomination/">our coverage</a>.  After fixing one quick bug, I&#8217;ve been spending most of the evening watching importers feed data in to our databases and watching the twitter script <a href="http://twitter.com/ljworld">send out updates</a>.  Because we&#8217;ve been scraping the <a href="http://www.ksdp.org/">Kansas Democratic Party</a> media results all night and showing them immediately, we&#8217;ve been picking up caucuses seconds after they&#8217;ve been reported and have been ahead of everything else I&#8217;ve looked at.</p>
<p style="text-align: center"><a href="http://www2.ljworld.com/elections/2008/feb/05/races/democratic_presidential_nomination/"><img src="http://postneo.com/pix/ljworld_caucus_results.png" /></a></p>
<p>Because we just recently finished moving our various Kansas Weekly papers to <a href="http://www.ellingtoncms.com/">Ellington</a> and a unified set of templates, it was quite trivial to include detailed election results on the websites for <a href="http://www.lansingcurrent.com/">The Lansing Current</a>, <a href="http://www2.baldwincity.com">Baldwin City Signal</a>, <a href="http://www2.basehorinfo.com">Basehor Sentinel</a>, <a href="http://www2.bonnersprings.com/">The Chieftain</a>, <a href="http://www2.desotoexplorer.com">The De Soto Explorer, <a href="http://www2.eudoranews.com">The Eudora News</a>, <a href="http://www.shawneedispatch.com">Shawnee Dispatch</a>, and <a href="http://www2.tonganoxiemirror.com">The Tonganoxie Mirror</a></p>
<p style="text-align: center"><a href="http://www2.basehorinfo.com/"><img src="http://postneo.com/pix/basehor_election_caucus.png" /></a></p>
<p>While there are definitely things we could have done better as a news organization (there always are), I&#8217;m quite pleased at what we&#8217;ve done tonight.  Our servers hummed along quite nicely all night, we got information to our audience as quickly as possible, and generally things went quite smoothly.  Many thanks to everyone involved.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/02/05/covering-kansas-democratic-caucus-results/feed/</wfw:commentRss>
		</item>
		<item>
		<title>We&#8217;re hiring!</title>
		<link>http://www.postneo.com/2008/01/22/were-hiring</link>
		<comments>http://www.postneo.com/2008/01/22/were-hiring#comments</comments>
		<pubDate>Tue, 22 Jan 2008 15:35:32 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Python</category>

		<category>Django</category>

		<category>Journalism</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/01/22/were-hiring</guid>
		<description><![CDATA[Wow, the Django job market is heating up.  I posted a job opening for both junior and senior-level Django developers on djangogigs just a few days ago, and it has already fallen off the front page.
So I&#8217;ll mention it again: We&#8217;re hiring!  We&#8217;re growing and we have several positions open at both the [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, the Django job market is heating up.  I <a href="http://djangogigs.com/gigs/63/">posted a job opening for both junior and senior-level Django developers on djangogigs</a> just a few days ago, and it has already fallen off the front page.</p>
<p>So I&#8217;ll mention it again: <a href="http://djangogigs.com/gigs/63/">We&#8217;re hiring!</a>  We&#8217;re growing and we have several positions open at both the junior and senior level.  We&#8217;d love to talk to you if you&#8217;ve been working with Django since back in the day when everything was a tuple.  We&#8217;d love to talk to you if you&#8217;re smart and talented but don&#8217;t have a lot of (or any) Django experience.</p>
<p>Definitely check out <a href="http://djangogigs.com/gigs/63/">the listing at djangogigs</a> for more, or feel free to <a href="http://www2.ljworld.com/staff/matt_croydon/contact/">drop me a line</a> if you&#8217;d like to know more.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/01/22/were-hiring/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google apps for your newsroom</title>
		<link>http://www.postneo.com/2008/01/07/google-apps-for-your-newsroom</link>
		<comments>http://www.postneo.com/2008/01/07/google-apps-for-your-newsroom#comments</comments>
		<pubDate>Mon, 07 Jan 2008 16:49:30 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Projects</category>

		<category>Journalism</category>

		<guid isPermaLink="false">http://www.postneo.com/2008/01/07/google-apps-for-your-newsroom</guid>
		<description><![CDATA[I like to think that I&#8217;m pretty good at recognizing trends.  One thing that I&#8217;ve been seeing a lot recently in my interactions with the newsroom is that we&#8217;re no longer exchanging Excel spreadsheets, Word files, and other binary blobs via email.  Instead we&#8217;re sending invites to spreadsheets and documents on Google docs, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/postneo/2174883915/" title="Google spreadsheets by postneo, on Flickr"><img src="http://farm3.static.flickr.com/2407/2174883915_210b5e4b84_m.jpg" width="240" height="202" alt="Google spreadsheets" style="float: right; margin: 5px;"/></a>I like to think that I&#8217;m pretty good at recognizing trends.  One thing that I&#8217;ve been seeing a lot recently in my interactions with the newsroom is that we&#8217;re no longer exchanging Excel spreadsheets, Word files, and other binary blobs via email.  Instead we&#8217;re sending invites to spreadsheets and documents on <a href="http://docs.google.com/">Google docs</a>, links to data visualization sites like <a href="http://www.swivel.com/">Swivel</a> and <a href="http://services.alphaworks.ibm.com/manyeyes/">ManyEyes</a>, and links to maps created with <a href="http://maps.google.com/support/bin/answer.py?answer=68480">Google MyMaps</a>.</p>
<p>Using these lightweight webapps has definitely increased productivity on several fronts.  While as much as we would love every FOIA request and data source to come in a digital format, we constantly see data projects start with a big old stack of paper.  Google spreadsheets has allowed us to parallelize and coordinate data entry in a way that just wasn&#8217;t possible before.  We can create multiple spreadsheets and have multiple web producers enter data in their copious spare time.  I did some initial late night data entry for <a href="http://www2.ljworld.com/transportation/air/">the KU flight project</a> (<a href="http://www.jacobian.org/">Jacob</a> and <a href="http://mintchaos.com/">Christian</a> rocked the data visualization house on that one), but we were able to take advantage of web producers to enter the vast majority of the data.</p>
<p><a href="http://www2.ljworld.com/transportation/air/"><img src="http://postneo.com/pix/ku_air_tn.png" style="float: left; margin: 5px;" /></a>Sometimes the data entry is manageable enough (or the timeline is tight enough) that the reporter or programer can handle it on their own.  In this case, it allows us to quickly turn quick spreadsheet-style data entry in to <a href="http://en.wikipedia.org/wiki/Comma-separated_values">CSV</a>, our data <em>lingua franca</em> for data exchange.  Once we have the data in CSV form we can <a href="http://www.swivel.com/graphs/show/24907642">visualize it with Swivel</a> or <a href="http://services.alphaworks.ibm.com/manyeyes/view/SQAAXKsOtha620k-eaqXK2-">play with it in ManyEyes</a>.  If all we&#8217;re looking for is a tabular listing of the data, we&#8217;ve written some tools that make that easy <a href="http://www2.ljworld.com/data/cost_per_win/">and look good too</a>.  On larger projects, CSV is often the first step to importing the data and mapping it to <a href="http://www.djangoproject.com/">Django</a> objects for further visualization.</p>
<p>Awesome webapps that increase productivity aren&#8217;t limited to things that resemble spreadsheets from a distance.  A few weeks back we had a reporter use Google&#8217;s awesome <a href="http://maps.google.com/support/bin/answer.py?answer=68480">MyMaps interface</a> to create a map of places to enjoy and avoid while traveling from Lawrence, KS to Miami, FL for the orange bowl.  We pasted the <a href="http://maps.google.com/maps/ms?ie=UTF8&#038;hl=en&#038;t=h&#038;msa=0&#038;output=nl&#038;msid=104299703744383194632.0004424777617166acd21">KML link</a> in to our <a href="http://www.ellingtoncms.com/">Ellington</a> map admin and instantly had <a href="http://www2.ljworld.com/maps/special/miami_here_we_come/">an interactive map</a> on our site.  A little custom template work completed the project quite quickly.</p>
<p>It all boils down to apps that facilitate collaboration, increase productivity, and foster data flow.  Sometimes the best app for the job sits on the desktop (or laptop).  Increasingly, I&#8217;ve found that those apps live online&mdash;accessable anywhere, anytime.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2008/01/07/google-apps-for-your-newsroom/feed/</wfw:commentRss>
		</item>
		<item>
		<title>2008 Digital Edge Award Finalists</title>
		<link>http://www.postneo.com/2007/12/20/2008-digital-edge-award-finalists</link>
		<comments>http://www.postneo.com/2007/12/20/2008-digital-edge-award-finalists#comments</comments>
		<pubDate>Thu, 20 Dec 2007 12:42:15 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Django</category>

		<category>Journalism</category>

		<guid isPermaLink="false">http://www.postneo.com/2007/12/20/2008-digital-edge-award-finalists</guid>
		<description><![CDATA[The 2008 DIgital Edge Award finalists were just announced, and I&#8217;m excited to see several World Company sites and projects on there as well as a couple of sites running Ellington and even the absolutely awesome Django-powered PolitiFact.com.
At work we don&#8217;t do what we do for awards.  We do it to serve our readers, [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.naa.org/blog/digitaledge/1/2007/12/Digital-Edge-Award-Finalists.cfm">2008 DIgital Edge Award finalists</a> were just announced, and I&#8217;m excited to see several World Company sites and projects on there as well as a couple of sites running <a href="http://www.ellingtoncms.com/">Ellington</a> and even the absolutely awesome Django-powered <a href="http://www.politifact.com/">PolitiFact.com</a>.</p>
<p>At work we don&#8217;t do what we do for awards.  We do it to serve our readers, tell a story, get information out there, and do it as best we can.  At the same time even being nominated as finalists is quite an honor, and evokes warm fuzzy feelings in this programmer.</p>
<p>Here are the various World Company projects and sites that were nominated (in the less than 75,000 circulation category):</p>
<ul>
<li>Most Innovative Multimedia Storytelling: <a href="http://www2.ljworld.com/news/24_hours_in_lawrence/2007/may/">24 Hours in Lawrence</a> (<a href="http://www2.ljworld.com/">LJWorld.com</a>)</li>
<li>Best Local Guide or Entertainment Site: <a href="http://www.lawrence.com/">Lawrence.com</a></li>
<li>Best Design and Site Architecture: <a href="http://www2.ljworld.com">LJWorld.com</a></li>
<li>Best Overall News Site: <a href="http://www2.ljworld.com">LJWorld.com</a></li>
</ul>
<p>Not too shabby for a little media company in Kansas.  I&#8217;m particularly excited about the <a href="http://www2.ljworld.com">LJWorld.com</a> nominations since it hasn&#8217;t been too long since we re-designed and re-launched the site with a lot of new functionality.  Scanning the finalists I also see a couple of other sites running <a href="http://www.ellingtoncms.com/">Ellington</a> as well as several special projects by those sites.</p>
<p>As someone who writes software for news organizations for a living I&#8217;m definitely going to take some time this morning to take a look at the other finalists.  I&#8217;m particularly excited to check out projects from names that I&#8217;m not familiar with.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2007/12/20/2008-digital-edge-award-finalists/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web Browser for S60: If only I remembered the shortcut key</title>
		<link>http://www.postneo.com/2007/11/22/web-browser-for-s60-if-only-i-remembered-the-shortcut-key</link>
		<comments>http://www.postneo.com/2007/11/22/web-browser-for-s60-if-only-i-remembered-the-shortcut-key#comments</comments>
		<pubDate>Fri, 23 Nov 2007 04:19:57 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Mobile</category>

		<guid isPermaLink="false">http://www.postneo.com/2007/11/22/web-browser-for-s60-if-only-i-remembered-the-shortcut-key</guid>
		<description><![CDATA[I was reading a post on the (unofficial) Nokia Blog detailing the shortcut keys for the S60 Web Browser.  I was instantly reminded of my own frustration and how often I had looked at that page of the user manual.
Web Browser for S60 is easily the most powerful app that ships with new S60 [...]]]></description>
			<content:encoded><![CDATA[<p>I was reading <a href="http://thenokiablog.com/2007/11/22/s60-web-browser-shortcut-keys/">a post on the (unofficial) Nokia Blog detailing the shortcut keys for the S60 Web Browser</a>.  I was instantly reminded of my own frustration and how often I had looked at that page of the user manual.</p>
<p><a href="http://www.s60.com/business/productinfo/builtinapplications/webrowser/">Web Browser for S60</a> is easily the most powerful app that ships with new S60 devices.  It renders real websites well and quickly using <a href="http://webkit.org/">my favorite rendering engine</a>.  It packs more features, options, and actions on one screen than any other app that I can think of.</p>
<p>It comes at a price though.  Aside from the two softkeys there aren&#8217;t any keys on the device marked specifically for browser actions once you&#8217;re in the app.  Even better, I usually use the browser in full screen mode to maximize screen real estate, so those two softkeys are now gone.</p>
<p>It&#8217;s still an amazing app, I just distinctly recall the constant remembering and forgetting and looking up of shortcut keys as a big pain point in my enjoyment of the S60 browser.  It&#8217;s something that I&#8217;d love to see addressed, but I&#8217;m not sure of an easy way to do so without resorting to touch interfaces or keys (physical or virtual) that change labels given different contexts.</p>
<p>Mobile browser shortcuts are a lot easier on a device like the <a href="http://www.nseries.com/products/n800/">N800</a> or <a href="http://www.nseries.com/products/n800/#l=products,n810">N810</a> that can dedicate keys to it full time.  Or you can go the no-keys approach that seems to be working well for the iPhone.</p>
<p>I know that those smart Finns will figure it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2007/11/22/web-browser-for-s60-if-only-i-remembered-the-shortcut-key/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kansas covered by OpenStreetMap!</title>
		<link>http://www.postneo.com/2007/11/17/kansas-covered-by-openstreetmap</link>
		<comments>http://www.postneo.com/2007/11/17/kansas-covered-by-openstreetmap#comments</comments>
		<pubDate>Sat, 17 Nov 2007 22:19:38 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Web Services</category>

		<category>Open Source</category>

		<guid isPermaLink="false">http://www.postneo.com/2007/11/17/kansas-getting-covered-by-openstreetmap</guid>
		<description><![CDATA[I was checking up on the TIGER/Line import to OpenStreetMaps earlier today and I was pleased to see that Kansas is already partially processed!  I had emailed Dave the other day and he had queued Kansas up, but I was pleasantly suprised to see it partially processed already.  Douglas County is already completely [...]]]></description>
			<content:encoded><![CDATA[<p>I was checking up on <a href="http://dev.openstreetmap.org/~daveh/tiger/stats.html">the TIGER/Line import to OpenStreetMaps</a> earlier today and I was pleased to see that Kansas is already partially processed!  I had emailed <a href="http://sr71.net/">Dave</a> the other day and he had queued Kansas up, but I was pleasantly suprised to see it partially processed already.  Douglas County is already completely imported and <a href="http://wiki.openstreetmap.org/index.php/Tiles@home">Tiles@Home</a> is currently rendering it up.  Parts of Lawrence have already been rendered and cam be seen using the osmarender layer.  Here&#8217;s <a href="http://openstreetmap.org/?lat=38.94686&#038;lon=-95.24549&#038;zoom=15&#038;layers=0BT">23rd and Iowa</a>:</p>
<p style="text-align: center"><a href="http://www.flickr.com/photos/postneo/2040886671/" title="Lawrence in OpenStreetMap! by postneo, on Flickr"><img src="http://farm3.static.flickr.com/2126/2040886671_891e01ac8d.jpg" width="500" height="427" alt="Lawrence in OpenStreetMap!" /></a></p>
<p><a href="http://highearthorbit.com/">Andrew Turner</a> had turned me on to OpenStreetMap over beers at Free State and at <a href="http://www.gis.ku.edu/gisday/2007/">GIS Day @ KU</a> even though I&#8217;ve been reading about it for some time now.  So far it seems like an amazing community and I&#8217;ve been enjoying digging in to <a href="http://wiki.openstreetmap.org/index.php/OSM_Protocol_Version_0.5">the API and XML format</a> and various open source tools like <a href="http://wiki.openstreetmap.org/index.php/Osmarender">osmarender</a>, <a href="http://wiki.openstreetmap.org/index.php/JOSM">JSOM</a>, and <a href="http://www.openlayers.org/">OpenLayers</a>.</p>
<p>After getting psyched up at GIS Day I&#8217;ve been playing with some other geo tools, but more on that later.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2007/11/17/kansas-covered-by-openstreetmap/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Maemo blows me away again</title>
		<link>http://www.postneo.com/2007/10/17/maemo-blows-me-away-again</link>
		<comments>http://www.postneo.com/2007/10/17/maemo-blows-me-away-again#comments</comments>
		<pubDate>Wed, 17 Oct 2007 22:33:50 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Open Source</category>

		<category>Linux</category>

		<category>Mobile</category>

		<guid isPermaLink="false">http://www.postneo.com/2007/10/17/maemo-blows-me-away-again</guid>
		<description><![CDATA[
My wife and I just bought a house and I&#8217;ve realized that there isn&#8217;t any room in the budget for major gadget purposes, so I&#8217;ve been trying not to get too excited about things coming down the road.  It&#8217;s not suprising that I&#8217;ve been following the recently announced Nokia N810 Internet Tablet in a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://postneo.com/pix/n810.jpg" alt="Nokia N810 Internet Tablet" /></p>
<p>My wife and I just bought a house and I&#8217;ve realized that there isn&#8217;t any room in the budget for major gadget purposes, so I&#8217;ve been trying not to get too excited about things coming down the road.  It&#8217;s not suprising that I&#8217;ve been following the <a href="http://www.nokia.com/A4136001?newsid=1160660">recently announced Nokia N810</a> Internet Tablet in a much more detached manner than usual.</p>
<p>That is until I saw <a href="http://jaaksi.blogspot.com/2007/10/nokia-n810-announced.html">Ari Jaaksi holding a prototype in his hand</a>.  Holy crap that thing is significantly smaller than the N800 and packs quite a punch.  The slide-out keyboard is killer, GPS is a no-brainer these days and is included, the browser is Mozilla-based, the UI got a refresh&#8230; I could go on for days.</p>
<p>The other thing I really like about the new tablet is that the Maemo platform is moving to be even more open than it was before (which was about as open as the lawyers at Nokia would allow).  The quite good but closed source Opera web browser has been replaced by one that is Mozilla-based.  This is yet another major component that is now open instead of closed.  The major closed-source components (if I&#8217;m remembering correctly) are now limited to the DSP, various binary drivers that Nokia licenses directly, and the handwriting recognition software.  That&#8217;s definitely a smaller list than it was before, and I applaud Nokia&#8217;s efforts in opening up as much as possible.  It&#8217;s also worth noting that the <a href="https://wiki.ubuntu.com/MobileAndEmbedded">Ubuntu Mobile</a> project is basing a lot of its work on the work that Nokia has done with Maemo (most notable Matchbox and the Hildon UI).</p>
<p>So yeah, I&#8217;m now paying much closer attention to this new device that I was doing my best to ignore.  Job well done.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2007/10/17/maemo-blows-me-away-again/feed/</wfw:commentRss>
		</item>
		<item>
		<title>You had me until I saw the stylus</title>
		<link>http://www.postneo.com/2007/10/16/you-had-me-until-i-saw-the-stylus</link>
		<comments>http://www.postneo.com/2007/10/16/you-had-me-until-i-saw-the-stylus#comments</comments>
		<pubDate>Tue, 16 Oct 2007 22:15:08 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Mobile</category>

		<guid isPermaLink="false">http://www.postneo.com/2007/10/16/you-had-me-until-i-saw-the-stylus</guid>
		<description><![CDATA[I got pretty excited when Rafe posted a video about S60 touch on allaboutsymbian.  I&#8217;ve been using S60 since the 3650 days and continue to love it, despite its quirks and shortcomings.  There have been rumours of touch capabilities for S60 for years now, long before the announcement and shipping of the iPhone. [...]]]></description>
			<content:encoded><![CDATA[<p>I got pretty excited when <a href="http://www.allaboutsymbian.com/news/item/6089_S60_Touch_Interface_Launched.php">Rafe posted a video about S60 touch on allaboutsymbian</a>.  I&#8217;ve been using S60 since the 3650 days and continue to love it, despite its quirks and shortcomings.  There have been rumours of touch capabilities for S60 for years now, long before the announcement and shipping of the iPhone.  I&#8217;m also pretty sure that Nokia have been working on S60 touch capabilities for some time now (pre-iPhone) too.</p>
<p>Everything was going great: the video showed a nice N-Series-style phone with a big touchable screen doing things that you&#8217;d expect an N-Series phone with a big touchable screen to do.  And then about two minutes in they lost me.  That&#8217;s when they showed the S60 touch interface being used with a stylus.</p>
<p>Come on Symbian.  It&#8217;s not the 90&#8217;s anymore.  My Palm III rocked because of its stylus and glorious grey screen, but that was almost a decade ago.  Now that the iPhone has launched, there&#8217;s a certain expectation level for new mobile UIs.</p>
<p>Touch is one of those expectations.  Having to use a stylus is not.</p>
<p>It&#8217;s also interesting to see this latest battle in the one-handed vs. two-handed war play itself out.  It has always struck me that there is a split between these two factions within Nokia (and by extension within Symbian) but the public rarely sees it.  I tend to lean toward the one-handed side myself but do see the merits that some two-handed devices have to offer from time to tim.  I have both a 9290 and an N800 but the bulk of my mobile purchases have been one-handed devices.</p>
<p>I also think that S60&#8217;s one-handedness is one of the reasons that S60-based devices have been so successful.  <a href="http://www.nokia.com/A4162334"> Nokia sold approximately 1.5 million N95&#8217;s in Q2 2007</a>.  Compare those numbers with a flagship device like a high end two-handed UIQ phone and I&#8217;ll bet that the two-handed numbers are significantly lower.  Once you start including the entire one-handed range of Symbian devices, you have a force to be reckoned with.</p>
<p>I&#8217;m hoping that showing the stylus was meant to demonstrate that Symbian <em>can</em> support a stylus, not that most or many devices will.  I&#8217;m encouraged a bit since S60 has recently taken on QWERTY capabilities and it makes sense to tout its versatility from single-handed to touch to stylus to QWERTY.
<p>We&#8217;re still at <a href="http://www.s60.com/business/newsevents/pressreleases/?action=latestNews&#038;pbId=&#038;newsId=386&#038;c_id=10&#038;yid=-1&#038;mid=-1&#038;latest=1">the press release stage</a> not the technical documentation stage, so there&#8217;s a lot of room for change.  Lots of things mentioned in the press release strike me as good things: tactile feedback, backwards compatibility, in-browser flash support and a continuation of S60&#8217;s various sensor mechanisms.</p>
<p>But Symbian, here&#8217;s a bit of advice for you: downplay that stylus!  Nobody wants to see it and it totally kills the mood when you use it on an otherwise sleek and sexy device.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2007/10/16/you-had-me-until-i-saw-the-stylus/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Goodbye Business 2.0</title>
		<link>http://www.postneo.com/2007/10/02/goodbye-business-20</link>
		<comments>http://www.postneo.com/2007/10/02/goodbye-business-20#comments</comments>
		<pubDate>Wed, 03 Oct 2007 01:44:34 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Web Services</category>

		<guid isPermaLink="false">http://www.postneo.com/2007/10/02/goodbye-business-20</guid>
		<description><![CDATA[
I got my last issue of Business 2.0 in the mail today.
As predicted they&#8217;ve offered to send me one month of Fortune for every two months of my remaining subscription.  I&#8217;ve been offered &#8220;equivalent&#8221; subscriptions for cancelled publications in the past, but never at a 1:2 ratio.
I might grab a copy of Fortune from [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.flickr.com/photos/postneo/1472812083/" title="Photo Sharing"><img src="http://farm2.static.flickr.com/1046/1472812083_0ee2a7cdef.jpg" width="500" height="375" alt="Goodbye, friend." /></a></p>
<p>I got my last issue of <a href="http://money.cnn.com/magazines/business2/">Business 2.0</a> in the mail today.</p>
<p>As predicted they&#8217;ve offered to send me one month of Fortune for every two months of my remaining subscription.  I&#8217;ve been offered &#8220;equivalent&#8221; subscriptions for cancelled publications in the past, but never at a 1:2 ratio.</p>
<p>I might grab a copy of Fortune from the newstand to see if it&#8217;s worth it, but I feel like I get enough standard business news from <a href="http://www.marketplace.org/">Marketplace</a> and various sources in my feed aggregator.  Unless Fortune knocks my socks off I&#8217;ll be asking for a refund.  It doesn&#8217;t help that I&#8217;m already unhappy with Fortune/CNN Money for killing my beloved publication.</p>
<p>Goodbye b2.  You will be missed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2007/10/02/goodbye-business-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Newton 2.0?</title>
		<link>http://www.postneo.com/2007/10/01/newton-20</link>
		<comments>http://www.postneo.com/2007/10/01/newton-20#comments</comments>
		<pubDate>Mon, 01 Oct 2007 12:51:21 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Apple</category>

		<category>Mobile</category>

		<guid isPermaLink="false">http://www.postneo.com/2007/10/01/newton-20</guid>
		<description><![CDATA[Every time I refresh my feed reader and see a new slick third-party app for the iPhone, I wonder to myself if a few years down the road we&#8217;re going to be talking about pre-1.1.1 iPhones like we talk about Newton&#8217;s today.  Third party apps and unlocked iPhones are essentially a dead end street [...]]]></description>
			<content:encoded><![CDATA[<p>Every time I refresh my feed reader and see a new slick third-party app for the iPhone, I wonder to myself if a few years down the road we&#8217;re going to be talking about pre-1.1.1 iPhones like we talk about Newton&#8217;s today.  Third party apps and unlocked iPhones are essentially a dead end street unless someone figures out how to work around it.</p>
<p>Of course 1.1.1 might have also started a cold war battle between Apple and hackers that sounds almost exactly like the moves that Sony pulled on the PSP.  The latest move is very different than the Laissez-faire attitude Apple has taken toward hacking the Apple TV and the early iPhone.  I never thought I&#8217;d see the day that Apple cribbed something from Sony&#8217;s playbook.</p>
<p>Perhaps it&#8217;s the difference between an indie/niche product and something mainstream like the iPhone.  Perhaps it&#8217;s the added pressure of the carriers wanting super-locked down devices on their networks.  (I doubt that though.  Just grab a Symbian device and do with it as you please.)  Perhaps it&#8217;s Apple realizing that it&#8217;s big enough that it can do as it pleases.</p>
<p>Then again, maybe they&#8217;re biding their time while they polish the official non-web-2.0 SDK.  We can all dream, can&#8217;t we?</p>
<p><em>Pull up a chair and bring it close to the fire.  Let me tell you about the golden age of the iPhone&#8230;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2007/10/01/newton-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Maps GeoXml crash course</title>
		<link>http://www.postneo.com/2007/09/10/google-maps-geoxml-crash-course</link>
		<comments>http://www.postneo.com/2007/09/10/google-maps-geoxml-crash-course#comments</comments>
		<pubDate>Tue, 11 Sep 2007 03:21:26 +0000</pubDate>
		<dc:creator>Matt Croydon</dc:creator>
		
		<category>Web Services</category>

		<category>Journalism</category>

		<guid isPermaLink="false">http://www.postneo.com/2007/09/10/google-maps-geoxml-crash-course</guid>
		<description><![CDATA[Over the weekend I added KML/GeoRSS data loading via GGeoXml to some mapping software for work.  I ran in to a couple of gotchas and a couple of things that I thought were really interesting, so I thought I&#8217;d share.
Getting started
GGeoXml and particularly clickable polylines are relatively new features, so we need to specify [...]]]></description>
			<content:encoded><![CDATA[<p>Over the weekend I added KML/GeoRSS data loading via <a href="http://www.google.com/apis/maps/documentation/reference.html#GGeoXml">GGeoXml</a> to some mapping software for work.  I ran in to a couple of gotchas and a couple of things that I thought were really interesting, so I thought I&#8217;d share.</p>
<h4>Getting started</h4>
<p>GGeoXml and particularly clickable polylines are relatively new features, so we need to specify that we want to use beta features when we grab our google maps code:</p>
<p><code>&lt;script src="http://maps.google.com/maps?file=api&amp;v=2.x&amp;key=your_key_here" type="text/javascript"&gt;&lt;/script&gt;</code></p>
<p>The key here is <code>v=2.x</code> which specifies that we want some 2.x or somewhat bleeding edge features.  Now that we&#8217;ve got that loaded up, we&#8217;ll want to define a couple of variables:</p>
<pre><code>var map;
var geoXml;</code></pre>
<p>This set up two global variables that we&#8217;ll be using.  While I&#8217;m not a big fan of polluting global namespaces, this will allow me to play with these variables via <a href="http://www.getfirebug.com/">Firebug</a> once the page has loaded.  For non-sample production code you&#8217;ll want to properly namespace all of your work.  Next we&#8217;ll grab some data using <a href="http://www.google.com/apis/maps/documentation/reference.html#GGeoXml">GGeoXml</a>:
<p><code>geoXml = new GGeoXml("http://example.com/path/to/data.kml");</code></p>
<p>This will grab data from the XML file.  In my case it&#8217;s <a href="http://maps.google.com/maps/ms?ie=UTF8&#038;hl=en&#038;msa=0&#038;msid=112103399286848891250.00000112ee00b640f575d&#038;z=10&#038;om=1">a list of things to do in and around Kansas City</a>.  Now that we have data in hand, let&#8217;s create a map and add this data as an overlay:</p>
<pre><code>if (GBrowserIsCompatible()) {
  map = new GMap2(document.getElementById("map_canvas"));
  map.setCenter(new GLatLng(38.960543, -95.254383), 9);
  map.addControl(new GLargeMapControl());
  map.addControl(new GLargeMapControl());
  map.addOverlay(geoXml);
} </code></pre>
<p>This should be pretty familiar if you&#8217;ve ever worked with the Google Maps API.  We&#8217;re creating a new map using the div <code>map_canvas</code> in the document.  Then we set the center of the map and add a few controls.  Once we&#8217;re done with that, we&#8217;re going to add the geoXml that we loaded via KML to the map.  <a href="http://postneo.com/maps/kc_basics.html">Here&#8217;s the complete basic example</a>:</p>
<p style="text-align: center"><a href="http://postneo.com/maps/kc_basics.html"><img src="http://postneo.com/maps/kc_basics.png" alt="KC Basics" /></a></p>
<h4>Let Google do the hard stuff</h4>
<p>You&#8217;ll notice that the basic map is centered manually and doesn&#8217;t really fill the whole viewport.  <code>GGeoXml</code> has finished running, we can query it for useful information.  For example, I can ask what its default center is from Firebug:</p>
<pre><code>>>> geoXml.getDefaultCenter();
(39.076937, -94.601867) Uk=39.076937 La=-94.601867 x=-94.601867 y=39.076937</code></pre>
<p>Knowing that I could then set the center of the map as follows:</p>
<p><code>map.setCenter(geoXml.getDefaultCenter());</code></p>
<p>While this handles setting the center correctly, it doesn&#8217;t help me figure out what zoom level to set.  Luckily there is another method on <code>GGeoXml</code> objects: <code>gotoDefaultViewport(map)</code>.  I can then call the following and have Google do all the hard work of figuring out what center and zoom to use to make sure all of the KML/GeoRSS content fits within the viewport:</p>
<p><code>geoXml.gotoDefaultViewport(map);</code></p>
<p>This allows us to let Google create bounding boxes, find centers and zoom levels, which while interesting exercises aren&#8217;t fun to do on a daily basis.  There&#8217;s one gotcha here though: you can&#8217;t get information about a <code>GGeoXml</code> instance until it&#8217;s done loading.</p>
<h4>Are we there yet?</h4>
<p>When we call <code>GGeoXml</code>, we can optionally provide a callback function that will be called as soon as <code>GGeoXml</code> is done doing its thing and we can access it.  First let&#8217;s create a function that centers and zooms so that the data is contained nicely within the viewport:</p>
<pre><code>var geoCallback = function()
{
  geoXml.gotoDefaultViewport(map);
}</code></pre>
<p>Next we have to modify our call to <code>GGeoXml</code> to include the callback:</p>
<p><code>geoXml = new GGeoXml("http://example.com/path/to/data.kml", geoCallback);</code></p>
<p><a href="http://postneo.com/maps/kc.html">Here&#8217;s the final code that includes the callback</a>:</p>
<p style="text-align: center"><a href="http://postneo.com/maps/kc.html"><img src="http://postneo.com/maps/kc.png" alt="KC Final" /></a></p>
<p>I hope that illustrates how much can be done with very little code.  Definitely take advantage of the rich map annotating capabilities that Google&#8217;s My Maps offers and don&#8217;t be shy about including them in maps on your own site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.postneo.com/2007/09/10/google-maps-geoxml-crash-course/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
