Sep 04
I really like the app on AngelSoft’s new homepage.
A long time ago I created an app that would post messages to the homepage in a ticker when site visitors would do stuff. It was for a liberal political action NGO. From the homepage of this NGO’s site the ticker would flash messages like “A member just sent a fax to Senator Jim Webb about Senate Bill 1022″ or “Bill Jones just became a new member. Welcome Bill!”
I like how they’ve taken that concept and put it on a map. Nice.
Funny how we forget cool ideas from long ago. And funny how we forget that there’s always a chance to build off of old ideas to create newer, better ones.
Great work, AngelSoft. I expect to see a lot of people follow suit.
Aug 27
Microsoft has been issued a patent on Page-Up/Page-Down functionality (see below). I was annoyed when Amazon patented One-Click-Checkout, but this patent is even more troubling. I have written about Patent craziness before, mostly as it related to “Submarine Patents” (i.e. patents for products that will never see the light of day, to the benefit of the patent-holder).
This tactic is somewhat different. It patents an industry standard that has been in effect for a long time. 30 years ago, computers had page-up and page-down keys on their keyboards. It seems a little late to be seeking protection for such an innovation.
Anyone know the prior art backstory here?
From the USPTO
A method and system in a document viewer for scrolling a substantially exact increment in a document, such as one page, regardless of whether the zoom is such that some, all or one page is currently being viewed. In one implementation, pressing a Page Down or Page Up keyboard key/button allows a user to begin at any starting vertical location within a page, and navigate to that same location on the next or previous page.
For example, if a user is viewing a page starting in a viewing area from the middle of that page and ending at the bottom, a Page Down command will cause the next page to be shown in the viewing area starting at the middle of the next page and ending at the bottom of the next page. Similar behavior occurs when there is more than one column of pages being displayed in a row.
Aug 19
A lot of people are in the business of cataloging “Scrum Smells”, those warning flags that indicate you may have some problems in your agile development process.
These are the ones that I think are important, and common. If these things are happening on your team, UR DOIN IT WRONG.
- Your Burndown Chart does not have an entry on it for every day’s remaining activity.
- Someone asks you how your sprint velocity is changing over time and you answer, “It’s hard to compare sprints, because each one is a different length.”
- You can’t tell me when the next Sprint Planning Meeting is, or what was agreed to at the last meeting.
- You have no idea what you’ll be working on in 4 weeks. Not even a foggy notion.
- When asked if you use scrum, you have to answer, “We use our own special flavor of scrum.” Seriously. There isn’t enough process involved in scrum to have seasonings added to it.
- You are the product owner and the scrum master.
- You are the scrum master and the boss of your scrum team members.
- Your burndown chart goes up sharply at the beginning of each sprint (hint: play planning poker 2 days ahead of the sprint meeting).
- Business stakeholders get mad at the engineering team when their feature isn’t scheduled for an upcoming milestone (hint: that’s the product owner’s baliwick.)
- You have more than 3 or fewer than 1 sprint goals on the board.
Aug 18
My day job has been keeping me busy-busy-busy, but I had some time this weekend to add some more to MyQuotable.com. Here is what is new:
- You can now edit your user profile. (Name, etc)
- The color scheme is slightly different.
- You now collect positive karma every time someone votes for one of your quotes.
- Pagination!
- I refactored the statusbar. Breadcrumbs and navigation work better and more consistently.
Next up: Search and Categorization
Aug 01
MyQuotable is a fun project for me. Here is what is new:
- Tags: Tag your quotes and filter by those tags.
- /popular: See which quotes have the most votes
- RSS Feeds for Recent, Popular, and User specific quotes.
What’s next? You tell me. The alpha testers I have so far have had some great feedback. Here is my punchlist:
- Quote updates via email
- Pagination
- Wordpress plugin
- Friending / Following
- Tag other user’s quotes and View items you have tagged
- View items you have voted on
- Tag cloud view
- Manage my account settings
If you haven’t given the site a try yet, please do. I welcome your feedback.
Jul 21
Quotes. I love quoting people. I have a ton of quotes saved in text files, on my blog, in my various mood messages on IM platforms, and who-know-where-else.
I decided to build an application to manage, organize, and syndicate quotes. You can read more about it on my project page for MyQuotable.
If you read this blog, you are invited to participate in my open alpha of MyQuotable.com.

Early Alpha image of myquotable.com
Jul 01
Dr Nic is a seriously productive badass. I can’t manage to keep up with all of his github projects. I read his blog: frankly, he doesn’t post all that often. But it seems like he’s got a new github project every couple of days.
Seriously, I’m not sure how the guy cranks it all out. These are **not** piddly little projects. One day, he’ll publish a new framework. Then he’ll fork something trivial like….oh…I dunno…Merb. And fix a ton of bugs. Then he’ll publish a handful of TextMate bundles that he developed while working on the framework. Then he’ll decide he wants to publish a few snippets and out comes PastiePacker.
Check out a few of his projects. Most of them are small, focused, and very useful. They’re good stuff. My current fave is the iPhone Ruby project.
It’s teh chown.
Jun 06
Sorry for the outage on this blog yesterday. My hosting provider upgraded to Rails 2.1, and I had cleverly forgotten to:
bash# rake freeze:rails:gems
If this happens to you, and you make the unfortunate mistake of trying to instead update Typo to Rails 2.1 using:
You’ll be in even worse trouble, unless you’re prepared to do a lot of fixing:
bash# Pete$ script/server
./script/../config/boot.rb:45:in `require': no such file to load -- ./script/../config/../vendor/rails/railties/lib/initializer (LoadError)
from ./script/../config/boot.rb:45:in `load_initializer'
from ./script/../config/boot.rb:38:in `run'
from ./script/../config/boot.rb:11:in `boot!'
from ./script/../config/boot.rb:109
from script/server:2:in `require'
from script/server:2
Your best bet? Revert from source control and freeze Typo in your dev environment. If you’re stuck without source control or a dev environment, let me know and I’ll talk walk you through the alternate fix.
May 26
Since I seem to be on a “Comment” and “Terseness” rant, I’d like to point out that I dislike block comments for everything but RDoc.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| x ||= ["0"]
=begin
this is a block comment
It's good for auto-generated documentation
, I suppose.
x.push("1")
But that line of code above might be mistaken
for something that executes, if you're not using
a good IDE with colorization.
=end
puts x.inspect # ["0"].... NOT ["0","1"] |
It’s harder to make that mistake when the code looks like this:
1
2
3
4
5
6
7
8
9
10
| x ||= ["0"]
# this is not a block comment
#
# x.push("1")
#
# Now that line of code above shouldn't be mistaken
# for something that executes, even if you're not using
# a good IDE with colorization.
puts x.inspect # ["0"], just like you'd expect |
Given that just about every IDE out there allows you to select a bunch of text and comment it out en-masse, I think the second method works better.
Hopefully, Peter Cooper will forgive me for taking issue with so many of his Ruby Tricks. Most of them are REALLY REALLY GOOD.
May 26
In my post about clever code vs. terse code, I showed some distaste for code that attempts to put a bunch of logical statements on one line. I have a particular coding prejudice that lines of code should be short from left-to-right, if at all possible.
The reason? I like sidebar comments.
Maybe this is my showing my age. Back in the day, we didn’t have widescreen MacBook Pro laptops that could display 600 characters across the screen. (And we liked it! While walking uphill both ways in the snow to school…) Between 17″ CRT monitors and the IDE, I was lucky to get 100 characters across.
So instead of writing long lines of code, I prefer to use a couple extra lines and simplify each discrete statement. Then I will sometimes put comments (aligned with each other) out in the right margin that map to my pseudo-code (which is usually just in my head….I don’t actually write much pseudo-code in Ruby).
For example:
1
2
3
4
5
6
7
8
| # Spawn a set of threads to process the queue
1.upto(threadcount) do |thread_id|
threads << Thread.new(thread_id) do |i| # Each thread
until @queue.empty?() do # grabs an item from the queue
yield(thread_id, @queue.deq()) # and yields it to the block
end
end
end |
Some people call this “code smell.” The meaning, I guess, is that if I have to write comments that outline what the code does, the code must be too complicated.
I beg to differ.
Imagine for a moment that you are a fresh-out-of-college programmer, and you open up my codebase to maintain it. You find this:
1
2
| # Spawn a set of threads and process the queue all on one line
1.upto(threadcount) { |thread_id| threads << Thread.new(thread_id) { |i| yield(thread_id, @queue.deq()) until @queue.empty? } } |
You might run away screaming after a few dozen lines like that. I sure would. Smaller lines with comments make it easier to follow. And I think sticking them out on the right margin where they don’t interrupt the flow of code makes it easier to ignore them if you’re an experienced programmer who doesn’t need them.