<?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>World Wide Mike &#187; Geek</title>
	<atom:link href="http://mmm.beachtemple.com/blog/category/geek/feed/" rel="self" type="application/rss+xml" />
	<link>http://mmm.beachtemple.com/blog</link>
	<description>Notes from the Journey that is Life</description>
	<lastBuildDate>Sun, 12 Apr 2009 12:16:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Keep Your Source Clean: Don&#8217;t Worry About Generated Files</title>
		<link>http://mmm.beachtemple.com/blog/2009/04/12/keep-your-source-clean-dont-worry-about-generated-files/</link>
		<comments>http://mmm.beachtemple.com/blog/2009/04/12/keep-your-source-clean-dont-worry-about-generated-files/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 12:16:14 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://mmm.beachtemple.com/blog/?p=199</guid>
		<description><![CDATA[Don't dirty your source and don't worry about generated files.]]></description>
			<content:encoded><![CDATA[<p>Working with OpenSim recently, I didn&#8217;t want to have to worry about checking in generated files by accident, or filtering my <code>git status</code> output in order to determine what I changed and was generated. In this post, I&#8217;ll describe how I do this and outline some tools I use to make it easy.</p>
<p>The basic premise in my development style is that I build the project in a separate directory than where the checked out code lives:</p>
<pre>
# checked out code lives in ~/source/opensim
$ cd ~/source
$ svn co http://opensimulator.org/svn/opensim/trunk opensim

# the workspace is where I build and run the project
$ mkdir ~/source/workspace
</pre>
<p>Then, to build and run the code:</p>
<pre>
# first I rsync the code to the workspace, skipping .svn folders
# and other unneeded files
$ rsync -avz --exclude=\.svn [...] ~/source/opensim/ ~/source/workspace/

# then I run prebuild and compile
$ cd ~/source/workspace
$ mono bin/Prebuild.exe /target nant
$ nant
</pre>
<p>This way I never have to filter through generated files when inspecting or committing my changes, and I don&#8217;t commit generated files by mistake.</p>
<h3>Tools</h3>
<p>I have a set of scripts I use when developing OpenSim on Linux (I also use some of the scripts on Windows with cygwin). The scripts are <a href="http://github.com/mikem/opensim-dev-scripts/tree/master"> available on github</a>.</p>
<p>All those above commands are encapsulated in <a href="http://github.com/mikem/opensim-dev-scripts/blob/master/os_build.sh"><code>os_build.sh</code></a>, a single script which takes two arguments, the first is the name of the directory in <code>~/source/</code> in which the source<br />
lives, and the second is the name of the directory in <code>~/source/</code> in which to build:</p>
<pre>
# this one command performs the rsync, prebuild and nant steps from above
$ os_build.sh opensim workspace
</pre>
<p>Another key part is the <a href="http://github.com/mikem/opensim-dev-scripts/blob/master/os_clean_workspace.sh"><code>os_clean_workspace.sh</code></a> script which removes all build artifacts from the workspace directory, while keeping all configuration files in<br />
place. I use this whenever I need to do a clean build.</p>
<p>My typical session looks like this:</p>
<pre>
$ cd ~/source/opensim
$ git svn rebase                   # pull the latest changes from upstream
$ vim -p file1 file2 ...           # open the files I'll be working on

... edit source ...

$ os_build.sh opensim workspace    # rsync, prebuild, build

... in another terminal, run &#038; test ...
... make more edits ...

# sync only changed files, rebuild only what's needed
$ os_build_sh opensim workspace

... make big changes requiring clean build ...

# removes everything except config files
$ os_clean_workspace.sh workspace
$ os_build.sh opensim workspace
</pre>
<p>There are also other helper scripts for <a href="http://github.com/mikem/opensim-dev-scripts/blob/master/os_clean_database.sh">cleaning the database</a>, <a href="http://github.com/mikem/opensim-dev-scripts/blob/master/os_run_tests.sh">running unit tests</a>, and other tasks. Have a look!</p>
]]></content:encoded>
			<wfw:commentRss>http://mmm.beachtemple.com/blog/2009/04/12/keep-your-source-clean-dont-worry-about-generated-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git post-receive Hook</title>
		<link>http://mmm.beachtemple.com/blog/2009/04/06/git-post-receive-hook/</link>
		<comments>http://mmm.beachtemple.com/blog/2009/04/06/git-post-receive-hook/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 00:16:09 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[buildbot]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://mmm.beachtemple.com/blog/?p=188</guid>
		<description><![CDATA[Notes on setting up automated tasks when commits are pushed to a central git repository.]]></description>
			<content:encoded><![CDATA[<p>At my job we use <a href="http://git-scm.com/">git</a> for version control, and I wanted to do a few things whenever we pushed changes to the main tree. It took me a little bit of effort to figure out how it works, and below are my notes.</p>
<p>The <code>post-receive</code> hook is called when the repository receives changes. Let&#8217;s assume I have a git repository on my development machine that is a clone of a public git repository on a server. Then, when I run <code>git push</code> in my local repository in order to push my commits to the public repository, the <code>post-receive</code> hook is called on the public repository on the server.</p>
<h3>Email Notification</h3>
<p>On Debian-based systems there is an example email notification post-receive hook in <code>/usr/share/doc/git-core/contrib/hooks/post-receive-email</code>. It&#8217;s also available online from the <a href="http://github.com/git/git/tree/master">git repo on github</a> in the <code>contrib/hooks</code> directory.</p>
<p>In the repository that will be receiving commits (the public repository on the server, in the example above), first we need to make the <code>post-receive</code> hook executable:</p>
<pre>
$ cd /path/to/git/repo/.git/hooks
$ chmod +x post-receive
</pre>
<p>Then we need to call the <code>post-receive-email</code> script from inside this <code>post-receive</code> hook. Open <code>.git/hooks/post-receive</code> with your favorite editor and make sure this line exists:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">. <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>post-receive-email</pre></div></div>

<p>Notice we&#8217;re not executing the <code>post-receive-email</code> script, we&#8217;re sourcing it.</p>
<p>Next, we need to tell git where to send the email to. The <code>hooks.mailinglist</code> property controls this:</p>
<pre>
$ cd /path/to/git/repo
$ git config hooks.mailinglist "mailinglist@example.com"
</pre>
<p>At this stage emails will be sent each time changes are pushed to the public git repository containing a summary of the new changes.</p>
<p>By default, emails refer to the project as &#8220;UNNAMED PROJECT&#8221;. To change this, edit <code>.git/description</code>.</p>
<p>For further customization options, look inside <code>post-receive-email</code>. For example:</p>
<pre>
$ cd /path/to/git/repo
# envelopesender? see `man sendmail` for the -f switch
$ git config hooks.envelopesender "git@example.com"
$ git config hooks.emailprefix "[MY PREFIX] "  # note the trailing space
</pre>
<h3>Kicking Off a Buildbot Build</h3>
<p>You may also want to have Buildbot start a build from the <code>post-receive</code> hook. Like the email script, the <a href="http://buildbot.net/trac/browser/contrib/git_buildbot.py">Buildbot git script</a> expects revision hashes on standard input. The <code>post-receive</code> script then needs to be modified a little to pass the hashes it receives via standard input to all the scripts it invokes. Here&#8217;s a new copy of <code>post-receive</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> oldrev newrev refname
<span style="color: #000000; font-weight: bold;">do</span>
   <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$oldrev</span> <span style="color: #007800;">$newrev</span> <span style="color: #007800;">$refname</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">sh</span> <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>post-receive-email
   <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$oldrev</span> <span style="color: #007800;">$newrev</span> <span style="color: #007800;">$refname</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>python <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>git_buildbot.py
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>This script first reads <code>oldrev</code>, <code>newrev</code>, and <code>refname</code> from standard input, then pipes those values into <code>post-receive-email</code> and <code>git_buildbot.py</code>. We loop until there is no more input, presumably because another push may happen while we&#8217;re executing.</p>
]]></content:encoded>
			<wfw:commentRss>http://mmm.beachtemple.com/blog/2009/04/06/git-post-receive-hook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting With the Times</title>
		<link>http://mmm.beachtemple.com/blog/2007/10/20/getting-with-the-times/</link>
		<comments>http://mmm.beachtemple.com/blog/2007/10/20/getting-with-the-times/#comments</comments>
		<pubDate>Sat, 20 Oct 2007 07:01:47 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Play by Play]]></category>
		<category><![CDATA[social networking]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://mmm.beachtemple.com/blog/2007/10/20/getting-with-the-times/</guid>
		<description><![CDATA[You can find Mike in various places across the world wide web. Read the post for more details :)]]></description>
			<content:encoded><![CDATA[<p><img src="/blog/custom-content/2007/10/web2.png" alt="Web 2.0" title="Web 2.0" class="alignright" />Recently I&#8217;ve buckled to the immense peer pressure and joined <a href="http://www.facebook.com">Facebook</a>. Once that happened, I went on a Web 2.0 spree, joining a bunch of other services. Here they are, with links to my profiles:</p>
<ul>
<li><a href="http://del.icio.us">del.icio.us</a> (<a href="http://del.icio.us/mmazur/">my bookmarks</a>)</li>
<li><a href="http://twitter.com">Twitter</a> (<a href="http://twitter.com/mmazur">my profile</a>)</li>
<li><a href="http://pownce.com">Pownce</a> (<a href="http://pownce.com/mmazur/">my profile</a>)</li>
<li><a href="http://www.zooomr.com">Zooomr</a> (<a href="http://www.zooomr.com/photos/mmazur">my pictures</a>)</li>
<li><a href="http://www.linkedin.com">LinkedIn</a> (<a href="http://www.linkedin.com/in/mazurm">my profile</a>)</li>
<li><a href="http://www.last.fm">Last.fm</a> (<a href="http://www.last.fm/user/digmike/">my profile</a>)</li>
</ul>
<p>If you&#8217;re using any of those services, add me or link to me or whatever is appropriate in the given context if you like. See you in cyberspace <img src='http://mmm.beachtemple.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://mmm.beachtemple.com/blog/2007/10/20/getting-with-the-times/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nerding Out for Serious!</title>
		<link>http://mmm.beachtemple.com/blog/2007/09/21/nerding-out-for-serious/</link>
		<comments>http://mmm.beachtemple.com/blog/2007/09/21/nerding-out-for-serious/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 14:12:17 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Play by Play]]></category>
		<category><![CDATA[geeky]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://mmm.beachtemple.com/blog/2007/09/21/nerding-out-for-serious/</guid>
		<description><![CDATA[Mike's getting his nerd on!]]></description>
			<content:encoded><![CDATA[<p> I&#8217;m going to have a super geeky two days this weekend. I&#8217;m participating in <a href="http://www.itsc.org.sg/codeXtremeApps.html">code::XtremeApps::</a>, a 24 hour programming competition.</p>
<p>In a nutshell, teams of up to 3 people sign up to take part. At 12:00 noon on Saturday we are given a general theme and have 24 hours to complete a web application that is somehow tied to this theme. The weapons of choice are either <a href="http://rubyonrails.org/">Ruby on Rails</a> or Java compiled with the <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a>. We&#8217;re not touching Java.</p>
<p>This is my first programming competition and should prove to be pretty fun. I&#8217;ve teamed up with two co-workers to go head-to-head with the other 72 teams. Neither of us has any experience with Ruby on Rails (or Ajax) beyond poking at it out of curiosity months ago, though we&#8217;ve played with it in recent weeks to get up to speed.</p>
<p>Keeping with the nerdy theme, I will (try to) stop sending <a href="email-me-updates/">email notifications</a> to everyone when I write about computers and other geeky stuff like that. If you&#8217;re still interested, subscribe to the <a href="feed">RSS feed</a> <img src='http://mmm.beachtemple.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://mmm.beachtemple.com/blog/2007/09/21/nerding-out-for-serious/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big Boss Man&#8217;s Watching You!</title>
		<link>http://mmm.beachtemple.com/blog/2007/03/22/big-boss-mans-watching-you/</link>
		<comments>http://mmm.beachtemple.com/blog/2007/03/22/big-boss-mans-watching-you/#comments</comments>
		<pubDate>Thu, 22 Mar 2007 11:35:12 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://mmm.beachtemple.com/blog/2007/03/22/big-boss-mans-watching-you/</guid>
		<description><![CDATA[Friendly public service announcement: don't waste time at work!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/sarmax/161635846/"><img src="/blog/custom-content/2007/03/bigbrother.jpg" alt="Big brother is watching" class="alignright" border="0" /></a>Well, maybe your boss isn&#8217;t, but they easily could. <a href="http://www.darkreading.com/document.asp?doc_id=120044&#038;f_src=darkreading_default">This article</a> describes software which managers can use to</p>
<blockquote><p>track workers&#8217; activity not only on the network or in the browser, but also in email, chatrooms, applications, and shared files. And at any unannounced moment, a manager can capture an employee&#8217;s screen, read it, and even record it for posterity.</p></blockquote>
<p>In the article they mention that this was recently installed at a corporation. Once the employees were notified of this, internet usage dropped 90%. Astounding!</p>
<p>Now your company may not have this particular software installed but don&#8217;t be fooled into thinking they don&#8217;t already read your email.</p>
<p>So think twice before writing that gossipy letter or checking how your <a href="https://us.etrade.com/e/t/home">e*trade</a> portfolio is doing. You never know what power hungry manager or ethically-challenged sysadmin might be &#8220;lurking&#8221; over your shoulder.</p>
]]></content:encoded>
			<wfw:commentRss>http://mmm.beachtemple.com/blog/2007/03/22/big-boss-mans-watching-you/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Back to the Dark Ages</title>
		<link>http://mmm.beachtemple.com/blog/2007/01/23/back-to-the-dark-ages/</link>
		<comments>http://mmm.beachtemple.com/blog/2007/01/23/back-to-the-dark-ages/#comments</comments>
		<pubDate>Tue, 23 Jan 2007 10:52:24 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Play by Play]]></category>

		<guid isPermaLink="false">http://mmm.beachtemple.com/blog/2007/01/23/back-to-the-dark-ages/</guid>
		<description><![CDATA[Mike's company has decided to use torches to light interior spaces because today's modern lights might electrocute people!]]></description>
			<content:encoded><![CDATA[<p>Earlier this year an Adobe Reader <a href="http://www.symantec.com/enterprise/security_response/weblog/2007/01/when_pdfs_attack.html">cross-site</a> <a href="http://www.oreillynet.com/onlamp/blog/2007/01/adobe_acrobat_javascript_execu.html">scripting</a> <a href="http://www.securityfocus.com/bid/21858">vulnerability</a> was discovered. All pre-SP2 Internet Explorer versions are affected as is Firefox. <a href="http://www.adobe.com/support/security/bulletins/apsb07-01.html">Adobe has already fixed the issue</a> with Adobe Reader versions 6.0.6, 7.0.9 and 8.0.</p>
<p>Today I received an email from our internal computer security department that Firefox has been banished from the organization. Previously it was on a list of allowable freeware with other programs like iTunes (iTunes? officially sanctioned at work?) and such. Not anymore.</p>
<p>If you&#8217;ve ever used Firefox you&#8217;re probably aware of the immense improvement it is over IE (IE7 not yet approved). The tabbed browsing, <span title="hit the '/' key and begin typing to find something on the page">/search</span> and <span title="type 'wp Beastie Boys' in the address bar to search Wikipedia for Beastie Boys">quick search bookmarks</span> are essential for my <del>workflow</del> way of life! Especially at work.</p>
<p>I always have many pages open, all kinds of information, the countless forms I always have to fill out to document every little thing I do, instructions&#8230; forcing me to use IE for this kind of work is like they forced left-handed kids to write with their right hands at school in the 50s! Why not cut one of my arms off altogether, I&#8217;ll probably be just as efficient.</p>
<p>I checked the version of Adobe Reader installed on my machine and it&#8217;s already version 7.0.9, meaning I&#8217;m technically not vulnerable. But why is the official decision to <em>remove</em> Firefox across the organization instead of <em>update</em> the vulnerable program, here Adobe Reader?</p>
<p>I emailed the computer security team with this question. I wonder what their rationale is. I&#8217;m sure they&#8217;re experts and they know what they&#8217;re doing and they have their (very good) reasons but they sure didn&#8217;t explain these in their bulletin.</p>
<p>And I thought work would get better&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://mmm.beachtemple.com/blog/2007/01/23/back-to-the-dark-ages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WWM Now Supports OpenID</title>
		<link>http://mmm.beachtemple.com/blog/2007/01/09/wwm-now-supports-openid/</link>
		<comments>http://mmm.beachtemple.com/blog/2007/01/09/wwm-now-supports-openid/#comments</comments>
		<pubDate>Tue, 09 Jan 2007 14:12:55 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://mmm.beachtemple.com/blog/2007/01/09/wwm-now-supports-openid/</guid>
		<description><![CDATA[Find out what OpenID is and try it out today :)]]></description>
			<content:encoded><![CDATA[<p>I installed the <a href="http://openid.net/">OpenID</a> plugin on my blog. What is this? How does it affect you? Read on&#8230;</p>
<p>OpenID provides you with one identifier and password that you can use anywhere OpenID is accepted. How does it work? You sign up for a <acronym title="Uniform Resource Identifier">URI</acronym> (basically a <acronym title="Uniform Resource Locator">URL</acronym> or web address) with an OpenID server (for free) such as <a href="https://www.myopenid.com/">MyOpenID</a>. Whenever you need to identify yourself to an OpenID enabled site or service (such as when posting comments here), you put in your URI (for example mike.myopenid.com). This site will contact your OpenID provider (myopenid.com) which will ask you to put in your password. If your info checks out, the OpenID provider will tell the site asking about you that you&#8217;re <a href="http://en.wikipedia.org/wiki/Kosher">kosher</a> and grants you access.</p>
<p>What&#8217;s the big deal? Today, you probably identify yourself to many websites and services with a different user name and password for each. After a while you may forget your passwords, especially for those sites you only visit once in a while. Some companies have tried to provide a solution to this; some time ago Microsoft tried to get Passport (now <a href="http://en.wikipedia.org/wiki/Windows_Live_ID">Windows Live ID</a>) to be the de-facto authentication system for the internet. Yahoo has <a href="http://developer.yahoo.com/auth/">Browser Based Authentication</a> and Google has their <a href="http://code.google.com/apis/accounts/AuthForWebApps.html">Google Accounts Authentication</a>. I don&#8217;t know about you but I wouldn&#8217;t trust my entire online ID to one single entity.</p>
<p>So how does OpenID solve this <a href="http://en.wikipedia.org/wiki/Authoritarianism">Big Brother</a> problem? The beauty is that there can be many autonomous OpenID providers. If you own a domain, you can even roll your own (mike.beachtemple.com could be me)!</p>
<p>As a user, you have one URI to remember, one password, and one identity Internet wide. If you come across a cool new website you want to sign up for, you won&#8217;t find your user name taken.</p>
<p>Go ahead, try it out. Go register for an OpenID identity at <a href="https://www.myopenid.com">MyOpenID</a> or any of the <a href="http://www.lifewiki.net/openid/OpenIDServers">other providers</a>, and try posting a comment <img src='http://mmm.beachtemple.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Then explore some of the <a href="https://www.myopenid.com/directory">OpenID enabled sites</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mmm.beachtemple.com/blog/2007/01/09/wwm-now-supports-openid/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
