I'm a big fan of LESS, so naturally I decided to write an emacs major mode to support it. It's rather rudimentary at this point, but it's far better than working in fundamental-mode. If you're a user of both LESS and emacs, give it a shot and let me know what you think.
(defun jlh-join-lines (arg)
"Join this line to the line above n times
Running this command with an argument of 1 is equivalent
to running 'delete-indentation (aka 'join-line)."
(interactive "NHow many lines to join?: ")
(while (> arg 0)
(join-line)
(setq arg (- arg 1))))
For years, I've wanted to try my hand at roasting my own coffee. Hoping to do it cheaply, I've always been looking for a very specific type of popcorn popper that will work for this purpose. However, given the trend that popcorn poppers seem to have taken, I'd more or less given up on the idea.
A few months ago, Matt was kind enough to let me borrow his Fresh Roast Plus that he had since replaced. It's a great little roaster, and given what I now know, I'm glad this was the first roaster I've used. It does have its drawbacks, but it's a great roaster to learn on. Most notably, the build of the unit let me see what was happening to the beans throughout the roast, and also let me hear the audible cracks of the coffee beans. Now that I've done a little bit of roasting, I'm planning on moving up to a unit that can roast a half-pound or a full pound at a time. The Fresh Roast can accommodate only 3 ounces at a time, which means that to have fresh coffee consistently, one would have to roast nearly every day, depending on coffee consumption.
I started by ordering a sampler from Sweet Maria's, which gave me 8 different types of coffee to try roasting. I've liked them all, and it's amazing to taste the vast differences in flavor. Up until very recently, I had been letting beans sit for 12-24 after roasting before grinding and brewing, which I'm now realizing likely contributed to too much acidity. My most recent batch rested for about a week, and the flavor is much more apparent.
The roasting process itself is drop-dead simple. All it takes is putting the beans in the roaster, turning it on, then waiting for the appropriate signals to know when to stop. I used a guide from Sweet Maria's which has plenty of information on the roasting process.
I can tell I've got a ways to go before the beans rival those of my favorite local roaster, but they're a heck of a lot better than any of the national chains.

I love the integration between github and lighthouse. (If you're not familiar with this, have a look.) However, I always found myself forgetting which ticket I was working on when writing commit messages. At first, I wrote this script just to add the ticket number in the git commit message, but it quickly evolved to help throughout the workflow.
When starting on a new ticket, this script helps by
- Assigning a ticket to when starting work
- Creating a local branch with an intelligent name
On completion it will
- Set the state of the ticket to a user-defined value (through the git commit msg)
- Clear the active user (also through the git commit msg)
Workflow
Here’s an example of the workflow…
Setup
Install Bugflow
Just grab this script and put it wherever you like. (I prefer ~/bin)
Install Gem
Grab the lighthouse gem from github:
$ gem sources -a http://gems.github.com $ sudo gem install Caged-lighthouse-api
Project Config
Finally, create a file in the root of your project called .bugflow.yml and add the following data:
Also, it’s a good idea to add this file to your .gitignore.
$ echo ".bugflow.yml" >> .gitignore
Happy hacking!
After pairing with a coworker using Textmate's Blackboard theme, I decided I wanted it for emacs. The font lock I'm using in emacs for ruby didn't let me recreate it perfectly, but it's certainly close enough for me.
Here's my first crack at it: color-theme-blackboard.el
Update: Screenshot.
While at cabooseconf last month, I found out about one of the coolest time tracking tools ever: punch. (Thanks to cardiod from OG)
According to its own description, it's a
I find this to be a much easier method of tracking time than many alternatives, including the zillions of time tracking/billing web 2.0 sites. In fact, an hour or two of hacking could leave someone with a pretty decent time tracking AND invoicing tool.k.i.s.s. tool for tracking the hours spent on various projects. it supports logging hours under a project name, adding notes about work done during that period, and several very simple reporting tools that operate over a window of time.
And wouldn't ya know it, it's as simple as gem install punch.
For those of you who use OmniFocus and won't be getting an iphone, this one could really come in handy. It's a ruby script that talks to OmniFocus via OSA, grabs all the items in a given context, then writes them as poorly-formed html over ssh to a predefined destination. Cheap and dirty, but it's the quickest way I've found to get stuff like this available anywhere, especially in a mobile phone browser.
#!/usr/bin/ruby
require 'rubygems'
require 'rbosa'
require 'net/ssh'
of = OSA.app 'OmniFocus'
shopping_list = of.default_document.contexts.collect { |x| x if x.name == 'Errands' }.compact.first.contexts.collect { |x| x if x.name == 'Shopping' }.compact.first
items = shopping_list.tasks.collect { |x| x.name unless x.completed? }.compact
def post_file( shell, file, datum )
shell.touch(file)
shell.send_command("echo \"#{datum}\" > #{file}")
end
def build_html(items)
"<ul>#{items.collect{|item| '<li>' + item + '</li>' }}</ul>"
end
Net::SSH.start( 'myserver.dreamhost.com' ) do |session|
shell = session.shell.sync
post_file shell, "~/shoppinglist.mydomain.com/index.html", build_html(items)
shell.exit
# session.loop
end


Recent Comments