<?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>Erics Tech Blog</title>
	<atom:link href="http://eric.lubow.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://eric.lubow.org</link>
	<description>Thoughts, musings, and other idealistic (sometimes useful) systems and development hoopla.</description>
	<lastBuildDate>Sat, 20 Apr 2013 17:24:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Cassandra Summit 2012 Highlights</title>
		<link>http://eric.lubow.org/2012/databases/cassandra-summit-2012-highlights/</link>
		<comments>http://eric.lubow.org/2012/databases/cassandra-summit-2012-highlights/#comments</comments>
		<pubDate>Mon, 27 Aug 2012 12:00:13 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[cassandra]]></category>
		<category><![CDATA[presentations]]></category>
		<category><![CDATA[SR::BrandTag::Cassandra]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=1129</guid>
		<description><![CDATA[I was lucky enough to have the opportunity to speak at the Cassandra World Summit 2012 on August 8 in Santa Clara. It was an amazing opportunity to share with the community the types of things that SimpleReach does with Cassandra. Not only that, I learned a lot about the roadmap and got to put [...]]]></description>
			<content:encoded><![CDATA[<p>I was lucky enough to have the opportunity to speak at the Cassandra World Summit 2012 on August 8 in Santa Clara.  It was an amazing opportunity to share with the community the types of things that SimpleReach does with Cassandra.  Not only that, I learned a lot about the roadmap and got to put a bunch of faces with the names behind the project.<br />
<span id="more-1129"></span><br />
The whole show opened up with a bunch of Japanese drummers performing followed by Johnathon Ellis, Datastax CTO giving the keynote.  He gave a few great notes about the roadmap.  The 3 biggest points of which are:</p>
<ol>
<li>Collection types</li>
<li>Virtual Nodes</li>
<li>Row caching</li>
</ol>
<p>The cool thing about collection type support is that it is allowing Cassandra to become more versatile for storing different types of data (read more about collections on the Cassandra developers blog <a href="http://www.datastax.com/dev/blog/cql3_collections" title="CQL3 Collections" target="_blank">here</a>).  With the addition of sets, lists and maps, many organizations will be able to move some of their caching and data organization off of Redis and into Cassandra.  </p>
<p>Along the idea of caching is the new row-based caches.  This works out incredibly well as it removes the need for (some) machines acting as a caching layer in front of Cassandra. It is not an uncommon paradigm to cache the output of an entire row of data in a caching layer.  Having C* do this natively would allow the caching layer to be reserved for more complex objects.  Additionally, having row caching inside Cassandra means that when a node coordinating a query hits the other nodes where it would expect to find the result, the node with the result already in its query will respond first and quickly.  Meanwhile, the other node(s) will not need to respond to the coordinator and still have the result added to the row cache for future use.</p>
<p>Last but not least is the idea of virtual nodes.  For a lot more information than this, I recommend watching <a href="http://www.youtube.com/watch?v=GddZ3pXiDys" title="Virtual Nodes - Operational Aspirin" target="_blank">Sam Overton&#8217;s talk</a> on them from the summit.  In short, virtual nodes make token management basically unneeded, improves bootstrapping and decommission speed, and make incremental cluster growing and shrinking possible.  And considering how often anyone with a cluster of > 15 nodes does all of those things, this is a next level feature to be on the lookout for.</p>
<p>For more information, check out the blog post I wrote (which talks a little less about the roadmap) on the <a href="http://www.simplereach.com/blog/" title="SimpleReach" target="_blank">SimpleReach blog</a> entitled <a href="http://simplereach.com/blog/a-big-stage-for-cassandra/" title="A Big Stage for Cassandra" target="_blank">A Big Stage for Cassandra</a>.</p>
<p>And if you don&#8217;t want to click through, here is are the 2 videos that I am a part of.  The first video is my talk at the summit.  Topic of my talk is Polyglotteny.  This is the notion that is acceptable to use more than one language and more than one data store to support your applications various needs.  It is a little tour through how SimpleReach started out with Ruby and Mongo and ended up at Ruby/Node.js/Python and Mongo/Redis/Infobright/Cassandra.</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/od6DdB-zJCk?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>For fun, here are the slides that go along with the talk (some of which you can see on the video).</p>
<iframe src="http://www.slideshare.net/slideshow/embed_code/14076919" width="427" height="357" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><br/><br/>
<p>This second video is of <a href="https://twitter.com/devdazed" title="Russell Bradberry" target="_blank">Russell Bradberry</a> (Principal Architect at SimpleReach) and I talking to <a href="https://twitter.com/furrier" title="John Furrier" target="_blank">John Furrier</a> of Silicon Angle.  We talk a little about SimpleReach and how we use Cassandra to manage our data.</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/oxvASP8jy0w?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>All in all the summit was a great experience, both in getting to share ourselves (SimpleReach) with the community and to meet and greet with the people that make it happen.  Datastax was also kind enough to name me one of their <a href="http://www.datastax.com/mvp" title="Datastax MVPs" target="_blank">MVPs</a> for being a participating part of the Cassandra community.  Cassandra has really made a name for itself and it&#8217;s great to be a part of the community behind that name.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2012/databases/cassandra-summit-2012-highlights/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s So Great About Cassandra&#8217;s Composite Columns?</title>
		<link>http://eric.lubow.org/2012/databases/whats-so-great-about-cassandras-composite-columns/</link>
		<comments>http://eric.lubow.org/2012/databases/whats-so-great-about-cassandras-composite-columns/#comments</comments>
		<pubDate>Tue, 07 Aug 2012 11:15:49 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[cassandra]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[SR::BrandTag::Cassandra]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=1110</guid>
		<description><![CDATA[There are a lot of things I really like about Cassandra. But one thing in particular I like in creating a schema is having access to composite columns (read about composite columns and their origins here on Datastax&#8217;s blog). Let&#8217;s start simple with explaining a composite columns and then we can dive right into why [...]]]></description>
			<content:encoded><![CDATA[<p>There are a lot of things I really like about <a href="http://cassandra.apache.org/" title="Cassandra" target="_blank">Cassandra</a>.  But one thing in particular I like in creating a schema is having access to composite columns (read about composite columns and their origins <a href="http://www.datastax.com/dev/blog/introduction-to-composite-columns-part-1" title="Composite Columns" target="_blank">here</a> on <a href="http://www.datastax.com/" title="Datastax" target="_blank">Datastax&#8217;s</a> blog).  Let&#8217;s start simple with explaining a composite columns and then we can dive right into why they are so much fun to work with.<br />
<span id="more-1110"></span><br />
A composite column is basically a column that has a comparator made up of other comparators.  So that is to say, rather than just having something like:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">UTF8Type()</div></div>
<p>You can do something like:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CompositeType(UTF8Type,UTF8Type)</div></div>
<p>But making storage more complex isn&#8217;t a great thing either.  So how does adding more to a name make things easier?  Think of it as a method of grouping. So let&#8217;s say you want to store information about a blog post URL (and for the sake of example, let&#8217;s say that the hashed UUID version of the URL is the rowkey).  How do you break up what&#8217;s important about the URL into storage?  In a common WordPress post, you have tags, categories, published date, title, URL, id, content, author(s), and even custom fields. So I would structure that as follows:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">2311d5d0-8574-c25d-69e8-1e17aba15c67:<br />
&nbsp; &nbsp; meta:title =&gt; &quot;What's So Great About Cassandra's Composite Columns?&quot;<br />
&nbsp; &nbsp; tag:cassandra =&gt; ''<br />
&nbsp; &nbsp; tag:database =&gt; ''<br />
&nbsp; &nbsp; category:databases =&gt; ''<br />
&nbsp; &nbsp; meta:published_date =&gt; '2012-08-01 08:00:00 UTC'<br />
&nbsp; &nbsp; meta:content =&gt; 'post content'<br />
&nbsp; &nbsp; custom:field1 =&gt; 'value1'<br />
&nbsp; &nbsp; custom:field2 =&gt; 'value2'<br />
&nbsp; &nbsp; meta:url =&gt; 'http://eric.lubow.org/2012/databases/whats-so-great-about-cassandras-composite-columns/'<br />
&nbsp; &nbsp; meta:id =&gt; '1034'<br />
&nbsp; &nbsp; author:eric =&gt; ''</div></div>
<p>Now that we have a layout, let&#8217;s see why it&#8217;s good to have it broken up like this.  If you want to load up an edit screen or render the page, then you can grab the entire row.  But if you just want part of the row (which is a great thing when you have much wider rows), then you can do things like just ask Cassandra for the <em>meta:</em> data or just the <em>tag:</em>&#8216;s data.  Like any other data store, Cassandra returns the data more efficiently when being asked for something smaller and more specific than just an entire row.</p>
<p>I know this is a bit of a contrived example and therefore is overly simplistic.  But the idea here is to show how one can extrapolate a storage methodology for a column family using composite columns.  So in a bit more complex of an example, think of an event tracking system where we are going to be tracking things based on a URL (also in hashed UUID form as above).  So we&#8217;ll build a composite row key of the timestamp in milliseconds since epoch of the beginning of the day and the hashed URL UUID. <strong>Note:</strong> I&#8217;m going to ignore the fact for examples sake that this row key methodology could create hotspots in the cluster.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">1343520000000:2311d5d0-8574-c25d-69e8-1e17aba15c67:<br />
&nbsp; pageview:1343605189000:a3faae00-6286-11e1-8b6f-fbab07b8ddb9 =&gt; '{&quot;referrer&quot;:&quot;http://eric.lubow.org/&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp;&quot;user-agent&quot;:&quot;Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp;&quot;languages&quot;:&quot;en-US,en;q=0.8&quot;,&quot;ip&quot;:&quot;24.118.178.211&quot;}'<br />
&nbsp; pageview:1343605189100:58e507e0-9ecb-11e1-a4e6-b50fe5e7b8a8 =&gt; '{&quot;referrer&quot;:&quot;http://eric.lubow.org/&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp;&quot;user-agent&quot;:&quot;Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0E; .NET4.0C)&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp;&quot;languages&quot;:&quot;en-US,en;q=0.8&quot;,&quot;ip&quot;:&quot;50.88.24.197&quot;}'<br />
&nbsp; click_through:1343605199200:66036860-9ec9-11e1-90f5-fbb6d7b0017e =&gt; '{&quot;initial&quot;:&quot;http://eric.lubow.org/&quot;,&quot;final&quot;:&quot;http://www.simplereach.com&quot;}'</div></div>
<p>What this allows you to do is to create queries where you say, &#8220;give me all pageviews that took place between 2am and 3am (in milliseconds since epoch form).  I&#8217;ve also only put pageviews and a single custom event in the example above.  But you can imagine a situation where you can create any number of event types and have the event type be the first comparator in the CompositeType(), the timestamp can be the second comparator, and the third is a Time UUID so that if you have more than one column per event, you can grab all the columns for a particular event.</p>
<p>As you can see by the two over-simplified examples above, composite columns in Cassandra have the potential to be very powerful in you know how your data is going to look and how you&#8217;d like to access it.  As you note in the second example, you can&#8217;t find all events that happened between 2am and 3am with a single query.  The only option is to create a loop with the list of event types and slice out the events per time period for each event type (in each iteration of the loop).  So knowing your data access patterns is important for creating your data storage patterns.  There may be a little trial and error involved as you scale and add more data.  But knowing the tools that are available to you is an incredibly important step in that process.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2012/databases/whats-so-great-about-cassandras-composite-columns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pros and Cons of Redis-Resque and SQS</title>
		<link>http://eric.lubow.org/2012/architecture/pros-and-cons-of-redis-resque-and-sqs/</link>
		<comments>http://eric.lubow.org/2012/architecture/pros-and-cons-of-redis-resque-and-sqs/#comments</comments>
		<pubDate>Mon, 30 Jul 2012 09:00:31 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[queueing]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[resque]]></category>
		<category><![CDATA[sqs]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=1091</guid>
		<description><![CDATA[As with any system or application, there are upsides and downsides to using them. The two queueing systems that I want to explore are Resque and Amazon&#8217;s Simple Queuing Service. Resque is essentially a set of queuing APIs that run on Redis. Redis is an in-memory data store and is what actually handles the queues. [...]]]></description>
			<content:encoded><![CDATA[<p>As with any system or application, there are upsides and downsides to using them.  The two queueing systems that I want to explore are <a href="https://github.com/defunkt/resque/" title="Resque">Resque</a> and <a href="http://aws.amazon.com/sqs/" title="Simple Queueing Service">Amazon&#8217;s Simple Queuing Service</a>.  Resque is essentially a set of queuing APIs that run on <a href="http://redis.io" title="Redis">Redis</a>. Redis is an in-memory data store and is what actually handles the queues.  It&#8217;s capable of handling complex data structures like lists (what Resque queues use), sets or sorted sets.  Amazon&#8217;s SQS is an eventually consistent sharded messaging/queueing system.<br />
<span id="more-1091"></span><br />
Both systems have their pros and cons.  Resque has to be run locally (meaning within your environment).  And because it&#8217;s native to your architecture, it can be incredibly fast in comparison.  It&#8217;s durability comes into question where even though Redis allows you to dump your data to disk under varying circumstances (say once per second) or have a master/slave architecture, ultimately you are still bound by the potential loss of a single machine (aka a single point of failure candidate).  While this may only be the case until Redis Cluster is released, comparisons have been made with the tools at hand.  With SQS, it is much more durable.  They also have the notion of <em>in-flight</em> messages.  This means that the message is pulled off the queue but never deleted until the <strong>delete</strong> command is sent for that message id.  So if you lose your worker mid-processing of the event, that event isn&#8217;t lost for good.  The message will be timed out after being <em>in-flight</em> for 5 minutes and then dropped back onto the <em>available</em> queue. While this functionality could be written into Resque, it just wasn&#8217;t part of the fundamental design.</p>
<p>For the sake of terminology, a job in Resque is a message in SQS.  A big issue with using SQS is that if you need more than 120k allowed messages to be <em>in-flight</em> at a time, you have to request an increase.  As of the publishing of this post, it has to be a special request made through an account manager or through support.  This is easy and nothing other than a potential inconvenience worth noting.  Another feature that has the potential to put a kink in your use/case is the fact that you can only pull off 10 messages at a time.  In order words, 10 is the max batch size per receive request.  So if you regularly put 1 million messages on a queue, then pulling off 10 messages off at a time would take 100k jobs.  A potential deal breaker is that you can&#8217;t yet flush a queue in SQS.  So if your queues are a little backed up?? and you want to start over, the only choice you have is to delete your queue (which will remove any custom settings that the SQS team may have made).</p>
<p>Another thing that most people tend to overlook is the cost of running each system.  Let&#8217;s assume that we are running everything in AWS US East.  The actual machines running Redis/Resque don&#8217;t need a lot of horsepower or a lot of memory.  So for arguments sake, you can run the master/slave combo for Redis on two medium instances which amounts to roughly $250 per month.  The thing you need to remember about Redis is that is can only use one core.  Note here in the documentation (<a href="http://redis.io/topics/benchmarks" title="http://redis.io/topics/benchmarks" target="_blank">http://redis.io/topics/benchmarks</a>):</p>
<blockquote><p>Redis is a single-threaded server. It is not designed to benefit from multiple CPU cores. People are supposed to launch several Redis instances to scale out on several cores if needed. It is not really fair to compare one single Redis instance to a multi-threaded data store.</p></blockquote>
<p>So if you plan on using Redis for something else in addition to Resque (i.e. as a caching system), I recommend another EC2 configuration with Redis instance counts equal to the number of cores on the machine (minus one for of the OS).  Right now SQS charges $0.120 per GB data transfer out and $0.01 per 10,000 Amazon SQS Requests ($0.000001 per Request).  Assuming we handling 10 million messages per day (which is 300 million messages per month) at roughly 1k per message (or 300G transfer per month).  In SQS this would cost about $350.</p>
<p>So right off the bat on a price comparison, Redis wins if you are only looking at cost.  However, that also means building and administering 2 Redis servers which also comes at a cost.  But you may be paying even more than the $350 dollars per month if only pulling 10 messages at a time per batch requires you spin up more workers.  Something else that may be an additional cost is that using SQS may require you to use SNS (<a href="http://aws.amazon.com/sns/" title="Simple Notification Service" target="_blank">Amazon&#8217;s Simple Notification Service</a>).  If you aren&#8217;t using SNS and don&#8217;t know how, then monitoring your queues might have an additional learning curve associated with it (as opposed to one of many Nagios scripts that will check Resque queue sizes).</p>
<p>As with anything else, your mileage may vary.  So learn your use/case and what compromises you may need to make when going with either one system or the other.</p>
<p><strong>Note:</strong> This post is intended to be a comparison based on recent experiences.  Amazon&#8217;s SQS team has been fantastic throughout the (investigation) process in discussing their roadmap (when possible) and giving the account special dispensation where possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2012/architecture/pros-and-cons-of-redis-resque-and-sqs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous Learning in Teams</title>
		<link>http://eric.lubow.org/2012/startup/continuous-learning-in-teams/</link>
		<comments>http://eric.lubow.org/2012/startup/continuous-learning-in-teams/#comments</comments>
		<pubDate>Mon, 23 Jul 2012 10:00:51 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Startup]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=1081</guid>
		<description><![CDATA[One of the most important things in a startup is having a great culture. More often than not, the team will spend more time working and talking with each other than with their family or significant others (scary thought, but yes, it&#8217;s probably true). And I don&#8217;t want to harp on the importance of culture [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most important things in a startup is having a great culture.  More often than not, the team will spend more time working and talking with each other than with their family or significant others (scary thought, but yes, it&#8217;s probably true).  And I don&#8217;t want to harp on the importance of culture in a startup because people write tons of posts every day about it.  What I do want to write about is what we do at <a href="http://simplereach.com/" title="SimpleReach" target="_blank">SimpleReach</a> to encourage culture.<br />
<span id="more-1081"></span><br />
Every Thursday, we pile the team into the conference room and we have lunch together.  I know you&#8217;re thinking, &#8220;What&#8217;s so great about that?  Tons of teams have lunch together and that engenders it own culture.&#8221;  But after lunch, we take it one step further.  Every Thursday, someone puts together a talk on something they are an expert on and teaches the group.  Since we are primarily a startup with an engineering culture, the vast majority of our talks have revolved around engineering talks like &#8220;Evented Systems&#8221;, &#8220;Distributed Data Stores&#8221;, &#8220;Node.js&#8221;, &#8220;Pinning Applications to Proper Hardware Platforms&#8221;, &#8220;Basics of Regression Analysis&#8221;, etc.</p>
<p>But lately we&#8217;ve expanded those talks to include topics like, &#8220;How Does Venture Capital Work?&#8221; and &#8220;What is the History of SimpleReach?&#8221;  By including the business side of the organization, we build a better more cohesive team.  We also ensure that the transparency that we incorporate into the culture isn&#8217;t just transparency for the sake of being able to say so, but also that the transparency is understood by everyone who desires to understand.  Very few engineers actually understand some of the business side of things (like venture capital).  And by ensuring that everyone in the company knows the history and evolution of the company, they can better understand and contribute to the vision and shaping of the organization.</p>
<p>These are just a few of the topics that we cover in our sessions.  We don&#8217;t relegate the topics to engineering or business, those just end up being the main topics because those are in the house expertises and interests that everyone shares.  Knowing who you can go to for additional help on something you are working on or finding new passions within an organization are great motivators.  It&#8217;s also help us find some issues with some our current architecture.  So you take the good with the bad because it helps drive company forward.  But either way, the best part is that everyone walks out of the room more educated than they entered.  And the sharing of information is a great unifier of teams and one of the reasons that Continuous Learning is such an important part of a good startup culture.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2012/startup/continuous-learning-in-teams/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Choosing a Product By Roadmap</title>
		<link>http://eric.lubow.org/2011/musings/choosing-a-product-by-roadmap/</link>
		<comments>http://eric.lubow.org/2011/musings/choosing-a-product-by-roadmap/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 14:56:45 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Musings]]></category>
		<category><![CDATA[product]]></category>
		<category><![CDATA[roadmap]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=1060</guid>
		<description><![CDATA[There are a lot of reasons to choose a specific technology. You can decide based on what skills you or the engineers around you have. You can decide on a new technology because it&#8217;s the right tool. But there are times when all other things are equal and the flip of a coin would suffice. [...]]]></description>
			<content:encoded><![CDATA[<p>There are a lot of reasons to choose a specific technology.  You can decide based on what skills you or the engineers around you have.  You can decide on a new technology because it&#8217;s the right tool.  But there are times when all other things are equal and the flip of a coin would suffice.  And in my mind, that&#8217;s when it comes to choosing the right technology based on a roadmap.<br />
<span id="more-1060"></span><br />
Recently, at <a href="http://www.simplereach.com">SimpleReach</a>, we were looking into a rather large decision of a backend data store that can be used for data mining.  We took a look at the usual suspects in this arena to include <a href="http://cassandra.apache.org/">Cassandra</a>, <a href="http://www.mongodb.org/">Mongo</a>, and <a href="http://hbase.apache.org/">HBase</a> (just to name a few).  Without getting into the technical details of any of this (since that isn&#8217;t what this post is about), it came down to Cassandra and HBase (and we ended up going with Cassandra).</p>
<p>The more interesting thing to note is not that we ended up with Cassandra, but what we used to make that decision.  When it came down to Cassandra and HBase, they both had their pros and cons for our use/case.  In fact, it&#8217;s likely that either one of them would have worked out just fine in the long run.  We actually made our decision based on the community and the roadmap (but mostly the roadmap).</p>
<p>The product roadmap is simply something that says where the product is intending to be in the next few weeks, months or years.  And it can be important because if the product roadmap in 12 months is in alignment with where you see your technology in 12 months, then it would seem like a pretty good fit.  And it potentially allows your organization to help influence the development of new technologies.  I&#8217;m sure some of you are thinking that it&#8217;s no fun being the guinea pig or being on the bleeding edge of everything.  But when you are pushing the limits of today&#8217;s technology stacks and applications, you have to be on the cutting edge every now and then.</p>
<p>Product roadmap doesn&#8217;t just tell you about the application itself, it tells you about the community.  If you see yourself aligned with the roadmap in the next 12-24 months, then you are also aligning yourself with the community.  And the community is hopefully full of people that have a like-minded set of goals for the use of the product in question.  So don&#8217;t just think about what&#8217;s good for you now, think about what going to be good for you (or your organization) in the future too.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2011/musings/choosing-a-product-by-roadmap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Securing The Web One Discrete Monopolizing Push At A Time</title>
		<link>http://eric.lubow.org/2011/security/google-securing-the-web-one-discrete-monopolizing-push-at-a-time/</link>
		<comments>http://eric.lubow.org/2011/security/google-securing-the-web-one-discrete-monopolizing-push-at-a-time/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 12:52:31 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=1050</guid>
		<description><![CDATA[Contrary to speculation by some, Google&#8217;s decision for encrypting search data is motivated by the goal to make the web as a whole more secure and it&#8217;s not driven by economic interests. I think Google is silently forcing the internet to do what they should be doing on their own. Google can&#8217;t just tell everyone [...]]]></description>
			<content:encoded><![CDATA[<p>Contrary to speculation by some, Google&#8217;s decision for encrypting search data is motivated by the goal to make the web as a whole more secure and it&#8217;s not driven by economic interests.  I think Google is silently forcing the internet to do what they should be doing on their own.<br />
<span id="more-1050"></span><br />
<img src="http://eric.lubow.org/wp-content/uploads/2011/10/Google-Advanced-Security.png" alt="" title="Google Advanced Security" width="140" height="140" class="alignleft size-full wp-image-1055" />Google can&#8217;t just tell everyone to make their sites operate over SSL.  That would show their monopoly and their power (even though everyone knows it&#8217;s there).  So after <a href="http://blogs.ajc.com/jamie-dupree-washington-insider/2011/09/21/google-testimony-to-congress/">Eric Schmidt spoke to congress</a> about many things (including privacy), Google is finally releasing encrypted search for logged in users.  For more information on everything this means with regard to marketing and SEO, I recommend reading <a href="http://searchengineland.com/google-puts-a-price-on-privacy-98029">this comprehensive article</a> by <a href="http://searchengineland.com/">Search Engine Land</a>.  But for security, this has a whole different meaning.</p>
<p>Looking at this from a slightly different perspective, Google is saying that if you just make your site SSL available, then you can continue to have your referrers.  And that is ultimately what people (read marketers and SEO folks) want anyway.  To oversimplify a bit, making one&#8217;s site available over SSL is as easy as going to <a href="http://www.godaddy.com/">GoDaddy</a> or the like and buying and installing an SSL certificate on your web server.</p>
<p>But what does having this certificate really do?  It allows a website to be loaded in a secure, encrypted environment.  It also allows the browser and the user to validate that the site is who they say they are according to a set of authorities like Verisign or Thawte.  These are the folks whose job it is to verify that the certificate is being issued to a valid company (note that I said valid, not necessarily reputable as it&#8217;s not the job of certificate authorities to determine reputation).</p>
<p>And on a more technical level, as a user, SSL certificates keep traffic between you and the website you are interacting with more secure.  Looking at this via the <a href="http://en.wikipedia.org/wiki/OSI_model">OSI model for networking</a>; since all HTTP traffic happens at the application layer (layer 7), when SSL is not present, everything happens over plain text communications and can be <a href="http://en.wikipedia.org/wiki/Packet_analyzer">sniffed</a>.  SSL, which is a network protocol, occurs at layer 6 (the presentation layer) and therefore can encrypt and decrypt all the communications that happen at layer 7 (if used).</p>
<p>So if we all bit the bullet and added SSL capabilities to our sites, the net result would be a more secure internet from a user perspective.  There are plenty worse things that Google could be doing than forcibly making the internet more secure.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2011/security/google-securing-the-web-one-discrete-monopolizing-push-at-a-time/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Exploring AppleScript with Alfred Shortcuts</title>
		<link>http://eric.lubow.org/2011/mac/exploring-applescript-with-alfred-shortcuts/</link>
		<comments>http://eric.lubow.org/2011/mac/exploring-applescript-with-alfred-shortcuts/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 07:34:35 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[alfred]]></category>
		<category><![CDATA[applescript]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=1041</guid>
		<description><![CDATA[If you have read my blog before, you&#8217;ll know that I am a big fan of Alfred (here). I love the shortcuts and the ability to make things quicker. One of the things I find myself doing quite frequently is looking for domains and their traffic counts on Alexa, Compete, and Quantcast. So I took [...]]]></description>
			<content:encoded><![CDATA[<p>If you have read my blog before, you&#8217;ll know that I am a big fan of <a href="http://www.alfredapp.com/">Alfred</a> (<a href="http://eric.lubow.org/2011/mac/5-apps-to-increase-mac-productivity/">here</a>).  I love the shortcuts and the ability to make things quicker.  One of the things I find myself doing quite frequently is looking for domains and their traffic counts on <a href="http://www.alexa.com">Alexa</a>, <a href="http://www.compete.com/">Compete</a>, and <a href="http://www.quantcast.com">Quantcast</a>.<span id="more-1041"></span></p>
<p>So I took my SysAdmin based love of making things quicker and learned enough Applescript to let Alfred make my life easier.  I wrote a script that when a domain argument is passed to it in Alfred, it will open up a Quantcast tab, a Compete tab, and an Alexa tab for that domain in Google Chrome (Note: With the script below, it MUST be Google Chrome).  To install, go to the Alfred preferences and create a new Applescript extension.</p>
<p>Fill out the text boxes as follows:<br />
<strong>Title:</strong> domstat<br />
<strong>Description:</strong> Get the domain statistics for<br />
<strong>Keyword:</strong> domstat</p>
<p>Now put this in the script box:</p>
<div class="codecolorer-container applescript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="applescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0033; font-weight: bold;">on</span> alfred_script<span style="color: #000000;">&#40;</span>q<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">set</span> competeURL <span style="color: #ff0033; font-weight: bold;">to</span> <span style="color: #009900;">&quot;http://siteanalytics.compete.com/&quot;</span> <span style="color: #000000;">&amp;</span> <span style="color: #0066ff;">item</span> <span style="color: #000000;">1</span> <span style="color: #ff0033; font-weight: bold;">of</span> q<br />
&nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">set</span> quantURL <span style="color: #ff0033; font-weight: bold;">to</span> <span style="color: #009900;">&quot;http://www.quantcast.com/&quot;</span> <span style="color: #000000;">&amp;</span> <span style="color: #0066ff;">item</span> <span style="color: #000000;">1</span> <span style="color: #ff0033; font-weight: bold;">of</span> q<br />
&nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">set</span> alexaURL <span style="color: #ff0033; font-weight: bold;">to</span> <span style="color: #009900;">&quot;http://www.alexa.com/siteinfo/&quot;</span> <span style="color: #000000;">&amp;</span> <span style="color: #0066ff;">item</span> <span style="color: #000000;">1</span> <span style="color: #ff0033; font-weight: bold;">of</span> q<br />
<br />
&nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">tell</span> <span style="color: #0066ff;">application</span> <span style="color: #009900;">&quot;Google Chrome&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">set</span> activeIndex <span style="color: #ff0033; font-weight: bold;">to</span> <span style="color: #ff0033; font-weight: bold;">get</span> active <span style="color: #0066ff;">tab</span> <span style="color: #ff0033;">index</span> <span style="color: #ff0033; font-weight: bold;">of</span> <span style="color: #0066ff;">window</span> <span style="color: #000000;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">tell</span> <span style="color: #0066ff;">window</span> <span style="color: #000000;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">set</span> competeTab <span style="color: #ff0033; font-weight: bold;">to</span> <span style="color: #0066ff;">make</span> <span style="color: #0066ff;">new</span> <span style="color: #0066ff;">tab</span> <span style="color: #ff0033; font-weight: bold;">with</span> <span style="color: #0066ff;">properties</span> <span style="color: #000000;">&#123;</span>URL:competeURL<span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">set</span> quantTab <span style="color: #ff0033; font-weight: bold;">to</span> <span style="color: #0066ff;">make</span> <span style="color: #0066ff;">new</span> <span style="color: #0066ff;">tab</span> <span style="color: #ff0033; font-weight: bold;">with</span> <span style="color: #0066ff;">properties</span> <span style="color: #000000;">&#123;</span>URL:quantURL<span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">set</span> alexaTax <span style="color: #ff0033; font-weight: bold;">to</span> <span style="color: #0066ff;">make</span> <span style="color: #0066ff;">new</span> <span style="color: #0066ff;">tab</span> <span style="color: #ff0033; font-weight: bold;">with</span> <span style="color: #0066ff;">properties</span> <span style="color: #000000;">&#123;</span>URL:alexaURL<span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">end</span> <span style="color: #ff0033; font-weight: bold;">tell</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">set</span> active <span style="color: #0066ff;">tab</span> <span style="color: #ff0033;">index</span> <span style="color: #ff0033; font-weight: bold;">of</span> <span style="color: #0066ff;">window</span> <span style="color: #000000;">1</span> <span style="color: #ff0033; font-weight: bold;">to</span> activeIndex<br />
&nbsp; &nbsp; <span style="color: #ff0033; font-weight: bold;">end</span> <span style="color: #ff0033; font-weight: bold;">tell</span><br />
<span style="color: #ff0033; font-weight: bold;">end</span> alfred_script</div></div>
<p>To execute, just fire up Alfred and type: &#8220;domstat eric.lubow.org&#8221; and it will fire up Google Chrome and open up the tabs.</p>
<p>Update:<br />
You can even download the Alfred extension directly from <a href="http://eric.lubow.org/wp-content/uploads/2011/09/domstat.alfredextension">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2011/mac/exploring-applescript-with-alfred-shortcuts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fixing CentOS Root Certificate Authority Issues</title>
		<link>http://eric.lubow.org/2011/security/fixing-centos-root-certificate-authority-issues/</link>
		<comments>http://eric.lubow.org/2011/security/fixing-centos-root-certificate-authority-issues/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 13:59:37 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=955</guid>
		<description><![CDATA[While trying to clone a repository from Github the other day on one of my EC2 servers and I ran into an SSL verification issue. As it turns out, Github renewed their SSL certificate (as people who are responsible about their web presence do when their certificate is about to expire). As a result, I [...]]]></description>
			<content:encoded><![CDATA[<p>While trying to clone a repository from <a href="http://github.com/">Github</a> the other day on one of my EC2 servers and I ran into an SSL verification issue. As it turns out, Github renewed their SSL certificate (as people who are responsible about their web presence do when their certificate is about to expire).  As a result, I couldn&#8217;t <em>git clone</em> over https.  This presents a problem since all my deploys work using <em>git clone</em> over https.<br />
<span id="more-955"></span></p>
<p>The error looks something like this:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">*** error: SSL certificate problem, verify that the CA cert is OK. Details:<br />
*** error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/indexzero/daemon.node.git/info/refs<br />
*** fatal: HTTP request failed<br />
*** Clone of 'https://github.com/indexzero/daemon.node.git' into submodule path 'support/daemon' failed</div></div>
<p>The reason for the error is because <a href="http://www.centos.org">CentOS</a> (at least the <a href="http://www.rightscale.com/">RightScale</a> version 5.6.8.1 has an old certificate authority bundle: <strong>/etc/pki/tls/certs/ca-bundle.crt</strong>.</p>
<p>I backed up the existing certificate file just to be on the safe side.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;"># </span><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>pki<span style="color: #000000; font-weight: bold;">/</span>tls<span style="color: #000000; font-weight: bold;">/</span>certs<span style="color: #000000; font-weight: bold;">/</span>ca-bundle.crt <span style="color: #000000; font-weight: bold;">/</span>root<span style="color: #000000; font-weight: bold;">/</span>backup<span style="color: #000000; font-weight: bold;">/</span></div></div>
<p>To fix the issue, just download a new certificate bundle.  I used the one from haxx.se.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;"># </span>curl http:<span style="color: #000000; font-weight: bold;">//</span>curl.haxx.se<span style="color: #000000; font-weight: bold;">/</span>ca<span style="color: #000000; font-weight: bold;">/</span>cacert.pem <span style="color: #660033;">-o</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>pki<span style="color: #000000; font-weight: bold;">/</span>tls<span style="color: #000000; font-weight: bold;">/</span>certs<span style="color: #000000; font-weight: bold;">/</span>ca-bundle.crt</div></div>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2011/security/fixing-centos-root-certificate-authority-issues/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>ec2-consistent-snapshot With Mongo</title>
		<link>http://eric.lubow.org/2011/databases/mongodb/ec2-consistent-snapshot-with-mongo/</link>
		<comments>http://eric.lubow.org/2011/databases/mongodb/ec2-consistent-snapshot-with-mongo/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 07:00:47 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=863</guid>
		<description><![CDATA[I setup MongoDB on my Amazon EC2 instance knowing full well that it would have to be backed up at some point. I also knew that by using XFS, I could take advantage of filesystem freezing in a similar fashion to LVM snapshots. I had remembered reading about backups on XFS with MySQL being done [...]]]></description>
			<content:encoded><![CDATA[<p>I setup <a href="http://www.mongodb.org/">MongoDB</a> on my Amazon EC2 instance knowing full well that it would have to be backed up at some point.  I also knew that by using XFS, I could take advantage of filesystem freezing in a similar fashion to LVM snapshots.  I had remembered reading about backups on XFS with MySQL being done with <a href="http://alestic.com/2009/09/ec2-consistent-snapshot">ec2-consistent-snapshot</a>.  As with any piece of open source software, it just took a little tweaking to make it do what I wanted it to do.<br />
<span id="more-863"></span><br />
Out of the box, ec2-consistent-snapshot works great for freezing an XFS filesystem with MySQL because it not only stops the server, but handles potential replication issues.  By following the steps outlined <a href="http://www.mongodb.org/pages/viewpage.action?pageId=19562846">here</a> by 10gen, I just made  a few slight adjustments to the core ec2-consistent snapshot script to allow for MongoDB support.  In fact, it supports locking and fsyncing immediately prior to freezing and backup.  I have been using this script in production for a while now and it seems to work without issue for me.</p>
<p>In the usual spirit of social coding, I have added the script to Github: <a href="https://github.com/elubow/ec2-consistent-snapshot">https://github.com/elubow/ec2-consistent-snapshot</a>.</p>
<p>Running it is just this:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ec2-consistent-snapshot &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br />
<span style="color: #660033;">--mongo</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br />
<span style="color: #660033;">--xfs-filesystem</span> <span style="color: #000000; font-weight: bold;">/</span>data &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br />
<span style="color: #660033;">--region</span> us-east-<span style="color: #000000;">1</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br />
<span style="color: #660033;">--description</span> <span style="color: #ff0000;">&quot;RAID snapshot <span style="color: #007800;">$(date +'%Y-%m-%d %H:%M:%S')</span>&quot;</span> \<br />
vol-VOL1 vol-VOL2 vol-VOL3 vol-VOL4 vol-VOL5 vol-VOL6 vol-VOL7 vol-VOL8</div></div>
<p>The options used here (for reference) are telling ec2-consistent-snapshot to use <em>&#8211;mongo</em>, on the <em>&#8211;xfs-filesystem</em> /data, in the us-east-1 <em>&#8211;region</em> (note that it&#8217;s just the region and not the availability zone within that region), to be backed up with the listed <em>&#8211;description</em> of the specified volumes.  You can even throw a <em>&#8211;mongo-stop</em> in there to have Mongo stopped before the file system freeze and then restarted after the volumes have been backed up.  Don&#8217;t forget that you need to set your Amazon keys in you environment variables (AMAZON_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY for your key and secret respectively).</p>
<p>I attempted to keep the usage style consistent with Eric Hammond&#8217;s original version, just add Mongo support for it.</p>
<p><strong>Note:</strong> I also mentioned this on the <a href="http://groups.google.com/group/mongodb-user/browse_thread/thread/633c3fbc648861a1?pli=1">mailing list</a>.  But given the amount of messages that fly around on the list daily, some folks may have missed it.</p>
<p><strong>References:</strong></p>
<ul>
<li><a href="http://alestic.com/2009/09/ec2-consistent-snapshot">ec2-consistent-snapshot</a> blog entry by Eric Hammond</li>
<li><a href="https://github.com/elubow/ec2-consistent-snapshot">ec2-consistent-snapshot</a> on Github with Mongo DB support</li>
<li><a href="http://www.mongodb.org/pages/viewpage.action?pageId=19562846">Backing up MongoDB on EC2 (10gen)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2011/databases/mongodb/ec2-consistent-snapshot-with-mongo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>5 Apps to Increase Mac Productivity</title>
		<link>http://eric.lubow.org/2011/mac/5-apps-to-increase-mac-productivity/</link>
		<comments>http://eric.lubow.org/2011/mac/5-apps-to-increase-mac-productivity/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 08:00:35 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://eric.lubow.org/?p=861</guid>
		<description><![CDATA[I like to think I have been making the most of what&#8217;s available on my Mac. This means taking advantage of some obscure and some not so obscure apps. I want to go through some of those apps and a little about their usage to help others get some of the benefit I get. There [...]]]></description>
			<content:encoded><![CDATA[<p>I like to think I have been making the most of what&#8217;s available on my Mac.  This means taking advantage of some obscure and some not so obscure apps.  I want to go through some of those apps and a little about their usage to help others get some of the benefit I get.  There are certainly other products available and even ones I use.  The 5 apps I describe are the ones I use the most frequently (and recommend to just about everyone I come in contact with who uses a Mac).<br />
<span id="more-861"></span></p>
<ol>
<li><strong style="font-size:18px;">Boxcar</strong>
<p><img src="http://tctechcrunch.files.wordpress.com/2010/11/b5.png?w=120&#038;h=120" /><br />
Just is case you haven&#8217;t heard of <a href="http://boxcar.io">Boxcar</a>, it&#8217;s what notifications for the iPhone should have been.  You can get push notifications for a ton of different services ranging from Facebook, Twitter, and email to Github or even something more custom (for those of you techies who read this blog).  This awesome iPhone application has recently been released for Mac desktop.  This means that those same notifications that you used to have to have tabs open for Facebook, Twitter, RSS feeds, Email, Github, or whatever other services you use are now all centrally located.  Boxcar for Mac is still beta-ish so expect it to get a lot better.  But centralized notifications helps to prevent you from checking all 80,000 (or so) locations for new items to distract you.</p>
</li>
<li><strong style="font-size:18px;">Alfred</strong>
<p><img src="http://www.alfredapp.com/images/alfred-logo.png" height="120" width="120" /><br />
<a href="http://alfredapp.com">Alfred App</a> is what Spotlight should have been plus some.  It is by far the application that I use the most on my Mac.  It means that I <em>grep</em> through files, search my entire filesystem and either <em>open</em> a file or <em>find</em> the containing folder and open it up.  And with the <a href="http://www.alfredapp.com/powerpack/">Powerpack</a> you have the clipboard manager (which happens to be my favorite feature).  It does favorite snippets and can save old clipboard contents for long period of times that can searchable.  If you try Alfred and it doesn&#8217;t make your life easier, then you are using it wrong.  I could go on for hours with how Alfred can make your Mac life better, but it&#8217;d faster and easier to just read the <a href="http://alfredtips.tumblr.com/">Tips Blog.</a></p>
</li>
<li><strong style="font-size:18px;">Caffeine</strong>
<p><img src="http://a2.mzstatic.com/us/r1000/020/Purple/5f/0a/df/mzi.nvflrkie.175x175-75.png" height="120" width="120" /><br />
<a href="http://itunes.apple.com/us/app/caffeine/id411246225?mt=12">Caffeine</a> is not really a productivity app, but something more to prevent annoyance and generally an all around handy app to have.  It does one thing and does it well.  Caffeine prevents your computer from going to sleep.  This is great if you have a short screen saver that you don&#8217;t feel like changing or if you are watching a movie on Netflix and don&#8217;t want your computer to go to sleep.  There is something to be said for simplicity and doing something well.</p>
</li>
<li><strong style="font-size:18px;">Notational Velocity</strong>
<p><img src="http://i.imgur.com/pv5S8.png" height="120" width="120" /><br />
Mac sticky post-it style notes are good, but <a href="http://notational.net/">Notational Velocity</a> has taken it to the next level.  It&#8217;s freeform, searchable, remote-syncable, taggable notes (too many buzzwords, right?).  But the fact is, you just start typing and it saves as you go.  When you are done, you can add tags.  And if you have an iPhone, then you can install <a href="http://simplenoteapp.com/">SimpleNote</a> and have your notes from the computer sync&#8217;d to your phone (and vise versa).  But my favorite thing is just the fact that you can start typing and it is immediately searchable.  I have it open on all my spaces and I am constantly making notes.  I take items from my Alfred clipboard and paste them into NV as notes for how I get stuff working.  This way I keep track of everything I tried and then just remove the things I don&#8217;t use (and then use those notes to write a blog post).</p>
</li>
<li><strong style="font-size:18px;">Homebrew</strong>
<p><strong style="background-color:#745626;outline-color:#D7AF72;background-clip:border-box;font-size:42px;font-family:ChunkFiveRegular,serif;color:#D7AF72;line-height:30px;">HOMEBREW</strong></p>
<p>I have tried the gamut of package management for the Mac.  I compiled things from source (and that just gets messy).  I have also tried Fink and Macports and they just both felt a little hackish given the naturally usable feel of OS X in general.  So I installed <a href="http://mxcl.github.com/homebrew/">Homebrew</a> and everything just sort of fell into place.  It&#8217;s just as simple as &#8220;<em>brew install $package</em>&#8221; (after Homebrew is installed of course).  And since every package installed is installed in isolation (<em>/usr/local/Cellar</em>), removing and upgrading can also be done with ease.  If there was a solid GUI in front of it, I would recommend Apple adopt it as a 3rd party package management system.</p>
</li>
</ol>
<p>If there are other packages or apps for the Mac that has had a great impact on your productivity, let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.lubow.org/2011/mac/5-apps-to-increase-mac-productivity/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
