Inigo’s Tale

(Flamenco)
Inigo:
The city of Toledo
gathered much acclaim
known for great sword makers
The best in all of Spain

The finest was  Domingo
His sword were straight and true
His family name: Montoya
That is my last name too.

One day we had a visit
From a most important man
He needed a custom foil
For his six fingered right hand

My father loved the challenge
and said he’d forge it right
for weeks he worked unstopping
from dawn to late at night

The six-fingered man demanded the saber
at one tenth the price agreed on at the start
my father refused and the six-fingered man
slashed my father right through the heart.

I loved my father dearly
he raised me to be true
though I was but eleven
I challenged him to a duel

The man he left me bleeding
with the marks you see here
That’s the last time I saw him
It has been twenty years

Twenty years of training
to duel as best I can
Twenty years of searching
For the Six Fingered man

I will find my father’s murderer
I will look him in the eye and say
Hello my name is Inigo Montoya
You Killed my Father
Prepare to Die.

Brawns, Brain, and Steel

This one is a minor I-IV-II-V number based on a melody I wrote a long time ago.  It is acappella until Fezzik starts.

Brawn, Brains and Steel

Vizzini: I was wondering if you’d help us
We’re performers from the circus
Lady up there on your horse
Can you help us find our course

How far to the closest town
Buttercup: There is none for miles around
Vizzini:There is no one near this scene
so nobody will hear you scream

Fezzik: If you want a job done right
bring along a man of might

Inigo: To bring the plan into accord
get yourself a hired sword.

Vizzini: For a plan thats circumspect
needs a cunning intellect

For proper execution you’d best combine
Fezzik:My strength
Inigo: My Sword
Vizzini: My mind

First of all you need a plan
Vizzini he is your man
If you have some heavy work
You get Fezzik, the might Turk

To protect your gotten gain
Inigo the sword from Spain
The only way to close the deal
You need brawn and brains and steel.

If you’ve a mission coming on
you need steel and brains and brawn

Highlander Syndrome in Package Management

Somewhere between systems work and application development lies the realm of package management. There are two main schools of thought in package management: inclusive or exclusive. If you are inclusive, you want everything inside a package management system, and everything should be inside one package management system. If you are exclusive, you want the system to provide little more than an operational environment, and you will manage your own applications thank-you-very-much.

One problem with the inclusive approach is, in the attempt to clean up old versions, you often end up with The Highlander Syndrome. There can be only one version of a library or binary installed on your system. The Exclusive approach is more end application focused. I may need to run a different version of Python than is provided by the system, and I don’t want to be locked in to using only the version installed system wide. In fact, I may require several different versions, and each of these require their own approach.

CPAN, Pear, and Maven have provide language specific approaches level APIs to resolving dependencies at the per application level. Maven is particualrly good at providing multiple versions of the API: I errs so far this way that often the same Jar file will exist multiple times in the maven repository, but under different paths.

There should be middle ground for the end user between all or nothing in package managemnt. As a system administrator, I don’t want users running “just any” software on their system, but as an end user I don’t want to be locked in to a specific version of a binary.

If the role of application maintainer is split from the role of system administrator, than the people that fill those two roles may have reason to use a different approach to package management. Since the app developer can’t be trusted, the sys admin doesn’t provide root access. With no root access, the app developer can’t deploy an RPM/Deb/MSI. The app developer doesn’t want the system administrator updating the packages that the app depends on just because there is a new bugfix/feature pack. So, the app developer doesn’t use the libraries provided by the distribution, but instead provides a limited set. Essentially, the system has two administrators, two sets of policy, and two mechanisms for applying that policy.

Each scripting language has its own package management system, but the binary languages tend to use the package management system provide by the operating system.  Most Scripting language programmers prefer to work inside their language of choice, so the Perl system is written in perl, the emacs system is written in LISP, the Python one in Python and so on. The Wikipedia article goes into depth on the subject, so I’ll refrain from rewritintg that here.

A Package management system is really a tuple.  The variables of that system are:

  • The binary format of the package
  • The database used to track the state of the system
  • The mechanism used to fetch packages
  • The conventions for file placement

There is some redundancy in this list.  A file in the package my also be considered a capability, as is the “good name” of the package.  A package contain empty sets for some of the items in this list. For example, an administrative package may only specify the code to be executed during install, but may not place any files on a file system. At the other extreme, a package may provide a set of files with no executable code to be run during the install process.

Of these items, it is the conventions that really prevent interoperability. This should come as no surprise:  It is always easier to write an adapter on top of an explicit interface than an implicit one. The Linux Standards Base helps, as does the standards guidelines posted by Debian, Red Hat, and other distribution providers. However, if you look at the amount of traffic on the mailing lists regarding “file X is in the wrong place for its type” you can understand why automating a cross package install is tricky.  Meta package management schemes attempt to mitigate the problem, but they can really only deal with thing that are in the right place.

Take the placement of 64 bit binaries.  For library files, Red Hat has provided a dual system:  put 32 bit libriares under /usr/lib and 64 bit libraries under /usr/lib64.  Debian puts them all into the same directory, and uses naming to keep them apart. In neither case, however, did they provide a place to make 32 and 64 bit binaries co-exist. How much easier would migration have been if we had /usr/bin32 and /usr/bin64, with a symlink from either into /usr/bin?

Thus we see a couple of the dimensions of the problem.  An application should have a good name:  web server, mail client,  and so on.  A system should support multiple things which provide this capability, a reasonable default, and customizability for more advanced users.The system should provide protection against applications with known security holes, but provide for the possibility of multiple implementations released at different points in time.

An interesting take on package management comes from OSGi.  It is a language specific package management approach, specifically for Java.  It takes advantage of portions of the the Java language to allow the deployment of multiple versions of the same package inside a since Process. When I mentioned this to some old time Linux sys admins, they blanched.  OSGi does not specify how to fetch the packages, much like RPM without YUM or DPKG  with out APT.  OSGi packages are installed into the application.  As such, they are much more like shared libraries, with specific code sections run on module load and unload.  Different OSGi container provide different sets of rules, but basically the packages must exist inside of a subset of directories in order to be available for activation.  I have heard an interesting idea that the JPackage/RPM approach and OSGi should ideally merge in the future.  To install a Jar into your OSGi container, you would have to install an RPM.

One additional issue on the Java/RPM front is Maven.  Both Maven and RPM want to run the entire build process from start to finish.  Both have the concept of a local Database of packages to resolve dependencies.  For long term Java/RPM peaceful coexistence, RPM is going to have to treat Maven as a first class citizen, the way that it does make.  Maven should provide a means to generate a spec file that has the absolute minimum in it to track dependencies, and to kick off an RPM build of the Maven artifacts.

The Princess Bride Song

Second Scene, where Humperdinck Proposes.  This expands on the movie, using some details from the book.

The Princess Bride

Buttercup, far I have traveled

I’ve ranged this domain I command

Seeking a suitable Princess

To become the Queen of the Land

In the far corner of Florin

I heard the tale of a Girl

Possessing spectacular beauty

Unrivaled in all of the world

It may be that your birth is common

But by the most noble of Arts

I see the majestic potential

Encased in you delicate Heart

Buttercup hear my decision

It took not long to decide

The law of the land shall support me

Buttercup shall be my Bride

Hear me now People of Florin

one month from this moment here

Our Country will have been founded

Exactly 500 years

At sundown of that very evening

A Lady will stand at my side

Florin will have a new Princess

And I shall take her as my bride

Not long ago she was common

In A farm house she was seen

Now you will find she’s is Noble

And Regal as befits your Queen

Would you now like to behold her

The Joy overflows from my cup

The Princess that soon I will Marry

Behold Princess Buttercup

Buttercup your heart is empty

Consumed as it were by a flame

that burnt away all your ambition

and left you with nothing but pain

I know you claim not to love me

I hope that will alter with time

Someday your pain will diminish

One day you will cease to pine

Perhaps the fault lies in this castle

solid stone walls that surround

your home was open and verdant

You may crave to travel the open ground

A breath of fresh are will revive you

Comfort will find you outside

You’ll find your horse has been saddled

Buttercup please take a ride

As You Wish

This is my take on the Princess Bride as a Musical. I’ve written it as a light Opera: all scenes will be sung. I have melody lines and chords for most songs.  I’ll post each number individually.

Act One, Scene One:

As you Wish

(Narrator)
Buttercup was a beauty
With but two things to enjoy
Going horseback riding
And tormenting her Farm Boy.

Buttercup: Farm boy I require
More wood for the Fire
And then my horses saddle you will polish
Give it such a sheen
My face can be seen
And all you say is simply “As you wish.”

As the seasons pass
I more gently ask
Farmboy, would you please fetch me that dish.
And as I watch your eyes
I begin to realize
There may be something in that “As you wish.”

As you wish is all you say
But your eyes give you away
And my last bit of resistance seem to vanish
While you silently subserve
I can finally observe
What you really mean when you say “As you wish.”

This trip you must take
You’re fortune for to make
“I’ll always come for you”, I hear you say
And though you say its so
I ask you how you know
“True love doesn’t happen every day.”

“As you wish” I hear you say
As I watch you sail away
The horizon makes your vessel vanish
Once your gone I will abide
Know that I will hold inside
The echo of you saying “As you wish.”

Pirates Roberts took your ship
No survivors left of it
Condemning me to live on in anguish
For my love has passed away
I will never hear you say
Your quiet phase of loving
“As you wish.”

interface2addr

This little script will give you the ipv4 address for a given network interface, or list all of them if you leave the parameter blank:

#!/bin/bash

INTERFACE=$1

/sbin/ifconfig $INTERFACE | grep “inet addr” | cut -d\: -f 2 | cut -d” ” -f 1

Call it like this:

~/bin/interface2addr eth0

Hacking the Palm Pre from Fedora

My work machine is a Fedora 11 (F11) X86_64 system. The palm development SDK is distributed as a series of .deb packages, specifically targeted at an 32 bit Ubuntu 8 system. While I have the advantage of having a 32bit Debian system at home, so I was able to run through the setup process for development, ideally I would be able to attach to and control the Pre from my work machine.

The first step is to download the .deb files onto the F11 machine. I actually only needed the novacom deb, which in my case is novacom_1.0.38_i386.deb. Deb files are accessable using ar (happy talk like a pirate day!).

In a new and empty directory, run
ar -vxf ~/novacom_1.0.38_i386.deb

And you will see the three contained files:

control.tar.gz data.tar.gz debian-binary

Extract the data file using tar

tar -zxf data.tar.g

This will add a usr directory with the binaries in

usr/local/bin/novacom{d}

Novacom is a two piece effort: a daemon an a client. First make sure you can run the daemon.

First, lets see the file type:

file novacomd

novacomd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped

Let’s see what libraries it requires:

ldd novacomd
linux-gate.so.1 => (0x008f1000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0078a000)
libusb-0.1.so.4 => not found
libc.so.6 => /lib/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x006ae000)

Note that the USB library is missing. I have it installed on my system, but only the 64 bit version. To get the 32 bit version, first, figure out what the 32 bit vversion is named.

yum search libusb

libusb.i586

And install

sudo yum install libusb.i586

F11 and the RHEL based approach for running 32bit apps on 64 makes this fairly easy to do. Unlike Debian based system which pretty much require you building a chroot if you are going to run a significant amount of 32 bit binaries, Red Hat based systems put 64 bit libraries into /usr/lib64 and 32 bit libraries int /usr/lib, so they don’t conflict. Now lddd shows we have everything:

ldd novacomd
linux-gate.so.1 => (0x00262000)
libpthread.so.0 => /lib/libpthread.so.0 (0x008a5000)
libusb-0.1.so.4 => /usr/lib/libusb-0.1.so.4 (0x00770000)
libc.so.6 => /lib/libc.so.6 (0x00263000)
/lib/ld-linux.so.2 (0x006ae00)

And we can now run this. Since it is talking straight to hardware, it insists on running as root:

./novacomd
[2009/9/22 11:40:48] novacomd version novacomd-62 starting…
[2009/9/22 11:40:48] novacomctl socket ready to accept
[2009/9/22 11:40:48] need to run as super user to access usb

so:

sudo ./novacomd
[2009/9/22 11:41:11] novacomd version novacomd-62 starting…
[2009/9/22 11:41:11] novacomctl socket ready to accept
[2009/9/22 11:41:11] sending rst
[2009/9/22 11:41:11] sending rst
[2009/9/22 11:41:11] sending rst
[2009/9/22 11:41:11] going online
[2009/9/22 11:41:11] novacom_register_device:188: dev ‘e851588c804e8caa722490a0314ce9782dd4d9a4’ via usb type castle-linux

No we turn our attention to the client piece.

file novacom
novacom: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
[ayoung@ayoung novacom]$ ldd novacom
linux-gate.so.1 =>  (0x00173000)
libc.so.6 => /lib/libc.so.6 (0x006d2000)
/lib/ld-linux.so.2 (0x006ae000)

So we are ready to run.  There is no novaterm in this deb.  Instead, you run novacom in terminal mode.  A little noted line in that I will make big here is:

./novacom $* -t open tty://0

Fun with Unicode

I’m on IRC with a Coworker in Israel. While my Hebrew is pretty poor, I have attempted to communicate short sayings with him like:

בוקר טוב

And of course

שלם

However, his response are getting garbled. I blame his IRC program (mIRC) since it is running Windows, but I’d like to confirm that this is our problem. Eventually I’ll sniff the packets on the wire, but what should I look for?

I took the word שלם and dumped it into open office, and then saved the file as straight text. A hex dump of it looks like this:

hexdump -C ~/Documents/shalom.txt
00000000 ef bb bf d7 a9 d7 9c d7 9d 0a |……….|

Just the letter ש looks like this

hexdump -C ~/Documents/shin.txt
00000000 ef bb bf d7 a9 0a |……|

A File with just the letter ‘a’ in it looks like this:

hexdump -C ~/Documents/a.txt
00000000 ef bb bf 61 0a |…a.|

To check the file type of these:

file ~/Documents/a.txt
/home/ayoung/Documents/a.txt: UTF-8 Unicode (with BOM) text

The value 61 is the ascii value for ‘a’, so we know where to look. Note that this file is one byte shorter than the other two. This aligns with UTF-8. The letter ‘a’ maps directly to the ascii value for ‘a’, where as the Hebrew characters us the ascii expansion scheme. I’ll translate this raw binary back to the Unicode value:

If shin dumps to d7 a9

D7a9=1101 0111 1010 1001

110 Means it falls into the range of U+0080-U+07FF And is translated from the Unicode value by the pattern 110yyyxx 10xxxxxx

So yyy= 101 and xx xxxxxx = 11 101001

Note the yyy. The max this portion can be is 7, so you left pad it with 0 to get 0000 0101

And the rest becomes 1110 1001. This is the hex value 0 5 E 9, Which is in the range U+0590 to U+05FF as expected.

Earning the right

I recently read a complaint that the Ushers at Michael Jackson’s funeral wearing what appeared to be West Point Full Dress uniforms was insulting.

Men’s fashion has always been derived from military uniforms. Look at many hotel employees, SGT Peppers Lonely Hearts Club Band, or any Gum Shoe that walked down the street wearing a WWI era trench coat. In the days of horses, gentlemen wore long tall boots, long stockings and short breeches, all of which were driven off the cavalry needs to not get caught up in your stirrups. High hats with plumes came from the uniforms designed to make the front rank look taller. The original designs were practical for military purposes, the later often mimicked the form without providing the function.

Jim Peckham ran a wrestling camp where the motto was “Earning the Right to Win.” I like the concept that a Right is something that can be denied to those who haven’t met the minimum standard. Yes, life, liberty and pursuit of happiness are the right of all, but victory is the right of the one who has earned it.

If you earned the right to wear the uniform and then dishonour it, that is insulting. If you never earned the right to wear the uniform and wear clothes that look like it, it is merely that same sincere form of flattery shown by a younger brother that wears his older brothers Jacket. If the ushers claimed to be Active duty military, that would be inappropriate, probably illegal, but even then it would not be insulting.

In the days when gentlemen carried sabres, and were expected to protect their honour at the risk of their life, it was understood that a Gentleman could only be insulted by another gentleman. While the modern USA is an egalitarian society, I still reserve the right to select who is entitled to insult me. You have to earn that right.