<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Remesch.com</title>
    <link>http://remesch.com</link>
    <description>Most recent posts at Remesch.com</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#6fe9769e3" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/remesch/kVJf" /><feedburner:info uri="remesch/kvjf" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
      <pubDate>Sat, 08 Oct 2011 14:15:00 -0700</pubDate>
      <title>Market Bot: Ruby gem for scraping Google's Android Market</title>
      <link>http://remesch.com/market-bot-high-performance-ruby-scraper-for</link>
      <guid>http://remesch.com/market-bot-high-performance-ruby-scraper-for</guid>
      <description>
        <![CDATA[<p>
	<p>Today I released <a href="https://github.com/chadrem/market_bot">Market Bot</a>.&nbsp; Features include a simple API and high performance thanks to the Nokogiri and Typhoeus gems.&nbsp; It also has relatively good test coverage using rspec.&nbsp; More information including examples, benchmarks, and source code can be found on my github account.</p>
	
</p>

<p><a href="http://remesch.com/market-bot-high-performance-ruby-scraper-for">Permalink</a> 

	| <a href="http://remesch.com/market-bot-high-performance-ruby-scraper-for#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/974567/chad_remesch.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5ewYgyMTRISl</posterous:profileUrl>
        <posterous:firstName>Chad</posterous:firstName>
        <posterous:lastName>Remesch</posterous:lastName>
        <posterous:nickName>Chad Remesch</posterous:nickName>
        <posterous:displayName>Chad Remesch</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Tue, 30 Aug 2011 19:40:00 -0700</pubDate>
      <title>Pop Dat: now available on iPhone and Android</title>
      <link>http://remesch.com/pop-dat-now-available-on-iphone-and-android</link>
      <guid>http://remesch.com/pop-dat-now-available-on-iphone-and-android</guid>
      <description>
        <![CDATA[<p>
	<p>Pop Dat is our latest mobile game for <a href="http://itunes.apple.com/us/app/pop-dat-free/id455149472">Apple iOS</a> and <a href="https://market.android.com/details?id=com.bluefroggaming.popdat&amp;feature=search_result">Google Android</a>.&nbsp; We're very proud of it considering it was our first hobby project.</p>
<p>It had some unique goals:</p>
<ul>
<li>Low cost: We had a very small budget for art and sound.&nbsp; All programming was done for free in our spare time.</li>
<li>Cross platform:&nbsp; We used <a href="http://www.anscamobile.com/corona/">Corona SDK</a> in order program once and deploy on multiple platforms.</li>
<li>Realistic scope: As an evenings &amp; weekends project, we had to be realistic about what we could launch in a reasonable amount of time.</li>
</ul>
<p>The team did a great job at driving this project to completion.&nbsp; Please check it out and let us know what you think.&nbsp; You can also read the official Blue Frog Gaming announcement on our <a href="http://blog.bluefroggaming.com/?p=121">blog</a>.</p>
<p><a href="http://blog.bluefroggaming.com/?p=121"><div class='p_embed p_image_embed'>
<img alt="Icon2x" height="114" src="http://posterous.com/getfile/files.posterous.com/temp-2011-08-30/wagqucdzwdfIJoGyfBryrttsGoewxutaHcevfEehawxdADlyAEryDnyzyyGh/Icon2x.png.scaled500.png" width="114" />
</div>
</a></p>
	
</p>

<p><a href="http://remesch.com/pop-dat-now-available-on-iphone-and-android">Permalink</a> 

	| <a href="http://remesch.com/pop-dat-now-available-on-iphone-and-android#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/974567/chad_remesch.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5ewYgyMTRISl</posterous:profileUrl>
        <posterous:firstName>Chad</posterous:firstName>
        <posterous:lastName>Remesch</posterous:lastName>
        <posterous:nickName>Chad Remesch</posterous:nickName>
        <posterous:displayName>Chad Remesch</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="114" width="114" url="http://getfile1.posterous.com/getfile/files.posterous.com/temp-2011-08-30/wagqucdzwdfIJoGyfBryrttsGoewxutaHcevfEehawxdADlyAEryDnyzyyGh/Icon2x.png">
        <media:thumbnail height="114" width="114" url="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-08-30/wagqucdzwdfIJoGyfBryrttsGoewxutaHcevfEehawxdADlyAEryDnyzyyGh/Icon2x.png.scaled500.png" />
      </media:content>
    </item>
    <item>
      <pubDate>Sun, 23 Jan 2011 10:48:00 -0800</pubDate>
      <title>Officer: The ruby lock server and client</title>
      <link>http://remesch.com/officer-the-ruby-lock-server-and-client</link>
      <guid>http://remesch.com/officer-the-ruby-lock-server-and-client</guid>
      <description>
        <![CDATA[<p>
	<p><strong>What is it?</strong><br /><a href="https://github.com/chadrem/officer">Officer</a> is an easy to use distributed lock server and client written in Ruby. &nbsp;Wikipedia calls it a <a href="http://en.wikipedia.org/wiki/Distributed_lock_manager">Distributed Lock Manager (DLM)</a>.</p>
<p><strong>Why would I use it?</strong><br />You use it to prevent <a href="http://en.wikipedia.org/wiki/Race_condition">race conditions</a>&nbsp;in your distributed applications. &nbsp;It can be used with any Ruby app including Rails. &nbsp;Officer helps you coordinate access to shared resources in a predictable way since a lock can be held by only one client at a time. &nbsp;Other clients will queue in an orderly fashion and wait their turn.</p>
<p><strong>How did it come about?</strong><br />Back in 2009, <a href="http://www.bluefroggaming.com">my company</a> wrote a Facebook game named <a href="http://apps.facebook.com/starfleet_commander/">Starfleet Commander</a>. &nbsp;It's a highly competitive, massively multiplayer, real time strategy game. &nbsp;In other words, it's a Ruby on Rails application that encourages customers to find and exploit race conditions. &nbsp;I wrote Officer so that I could fix this problem with minimal changes to the game code.</p>
<p><strong>Is it only useful for games?</strong><br />Although it was originally designed for a game, it can be used with any application that needs distributed exclusive locks. &nbsp;Most typical web apps don't benefit from Officer since there is little purpose in exploiting their race conditions.</p>
<p><strong>What are the alternatives?</strong><br />Officer was originally inspired by <a href="http://dustin.github.com/elock/">Elock</a>. &nbsp;Unfortunately for me, I encountered a serious memory leak in Elock and thus Officer was created. &nbsp;In many cases, messaging infrastructure&nbsp;is a better choice than a lock server. &nbsp;One such product is&nbsp;<a href="http://www.rabbitmq.com">RabbitMQ</a>. &nbsp;This wasn't an option for Starfleet Commander&nbsp;since it would have required significant&nbsp;re-architecting&nbsp;of the code base.</p>
<p><strong>What about languages other than Ruby?</strong><br />Officer's network protocol is a very simple JSON syntax so it should be relatively straightforward to port the client to other languages. &nbsp;Please contribute them if you have the time.</p>
<p><strong>How do I find out more?</strong><br />Check out <a href="https://github.com/chadrem/officer">Officer on Github</a>&nbsp;for installation and usage instructions. &nbsp;Feel free to contact me if you have questions or find problems with it. &nbsp;My email is under my picture.</p>
	
</p>

<p><a href="http://remesch.com/officer-the-ruby-lock-server-and-client">Permalink</a> 

	| <a href="http://remesch.com/officer-the-ruby-lock-server-and-client#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/974567/chad_remesch.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5ewYgyMTRISl</posterous:profileUrl>
        <posterous:firstName>Chad</posterous:firstName>
        <posterous:lastName>Remesch</posterous:lastName>
        <posterous:nickName>Chad Remesch</posterous:nickName>
        <posterous:displayName>Chad Remesch</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Wed, 19 Jan 2011 18:23:00 -0800</pubDate>
      <title>Should I use SQL or NoSQL?</title>
      <link>http://remesch.com/should-i-use-sql-or-no-sql</link>
      <guid>http://remesch.com/should-i-use-sql-or-no-sql</guid>
      <description>
        <![CDATA[<p>
	<p>Determining if you should use SQL or one of the many NoSQL solutions can be a difficult decision to make. &nbsp;Hopefully this guide will help you in your decision making process...</p>
<p><strong>Do you need a lot of flexibility in your read queries?</strong><br /><em>YES</em>: SQL is the best choice for query flexibility since it has a well understood language for both simple and complex queries.&nbsp;MongoDB is also a good choice since it has some of the features of the SQL query syntax and you can add indexes on both regular and embedded documents.<br /><em>NO</em>: base your decision on other question(s).</p>
<p class="p2"><strong>Is it acceptable to take your application down in order to change the schema?</strong><br /><em>YES</em>: base your decision on other question(s). &nbsp;Note that if you are using MySQL and have a busy server, you will have to take your application down in order to change your schema.<br /><em>NO</em>: You really need to consider your NoSQL options or commercial SQL databases. &nbsp;MongoDB is great in the sense that it doesn't enforce a schema on your documents. &nbsp;Key/value databases also give a lot of flexibility in this area since they force the schema to be in the application and not the database. &nbsp;With MySQL, schema changes typically are blocking operations that will cause your application to hang. &nbsp;This can take from seconds to hours depending on many factors (database size, server performance, etc).</p>
<p class="p1"><strong>Do you need transactions?<br /></strong><em>YES</em>: Stick with MySQL or some other SQL database. &nbsp;SQL is the king of transactions. &nbsp;Some NoSQL solutions support limited forms of them (MongoDB, Redis).<br /><em>NO</em>: base your decision on other question(s).</p>
<p class="p2"><strong>Do your developers have experience modeling data for different kinds of databases (SQL, document, key/value, etc)?<br /></strong><em>YES</em>: base your decision on other question(s).<br /><em>NO</em>: Then they should start off by writing some experimental apps using different databases in order to learn their quirks. &nbsp;Every database has "gotchas" that you really want to learn about before you start writing your application. &nbsp;This is especially true of NoSQL solutions if you background is in SQL.</p>
<p class="p2"><strong>Is your IT staff or hosting provider willing and able to support your database?<br /></strong><em>YES</em>: base your decision on other question(s).<br /><em>NO</em>: Development costs are only one part of the picture. &nbsp;Once launched, it's going to need to be supported in production and every database solution requires specific knowledge in the areas of deployment, backups, monitoring, and performance tuning. &nbsp;You may be able to go with a hosted solution, a contractor, or full time staff if you don't want to support it on your own.</p>
<p class="p2"><strong>Is your application best served by using multiple types of databases at the same time?<br /></strong><em>YES</em>: It's becoming more common to combine different types of databases within a single application. &nbsp;For example, If your application does lots of increment operations (think ad server counting hits or clicks) then you could use the high performance counters in Redis or MongoDB along with using SQL to store everything else.<br /><em>NO</em>: base your decision on other question(s).</p>
<p class="p2"><strong>Is scalability a concern?<br /></strong><em>YES</em>: You're going to need to determine the vertical and horizontal scalability limitations of the various databases. &nbsp;Some databases like MySQL will scale vertically without much effort (just get a faster server). &nbsp;Other solutions such as Cassandra and Riak focus on scaling horizontally (add more servers), but then limit you in other ways. &nbsp;Another area to think about is scaling reads vs writes. &nbsp;Many database products have different techniques for scaling each (for example, MySQL slaves only scale reads).<br /><em>NO</em>: base your decision on other question(s).</p>
<p class="p2">Are you considering NoSQL for one of your projects? &nbsp;If so I'd like to hear from you.</p>
<p>&nbsp;</p>
	
</p>

<p><a href="http://remesch.com/should-i-use-sql-or-no-sql">Permalink</a> 

	| <a href="http://remesch.com/should-i-use-sql-or-no-sql#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/974567/chad_remesch.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5ewYgyMTRISl</posterous:profileUrl>
        <posterous:firstName>Chad</posterous:firstName>
        <posterous:lastName>Remesch</posterous:lastName>
        <posterous:nickName>Chad Remesch</posterous:nickName>
        <posterous:displayName>Chad Remesch</posterous:displayName>
      </posterous:author>
    </item>
  </channel>
</rss>

