Archive for the ‘linux’ Category

cmd line history meme

Saturday, April 19th, 2008

Aaron tagged me

brian@airstream:~$ history 1000 | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' |
  sort -rn | head

182 cd
141 ls
55 vim
52 ssh
44 timeclock.rb
29 ruby
28 irb
26 fr
26 cat
24 rake
  1. I’ve made a definite switch to emacs, but vim is still handy for the quick view of a file, and I start emacs in the morning via an icon, and it stays up all day - otherwise, it would be way up on the list.
  2. timeclock.rb is a handly little script to parse/format an emacs timelog file - incredibly nice way to track time on various tasks.
  3. fr is an alias for: find . -regextype posix-extended -regex ‘\”.*.r(b|html)’\” | xargs grep

Tag. You’re it :)

Nice Fonts for GNU Emacs on Ubuntu Linux

Thursday, February 7th, 2008

Before discussing how to get nice fonts for emacs, it might be reasonable to ask, “why emacs?” I haven’t fully answered that question myself, but had I not been able to get nice, readable fonts on emacs, I probably wouldn’t continue researching it. For the info on getting nice fonts to work, scroll down to “Nice Fonts” below.

After many years of using large IDEs to develop software, I switched to vim about a year and a half ago when I began developing with Ruby on Rails. Although the learning curve for vim was a bit steep, I quickly got to the point of being more productive with vim than I was with my previous IDE, and I’m continually learning features of vim that save me time and effort.

Ok, if vim is so great, why am I considering emacs? In a word, Lisp. Emacs, has great Lisp support. For the little bit of Lisp dabbling I’ve been doing, vim has been fine, but from what I’ve seen demonstrated with emacs and slime, I think it’s worth researching. Another important factor is that emacs is scripted with elisp, a dialect of Lisp. I’ve never taken the time to read up on vim scripting, but scripting emacs with elisp seems easy. Type in some elisp code into the scratch buffer, evaluate it, and it’s integrated immediately into emacs. I haven’t written any vim scripts in a year and a half, but within a few hours of researching emacs, I had implemented several elisp scripts (from source obtained online).

Here’s one to simulate the % command in vim which moves the cursor to the matching paren:

(defun match-paren (arg)
  "Go to the matching paren if on a paren; otherwise insert %."
  (interactive "p")
  (cond ((looking-at "\s(") (forward-list 1) (backward-char 1))
	((looking-at "\s)") (forward-char 1) (backward-list 1))
        (t (self-insert-command (or arg 1)))))

(global-set-key "%" 'match-paren)

Here’s one to simulate the vim o and O commands which open a new line either below or above the cursor and position the cursor properly indented, so you can start typing immediately. I use this quite often in vim:

(defun bja-open-line-below ()
  (interactive)
  (end-of-line)
  (open-line 1)
  (next-line 1)
  (indent-according-to-mode))

(global-set-key [?C-o] 'bja-open-line-below)

(defun bja-open-line-above ()
  (interactive)
  (beginning-of-line)
  (open-line 1)
  (indent-according-to-mode))

(global-set-key [?M-o] 'bja-open-line-above)

After my brief exposure to emacs, I think vim is more concise. In other words, it appears that vim can accomplish a given task with fewer keystrokes than emacs. I’m curious to see how hard it is to extend emacs to have some of the niceties I’m used to with vim. Maybe I can have the best of both worlds - the conciseness of vim and the extensibility and Lisp support of emacs. Lennart Borgman passed on a link to vimpulse.el, so I’ll take a look at it soon.

I swapped my caps-lock with my left control key a long time ago, so the emacs chording isn’t quite as much of a problem, but I still wonder if vim might be easier on the hands/wrists since it requires very little chording.

I know some famous lispers use vi(m) for Lisp development, so I don’t think emacs is a must-have. Also, if I end up using a commercial Lisp such as Lispworks or Allegro, I may consider returning to an IDE for lisp development. So, at this stage, I’m still very much a vim user who is researching emacs.

UPDATE:Well, sometime between the original post and now I became a die-hard GNU Emacs user, so I figured I’d update the post :)

Nice Fonts

But enough of that, how do you get nice fonts on emacs? I had heard that the new version of emacs (22) provided anti-aliased fonts, but apparently I was mistaken. I spent hours Googling and rebuilding emacs to no avail - quite a frustrating experience. Then I posted a question on the gnu.emacs.help usenet group and received a helpful reply in a few minutes which did the trick. Here’s the thread.

Here’s what I did:

cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co emacs
cd emacs
./configure --enable-font-backend --with-gif=no
make bootstrap
make
sudo make install

After that, I was able to use the ‘Bitstream Vera Sans Mono-10′ font, and it looks great!

emacs -r -fn ""Bitstream Vera Sans Mono-10"

The -r flag is for reverse video. I much prefer a black background. After making emacs from the cvs sources, it reports its version as 23.0.60.2.

After editing my ~/.Xresources file to have the following line:

Emacs.font: Bitstream Vera Sans Mono-10

And running the command:

xrdb -merge ~/.Xresources

Emacs automatically uses that font at startup.

During my hours of Googling, I had seen the page with the correct information here. But in my haste, I read the statement, “Note: Since the emacs-unicode-2 branch which had the xft support is merged into trunk, the current page is obsolete.“, and somehow got the impression that the entire page was obsolete, but apparently that is not the case.*

Fortunately, the helpful folks on gnu.emacs.help set me straight - thanks guys!

*UPDATE: I edited the wiki page referenced above, so the “obsolete” notice is further down the page.

Bug Labs

Saturday, December 1st, 2007

This is one of the coolest ideas I’ve seen in a while. Bug Labs is developing some technology that should be very interesting to any geek. Another great find by Robert Scoble. The video quality isn’t high because they were recorded on his cell phone, but I’m glad he had a video capable cell phone with him when he bumped into Peter.

Part One
Part Two
Part Three

bug_lab.gif

VMWare Workstation on Ubuntu 7.04

Friday, May 25th, 2007

After upgrading my Ubuntu installation from 6.10 to 7.04, vmware workstation stopped working. I downloaded the latest VMWare 5.5.4 with no improvement. Then I found this article which fixed the problem in a few seconds!

Just in case the article goes away, I’ll post the instructions here as well:

From the vmware-distrib directory, do the following:

# cd lib/modules/source/
# cp vmmon.tar vmmon.tar.bck
# tar -xvf vmmon.tar
# vim vmmon-only/include/compat_kernel.h

Change the line with:

static inline _syscall1(int, compat_exit, int, exit_code);

to:

/* static inline _syscall1(int, compat_exit, int, exit_code); */

Tar the directory to vmmon.tar:

# chmod 755 vmmon.tar
# tar -cvf vmmon.tar vmmon-only

Finally, go back to vmware distrib directory:

# cd ../../../

Rebuild:

# sudo ./vmware-install.pl

The error messages that indicate the problem for which this fix should work are as follows:


Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config1/vmmon-only'
make -C /usr/src/linux-headers-2.6.20-15-386/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.20-15-386'
CC [M] /tmp/vmware-config1/vmmon-only/linux/driver.o
In file included from /tmp/vmware-config1/vmmon-only/linux/driver.c:80:
/tmp/vmware-config1/vmmon-only/./include/compat_kernel.h:21: error: expected declaration specifiers or ‘...’ before ‘compat_exit’
/tmp/vmware-config1/vmmon-only/./include/compat_kernel.h:21: error: expected declaration specifiers or ‘...’ before ‘exit_code’
/tmp/vmware-config1/vmmon-only/./include/compat_kernel.h:21: warning: type defaults to ‘int’ in declaration of ‘_syscall1’
make[2]: *** [/tmp/vmware-config1/vmmon-only/linux/driver.o] Error 1
make[1]: *** [_module_/tmp/vmware-config1/vmmon-only] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.20-15-386'
make: *** [vmmon.ko] Error 2
make: Leaving directory `/tmp/vmware-config1/vmmon-only'
Unable to build the vmmon module.

For more information on how to troubleshoot module-related problems, please
visit our Web site at "http://www.vmware.com/download/modules/modules.html" and
"http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html".

Execution aborted.

Half star ratings on Netflix

Wednesday, May 2nd, 2007

I noticed a friend of mine (Jordan L.) who had half-star ratings (2.5, 3.5, etc.) on Netflix. When I asked him about it, he said to just “hover over the left side of the star” to get a half-star rating. This didn’t work for me, so I thought it might be a Linux vs. Windows thing and asked another friend (Mike F.) to try it out. Same result - didn’t work in IE or Firefox on Windows. Then Mike found a JavaScript file that could be installed with greasemonkey and that worked fine for him.

I’ve yet to install greasemonkey, and I don’t like the idea of installing JavaScript on my system unless I’ve thoroughly analyzed it, so I thought of another way.

I installed wireshark on my Ubuntu Linux box and sniffed the network traffic to Netflix when I rated a movie. After some experimenting and removal of extraneous info, I came up with the following URL to rate a movie with half stars. This specific URL will rate the movie “The Incredibles” with a 4.5 star rating (probably a bad example since The Incredibles clearly deserves a 5 star rating):

http://www.netflix.com/SetRating?widgetid=M70001989&value=4.5

To rate other movies, simply replace 70001989 with the id of the movie which you can find by hovering over the movie. I believe you’ll need to be logged in to Netflix already for this to work.

Now as to why Jordan can rate half-stars without the aid of a greasemonkey script, that’s still a mystery.

Update: got an email from Jordan explaining that his Netflix pages include the following two JavaScript source files:

src=”http://www.netflix.com/layout/jscript/dom_starbar_v2.js?v=126505″
src=”http://www.netflix.com/layout/jscript/dom_starbar_halfstars.js?v=126505″

I only have the first one, and from the name of the second one, I presume that’s the one that gives him the special half star rating capability. I guess Netflix favors Jordan over me :(

Update 2: mystery solved! My curiosity got the best of me so I contacted Netflix. The rep said they’re running a test and Jordan just happened to get picked (I didn’t mention Jordan, but I suppose they looked through my ‘friend’ list)! They do that periodically to test features to see if they’ll give them to the unwashed masses. I asked if they could run the test on me, and he said it didn’t work that way :) So I guess it’s the greasemonkey script or the inconvenient URL hack for the rest of us.

Etch is here

Sunday, April 8th, 2007

Wow, debian.org has finally released version 4.0 (”etch”). debian is an awesome linux distribution for servers, but 3.1 has some rather old packages. In particular, I need Apache 2.2 for mod_proxy_balancer, so I installed Ubuntu 6.10 server on my last server to get more recent packages. I expect to use debian 4.0 for future server installs.

I found out about this from distrowatch.com and there’s a blurb on slashdot.org about it.