<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.1" -->
<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/"
	>

<channel>
	<title>Tech Your Universe</title>
	<link>http://www.techyouruniverse.com</link>
	<description>Musings about technology from a Geek</description>
	<pubDate>Fri, 20 Jun 2008 23:09:43 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<item>
		<title>Howto - Simple backups for Linux using rsnapshot</title>
		<link>http://www.techyouruniverse.com/software/howto-simple-backups-for-linux-using-rsnapshot</link>
		<comments>http://www.techyouruniverse.com/software/howto-simple-backups-for-linux-using-rsnapshot#comments</comments>
		<pubDate>Fri, 20 Jun 2008 23:06:37 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[software]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[howto rsnapshot]]></category>

		<category><![CDATA[simple backups]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/software/howto-simple-backups-for-linux-using-rsnapshot</guid>
		<description><![CDATA[Backups are something you must master to be a great system administrator.

You&#8217;e probably found this because you were looking for a simple backup solution. Yes, you&#8217;ve seen Amanda. And Bacula, but they aren&#8217;t simple.  Amanda and Bacula are great products if you need all of their features &#8212; and if you are like me, [...]]]></description>
			<content:encoded><![CDATA[<p>Backups are something you must master to be a <a href="/technology/be-the-best-system-administrator-in-the-world">great system administrator</a>.</p>
<p>
You&#8217;e probably found this because you were looking for a simple backup solution. Yes, you&#8217;ve seen <a href="http://www.amanda.org/">Amanda</a>. And <a href="http://www.bacula.org/en/">Bacula</a>, but they aren&#8217;t <a href="/software/simplicity-in-software-design">simple</a>.  Amanda and Bacula are great products if you need all of their features &#8212; and if you are like me, I don&#8217;t want to spend time with my backups, I just want something that works.
</p>
<p>
My choice &#8212; <a href="http://rsnapshot.org/">rsnapshot</a>. rsnapshot is a perl script that wraps around <a href="http://samba.anu.edu.au/rsync/">rsync</a>. It&#8217;s most beautiful feature: it uses <a href="http://en.wikipedia.org/wiki/Hard_link">hard-links</a> when it can, so if you are backing up the same file more than once, it just creates a link. This means <i>backups only take up more space if the files change</i>. I&#8217;ve heard that this is how Apple&#8217;s <a href="http://www.apple.com/macosx/features/timemachine.html">Time Machine</a> works. I&#8217;m now using rsnapshot in multiple production environments. Here&#8217;s a quick how-to guide for how to set up reliable, robust, efficient, self-rotating backups in just a few minutes with rsnapshot.
</p>
<ol>
<li>Install rsnapshot, either by downloading/compiling <a href="http://rsnapshot.org/downloads.html"> the source code</a>, or using this <a href="http://nick.sullivanflock.com/snapshot-1.2.9-1.rpm">RPM for linux</a>
</li>
<li>Edit <code>/etc/rsnapshot.conf</code> for your settings. <b>Warning:</b> The config file makes a distinction between tabs and spaces. Make sure you use tabs! Pay special attention to these settings:
<ol>
<li><code>snapshot_root</code> &#8212; this is where your backups will be stored.
</li>
<li>The <code>backup</code> section will define which directories you want backed up.<br />
<xmp><br />
backup  /etc/           localhost/<br />
backup  /root/          localhost/<br />
backup  /home/nick/             localhost/<br />
</xmp>
</li>
<li>rsnapshot handles the rotation of backups for you! The <code>interval</code> section will define how many daily, weekly, etc. backups are kept. Example:<br />
<xmp><br />
interval        hourly  6<br />
interval        daily   7<br />
interval        weekly  4<br />
interval       monthly 3<br />
</xmp></li>
</ol>
</li>
<li>As a test, you can run: <code>rsnapshot -v -t hourly</code> and this will parse the config file, and show you the commands it will run when it runs hourly.
</li>
<li>After you are done tweaking the config file, it&#8217;s time to add the crontab entries for the various backups. Scheduling is a bit tricky. Here&#8217;s mine as an example:<br />
<xmp><br />
# There is a pid file that will preven two from running at the same time.<br />
# This is why hourly starts after the others. Hourly should be skipped when daily/weekly/monthly is running.<br />
19 */3 * * * nice rsnapshot -v hourly<br />
18 1 * * * rsnapshot -v daily<br />
17 2 * * 0 rsnapshot -v weekly<br />
16 3 1 * * rsnapshot -v monthly<br />
</xmp>
</li>
</ol>
<p>That&#8217;s it! You&#8217;re ready to go. Your backups will be stored in <code>rsnapshot_root</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/software/howto-simple-backups-for-linux-using-rsnapshot/feed</wfw:commentRss>
		</item>
		<item>
		<title>Yahoo ends all talks with Microsoft</title>
		<link>http://www.techyouruniverse.com/yahoo/yahoo-ends-all-talks-with-microsoft</link>
		<comments>http://www.techyouruniverse.com/yahoo/yahoo-ends-all-talks-with-microsoft#comments</comments>
		<pubDate>Thu, 12 Jun 2008 20:56:45 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[microsoft]]></category>

		<category><![CDATA[yahoo]]></category>

		<category><![CDATA[yahoo ends talk with microsoft]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/yahoo/yahoo-ends-all-talks-with-microsoft</guid>
		<description><![CDATA[Two words.

Thank.

God.


Ok, more than two words, because I know people are wondering how I feel.


First, I left Yahoo! because of Microsoft. Yes, I was wrong about the final outcome. When I left it looked like it was 80% likely that it was going to happen. I&#8217;m still correct in my assumpitions about what the hostile [...]]]></description>
			<content:encoded><![CDATA[<p>Two words.</p>
<p>
Thank.</p>
<p>
God.
</p>
<p>
Ok, more than two words, because I know people are wondering how I feel.
</p>
<p>
First, I left Yahoo! because of Microsoft. Yes, I was wrong about the final outcome. When I left it looked like it was 80% likely that it was going to happen. I&#8217;m still correct in my assumpitions about what the hostile takeover attempt has done to the company. And I think I&#8217;ve found something better in my <a href="http://www.wikia.com">new job</a>. I still feel I made the right decision.
</p>
<p>
Second, I am sure that Yahoo is better positioned to be successful alone, rather than with Microsoft in any way, and while this is definitely going to be a short term hit for shareholders, it is the better long term outcome for Yahoo to be independent. <a href="/yahoo/exploding-the-microsoft-yahoo-team-up-against-google-myth">Read more</a> about why the deal would have been <em>a complete disaster</em>.
</p>
<p>
Third, Steve Balmer, you can take this <a href="http://www.techcrunch.com/2008/06/12/googleyahoo-announcement-at-130-this-afternoon/">Yahoo/Google search deal</a> and shove it up your a$$. You forced Yahoos hand, and now you are going to be a distant 3rd place, for a very long time. At least until <a href="http://search.wikia.com">Wikia Search</a> takes it from you. <img src='http://www.techyouruniverse.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
</p>
<p>
Finally, During this uncertain time at Yahoo, <a href="/yahoo/leaving-yahoo-because-of-microsoft">people have left</a>. More today. <a href="http://jeremy.zawodny.com/blog/archives/010336.html">Zawodney</a>. <a href="http://blog.unitedheroes.net/archives/p/2929/leaving-las-sunnyvale/">JR Conlin</a>. Both Yahoo icons. The disruption that this has had has put <b>both</b> Yahoo and Microsoft further away from reaching Google.
</p>
<p>
It&#8217;s now time for Yahoo to pick up the pieces and move on. Oh - and to spend another 12-24 months fighting shareholder lawsuits. <strong>Wouldn&#8217;t it be great if Yahoo countersued Microsoft for the damages?</strong>
</p>
<p>
More info at <a href="http://news.yahoo.com/s/ap/20080612/ap_on_hi_te/yahoo_microsoft">news.yahoo.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/yahoo/yahoo-ends-all-talks-with-microsoft/feed</wfw:commentRss>
		</item>
		<item>
		<title>Phone Home Script to Protect Your Laptop</title>
		<link>http://www.techyouruniverse.com/technology/phone-home-script-to-protect-your-laptop</link>
		<comments>http://www.techyouruniverse.com/technology/phone-home-script-to-protect-your-laptop#comments</comments>
		<pubDate>Fri, 06 Jun 2008 01:56:43 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[technology]]></category>

		<category><![CDATA[phone home script]]></category>

		<category><![CDATA[protect your laptop]]></category>

		<category><![CDATA[track your laptop]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/technology/phone-home-script-to-protect-your-laptop</guid>
		<description><![CDATA[Let&#8217;s say your laptop is stolen. Wouldn&#8217;t that be awful? 

Now, what if you had a way to track down the person that took it and get it back?


Using Linux or Mac, it&#8217;s easy. let&#8217;s take a look at a script that will do this for you. It will take you less than 5 minutes [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s say your laptop is stolen. Wouldn&#8217;t that be awful? </p>
<p>
Now, what if you had a way to track down the person that took it and get it back?
</p>
<p>
Using Linux or Mac, it&#8217;s easy. let&#8217;s take a look at a script that will do this for you. It will take you less than 5 minutes to set up.
</p>
<blockquote><p>
#!/bin/bash</p>
<p>curl &#8211;silent &#8220;http://$yourserver/phonehome?homelaptop&#8221; > /tmp/phonehome<br />
if [ -s /tmp/phonehome ]; then<br />
  sh /tmp/phonehome<br />
fi
</p></blockquote>
<p>Save the above in <code>/tmp/phone.bash</code> (change $yourserver to a place where you can have a file hosted), then set add a crontab entry to have it run every 5 minutes:</p>
<blockquote><p>
*/5 * * * * /tmp/phone.bash
</p></blockquote>
<p>
<b>What does it do?</b> Every 5 minutes, this script will run, and it will execute whatever code you have placed in the <code>phonehome</code> file on $yourserver. By default, I have <a href="http://nick.sullivanflock.com/phonehome">my phonehome file</a> just set to run <code>true</code>, which does nothing. But if my laptop gets stolen, I modify the <code>phonehome</code> file to include bash commands. <i>I have the full power of bash on my laptop</i> as soon as the thief connects to the internet. Imagine the possibilities. Here are some ideas:</p>
<ol>
<li><b>traceroute</b> - Let&#8217;s go ahead and get his IP address and where he is at. We should be able to give this to the police who can then contact his ISP and get his address. Save the output and copy it to $yourserver:<br />
<blockquote><p>
traceroute > /tmp/traceroute.out<br />
scp /tmp/traceroute.out $yourserver:/tmp/theiftraceroute
</p></blockquote>
<p> <i>Tip:</i> Set up <a href="http://www.csua.berkeley.edu/~ranga/notes/ssh_nopass.html">ssh without a password</a> to $yourserver so you can easily send information back and forth with <code>rsync</code> and/or <code>scp</code>.
  </li>
<li><b>Keystroke logger</b> - Now let&#8217;s record everything he types. Using bash, we can download, install, and run a keystroke logger. <a href="http://www.macupdate.com/info.php/id/16155">Here&#8217;s one that works for OSX</a>
  </li>
<li><b>Take a picture</b> - If you have a Mac with a built in iSight camera, you can use <a href="http://osxdaily.com/2007/01/24/capture-isight-images-using-the-command-line/"> isightcapture</a> to take a pictures of the thief and send them to you!<br />
<blockquote><p>
curl &#8211;silent &#8220;$urlforisightcapturescript&#8221; > /tmp/isightcapture<br />
chmod a+x /tmp/isightcapture<br />
/tmp/isightcapture &#8211;file /tmp/pictureoftheif$RANDOM<br />
scp /tmp/pictureoftheif* $yourserver:/tmp/
</p></blockquote>
</li>
</ol>
<p>
Someone. Please. Steal my laptop. I can&#8217;t wait to use this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/technology/phone-home-script-to-protect-your-laptop/feed</wfw:commentRss>
		</item>
		<item>
		<title>Debugging web apps with strace</title>
		<link>http://www.techyouruniverse.com/software/debugging-web-apps-with-strace</link>
		<comments>http://www.techyouruniverse.com/software/debugging-web-apps-with-strace#comments</comments>
		<pubDate>Mon, 02 Jun 2008 22:57:36 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[software]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[debug apache]]></category>

		<category><![CDATA[debug hanging website]]></category>

		<category><![CDATA[debug php]]></category>

		<category><![CDATA[find page hang]]></category>

		<category><![CDATA[find slow downs]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/software/debugging-web-apps-with-strace</guid>
		<description><![CDATA[Want to be an advanced debugger? My #1 Superman debugging tool is Linux&#8217;s strace. If you have ever run into problems where a user complains that the site is slow, and you can&#8217;t figure out why, you may want to give strace a try. 

From http://sourceforge.net/projects/strace/:

strace is a system call tracer, i.e. a debugging tool [...]]]></description>
			<content:encoded><![CDATA[<p>Want to be an advanced debugger? My #1 Superman debugging tool is Linux&#8217;s <code>strace</code>. If you have ever run into problems where a user complains that the site is slow, and you can&#8217;t figure out why, you may want to give <code>strace</code> a try. </p>
<p>
From <a href="http://sourceforge.net/projects/strace/">http://sourceforge.net/projects/strace/</a>:</p>
<blockquote><p>
strace is a system call tracer, i.e. a debugging tool which prints out a trace of all the system calls made by a another process/program.
</p></blockquote>
<p>
In other words, <code>strace</code> tells you what a program is doing, <i>at the C function call level</i>. This is great for finding the problems where a page just &#8220;hangs&#8221; for no apparent reason. Let&#8217;s walk through what it takes to set up <code>strace</code> on Apache in a LAMP environment, with some real world examples that I&#8217;ve run into.
</p>
<p>
First, you&#8217;ll need to install <code>strace</code>, if it isn&#8217;t already installed. My favorite method is just <code>yum install strace</code>, but if you want to, you can <a href="http://sourceforge.net/project/platformdownload.php?group_id=2861">download</a> and compile it yourself.
</p>
<p>
Next, you will need a place where you can test the slow page. For the rest of this article, we will assume you have a development environment that is all to your own, where you can start/stop Apache at will, and no one else will be using it. <i>Note:</i> If a separate development environment isn&#8217;t available, I suggest running another Apache on a different port, say 81 instead of 80. This way you can still work on the production site without affecting end users.
</p>
<p>
Environment set up? Good. Let&#8217;s get down to debugging.</p>
<ol>
<li>Start Apache in &#8220;Debug Mode&#8221; with the <code>-X</code> option. This has Apache start <b>one</b> process, instead of a bunch of children, and then all the requests will go through one process.<br />
<blockquote><p>
httpd -X
</p></blockquote>
</li>
<li>In another terminal window, find the process id for the listening Apache that you just started. <code>ps auxw | grep httpd</code> should do the trick.
</li>
<li>Once you have the process id, attach <code>strace</code> with the <code>-p</code> option:<br />
<blockquote><p>
strace -p $processidofapacheprocess
</p></blockquote>
</li>
<li>Go to your browser and go to the url that is hanging. While it is running, watch the output from <code>strace</code> in your terminal window. You&#8217;ll see a ton of system calls stream by, but the important thing to look for is <b>when it stops</b>. What is it doing?
</li>
</ol>
<p>I&#8217;ve used this approach to find several &#8220;Superman&#8221; level problems (problems that other people spent at least a day trying to figure out what was going on &#8212; sometimes weeks). Here are some examples.</p>
<ol>
<li><b>Sendmail hanging via PHP</b> - The reported problem was that certain pages were slow (30-300 seconds). Load on the machines seemed fine, but certain requests were painfully slow. <code>strace</code> revealed that the PHP script was waiting for <a href="http://www.sendmail.org/">sendmail</a> to come back with a response. Upon looking further, sendmail was doing a reverse dns lookup that was timing out, which resulted in a 30+ second delay. Problem resolved by reconfiguring sendmail.
</li>
<li><b>PHP pages slow on an NFS server</b> - The reported problem was a development environment with pages that were slow to load. <code>strace</code> revealed that the pages were hanging at a <code>flock</code> call to a directory that was mounted via NFS. Here&#8217;s the actual output from strace:<br />
<blockquote><p>
&#8230;pages of output snipped&#8230;<br />
fcntl(24, F_SETFL, O_RDWR)              = 0<br />
sendto(24, &#8220;incr toys:stats:request_with_ses&#8221;&#8230;, 40, MSG_DONTWAIT, NULL, 0) = 40<br />
poll([{fd=24, events=POLLIN|POLLERR|POLLHUP, revents=POLLIN}], 1, 500) = 1<br />
recvfrom(24, &#8220;76\r\n&#8221;, 8192, MSG_DONTWAIT, NULL, NULL) = 4<br />
open(&#8221;/home/phpsessions/sess_079113645a3da0fe50f68e4ce6ed58d2&#8243;, O_RDWR|O_CREAT, 0600) = 25<br />
flock(25, LOCK_EX
</p></blockquote>
<p>So we can see here that the file <code> /home/phpsessions/sess_079113645a3da0fe50f68e4ce6ed58d2</code> has been opened, and the <code>flock</code> call is hanging. Turns out NFS doesn&#8217;t deal well with <code>flock</code>. When we saw this, there was a big smack on the forehead. Why on earth were the sessions being stored via NFS anyway? Especially for a development server, where only one box needed to store it. To solve the problem, we changed the <code>session.save_path</code> in the php configuration file to a directory that was not on NFS.
</li>
<li><b>Memcached hanging</b> - Again, certain requests were hanging, causing pages to be slow to load. Again, <code>strace to the rescue</code>! Turns out PHP was hanging when talking to <a href="http://www.danga.com/memcached/">memcached</a>. Once this was determined, we also ran <code>strace</code> on memcached, and found a bug with the particular memcached client we were using via PHP. We upgraded the memcached client to the latest version, and the problem was solved.
</li>
</ol>
<p>In all of the above cases, the problem could have been found through other means, but <code>strace</code> made it a much easier and faster to figure out where the slowdowns were.
</p>
<p>
There are other helpful uses of strace. In addition to finding hanging web pages, I&#8217;ve also used strace to find why/where Apache was segfaulting. Just run strace and look to see what the last thing it did. It should give you an indication of why the script stopped when it did.
</p>
<p>
Also, I&#8217;ve used Apache as a troubleshooting tool to find out where most of the time is being spent by analyzing the entire request.
</p>
<p>
Good luck in your adventures with strace, it&#8217;s been a big help for me. Feel free to leave a comment with your findings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/software/debugging-web-apps-with-strace/feed</wfw:commentRss>
		</item>
		<item>
		<title>Debugging rules</title>
		<link>http://www.techyouruniverse.com/software/debugging-rules</link>
		<comments>http://www.techyouruniverse.com/software/debugging-rules#comments</comments>
		<pubDate>Fri, 25 Apr 2008 18:35:27 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[software]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[debugging rules]]></category>

		<category><![CDATA[rules of debugging]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/uncategorized/debugging-rules</guid>
		<description><![CDATA[
My co-worker, Artur Bergman, gave a talk today at the Web 2.0 Expo.
He highlighted these rules of debugging, and they were great, so I wanted to share.

Understand the system
Make it fail
Quit thinking and look
Divide and conquer
Change one thing at a time
Keep an audit trail
Check the plug
Get a fresh view
If you didn&#8217;t fix it, it ain&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p style="float: left; margin-right: 20px"><a href="http://www.debuggingrules.com/debuggingrules.jpg"><img src="http://nick.sullivanflock.com/images/debuggingrules.jpg" width="200" /></a></p>
<p>My co-worker, Artur Bergman, gave a talk today at the <a href="http://en.oreilly.com/webexsf2008/public/content/home">Web 2.0 Expo</a>.</p>
<p>He highlighted these rules of debugging, and they were great, so I wanted to share.</p>
<ol>
<li>Understand the system</li>
<li>Make it fail</li>
<li>Quit thinking and look</li>
<li>Divide and conquer</li>
<li>Change one thing at a time</li>
<li>Keep an audit trail</li>
<li>Check the plug</li>
<li>Get a fresh view</li>
<li>If you didn&#8217;t fix it, it ain&#8217;t fixed.</li>
</ol>
<p>Brilliant! See <a href="http://www.debuggingrules.com/">http://www.debuggingrules.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/software/debugging-rules/feed</wfw:commentRss>
		</item>
		<item>
		<title>Going to Wikia</title>
		<link>http://www.techyouruniverse.com/wikia/going-to-wikia</link>
		<comments>http://www.techyouruniverse.com/wikia/going-to-wikia#comments</comments>
		<pubDate>Mon, 14 Apr 2008 20:08:00 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[wikia]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/wikia/going-to-wikia</guid>
		<description><![CDATA[
I left Yahoo recently, Friday was my last day. After taking some time off for family travel, I&#8217;m going to work for Wikia.com. Wikia is building niche community sites on the wiki concept, using the Mediawiki software.

They are also working on Wikia Search, a community driven search engine and crawling effort. If Jimmy Wales and [...]]]></description>
			<content:encoded><![CDATA[<p style="float: right"><img src="http://images.wikia.com/common/skins/home/images/wikia_blue.gif" /></p>
<p>I left Yahoo recently, <a href="/yahoo/leaving-yahoo-because-of-microsoft">Friday was my last day</a>. After taking some time off for family travel, I&#8217;m going to work for <a href="http://www.wikia.com">Wikia.com</a>. Wikia is building niche community sites on the wiki concept, using the Mediawiki software.
<p>
They are also working on Wikia Search, a community driven search engine and crawling effort. If Jimmy Wales and Wikia can do what they did for Wikipedia, and apply that concept to search, I think has a decent chance of <a href="/technology/the-community-will-replace-google">taking on Google</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/wikia/going-to-wikia/feed</wfw:commentRss>
		</item>
		<item>
		<title>Leaving Yahoo! because of Microsoft</title>
		<link>http://www.techyouruniverse.com/yahoo/leaving-yahoo-because-of-microsoft</link>
		<comments>http://www.techyouruniverse.com/yahoo/leaving-yahoo-because-of-microsoft#comments</comments>
		<pubDate>Fri, 28 Mar 2008 20:39:49 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[yahoo]]></category>

		<category><![CDATA[leaving yahoo because of Microsoft]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/yahoo/leaving-yahoo-because-of-microsoft</guid>
		<description><![CDATA[I&#8217;ve resigned from Yahoo!. Those that follow my blog knew this was coming, given
how outspoken I&#8217;ve been about not working for Microsoft. To make it very clear &#8212; Yes, absolutely, positively, my only reason for leaving was the upcoming Microsoft takeover. Otherwise I would have stayed at Yahoo! for many years to come.
I&#8217;ll miss Yahoo!, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve resigned from Yahoo!. Those that follow my blog knew this was coming, given<br />
how outspoken I&#8217;ve been about <a href="/technology/yahoos-wont-work-for-microsoft">not working for Microsoft</a>. To make it very clear &#8212; Yes, absolutely, positively, my only reason for leaving was the upcoming Microsoft takeover. Otherwise I would have stayed at Yahoo! for many years to come.</p>
<p>I&#8217;ll miss Yahoo!, they are a great company, with a very smart, passionate group of people. I hope that everything goes well for my fellow Yahoos!. I&#8217;m sad to miss the people, the great culture, and the company perks. Gone are the days of free coffee, shuttles to work, tech talks, hack days, and a tremendous amount of community support. <img src='http://www.techyouruniverse.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>But &#8212; what if I&#8217;m wrong and the deal doesn&#8217;t go through? Yep, I am willing to accept that risk. By my estimations, there is a small (less than 10%) chance  that Yahoo! will avoid a Microsoft takeover. There may be a white knight or a wild card savior, and there are anti-trust issues still to be cleared &#8212; the deal may never go through.</p>
<p>Everyone <a href="http://www.flexyouruniverse.com/life/the-observer-chooses-the-path">chooses their own path through life</a>. Personally, I don&#8217;t play &#8220;wait and see&#8221; with my career. Based on my research, I think the <a href="/yahoo/microsoft-and-yahoo-what-happens-now">Microsoft takeover is all-but-inevitable</a>. And even if they aren&#8217;t going to radically change things right away, the company will move in a <a href="/yahoo/exploding-the-microsoft-yahoo-team-up-against-google-myth">direction that I&#8217;m not in agreement with</a>.</p>
<p>It&#8217;s importantly for me to be passionately engaged with my work, and I&#8217;m excited to do that for a company whose values I believe in. Where am I going next? More on that soon. <img src='http://www.techyouruniverse.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/yahoo/leaving-yahoo-because-of-microsoft/feed</wfw:commentRss>
		</item>
		<item>
		<title>Code reviews before every commit?</title>
		<link>http://www.techyouruniverse.com/software/code-reviews-before-every-commit</link>
		<comments>http://www.techyouruniverse.com/software/code-reviews-before-every-commit#comments</comments>
		<pubDate>Mon, 24 Mar 2008 17:30:24 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[software]]></category>

		<category><![CDATA[code review on every commit]]></category>

		<category><![CDATA[code review policy]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/software/code-reviews-before-every-commit</guid>
		<description><![CDATA[First, a little cartoon about measuring code quality.




How true this is! See the original article here:
http://www.osnews.com/story/19266/WTFs_m


All developers talk about code reviews, but most of the time, it&#8217;s one of those things that there is never enough time for, and always takes a back seat to other priorities, which means it&#8217;s easily left off.


I work part [...]]]></description>
			<content:encoded><![CDATA[<p>First, a little cartoon about measuring code quality.</p>
<p>
<img src="http://www.osnews.com/images/comics/wtfm.jpg" width="300"/>
</p>
<p>
How true this is! See the original article here:<br />
<a href="http://www.osnews.com/story/19266/WTFs_m">http://www.osnews.com/story/19266/WTFs_m</a>
</p>
<p>
All developers talk about code reviews, but most of the time, it&#8217;s one of those things that there is never enough time for, and always takes a back seat to other priorities, which means it&#8217;s easily left off.
</p>
<p>
I work part time at <a href="http://www.wikinvest.com">Wikinvest.com</a>, and we have a policy that requires that all <code>svn commit</code>s are code reviewed first. When this policy was first introduced, I thought that this policy was Draconian and would slow things down.
</p>
<p>
I kicked and screamed inside, thinking that it was unnecessary and was going to hamper productivity. I was told that this was common practice everywhere, which I knew wasn&#8217;t true. I went along &#8212; begrudgingly. Since I&#8217;m part time, it&#8217;s not my place to try to shape development policies.
</p>
<p>
However, now that I&#8217;ve done this for a few months, I&#8217;ve come to feel differently. Here are the advantages I&#8217;ve found in having every <code>commit</code> code reviewed.</p>
<ol>
<li><b>Less bugs</b> &#8212; this is obvious. More mistakes are caught. The live site has less bugs. Duh. The evidence: Wikinvest.com has less live site bugs than any place I&#8217;ve worked. The time savings for this benefit alone more than make up for the total time spent fixing bugs.
</li>
<li><b>Higher initial code quality</b> &#8212; Why? Hacks will be reduced. If you know that your code is going to be reviewed by someone else, you&#8217;ll take that extra time to write it well. Your name and reputation is on the line, and it will be presented to someone else for review. You know this as you are writing the code, and you&#8217;ll be encouraged to treat the project like a high quality craftsman would. Comments will be clearer. Edge cases will be more thought through. Logical flow will be enhanced. In general, <i>developers will take more pride in their work</i>.
</li>
<li><b>Enforced cross training</b> &#8212; Every new piece of functionality, feature or fix has at least one other person that has seen it, and taken the time to understand it. This insures better code coverage across the team in case someone leaves or goes on vacation. Development managers &#8212; this will solve one of your biggest problems! When someone changes something on their own without letting anyone know, and the live site breaks, now you have at least one other person that might say &#8220;I think I know what it might be.&#8221;
</li>
<li><b>Developers learn from each other</b> &#8212; I can attest that my code quality has improved because of code reviews. I&#8217;ve learned better practices, both by seeing others code closely, and by having others critique my code. I&#8217;ve been in several code reviews where I&#8217;ve told people about a better approach because I knew about some special function in PHP or I had previously solved the problem in a more elegant way. Big thumbs up here.
</li>
<li><b>Coding standards and conventions are better enforced</b> &#8212; Even with the best intentions, we can miss the way the rest of the group is doing something. Perhaps we shouldn&#8217;t have that particular variable hard coded in the script, because someone else has already moved it to a configuration file. Or perhaps there is a new standard way for getting a database connection, but you missed the e-mail that announced the new practice. Code review to the rescue! It&#8217;s always good to go along with what the group is doing and adopt standards. Get two sets of eyes on the code to make sure.
</li>
</ol>
<p>
When you weigh all the above advantages, <i>the extra time spent code reviewing for every commit is easily offset by all the above benefits</i>, and I&#8217;m sold that this is the right approach.
</p>
<p>
Here are some best practices to consider if you are implementing in your development environment.</p>
<ol>
<li>Set up a process for getting the reviews done and commits to happen quickly.
  </li>
<li>Spread it around! Everyone should review everyone else&#8217;s code. Discourage silos. Remember, one of the key benefits is to have developers learn from each other. If two buddies always review each others code, you aren&#8217;t getting all the benefits from spreading knowledge across the team.
  </li>
<li>Discourage any exceptions. The only exceptions are &#8220;trivial&#8221; changes like spacing or comments.
  </li>
<li>The <code>svn commit</code> message should contain the name of the person that did the code review.
</li>
</ol>
<p>Instituting code reviews before every commit won&#8217;t be a popular approach for everyone. People will kick and scream, like I did. The chief argument will probably be time. &#8220;It will slow us down too much&#8221;. Yes, commits will be slower. But overall development will be much more efficient, and there will be less bugs. Would you rather spend less time on code reviews now or more later on bugs?
</p>
<p>
In doubt? Give it a try and see what happens to the code quality and developer engagement. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/software/code-reviews-before-every-commit/feed</wfw:commentRss>
		</item>
		<item>
		<title>300 parody of Yahoo Microsoft takeover</title>
		<link>http://www.techyouruniverse.com/yahoo/300-parody-of-yahoo-microsoft-takeover</link>
		<comments>http://www.techyouruniverse.com/yahoo/300-parody-of-yahoo-microsoft-takeover#comments</comments>
		<pubDate>Mon, 17 Mar 2008 18:34:29 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[yahoo]]></category>

		<category><![CDATA[300 parody of Yahoo]]></category>

		<category><![CDATA[hostile Microsoft takeover]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/uncategorized/300-parody-of-yahoo-microsoft-takeover</guid>
		<description><![CDATA[This is fantastic.Steve Ballmer, Jerry Yang, Sue Decker, Bill Gates, all portrayed as the appropriate characters.


]]></description>
			<content:encoded><![CDATA[<p>This is fantastic.Steve Ballmer, Jerry Yang, Sue Decker, Bill Gates, all portrayed as the appropriate characters.<object height="355" width="425">
<param value="http://www.youtube.com/v/r76byZVg5vI&amp;hl=en" name="movie"></param>
<param value="transparent" name="wmode"></param><embed src="http://www.youtube.com/v/r76byZVg5vI&amp;hl=en" height="355" width="425" wmode="transparent" type="application/x-shockwave-flash"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/yahoo/300-parody-of-yahoo-microsoft-takeover/feed</wfw:commentRss>
		</item>
		<item>
		<title>Wikinvest wins award for Best Business website of 2007</title>
		<link>http://www.techyouruniverse.com/technology/wikinvest-wins-award-for-best-business-website-of-2007</link>
		<comments>http://www.techyouruniverse.com/technology/wikinvest-wins-award-for-best-business-website-of-2007#comments</comments>
		<pubDate>Tue, 11 Mar 2008 19:05:01 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[technology]]></category>

		<category><![CDATA[best business website]]></category>

		<category><![CDATA[sxsw]]></category>

		<category><![CDATA[wikinvest]]></category>

		<guid isPermaLink="false">http://www.techyouruniverse.com/technology/wikinvest-wins-award-for-best-business-website-of-2007</guid>
		<description><![CDATA[In addition to being full time at Yahoo!, another company I work for part time, Wikinvest.com, won an award at the 11th Annual South by Southwest Interactive Web Awards for best website of 2007 in the business category. See the complete list of winners

Hooray!


Shameless Plug:
Wikinvest is a website that applies the concept of wikipedia (community [...]]]></description>
			<content:encoded><![CDATA[<p>In addition to being full time at Yahoo!, another company I work for part time, <a href="http://www.wikinvest.com">Wikinvest.com</a>, won an award at the 11th Annual South by Southwest Interactive Web Awards for <b>best website of 2007 in the business category</b>. <a href="http://2008.sxsw.com/interactive/web_awards/winners/">See the complete list of winners</a></p>
<p>
Hooray!
</p>
<p>
Shameless Plug:<br />
Wikinvest is a website that applies the concept of wikipedia (community edited content) to the world of investing. We&#8217;ve got some great content, some very interesting expansions to the MediaWiki software, and the Search is pretty damned cool do (I built that). <img src='http://www.techyouruniverse.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
</p>
<p>
If you are into investing, I encourage you to <a href="http://www.wikinvest.com">take a look</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.techyouruniverse.com/technology/wikinvest-wins-award-for-best-business-website-of-2007/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
