TED Talks

Posted by Matt Rose Wed, 24 Jun 2009 12:21:00 GMT

Two fascinating talks by people that you may not think are that fascinating. Make sure you have about 35 minutes. It'll fly by


Adam Savage comes across on "Mythbusters" as "the goofy one" you get occasional flashes of what makes him interesting, but nothing quite as interesting as listening to him talk about what he's interested in.


Mike Rowe is the narrator of "The deadliest catch", and the host of "Dirty Jobs". In both shows he displays so much respect for the subjects of the shows. This gives you an idea why. Also, why "follow your passion" is the worst career and life advice


Glenn Gould

Posted by Matt Rose Sun, 17 May 2009 15:02:21 GMT

A Canadian treasure, and so far ahead of his time that only now are we starting to catch up to his vision. The interview starts after about 5 minutes, but I suggest you watch the whole thing. Thanks to Steve Silberman for linking to this on facebook originally

Broken gets fixed, shoddy lasts forever.

Posted by Matt Rose Wed, 04 Feb 2009 20:14:38 GMT

In a weird zeitgeist moment. This truism has popped up twice today. The first was a post on the anaconda devel list here
Most of what we work on is either giant new features or critical bugs that prevent installations from succeeding. What gets lost in all this is the pile of very small, very simple, but very annoying bugs that don't cause anaconda to fail but don't make it look good either. You know the kinds of bugs I'm talking about - deprecation warnings, messages getting printed to tty1, dialogs that either don't go away or don't display in the right place, progress bars that don't move, etc.
and then a link from kottke here:
One of the developers I work with said this after I complained about a lingering issue in one of our products. It rings true. When deadlines are tight, and there is more work to get done than there are developers or hours in the schedule, it’s not the squeaky wheel, but the jammed one that gets the grease. The lesson, then, is to make sure it gets done right the first time. You never know when you’ll have the opportunity to revisit it.
It's a constant irritant at my work. I put something in that works, but doesn't work perfectly, I think I'll get around to fixing it later. Later never comes. If it's not done right the first time, it's going to hang around and irritate you forever. Lesson: Do it right the first time.

Ruby Gem Abuse.

Posted by Matt Rose Mon, 05 Jan 2009 14:03:00 GMT

I wanted a way to automatically tweet the new xkcd comic every day. I have no idea why. But I was able to whip this up in a few minutes. Update:
So, I figured that if I was setting up a cron job to tweet XKCD, I figured I might as well broadcast to everyone when I put up a new blog post. If you find this annoying, message me and I can turn it off. I swear to god, I only blog every once in a blue moon, so it shouldn't be a big deal...
#!/usr/bin/env ruby
require 'rubygems'
require 'open-uri'
require 'hpricot'
require 'httparty'
require 'atom'

class XKCD
	def initialize
		@url = 'http://xkcd.com'
		@hp = Hpricot(open('http://xkcd.com'))
	end
	def comic
		info = (@hp/"h3").collect{ |inf|
			inf.inner_text.split(': ')[1]
		}
	return info
	end
end
class Twitter
	include HTTParty
	base_uri 'twitter.com'
	basic_auth 'mattrose','password'
	def initialize(user, pass)
    		self.class.basic_auth user, pass
	end
  	def post(text)
    		self.class.post('/statuses/update.json', :query => {:status => text})
  	end
end

class Folkwolf
	def initialize
		@feed = Atom::Feed.load_feed(URI.parse("http://blog.folkwolf.net/xml/atom10/feed.xml")).entries
	end
	def latest
		latest = @feed.entries[0]
		return latest
	end
end		
		
image_url = XKCD.new.comic
feed_url = Folkwolf.new.latest.links[0].to_s
feed_updated = Folkwolf.new.latest.updated
ffile = '/tmp/.folkwolf_latest'
`touch #{ffile}`
if feed_updated != open(ffile).read
	open(ffile, 'w') { |f| f.write("#{feed_url}") }
	Twitter.post('/statuses/update.json', :query => {:status => "New Blog post: #{feed_url}"})
end
file = "/tmp/.xkcd_latest"
if RUBY_PLATFORM !~ /mswin32/
	`touch #{file}`
end
if open(file).read != image_url[0]	
	if RUBY_PLATFORM !~ /mswin32/
		open(file, 'w') { |f| f.write("#{image_url[0]}") }
	end
	Twitter.post('/statuses/update.json', :query => {:status => "d mattrose #{image_url[1]}"})
end

The Linux Hater's blog

Posted by Matt Rose Mon, 16 Jun 2008 06:28:00 GMT

We hate Linux, and you should too.

It's not often I advertise that I found a new blog, but this post convinced me that this blog was something special. I think it's actually a sign of the maturity of the Linux Community. Though some people don't have a sense of humour about it, and write pages-long screeds in response, the general response of the community is positive. It's funny, and it's true.

Here's a snippet that is remarkably true.

Here's the difference: Take a software product from some commercial company. If you ever get a chance to get through the marketing folks and talk to their devs, chances are that they know exactly all the ways concerning how their products suck. They'll have a huge list of reasons of why they can't implement some feature that you, non-paying, ass-hat, non-customer, wants. And then they'll tell you what they should, "Show me the money, or bugger off. We're working here." And then they'll talk shit behind your back about how you have no idea what it takes to ship reliable working complex software. What do you get in the Linux world? Actually, most of the devs are the same. They wrote the code. They know how it sucks. They wrote it for fun, and they don't give a fuck. But some fucktard user who thinks his limp dick is great software comes along and starts talking like it is the shit. And he has to tell everyone else. And if you don't agree? fuck, you must be in that other camp. But really, thanks for that comment. Sometimes it does take someone to shit on my front porch before I can really describe the stench to you.

UPDATE:

I've been working on a Mac port of Terminator recently, It's written in Python, so it would be easy you would think. Except I haven't gotten past the font-rendering conundrum. The Linux Hater feels my pain. I'm going to have to figure out how to hook vte into the mac font renderer.

why RMS is a jackass

Posted by Matt Rose Wed, 14 May 2008 18:20:00 GMT

This guy says it better than I could.

Keeping that in mind, Richard Stallman's missive on the subject just riled me up:

Proprietary software keeps users divided and helpless. Its functioning is secret, so it is incompatible with the spirit of learning. Teaching children to use a proprietary (non-free) system such as Windows does not make the world a better place, because it puts them under the power of the system's developer  perhaps permanently. You might as well introduce the children to an addictive drug. 

Oh, for fuck's sake. You really just employed a simile comparing a proprietary OS to addictive drugs? You know, ones causing actual bodily harm and possibly death? Really, Stallman? Really?

If proprietary software is half as good as free software at aiding children's learning, you're damn right it makes the world a better place to get the software out to children. Hell, if it doesn't actively inhibit learning, it makes the world a better place. The problem is that Stallman doesn't appear to actually give an acrobatic shit about learning, and sees OLPC as a vehicle for furthering his political agenda. It's shameful, the lot of it. </blockquote

Why I spend too much time reading the Well

Posted by Matt Rose Wed, 16 Apr 2008 12:30:00 GMT

ipod tip from the well

Posted by Matt Rose Thu, 30 Nov 2006 15:49:13 GMT

just so I don't forget, and in case anyone wants to know, i found this tip for showing voltage on an ipod

WRT checking battery life, you can ask the current owner to do this on
 a Mac:
 
 touch /Volumes/iPodname/iPod_Control/Device/show_voltage
 
 Or on a PC, create a file named
show_voltage (no file extension) in
 iPod_Control/Device via notepad or something.
 
 This will force the iPod to display a numeric readout of the battery
 voltage ranging from 0 to 519. If you ask the owner to fully charge it
 and then let it play for 10 minutes to see how much it depletes, you'll
 have a good idea of the quality of the battery.

Source Code Control Zen

Posted by Matt Rose Thu, 30 Nov 2006 15:01:00 GMT

one of my main responsibilities at work is source code control and integration.  This could be considered a somewhat trivial work, but these horror stories keep me motivated. moblog: The Windows Shutdown crapfest

In small programming projects, there's a central repository of code. Builds are produced, generally daily, from this central repository. Programmers add their changes to this central repository as they go, so the daily build is a pretty good snapshot of the current state of the product.

In Windows, this model breaks down simply because there are far too many developers to access one central repository -- among other problems, the infrastructure just won't support it. So Windows has a tree of repositories: developers check in to the nodes, and periodically the changes in the nodes are integrated up one level in the hierarchy. At a different periodicity, changes are integrated down the tree from the root to the nodes. In Windows, the node I was working on was 4 levels removed from the root. The periodicity of integration decayed exponentially and unpredictably as you approached the root so it ended up that it took between 1 and 3 months for my code to get to the root node, and some multiple of that for it to reach the other nodes. It should be noted too that the only common ancestor that my team, the shell team, and the kernel team shared was the root.

Joel on Software
A young Windows engineer writes:

prior to the restart effort of Longhorn, there were about seven [branches], reverse-integrating into one main branch every two or three weeks perhaps. Now, imagine several thousand developers checking in directly into seven branches. This will lead to two things:

you check in frequently, and there's a very high chance of either breaking the build, or breaking functionality in the OS, or 2., as a counter-reaction, you don't check in very often, which clearly is bad, since now you don't have a good delta history of what you did.

So this clearly didn't scale. As part of the restart effort, we decided that each team would get its own feature branch, each feature area (multiple teams) would go up to an aggregation branch, and those would lead up to the final main branch. (As such there's now north of a hundred branches in tiers, leading up to about six aggregation branches.) Teams were free to choose how many sub-feature branches they wanted, if any, and they were free to choose how often they wanted to push up their changes to the aggregation branch. As part of the reverse-integration (RI, i.e. pushing up) process, various quality gates had to pass, including performance tests. Due to how comprehensive those gates ended up being, this would take at least a day to run, plus perhaps a day or two to triage issues if any cropped up; so there was a possibly considerable cost to doing an RI in the first place. However, these gates were essential in upholding the quality of the main branch, and had they not existed, the OS would have never shipped. I suppose it's one of those 'what doesn't kill you...' type deals.

I'm inordinately proud of this

Posted by Matt Rose Wed, 29 Nov 2006 23:16:00 GMT

This is a Screen shot of the GIMP, a program designed for the X Windows system, running natively on Quartz, on my beloved MacBook. I of course take all the credit here, but it's all due to the good people at Imendio, who are porting GTK over to Quartz. You can read about their efforts here