<?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: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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Re-gur-gi-tate (n)</title>
	
	<link>http://omergertel.com</link>
	<description>The world, right back at you</description>
	<lastBuildDate>Sun, 17 Jun 2012 10:30:56 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
<cloud domain="omergertel.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />

	
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Regurgitate" /><feedburner:info uri="regurgitate" /><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://superfeedr.com/hubbub" /><feedburner:emailServiceId>Regurgitate</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Automated Testing with MongoDB and OffScale</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/9pMRtzwJ_nk/</link>
		<comments>http://omergertel.com/2012/05/07/automated-testing-with-mongodb-and-offscale/#comments</comments>
		<pubDate>Mon, 07 May 2012 18:06:01 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[Start up!]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=658</guid>
		<description><![CDATA[Last friday, I attended MongoSF 2012 as a speaker. It was a great event, with about a thousand programmers showing up, and some fantastic and deeply technical talks about advanced topics in MongoDB. And in the midst of all that, 10gen were gracious enough to let me have my own thirty minute slot at the [...]]]></description>
				<content:encoded><![CDATA[<p>Last friday, I attended <a href="http://www.10gen.com/presentations#event__mongosf-2012" >MongoSF 2012</a> as a speaker. It was a great event, with about a thousand programmers showing up, and some fantastic and deeply technical talks about advanced topics in <a href="http://www.mongodb.org/" >MongoDB</a>. And in the midst of all that, <a href="http://www.10gen.com/" >10gen</a> were gracious enough to let me have my own thirty minute slot at the EcoSystem Track to talk about OffScale, and how it can help with automated testing.</p>
<p>As a first time speaker, it was a challenging and rewarding experience. It forced me to step out of my comfort zone and practice my public speaking skills. For <a href="http://off-scale.com" >OffScale</a> it was a great opportunity to get in touch with more programmers and hear some feedback. As we are in beta, and working on improving our product, listening to people&#8217;s questions is sometimes more important than having good answers, as this helps us cristalize our priorities. To this, I want to give out special thanks to the <a href="https://mongolab.com/home" >MongoLab</a> guys that attended the talk and asked some great questions about use cases we will definitely address in the future. This was exactly why I wanted to speak.</p>
<p>Here are the <a href="http://www.slideshare.net/omergertel/off-scale-mongosf-2012-automated-testing" >slides</a> for the talk I gave. I&#8217;ll probably go into more details in future posts, but the basic theme is: do more tests, use real data, make your database a first class citizen in your environment &amp; have lots of jokes in the slides if you are not a funny person.</p>
<iframe src="http://www.slideshare.net/slideshow/embed_code/12806273"  width="400"  height="337"  frameborder="0"  marginwidth="0"  marginheight="0"  scrolling="no" ></iframe><br/><br/>
<p>Go <a href="http://off-scale.com" >download our beta</a> and try it out.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=9pMRtzwJ_nk:dAcKfljwtaI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=9pMRtzwJ_nk:dAcKfljwtaI:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=9pMRtzwJ_nk:dAcKfljwtaI:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=9pMRtzwJ_nk:dAcKfljwtaI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=9pMRtzwJ_nk:dAcKfljwtaI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=9pMRtzwJ_nk:dAcKfljwtaI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=9pMRtzwJ_nk:dAcKfljwtaI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=9pMRtzwJ_nk:dAcKfljwtaI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=9pMRtzwJ_nk:dAcKfljwtaI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=9pMRtzwJ_nk:dAcKfljwtaI:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/9pMRtzwJ_nk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2012/05/07/automated-testing-with-mongodb-and-offscale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omergertel.com/2012/05/07/automated-testing-with-mongodb-and-offscale/</feedburner:origLink></item>
		<item>
		<title>Schema Management Under Source Control</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/ySdHrgIcyVY/</link>
		<comments>http://omergertel.com/2012/04/24/schema-management-under-source-control/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 15:37:15 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[Start up!]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=656</guid>
		<description><![CDATA[A long time ago, I&#8217;ve written a post for Kaltura, the best video management platform out there, where I worked at as a data warehouse consultant and lead developer. I&#8217;ve spend a lot of my time there scaling the system as the company grew, writing ETL processes and code, migrating large databases from one schema to [...]]]></description>
				<content:encoded><![CDATA[<p>A long time ago, I&#8217;ve written a post for <a href="http://www.kaltura.org/" >Kaltura</a>, the best video management platform out there, where I worked at as a data warehouse consultant and lead developer. I&#8217;ve spend a lot of my time there scaling the system as the company grew, writing ETL processes and code, migrating large databases from one schema to another, and building tools and processes to help make testing and deployment easier for such large databases.</p>
<p>My good friend, <a href="https://twitter.com/#!/Ronileco" >Roni Cohen</a>, community manager extraordinaire, has brought to my attention that the post has finally been published:</p>
<blockquote>
<h2><a href="http://blog.kaltura.org/schema-management-under-source-control" >Schema Management Under Source Control</a></h2>
<p>Deploying new features that require changes to the database is a technical challenge in any application. To quote Jeff Atwood from <a title="Get Your Database Under Source Control"  href="http://www.codinghorror.com/blog/2008/02/get-your-database-under-version-control.html" >Coding Horror</a>: “When I ask development teams whether their database is under version control, I usually get blank stares.”</p>
<p>The database is a critical part of your application. If you deploy version 2.0 of your application against version 1.0 of your database, what do you get? A broken application. And that’s why <strong>your database should always be under source control right next to your application code</strong>. You deploy the app, and you deploy the database. Like peanut butter and chocolate, they are two great tastes that taste great together.</p></blockquote>
<p>Not coincidentally, it is very relevant to what <a href="http://off-scale.com" >OffScale</a> is doing today, trying to make the database an integral part of the development cycle and a first class citizen in a source controlled environment.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ySdHrgIcyVY:LhVvx-15PRA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ySdHrgIcyVY:LhVvx-15PRA:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=ySdHrgIcyVY:LhVvx-15PRA:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ySdHrgIcyVY:LhVvx-15PRA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ySdHrgIcyVY:LhVvx-15PRA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=ySdHrgIcyVY:LhVvx-15PRA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ySdHrgIcyVY:LhVvx-15PRA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=ySdHrgIcyVY:LhVvx-15PRA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ySdHrgIcyVY:LhVvx-15PRA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=ySdHrgIcyVY:LhVvx-15PRA:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/ySdHrgIcyVY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2012/04/24/schema-management-under-source-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omergertel.com/2012/04/24/schema-management-under-source-control/</feedburner:origLink></item>
		<item>
		<title>Learning Ruby, Using Koans</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/HT2Hm5XV_DI/</link>
		<comments>http://omergertel.com/2012/04/16/learning-ruby-using-koans/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 07:17:26 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=649</guid>
		<description><![CDATA[For the longest time I wanted to learn Ruby on Rails. It has been bugging me ever since I&#8217;ve built my first website, some five or six years ago, that I have failed to find the time to learn the leading web development framework. I&#8217;m familiar with RoR from afar, watching some of DHH&#8217;s lectures [...]]]></description>
				<content:encoded><![CDATA[<p>For the longest time I wanted to learn <a href="http://rubyonrails.org/" >Ruby on Rails</a>. It has been bugging me ever since I&#8217;ve built my first website, some five or six years ago, that I have failed to find the time to learn the leading web development framework. I&#8217;m familiar with RoR from afar, watching some of <a href="http://david.heinemeierhansson.com/" >DHH&#8217;s</a> lectures and reading some texts, but didn&#8217;t get to actually try it out.</p>
<h3>Why I Chose Django Over RoR</h3>
<p>At the time, I looked into two frameworks in languages that were then new to me: Django, the python web framework, and <a href="http://rubyonrails.org/" >RoR</a>. Since I haven&#8217;t worked with either, and haven&#8217;t written any code with any of these languages, I had a hard time choosing between them.</p>
<p>At the end, I had a table with pros and cons that looked something like this:</p>
<p>Ruby on Rails:<br/>
 + Massive adoption<br/>
 + Proven &#038; more mature<br/>
 &#8211; No accessible tutorials<br/>
 &#8211; Ruby</p>
<p>Only to discover Ruby on Rails is meant to be magically simple to use, which means there is a lot to learn about conventions and things that happen in the background that really aren&#8217;t well defined in the API. Why does Cat turn into Cats automatically? In 2006-7, the tutorials for RoR were abysmal. And trying to learn Ruby wasn&#8217;t so easy. What&#8217;s up with this little tidbit of code?<br/>
<code><br/>
$ 1.+(1)<br/>
2</code></p>
<p>I&#8217;m out. This freaks me out.</p>
<p>Django:<br/>
 + Best documentation ever<br/>
 + Python<br/>
 + Less magic<br/>
 &#8211; Not even at 1.0</p>
<p>Django was in beta. That&#8217;s a killer, isn&#8217;t it? Well, the Django community seemed to have it together with great documentation and easy on boarding. The 0.97 version seemed fairly stable. And I was surrounded by python-loving hippies (no offence, guys).</p>
<p>Also, seriously, compare how nice <a href="http://jacobian.org/" >Jacob Kaplan Moss</a> to David Heinemeier Hansson:</p>
<p>JKM<br/>
<iframe width="420"  height="315"  src="http://www.youtube.com/embed/p-WXiqrzAf8"  frameborder="0"  allowfullscreen="" ></iframe></p>
<p>DHH<br/>
<iframe width="560"  height="315"  src="http://www.youtube.com/embed/up0kiOJvUpI"  frameborder="0"  allowfullscreen="" ></iframe></p>
<h3>Django, I love you, but you are bringing me down</h3>
<p>I slowly lost touch with the Django community. Most of my professional life I&#8217;ve been the data and databases guy, so I have less stake in web development. I&#8217;ve worked on back-end analytic services in some largish PHP (bah!) company. I&#8217;ve worked on my <a href="http://off-scale.com"  title="Git for Databases" >startup</a>. I haven&#8217;t developed any web site for a while now.</p>
<p>From the sidelines, the size of the community seems to matter. Look at how <a href="http://www.mongodb.org/" >MongoDB</a> is killing it compared to <a href="http://www.couchbase.com/" >Couchbase</a>. They don&#8217;t do it by having a better product. They do it by having a larger community. They do it by integrating well with Ruby on Rails and others.</p>
<p>RoR is the bigger community, and thus it is more vibrant and moves faster than it&#8217;s python counterpart.</p>
<h3>Learning Ruby, Take II</h3>
<p>I haven&#8217;t learned any new language for too long. I&#8217;ve only messed with Scala a little in 2009, failing to find a good project to really dig into it. I&#8217;ve messed with JS a little in 2010. And some PHP (bah!) in 2011. 2012 belongs to Ruby.</p>
<p>And how the community changed!</p>
<p>I&#8217;m going through the <a href="http://koans.heroku.com" >Ruby Koans</a> to get used to the feeling of the language. Unit tests are such a perfect learning tool. I&#8217;m stumped at how easy and fun it is to learn this way!</p>
<p>Go ahead, <a href="http://koans.heroku.com" >give it a try</a>.</p>
<p>I&#8217;ll then go more deeply into Rails, and come back to tell you what I think. I still don&#8217;t like all the magic they&#8217;ve stuck inside, but I&#8217;m willing to suspend my discomfort for a later stage, until I can have a more educated opinion.</p>
<p>On and away.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=HT2Hm5XV_DI:xfIGy_OUrI8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=HT2Hm5XV_DI:xfIGy_OUrI8:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=HT2Hm5XV_DI:xfIGy_OUrI8:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=HT2Hm5XV_DI:xfIGy_OUrI8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=HT2Hm5XV_DI:xfIGy_OUrI8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=HT2Hm5XV_DI:xfIGy_OUrI8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=HT2Hm5XV_DI:xfIGy_OUrI8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=HT2Hm5XV_DI:xfIGy_OUrI8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=HT2Hm5XV_DI:xfIGy_OUrI8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=HT2Hm5XV_DI:xfIGy_OUrI8:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/HT2Hm5XV_DI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2012/04/16/learning-ruby-using-koans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omergertel.com/2012/04/16/learning-ruby-using-koans/</feedburner:origLink></item>
		<item>
		<title>One More Time, From The Top</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/yqcoNq1SqKU/</link>
		<comments>http://omergertel.com/2011/06/03/one-more-time-from-the-top/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 15:16:20 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=584</guid>
		<description><![CDATA[Last time I&#8217;ve demonstrated a way to create mosaics from images. I wanted to do a little bit of image processing using javascript and HTML5&#8242;s new canvas abilities. As I mentioned, this was only the first of an idea I had about turning social experience into a beautiful, expressive and personal graphic. Mosaics, Revisited Canvas [...]]]></description>
				<content:encoded><![CDATA[<p>Last time I&#8217;ve demonstrated a way to <a href="http://omergertel.com/2011/03/25/messing-around-with-images/" >create mosaics</a> from images. I wanted to do a little bit of image processing using javascript and HTML5&#8242;s new canvas abilities. As I mentioned, this was only the first of an idea I had about turning social experience into a beautiful, expressive and personal graphic.</p>
<p><b>Mosaics, Revisited</b></p>
<p>Canvas is an extremely powerful concept, allowing web developers to create more expressive web pages. The web will soon be filled with rich user experience and we will be dancing like it&#8217;s 1995. This has been a long haul, but we are finally WINNING. I just hope we have better designers on the web than we did on the desktop. I never (ever!) want to see the Word 6.0 toolbar sprawl on a web page.</p>
<p>My favorite web sites focus on content. They try to let everything else blend into the background. On the best sites content is king. Google, YouTube and Facebook all use a clean, white background, but there are other examples for beautiful design. <a href="http://www.thesixtyone.com/" >TheSixtyOne</a> is both artfully designed, while the functionality just melts away into an incredible user experience. </p>
<p>So, I took the mosaic idea one step further, creating a (very simple) tiling jQuery plugin that allows to recreate a large image from small images. Here&#8217;s a demo.</p>
<p><span id="more-584" ></span></p>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>		
<script type="application/javascript" src="http://omergertel.com/wp-content/uploads/2011/04/jquery.imgpreload.min_.js"></script>
<script type="text/javascript" src="http://omergertel.com/wp-content/uploads/2011/06/mosaic.js"></script>
<script type="application/javascript">
$(document).ready(function() 
{
	var currentImg = null;
	$('img').imgpreload(function()
	{
		$(".test").first().mosaic({canvas:".target", 
						grainSize:15, 
						images:$(".small"),
						onmouseover:function(img, x, y)
						{
						  if((currentImg && currentImg != img) || (!currentImg))
						  {
							$(currentImg).css('display','none');
							currentImg = img;																									
						  } 
						$(img).css('position','absolute').css('top',y-100).css('left',x-100).css('display','block').css('width','200').css('height','200');
														
						},
						onmouseleave:function()
						{
							$(currentImg).css('display','none');
							currentImg = null;
         					}
					});
			});			
});
</script>
<table>
<tr>
<td>
<img class="alignnone test" src="http://omergertel.com/wp-content/uploads/2011/04/2480836794_852934c4a4.jpg" alt="" width="300" height="500" />
<p style="text-align:center">Original Image</p>
</td>
<td>
<canvas class="target"></canvas>
<p style="text-align:center">Canvas (mouse over to see the small images)</p>
</td>
</tr>
</table>
<div style="display:block">
<img src="http://omergertel.com/wp-content/uploads/2011/04/2477529727_b86df41376_s.jpg" width="32" height="32" class="alignleft small"  style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2477593929_905916e9ef_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2477602393_7bb1935ac6_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2477590093_b014f6b48b_s.jpg" width="32" height="32" class="alignleft small" style="display:none" />
<img src="http://omergertel.com/wp-content/uploads/2011/04/2477570815_f51800f1b0_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2478419712_04d000affe_s.jpg" width="32" height="32" class="alignleft small" style="display:none" />
<img src="http://omergertel.com/wp-content/uploads/2011/04/2478409248_2225b8e7d3_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2478388794_cb40a11fbd_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2477606449_8874390897_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479584857_3274539615_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479584145_61919c9d81_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479582719_ff01f8d73b_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479580555_c9845980e6_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479593711_e63ae4a340_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479592045_9ee0aedca3_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479589819_174aff1bd9_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479587021_8b92a1bb28_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479612967_e8eec53762_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479605751_55dfa05a76_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479602549_cf9c91e045_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479624465_186c9e1323_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479623941_292e107584_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/>
<img src="http://omergertel.com/wp-content/uploads/2011/04/2479618067_947198cd5b_s.jpg" width="32" height="32" class="alignleft small" style="display:none"/></div>


<p>The code is available <a href="http://omergertel.com/wp-content/uploads/2011/06/mosaic.js" >here</a>. It is by no means complete. You will notice I cheat terribly, as I overlay the miniature images on the colors of the background photo. I&#8217;m doing this for two reasons: first, getting a good color metric working for images of significant size isn&#8217;t as easy as I hoped it would be (and performance is atrocious), and second, I expect that the selection of photos I will have to use in a real life scenario to be too small for a good match to be found for all the pixels in a photo. All in all, this looks good enough, and was much simpler to code.</p>
<p>During my work, I&#8217;ve discovered a few issues I&#8217;ll go into the next section. If you have advice, I&#8217;d love to hear it. I&#8217;d much prefer not going the server-client route and keep this a client-only project.</p>
<p><b>Performance, To Heck With Thou</b></p>
<p>Javascript is slow. I didn&#8217;t expect it to be so. I knew it was considered relatively slow, however there has been a lot of <a href="http://sixrevisions.com/infographics/performance-comparison-of-major-web-browsers/" >improvement in javascript performance</a> in the browsers over the past years. It is still not enough. </p>
<p>I don&#8217;t know if you noticed, but while creating the mosaic above, your browser gobbled up a large chunk of memory. My laptop&#8217;s cooling fan whirred loudly as I waited for the picture to be created. The experience sucks. For serious number crunching and data manipulation, I suppose we still need to fall back to good old server side coding.<br/>
Or maybe I write bad code. Care to take a look and throw me a line?</p>
<p>Not that it matters. As much as I could hope to fix the performance issues, there are still a limitation I can see no way around.</p>
<p><b>Hacker, To Hack With Thou</b></p>
<p>For some silly reason, security limitations on web developers are much stricter than they are for any other type of development. This could be because client-server architectures are by nature more vulnerable, or maybe it&#8217;s because it is so darn easy to steal data using a rouge &lt;script&gt; tag. The architects of the internet over at EMCA, that set up the specs for HTML5 and JS, decided to put precautions against every obscure scenario of possible security risk. Thank you guys. I love you, but you are bringing me down.</p>
<p>While for security as a concept, in this particular case it has been quite limiting. The only way to analyze images in JS is by turning them into giant bitmaps using the <i>canvas</i>. Basically, I draw the image on the canvas, then I read it out as an array of RGB tuples. Then I analyze the photo and decide where to place it against the larger image. The problem arises when I try and analyze images that are not from my domain (or my JS domain).</p>
<p>In many sites we use resources from other sites. We just embed them using an <i>img</i> tag, and never think about it. Apparently, in order to prevent a hacker from taking a snapshot of your password on a canvas and sending the canvas somewhere else, a canvas can only be read from programmatically if it is <i>safe</i>, where <i>safe</i> is defined as: only been manipulated by objects from the same domain.</p>
<p>Short version: this technique could never work with photos that are not served from the same domain, which makes it impossible for me to use them in any social networking context. It may still be possible to use this technique in a browser extension, but I don&#8217;t think I want to go down that path. I want a <b>write-once-run-anywhere</b> experience, if possible.</p>
<p>This may still be a learning experience, though. Can anyone recommend a good image processing library for Ruby or Scala? If not, I&#8217;ll probably default back to Python. Or maybe I&#8217;ll do the extension after all.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=yqcoNq1SqKU:eVK00Jp7QyE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=yqcoNq1SqKU:eVK00Jp7QyE:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=yqcoNq1SqKU:eVK00Jp7QyE:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=yqcoNq1SqKU:eVK00Jp7QyE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=yqcoNq1SqKU:eVK00Jp7QyE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=yqcoNq1SqKU:eVK00Jp7QyE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=yqcoNq1SqKU:eVK00Jp7QyE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=yqcoNq1SqKU:eVK00Jp7QyE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=yqcoNq1SqKU:eVK00Jp7QyE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=yqcoNq1SqKU:eVK00Jp7QyE:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/yqcoNq1SqKU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2011/06/03/one-more-time-from-the-top/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omergertel.com/2011/06/03/one-more-time-from-the-top/</feedburner:origLink></item>
		<item>
		<title>Messing Around With Images</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/ZjLNcXSq108/</link>
		<comments>http://omergertel.com/2011/03/25/messing-around-with-images/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 18:45:19 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[Social Media]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=563</guid>
		<description><![CDATA[The Side Dish If you know me at all, you know that I always have a side project. I mean, I love the main course as it is full of challenges, but sometimes I need to do something else. I need a Gedankenvacation. Dude, you may ask, why do your vacations include hours of code in front [...]]]></description>
				<content:encoded><![CDATA[<p><strong>The Side Dish</strong></p>
<p>If you know me at all, you know that I always have a side project. I mean, I love the <a title="Our Company's blog"  href="http://off-scale.com/blog" >main course</a> as it is full of challenges, but sometimes I need to do something else. I need a <a href="http://en.wikipedia.org/wiki/Thought_experiment" >Gedankenvacation</a>.</p>
<p>Dude, you may ask, why do your vacations include hours of code in front of a small screen? Why not go out, get some fresh air and enjoy the sun? That&#8217;s actually a good question. Maybe it&#8217;s because I <em>love</em> to code. Maybe I&#8217;m just a bit lazy. Maybe I&#8217;m a vampire. Who knows?</p>
<p>All I know is that when I work too hard on one problem, I can tap out of resources pretty quickly and then I turn into a Facebook Zombie. Learning a new skill or working on a different problem usually helps me get out of the rut, and allows me to go on for much longer stretches.</p>
<p>My side projects usually have some sort of visual or artistic nature. I&#8217;m hardly any good at it, but I love doing it, and I don&#8217;t mind failing. One year I have written detective stories in a blog format (think of how a blog of a private investigator would look like). One year I&#8217;ve founded (and terminated) an online T-shirt store. One year I have worked on a massive multi-player online game (that we abandoned unfinished). And one year I helped organize <a title="It sounds better in Hebrew"  href="http://shuk.li/" >reality-hacking</a> events, where I got to meet interesting people and edit lots of videos. This year I want to work on a combination of visualization and social themes, simply because it&#8217;s the complete opposite of what I&#8217;m working on during my &#8220;day job&#8221;.</p>
<p><strong>Messing Around With Images</strong></p>
<p>It&#8217;s been almost a decade since I last did anything related to image processing. I was in the second year of my computer science degree, and I was looking for any practical course I could find. I never felt engaged by highly abstract mathematical courses such as Computational Complexity Theory. Call me a heretic, but in my mind Turing machines aren&#8217;t very practical mental models for computers, and I don&#8217;t understand why they are still being taught.</p>
<p>Anyway, digital image processing was exceptionally suited for my practical needs. First, you could actually see the results of your work. Second, it included just enough math so it wasn&#8217;t completely technical and boring (unlike, unfortunately, most of the programming tasks in Data Structures) and just enough code as to be useful.  Third, did I mention you could actually see results with your own eyes?</p>
<p><span id="more-563" ></span></p>
<p><strong>It&#8217;s A Boy!</strong></p>
<p>This weekend I&#8217;ve spent some time messing with HTML5&#8242;s canvas and images. I have created a small jQuery plugin that creates a nice mosaic effect on an image. You can see a few examples <a href=" http://omergertel.com/2011/03/25/messing-around-with-images" >here</a>:</p>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>		
<script type="text/javascript" src="http://omergertel.com/wp-content/uploads/2011/03/mosaic.js"></script>
<script>
$(document).ready(function()
{
    $(".test").first().mosaic({canvas:".target1", grainSize:5});
    $(".test").first().mosaic({canvas:".target2", grainSize:10});
    $(".test").first().mosaic({canvas:".target3", grainSize:15});
});
</script>
<img class="alignnone test" src="http://omergertel.com/wp-content/uploads/2011/03/demo.jpg" alt="" width="500" height="212" />
<p style="text-align:center">Original Image</p>
<canvas class="target1"></canvas>
<p style="text-align:center">5x pixel size</p>
<canvas class="target2"></canvas>
<p style="text-align:center">10x pixel size</p>
<canvas class="target3"></canvas>
<p style="text-align:center">15x pixel size</p>


<p>Note that all the processing is done by the browser, no server side code at all. If you are using Internet Explorer, chances are that your browser doesn&#8217;t support this feature, so I don&#8217;t know if it displays correctly. I hear IE9 is out and is very good. You can upgrade <a href="http://www.google.com/chrome/intl/en/landing_chrome.html?hl=en" >here</a>.</p>
<p>As I mentioned, this is a very simple example of how images can be manipulated quickly and in the browser. With devices getting stronger, we may be able to push more computation to the clients (and find a better balance of server-client load). </p>
<p>In this demo script I calculate the average color of each section of the image, and then fill a rectangle with this color on a canvas. The JS can be downloaded from <a href="http://omergertel.com/wp-content/uploads/2011/03/mosaic.js" >here</a>. This is practically the first script I have written from scratch, so it is probably full of <a href="http://www.urbandictionary.com/define.php?term=newb" >newby</a> mistakes. Please, let me know. I want to get better.</p>
<p>I have several thoughts about what I want to use it for, but there are still some features I need to add first. Stay tuned.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ZjLNcXSq108:YUK50Svo2oY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ZjLNcXSq108:YUK50Svo2oY:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=ZjLNcXSq108:YUK50Svo2oY:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ZjLNcXSq108:YUK50Svo2oY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ZjLNcXSq108:YUK50Svo2oY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=ZjLNcXSq108:YUK50Svo2oY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ZjLNcXSq108:YUK50Svo2oY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=ZjLNcXSq108:YUK50Svo2oY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=ZjLNcXSq108:YUK50Svo2oY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=ZjLNcXSq108:YUK50Svo2oY:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/ZjLNcXSq108" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2011/03/25/messing-around-with-images/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://omergertel.com/2011/03/25/messing-around-with-images/</feedburner:origLink></item>
		<item>
		<title>A Tale of Two Databases</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/TfQmDWG5bas/</link>
		<comments>http://omergertel.com/2011/02/15/a-tale-of-two-databases/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 08:53:58 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[Start up!]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=559</guid>
		<description><![CDATA[I&#8217;ve been working with databases for almost a decade. The databases I&#8217;ve worked with varied in size and brand. For more than half of this time, I&#8217;ve worked at a big in-house software provider, working with big Oracle deployments. On my spare time, I&#8217;ve developed web applications on top of MySQL, which has turned into [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been working with databases for almost a decade. The databases I&#8217;ve worked with varied in size and brand. For more than half of this time, I&#8217;ve worked at a big in-house software provider, working with big Oracle deployments. On my spare time, I&#8217;ve developed web applications on top of MySQL, which has turned into my database of choice. So, when I&#8217;ve left the big company, I&#8217;ve started consulting small (and growing) startups in ways to improve their MySQL deployment.</p>
<p>Big companies and small companies are very different in the way they approach infrastructure, but the difference is structural, not technological. Let me explain:</p>
<p><strong><em>BigCo</em></strong></p>
<p>In <em>BigCo</em>, there are many employees. Titles and responsibilities are not only well defined, but are also well enforced.</p>
<p>For example, when our team needed to change the database schema, we had to ask a DBA (not our DBA, mind you. The DBAs were not part of our team. They sat in a different part of the building, and used a sort of round-robin mechanism for task assignment I still don&#8217;t fully understand).  If we needed more memory, we had to go to the system administrator. If we needed a new database server, we had to go to both.</p>
<p>Developing a new version of our software was full of pain. Development and test environments were always last on the task queue for the infrastructure personnel. It took them from days to weeks to set up a new development environment with a subset of data from production. We never had enough storage, so we had to try and subset parts of the database that we thought were relevant for this version &#8211; but we could never get a working copy on the first try, not with the many tables we had. It took us weeks to get a server working. And then more weeks to get another for QA.</p>
<p>All this, before the first line of code was even written. That&#8217;s when it really got sticky.</p>
<p><strong>Bugs</strong>? Sure. It happens. A wrongly placed parenthesis, and all of the user data in the development database is deleted. Wait a week to get refresh the database.</p>
<p><strong>Automated testing</strong>? I&#8217;d love to, but unless there was an easy way to refresh the database, it was impossible to get repeatable results that meant much.</p>
<p><strong>Unrepeatable issues</strong>? Plenty. Development&#8217;s database and code is up-to-date with the latest version. QA are running last week&#8217;s drop. There&#8217;s no way to repeat and debug issues in development. Code and data are out of sync. We just marked them as <em>wontfix</em>, <em>cantrepeat</em>, and moved on. Then we got the same bug in production.</p>
<p>It was a mess, but I thought it was because I was working in a big company, and there are too many people involved. I was sure once I moved to a smaller place, where I can manage my own database, I&#8217;d be fine. Right? Wrong.</p>
<p><strong>SmallCo</strong></p>
<p>Getting things done in a smaller company is easier, in theory. I could install a new server, a new database on my own. Now, I thought, I wouldn&#8217;t have to wait a week to get my database ready so I could start developing the next version. An entire copy of the operational database could fit, quite snugly, on my personal laptop. If something happened, I could just copy the database again, and start over. Easy!</p>
<p>Except it isn&#8217;t.</p>
<p>It took me a while to figure it out. After a week of work, my development database, and the one I deployed to QA last week didn&#8217;t look the same anymore. I still couldn&#8217;t reproduce the bugs they found on my own system. I found my self refreshing my development environment over and over, each time to a different version of the application, before I realized what I was missing.</p>
<p><strong>Source Control is Not Enough</strong></p>
<p>In the olden days, when most companies developed desktop applications, someone very smart realized that code had to be managed in a centralized repository. When the code on the developer&#8217;s desktop was different from the code in QA, source control tools were used to momentarily shelve the recent changes and reload an older version of the code. Then the developer could debug and reproduce the error, and deploy a fix.</p>
<p>This is not the world we live in today. Almost every new service on the internet, and many internal enterprise systems are built around a client-server architecture. Somewhere, deep down below the layers of code sits a centralized data store, that holds the state of the application. Source control is no longer sufficient to manage the development life cycle of the software. We need data management tools as well.</p>
<p>This is the pain that we try and solve at <a href="http://off-scale.com" >OffScale</a>. <em>If you have encountered these problems, go to our site, where you can read more and join our beta program.</em></p>
<p><em><span style="font-size: x-small;" >* This post was also posted on my <a href="http://off-scale.com" >company&#8217;s blog</a>.</span></em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=TfQmDWG5bas:wshSF0K6w_M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=TfQmDWG5bas:wshSF0K6w_M:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=TfQmDWG5bas:wshSF0K6w_M:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=TfQmDWG5bas:wshSF0K6w_M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=TfQmDWG5bas:wshSF0K6w_M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=TfQmDWG5bas:wshSF0K6w_M:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=TfQmDWG5bas:wshSF0K6w_M:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=TfQmDWG5bas:wshSF0K6w_M:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=TfQmDWG5bas:wshSF0K6w_M:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=TfQmDWG5bas:wshSF0K6w_M:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/TfQmDWG5bas" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2011/02/15/a-tale-of-two-databases/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://omergertel.com/2011/02/15/a-tale-of-two-databases/</feedburner:origLink></item>
		<item>
		<title>Honing my Craft</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/mRsGWaxKAjw/</link>
		<comments>http://omergertel.com/2010/11/16/honing-my-craft/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 10:05:06 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=554</guid>
		<description><![CDATA[Baby Steps I&#8217;ve been programing for the better part of my life. I&#8217;ve started with BASIC, in which I&#8217;ve written a small piece of software that allowed me to manually paint a series of bitmaps and animate them. My home computer had a 4-color CGA screen, and the computer at my school was a blue-black [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Baby Steps</strong></p>
<p>I&#8217;ve been programing for the better part of my life. I&#8217;ve started with <a href="http://en.wikipedia.org/wiki/BASIC" >BASIC</a>, in which I&#8217;ve written a small piece of software that allowed me to manually paint a series of bitmaps and animate them. My home computer had a 4-color CGA screen, and the computer at my school was a blue-black <a href="http://en.wikipedia.org/wiki/Commodore_64" >Commodore 64</a>, but I knew I was hooked.</p>
<p>In high school I&#8217;ve written my first big project as part of a computer graphics course. I ended up creating a (very bad) car racing simulator in <a href="http://en.wikipedia.org/wiki/Pascal_(programming_language)" >Pascal</a>, complete with track editing and several car models. I&#8217;ve created all the graphics from scratch, from line rendering to lighting gradients on surfaces, camera tracking and even font display. The year ended just when I was about to add the simplest AI for an opponents car. Pascal was the language I used when I&#8217;ve learn the basic concepts of Obeject Oriented Design and the use of pointers.</p>
<p>University is just a blur of C/C++, Java and Matlab, but mostly it was about theory. There&#8217;s nothing in the university that prepares you to become a better programmer. I&#8217;m not saying that it should, either, just stating a fact. In the basic curriculum, even though many classes require that you program, almost none of them teach best-practices, processes of developing as part of a team, source control, bug tracking, unit testing, etc. Even design patterns are hard to come by. When I left the university, I wasn&#8217;t a much better programmer. I was just a little more experienced, and I had a much better resume (Java? Sure, I&#8217;m very experienced with Java!).</p>
<p>What did I learn?</p>
<p><strong>Bits of Useful Knowledge</strong></p>
<p>Surprisingly enough, linear algebra rises to the top. Most of the math classes are about learning how to learn and learning how to think. This is how you approach a new subject. This is how you dissect it to pieces, and build knowledge on top of other knowledge. This is how you read a scientific articles. Linear algebra was the only subject I used in later classes, and in my career later on, in subjects such as machine learning and image processing.</p>
<p>Machine learning algorithms, which later I&#8217;ve used for data mining. This one course I&#8217;ve taken on a whim, was broad enough so I could navigate my way around the subject during my years in BigCo. I have come back to this course again and again, when devising classification and clustering algorithms.</p>
<p>Data structures and basic concepts of complexity. This is the single most important thing that a programmer could get out of the BSc in computer science as it is built today. Even though these data structures are already implemented in most languages, knowing how they work and when to use them is very useful.</p>
<p><strong>Bytes of Outdated Knowledge</strong></p>
<p>Turing machines. Calculus. Outdated models of database design and concepts for relational databases. <a href="http://en.wikipedia.org/wiki/Classical_mechanics" >Classical mechanics</a>.</p>
<p><strong>Things I&#8217;ve learned in The Real World and I Wish Someone Would&#8217;ve Told Me</strong></p>
<p>I&#8217;ve really started honing my craft when I&#8217;ve arrived at BigCo, fresh out of the University. The first thing I had to do was read a long and boring book about the working of relational databases and schema design. Most programmers hate the database. They hate the interfaces to the databases and they wish they didn&#8217;t have to deal with it. They don&#8217;t like the fact that it has it&#8217;s own language called SQL. Most of all, they don&#8217;t like the  fact that there&#8217;s a lot of black magic in dealing with a database, because the thing is so damn smart, you can hardly predict how it will behave.</p>
<p>At this point I realized that most of what I&#8217;ve learned in the University is outdated and wrong. Complexity models are a terrible model to anticipate behavior. In the real world, you are not plagued by O(NlogN) problems. You are troubled by the time it takes to the spindle in your hard-drive to spin, the seek time, the read speed, the round trip between servers. You are interested in cache behaviors and what to do when not everything fits in memory.</p>
<p>The basic concepts of schema design don&#8217;t work. <a href="http://en.wikipedia.org/wiki/Database_normalization" >Normalization</a>? <a href="http://www.youtube.com/watch?v=FWBUl7oT9sA" >Huh</a>. No wonder programmers are flocking to <a href="http://en.wikipedia.org/wiki/NoSQL" >NoSQL</a> solutions. Everything they think they know about databases is wrong, because Universities teach bad-practices.</p>
<p><strong>There is no Spoon</strong></p>
<p><img align="right"  class="alignright"  src="http://jayperoni.com/wp-content/uploads/2010/04/blacksmith-300x216.jpg"  alt=""  width="300"  height="216"   style="float:right"/>Once I was free of the notions of academia, I was free to start reading on my own. Google, blogs and Wikipedia really came to the rescue here. I&#8217;m not big on books (teach yourself nothing in 21 days), and rather have a constant stream of news, tips and relevant knowledge as I need it. My reading lists change often. C# and .Net gave place to Python. Centralized source control were replaced by decentralized source control. Model-View-Controller (<a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" >MVC</a>)  is now Model-view-template (<a href="http://docs.djangoproject.com/en/dev/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names" >MTV</a>). Waterfall became agile.</p>
<p>Until I&#8217;ve left BigCo last year, I was always learning new things, and I&#8217;ve had the privilege to test new ideas both inside and outside of BigCo. I&#8217;ve learned that the most important thing is not taught in schools: It&#8217;s about the people. A small, dedicated group can out maneuver a bigger group by adopting better processes, not better technologies. Human interactions and communications are more important to a team&#8217;s success than anything you can learn in computer science.</p>
<p>I haven&#8217;t learned any new technology this year. Instead, I&#8217;m now spending part of my time honing my craft and becoming a better programmer by learning about <a href="http://www.startuplessonslearned.com/search/label/lean%20startup" >processes</a>. I think you should too.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=mRsGWaxKAjw:wkFcP6_jSMA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=mRsGWaxKAjw:wkFcP6_jSMA:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=mRsGWaxKAjw:wkFcP6_jSMA:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=mRsGWaxKAjw:wkFcP6_jSMA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=mRsGWaxKAjw:wkFcP6_jSMA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=mRsGWaxKAjw:wkFcP6_jSMA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=mRsGWaxKAjw:wkFcP6_jSMA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=mRsGWaxKAjw:wkFcP6_jSMA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=mRsGWaxKAjw:wkFcP6_jSMA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=mRsGWaxKAjw:wkFcP6_jSMA:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/mRsGWaxKAjw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2010/11/16/honing-my-craft/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://omergertel.com/2010/11/16/honing-my-craft/</feedburner:origLink></item>
		<item>
		<title>The Right Hand Side of The Network Effect</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/QkdWBb20PYI/</link>
		<comments>http://omergertel.com/2010/10/11/the-right-hand-side-of-the-network-effect/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 17:30:15 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=413</guid>
		<description><![CDATA[We all know about network effects. We understand them intuitively. In economics and business, a network effect (also called network externality) is the effect that one user of a good or service has on the value of that product to other people. When network effect is present, the value of a product or service increases as [...]]]></description>
				<content:encoded><![CDATA[<p>We all know about network effects. We understand them intuitively.</p>
<blockquote><p>In economics and business, a network effect (also called network externality) is the effect that one user of a good or service has on the value of that product to other people. When network effect is present, the value of a product or service increases as more people use it.</p>
<p>The classic example is the telephone. The more people own telephones, the more valuable the telephone is to each owner. This creates a positive externality because a user may purchase their phone without intending to create value for other users, but does so in any case.</p>
<p style="text-align: right;" >- <a href="http://en.wikipedia.org/wiki/Network_effect" >Network Effect, Wikipedia</a></p>
</blockquote>
<p style="text-align: left;" ><strong>The Four Stages of Product Adoption</strong></p>
<p style="text-align: left;" >I bet most of you know this image. Dividing customers into early adopters, majority and laggards is Business of Software 101. What we usually don&#8217;t discuss is the effect of the accumulated graph, which is the level of technology saturation.</p>
<p style="text-align: left;" >The stages of a product need to fit not only the type of people in the segment, but also the level of market share and saturation in the population. Getting a repeat customer is very different than selling for the first time. Expectations are different and so the product must be different.</p>
<p style="text-align: left;" >Network effects are paramount to the adoption of new technologies, and not only because early adopters talk about them and evangelize them. Network effects have everything to do with usability, and this is something you need to understand when you think about strategy.</p>
<p style="text-align: center;" ><img class="aligncenter"  src="http://upload.wikimedia.org/wikipedia/commons/0/0f/Diffusionofideas.PNG"  alt=""  width="395"  height="273" /></p>
<p style="text-align: left;" ><strong>1. The Runway (The Chicken and Egg Problem)</strong></p>
<p>Let&#8217;s take HDTV, as an example. We don&#8217;t usually think of TV as a business with network effects, but in fact it has very strong network effects. The more people buy TVs that support HD, the more incentive there is for media producers to provide HD content. It also goes backwards. The more HD content is out there, the more people will buy HD television sets. Basic rule of network effects applies: value is proportionate to adoption rates.</p>
<p>Early adopters eat eggs for breakfast, if you show them a chicken. The rest, not so much. The runway can be very long. Fax machines took almost twenty years to catch up. Color TV took ten years, etc.</p>
<p><strong>2. The Hockey Stick (Ramping Up)</strong></p>
<p>Network effects are getting stronger. Value of adoption is rising as the product gets more popular. This is what every investor is looking for.</p>
<p>The Hockey Stick growth phase is a wild ride. You hang on for dear life, as you turn (faster and faster) into the next big thing. You will see very steep growth in revenue. You are happy, your investors are happy, your users are happy. This is when DVD becomes available at every Blockbuster, the USB port is suddenly available on every computer or the internet makes news<em>papers</em> look arcane.</p>
<p>The <a href="http://news.bookweb.org/news/opportunities-digital-arena-independent-bookstores-action-plan-american-booksellers-association" >image</a> below displays adoption rates of some of the most popular technologies of the past century. The X axis is time and the Y axis is percent of penetration. You can see the hockey stick on most product. Then, there are those who seem to rise slower, like cable TV. That also has to do with network effects (or lack thereof). Click on it to see a larger version.</p>
<p><a href="http://omergertel.com/wp-content/uploads/2010/10/adoption.jpg" ><img class="aligncenter size-medium wp-image-543"  title="adoption"  src="http://omergertel.com/wp-content/uploads/2010/10/adoption-300x153.jpg"  alt=""  width="300"  height="153" /></a></p>
<p><strong>3. Saturation (Super Size Me)</strong></p>
<p>Everyone has a TV, a DVD player, a cellphone. Revenue streams steadies, as there are no more new customers buying the product. Stockholders are anxious. They expect the company&#8217;s revenue to continue to grow. Strategy changes drastically.</p>
<p>There are no more new customers. Now you need old customers to replace the product they already have. I replace my cellphone every two years, my DVD player breaks every six months, the TV goes out every five. How do they manage to get me to spend, spend, spend? There are several strategies:</p>
<ul>
<li>Sell more to each customer. A household of six should have four TVs, six cellphones and three cars. Wait. What? When I was your age, we only had the one horse!</li>
<li>Sell better features, minor changes within the same technology. This is the age of bigger TVs, super sized McDonald&#8217;s meals, smaller cellphones, shiny cars.</li>
<li>Sell services and not products. Flickr for your pictures, YouTube for your videos, Facebook for your friends, and <a href="http://omergertel.com/2010/09/21/do-you-own-your-iphone/" >very little ownership</a>.</li>
<li>Make it to break. Price goes down, and so does quality.</li>
<li>Make minor changes to the technology. Faster networks (and the always-connected-bandwidth-guzzling iPhone charged by the kilobit).</li>
</ul>
<p><strong>4. Decline (So 90&#8242;s)</strong></p>
<p><img align="right"  class="alignright"  title="Ye Olde Gramophone"  src="http://upload.wikimedia.org/wikipedia/commons/b/be/Portable_78_rpm_record_player.jpg"  alt="Ye Olde Gramophone"  width="221"  height="294"   style="float:right"/>VHS was replace by the DVD. Newspapers are replaced by news websites. Books will be replaced by e-readers. Each of these newer technologies had or will have a long runway, but change is inevitable. The old product declines inversely to the hockey stick growth of its replacement.</p>
<p>Some companies predict the change, and move from one technology to the next. Others die. It&#8217;s the circle of life.</p>
<p><strong>Technical Addendum</strong></p>
<p><a href="http://en.wikipedia.org/wiki/Bass_diffusion_model" >Bass Diffusion Model</a> helps you calculate the adoption rates of your technology:</p>
<p><a href="http://omergertel.com/wp-content/uploads/2010/10/diffusion.png" ><img align="left"  class="alignleft size-medium wp-image-546"  title="diffusion"  src="http://omergertel.com/wp-content/uploads/2010/10/diffusion-300x83.png"  alt=""  width="300"  height="83"   style="float:left"/></a></p>
<p>So if at given point in time t, N(t) consumers have adopted the new technology, and a total of x(t) consumers have adopted it so far, 0&lt;p&lt;1 is the internal influence  and 0&lt;q&lt;1 is the external influence (the network effect) then dx/dt is the rate of adoption of the technology by the market.</p>
<p>For more on this, you can read the materials from a course I&#8217;ve taken about diffusion of new technologies, available <a href="http://www.hitechmarkets.net" >here</a>.</p>
<p>So can you now predict the growth of your product?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=QkdWBb20PYI:rKKo7aHDL4k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=QkdWBb20PYI:rKKo7aHDL4k:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=QkdWBb20PYI:rKKo7aHDL4k:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=QkdWBb20PYI:rKKo7aHDL4k:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=QkdWBb20PYI:rKKo7aHDL4k:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=QkdWBb20PYI:rKKo7aHDL4k:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=QkdWBb20PYI:rKKo7aHDL4k:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=QkdWBb20PYI:rKKo7aHDL4k:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=QkdWBb20PYI:rKKo7aHDL4k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=QkdWBb20PYI:rKKo7aHDL4k:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/QkdWBb20PYI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2010/10/11/the-right-hand-side-of-the-network-effect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://omergertel.com/2010/10/11/the-right-hand-side-of-the-network-effect/</feedburner:origLink></item>
		<item>
		<title>Do You Own Your iPhone?</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/nkDrUlsEyHg/</link>
		<comments>http://omergertel.com/2010/09/21/do-you-own-your-iphone/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 07:52:13 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[CopyLeft]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=524</guid>
		<description><![CDATA[There were some dark times a few years back, when big studios sued old ladies for downloading music illegally. When this failed, they have tried blocking us with DRM technologies. However, DRM was ineffective and drove customers away, so music stores mostly abandoned it. I was quite hopeful. I thought customer demand and copyright owners have reached [...]]]></description>
				<content:encoded><![CDATA[<p>There were some dark times a few years back, when big studios sued old ladies for downloading music illegally. When this failed, they have tried blocking us with <a href="http://en.wikipedia.org/wiki/Digital_rights_management" >DRM</a> technologies. However, DRM was ineffective and drove customers away, so music stores mostly abandoned it.</p>
<p><img align="right"  class="alignright size-full wp-image-532"  title="future media ownership"  src="http://omergertel.com/wp-content/uploads/2010/09/future-media-ownership.jpg"  alt=""  width="257"  height="196"   style="float:right"/></p>
<p>I was quite hopeful. I thought customer demand and copyright owners have reached a new working equilibrium. I&#8217;m not so sure anymore. Consumers are in a much worse position compared to where we were twenty years ago. Once, when you bought a book, you owned it. When you bought software, you owned it. When you bought hardware, you owned it. Well, this may not be the case anymore.</p>
<p><strong>You Do Not Own Your Books</strong></p>
<p>Sometime in July 2009, buyers of Orwell&#8217;s literary masterpiece 1984, found that the e-book they have purchased has been <a href="http://www.nytimes.com/2009/07/18/technology/companies/18amazon.html?_r=1" >erased from their Kindle</a> devices. Is this legal? Well, it depends:</p>
<blockquote><p>Amazon’s published <a title="Kindle terms of service"  href="http://www.amazon.com/gp/help/customer/display.html?nodeId=200144530" >terms of service agreement</a> for the Kindle does not appear to give the company the right to delete purchases after they have been made. It says Amazon grants customers the right to keep a “permanent copy of the applicable digital content.”</p></blockquote>
<p>However, in a <a href="http://www.pcworld.com/article/172953/amazon_settles_kindle_1984_lawsuit.html" >lawsuit settled</a> not two months after the incident:</p>
<blockquote><p>In the settlement, Amazon promises never to repeat its actions, under a few conditions. The retailer will still wipe an e-book if a court or regulatory body orders it, if doing so is necessary to protect consumers from malicious code, if the consumer agrees for any reason to have the e-book removed, or if the consumer fails to pay (for instance, if the credit card issuer doesn&#8217;t remit payment).</p>
<p>So, the answer is still &#8220;no,&#8221; you don&#8217;t own the digital books you download. Though I can understand the reasoning behind some of the exceptions Amazon lays out, Amazon still maintains control over your e-books. It is not the same as having a book all to yourself once you leave the bookstore.</p></blockquote>
<p>This means you do not own your books. You are licensed to read them, of course, but you do not own them. Not in the sense you were used to with our old paper books, the ones you lent to our friends.</p>
<p><strong>You Do Not Own Your Software</strong></p>
<p>I&#8217;ve been fuming at the mouth for the past few weeks after I&#8217;ve read this little piece on <a href="http://yro.slashdot.org/story/10/09/10/210243/Court-Says-First-Sale-Doctrine-Doesnt-Apply-To-Licensed-Software" >Slashdot</a>:</p>
<blockquote><p>A federal appeals court ruled today that the first sale doctrine is &#8220;<a href="http://www.wired.com/threatlevel/2010/09/first-sale-doctrine/" >unavailable to those who are only licensed to use their copies</a> of copyrighted works.&#8221; This reverses a 2008 decision from <a href="http://news.slashdot.org/story/08/05/22/195233/Federal-Court-Says-First-Sale-Doctrine-Covers-Software-Too" >the Autodesk case</a>, in which a man was selling used copies of AutoCAD that were not currently installed on any computers. Autodesk objected to the sales because their license agreement did not permit the transfer of ownership. <a href="http://www.ca9.uscourts.gov/datastore/opinions/2010/09/10/09-35969.pdf" >Today&#8217;s ruling</a> (PDF) upholds Autodesk&#8217;s claims: &#8220;We hold today that a software user is a licensee rather than an owner of a copy where the copyright owner (1) specifies that the user is granted a license; (2) significantly restricts the user’s ability to transfer the software; and (3) imposes notable use restrictions. Applying our holding to Autodesk’s [software license agreement], we conclude that CTA was a licensee rather than an owner of copies of Release 14 and thus was not entitled to invoke the first sale doctrine or the essential step defense. &#8220;</p></blockquote>
<p>In short: you are licensed to use the software, but it is not yours. Even if this ruling only holds for AutoCAD today, I&#8217;m sure the rest of the industry (and gaming in particular) will promptly follow suit with &#8220;improved&#8221; licenses.</p>
<p><strong>You Do Not Own Your Hardware</strong></p>
<p>Microsoft <a href="http://articles.cnn.com/2009-11-12/tech/cnet.xbox.live.ban_1_banned-modern-warfare-informationweek?_s=PM:TECH" >banned 1 million</a> users from Xbox Live. These users were banned because their machines have been altered to allow them to play pirated games. While this it is legitimate to fight pirates, is the act of modifying the Xbox an act of copyright infringement?<a href="http://arstechnica.com/gaming/news/2009/08/modder-arrest-a-reminder-that-most-console-hacks-are-illegal.ars" > That depends</a>:</p>
<blockquote><p>&#8220;With hardware, you can do pretty much anything you want with it. There are very few rules that apply. You buy it, you own, you can take it apart, and that&#8217;s perfectly fine,&#8221; she explained. The problem is that no one simply modifies the hardware. &#8220;It becomes complicated with modern hardware because it&#8217;s combined with firmware, the embedded software.&#8221;</p></blockquote>
<p>So, our ownership of the Xbox is partial, at best. This gives Microsoft the right to do more than ban us from the online service they provide after purchase. It gives them the right to <a href="http://www.xbox-scene.com/xbox1data/sep/EkVZyEFyFpeyBGdGIN.php" >cripple</a> your Xbox, or even remove the software remotely, rendering the hardware useless:</p>
<blockquote><p>Your Banned 360:</p>
<ul>
<li>Cannot go on Xbox Live</li>
<li>Cannot install games to the HDD</li>
<li>Cannot use Windows Media Centre extender</li>
<li>Cannot be used to get achievements from backups without corrupting your profile</li>
</ul>
</blockquote>
<p>Next in stores: <a href="http://www.product-reviews.net/2010/08/22/jailbroken-iphone-apples-remote-kill-switch/" >Apple kills jail-broken iPhone</a>s. LG shuts down TVs that played pirated movies. Toyota pulls the plug on car modifications.</p>
<p><strong>Copyright as in The Right To Copy</strong></p>
<p>Somewhere along the way we have lost the sense of ownership. In the digital world, every use produces a copy. Thus, every use requires consent by the license owner.</p>
<p>I understand the need for copyright protection by law. Piracy, distributing the work as is and wholesale possibly for a profit, is not to be condoned. I just want to point out the price we pay to keep the rights of the few protected. Everything we &#8220;buy&#8221; is actually lent to us under stern limitations (must remain connected to the Internet,  must enter credit card, must use this <a href="http://yro.slashdot.org/story/10/07/25/1646256/Court-Rules-Bypassing-Dongles-Not-a-DMCA-Violation" >hardware USB device</a>, must not sell, must not modify).</p>
<p>Copy rights are important, but what about the rights of ownership and property?</p>
<p>I&#8217;ll leave you with Larry Lessig, advocate for copyright reform and the worlds coolest lawyer:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"  width="640"  height="385"  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" ><param name="allowFullScreen"  value="true" /><param name="allowscriptaccess"  value="always" /><param name="src"  value="http://www.youtube.com/v/7Q25-S7jzgs?fs=1&amp;hl=en_US" /><param name="allowfullscreen"  value="true" /><embed type="application/x-shockwave-flash"  width="640"  height="385"  src="http://www.youtube.com/v/7Q25-S7jzgs?fs=1&amp;hl=en_US"  allowscriptaccess="always"  allowfullscreen="true" ></embed></object></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=nkDrUlsEyHg:_uP9Z3YWBBs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=nkDrUlsEyHg:_uP9Z3YWBBs:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=nkDrUlsEyHg:_uP9Z3YWBBs:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=nkDrUlsEyHg:_uP9Z3YWBBs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=nkDrUlsEyHg:_uP9Z3YWBBs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=nkDrUlsEyHg:_uP9Z3YWBBs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=nkDrUlsEyHg:_uP9Z3YWBBs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=nkDrUlsEyHg:_uP9Z3YWBBs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=nkDrUlsEyHg:_uP9Z3YWBBs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=nkDrUlsEyHg:_uP9Z3YWBBs:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/nkDrUlsEyHg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2010/09/21/do-you-own-your-iphone/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://omergertel.com/2010/09/21/do-you-own-your-iphone/</feedburner:origLink></item>
		<item>
		<title>Democratizing Taxes</title>
		<link>http://feedproxy.google.com/~r/Regurgitate/~3/oR3i8RMnygc/</link>
		<comments>http://omergertel.com/2010/09/06/democratizing-taxes/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 10:00:16 +0000</pubDate>
		<dc:creator>Omer Gertel</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[The Internet Broke It]]></category>

		<guid isPermaLink="false">http://omergertel.com/?p=517</guid>
		<description><![CDATA[There&#8217;s an old proverb: Nothing in this world is certain except for death and taxes, but scientists are still trying to prevent death. Government and taxes Governments are a way for people to provide certain basic needs at scale. Most commonly, the services best provided by the government are those of natural monopoly: control over [...]]]></description>
				<content:encoded><![CDATA[<p>There&#8217;s an old proverb:</p>
<blockquote><p>Nothing in this world is certain except for death and taxes, but scientists are still trying to prevent death.</p></blockquote>
<p><strong>Government and taxes</strong></p>
<p><img align="right"  class="alignright"  title="Death and taxes"  src="http://cdn.moneyfunk.net/wp-content/uploads/2009/11/death-and-taxes.jpg"  alt=""  width="329"  height="284"   style="float:right"/></p>
<p>Governments are a way for people to provide certain basic needs at scale. Most commonly, the services best provided by the government are those of natural monopoly: control over natural resources, electricity and water supply, roads and railroads, safety (police and army), health and education. Things that have economy of scale, where competition is ill advised, and privatization will not benefit the people.</p>
<p>Let&#8217;s analyze the army, as an example: the army provides security. It prevents threats to the people of this country by the people of other countries. Let&#8217;s say, for the sake of example, that the army is privatized. My neighbors pay for protection and I don&#8217;t. Can the army protect their country without protecting mine? No. Therefore, I&#8217;m incentivized not to pay, not to <a href="http://omergertel.com/2010/01/01/for-king-and-country/" >conscript</a>. I leach on others. Governments are built to prevent such behavior, and it is done by taxes.</p>
<p>A tax is a way of collecting money from the people, for the benefit of the people through these</p>
<p>natural monopolies. And in order to make things easier, all tax money is pooled into one big pool, and then spread back to the different services. Through the centuries of slow information and transaction flow, this provided a certain fairness. Collecting taxes was complicated, spreading the money was complicated. Asking people what they want was complicated &#8211; even in relatively modern democracies.</p>
<p>Over the years, technology and changes in moral stands may change what is considered as public service and what is considered for private service, as the example of the <a href="http://seattletimes.nwsource.com/html/businesstechnology/2003982350_richfire30.html" >privatized firefighters</a> becoming popular again in the US &#8211; they will save your life, but will only save your property if you pay extra. However, the amount of control you had about how your tax money was spend was extremely limited.</p>
<p><strong>Charity and taxes</strong></p>
<p>There seems to be a charity boom over the past few years. I think there are two reasons for this:</p>
<ol>
<li>Increase in available income: there has been a tremendous improvement in the average quality of life over the past hundred years. Over the last decade, a lot of technologies have reached a level of maturity that we get so much bang for the buck, that there are we have spare bucks in the bank. Computers are dirt cheap, cars are smaller and cheaper, overall health is better, etc. This leaves more income for charity &#8211; because <a href="http://magazine.byu.edu/?act=view&amp;a=2441" >giving makes us feel good about ourselves</a>.</li>
<li>Internet makes charity direct: take <a href="http://www.kiva.org/" >Kiva</a>, for example. Kiva provides you with an interface to control exactly what happens with every dollar you donate. You know who gets it, and what they plan to do with it. This is not an organization governed by a group of old people in suits. This is you helping one other person.</li>
</ol>
<p>I think that for these two reasons, we will see more and more charity in the coming years.</p>
<p>There are claims that charity is the sign of bad policy. That is, if governments did a better job, we wouldn&#8217;t need charity. I think it&#8217;s the other way around. Governments were the only way we could manage the basic services in the old days. There just wasn&#8217;t any other way. Taxes are built to fit the old days.</p>
<p>Charity is people voting with their money on what services are important and what aren&#8217;t. What they believe should be the basic rights of every human being and what isn&#8217;t. I believe that we will see more charity-like models enter governments over the next fifty years, as democracy becomes more direct and more open than ever before.</p>
<p><strong>Charitable Taxation</strong></p>
<p>Don&#8217;t get me wrong &#8211; I think taxes are extremely important. It is crucial that we force everyone to partake in the payment for the public services we consume. What I suggest is a concept of Charitable Taxation, under which you will get a choice of spending some of your income tax directly to charity or government service of your choice. For example, I think most of my income tax should go to health and education services. Other may think the police is more important.</p>
<p>Services that are underfunded will have to change. They will be forced to become private &#8211; as it seems that nobody feels they are necessary as government services. Others will bloom, as the people feel they are more important. And what services are provided by the governme</p>
<p>nt will be in constant change, always adapting to the time.</p>
<p>There is a lot of details that need to be brushed out, obviously. I&#8217;m not completely certain that this mechanism is, in fact, stable. However, I think that we are best provided when we are more involved in how our governments act. After all, they are the government of the people, by the people and for the people.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Regurgitate?a=oR3i8RMnygc:6LvQ94ELnOs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=oR3i8RMnygc:6LvQ94ELnOs:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=oR3i8RMnygc:6LvQ94ELnOs:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=oR3i8RMnygc:6LvQ94ELnOs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Regurgitate?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=oR3i8RMnygc:6LvQ94ELnOs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=oR3i8RMnygc:6LvQ94ELnOs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=oR3i8RMnygc:6LvQ94ELnOs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=oR3i8RMnygc:6LvQ94ELnOs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Regurgitate?a=oR3i8RMnygc:6LvQ94ELnOs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Regurgitate?i=oR3i8RMnygc:6LvQ94ELnOs:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Regurgitate/~4/oR3i8RMnygc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://omergertel.com/2010/09/06/democratizing-taxes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://omergertel.com/2010/09/06/democratizing-taxes/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 14.083 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-23 08:24:34 --><!-- Compression = gzip -->
