Hello
General
Toys
Other
Blog Archives
Super Links
Copyleft

Unless otherwise stated, all original content on this site is licensed under your choice of the GNU FDL or the Creative Commons ShareAlike License.

GNU FDL Creative Commons License

Validate

Hopefully, this website is valid. You can check the XHTML, the CSS, and the RSS.

Valid XHTML 1.0 Strict Valid CSS Valid RSS

Stats

Factum Non Fabula

Ladies and gentleman of the unix persuasion: I present for your enjoyment factumnonfabula, the Mikko Jack dynamic quote generator. Suitable for cut and paste into a terminal.

#!/bin/bash

lynx -dump http://koti.welho.com/mjack1/ | tr "\n" ' ' | \
    perl -nle 's/\s+/ /g; s/References.*?$//; s/\[.*?\]//g; 
               s/[\*_]//g; s/\s+/ /g; @s = /[\.\?!]\s+(.*?[\.\?!])/g;
               print $s[int(rand(scalar @s))]' | \
    fold -s; echo '  -- Mikko Jack'
Good Music

collage of album covers

You can see the music I have been listening to in recent times if you like.

American Edit

cover of the album American Edit

American Edit is a collection of mashups of songs from the album American Idiot produced by Dean Gray (actually team9 and Party Ben).

It is too hot for words.

Seriously, lately I have been listening to songs from American Edit more than the original album, which I like a great deal. Especially recommended are Novocaine Rhapsody and Greenday Massacre. These new-fangled mashup things are the future of music on teh intarweb.

Emacs Tip of the Moment: string-insert-rectangle

The emacs function that seems nifty to me at the moment is string-insert-rectangle. I don't have it bound to any keys, so I invoke it with M-x string-insert-rectangle. Below is its documentation, which can be obtained with M-x describe-function string-insert-rectangle.

string-insert-rectangle is an interactive autoloaded Lisp function in `rect'.
(string-insert-rectangle START END STRING)

Insert STRING on each line of region-rectangle, shifting text right.

When called from a program, the rectangle's corners are START and END.
The left edge of the rectangle specifies the column for insertion.
This command does not delete or overwrite any existing text.

Have fun!

Doin' It for the Kids

miniature motorcycle launch ramp bloody hand

My most interesting recent activities can be summed up with three pictures.

Salon Cookie Exploit

the salon.com logo

This is handy. Nathan Naze discovered that if you load http://www.salon.com/news/cookie.html you will receive the "day pass" cookie salon normally gives you after you watch a commercial. Enjoy it while it lasts.

Emacs Tip of the Moment: hippie-expand

The emacs function that seems nifty to me at the moment is hippie-expand. It is bound to the key sequence M-/. Unless I set that up specially, it is probably bound the same way in your emacs environment. Below is its documentation, which can be obtained with M-x describe-function hippie-expand.

hippie-expand is an interactive compiled Lisp function in `hippie-exp'.
(hippie-expand ARG)

Try to expand text before point, using multiple methods.
The expansion functions in `hippie-expand-try-functions-list' are
tried in order, until a possible expansion is found.  Repeated
application of `hippie-expand' inserts successively possible
expansions.  
With a positive numeric argument, jumps directly to the ARG next
function in this list.  With a negative argument or just C-u, 
undoes the expansion.

Have fun!

mrb's ramblings

The logo of the site mrb's ramblings

My very talented brother Michael has started a blog. He is the author of the Top Hat Man ascii art comics and produces drum and bass as Tonal Discrepancy.

Emacs Tip of the Moment: open-rectangle

The emacs function that seems nifty to me at the moment is open-rectangle. It is bound to the key sequence C-x r o. Unless I set that up specially, it is probably bound the same way in your emacs environment. Below is its documentation, which can be obtained with M-x describe-function open-rectangle.

open-rectangle is an interactive compiled Lisp function in `rect'.
(open-rectangle START END &optional FILL)

Blank out the region-rectangle, shifting text right.

The text previously in the region is not overwritten by the blanks,
but instead winds up to the right of the rectangle.

When called from a program the rectangle's corners are START and END.
With a prefix (or a FILL) argument, fill with blanks even if there is no text
on the right side of the rectangle.

Have fun!

Bloom Filters

I recently discovered these fascinating little data structures that I should have already known about. They are called Bloom filters, and they are a representation of a set of keys. Like a hash table storing booleans, they have constant time lookup, but they are really more like a hash function indexing into a bit vector. The link is to a nice description with a little perl code for illustration; an alternative description is at Wikipedia.

Bloom filters are very intuitive and have a number of appealing properties:

  • simple to describe and implement
  • much more compact than just a hash table of booleans
  • can be OR'd together to form set unions
  • variable probability of false positives which can actually has privacy-preserving applications

Check them out and you will likely be pleased.
(While we're on the topic of neat little data structures that aren't talked about enough, check out skip lists if you're not already familiar with them.)

SSH Filesystem

Shfs is totally the awesome thing of the moment. It is a network filesystem that runs over ssh and just works with zero setup on the server side (provided it is running an ssh or rsh server).

The way it works is this. On the client system, you install shfs, which consists of a regular VFS kernel module. Then you can just do "shfsmount foo.bar.edu /mnt/shfs" (where foo.bar.edu is some machine you can ssh into) and the kernel module will establish a ssh connection into foo.bar.edu. Now whenever you do anything in /mnt/shfs (ls for example), shfs will run some shell or perl code on the server machine to satisfy the request, and it will work just as if you were sitting in your home directory on foo.bar.edu.

The idea is so dead simple and yet has such radical results that I wanted to smack myself for not having thought of it. Man, what a cool idea. Performance is not horrible either because it does some caching.

Annoying Phenomenon in Gaim

Off and on for the past several months I have been struggling with an extremely frustrating bug / strange behavior with the (nevertheless) greatest instant messaging client ever written, Gaim. Sometimes, when I would start Gaim, the windows for logging on to my account would appear normally, but the buddy list window would be invisible. I could tell that Gaim was still running by looking at the output of ps(1), and incoming instant messages would even pop up (visible) conversation windows and work just fine. But my instant messaging activities would be seriously impaired since I couldn't start conversations or see who was online. Restarting Gaim (or even my X server) had no effect. Then eventually - perhaps days or weeks later - I would just start up Gaim and the problem would seem to be gone. Despite searching far and wide on the web, I could find no mention of this phenomenon. I have been experiencing this problem off and on across many versions of Gaim.

Now that I have finally discovered a way to fix this problem when it crops up, I'm saying something about it so google will discover it and others may be saved some time. If this happens to you, shut down Gaim and look in the file where Gaim saves your preferences. On a typical Unix/Linux system, this is "~/.gaim/prefs.xml". In that file, look for lines that look similar to the following.

⟨pref name='x' type='int' value='-43' /⟩
⟨pref name='y' type='int' value='-39' /⟩

Change them to have zeroes as below.

⟨pref name='x' type='int' value='0' /⟩
⟨pref name='y' type='int' value='0' /⟩

Start up Gaim again and hopefully the problem will be fixed. One of these days I'm going to find out how to properly reproduce it and then submit a bug report. I imagine Gaim alone is not the culprit but rather an interaction between Gaim and my window manager (fvwm2, especially due to the fact that I use multiple desktops).