<?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>Michael Koby &#187; programming</title>
	<atom:link href="http://www.mkoby.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mkoby.com</link>
	<description>Commentary on Technology, Media, News &#38; More</description>
	<lastBuildDate>Tue, 17 Jan 2012 13:00:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Where&#8217;s Your Code Resume</title>
		<link>http://www.mkoby.com/2012/01/17/wheres-your-code-resume/</link>
		<comments>http://www.mkoby.com/2012/01/17/wheres-your-code-resume/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 13:00:49 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1714</guid>
		<description><![CDATA[You've read me talk about the importance of having your code online in the past. I've had several discussions, chats, and various thoughts on this subject since I wrote that post over a year ago and I want to talk a little bit more about this, and give some tips on improving your code resume. <a href="http://www.mkoby.com/2012/01/17/wheres-your-code-resume/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve read me talk about the <a title="Get Your Source Code Online" href="http://www.mkoby.com/2010/09/21/get-your-source-code-online/">importance of having your code online</a> in the past. I&#8217;ve had several discussions, chats, and various thoughts on this subject since I wrote that post over a year ago and I want to talk a little bit more about this, and give some tips on improving your code resume.<span id="more-1714"></span></p>
<h2>Get Your Code Online</h2>
<p>First Things First, put your code online. Now.</p>
<p>If you are not putting the code for your personal projects online for others to see, you&#8217;re missing a huge opportunity. Not only from a job hunting perspective, but also from one of learning. When you put code online, you open yourself up to other developers. Sure, not everyone in the world is going to see your code, but if you&#8217;re using some of the more social aspects of Github, some of your colleagues are most likely to see it. This means that they might critique it, or at the very least a conversation will start up around that code you&#8217;ve made public. This is a great learning opportunity, even if your colleagues don&#8217;t massively review your code, they might skim it and find potential issues, and point you in the direction of fixing those issues. This opens a dialogue, and that dialogue can lead to you making better coding decisions in the future.</p>
<h2>Not All Your Projects</h2>
<p>If you&#8217;re like me, you have some projects you&#8217;d rather keep to yourself. They&#8217;re either client projects, personal projects that you make money on, or just stuff you&#8217;re not quite ready to show the world. I want to make it very clear, that as important as it is to put your code online, it&#8217;s not a requirement that you put <strong>all</strong> your code online. It&#8217;s okay to keep some things for yourself. Or at the very least, keeping them to yourself until they&#8217;re ready.</p>
<p>One other reason a code resume looks good, is that it shows you as someone who is a self starter. The more completed, fully realized projects you have on your code resume, the more people can see you are not only self motivated, but also have the ability to see things through to completion.</p>
<h2>Different Languages Fill Out a Code Resume</h2>
<p>Just like a regular resume, where having some diversity is good for rounding out the corners of your career, having an online code resume which shows the use of multiple languages can help show people you&#8217;re a well rounded developer.</p>
<p>But, just like a real resume where too much diversity can hinder you in a job search, so can using multiple languages in a code resume. Having one project in every language will distract from your code resume as it will not show expertise in any language. So having a few repositories with a couple of languages will show expertise in those languages. Then sprinkling in things from other languages, to show interest can add flavor (like spices when cooking a meal) to your online repositories.</p>
<p>The key here is balance. Having 10 repositories with 8 different languages isn&#8217;t going to show anyone anything about your coding ability. But having 8 10 repositories with 3, maybe 4, different programming languages shows mastery but also some diversity. And don&#8217;t let these numbers be hard numbers, just be sure to show balance.</p>
<h2>Get Involved</h2>
<p>If you&#8217;re not into creating or building your own projects, you can still build a code resume by helping other projects. Websites like <a title="Github" href="http://www.github.com">Github</a> or <a title="bitbucket" href="https://bitbucket.org/">Bitbucket</a> make it easy to fork projects and get involved by submitting bug fixes, documentation updates, and contributing new features.</p>
<p>Consequently, getting involved in this way also shows one&#8217;s ability to work with others. If you&#8217;re looking at getting a job that&#8217;s offering a telecommuting position, this kind of activity can also show them that you work well remotely, and might make you a more attractive prospect than someone who doesn&#8217;t have this kind of work on their code resume.</p>
<h2>Back it Up</h2>
<p>Like a career resume, a code resume could be faked, so be prepared to back it up. If someone asks you why you made the coding decisions you made, be sure you&#8217;re able to explain your reasoning. Anyone can cobble together code snippets from around the web to make a functioning application, but the ones that understand the code they&#8217;re cobbling together, refactoring, and making their own can explain why they did things a certain way. Even if that reason is, on occasion, &#8220;I didn&#8217;t know any better.&#8221;</p>
<p>This piece is what &#8220;separates the men from the boys&#8221; as they say. It also shows that you are willing to take criticism. In fact, just putting the code out there opens one up to criticism. The idea here is that you need to be able to answer for your code, good or bad. Good coders know why did the things they did.</p>
<h2>Conclusion</h2>
<p>Again, if you haven&#8217;t been putting your personal projects online, in front of others than you are missing out an opportunity to not only learn from your peers but also from giving potential employers a way to judge your work and make informed decisions about your abilities. Anyone can ace a spoken interview. Others can fake their way through a technical interview. People who put their code online, have confidence in their ability, even if it&#8217;s only a little bit. They are willing to open themselves up to critique, let their work be seen, and make themselves know one way or another.</p>
<p>What does your code resume look like?</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2012/01/17/wheres-your-code-resume/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Intro to iPhone Development at Houston Open Dev User Group</title>
		<link>http://www.mkoby.com/2011/11/02/intro-to-iphone-development-at-houston-open-dev-user-group/</link>
		<comments>http://www.mkoby.com/2011/11/02/intro-to-iphone-development-at-houston-open-dev-user-group/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 15:30:27 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[houston open development user group]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1690</guid>
		<description><![CDATA[Last night at the <a href="http://www.houopendev.net">Houston Open Development User Group</a>, I presented an introduction to iPhone development.  Through the course of 2 hours I covered the very basics of iPhone development, from Objective-C to actually creating and wiring up a user interface for an iPhone application.  For the demo application, I built a simple Twitter search application that allows a user to type in a search query and see the first 15 results returned from the Twitter search api. <a href="http://www.mkoby.com/2011/11/02/intro-to-iphone-development-at-houston-open-dev-user-group/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last night at the <a href="http://www.houopendev.net">Houston Open Development User Group</a>, I presented an introduction to iPhone development.  Through the course of 2 hours I covered the very basics of iPhone development, from Objective-C to actually creating and wiring up a user interface for an iPhone application.  For the demo application, I built a simple Twitter search application that allows a user to type in a search query and see the first 15 results returned from the Twitter search api.</p>
<p>If you attended the meeting, I encourage you to <a href="http://speakerrate.com/talks/8818">rate the talk on SpeakerRate</a>.  If you&#8217;re interested in the final code, you can <a href="https://github.com/houopendev/FindTweets">check that out on Github</a> as well.  Below, you&#8217;ll find the slides from the presentation.</p>
<div style="width:425px" id="__ss_9879927"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/mkoby1/intro-to-iphone-development-9879927" title="Intro to iPhone Development" target="_blank">Intro to iPhone Development</a></strong> <object id="__sse9879927" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=introtoiphone-111025170034-phpapp02&#038;stripped_title=intro-to-iphone-development-9879927&#038;userName=mkoby1" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse9879927" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=introtoiphone-111025170034-phpapp02&#038;stripped_title=intro-to-iphone-development-9879927&#038;userName=mkoby1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/mkoby1" target="_blank">Michael Koby</a> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2011/11/02/intro-to-iphone-development-at-houston-open-dev-user-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Houston Techfest 2011 &#8211; Wrap Up</title>
		<link>http://www.mkoby.com/2011/10/17/houston-techfest-2011-wrap-up/</link>
		<comments>http://www.mkoby.com/2011/10/17/houston-techfest-2011-wrap-up/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 21:00:12 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[houston techfest]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[presentations]]></category>
		<category><![CDATA[presenting]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[speaking]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1682</guid>
		<description><![CDATA[Had a great time this past weekend at Houston Techfest. Attended a couple of great sessions and also presented a couple of sessions of my own.  If you attended either of these sessions, please click the SpeakerRate links and rate the sessions and leave comments on anything you felt was missing so that I might be able to better present at future events. <a href="http://www.mkoby.com/2011/10/17/houston-techfest-2011-wrap-up/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Had a great time this past weekend at <a title="Houston Techfest" href="http://www.houstontechfest.com">Houston Techfest</a>.  Attended a couple of great sessions and also presented a couple of sessions of my own.  If you attended either of these sessions, please click the SpeakerRate links and rate the sessions and leave comments on anything you felt was missing so that I might be able to better present at future events.</p>
<p>Below are my thoughts on the two sessions I presented.</p>
<h3>Deploying Rails Applications: Lessons Learned</h3>
<p>This session was the weaker of the two.  Reason being is I didn&#8217;t prepare enough for it.  While the content was decent, it could have had a little more meat and a lot less fluff.  This is something I plan to correct in all future sessions.  However, the discussion, questions, and general feel of the room wasn&#8217;t bad.  I just think that I could have done a better job of delivering some real content on this session.</p>
<p><a title="CodeMav - Deploying Rails Applications: Lessons Learned" href="http://codemav.com/profiles/mkoby/talks/deploying-rails-applications-lessons-learned">CodeMav Link</a></p>
<p><a title="SpeakerRate - Deploying Rails Applications: Lessons Learned" href="http://speakerrate.com/talks/8533">SpeakerRate Link</a></p>
<div style="width:340px" id="__ss_9684780"> <strong style="display:block;margin:12px 0 4px"><iframe src="http://www.slideshare.net/slideshow/embed_code/9684780" width="340" height="284" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></div>
<h3>Cross Platform Development with Mono and C#</h3>
<p>This session was better attended than I had planned. In the past talks I&#8217;ve given on Mono and cross platform .NET development were sparsely (if at all) attended.  I think a large reason for this is <a title="Xamarin" href="http://xamarin.com/">Xamarin</a>, specifically their <a title="MonoTouch" href="iOS MonoTouch">MonoTouch</a> and <a title="Mono for Android" href="http://android.xamarin.com/">Mono for Android</a> products, and the interest they have generated in the .NET community for doing mobile development.  This session had good questions, discussion, and I even managed to get a little &#8220;wow factor&#8221; in with the <a title="Mono's C# Shell (REPL)" href="http://tirania.org/blog/archive/2008/Sep-08.html">csharp shell</a> from Mono.</p>
<p><a title="CodeMav - Cross Platform Development with Mono and C#" href="http://codemav.com/profiles/mkoby/talks/cross-platform-development-with-mono-and-c">CodeMav Link</a></p>
<p><a title="SpeakerRate - Cross Platform Development with Mono and C#" href="http://speakerrate.com/talks/8381-cross-platform-development-with-mono-and-c">SpeakerRate Link</a></p>
<div style="width:340px" id="__ss_9476382"> <strong style="display:block;margin:12px 0 4px"><iframe src="http://www.slideshare.net/slideshow/embed_code/9476382" width="340" height="284" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></div>
<h3>Final Thoughts</h3>
<p>Overall the experience was good. I think that I can do better next time, but given the size of the event and how well the sessions seemed to go in general, I think that I did okay.  Again, if you attended either of these sessions, please click the SpeakerRate links and rate the sessions</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2011/10/17/houston-techfest-2011-wrap-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cutting Worker Costs on Heroku</title>
		<link>http://www.mkoby.com/2011/08/02/cutting-worker-costs-on-heroku/</link>
		<comments>http://www.mkoby.com/2011/08/02/cutting-worker-costs-on-heroku/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 22:30:53 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[Just for Bands]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[heroku]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1667</guid>
		<description><![CDATA[When we launched LiveShow, we utilized what Heroku calls a "Worker Dyno" to handle background tasks, specifically sending emails.  Using a Heroku worker dyno allows you to offload work to a background task so that it doesn't hold up the actual web server portion of your app.  The downside to worker dynos is they cost money, $0.05/hour to be exact.  And when you run one all day, everyday for a month, that can add up. <a href="http://www.mkoby.com/2011/08/02/cutting-worker-costs-on-heroku/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>When we launched <a title="Just for Bands" href="http://www.justforbands.com">Just for Bands</a>, my partner Erick and I decided to go with Heroku&#8217;s cloud hosting service to host our <a title="LiveShow" href="http://www.booktheliveshow.com">LiveShow</a> application.  The reasons for this had to do with simplicity in managing the &#8220;server&#8221; and cost.  Heroku is fairly cheap, and the level of service they provide through their add-ons only increases that value.  If you have a Ruby on Rails application to launch and you don&#8217;t want to think about servers, <a title="Heroku" href="http://www.heroku.com">Heroku</a> is definitely worth looking at.</p>
<h3>Heroku Worker Dynos</h3>
<p>When we launched LiveShow, we utilized what Heroku calls a &#8220;<a title="Heroku: Worker Dynos &amp; Delayed Job" href="http://devcenter.heroku.com/articles/delayed-job">Worker Dyno</a>&#8221; to handle background tasks, specifically sending emails.  Using a Heroku worker dyno allows you to offload work to a background task so that it doesn&#8217;t hold up the actual web server portion of your app.  The downside to worker dynos is they cost money, $0.05/hour to be exact.  And when you run one all day, everyday for a month, that can add up.  In the case of LiveShow, to the tune of over $50 a month. And for a company that isn&#8217;t making any real money at the moment, that&#8217;s a lot of money going out with next to none coming in.<span id="more-1667"></span></p>
<h3>Enter HireFire</h3>
<p>When doing some research for another project, I stumbled on the <a title="HireFire gem" href="https://github.com/meskyanichi/hirefire">HireFire</a> gem.  This gem is a must have for anyone who is using Heroku and the worker dynos.  The use of this gem saved us close to $35 in July alone.</p>
<p>What does it do? It&#8217;s simple, you set up this gem, and you deploy the changes to Heroku. Once the changes are live on Heroku, you can turn off your worker dyno because this gem will activate one when you generate a background task. You read correctly, it will &#8220;hire&#8221; a Heroku worker dyno when it notices a new background task has been created.  Once the background task has completed successfully, the HireFire gem will them kill (read &#8220;fire&#8221;) the worker dyno.  So the worker dynos are only alive when they&#8217;re needed.</p>
<p>You can imagine how something like this would reduce the cost of someone (like Just for Bands) that relies on these workers to push out emails and perform other tasks.</p>
<h3>The Downside</h3>
<p>If you used scheduled background tasks (DelayedJob&#8217;s run_at option), this won&#8217;t help.  Because HireFire will see the pending job, it will actually keep the worker alive until that job has been ran successfully.</p>
<p>Also, currently, the gem requires you to store your Heroku account credentials in server environment variables on Heroku. There is work to move to using the Heroku API key that each user is given, but it hasn&#8217;t been fully implemented yet.  It needs the credentials in order to hire/fire the worker dynos, since it uses Heroku&#8217;s APIs for doing the work.</p>
<h3>Conclusion</h3>
<p>Seriously, if you&#8217;re running a Heroku app, and you are using the DelayedJobs or any of the background task runners that HireFire supports, you should highly consider using this gem.  It will drastically reduce your costs, and thus keep your pocket book in check.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2011/08/02/cutting-worker-costs-on-heroku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Completely Removing RVM</title>
		<link>http://www.mkoby.com/2011/06/03/completely-removing-rvm/</link>
		<comments>http://www.mkoby.com/2011/06/03/completely-removing-rvm/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 16:30:08 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby version manager]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1650</guid>
		<description><![CDATA[Today I had to change an single user installation of Ruby Version Manager (RVM), to a system wide installation.  But after removing the .rvm folder and .rvmrc file from the user directory, running the RVM installation script would still install to the user directory instead of the system wide /usr/local/rvm directory.  What I found is that RVM will embed itself deeply in your system and there are a few more things you have to do, below are the steps to completely remove RVM from your computer. <a href="http://www.mkoby.com/2011/06/03/completely-removing-rvm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today I had to change an single user installation of <a href="https://rvm.beginrescueend.com/">Ruby Version Manager (RVM)</a>, to a system wide installation.  But after removing the .rvm folder and .rvmrc file from the user directory, running the RVM installation script would still install to the user directory instead of the system wide /usr/local/rvm directory.  What I found is that RVM will embed itself deeply in your system and there are a few more things you have to do, below are the steps to completely remove RVM from your computer.</p>
<p>First you&#8217;ll need to remove the stuff in your /home directory:</p>
<pre class="brush: bash; title: ; notranslate">
rm -rf .rvm*
</pre>
<p>Next you&#8217;ll want to remove the following line from your .bash_profile</p>
<pre class="brush: plain; title: ; notranslate">
[[ -s &quot;$HOME/.rvm/scripts/rvm&quot; ]] &amp;&amp; . &quot;$HOME/.rvm/scripts/rvm&quot; # Load RVM function
</pre>
<p>You&#8217;ll then want to remove the /etc/rvmrc file as this has some information about the RVM install in your /home folder</p>
<pre class="brush: bash; title: ; notranslate">
sudo rm -rf /etc/rvm*
</pre>
<p>Finally you&#8217;ll want to remove the group it created (this will be there if you attempted a system wide install, but hadn&#8217;t cleared out everything, running this command will have no effect if the group isn&#8217;t there)</p>
<pre class="brush: bash; title: ; notranslate">
sudo groupdel rvm
</pre>
<p>This should remove RVM from your system completely, and allow you to do a system wide install that will install to /usr/local/rvm as expected.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2011/06/03/completely-removing-rvm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Git Submodules</title>
		<link>http://www.mkoby.com/2011/05/02/using-git-submodules/</link>
		<comments>http://www.mkoby.com/2011/05/02/using-git-submodules/#comments</comments>
		<pubDate>Mon, 02 May 2011 14:30:20 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[git github]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1638</guid>
		<description><![CDATA[I recently spent some time setting up my *nix configuration files for Bash and VIM in a repository on Github. Since I used several git repositories for handling my various VIM plugins and color schemes, I utilized git’s submodule functionality &#8230; <a href="http://www.mkoby.com/2011/05/02/using-git-submodules/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-1644" title="Git Logo" src="http://www.mkoby.com/wp-content/uploads/2011/04/250px-Git-logo.svg_.png" alt="" width="250" height="96" />I recently spent some time setting up my *nix configuration files for Bash and VIM in a <a href="http://www.github.com/mkoby/dotmatrix">repository on Github</a>. Since I used several git repositories for handling my various VIM plugins and color schemes, I utilized git’s submodule functionality to link to the original repositories, allowing me to keep the plugins up to date.  Today I want to look a little closer at <a href="http://www.kernel.org/pub/software/scm/git/docs/git-submodule.html">Git submodules</a> and how I’m using them.</p>
<h2>Setting Up a Submodule</h2>
<p>Setting up a submodule in git, is actually fairly easy, you just pass in the repository address and the folder you want it to go to. So for example, on my VIM plugins, I use the <a href="https://github.com/tpope/vim-rails">vim-rails plugin by Tim Pope</a>. So to create a git submodule off of this repository for the plugin I use the following:</p>
<pre class="brush: bash; title: ; notranslate">
[~/git/dotmatrix]$ git submodule add \
https://github.com/tpope/vim-rails.git \
vim/bundle/vim-rails
</pre>
<p>This will create a “vim-rails” folder in vim/bundle/ and then download the files from the repository. Meaning that when I commit and then push my dotmatrix repository, it will upload the information for the submodules into my repository on Github. When I set up a new computer, I simply install Git, and then run the following:</p>
<pre class="brush: bash; title: ; notranslate">
[~/git]$ git clone \
git@github.com:mkoby/dotmatrix.git --recursive
</pre>
<p>You’ll note the “&#8211;recursive” argument, this is what tells git to first download the files for the repository and then recursively create the folders and download the files for the submodules.  I then run my setup script that sets up the various configuration files to their appropriate locations so that I’m ready to code with just a few commands.</p>
<h2>Updating the Submodules</h2>
<p>Once you have the submodules, you have to update them from time to time. Maybe there’s a bug fix, or maybe a new feature in your submodules. To update them is actually quite simple, you simply run the following command:</p>
<pre class="brush: bash; title: ; notranslate">
[~/git/dotmatrix]$ git submodule foreach \
git pull origin master
</pre>
<p>This goes through each submodule’s folder and runs a regular “git pull” on the folder bringing in the latest changes. The “foreach” argument is actually built into git’s submodule functionality, so there is no hidden magic here.</p>
<h2>Conclusion</h2>
<p>This is the primary place I’m using Git’s Submodule functionality, but this could be used to separate out various project files into separate repositories for better project organization. If anyone sees that I’m doing something wrong, just let me know as I’m always looking to improve my workflows.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2011/05/02/using-git-submodules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vim, RubyTest, &amp; RSpec</title>
		<link>http://www.mkoby.com/2011/01/29/vim-rubytest-and-rspec/</link>
		<comments>http://www.mkoby.com/2011/01/29/vim-rubytest-and-rspec/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 20:36:40 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[spec]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1613</guid>
		<description><![CDATA[If you use the Vim editor (or one of it&#8217;s counterparts like gVim), use the RubyTest Vim Plugin, and you use RSpec for some of your testing then you might run into a problem that I was experiencing where it &#8230; <a href="http://www.mkoby.com/2011/01/29/vim-rubytest-and-rspec/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you use the Vim editor (or one of it&#8217;s counterparts like gVim), use the RubyTest Vim Plugin, and you use RSpec for some of your testing then you might run into a problem that I was experiencing where it gives you the error:</p>
<pre class="brush: plain; title: ; notranslate">
:!echo 'spec -f specdoc spec/greeter_spec.rb -l 8' &amp;&amp; spec -f specdoc spec/greeter_spec.rb -l 8
spec -f specdoc spec/greeter_spec.rb -l 8
/bin/bash: spec: command not found

shell returned 127
</pre>
<p>Well, since I use RSpec 2.x (since I&#8217;m just now starting to use RSpec), the above error is quite annoying because the &#8216;spec&#8217; command isn&#8217;t really used anymore (at least from what I can find on the internet).  So to get the RubyTest plugin to work with RSpec (and the &#8216;rspec&#8217; command) you have to make a small change the plugin as marked below via a diff.</p>
<pre class="brush: diff; title: ; notranslate">
--- rubytest.vim.old	2011-01-29 14:29:19.897897990 -0600
+++ rubytest.vim	2011-01-29 14:30:16.487584334 -0600
@@ -21,10 +21,10 @@
   let g:rubytest_cmd_testcase = &quot;ruby %p -n '/%c/'&quot;
 endif
 if !exists(&quot;g:rubytest_cmd_spec&quot;)
-  let g:rubytest_cmd_spec = &quot;spec -f specdoc %p&quot;
+  let g:rubytest_cmd_spec = &quot;rspec -f d %p&quot;
 endif
 if !exists(&quot;g:rubytest_cmd_example&quot;)
-  let g:rubytest_cmd_example = &quot;spec -f specdoc %p -l %c&quot;
+  let g:rubytest_cmd_example = &quot;rspec -f d %p -l %c&quot;
 endif
 if !exists(&quot;g:rubytest_cmd_feature&quot;)
   let g:rubytest_cmd_feature = &quot;cucumber %p&quot;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2011/01/29/vim-rubytest-and-rspec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing in Rails, It&#8217;s Important</title>
		<link>http://www.mkoby.com/2011/01/28/testing-in-rails-its-important/</link>
		<comments>http://www.mkoby.com/2011/01/28/testing-in-rails-its-important/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 22:15:06 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[Just for Bands]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1603</guid>
		<description><![CDATA[Over the course of 2010 I spent most of my off time working on my side project, Just for Bands.  Specifically the first application to come from Just for Bands known as LiveShow.  The LiveShow application was written in Ruby on Rails with the plan to deploy it to Heroku (a successful plan I might add).  But the main point of this post is the idea of doing Test Driven Development (or TDD) in Ruby on Rails and how it allowed my partner and I to build an app quickly. <a href="http://www.mkoby.com/2011/01/28/testing-in-rails-its-important/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the course of 2010 I spent most of my off time working on my side project, <a title="Just for Bands" href="http://www.justforbands.com">Just for Bands</a>.  Specifically the first application to come from Just for Bands known as LiveShow.  The <a title="LiveShow - Simple Booking Management to Help Amplify Your Career" href="http://www.booktheliveshow.com">LiveShow</a> application was written in Ruby on Rails with the plan to deploy it to Heroku (a successful plan I might add).  But the main point of this post is the idea of doing Test Driven Development (or TDD) in <a title="Ruby on Rails" href="http://www.rubyonrails.org">Ruby on Rails</a> and how it allowed my partner and I to build an app quickly.</p>
<h3>Testing is Built In</h3>
<p>Something to know about testing frameworks and Ruby on Rails, there&#8217;s one built in.  The built in testing framework in Ruby on Rails is Test::Unit.  There are other frameworks that you can substitute in place of Test::Unit, but as far as &#8220;out of the box&#8221; frameworks go, you could do worse.  Having a framework built in allowed me to teach Erick (my partner, who had never worked in Rails before) how to follow the TDD workflow: Write test, run test (seeing it fail), write minimal code to make test pass, see test pass, <strong>refactor</strong> (bold because people tend to forget this step).  Erick had never done test driven development before, and I had never used Test::Unit (or written a Ruby on Rails app) before, so sticking with the built in framework allowed us to minimize the number of things we needed to learn from the get go.</p>
<h3>Delegation of Responsibilities</h3>
<p>Erick and I had a pretty strict division of responsibilities with regards to the work needed on the application.  Since I&#8217;ve been developing code professionally for almost a decade, I was the developer.  Erick was the sweeper, going between design and development duties where ever needed.  And we hired a graphic designer, John to handle the more complex design work.  Having such divisions allowed us to separate out the work.  But it left me in a position where I felt I couldn&#8217;t develop a ton of code because I didn&#8217;t have any screens to wire up.  This came from a lack of deep understanding of the MVC (Model View Controller) pattern that Rails is based on.  To keep it quick, this pattern means there&#8217;s separation between the UI, data, and processing layers.</p>
<h3>Testing Allows Coding Without The User Interface</h3>
<p>Because the MVC pattern is designed with separation of various application elements in mind, I was able to develop the backend code without any screens.  The idea of testing functionality as you develop using the built in test framework allowed most of the major functionality to be written and built while the design was worked out else where.  This was crucial to our ability to get the product built and launched in one year&#8217;s time, while learning new languages and tools.  Once the functionality was done, it was just a matter of tying it together with the user interface once we had a design we were happy with.  Of course there were things that didn&#8217;t work quite like expected when we got the interface wired up, but it was less work than doing it from scratch, and having to wait would have meant delaying the product.</p>
<p>Also, with the tests we were able to see if it was the UI not working correctly or if it was really our functionality.  In a couple of places we were testing for the wrong thing, or had an error in our test that caused a false positive.  But those were much quicker to iron out with the tests in place.  Having unit tested as we developed, we were able to save tons of time on the backend of the project fixing bugs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2011/01/28/testing-in-rails-its-important/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning a Programming Language a Year: A Plan</title>
		<link>http://www.mkoby.com/2010/10/04/learning-a-programming-language-a-year-a-plan/</link>
		<comments>http://www.mkoby.com/2010/10/04/learning-a-programming-language-a-year-a-plan/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 01:59:59 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[programming languages]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1585</guid>
		<description><![CDATA[If you're ever had the privilege of reading "Pragmatic Programmers" then you know that they recommend that programmers learn at least one new language a year.   Around this time last year, I made the decision to begin following that practice and chose Ruby/Ruby on Rails as my programming language for 2010.  While not directly related to my day job, I wanted to build something in the language.  With the help of my friend we were able to build Just for Bands in Ruby on Rails, both learning the language as we went along. <a href="http://www.mkoby.com/2010/10/04/learning-a-programming-language-a-year-a-plan/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-1586" style="margin: 4px;" title="The Pragmatic Programmer" src="http://www.mkoby.com/wp-content/uploads/2010/10/PragProg.jpg" alt="" width="265" height="333" />If you&#8217;re ever had the privilege of reading &#8220;The Pragmatic Programmer&#8221; then you know that they recommend that programmers learn at least one new language a year.   Around this time last year, I made the decision to begin following that practice and chose Ruby/Ruby on Rails as my programming language for 2010.  While not directly related to my day job, I wanted to build something in the language.  With the help of my friend we were able to build our first <a title="Just for Bands" href="http://www.justforbands.com">Just for Bands</a> web application in Ruby on Rails (<a title="Just for Bands: LiveShow" href="http://www.booktheliveshow.com">LiveShow</a>), both learning the language as we went along.  While I&#8217;m still by no means a Ruby/Rails expert, I do feel some what comfortable enough with the framework.  I still have to look up how to do things in Ruby, but this is just the side effect of learning a language.  You&#8217;ll almost never know everything about a language.</p>
<h3>Observation</h3>
<p>I believe that part of the problem is that I&#8217;m not surrounded by other Ruby/Rails programmers and doing that kind of work on day to day basis.  I spent 5 years in a C# office and thus was able to learn C# pretty well, and when I left that shop to better pursue programming, I was surround by &#8220;better&#8221; C# programmers that taught me even more.  I believe that I would be better at Ruby today (not having to look as many things up) if I was in an environment that was utilizing the language (and/or Rails framework) on a daily basis.</p>
<h3>The Plan</h3>
<p>I plan to continue in my attempt to learn a new language every year.  Upon further reading of several blog posts, I came across one that suggested that not only learning a new language but to also rotate the paradigms behind the language you learn (object oriented, dynamic, functional, etc).  This not only allows you to learn a new language but also new concepts and new ways of thinking about problems because a functional language requires a very different thought process than dynamic one.</p>
<p>So with that in mind, here&#8217;s what my language plan looks like over the next few years:</p>
<ul>
<li>Oct &#8211; Dec 2010: Ruby</li>
<li>2011: Clojure</li>
<li>2012: C</li>
</ul>
<p>I went with <a title="Clojure" href="http://clojure.org/">Clojure</a> for a couple of reasons.  The first being that it&#8217;s a functional language.  Secondly, it&#8217;s not tied to the Microsoft .NET platform (like F#).  While I&#8217;ve heard and seen good things about F#, I wanted to keep the Microsoft stack strictly a day-job thing.  Plus Clojure runs on the Java Virtual Machine, so it can really run on any machine that runs Java.  Finally, going with Clojure will bring some experience with <a title="Lisp Programming Language" href="http://en.wikipedia.org/wiki/Lisp_(programming_language)">Lisp</a>, since Clojure is very Lisp like.  This will bring me at least a smidging of experience with using Lisp, without actually having to learn Lisp.</p>
<p>As for C, some would argue that the C programming language is a &#8220;functional&#8221; language.  And while there is truth in that point of view, I personally view C as &#8220;systems language&#8221; (something used to write drivers, operating systems, etc).  Learning C is also a personal mission of mine, and one that I&#8217;ve had since  was 15 and never just banged it out.  Something else always came up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/10/04/learning-a-programming-language-a-year-a-plan/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Get Your Source Code Online</title>
		<link>http://www.mkoby.com/2010/09/21/get-your-source-code-online/</link>
		<comments>http://www.mkoby.com/2010/09/21/get-your-source-code-online/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 01:09:30 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[source control]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1569</guid>
		<description><![CDATA[While having a discussion with a friend of mine earlier today about how I would tell if programming candidate was up to snuff, I realized that a lot of programmers out there are probably missing a lot of chances to get better jobs, find more work (if they're a contractor), or just a simple learning opportunity by not having their source code for their personal programming projects stored in an online code repository.  <a href="http://www.mkoby.com/2010/09/21/get-your-source-code-online/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While having a discussion with a friend of mine earlier today about how I would tell if programming candidate was up to snuff, I realized that a lot of programmers out there are probably missing a lot of chances to get better jobs, find more work (if they&#8217;re a contractor), or just a simple learning opportunity by not having their source code for their personal programming projects stored in an online code repository.  With online code repositories like <a title="GitHub" href="http://www.github.com">GitHub</a>, <a title="Google Code" href="http://code.google.com">Google Code</a>, or <a title="CodePlex" href="http://www.codeplex.com/">CodePlex</a>, there is no excuse for a developer to not have the source code to their personal projects stored online.  GitHub even gives you the option to pay for an account that will allow you store some projects online privately.</p>
<p>A good developer already knows that using source control is a good practice that every developer should be following regularly.  So using a online source control repository, means that not only are you doing source control but you also have an offline copy of all your code.  If you computer was to ever crash, then getting back to where you left off isn&#8217;t nearly as difficult than having to start from scratch.</p>
<p>But one important aspect that doing this buys you, is when you&#8217;re talking to potential employer (or client), and they ask for code samples (as any good interviewer, interviewing people for a programming position should do) you&#8217;ll be able to point them at your repositories to allow them to peruse through and see what kind of work you can do.  Seeing someone&#8217;s code can really help a good developer interviewer see how a potential employee thinks out problems and organizes solutions to those problems.  This can be an important first step towards determining if the interviewee has some skill.</p>
<p>The downside is that a nice looking code repository can be faked.  A good interviewer will know what questions to ask and what answers to look for when asking about the solutions presented in your code repositories.  If they still have doubts, they could ask you (the interviewee) to take a coding test, but hey if you&#8217;re as good as you&#8217;re presenting to the interviewers then that should be cake, right?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/09/21/get-your-source-code-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rotation Cipher &#8211; My First Android App</title>
		<link>http://www.mkoby.com/2010/09/07/rotation-cipher-my-first-android-app/</link>
		<comments>http://www.mkoby.com/2010/09/07/rotation-cipher-my-first-android-app/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 11:42:56 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[mobile apps]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Rotation Cipher]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1562</guid>
		<description><![CDATA[Over the 3 day weekend I decided I was going to write a simple Android application to publish to the Android App Market to find out a few things.  First, I wanted to see if I could do it, write an app with some kind of simple functionality quickly.  Secondly, I wanted to see what the process for publishing to the Android App Market was like.  We hear all the time about how Apple disapproves apps, and kicks apps out of the market (sometimes almost, it would seem, randomly). <a href="http://www.mkoby.com/2010/09/07/rotation-cipher-my-first-android-app/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the 3 day weekend I decided I was going to write a simple Android application to publish to the Android App Market to find out a few things.  First, I wanted to see if I could do it, write an app with some kind of simple functionality quickly.  Secondly, I wanted to see what the process for publishing to the Android App Market was like.  We hear all the time about how Apple disapproves apps, and kicks apps out of the market (sometimes almost, it would seem, randomly).</p>
<p>I&#8217;m happy to say that I was successful.  I wrote a simple rotation cipher application (rotation cipher is also commonly known as the Caesar Cipher).  It took me a grand total of maybe 4 hours to write the code (most of it spent on getting the UI just right), and then literally 15 minutes to publish it to the App Market.  The moment I hit the &#8220;Publish&#8221; button, I was able to open the Android App Market on my phone, do a search, and find my app.  Now that&#8217;s quick.</p>
<p>If you want to download and mess with my app, but I promise is not really something to write home about, you can use the QR code below, or goto the <a title="Rotation Cipher on AppBrain" href="http://www.appbrain.com/app/koby.rotationcipher">AppBrain page</a> directly.</p>
<p style="text-align: center;"><a href="http://www.appbrain.com/app/koby.rotationcipher"><img class="aligncenter" title="Rotation Cipher QR Code" src="http://chart.apis.google.com/chart?cht=qr&amp;chs=150x150&amp;chl=market://search%3Fq%3Dpname:koby.rotationcipher" alt="" width="150" height="150" /></a>.</p>
<p>I&#8217;ve also <a title="Rotation Cipher at GitHub" href="http://github.com/mkoby/RotationCipher">open sourced the code at GitHub</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/09/07/rotation-cipher-my-first-android-app/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Emacs &amp; VI (Vim)</title>
		<link>http://www.mkoby.com/2010/05/07/emacs-vi-vim/</link>
		<comments>http://www.mkoby.com/2010/05/07/emacs-vi-vim/#comments</comments>
		<pubDate>Sat, 08 May 2010 00:54:19 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[editors]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[vi]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1529</guid>
		<description><![CDATA[The thing about editors like Emacs or Vim (VI Improved) is that they are completely cross platform.  There is a version of both that runs on all operating systems (Windows, Mac, Linux, etc).  In fact, VI is part of the Unix standard and any version of Unix doesn't actually qualify as Unix without VI being installed. <a href="http://www.mkoby.com/2010/05/07/emacs-vi-vim/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the last few months I&#8217;ve been on a kick to reconnect with some old skillsets I used to have and relearn Emacs.  While I was never particularly good at using emacs I could at least navigate files and understood buffers.  Visual Studio and Eclipse spoiled me and I forgot about such things.</p>
<p>The thing about editors like <a href="http://www.gnu.org/software/emacs/">Emacs</a> or <a href="http://www.vim.org/">Vim (VI Improved)</a> is that they are completely cross platform.  There is a version of both that runs on all operating systems (Windows, Mac, Linux, etc).  In fact, VI is part of the Unix standard and any version of Unix doesn&#8217;t actually qualify as Unix without VI being installed.</p>
<p>I started back on Emacs because that&#8217;s what I had spent the most time in back in the day (as they say).  But lately I&#8217;ve been reading that some colleagues and other programmers that I follow (blogs, twitter, etc) are using Vim these days.  Even going so far as to attempt to do their .NET programming in it, so I started looking at that again.  What follows below are some resources that might help you learn about these editors.  Learning either Emacs or Vim will allow you to have an editor that is available on all systems and thus you can truly learn one editor and use it the rest of your life regardless of operating system.</p>
<p>Emacs Resources:</p>
<ul>
<li><a href="http://peepcode.com/products/meet-emacs">Peep Code &#8211; Meet Emacs</a> ($9): This is a nice one hour screencast that covers many of the basics of using Emacs.  It covers navigation, buffers, plugins, and other general use topics.</li>
<li><a href="http://github.com/technomancy/emacs-starter-kit">Emacs Starter Kit</a> (<a href="http://github.com/mkoby/emacs-starter-kit">my personal fork</a>): This is a nice pre-configured emacs.d folder.  This comes with several plugins, modes, and other useful things for making Emacs a joy to work with, especially when it comes to dynamic languages.  My personal fork includes the color schemes, and yasnippets.</li>
<li><a href="http://fosscasts.com/screencasts/tag/Emacs">FOSSCasts Emacs</a>: Some more (free) screencasts for learning Emacs.</li>
<li><a href="http://www.emacswiki.org/">Emacs Wiki</a>: Many useful pages with lots of nice info about using and setting up various features in Emacs.</li>
</ul>
<p>Vim Resources:</p>
<ul>
<li><a href="http://www.derekwyatt.org/vim/vim-tutorial-videos/">Derek Wyatt&#8217;s Vim Tutorial Videos</a>: This awesome set of videos is designed to take you from novice to beyond novice with using Vim.  Derek is energetic enough that you almost never get bored and the videos are informative.</li>
<li><a href="http://vimcasts.org/">VimCasts</a>: While not so much for &#8220;beginners&#8221; there are lots of good screencasts here for Vim users.</li>
</ul>
<p>There you go.  Hopefully these will get you on your way to using an open source cross platform editor.  Do try and ignore the holy wars around these two editors, each one serves different people differently and as such what works for you might not work for someone else.  Find the one you like and use it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/05/07/emacs-vi-vim/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>H.264 vs. Theora (Software Patents)</title>
		<link>http://www.mkoby.com/2010/05/06/h-264-vs-theora-software-patents/</link>
		<comments>http://www.mkoby.com/2010/05/06/h-264-vs-theora-software-patents/#comments</comments>
		<pubDate>Thu, 06 May 2010 22:37:59 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[h.264]]></category>
		<category><![CDATA[patents]]></category>
		<category><![CDATA[theora]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1520</guid>
		<description><![CDATA[The H.264 video codec requires a license to use, the same way the Mp3 codec requires a license to use.  While the Theora and Vorbis codecs do not require such licenses, companies like Apple don't like to use them because they have their hands in other codecs (H.264 or AAC in Apple's case).   <a href="http://www.mkoby.com/2010/05/06/h-264-vs-theora-software-patents/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last week in response to an <a title="Open Letter to Steve Jobs" href="http://blogs.fsfe.org/hugo/2010/04/open-letter-to-steve-jobs/">open letter about </a><a href="http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC">H.264</a> and Theora, Steve Jobs said:</p>
<blockquote><p>All video codecs are covered by patents. A patent pool is being assembled to go after Theora and other “open source” codecs now. Unfortunately, just because something is open source, it doesn’t mean or guarantee that it doesn’t infringe on others patents. An open standard is different from being royalty free or open source.</p></blockquote>
<p>You&#8217;ll notice that Steve Jobs says that all video codecs are covered by patents.  However this is just not true.  <a href="http://www.theora.org/">Theora</a> is patent free and was designed as such.  The Theora codec is similar to the Vorbis codec for audio in that it is designed and written to be patent &amp; royalty free.  Anyone can implement it and use it without having to pay some governing body.</p>
<p>The thing about H.264 is that, while it might be an open standard (in otherwords anyone can write an implementation based on the published standard) it is not in fact royalty free.  The governing body (MPEG LA) has said that H.264 will remain royalty free for web video through 2015.  This means that come January 1, 2016, they could start asking for cash.  And not everyone is going to be able to pay for the right to use it.<br />
<span id="more-1520"></span></p>
<h3>Video Codecs, What are They?</h3>
<p>Before I go further I want to spend a few lines talking about video codecs.  What a video codec is, is an algorithm for encoding a video signal.  Different video codecs exist and serve different purposes.  The thing about H.264 is that it allows someone to encode higher quality video at smaller file sizes (which is a very good thing).  Apple has adopted H.264 as its video codec of choice, also Blu-Ray uses H.264 as it&#8217;s codec for encoding movies to the platform.  So H.264 is a really good codec and has been adopted by the those in industries who use video, and understandably so.  The idea of any codec is to get the highest possible quality into the smallest file.</p>
<p>The argument for which video codec to use for HTML5 is between H.264 and Theora.  Theora is a video encoding codec that is free, open source, and royalty free (no one has to pay to use it or implement it).  The argument that Steve Jobs is making is that even though Theora is open source and royalty free, it infringes on patents held by others.</p>
<h3>The Issue of Software Patents</h3>
<p>Lets get this out of the way.  Patents are, at their core, a good idea.  A company invents something, they patent it.  In return for making the idea public knowledge they get exclusive use of the idea for a pre-determined period of time.  During that time anyone using the invention has to license it from the company that holds the patent.  This is a good thing as it makes ideas public and still allows the company to retain some exclusive use of it.  It shows other people what can be done and to some degree encourages innovation, because if you can see how someone did something it might lead to other ideas.</p>
<p>Software patents however are a horrible idea.  The idea that you can patent a way to do something is a little more confining and limits innovation.  If I need to write an algorithm that takes two numbers and returns to me the largest of the 2 numbers, I might do something like</p>
<pre class="brush: cpp; title: ; notranslate">
    int ReturnLargerNumber(int a, int b) {
        if(a &gt; b )
            return a;

        return b;
    }
</pre>
<p>Now, someone later might come along and do something different but similar (as there aren&#8217;t a ton of ways to write this kind of code).  If I had a patent on returning a larger number then I could sue anyone who implements it, no matter how similar or different.  Keep in mind that this is a really lame example but it should demonstrate the idea that patenting an implementation is a bad idea.  This is the heart of the software patent issue.  If someone came along and had a better way to return the larger of two numbers, I could sue them thus holding back a better solution to the problem.</p>
<p>This all comes down to the idea that there is more than one way to do something.  What Steve Jobs would like us to believe is that there is no possible way that Theora could achieve the same level of compression and quality as H.264 unless it infringes on the patents involved in H.264, thus doing things exactly the same way.  Again, such a argument is good for his business but doesn&#8217;t exactly promote an &#8220;open web&#8221; that he seems to be so vocal about.</p>
<p>When it comes to writing software there is almost always more than one way to achieve the same goal.  You can give 5 programmers the same problem and the same tools to solve it and chances are you&#8217;ll get 5 different solutions.  You might get a couple that are similar but they&#8217;ll still be different.  So when while Theora might serve the same purpose as H.264, it doesn&#8217;t mean they achieve their goals in the same way.</p>
<p>I feel that I should also note that, in most cases where a company has accused an open source project of infringing on patents, the company making the accusations has been unable to prove so in court.  In most cases (read: almost all) the accusing company was making false claims in hopes of spreading fear, uncertainty, and doubt (or FUD).</p>
<h3>The Case of Open and Royalty Free</h3>
<p>In the end this whole thing comes down to the idea of an open web.  Steve Jobs says he wants an open web but then says that he won&#8217;t use Theora because of possible patent issues.  It would make more sense for him to put some time into ensuring Theora and Vorbis don&#8217;t infringe on any patents by releasing patches and pushing their use if he truly wanted an open web.</p>
<p>The H.264 video codec requires a license to use, the same way the Mp3 codec requires a license to use.  While the Theora and Vorbis codecs do not require such licenses, companies like Apple don&#8217;t like to use them because they have their hands in other codecs (H.264 or AAC in Apple&#8217;s case).  </p>
<p>Apple created WebKit (the rendering engine of the Safari web browser) by forking an existing open source project called KHTML and fixing the issues they saw with it.  They then in turn released WebKit as an open source project.  Why not do something similar with Theora and Vorbis?  He&#8217;s already done it once, why not do it again.  If he was really about an open web, this would be done already.</p>
<p>It makes sense to look into things that are open sourced and royalty free when it comes to internet standards, because not everyone can pay license fees if they want to be completely compatible.  And if we rely on open standards and royalty free codecs, then everyone can enjoy the same (or at least very similar) user experience on the web.  As it stands right now, only Safari and Chrome implement H.264 for HTML5.  Mozilla implements Theora (open source company is always going to implement an open source solution over a licensed solution).  Chrome actually includes support for both.</p>
<p>As long as people disagree on what to implement it is going to give web users an inconsistent experience and to me, that&#8217;s the largest part of this problem.  The idea of standards is to ensure an consistent experience across implementations and if people can&#8217;t agree on what goes into a standard programmers are stuck having to do more work to ensure that consistent experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/05/06/h-264-vs-theora-software-patents/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Alt.NET Houston Open Spaces 2010</title>
		<link>http://www.mkoby.com/2010/03/22/alt-net-houston-open-spaces-2010/</link>
		<comments>http://www.mkoby.com/2010/03/22/alt-net-houston-open-spaces-2010/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 16:30:03 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[alt.net]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[houston]]></category>
		<category><![CDATA[open spaces]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1507</guid>
		<description><![CDATA[This year, Alt.NET Houston will be hosting it&#8217;s 2nd Open Spaces Conference.  Last years was such a success that many wanted us to do it again. The What and When This year the conference will be held from Friday, April &#8230; <a href="http://www.mkoby.com/2010/03/22/alt-net-houston-open-spaces-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://altnethouston.com/"><img class="aligncenter size-medium wp-image-1508" title="Alt.NET Houston Open Spaces" src="http://www.mkoby.com/wp-content/uploads/2010/03/altnethouston_os_logo-300x45.png" alt="Alt.NET Houston Open Spaces" width="300" height="45" /></a></p>
<p>This year, Alt.NET Houston will be hosting it&#8217;s 2nd <a href="http://en.wikipedia.org/wiki/Open_Space_Technology">Open Spaces Conference</a>.  Last years was such a success that many wanted us to do it again.</p>
<h3>The What and When</h3>
<p>
This year the conference will be held from Friday, April 30th – Sunday, May 2nd.  We’re adding Friday (starting at noon) for workshops.  We will have 2 concurrent 4 hour workshops that you can attend if you like.  The topic for these workshops is still to be determined but will be announced closer to the time of the conference.</p>
<p>Friday evening we will hold the planning session, where we will all gather and suggest topics that we either want to present/convene, or that we’d like to hear about.  This is an important part of the event.  Your satisfaction with the conference is completely in your hands.  If you want to suggest a session, it&#8217;s important that you are there Friday evening.
</p>
<h3>The Where</h3>
<p>The conference will be held at the Houston Microsoft office, located on the west side of town.  You can find a map <a href="http://maps.google.com/maps/place?cid=17290400926183237605&#038;gl=us&#038;cd=1&#038;ei=ZDimS7vwLoaMzgSxyLj1Cg&#038;sig2=S1UkNOMmnqFQZDTR-Q4iLA&#038;sll=29.745068,-95.478151&#038;sspn=0.163192,0.275711&#038;ie=UTF8&#038;ll=29.93173,-95.8461&#038;spn=0,0&#038;z=11">here</a>.</p>
<h3>How Much</h3>
<p>This year the price of admission is $20.  This is being done for 2 reasons.  First and foremost, it gives us some money to supply food, snacks, and beverages.  Secondly, it ensures that people will be less likely to sign up and not attend.  We are making an exception for students though, so if you are a college student interested in attending, please contact <a href="http://www.flux88.com">Ben Scheirman</a> before registering. </p>
<h3>Registration</h3>
<p>You can register at the <a href="http://altnethouston.com/">Alt.NET Houston website</a>.  <a href="http://altnethouston.com/#registration">Here is a direct link</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/03/22/alt-net-houston-open-spaces-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Managing Multiple Repositories With Git</title>
		<link>http://www.mkoby.com/2010/03/14/managing-multiple-repositories-with-git/</link>
		<comments>http://www.mkoby.com/2010/03/14/managing-multiple-repositories-with-git/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 00:28:49 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1504</guid>
		<description><![CDATA[I&#8217;ve started a small side project with a friend of mine. It&#8217;s a Ruby on Rails project and he has been doing the design work while I&#8217;ll be handling some of the Ruby/Rails backend pieces. For many reasons we went &#8230; <a href="http://www.mkoby.com/2010/03/14/managing-multiple-repositories-with-git/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started a small side project with a friend of mine.  It&#8217;s a Ruby on Rails project and he has been doing the design work while I&#8217;ll be handling some of the Ruby/Rails backend pieces.  For many reasons we went with Git as our source control system, the main reason for this is because we are separated by a few states.  Since he has been adding UI elements to our app, I had to figure out how to bring his changes down to my local repository while maintaining the separation I need so his work doesn&#8217;t mix with my master or dev branches (at least not yet).  The reason I want to not bring his changes into my master or dev branches yet is because it&#8217;s not done, but I do want to see and &#8220;touch&#8221; the UI work he&#8217;s doing.  I figured I&#8217;m not the only person looking to do this so I figured I&#8217;d throw up a quick blog post about it.</p>
<p>The first thing you have to do is add the git remote for the other user&#8217;s code.</p>
<pre class="brush: plain; title: ; notranslate">
git remote add my_new_remote git@github.com:mypartner/OurProject.git
</pre>
<p>This adds a git remote, with the name &#8220;my_new_remote&#8221; and that is pointed at my partner&#8217;s fork of our project.</p>
<p>Next you&#8217;ll want to fetch the remote repository (as usual, with git this will include the entire change log, and all files).</p>
<pre class="brush: plain; title: ; notranslate">
git fetch my_new_remote
</pre>
<p>After you have the remote, you can create a new local branch that points at the newly fetched code.  Below I create a branch called &#8220;partner_dev&#8221; and point it at my_new_remote/dev (assuming that there is a branch called dev in my partner&#8217;s repository)</p>
<pre class="brush: plain; title: ; notranslate">
git checkout -b partner_dev my_new_remote/dev
</pre>
<p>Now you can look at the changes made to the repository but keep it separate from your work.  This is a nice way to mess around with other people&#8217;s work without having to bring it into your own.  I&#8217;ve been using this method to checkout the UI template changes my partner has been committing every few days.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/03/14/managing-multiple-repositories-with-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Craftsmanship: What is a Craftsman</title>
		<link>http://www.mkoby.com/2010/03/06/software-craftsmanship-what-is-a-craftsman/</link>
		<comments>http://www.mkoby.com/2010/03/06/software-craftsmanship-what-is-a-craftsman/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 23:44:21 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1501</guid>
		<description><![CDATA[A couple of weekends ago, I attended an Open Spaces developer conference in Austin, TX.  The conference had a specific focus on the idea of software craftsmanship.  While a nice fishbowl discussion on the open night of the event touched &#8230; <a href="http://www.mkoby.com/2010/03/06/software-craftsmanship-what-is-a-craftsman/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A couple of weekends ago, I attended an Open Spaces developer conference in Austin, TX.  The conference had a specific focus on the idea of software craftsmanship.  While a nice fishbowl discussion on the open night of the event touched on a lot of ideas, I feel that some people missed the point at what a craftsman is, and where the desire to be a craftsman should start.</p>
<p>The main issue I had with many people&#8217;s opinions was that they were all targeted at explaining to managers, c-level folks, and others about why craftsmanship was important.  They also focused heavily on how to explain to those people why they should hire someone that is a craftsman over someone that would (in most cases) be cheaper.  I felt this was the wrong approach because it was outward rather than inward in it&#8217;s direction.  How can you explain to a manager why hiring a craftsman is important when we personally don&#8217;t know what a craftsman is or why being one is important.  I heard very little discussion about what a craftsman is or why you&#8217;d want to become one.</p>
<p>So today, I&#8217;m going to talk a little bit about what I feel being a craftsman is and how that idea can be applied to the development/creation of software.  And to do that, we have to start at the beginning and define what a craftsman is.</p>
<h3>What is a Craftsman</h3>
<p>If we <a title="Craftsman Definition" href="http://www.merriam-webster.com/dictionary/craftsman">look up craftsman in the dictionary</a>, we see something like this</p>
<blockquote><p>A person who practices a trade or handicraft</p></blockquote>
<p>So by definition, a craftsman practices a trade.  Our trade is that of software development.  When people think of the word &#8220;craftsman&#8221; they generally think in terms of woodworking.  A craftsman takes a piece of wood and turns it into something beautiful.  This kind of thing generally takes lots of practice and time.  Time spent messing up, cutting a piece too short, splitting a piece of wood, and so on.  You have to do a lot of things wrong in order to learn how to do them correctly.  Eventually you become a skilled craftsman.  You learn a lot of things to not do.  In generally becoming a craftsman is more about learning what not to do than it is about learning what the right way is.  But the main point here is that the craftsman spends time on his craft.  He works at it daily.  Looking for ways to improve and build a better whatever.  Over time the craft is perfected, at least as much as it can be.</p>
<h3>A Software Craftsman</h3>
<p>When it comes to software, there are a lot of ways to do things.  You can test, you can design, you can encapsulate, inherit, override, and continuously integrate.  You can spend hours refactoring, changing bits of code until they&#8217;re just so tight that on occasion you can&#8217;t understand it anymore.  All new software developers start out simply by trying to make the computer do something.  Sometimes it&#8217;s just about getting it to show text on a screen.  Eventually they graduate to automating tasks, very functionally (do this, then do that, then to something else) and without very little thought to re-usability.  Then someone shows them how to make methods of common tasks, and then eventually how to break those methods into classes (if their doing object oriented programming).  But it&#8217;s a slow process, some of these things can take years to master, many times they learn how to be better from someone else.</p>
<p>The general idea is the same though.  To become a good programmer, you can&#8217;t just do it in a nine to five fashion.  You have to practice it at home, spend time working on learning new things, finding those new ways to not do something.  You&#8217;re not going to learn everything by doing it at a job day in and day out.  The person learning to build furniture is going to learn how not to make chair by making the chair wrong a few times and so the same goes for someone looking to build software.  They will go through a lot of wrong solutions before they start understanding why the correct one is, in fact, correct.  Sure, someone could tell them, but then they haven&#8217;t experienced something for themselves and they don&#8217;t understand for themselves why it&#8217;s the right way.  They only know it&#8217;s the right way because someone told them so.</p>
<h3>Driving to be Better</h3>
<p>Really it all boils down to a personal choice.  Are you going to work to be better at your trade/craft or are you going to linger and stay in that little space that you are so comfortable in.  Why is software craftsmanship important to you?  Why should your manager care if you don&#8217;t?  Why should anyone care if you don&#8217;t?  In the end being a craftsman (in anything) isn&#8217;t about anything other than being the best you can be at your craft.  If you are developing software then you will strive to create better software regardless of who it&#8217;s for.  In the end, you&#8217;ll do the things that make you a better craftsman because they are why they make you better.  Not because someone told you to do it that way.  In the end, we all want to be the best at whatever we do.  That to me is the sign of a craftsman.  Someone who as a constant drive to be better at whatever it is they do.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/03/06/software-craftsmanship-what-is-a-craftsman/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pablo&#8217;s Fiesta &#8211; Los Techies Open Spaces</title>
		<link>http://www.mkoby.com/2010/02/28/pablos-fiesta-los-techies-open-spaces/</link>
		<comments>http://www.mkoby.com/2010/02/28/pablos-fiesta-los-techies-open-spaces/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 02:44:31 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1496</guid>
		<description><![CDATA[Over the weekend I made a trip to Austin to attend the Los Techies' Open Spaces event entitled Pablo's Fiesta.  This was an Open Spaces Conference where the focus was on software craftsmanship.  There were a lot of good sessions and I managed to be introduced to several new ideas, technologies, and even a new programming language.  While I'm still letting a lot of what I saw, heard, and read while there sink in, you can expect some blog posts in the (near) future about some of the things that were brought up and demonstrated. <a href="http://www.mkoby.com/2010/02/28/pablos-fiesta-los-techies-open-spaces/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-1497 alignright" style="margin: 3px;" title="Los Techies Open Spaces Name Tag" src="http://www.mkoby.com/wp-content/uploads/2010/02/lostechies_nametag-300x215.png" alt="Los Techies Open Spaces Name Tag" width="300" height="215" />Over the weekend I made a trip to Austin to attend the <a title="Los Techies" href="http://www.lostechies.com">Los Techies</a>&#8216; Open Spaces event entitled <a title="Pablo's Fiesta" href="http://fiesta.lostechies.com">Pablo&#8217;s Fiesta</a>.  This was an <a title="Open Space - Wikipedia" href="http://en.wikipedia.org/wiki/Open_Space_Technology">Open Spaces Conference</a> where the focus was on software craftsmanship.  There were a lot of good sessions and I managed to be introduced to several new ideas, technologies, and even a new programming language.  While I&#8217;m still letting a lot of what I saw, heard, and read while there sink in, you can expect some blog posts in the (near) future about some of the things that were brought up and demonstrated.</p>
<p>This was my first Open Spaces conference (I missed the one held in Houston last year due to the recent birth of my son), and I have to say I quite enjoyed the format.  There didn&#8217;t seem to be quite as many breakout sessions at this one as I&#8217;ve heard Open Spaces can be known for, but maybe they happened and I missed them.  The people doing the talks did a great job and the open atmosphere was great.  I was in one session where the speaker had someone take over his laptop to give a demonstration on some areas of the topic he wasn&#8217;t too familiar with and it was great.</p>
<p>A wiki was set up for the conference, and people were uploading session notes, links, and even recordings of some of the sessions, so check out that wiki at <a href="http://pablosfiesta.pbworks.com/">http://pablosfiesta.pbworks.com/</a></p>
<p>Having attended this conference, I&#8217;m now even more excited about the Open Spaces that the Housotn Alt.NET group is working to put together for the first weekend in May.  The fact that there are so many people that are willing to share their experiences and knowledge with others is great and hopefully I continue to surround myself with these kinds of people.  So bring on the Houston Open Spaces conference.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/02/28/pablos-fiesta-los-techies-open-spaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gEdit Color Themes</title>
		<link>http://www.mkoby.com/2010/02/13/gedit-color-themes/</link>
		<comments>http://www.mkoby.com/2010/02/13/gedit-color-themes/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 23:54:03 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[gedit]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1490</guid>
		<description><![CDATA[I've been using gEdit (the default text editor in Ubuntu) to do some Ruby and Ruby on Rails programming the last few weeks.  I was using the RadRails plugin for Eclipse but for some reason my computer slows down considerably when using Eclipse.  The thing is, gEdit comes with a couple of nice color themes by default but the darker Oblivion theme wasn't quite to my liking.  So I a quick Google search later and I found a repository on GitHub that contains several nice gEdit color themes.  I've currently settled on the DarkMate them (see screenshot below). <a href="http://www.mkoby.com/2010/02/13/gedit-color-themes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using gEdit (the default text editor in Ubuntu) to do some Ruby and Ruby on Rails programming the last few weeks.  I was using the <a title="Aptana - RadRails" href="http://www.radrails.org/">RadRails plugin for Eclipse</a> but for some reason my computer slows down considerably when using Eclipse.  The thing is, gEdit comes with a couple of nice color themes by default but the darker Oblivion theme wasn&#8217;t quite to my liking.  So I a quick Google search later and I found a repository on GitHub that contains several nice gEdit color themes.  I&#8217;ve currently settled on the DarkMate them (see screenshot below).</p>
<p>So if you&#8217;re looking for some nice gEdit color themes, check out <a title="mig's gedit-themes on GitHub" href="http://github.com/mig/gedit-themes">mig&#8217;s repository</a>.</p>
<div id="attachment_1491" class="wp-caption aligncenter" style="width: 464px"><a href="http://www.mkoby.com/wp-content/uploads/2010/02/gedit-darkmate-theme.png"><img class="size-full wp-image-1491 " style="margin-top: 3px; margin-bottom: 3px;" title="gedit-darkmate-theme" src="http://www.mkoby.com/wp-content/uploads/2010/02/gedit-darkmate-theme.png" alt="gedit-darkmate-theme" width="454" height="409" /></a><p class="wp-caption-text">Click for full size</p></div>
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/02/13/gedit-color-themes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Learning the Ruby Programming Language</title>
		<link>http://www.mkoby.com/2010/01/25/learning-the-ruby-programming-language/</link>
		<comments>http://www.mkoby.com/2010/01/25/learning-the-ruby-programming-language/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 15:30:52 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1467</guid>
		<description><![CDATA[I've set out to learn a new programming language (for several reasons that will be disclosed at a later date), the language of choice was Ruby, so that eventually I could learn some Ruby on Rails for the purpose of getting back into web development.  I have found a couple of nice ways to help with learning the Ruby programming language. <a href="http://www.mkoby.com/2010/01/25/learning-the-ruby-programming-language/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-1469" style="margin: 3px;" title="Ruby Programming Language" src="http://www.mkoby.com/wp-content/uploads/2010/01/200px-Ruby_logo.svg_.png" alt="200px-Ruby_logo.svg" width="140" height="140" />I&#8217;ve set out to learn a new programming language (for several reasons that will be disclosed at a later date), the language of choice was <a title="Ruby Programming Language" href="http://www.ruby-lang.org/en/">Ruby</a>, so that eventually I could learn some <a title="Ruby on Rails" href="http://www.rubyonrails.org">Ruby on Rails</a> for the purpose of getting back into web development.  I have found a couple of nice ways to help with learning the Ruby programming language.</p>
<h3>Ruby Koans</h3>
<p>A couple weeks back while attending a geek dinner, someone at the table mentioned the <a title="Ruby Koans" href="http://github.com/edgecase/ruby_koans">Ruby Koans</a> as an interesting way to learn the Ruby programming language.  They were right.  What are the Ruby Koans?  They are a set of unit tests all set to fail and the object is to make each test past, one at a time.  The goal is that, as you complete the code to make each test pass, you eventually learn the Ruby language.  I&#8217;ve been doing them for the last week and a half with great results.  I&#8217;m by no means an expert in Ruby but I am learning some interesting things about the language.</p>
<h3>RubyQuiz.com</h3>
<p><a title="Ruby Quiz" href="http://rubyquiz.com/">RubyQuiz.com</a> is an archive website of the first 150-ish quizzes that took place on the <a title="Ruby Talk Mailing List" href="http://www.ruby-lang.org/en/20020104.html">Ruby Talk mailing list</a>.  While the quizzes still happen on the mailing list, this website only has the first 156 quizzes posted to the mailing list.  The idea is that you are presented with a problem that you must solve using the Ruby language.  Several solutions are provided for each quiz so you can compare your answers.  It&#8217;s a great way to get your mind thinking in a Ruby way, once you&#8217;ve become familiar with the language (see the Koans above).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2010/01/25/learning-the-ruby-programming-language/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TwitterNET Project: A .NET Twitter Library</title>
		<link>http://www.mkoby.com/2009/10/19/twitternet-project-a-net-twitter-library/</link>
		<comments>http://www.mkoby.com/2009/10/19/twitternet-project-a-net-twitter-library/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 19:45:58 +0000</pubDate>
		<dc:creator>Michael Koby</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.mkoby.com/?p=1402</guid>
		<description><![CDATA[Over the weekend, I finally finished a large chunk of wrapping the Twitter API into a .NET 3.5 library using C#.  With the exception of the OAuth &#038; Search methods, this most of the REST methods are complete (only 3 are not done at this time but should be done soon).  The project is located on Github by clicking here. <a href="http://www.mkoby.com/2009/10/19/twitternet-project-a-net-twitter-library/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the weekend, I finally finished a large chunk of wrapping the Twitter API into a .NET 3.5 library using C#.  With the exception of the OAuth &amp; Search methods, this most of the REST methods are complete (only 3 are not done at this time but should be done soon).  The project is located on Github by clicking <a title="TwitterNET on Github" href="http://github.com/mkoby/TwitterNET">here</a>.</p>
<p>The reason for the lack of OAuth and Search being complete is due mainly to 2 simple facts:</p>
<ol>
<li>The search methods return types only come back in the JSON format, and my experience in parsing JSON pretty much non-existent.</li>
<li>I don&#8217;t understand OAuth enough to feel I can implement it correctly.  I&#8217;ll get to this eventually but it&#8217;s not overly necessary to do everyday Twitter stuff (update status, read friends timeline, etc)</li>
</ol>
<p>Also, there is a wiki with some more information as well as some example code to get folks started, so be sure to check that out as well.</p>
<p>Again her are the links to the project and its wiki:  <a title="TwitterNET on Github" href="http://github.com/mkoby/TwitterNET">TwitterNET on Github</a> &amp; <a title="TwitterNET Wiki" href="http://wiki.github.com/mkoby/TwitterNET">TwitterNET Wiki</a>.</p>
<p>I&#8217;m hoping to see some forks and some user contributions, I currently have the project under the GPL 2.0, but  I&#8217;ll probably change this to a more friendly BSD style license in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkoby.com/2009/10/19/twitternet-project-a-net-twitter-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

