Lonely Cactus

A life of punk, code and apathy

Friday, August 24, 2007

Oh No!!!

My quest for true GNU purity has taken yet another step back.

The FSF has a list of truly free Linux distros, and Slackware doesn't make the cut. The FSF sponsors a Debian-like distro called gNewSense, which is, apparently, pure.

One thing that is cool about it, at first glance, is that the distro maintainers have developed scripts to help one roll one's own distro. This may be useful when trying to get Hurd up and running.

As a side note, I guess I don't really believe all this freedom stuff. Life is too short not to be a little pragmatic, but, I do like a challenge. On that level, this is going to be fun.

Thursday, August 23, 2007

Triathlon

Only 24 days left until the Nautica Malibu Triathlon. I've been training my heart out. I'm sore. I'm sleepy. I smell like chlorine most of the time.

But I can now do a not-too-shabby freestyle, and my endurance is much improved on the bike.

Maybe, just maybe, it is all going to come together.

GNU Purity

So in my attempt to put together a coding project that achieves GNU purity, I am experiencing that sinking feeling that I usually get once I dig further into free software. As always, I know exactly where the finish line is, but, I soon realize that the starting line is much earlier than I thought.

To recap: I've chosen a project, made a list of the component technologies (the GNU C compiler, the GNU C library, Guile, project GNU's extension language, the GNU m4 macro processor, GNU Autoconf, GNU Make, the GNU New Curses library, GNU libtool, Texinfo, the GNU documentation system, and the Concurrent Versioning System), read all their manuals, brushed up on the GNU coding standards and philosophy, and started coding on the system I had lying around. The system I had available was Cygwin running on my Windows XP box.

Then, as I began hacking, I started to see that starting line move further and further back.

First, the NCurses binding for Guile didn't really work for me, and it wasn't as complete as I'd hoped.

So I tried to wrap the NCurses quickly using G-Wrap, but, version 1.9.9 doesn't build on Cygwin.

So, I wrapped it all myself with a bit of GNU Awk craziness. It looked pretty good, so I though I was ready to build my library and test it.

This lead to the problem of making dl-openable libraries on Cygwin. Being a Microsoft platform, dl-openable libraries are DLLs. Making a DLL on Cygwin with Libtool and Autoconf is complicated and doesn't work as expected. I found a good reference to do it raw, sans Libtool, but, I wanted Libtool to work for me. I'm still looking for the perfect documentation on Libtool on Cygwin.

Whilst trying to get my Guile module to load a DLL, I got one of the greatest error messages I've ever seen from Guile.

ERROR: no error.


So, screw Cygwin. I started to move to are the platforms onto which this is supposed to be compilable. The coding standard suggests that GNU/Linux and GNU (Hurd) are the minimum set. Okay. I have Slackware 12.0 CDs. Installing that was easy enough, sort of. Networking still not working.

Then I moved onto the Hurd install. Utter crapflood of installation badness.

No matter. I am stubborn. I can work it all out.

Look for the alpha to be ready early in the 2020s. ;-)

Tuesday, August 21, 2007

Buzzing in My Head

I'm at work, and I can't think. Too little sleep leads to too much coffee, and self-induced ADD is the result.

The past few weeks have been strange. I had run out of my sanity-inducing drugs, which seemed okay. It seemed like time, but, soon enough, my geek-related-pseudo-OCD, or GREP OCD for short, has returned.

Needing an outlet for my Grep OCD energy, I turned to a problem that didn't need solving, fixing the bit-rotted NCurses bindings for Guile. (The future of the past, today!) And I decided that, for once, I was going to finish a project to a standard that would make it useful for others, instead of just myself. By "useful", I mean completely unimportant, but, ultimately compilable.

To do something GNU, there is a tremendous amount of domain knowledge required. Some of the tools were old hat to me: make, tar, guile, C. But, just to put together my package, I've had to read up on m4, autoconf, automake, libtool, texinfo, and the GNU coding standards. Thousands of pages of documentation overall. Plus, I've had to go from a facile knowledge of curses to something more in depth.

Also, to make it a program that is out there for the people to see, I've got it up on Sourceforge, which required getting my CVS tools together, as well as finally generating an SSH key for myself.

Programming to the GNU coding standards has interesting problems, beyond the ugly indentation style. I've taken it as a challenge to actually follow them completely. As such, there are two minor points that create major work.

Please put a comment on each function saying what the function does, what sorts of arguments it gets, and what the possible values of arguments mean and are used for.

...

Also explain the significance of the return value, if there is one. [GCS 5.2]


Since this is an API binding, should I take this at face value? Curses has over 200 functions and 100 constants, and in wrapping them, they will each appear more than once: in the C-wrapper and in the Guile frontend. I didn't to the wrapping by hand. I tried to use g-wrap, but, it wouldn't compile on my Cygwin box. To the extent possible, I used an awk script to do the wrap coding, but I might move that to m4, because it is less line dependent.

Another headache from the standards is this: it is explicitly forbidden to generate documentation by accumulating docstrings.

Some programming systems, such as Emacs, provide a documentation string for each function, command or variable. You may be tempted to write a reference manual by compiling the documentation strings and writing a little additional text to go around them—but you must not do it. That approach is a fundamental mistake. The text of well-written documentation strings will be entirely wrong for a manual.


I totally agree. The main reason I've never managed to work my way through GTK, GNOME, g-wrap, or Guile-Gnome, aside from lack of energy, is the lack of tutorial documentation as well as the self-referential Docstring/Doxygen style of what remains.

And yet, now faced with putting a manual together, I can totally see the appeal of manual-by-docstring-concatenation. It would be quick.

I did eschew Doxygen for that very reason: it would make it all too easy.

I find GNU's stubborn insistence on Texinfo to be crazy, given the amount of better options out there, be it simpler (HTML) or more complete (DocBook). Even so, I will do it so I can be at least make my tiny contribution to the GNU cause.

I hope to learn enough in the process to put out an updated GuileBook for the 1.8.X series. It is my internet claim-to-fame, I guess.

It basically works now in a private build, but, to wrap it up legit, I need have answered a few fundamental questions.

How can libtool be used to reliably generate a Cygwin DLL?

For now, I'm going to move all this stuff to a Slackware GNU/Linux box. If I can get it working on the reference platform first, I can fix the porting problems later: Cygwin, OpenBSD, GNU Hurd.

Grep OCD is the reason for my success as a techie and my failure as a human being.

Tuesday, August 14, 2007

Super Secret Plan Update

Well it has been about a month, so let's see how I'm doing on the SSP.

First off, I started my Arabic class, but, had to drop it. The class moved way to fast for the limited amount of time I had to dedicate to it. I got as far as learning the letters of the alphabet and how to say my name, but, I got too far behind. I learned to pronouce some useful words, like, "fechchxxkkq", "qqlblechblech", and "huguhuguchchxilqq".

It it a language? Or is it a throat ailment?

Something about the way it was taught didn't jive with me, anyway. On the one hand, we were learning the script while at the same time we were learning basic vocab. I couldn't seem to learn the vocab because we were forbidden to transliterate the terms (to write Arabic words with English letters). And since I couldn't "see" the words, they never sunk in. Its that visual, right-brain thinking.

Second, the training for the Malibu Triathlon in mid-September continues. I've been swimming in the morning at a somewhat undermaintained by still fairly nice city pool here in Crenshaw. Swimming has been quite the challenge to learn. I didn't get it. It took me a while to learn how to pull water with my arms, instead of trying to propel myself with my legs. Also, my upper body, never before used for anything other than typing, videogame playing, nose picking, and masterbation, wasn't happy about having to do stuff.

Otherwise, no huge progress.

For this month, I will try to dramatically increase the amount of protein I take in, to see if that will help with moving the numbers at the gym. I dread this. Not because SuperDuperMegaMassive Muscle Powder tasts like 1 part sawdust with 2 parts evil (which is does), but, because I have always had an aversion to gear-heads of any descriptions. "Oh, I can't ride three blocks to Starbucks unless I'm wearing head-to-toe name-brand spandex." If I start drinking the MegaMassive, can endless discussions about the minutia of carboloads, vitimin packs, weight belts, yadda yadda be far behind.

Seriously, people, just do it. Mmmkay.

As far as the money goes, I've been socking the savings away in my stock portfolio, which was a bit overrepresented by banking institutions. With the subprime mortgage crisis, I've not done well. I'm up $1,200 from last month, but, I'm not going to tell you how much money I've spent on stock last month. Hint: much more than $1,200 dollars.

Aaaaight. Here's the numbers.

1. Bike 56 miles at pace -- Nothing new. Doing 22 miles most days. 35 miles is longest ride so far. 63% complete.
2. Run 13.1 miles at pace -- Doing legit 3 mile runs. 23% complete.
3. Swim 1.2 miles at pace -- Max dist so far at pace, 150m. 8% complete.
4. Bench press 150 lb. -- Bench press 3x8@95. 0%
5. 10 pull ups -- Lat pull 2x8@110. 0%
6. Learn some Arabic -- Learned alphabet. 1%
7. Learn some Chinese -- No progress.
8. Learn to box -- No progress
9. Get wicked tattoos -- No progress
10. Practice rock climbing -- No progress
11. Save $25,000 -- $5,200 so far. 21% complete.
12. Have sex with someone hot -- Hottest guy so far, a 5 out of 10. 50%.

Total completion percentage: 14%.