<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>lucasjosh.com &#187; Development</title>
	<atom:link href="http://lucasjosh.com/blog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://lucasjosh.com/blog</link>
	<description></description>
	<lastBuildDate>Sat, 21 Jan 2012 00:51:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Using Solr&#8217;s AbstractSolrTestCase</title>
		<link>http://lucasjosh.com/blog/2009/06/28/using-solrs-abstractsolrtestcase/</link>
		<comments>http://lucasjosh.com/blog/2009/06/28/using-solrs-abstractsolrtestcase/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 05:49:27 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Solr]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/?p=270</guid>
		<description><![CDATA[This past week I worked on utilizing Solr&#8217;s AbstractSolrTestCase which extends JUnit&#8217;s TestCase. In theory, this makes it easier to create tests that hit an index and run thru the entire search pipeline if necessary. Unfortunately, there isn&#8217;t a ton &#8230; <a href="http://lucasjosh.com/blog/2009/06/28/using-solrs-abstractsolrtestcase/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This past week I worked on utilizing Solr&#8217;s <a href="http://lucene.apache.org/solr/api/org/apache/solr/util/AbstractSolrTestCase.html">AbstractSolrTestCase</a> which extends JUnit&#8217;s TestCase.  In theory, this makes it easier to create tests that hit an index and run thru the entire search pipeline if necessary.</p>
<p>Unfortunately, there isn&#8217;t a ton of docs to help out but there are plenty of examples within Solr&#8217;s source to help.</p>
<p>That being said, here are a few things I found out while working with it.</p>
<p>Because of the way the setUp method worked, I needed to basically duplicate much of its functionality instead of calling <i>super.setUp()</i>.  By default, the setUp method will create the data directory for Solr in <i>java.io.tmpdir</i> (generally /tmp on Unix systems) and then the name of the class plus a timestamp.  This was a problem for us because it meant that the index would be created for each test in a new directory.  </p>
<p>I realize the need for having atomic data for unit tests but I viewed these Solr tests more as integration tests than true unit tests.  They were going thru the entire system as opposed to focusing on just one class or section.</p>
<p>To create the index, we were hooking pieces up to our current indexing pipeline, a very nice plug-in system we developed to go through various stations to either clean data or retrieve more of it.  Thankfully only a few places actually interacted with Solr so I was able to mock that communication out and just use the data collected and give it to the <i>adoc / update</i> methods.</p>
<p>Because the pipeline wasn&#8217;t instantaneous, I wanted to reuse the indexes as much as possible.  I figured a good middle ground for this would be for each test class to have its own index and all it to give the indexing pipeline information about what data it wanted to index.  That index would stay until a physical directory was deleted and then it would be recreated with updated data.</p>
<p>So I basically had to copy much of the existing setUp method and create the data directory with the test class name but no timestamp as well as make the tearDown method a no-op.</p>
<p>With all of this done, I now have a class which any developer can extend which hopefully will increase our test coverage.  </p>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2009/06/28/using-solrs-abstractsolrtestcase/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Testing with Redis</title>
		<link>http://lucasjosh.com/blog/2009/03/18/testing-with-redis/</link>
		<comments>http://lucasjosh.com/blog/2009/03/18/testing-with-redis/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 19:16:04 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/?p=265</guid>
		<description><![CDATA[Long time, no blog&#8230; But enough about that. On the side, I&#8217;ve been working on a new aggregator, Aggir, which allows me to test various things. I started off using SQLite and Sequel for storage, put Solr behind the scenes &#8230; <a href="http://lucasjosh.com/blog/2009/03/18/testing-with-redis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Long time, no blog&#8230;  But enough about that.</p>
<p>On the side, I&#8217;ve been working on a new aggregator, <a href="http://github.com/lucasjosh/aggir/tree/master">Aggir</a>, which allows me to test various things.  I started off using SQLite and Sequel for storage, put Solr behind the scenes for search and added a very simple Web UI using Sinatra and HAML.  Yeah, I think I pretty much used all the necessary <i>hot</i> projects.  It was fun to build and it works pretty well right now.    </p>
<p>I have more to do on the Solr front since I&#8217;m just using the defaults for relevance searching.  I&#8217;d like to dig more into the Solr internals for additional query parsing and classification at index time.  It&#8217;s some of the stuff I&#8217;ve been doing at work but wanted to use a different type of data set.</p>
<p>Of course, now that I had things somewhat stable, I decided to blow it all up and try something new.  That something new is <a href="http://code.google.com/p/redis/">Redis</a> using <a href="http://github.com/ezmobius/redis-rb/tree/master">Ezra&#8217;s client library</a>.  </p>
<p>I started down the path of updating everything, ripping out the database storage to use Redis instead.  So far so good, I have <a href="http://github.com/lucasjosh/aggir/tree/redis-storage">the start of this on a branch</a>.  One issue I found though was testing my code.  It was <i>simple</i> with Sequel since I could create a different database without any worry of overwriting real data.  With Redis, I can easily delete keys in between tests but with the keys were the same that a real update would use so non-test data would be deleted. </p>
<p>I think I&#8217;ve come up with a solution that at least is working for me.  I&#8217;ve made each key combine a prefix with other data.  The prefixes are defined as class variables.  I only set them in the library code if they haven&#8217;t already been defined elsewhere.  In my test code, I set them with an additional test-specific prefix so that I can easily delete all of the testing keys by using the keys(&#8216;test_*&#8217;) method.  This will allow me to walk thru all of the test keys created during a test and delete them before running the next test.  This mirrors what is done with the database.</p>
<p>I&#8217;m now able to test on the same instance that I&#8217;ve loaded with posts from various blogs.  I have more to say about the mindset change from a relational db to key-value storage but I wanted to get this post out.</p>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2009/03/18/testing-with-redis/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Bridges to the Future</title>
		<link>http://lucasjosh.com/blog/2008/12/31/bridges-to-the-future/</link>
		<comments>http://lucasjosh.com/blog/2008/12/31/bridges-to-the-future/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 18:56:13 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/2008/12/31/bridges-to-the-future/</guid>
		<description><![CDATA[Kevin Matheny has written a really excellent piece at BusinessWeek, extolling the virtues of agile software development.&#160; I think it can be one of the toughest battles within a large organization but if you win and are allowed to be &#8230; <a href="http://lucasjosh.com/blog/2008/12/31/bridges-to-the-future/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Kevin Matheny <a href="http://www.businessweek.com/bwdaily/dnflash/content/dec2008/db20081228_586132.htm">has written a really excellent piece</a> at BusinessWeek, extolling the virtues of agile software development.&nbsp; I think it can be one of the toughest battles within a large organization but if you <i>win</i> and are allowed to be flexible, the benefits are easily more than any struggles you&#8217;ll have.</p>
<blockquote><p>What this means for managing projects—including any project that relies on the Internet to deliver its value proposition—is simple: The longer your project timeline, the greater the risk that what you deliver will not be what you or your customers need when you deliver it. Not only are longer-term projects more likely to fail due to changes in requirements or conditions during the project, they&#8217;re more expensive. This increases the cost of failure. And because we can only do a few of them in a year, the impact of any one failure is huge.</p></blockquote>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2008/12/31/bridges-to-the-future/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t forget kids&#8230;</title>
		<link>http://lucasjosh.com/blog/2008/10/15/dont-forget-kids/</link>
		<comments>http://lucasjosh.com/blog/2008/10/15/dont-forget-kids/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 22:50:17 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Scaling]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/?p=182</guid>
		<description><![CDATA[Languages Don&#8217;t Scale]]></description>
			<content:encoded><![CDATA[<p><a href="http://events.carsonified.com/fowa/2008/london/highlights/blaine-cook-joe-stump/">Languages Don&#8217;t Scale</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2008/10/15/dont-forget-kids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Campaign Finance API from the NY Times</title>
		<link>http://lucasjosh.com/blog/2008/10/14/campaign-finance-api-from-the-ny-times/</link>
		<comments>http://lucasjosh.com/blog/2008/10/14/campaign-finance-api-from-the-ny-times/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 04:12:56 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Data]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Newspapers]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/?p=172</guid>
		<description><![CDATA[The New York Times opened up an API to get data about campaign financing. Yes, I&#8217;m jealous that they did this before we did.]]></description>
			<content:encoded><![CDATA[<p>The New York Times opened up <a href="http://open.blogs.nytimes.com/2008/10/14/announcing-the-new-york-times-campaign-finance-api/">an API to get data about campaign financing</a>.  Yes, I&#8217;m jealous that they did this before we did.</p>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2008/10/14/campaign-finance-api-from-the-ny-times/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Importance of being Developer-Friendly</title>
		<link>http://lucasjosh.com/blog/2008/10/14/the-importance-of-being-developer-friendly/</link>
		<comments>http://lucasjosh.com/blog/2008/10/14/the-importance-of-being-developer-friendly/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 04:09:43 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/?p=170</guid>
		<description><![CDATA[I&#8217;ve been working with a legacy framework the last couple of weeks. It&#8217;s something that&#8217;s been in production for over 6 years and you can definitely tell. There are files checked in with dates as extensions, always a sure sign &#8230; <a href="http://lucasjosh.com/blog/2008/10/14/the-importance-of-being-developer-friendly/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working with a legacy framework the last couple of weeks.  It&#8217;s something that&#8217;s been in production for over 6 years and you can definitely tell.  There are files checked in with dates as extensions, always a sure sign of legacy.  It&#8217;s obvious that there hasn&#8217;t been any new developers coming onto the project because the documentation is out-of-date and the entire process is wonky.  </p>
<p>A very large problem is that everything needs to be setup with production paths or it is almost impossible to get up-and-running.  I&#8217;ve been spoiled by how Rails handles the environments.  Being able to separate what is for local development, what is QA testing and what is for production is an amazing way of allowing developers to get involved quickly and easily.</p>
<p>If you don&#8217;t have that, developers will flail around, searching thru config files or trying to follow stack traces, hoping some information can be gleaned from error messages.  It isn&#8217;t easy and very frustrating and generally causes someone to lose all interest in future development.</p>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2008/10/14/the-importance-of-being-developer-friendly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Freedom == iPhone Knowledge</title>
		<link>http://lucasjosh.com/blog/2008/10/02/iphone-freedom-iphone-knowledge/</link>
		<comments>http://lucasjosh.com/blog/2008/10/02/iphone-freedom-iphone-knowledge/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 20:06:48 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/?p=158</guid>
		<description><![CDATA[With the lifting of the NDA on iPhone developers, I expect to see lots of posts and articles showing how to do a great many things. A few I&#8217;ve seen so far: iPhone Application Example Inside the iPhone SDK Using &#8230; <a href="http://lucasjosh.com/blog/2008/10/02/iphone-freedom-iphone-knowledge/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>With the lifting of <a href="http://developer.apple.com/iphone/program/">the NDA on iPhone developers</a>, I expect to see lots of posts and articles showing how to do a great many things.</p>
<ul>A few I&#8217;ve seen so far:</p>
<li><a href="http://www.cimgf.com/2008/10/01/cocoa-touch-tutorial-iphone-application-example/">iPhone Application Example</li>
<li><a href="http://arstechnica.com/articles/culture/iPhone-SDK.ars/1">Inside the iPhone SDK</a></li>
<li><a href="http://furbo.org/2008/10/01/redacted/">Using URL schemes in Apps</a></li>
</ul>
<p>I&#8217;m sure there will be more but this is a great start&#8230;  Now if I could just make time to upgrade to Leopard.</p>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2008/10/02/iphone-freedom-iphone-knowledge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some things I&#8217;ve liked recently</title>
		<link>http://lucasjosh.com/blog/2008/08/28/some-things-ive-liked-recently/</link>
		<comments>http://lucasjosh.com/blog/2008/08/28/some-things-ive-liked-recently/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 05:15:00 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Chicago]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Football]]></category>
		<category><![CDATA[LATimes]]></category>
		<category><![CDATA[Newspapers]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/?p=126</guid>
		<description><![CDATA[Here&#8217;s a few things I&#8217;ve come across the last few days which are pretty nifty&#8230; The Las Vegas Sun&#8217;s weather page. Extremely clean design with lots of data but easy to read and understand unlike ours. EveryBlock is now in &#8230; <a href="http://lucasjosh.com/blog/2008/08/28/some-things-ive-liked-recently/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a few things I&#8217;ve come across the last few days which are pretty nifty&#8230;</p>
<ul>
<li>The <a href="http://www.lasvegassun.com/weather/">Las Vegas Sun&#8217;s weather page</a>.  Extremely clean design with lots of data but easy to read and understand unlike <a href="http://weather.latimes.com/US/CA/Los_Angeles.html?main=1">ours</a>.</li>
<li><a href="http://blog.everyblock.com/2008/aug/27/anothercity/">EveryBlock is now in LA</a>&#8230;  Watch out.</li>
<li><a href="http://blog.friendfeed.com/2008/08/simple-update-protocol-fetch-updates.html">Simple Update Protocol</a> looks like a mix between a cache and sending out Pub-Sub notifications.</li>
<li><a href="http://chicago.decider.com/">The Onion has invaded Chicago</a>.</li>
<li>The Blueberry Mint Lemonade from <a href="http://theguide.latimes.com/downtown-la/restaurants/lemonade-venue">Lemonade</a> is absolutely amazing.</li>
<li><a href="http://www.ledfootball.com/">LED Football</a> for the iPhone.</li>
<li><a href="http://www.fumblerooski.org/">Fumblerooski</a> is a perfect compliment to the start of college football.</li>
<li><a href="http://www.angelenic.com/3062/the-nickel-diner-joins-downtown-august-27th/">Looking forward to trying the Nickel Diner</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2008/08/28/some-things-ive-liked-recently/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trying to run CouchDB</title>
		<link>http://lucasjosh.com/blog/2008/08/03/trying-to-run-couchdb/</link>
		<comments>http://lucasjosh.com/blog/2008/08/03/trying-to-run-couchdb/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 23:06:59 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/?p=110</guid>
		<description><![CDATA[Update: I&#8217;m happy to say I got CouchDB working with all the dependencies. In order for things to link correctly, I used the patch that DarwinPorts uses for compilation. The main change seems to be adding -install_name to the linker &#8230; <a href="http://lucasjosh.com/blog/2008/08/03/trying-to-run-couchdb/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Update:</em>  I&#8217;m happy to say I got CouchDB working with all the dependencies.  In order for things to link correctly, I used the patch that DarwinPorts uses for compilation.  The main change seems to be adding -install_name to the linker call.  Once that was done, everything fell into place.</p>
<p>I&#8217;m trying to get <a href="http://incubator.apache.org/couchdb/index.html">CouchDB</a> up and running.  Unfortunately, I&#8217;m getting no love even after building Spidermonkey.  Here&#8217;s what I&#8217;m getting:</p>
<blockquote><p>
a21772:~/apache-couchdb-0.8.0-incubating jlucas$ sudo couchdbApache CouchDB 0.8.0-incubating (LogLevel=info)<br />
Apache CouchDB is starting.</p>
<p>dyld: NSLinkModule() error<br />
dyld: Library not loaded: Darwin_DBG.OBJ/libjs.dylib<br />
  Referenced from: /usr/local/lib/couchdb/erlang/lib/couch-0.8.0-incubating/priv/lib/couch_erl_driver.so<br />
  Reason: image not found<br />
Trace/BPT trap
</p></blockquote>
<p>I wish I could get it going as there are some interesting things I want to experiment with.</p>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2008/08/03/trying-to-run-couchdb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mobile NetNewsWire</title>
		<link>http://lucasjosh.com/blog/2008/06/10/mobile-netnewswire/</link>
		<comments>http://lucasjosh.com/blog/2008/06/10/mobile-netnewswire/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 04:26:51 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://lucasjosh.com/blog/?p=82</guid>
		<description><![CDATA[Ars Technica has a preview of a mobile version of NetNewsWire which looks pretty awesome from the screenshots. What you won&#8217;t see here are sites or feeds that do not have any unread items. In fact, Brent has taken measures &#8230; <a href="http://lucasjosh.com/blog/2008/06/10/mobile-netnewswire/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ars Technica <a href="http://arstechnica.com/journals/apple.ars/2008/06/10/ars-at-wwdc-exclusive-preview-of-mobile-netnewswire">has a preview</a> of a mobile version of <a href="http://www.newsgator.com/Individuals/NetNewsWire/default.aspx">NetNewsWire</a> which looks pretty awesome from the screenshots.</p>
<blockquote><p>
What you won&#8217;t see here are sites or feeds that do not have any unread items. In fact, Brent has taken measures to ensure that on the mobile version of NetNewsWire, the user will only see what&#8217;s important to him. Many times during our interview, Brent mentioned that he was developing this application from the perspective of the individual who had only five minutes between tasks to take a quick look at his feeds. To that end, items you&#8217;ve read will disappear from the phone in 12 hours or so, keeping what you see on your iPhone to the bare minimum of important items.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://lucasjosh.com/blog/2008/06/10/mobile-netnewswire/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

