rss feed


September 5, 2008

Yay internet through the cell phone.

The Gates/Seinfeld commercial people keep pointing me to is just confusing. Seinfeld is famously about nothing, BillG is about Vista. Ok, I can see the similarity there. It's a little bit like casting Dick Cheney in a sitcom, but getting past that. If Gates wants to be seen as laughable instead of evil and creepy, ok. Fine.

But the punchline about edible computers? That's a really weird' retread of Licensing 6, isn't it? Getting past the part where the environmental hazards of disposing of something full of heavy metals is a big deal, so they want us to swallow it... (Hint: if you ever let you the magic smoke, DON'T INHALE.) The deeper issue seems to be that Microsoft is _desperate_ for disposable computing.

Microsoft has been trying to force their users to rent software instead buying it since at least 2001, and it just didn't work. The last time their biggest competitor WASN'T their existing installed base of software was about DOS 3. Nobody wanted to move to Windows Millenium, nobody wanted to move from W2K to XP. (Windows 95 was an exception, but that was more about everybody desperately wanting to move OFF of Windows 3.1, which they'd move to as DOS went down with the ship of 16 bit hardware.) And shoving Vista down customers' throats is doing about as well today as shoving Licensing 6 down their throats did seven years ago.

Microsoft would much rather be in the Coca-Cola business where the consumer buys something, destroys it, and then buys another one over and over. Edible computers are _their_ fetish, not ours. This commercial reads as a weird fantasy sequence on the part of Gates, possibly the most extreme part of which being Jerry Seinfeld wanting to hang out with him without being paid $10 million to do so.


September 4, 2008

Sigh. Chromium is written in C++, not C. Much less interested in it now. (Why bother to do a new web browser written in C++? Konqueror/Safari exists.)

I keep running into people who say "sure C++ is bloated beyond what any one person can cope with, but you can pick a sane subset of the language, just like Perl!". Except that no two people ever have an identical subset, so as soon as you have more than one person working on the project your subset expands, and soon you're using Boost libraries and everything. (And if you go with an anal coding style document dictating the language features your project is allowed to use, you A) present new developers with a higher than average brick wall, B) can't share code with other projects without going out of bounds.)

Mark made the cell phone internet work. Yay!

Ah, Chromium is based on webkit, which is Apple's packed up and exported Safari rendering engine, which is a fork of khtml in Konqueror. So the answer to my "why do another" question is "they didn't". Ok, that makes a minimal amount of sense. I'm still disappointed, though.


September 3, 2008

Whoever packaged mercurial for debian/ubuntu made it depend on rcs. Why did they do that? That's so amazingly, deeply stupid that I'm at a loss for words.

I'm aware that mercurial is capable of converting cvs archives to hg. This is NOT an excuse to make rcs a required dependency for installing mercurial. Attempting to convert from a repository format that isn't installed should simply fail. It's that simple.

Hanging out at the chick-fil-a on Ben White, seriously abusing their wireless. Got in 45 minutes of swimming last night (wow is that exhausting, I'd forgotten how much), and today I biked to south Austin (and need to bike back to go home later). Yay exercise. Yay getting lots of missing packages installed on my laptop.

Ok, google broke down and made its own web browser from scratch, and I'm impressed by their comic book about its design. And there are good developer docs too.


September 2, 2008

According to T-mobile customer service, the $20/month internet service thing wasn't enabled for either phone line (is now, but may take 2 days to actually happen). And getting surf-from-the-phone service (which apparently I need to contact samsung's website for the help pages, or upgrade the firmware) is an extra $6/month, although that part was somewhat confused. (There seems to be some disconnect between Samsung and T-mobile. It's a new model of phone, which they haven't sold for very long. Not much selection in the 3G department yet. They gave me Samsung tech support's direct phone number, maybe I'll call it tomorrow.) But in any case, that's a separate issue.

The part about the phone volume only going up to 7 instead of 10, meaning I can hear it ok inside at home, but not outside near a busy street or in a place with loud background music... That I also have to talk to samsung about, apparently. It can ring loud enough, so it's clearly a software problem...

Spent most of today re-reading Discworld books (still going through the watch series, today I finished The Fifth Elephant and moved on to The Truth, since that comes before Night Watch and it's sort of tangentially a watch book). Right now I'm in the mood to hang outsomewhere with free soda refills and good lighting, an optionally an outlet I can charge my laptop from (since I drained the battery making a half-hour stop on a bus bench walking back from Mark's last night). Considering I'm still sore from last night and the humidity's at "incoming hurricane" levels, I only felt up to going as far as The Donald's.

Unfortunately, this means no internet access (well, Wayport branded lack of internet), and my laptop isn't particularly useful without an internet connection at the moment. I have to install apatche before I can get a copy of my website running on loopback again, I have to install mercurial before I can poke at any of my existing software projects...

I wonder how long it's been since I rsynced my website up to the server? Before I reformatted my laptop, anyway. (I can copy _that_ script back now, though...)

I suppose I can set my email back up now, although there's no way to test sending and receiving at the moment. (I use hand-rolled ssh tunnel things in both directions.) Oh well, I can get it to read the old mbox files... Oh yes, Kontact continues to digest Kmail and make it less and less usable. (I forgot how I deleted the korganizer pop-up reminder daemon... But then again, that sort of detail is at least half the reason I keep this blog, so korgac is once again toast. :)

Sigh. I remember when kmail put the number of unread messages each folder had along the right edge of the display box, so they all lined up and were easily readable. Now it appends them to the folder name so they're all jagged, and considers this a UI improvement. This is made worse by the fact that all my interesting kmail folders are nested subfolders of "inbox", so it's indenting them all and leaving lots of whitespace at the left, then truncating the folder names at the right. That's it, preserve the useless whitespace and truncate the actual data. Who designed this? Is there any way to put the _number_ over there in the whitespace? I should look into thunderbird, at least it's nicely standalone and not part of an increasing hairball interfering with the functions I want out of it. Not that I can install _that_ without internet access, either...)

Huh, I took a gamble and copied my old kmailrc file to .kde/share/config/kmailrc and... it seems ot have worked. Wow. (That kind of thing generally doesn't work for me.) Well, there's half an hour of fiddling saved, I hope...

I'm starting to be creeped out by how much of kubuntu 8.10.1 is actually working out of the box. It's somewhere between "refreshing" and "I'm waiting for the other shoe to explode in a nuclear fireball".

On the other hand, I already fixed vi (ln -sf vimrc /etc/vimrc.tiny) because the Ubuntu default won't let you use the cursor keys in insert mode. And /bin/sh still points to the Defective Annoying SHell. So it's got some persistent built-in breakage baked into the distro at this point. But they didn't break anything _new_, and actually seem to have fixed some of the existing problems...

Ok, software suspend is still horked (the keyboard/mouse don't always come back after a suspend, and of course the defaults have changed to lock the screen when it resumes). That's reassuring me a bit. Now, how did I fix that last time? Made the power button re-suspend... Alas, that I _didn't_ mention in my blog, so I have to work out how I did it again from first principles...

Ah, pressing the power button calls /etc/acpi/powerbtn.sh, and in that directory there's a "sleep.sh" that does the actual suspend to ram, so rename the old script to something innocuous and make a symlink. That bypasses the screen locking logic, too. Exactly what I want. (If they have physical posession of my laptop, there's not a lot I can do about it in software. Well, ok, I could encrypt the home partition and have an initramfs ask for a password to mount it, and if I was really paranoid I could have a USB key with the encryption key for the root filesystem, and have the initramfs asking for the password to decrypt that USB key to get the second key off of it, and in fact the USB key could be something like a nail board programmed to wipe itself if you entered 10 wrong passwords in a row, at which point grabbing my darn terabyte backup drive would be the easy thing... But the point is, I'd still not have my laptop anymore, which would be sad.)

Poking at a python script to go through my /home partition and find runs of zeros it can turn into sparse files. (Several of my filesystem images started out sparse, and got de-sparsed as part of the backup process.) But although a slightly obsolete version of the python documentation was in the backups I dumped into my /home partition, I need to install the man pages before I can look at things like "madvise", which I think is how they finally added the ability to punch holes in existing files. There was a Linux Weekly News article on at one point, anyway...


September 1, 2008

I despise this Sinus infection. Can't get more than two hours of sleep before I wake up with a headache. I despise headaches too.

Incoming calls are finally going to my new phone, so I spent most of the day over at Mark's trying to get internet to work via cell phone. Installing Kubuntu 8.04.1 on my laptop right before doing this didn't help matters. Is bluetooth gone because of 8.10, or did it never work? No idea (it probably never worked, I simply hadn't tried before; the BIOS says it's there and enabled but the Linux kernel is adamantly refusing to find it). After an hour of fiddling with it we drove to Fry's and I spent the $17 to get a USB bluetooth dongle just to get over that part and on to the next bit.

Unfortunately, although we could then associate with the phone, get a serial device pointing at it, and do a lot of ATDT stuff via wvdial (among other things), it point blank refused to actually do a ppp session. Hung up on us instead of connecting each time. Many web pags said this _should_ work, but we tried a couple dozen variants and only managed to get slightly different failures.

Eventually, after more googling on Mark's part than you can possibly imagine (he puts my Google-fu to shame, only have of it actually being Google. The Ubuntu bug tracker has a search engine, who'da thunk?), I noticed that trying to bring up any of the actual phone's help pages says "connection failed". Apparently those are implemented as web pages on the t-mobile website (don't ask me why). So not only is the extra $20/month internet not working, but the phone's built-in internet that you get as part of the basic service isn't working.

Tomorrow: call customer service. (Called 'em today and got a recording about it being labor day, thus tech support is closed. Oh well, at least that means I can expect to talk to humans without having to recite the jabberwocky at a voice response system until it gives up, ala sprint...)

On the "getting 8.10 to work" front, knetworkmangler actually seems to be working again. I'm as surprised as anyone. No obvious way to tell it "rescan for more wireless networks, you missed one I know is there", but other than that... Huh. Cool.


August 31, 2008

New phone works for outgoing calls, but not incoming calls yet. Copied my numbers off the old one to a text file.

Fade and I spent lots of today watching the next round of netflix while I closed more tabs. (Finally finished Veronica Mars season 1, and then made the mistake of watching a highlander disk right afterwards. The difference in acting ability is ENORMOUS. Until Joe and Methos get on the screen, of course. Methos and Joe are great, Duncan's ok, Ritchie's annoying, and their weekly guest redshirts all CANNOT ACT. There's a reason Fade calls Highlander the "Joe and Methos show", they're pretty much what makes it worth watching. (Amanda's somewhere between Duncan and Joe/Methos when she shows up, but she wasn't on this DVD and Methos was only in the third episode.)

Joe had a line in the middle episode of the disk, ala "Sometimes you can't make any sense of it, you just have to see it through" that perfectly summarized the plot of that episode. (His character wasn't _talking_ about the plot, but the actor might have been. Striving mightily to overcome the material...)

Finally finished backing up my files to the terabyte drive, and now to install the new Kubuntu...


August 30, 2008

Bought a new phone. Mark dragged me out to the T-mobile place in the Triangle. I forgot to pick him up from the airport last weekend when my phone switched itself off and the alarm didn't go off, nor could he call me. (Still feel bad about that.) After over a decade as a sprint customer I've now left them, but I don't feel at all bad about that because they _earned_ it.

Sprint's internet plan (for getting internet on my laptop via cell phone) was $70 per person with no discount for having their cell phone service and no family plan. So altogether, with tax, Fade's and my monthly phone bill would have been somewhere over $300 to get our internet through them. That's _actively_ stupid, and they deserve to lose.

T-mobile, meanwhile, offered a two person cell phone plan for less than we were already paying sprint, and then 3G internet at $20/person on top of that.

So I have a phone, and Fade has a phone (a Samsung something-or-other with 3G), and someday they may even work. (Activation was... tricky. Trying to get new phones over a 3 day weekend when the tech support people are mostly away might not have been the best idea, and I break stuff. It's sort of inevitable. This time, their registration computer threw up a weird internal error message, which eventually turned out to be due to signing up for the internet plan while chosing to block their email service to my cell phone. I want to use the internet on my _laptop_ (which Mark made halfway work via bluetooth on his laptop in the store, and I need to buy a cable for to do via USB). I don't want to use their email address, and I don't want to use the cell phone's UI to do anything with the internet, and I don't want to be spammed on my phone. Seemed simple to me, but whoever programmed their computer never thought of this, apparently...

Closing more tabs. I have tabs open from March. This is downright archaeological. (It's a combination of software suspend mostly working now and the KDE desktop saving my open tabs when I shut down. Most of them are "couldn't load blah" because I don't bring the net up until after the desktop has booted, so it's not taking up the gigabytes of ram it would otherwise to _populate_ all these tabs. But each one is a URL I have to either look at or cut and paste to a file to look at later. My file of cut and pasted URLs is 200 entries and growing...


August 29, 2008

Still trying to backup stuff and close tabs so I can format and install Ubuntu 8.10. Boy I have a lot of open Konqueror tabs. (Finding the window full of tabs from tvtropes.com didn't help matters, I've lost most of today to that...)


August 28, 2008

Ok, even youtube is slow now. (Not unplayably slow, but noticeable.)

Filling up the terabyte drive, and preparing to install Ubuntu 8.04.1 on my laptop. Wow I have a lot of crud lying around on this laptop, and many many open windows to close...


August 27, 2008

Broke down and bought a 1 terabyte drive at Fry's. (The iomega and the western digital were the same price, so I bought the one that provided more useful information on the box. Admittedly part of this information was that it's NTFS formatted, but the box assures MacOS X users that the instruction book says how to reformat it, so points for trying. FAT's not exactly something you want to put on a terabyte.)

Refomatting it ext3 took something like 10 minutes, and the _entire_time_ all my vim sessions were blocked:

$ time sync

real    4m45.306s
user    0m0.004s
sys     0m2.572s

The sad part is that the SATA drive in my laptop was idle the whole time the USB drive was formatting. Apparently, vim is doing a global sync rather than an fsync on just its file, so it has to wait for entirely the wrong drive. And it was some kind of drive lock thing, not just tons of pinned cache pages, because the USB drive light went off right after the formatty program stopped couting up. There was maybe 10 seconds of syncing at the end after the display stopped updating, if that.

I keep wanting to go in and fix programs I didn't build from source. Yeah, I understand the appeal of gentoo. Unfortunately, that distro committed suicide by intentionally refusing to make a grandma-friendly installer because they wanted to limit their user base to only people who _could_ modify the source code. If I use Ubuntu, several million people are also hitting every bug I see. Gentoo turned their biggest asset into a liability by _forcing_ it on people.

*blink* *blink*. According to my notification email thingy, "Penguicon" is now following me on twitter. I honestly don't understand why...


August 26, 2008

Got x86_64 to build with uClibc-svn. It booted and gave me a shell prompt. Poking at arm now. (Most of the work is getting it working the first time, the next biggest lump is getting it to work on a second platform so it's genericish. The remaining platforms tend to be comparatively simple.

Heard back from the Binutils maintainers (both of whom are full-time Red Hat employees). 2.18 is GPLv3, so I reverted to 2.17. I need to break the linker out of tinycc and see what I can do with it. (Actually the linker's easy, it's fairly portable and mostly complete. The assembler, on the other hand... How many platforms?)

Alas, UT can't schedule the necessary appointments and process the appropriate paperwork in time. (The faster of my two options involves an appointment on September 15th.) In their defense, the state of Texas decided that anyone who graduates in the top 10% of their high school class gets an automatic admission to UT, which is more than their entire incoming class each year. (That's an undergraduate problem rather than a graduate problem, but their entire admissions process is now geared to finding every possible way to keep people _out_.)

The internet is PAINFULLY slow tonight. I'm guessing it's all the students coming back...? Except that youtube seems unaffected, somehow. The daily show's unusable, livejournal's taking 30 seconds to load each page, my webcomics seem swamped, even Google's a touch sluggish (which for them means 5 second page load times)... but not youtube? Weird.


August 25, 2008

Wandering around the University of Texas at Austin, trying to get readmitted to take a class this semester. (If I pass one class per semester, spring and fall, for six years: that's 36 credits and a master's degree. Hopefully I can do it faster, but for right now I'm trying to finish one class without interruption.

Still poking at the uClibc snapshot. The dependencies aren't quite SMP safe if you do a "make all install" in one invocation.


August 24, 2008

Apparently, the US GDP is about $13.8 billion. According to Forbes the richest guy in the world (Warren Buffett) is worth $62 billion. So the richest man in the world essentially owns the entire output of the US for 4 and a half years. Every big mac, every dentist appointment, every new swimming pool... Good to know.

A while back I mentioned that Michael Lewis' book "Liar's Poker" described the roots of the current mortgage crisis, by which I mean the book is about the invention of the mortgage bond back in the 1980's.

Mortgage bonds take thousands of individual mortgages and tie them together into a big pile of money, then sell shares in that pool. In theory this lets statistical averaging even out peculiarities like people who default on their loans, or pay down their debt early. It let things like mutual funds buy shares in mortgages just like they would municipal or treasury bonds, and created a huge demand for more and more mortgages to invest in. Mortgages were now something you could _trade_.

This meant that a mortgage was no longer a 30 year relationship to the lending institution, it was something you could flip. Lendors became much more willing to make loans, it was easy to get out of 'em at any time and Wall Street had billions of dollars looking for good returns.

This meant the people who made the loans were no longer the same people who would collect the checks for the next decade, instead they got a commission for making the sale and sold the mortgage to somebody else within a few months. Make the loans, package them up into big pools, sell them to large institutional investors, cash your commission check, rinse, repeat. The ability of the borrower to pay back the loan faded into the background as a secondary consideration: it would become somebody else's problem before long, the statistical safety of the huge pools of money dampened the sting of individuals defaulting, and wasn't it all insured anyway? Divorced from the reality of individuals, the math would always find a rate at which the loan should (statistically speaking) be profitable, so just tweak the rate until the numbers look good.

Of course Bush came in and deregulated, eliminating the need for pesky things like down payments and equity. When the dot-com bubble burst, investors fleeing from stocks went into bonds for safety. Don't own a percentage of future profits, own debts people are _obligated_ to pay. (Assuming, of course, that they can.) More money than ever flooded into mortgage bonds seeking the safety (yet high returns) of real estate. Two decades had passed since the days of individual savings and loans backing mortgages with the contents of their depositor's savings accounts (ala the Frank Capra movie "It's a Wonderful Life") was the main source of mortgages. Those small lendors were careful, because it was their money. They had to eat the costs of default and foreclosure, and had to be willing to take posession of a property and sell it to maybe eventually get some of their money back. They were careful who they loaned to because the loan was their problems.

But with mortgage bonds, it was all numbers. Every mortgage sold was an instant commission, pack 'em up, flip 'em to large institutional investors, and who cares what happens 5 years down the road. It's all insured, isn't it?

And then the dominoes started falling. Again.

Nothing new...

Poking at building glibc under uClibc again. It's still complaining that it can't possibly exist without TLS support, despite TLS not _existing_ for decades and never being supported under the 2.4 kernel anyway. (Apparently, glibc no longer supports the 2.4 kernel? I told it --enable-kernel 2.4.0 and it's not helping.)

Part of the problem seems to be that I'm building it in a chroot, in an i386 environment on an x86-64 host. The darn ./configure stage is looking in /proc and seeing "oh, you have an x86-64 kernel" and thus trying to build for an 64-bit target even though I'm native compiling in a 32 bit userspace. (The compiler defines an __i386__ macro so you know what target you're building for, but the glibc build doesn't use that. Sigh.) So it's grabbing the wrong headers. I'm not sure if this is the cause of the problem or just a random unrelated symptom.

Hmmm... Booted the system-image-i686 under qemu instead of doing the chroot thing, and the end result was more or less the same. Now it's complaining about an #error in ../nptl/sysdeps/i386/i686/../tls.h (yes, really) instead of having an x86_64 in there. Sigh.

Once again, getting TLS support in there requires linking against ld-linux.so.2, which is the runtime loader but which the TLS guys decided to use at link time for some reason. In uClibc you have ld-uClibc.so.0 instead (which doesn't even support TLS, which I'm pretty sure stands for "Thread Local Storage" by the way). I could tweak the wrapper script to snag the dynamic linker in the as-needed stuff, but there's no _point_ if uClibc 0.9.29 doesn't support TLS. As far as I can tell, current glibc won't build under old versions of glibc, or under libc5, or from Solaris or MacOS, or under uClibc. They just don't support it.

I wonder if the current version of uClibc (the main svn development branch, anyway) supports TLS? (No need for full NPTL, just Thread Local Storage...)

Another advantage of upgrading to the -devel uClibc is it might build with -j. (The 0.9.29 release breaks if you do a parallel build.)

The downside is there hasn't been a release in a year and a half, so I'd be taking a random svn snapshot and trying to stabilize it. I've been meaning to do a new dot release anyway, might as well just grab the -devel version and try to beat it into shape for a release...

Downloaded last night's snapshot of uClibc (which is svn 23134). Came up with a .config it's only mildly upset about (builds with tons of warnings), and shoehorned it into the FWL build. It died trying to build ldd, which isn't surprising. That sucker's never worked right. It's a design problem: the uClibc developers always assumed that their ldd would be linked against their C library, and that's what their build process tries to do. Meaning if you're cross compiling, and want to build an ldd that runs on the host and analyzes target binaries, you need to build a host version of uClibc just so you can create the ldd binary. Which is silly.


August 23, 2008

Hmmm... Looking more closely at binutils 2.18, although the top level directory has both "COPYING" and "COPYING3" files (meaning it's dual licensed under GPLv2 and GPLv3), the subdirectories "bfd" and "gas" has GPLv3 (only) in their COPYING file.

Now since GPLv2 says that if you license any of the code under it, you must license _all_ under it, I'm pretty sure this means that everything in the binutils tarball they're distributing may be used under the terms of GPLv2. On the other hand, they're distributing source rather than binaries. I need to ask the SFLC about this. I may wind up having to revert to binutils 2.17 and working around the powerpc problem another way.


August 22, 2008

I'm reading the SFLC's advice about how to avoid ever using GPL software, and thus be in compliance with the GPL by having it never come up. Did they not have a single geek read this thing before publishing it?

Just as your legal and/or management team negotiates terms for inclusion of any proprietary software, they should be involved in all decisions to bring FOSS into your product.

That's it, require official approval from bosses before using any free software in the project. Make sure that this approvals process is just as long and difficult, with just as much paperwork and delay, as negotiating a multi-million dollar per-unit licensing deal. Make sure there's absolutely zero advantage to using it, ever.

Sigh. There's a big difference between "ask your engineers to document what they did" and "fill out forms and submit them to the bureaucracy for permission to proceed". I don't expect lawyers to understand this difference, but every geek in the world will. Are they totally ignorant of the history of free software and how it spread?

I need to fix PowerPC and I'm not quite sure how to go about it. Easiest way is probably to figure out how to feed a different device tree in for a different platform. Hmmm... The default platform claims to be a power macintosh, maybe arch/powerpc/configs/pmac32_defconfig?

I've gotten sick of this sinus infection, and since 5 rounds of antibiotics haven't knocked it out (including one that lasted for 3 weeks) I'm trying the "spicy foods" approach. I am not a fan of capsasin, but I've ordered ten of the "nuclear teriyaki" wings from the wing place around the corner, in hopes of flushing out my sinuses via a different avenue.

The fumes coming off this stuff are not pleasant.

Ow. Ow ow ow, and ow. Did I mention ow? (Also: OW! It gets worse. Five wings in, I rather want it to stop.)

Dunno if it helped or not. Now I've got a stomachache, though.


August 21, 2008

I'm confused by the dual core atom. What exactly is the objective here? "Let's make it small and simple. Now let's have two of them, doubling the size and complexity!" Ok...?

There's a pendulum in processor design, swinging back and forth between doing more in parallel vs streamlining and simplifying. Both are attempts to increase speed, although 90% of all CPU speed increases ever have come from manufacturing figuring out how to increase photolithographic resolution, allowing the die size to shrink resulting in shorter wires. Signals take less time to travel down shorter wires, and smaller electrical components have less capacitance so they take less time to fill up with electricity before they can do their thing. Thus you can clock 'em faster and get more bang for the watt. That's the big secret, everything else is really details.

Admittedly 2 megabytes of L2 cache with fancy prefetch (to disguise 3000+ clock cycles of latency for signals to travel all the way out to DRAM and back) is a fairly _important_ detail; getting your chip to stay out of its own way as it gets faster is nontrivial, the bottlenecks keep moving around. But the big architectural changes like having 3 execution cores dispatching instructions in parallel is only worth about 4 years of Moore's Law doubling, out of the past 40. The 2-CPU smp of the "core duo" line is worth a year and a half of speed increases; one modern CPU beats a pair of 2 year old ones. Do all of that fancy stuff on the manufacturing processes used for the original 386 in 1985 and you have a deeply uninteresting chip running at 33 mhz and consuming a several hundred watts of power. (It would probably melt even with water cooling.)


August 20, 2008

Many things to do today. Beth asked me to review paper submissions for Ohio LinuxFest (they need them by friday morning if it's to matter). I'm indexing the OLS 2008 papers, along with the videos. I've got some toybox stuff to do. I need to figure out how to get the PowerPC target working under the 2.6.26 kernel. The SFLC finally published their GPL compliance guide and I need to read that (to get their opinions on stuff, anyway) before dealing with three different GPL enforcement todo items. The hotel proposal for Austicon should come in sometime today, I should read that when it does. And finally introduce Beth to Stu this evening, probably at the Mongolian Grill.

Stuff.


August 19, 2008

The pilgrimage to Rudy's has been made! Beth and Fade and Mark were along. (Stu couldn't make it, his back is acting up and he's zoned out on painkillers today.)

Now at Epoch, fighting glibc again. I'm trying to build the thing from the normal Ubuntu command line, to have a baseline to compare against. It's not working. First I hit this bug. (Yes, glibc uses perl _and_ awk to configure itself. Apparently nobody ever asked "is this complexity really needed"?) Now I'm having some variant of this problem. Which is silly.

I note that complaining about symbol "libc_multiple_libcs" being included more than once is ironic enough, but that bug report being EIGHT YEARS OLD gets it well into "silly". I'm trying to build a stock glibc 2.5.1 using Linux From Scratch 6.3 instructions on Ubuntu 7.10. This isn't my hand-rolled custom setup, this is relatively current versions of stock components all the way and you'd think it would work out of the box. It does not. That's kind of sad.

I _really_ don't like glibc.

I suppose I could grab glibc 2.7 and try to build that instead. (That's what the development version of LFS is using.) Or I could try to build a new /tools directory following the chapter 5 instructions. But trying that under mini-native gives '../nptl/sysdeps/x86_64/tls.h:63:3: error: #error "TLS support is required."' which is yet another fun little detail to track down. (It breaks in so many different ways. This is one of the most brittle pieces of software I think I've ever encountered.)


August 18, 2008

Beth is in town. Promised her the sacred pilgrimage to Rudy's but we wound up going to the Texas Land and Cattle company instead, because it was on the other side of her hotel's parking lot and it was rush hour.

Didn't turn my laptop on all day.


August 17, 2008

Breakfast at Einstein's bagels. A little bit of banging on Linux From Scratch. (Building glibc is a flaming pain.) Mostly offline, re-reading the Amber novels and such.

Went back to say hi to the T-mobile guys, but they couldn't get their internet to work with either my or Fade's laptops, and their tech support guy on the phone seemed to be confused by somebody wanting to use their internet through a USB cable. Promised to email me information if he found it. Still using my dying Sprint cell phone for the moment...

Found one of my old wristwatches while unpacking boxes. Battery's not dead yet. The last one I bought gave me a rash, and I've been doing without since. (Using your cell phone to tell time isn't fun at the best of times, and when it switches itself off when hit or squeezed too hard, and then takes 45 seconds to boot back up... Yeah.)


August 16, 2008

A day away from computers. No programming today.

Fade and I had planned to go to Star Ranch, but wound up going to highland mall instead. (We still went to sheep for dinner, though, even though it wasn't on the way back. Took Mark out. A good time was had by all.)

Talked to a T-mobile guy at the mall about new phones. My old sprint phone is dying (if you close it too hard, instant-off. It takes about 45 seconds to boot back up to usability, once I notice). And sprint is just _stupid_, wanting $70/person for internet access with no discount for having their cell phone service. Getting internet for my laptop through one of T-mobile's cell phones is only $20/month on top of a family plan for me and Fade that's cheaper than what Sprint's charging now. Fade and I need to go back tomorrow with our laptops to make sure said internet _works_ on Linux and MacOS X, but it's looking good...

Saw The Plague Dogs, from the people who did Watership Down. Gee, I wonder why this one didn't have the same theatrical success? It's bad goth poetry, filmed. The anvilicious "laboratory testing is evil" stuff was merely clumsy and obvious. The way the authors had it in for the dogs (the one who'd had brain surgery racks up a _body_count_ of accidentally killed owners he blames himself for) crashed my suspension of disbelief about halfway through. Calling out the army with helicopters for animal control was probably deeply symbolic, although of what doesn't matter. The downer ending where everybody dies by having their worst fears come to pass was pretty much predictable by that point. But then going to gospel music as the credits roll?

Fade liked it, and it doesn't displace the worst movie I've ever seen, which was "Seven", and so far the only time I've wanted my money back. (The most incompetently made movie I've ever seen was "Manos, the Hands of Fate", but I saw the MST3K version of that which was outright enjoyable).

Took it out to the mailbox immediately to get it out of the house. The netflix queue is unblocked! (Still need to get two of those set-top boxes. One to play movies with, one to take apart...)


August 15, 2008

Attempting to build Linux From Scratch 6.3 under FWL mini-native images. I've already got a /tools directory, which is enough to rebuilt FWL, so it's pretty powerful.

Unfortunately, Linux From Scratch is based on glibc, and build that needs (shudder) perl. So I'm trying to add perl to the /tools directory according to the LFS chapter 5 instructions... and the perl build is breaking in toke.c:

toke.c: In function 'S_scan_formline':
toke.c:10542: error: invalid operands to binary +
toke.c:10542: error: invalid lvalue in unary '&'
toke.c:10542: error: invalid lvalue in unary '&'

The problem is the preprocessor doesn't seem to be substituting PL_bufend, which is only #defined if the macro MULTIPLICITY is set, which means threading support. So attemps to build perl without threading support break...?

Google time. Somebody who hit this error said that having a file named "test" in the path screws up the perl ./configure step, which is just weak. But removing busybox "test" from /tools/bin didn't fix it... Ah, it's actualy a Linux From Scratch plus uClibc issue, with a patch. (One of the most powerful techniques in a modern system integrator's arsenal is checking to see who else hit this before. I dunno anything about the guts of the perl implementation, and tracing that back to first causes myself could easily have taken a couple days...) Now, do I still need to remove /tools/bin/test or not... Nope, just the uClibc change, which I can do with sed. Ok, that's reassuring.

Hmmm, grinding through LFS chapter 6 and I need to reorganize some stuff. I need a temporary working directory to download/extract/build packages in, meaning I need the second partition mounted under qemu because the root filesystem hasn't got 100+ megs free space (to keep the image sizes down). But the script that mounts that also does lots of setup creating symlinks and such in the root directory, and LFS wants the top level pristine...

Ah, easy fix: chroot! I can assume root access inside qemu, so doing a chroot in there isn't verboten.

Almost reported a toybox bug to the busybox list. (That would have been embarassing, so naturally I blog it! Chroot isn't stopping option parsing at the first non-option argument, it's a one character fix but I hadn't specified that yet.)

ARGH! The busybox vi command ate my script! (Memo to self: hardlinking the script in two places makes the updates automatically show up in the chroot, but the busybox vi command should NEVER BE TRUSTED WITH YOUR DATA. It truncated the file to zero bytes. I have no idea why it did this, but it did it.)

Darn it, that cost me something like three hours' work. Grumble, grumble. Luckily, I remember the annoying parts...

Wow mame is frustrating to play when it decides "shift" is one of the buttons. (Hit shift five times and KDE decides to enable "sticky keys", doing a pop-up dialog. Not in the mood to track that down and rip it out of the system right now.)

When I get around to writing toybox umount, I need to add an option to tell it "unmount everything beneath this mount point". It's annoying trying to play whack-a-mole cleaning up all the proc, sysfs, tmpfs, and bind mounts from an interrupted LFS build script. (Admittedly the kernel guys added per-process mounts to make this suck somewhat less, but allowing umount -a to take an argument would accomplish it more easily.)

Sigh. And the glibc build broke because it says "forced unwind support" is missing and required. What the heck is forced unwind support, and why on earth would a C library need it? I'd google for this, but once again the wireless access point is out. Time to go home where there's no air conditioning and cats pestering me every 30 seconds nonstop... (I am a cat person. We have too many cats.)

Hmmm... Whatever it is, it's in libgcc_s.so.1 on Kubuntu. But not in libgcc.a. (So if you build your compiler with --disable-shared, you can't build glibc with it. Wheee... Except the mini-native compiler _isn't_ using --disable-shared, because of exactly that kind of gcc insanity...?)

Ok, dig the failing program out of config.log (because of course it deleted the program it compiled after the failure, thanks autoconf) and try to compile it... Yup, failed. Try with DEBUG_WRAPPER=1 and... Huh. I think it's the wrapper script...? Let's see, gcc -v is doing --as-needed -lgcc_s --no-as-needed right after each -lgcc, so I think the wrapper script needs to add that. Except it's arguments to the _linker_, not to the compiler, so I think it actually needs to be "-Wl,--as-needed,-lgcc_s,--no-as-needed" which is an _ugly_ mouthful but maybe it'll be passed through correctly if put in the right position?

Have I mentioned recently how much I hate gcc?


August 14, 2008

There's video online of the Linux Compiler BOF I hosted at OLS. Apparently free-electrons decided it was worth recording, not sure why. It's mostly me talking, which seems a waste of a good BOF if you ask me, but oh well. (I tried to wander away from the front of the room, but people kept asking me questions and the camera followed me...) The directory has lots more interesting videos in it. (Why the ones where I'm exhausted and semi-incoherent always get recorded... Then again it could just be that I'm always like that.)

Re-inserted toybox into the FWL build. (It never quite went away, I've needed the toybox patch command and oneit all along. But now $USE_TOYBOX switches back on all the toybox commands in defconfig. I took a quick look at busybox defconfig to see if I could pare it down a bit, but of the 255 commands (yup, nice round number... from a certain point of view) only a dozen or so actually seem useless (ed, mt, fdflush, everything in the runit directory... that sort of thing). I thought of switching off the toybox applets too, but then I'd need two codepaths in host-tools.sh and mini-native.sh. (One to build defconfig and one to build based on a miniconfig. Or else I'd need two miniconfigs.)

I'm vaguely pondering renaming the prebuilt binary mini-native tarball to "native-root-filesystem.tar.bz2". Except I'd need both a -dev and a non-dev version, for the BUILD_SMALL stuff. Not quite sure the least messy way to do that yet. Right now the build is producing certain names, based on the script that produces them... Although package-mini-native.sh isn't called system-image.sh (although its non-UML successor probably will be...)


August 13, 2008

Slept 15 hours. Woke up feeling terrible. And tired. Sigh.

Stu says that adding decss support to ubuntu dvd playback can be done by running "/usr/share/doc/libdvdread3/install-css.sh" as root. Good to know. (At the laundromat at the moment, I'll have to try one of the netflix DVDs when I get home.)

Every time I hear about Russia attacking Georgia on the news (or even CNN) I try to remember whether Denys Vlasenko is from Georgia or the Ukraine. (Either way, I'm fairly certain he moved out of Russia's sphere of influence. I should just ask him, but one of the side effects of my sinus infection is I don't want to bother anybody. It's just too much work...)


August 12, 2008

Working on FWL documentation. My problem at the moment is that it's repetitive. I've finished updating the README and the new summary page, and now I'm working on about.html and it's all the same stuff. It's the same stuff in more detail, but there's a lot of repetition. When I change things in future, that would make it hard to track down everywhere it needs updating. Huh...

Another page I'm working on (which isn't linked in yet) is the history page. The project's around 7 years old, it's got backstory. I'm not sure how relevant it is to anybody but me, but I might as well right it down. I also need to do a FAQ, especially since the questions I get asked tend to be asked to _me_ (in email, in irc, or in person at places like CELF and OLS) rather than on the mailing list.

I need to update the "why cross compiling sucks" document and link that in to the mess as well. Suck material from my intro to cross compiling tutorial and get it up on the FWL web page...

I keep getting headaches, right where Fade bonked me on the head at sword camp. (Top right part of the head.) I dunno if this is an aftereffect of the bonking, or some strange symptom of my sinus infection reoccuring. I know it makes me really tired when it happens. (Want nap now.).

I should probably go back to the doctor for yet more antibiotics, but I've had _five_courses_ over the past year, and the last one went for three weeks. What exactly do I exect them to do about it? Not much at this point... (I'm starting to lose faith in the medical profession, at least for anything short of surgery to correct this.) I feel much better while I'm _on_ the antibiotics, but they never give me along enough course, and by the time I convinced them I _did_ need a longer course than they were giving me it was resistant to just about everything. Sigh...

Huh, there's a new POSIX spec. But it's not freely available on the web, so it doesn't count yet.


August 11, 2008

Working on a uClibc 0.9.29.1. Cloned the uClibc repository (one of them, anyway) and going through looking for interesting bug fixes. I'll probably break down and make sparc work in FWL while I'm at it, I found some old uClibc/sparc patches to test, but dunno whether or not they're in the repository. (I think I got them off the mailing list, not sure. It's been a while.)

Heh, remember when I said that the biggest competitor to blu-ray was internet video? Looks like it's playing out that way already.

There's a race to replace DVD between youtube and blu-ray. I expect youtube to win. Customers stay with what they've got for a surprisingly long time out of sheer inertia, and they have yet to replace the lowly CD over in the audio world (despite DVD becoming ubiquitious and holding audio just fine).

The move from VHS to DVD paralleled the move from casette to CD in the audio world. The convenience of never having to rewind was a significant factor in that, and the move from analog to digital so the output didn't gradually degrade (it was either perfect or it didn't work and you got it fixed). VHS had issues with "tracking" and similar that could produce surprisingly bad images even when the tape didn't get crinkled or full of dust; the real comparison wasn't between perfect VHS output and perfect DVD output, it was between what users normally saw out of each.

You can now get television through the internet. Not just hulu, but on the cbs/nbc/abc web sites. (Go look, their programs are viewable off the network's own website. Legally.) Netflix has its set-top box for movies, although hulu's got plenty of those too.

Podcasts forced the audio guys to abandon streaming and just give you the darn mp3, video should go the same way eventually. Dunno when. Oh well.

Out at Epoch, doing programming stuff. Having trouble concentrating.

For a while now, I've meant to break up the FWL sources/configs/$ARCH files. Each one contains two "here" documents (for miniconfig-linux and miniconfig-uClibc) which is an awkward way to go about it, and a better approach is to put them in a subdirectory instead.

The three things standing in the way of this were the size of my todo list and two fiddly technical issues about the transition. Well, I've worked down my todo list until this is at the top, but the fiddly technical issues are being outright annoying.

The first is that in convincing mercurial that you want to delete a file, put a directory of the same name where that file was, and add files to that directory... all in one checkin... It got Confused. Decided to just punt and make a sources/targets directory. One down.

The other is that I can't figure out what to call the first file. It's a small issue, but my brain's just not working well right now. (It's been really hot all day, I think I gave myself a mild case of heatstroke cooking dinner. (I recognize the "tired, headachey, listless" aftereffects. I've done this before.) Sigh, I think August in Texas is the time to break down and use the air conditioning no matter how many cats you've got.

It's always the little things I get stuck on. Right now, the name of the file _is_ the name of the architecture. (And unless the file defines CROSS_TARGET, include.sh uses it to tell binutils and gcc what architecture to produce code for.) Now the directory does that. Once the two miniconfig files are split out, what's left is mostly a series of variable declarations that get . included to tell the build various things it needs to know...

Ok, I'm calling it "details". Moving on...


August 10, 2008

Spoke to Milton Miller about the linking problem with powerpc on 2.6.26. It turns out the linker script is triggering a bug in binutils 2.17 with gcc 4.1, and the easy fix is to grab arch/powerpc/kernel/vmlinux.lds.S out of 2.6.27-rc2. (The diff actually starts with a big long description of what's actually going wrong, and then #ifdefs to work around it.)

The less easy fix is that there's a binutils 2.18 out, which I can presumably use without upgrading gcc. (Remember, upgrading gcc means I have to figure out a new way to glue the soft-float stuff into libgcc.a, which is a pain.) Except that their ./configure is very brittle, and broken in two ways I've found so far. All of them having to do with its insane autoconf and complicated recursive makefile.

The first failure is that if I force it to always think it's cross compiling (remember, glibc->ulibc, plus I want to use the same code path on every architecture so it behaves as consistently as possible, so I want it to treat _everything_ as if it's cross compiling), then I have to override every utility it uses on the command line. LD=ld AR=ar AS=as and so on. (It autodetects some, like gcc, but for others it wants to add a prefix to the name. Configure it in an unexpected way and the whole brittle edifice comes crashing down.)

The second problem is that I haven't installed the "info" package (an obsolete documentation format from the days of Gopher, but which the FSF invented and won't admit is dead). And the ./configure state detects that I haven't got info. And it records a "/big/long/path/to/missing info" in the config log. Yes, it decides the name of the executable to use is "missing info", and when bfd/doc tries to call it, and dies.

It turns out that "missing" is a shell script binutils contains, which outputs a big warning block about make deciding to update something and maybe you should have specified _bud_ lite used GNU make instead of whatever came with AIX. Except Ubuntu is using gnu make, and it's what's going "boing". Sigh.

The fix: quick patch to comment out a one line test that was returning failure.

Did I mention I hate autoconf?


August 09, 2008

Today's entry is entirely moping, feel free to skip it. I'm working on an rss feed topic filter so you can select an rss feed based on the "span" tags I've been dropping into posts, but that's not ready yet.Need to find a decent place to work from. At home I get mobbed by cats, and it's too hot to want a warm laptop next to me anyway. (We have central air, but 4 indoor cats in a 2 bedroom condo with no place to put the catboxes that isn't near an air intake vent. So the windows are open a lot. Yay ceiling fans.)

Metro is closed now. This is sad. Mojo's is gone, Little city is gone... I think spider house is still there but the last time I visited the couch I sat on had fleas.

The bubble tea place on Guadalupe has wireless but doesn't seem to have air conditioning (or sets it at 85 if they do, indoors in a place where cooking happens and humidity is high), yet does not have free refills on any of its drinks. Schlotzky's also has wireless but and free soda refills, but the food there is "eh" and the wireless is not consistent enough for me to log onto freenode while I'm there.

Epoch's too far to bike until the sun's gone down, so when I'm not on a day schedule I'd have to drive there. With gas at $4/gallon, whether or not I can afford it I'm _disturbed_ by the idea of moving the car unnecessarily. It's not just the gas bill: it's a 13 year old car that's showing its age. If it breaks I have to get a new one, but I don't _want_ another one that runs on gasoline. Biodiesel is nice but just the tiny amounts they're making (diesel is still $5/gallon and most of it's fossil) have driven the price of food up noticeably; that's not likely to scale. No fully electric cars currently seem serious about it. What does that leave, hybrids? Which ones are good? The decent-seeming ones I've seen (which are too new to find a used one, and how well do they age anyway) costs more than the payoff figure on my condo... I don't want to deal with any of that right now, and find it easiest to just avoid the issue altogether and simply not drive when I don't have to.

I need an outlet when I'm out because my laptop battery is down to about half an hour. (Sad, but I use this thing a lot.) There are plenty of places to go with electricity but no internet (the zillion starbucks locations top this list), or places with internet that close at 10pm (I generally get started around 5 and work until 2 or 3 am)...

I should drag the chair from Ikea up into Fade's office and see about using the desk next to her. That room at least has a door that closes...


August 8, 2008

Met Stu at Epoch, we'll probably meet at the Holiday Inn next week and see what kind of deal they're willing to offer.

Saw The Dark Night at the Bob's Bollocks IMAX theatre on MLK. It was ok. WALL-E was better, and I think Iron man was better. (Yeah, Heath Ledger was convincing as the joker but I went to a public high school in New Jersey that had a half dozen people like that. Just without the magic ability to attract an infinite supply of flunkies and never get caught.)


August 7, 2008

Errands. New debit card, catboxes cleaned, brought some stuff in from the cars, tickets to see The Dark Night in Imax ($12/person, and all today's showings and the evening ones for tomorrow were already sold out)...

Did some preliminary location scouting for Austicon. (We might move it back up to October 2009, might not. But up in Michigan, talking to Sal and Garrett and Marcus and John Guest, I found that I really miss SMOFfing.)

I checked in with the renamed Red Lion from Linucon 1 (what's it now, Crown Plaza?), and the "way too small" Holiday Inn at Mopac and 183. At the first Linucon we got somewhere over 300 people. (Penguicon 1.0 had 500, but that's with Terry Pratchett as an anchor guest, plus looting the about 3-year-old corpse of ConTraption for concom and attendee mailing lists. Plus Tracy had chaired ConFusion 19100 in Y2K, and could pull in resources from there too. All that together, plus all the marketing I could do remotely, got us a little over 500 people.)

So 300-500 attendees seems a good range to expect the first year. It's psychologically far better to crowd your space to the gills (jam packed, exciting, everybody wants to be here) than to have your attendees rattling around in too much space and feeling empty and abandoned. (A show floor with 1500 people in it can seem deserted if it's big enough; I've seen this happen.) So get _space_ for 300 people, and be prepared to buy extra con suite materials and attendee baggies at the last minute if more show up.

A good rule of thumb is 1/5 to 1/4 of your attendees get hotel rooms. (Depends on the event, but for SF cons with locals and more than one per room that's the ballpark.) There are two main nights (friday and saturday), so 1/4 of 300 people is 75 rooms, times 2 nights is 150 room nights. (There are a few more on thursday night and a very small number sunday night, but friday and saturday are the big ones. Pretty much any weekend con runs for 2 days straight: from 4pm friday through around 4pm sunday. Scheduling stuff Friday during the day depends on people skipping work for your con, and scheduling Sunday evening cuts into travel arrangements, packing, and cleanup time. A really _nice_ thing to do is negotiate with the hotel for extended checkout time on sunday, but 3pm is about as late as you're likely to get there without them being totally unable to sell the room to someone else for the evening.)

Science Fiction conventions trade off a room block for function space. Instead of paying cash to rent the space, we promise to fill up their hotel rooms and they give us the space for free in exchange. (This is why SF cons are generally at a hotel instead of a convention center; those only take cash. This is _also_ the main reason we can function on a small fraction of the budget of technical conferences, and charge $50 for the weekend instead of several hundred. We're staffed by volunteers, and barter as much as possible to keep the rest of the budget down,)

If our hotel only _had_ 75 rooms we could own the facility, but the Holiday Inn has 194 and the Red Lion has even more. (The Holiday Inn has far more rooms than function space. The Red Lion has three times as much space, but only a few dozen more rooms.) The Red Lion is actually excellently balanced for an SF con of about 1200 people; we'd own the hotel and could pretty much do what we wanted (loud parties at 3am, hall costumes, nerf guns in the halls, skinny dipping in the pool, you name it) without worrying about complaints from other guests.

But with 300 people we'd only be going for about 1/3 of the Red Lion's space this year (both in function space and hotel rooms), so we'd be sharing with somebody. And some groups (evangelical conservatives, straight laced business types, some weddings... it's hard to predict, really) just don't mix well with science fiction conventions. (Note that you never own the _whole_ hotel because you're always sharing with airline people. Most hotels reserve about 10% of their rooms permanently for airlines, as part of a big annual prepaid contracts. This is both for pilots and flight attendants who spend the night away from home, but is also why they can give you a free room if your flight is delayed overnight; it doesn't actually cost them extra to do so. That said, I've never heard of pilots or flight attendants complaining about anything. They'll either sleep through it or join in, especially when alcohol is involved.)

So trading off a room block of 150 nights for function space, we aren't getting the Red Lion's entire function space without forking out a lot of cash. (Linucon 1, which was in the Red Lion and had all their function space, cost me $7000 after everything was settled.) And we aren't expecting enough attendees to make proper use of it if we did.

The main advantage of the Holiday Inn is we can fill up all their function space, and not share with another organized group on that front. We'd still share the upper floors with other hotel guests, but we can have a "quiet floor" (sleeping rooms only, no room parties) separating them from the con. The main disadvantage is no room for growth; above about 500 people we need to move to a bigger hotel, and moving is disruptive to conventions. (Not too bad, but a bit of a pain. Continuity is nice in many small ways, both for the attendees and the convention staff.) A secondary disadvantage is the layout of their space isn't the greatest; they have a ballroom (divisible into thirds) and then two more rooms on another floor, plus an open meeting area in the restaurant. (We could cope with signs. A convention can never have too much signage. But it's not as good as just having a nice compact layout in the first place.)

The main advantage of the Red Lion/Crown Plaza is growth potential. It could handle about 1200 people before we had to look for somewhere bigger. (That's big enough we might just decide to cap attendance instead, but it would be years before it even came up.) Their function space is also well laid out and easily divisible: we could get the 3 longhorn rooms and the 3 rooms on the other side of the hall, and they'd still over half their space (the two big center ballroom sections, and three more rooms on the far side of that) to rent out to other groups.

Crown Plaza's space is also in more demand; the function space is what distinguishes them. Holiday Inn's space was empty when I went to look at it, Red Lion's was 2/3 full (on a Thursday). Red Lion is right up the road from the Airport (183 to 290 to I35, right as you hit the edge of downtown there's the Red Lion) and has what was once (and may still be) the largest ballroom in Austin. Holiday Inn is on the far side of town from the airport, in a fairly residential area (still at a junction of big roads and near the businesses in the Arboretum and that Domain thing, but not quite as centrally located), and the function space seems like a sideline to its main business of overnight stays. When I asked about the last two wekeends in September 2009 and the first three in October, the Crown Plaza wanted to get back to me about availability more than a year in advance. Holiday Inn has all of those still free, their bookings only run about ten months in advance.

This implies we might be able to negotiate a better deal from the Holiday Inn. There are a zillion variables in "what's a good deal", but that's a matter for another day.

At starbucks, banging on FWL. Can't get konversation to stay connected to freenode here, seems like I'd need a keepalive ping of about 45 seconds which is just _rude_.

Found my first Brown Paper Bag bug for the 0.9.0 release: the armv5l distcc directory in the cross compiler needs a link to "as". (Because gcc is calling out to it, that's why.) I built "make" on x86 and x86-64, I don't know if this is an arm thing or because I didn't previously try to build dropbear under mini-native with distcc. Either way, it's easy enough to fix (make the symlink), but I'll need a 0.9.1 release soonish. I think I'll hold off telling the uClibc/busybox/qemu/linux-embedded lists about my new "you can build Linux from scratch with this!" release until 0.9.1, when that may actually be true. (Note to self: try to build Linux from Scratch under each architecture. Yes, with all the crappy gnu packages. It's a great workout.)

Also looking at the 2.6.26 kernel. The UML thing seems to be a known "this fixes gcc 4.3.0 and breaks gcc 4.1.2, and we dunno why" issue. Sigh. Need to stop using UML.

I also need to find a way to set up distccd so it uses different ports for different architectures. I suppose I could break down and add another field to each sources/configs file, but that's darn silly. There should be a way to handle this automatically. (And there is, but distccd isn't giving me the information I need. I need two pieces of info from the daemon: the port it attached to and the PID so I can kill it when the script exits. I'm getting the first by supplying it on the command line, meaning it can't randomly attach to a free port. I'm getting the second by telling it not to daemonize and backgrounding it myself with & so it shows up in the jobs list.

Should I write my own distcc (probably extending the gcc-uClibc wrapper script), or should I try to extend the existing one to the point I'm probably almost rewriting it? Decisions, decisions. I know the big timesink of the second approach would be learning what the existing one does in enough detail my changes don't break it; this is a big enough modification (and what it does is simple enough) that starting over is almost certainly faster. Probably not the right way to go in the "be a good boy and eat your broccoli" sense. Sigh.


August 6, 2008

Tried to run Michael Kerrisk's math_test program under uClibc 0.9.29 so it could be included in the man pages, but it turns out that #include <fenv.h> isn't available under uClibc 0.9.29. Since the uClibc guys seem determined never to have another stable release, I haven't bothered with whatever's in svn. (Or in the nptl fork. Or Peter Mazinger's fork. Or the fork the gentoo guys are using. And I can't even get a copy of the Blackfin one current maintainer Michael Frysinger reportedly maintains as part of his day job.

Huh, then again the uClibc about page still lists Erik Andersen as the maintainer, and his email is still the one at the bottom fo the page...

My talk at OLS spawned enough interest in http://kernel.org/doc that I'm being shamed into doing something about the dreadful state of that page...

Also banging on the FWL 0.9.0 release. Added one more patch (to make busybox mdev _shut_up_) and of course this requires a rebuild of all targets...

And it's out. I have released a FWL version that can rebuild itself under itself. Dinner time, I think.

I'm really starting to hate User Mode Linux. Apparently something about the new "./forkbomb.sh --fork 3" thing has made UML go all boing, possibly having multiple processes writing out to the same pty. And now I have to re-run the build to get the system-image files to work right. Argh.


August 5, 2008

Home late. Collapsed. Cats are being very clingy. Fade's glued to her iMac, but my laptop holds very little interest for me at the moment. Everything needs to be cleaned.

Step 1: Make tea.

Deal with everything else tomorrow...


August 4, 2008

Checkout time at the hotel came and went, now we're at a McDonald's waiting for the mechanic to call. (They're waiting for the part.)

Obama is giving a speech on Faux News, can't quite hear it over the three old women in the next booth. Eh, it's on youtube. No internet here (choice of Wayport or AT&T branded lack of internet.) Now the speech is over and Faux has various cute blonde women attacking Obama. One of whom is McCain's communications director, according to the writing at the bottom of the screen. Sigh. And now they've cut away because Morgan Freeman has broken his arm. (Really.)

Very conflicted about Obama these days. Voting for retroactive immunity for phone companies that cooperated with warantless wiretaps was a serious betrayal as far as I'm concerned. I'm not sure if he's lost my vote or not, but he's lost my money. Sure he can still win my vote back if he just refrains from doing anything else _that_stupid_, and I'm not voting for McCain no matter how many times he appears on the Daily Show. But I'm not donating a dime to Obama after the immunity thing. That was deeply uncool, and he knew it.

Banging on the rss feed generator, in hoping to eventually get it to parse the span tags I've been sprinkling in over the past few weeks. (I can has topics. With paragraph granularity. Woot.

Step 1 is turning Christian's programming style into something more like mine (if I'm going to be extensively modifying and maintaining the thing...). It's too small to need a class, lots of functions are called only once and could just as easily be inlined, at least one indent used tabs while the rest used spaces... Nice little program in general, though.


August 3, 2008

Breakfast with Sal and the Aegis crew (and Eric and Cathy and Garrett). Then we hit the road back to Austin, and made it as far as northern Kentucky before I discovered that my car has power steering. (Ok, the escort had rack and pinion, the pontiac has a power steering pump that leaks Squinchers and makes a growling noise when offended. Now I know.) So we're at a hotel until morning.

I'm tired. Sword camp was marvelous. FWL release later this week, I'm just not with it today.

I have 50 megabytes of accumulated email. Eek.

Neither of us are inclined to leave the hotel room. (Fade has internet. She says she wants to hug it.)


August 2, 2008

Ow.

It is the day after sword campp, and I am in pain. I finally completed Basic, after three years of meaning to. (In 2006, sword camp occurred while we were moving from place to place in Pittsburgh, so Fade went but I stayed behind to pack stuff and haul boxes. In 2007, we were moving back to Austin and neither of us got to go, which is why Fade went through Basic again this year since she not only missed a year of training, but didn't have anybody to practice with in between.)

We're hanging out on the Aegis Compound for a day to recover, and then hit the road Monday morning. (We're welcome to stay in an "the only food left is bagels and the camp showers are out of propane" sort of way. The tent we're in was still up from the last event anyway. I'm all for it if it means I don't have to move much right now. Ow.)

Poking at the next Firmware Linux release. I think I'm holding off on the 2.6.26 kernel for now; it seems kind of craptacular. The build produces obvious warnings even on x86, when I was showing Tim Bird how to fire up a 2.6.26 kernel he'd built under qemu it encountered numerous DMA timeout errors (again on x86 with an IDE hard drive), the powerpc patch no longer applying is understandable (same for the perl removal patch) but the 3.2 gigabyte kernel strip produced is just _weird_, and I really shouldn't need to apply a patch to UML just to get it to _boot_... I suppose I'll machette through it all after the release, and hope the 2.6.26 dot-releases can incorporate some patches to get the obvious breakage fixed.

That said, I'm accumulating a largeish number of patches needed for 2.6.26 that don't work with 2.6.25. Currently the .25 stuff works and has lots of build infrastructure changes unrelated to the kernel, and the easiest thing for me to do is push out a release of the .25 stuff so I can break everything by checking in the .26 stuff, and debug it at my leisure.

Speaking of .26 stuff, I've missed another merge window thanks to OLS and sword camp, and Grelber being down between the two. Sigh. At least I have an updated perl removal patch for the linux-embedded list to ignore when I get back to civilization, defined as "some place that has internet".

Sal, the head of Aegis, used to run a software business and is quite clueful, but the compound is over a mile away from the closest town. Running a land line would cost several thousand dollars and involve negotiating right of way with a couple dozen land owners (apparently even along the roads). Yagi antennas to bridge with wireless need a line of sight, which is great if they want to try to get internet from a national park but heading uphill towards civilization (or at least Pickney) involves two hills and a _lot_ of trees. The current plan is to try cellular internet, but unfortunately this is Michigan so even that's nontrivial...)


July 29, 2008

Sword camp. Day four. Ow.


July 28, 2008

Day three of sword camp. No internet access here, not a lot of time to use my laptop. Fun campfires every night, only managed to land a flaming log on my foot once so far and the burn was smaller than you'd think. Stiff. Sore. Yesterday they woke us up by playing fight music on the PA system really loud (and the fight music includes several varieties of dance music, hip-hop, the theme from the movie "Mortal Combat", etc...) Today they woke us up with bagpipes, which didn't work in my case because I had no incentive to move _towards_ the bagpipes...

Got to poke at the 2.6.26 build a bit last night. The sparc and sh4 builds have wandered into the "failed" category due an undefined reference to sched_getaffinity() in busybox "taskset" (I can just yank that). Powerpc broke because even though I updated the patch to apply to 2.6.26 the kernel build is erroring with 'ppc_ide_md' undeclared. Need to track down what that changed to, but right now I haven't got time. I should be stretching...

In the evening, poking at powerpc. Removing the ppc_ide_md stuff (just to get it to build, IDE won't work until I figure out how to fix it but I have no internet right now), then the build did a powerpc-strip to produce the zImage file, and it took a full minute. The _reason_ it did this was it output a 3.2 gigabyte file. This is not a good thing.

I'm told that Eric's sister rebooted Grelber. I can't get online here so I have to take his word for it, but hopefully my website's back up and email is accumulating for me.


July 25, 2008

Grelber still down.

As long as I've got a gap before I can make a release anyway, upgraded to 2.6.26. The -noperl patch broke, of course, but I've been meaning to redo it anyway. Did so in the gap after the cluster migration panel. (It looks like this might finally have addressed most of this, although it's hard to tell because I missed the first half hour and he wrapped up the presentation right as I was coming in.

The powerpc-qemu patch from Milton Miller isn't applying anymore either, but it looks like a fairly simple fixup. I live in dread of that patch breaking, although I attended a nice device tree BOF yesterday where Grant Likely walked me through some of what I need to know to understand that area a bit better and maybe get an _unpatched_ linux kernel to boot under qemu. Maybe. Still supplying my own boot rom and using something other than open hackware to boot QEMU with.

Speaking of other boot thingies, the uboot BOF was interesting. People have gotten uboot for mips to boot under qemu, but not PowerPC yet...

In general the BOFs have been better than the panels this year. Not because the BOFs are better than average, but because the panels seem weak. There have been 2 consecutive panel slots where I wasn't particularly interested in any of the panel options, more than once already. (The hall track is still good, but Linus isn't here anymore, Alan Cox isn't here, Andrew Morton, Thomas Gliexner, Al Viro, Christoph Hellwig, Matt Mackall... I think CELF had more people I recognized, and most the people I _do_ recognize here were at CELF earlier this year anyway.

Ugh, 2.6.26 is totally horked. User Mode Linux doesn't work at all, git bisect tracked it down to this commit which seems completely innocuous, but that's what git bsect pointed to. Huh. (And yes, reverting that fixes it. Weird.)

Got to meet Mark Shuttleworth after his talk. Cool guy. (He still couldn't pick me out of a police lineup, but I got to ask him some questions, mostly about Linux on the desktop and the 64 bit transition and such. In an alternate universe I'm sure I invited him to Penguicon, but in this one that's not my job anymore.)

At the CELF BOF. I need to go grab Fade and hit the road to go to Michigan. I was goign to look uo the driving directions, but the Westin (where the BOF is being held) doesn't seem to have working internet access. Sigh...


July 24, 2008

Grelber is down again. It was down last night. It goes down a lot. And right now I'm in canada where my cell phone doesn't work, at the Rideau Centre where the internet doesn't work for me either...

Yay internet working. Hugh... (um, Hugh. The Power PC guy. Darn it, blanking on his last name.) helped me get it to work. It requires wpa_supplicant, which seems somewhat overcomplicated but works (as long as I re-run dhclient every 2 minutes). Alas, Grelber still down.

It's evening, and I'm totally fried. Had my talk on documentation this morning, and they gave me a much bigger room than I expected. Managed to be only mildly incoherent and only leave out about 80% of the material I'd hoped to cover. (The paper left out around 50%, so that's not as bad as it sounds. Summarizing 7 months of full time work into a 45 minute talk and a dozen page paper is _going_ to leave a lot out, no matter what you do...)

The compiler BOF went pretty well too. I spent more of it talking than I'd meant to, but people kept asking me questions and expecting me to be some kind of authority on the subject. Dunno why. Michael Opendacker of Free Electrons taped said BOF. Might get a URL to that when Grelber goes back online. (I'm told Eric's sister may be able to go over and reboot it on Saturday. Wheee. If you can read this, it happened.)

Got lost for 2 hours wandering home, of course. It turns out the hostel is 2 blocks away from the Ricoh center thingy where OLS occurs, but 2 blocks in _which_direction_ was a bit unclear. Spiraling out from the starting point doesn't work well when there's a river involved. Looking for things I recognize isn't very helpful when 2 years ago I was at a hotel in the opposite direction from the hostel. Stopping to ask directions from someone so drunk he could barely stand didn't really speed matters along either. Eventually got directions from a security guard who suggested getting on a bus "to get back downtown" might be a good idea. (I'm generally in favor of long walks, but in a city I don't know while it's raining in a country where my cell phone doesn't work, less so.)

I fall over now.


July 23, 2008


July 23, 2008

Yay OLS. Long day, very tired. Got to see lots of people and attend panels. Missed the embedded Linux BOF because I was hanging out with David Mandala and a nice guy named Art Cannon at a bar in the mall attached to the convention center thingy.

Back at the hostel. I need to work on my slides but I'm too fried, I'll set my laptop to go off at 7am and do them in the morning...


July 22, 2008

Arrived in Ottawa. Very tired.

Software suspend does something funky to inodes (or perhaps dentries) that are busy during the suspend, which tends to happen when I suspend while compiling something. On resume, any attempt to mess with that file causes the program to segfault, and dmesg shows a non-fatal kernel panic with register dump and everything. And trying to delete the horked file counts as messing with it. The only cure is to reboot. Sigh. (On the brighth side, the _rest_ of the filesystem seems ok. I think.) Yes, this is the same problem I encountered back in January, it's just happened enough times since then to be somewhat predictable now. Hopefully, the upgrade to 8.04 will make it go away, if I ever get around to doing that.

It also means I have to restart my forkbomb build from scratch, so that's another 5 hours before I can do a FWL release. Might leave it running overnight and try for a release tomorrow at OLS...

After weeding out the spam and mailing list posts, I have about 2 dozen actually important looking emails accumulated since I left Austin. Probably about 3 hours of replying, altogether. I don't currently have 3 hours of awake left, so I think I'm going to just punt on the whole pile until morning...


July 20, 2008

Mercurial 1.0 is producing corrupted tarballs. The gnu tar command complains (and eventually exits with an error), but makes it through skipping just the one bad header. The busybox one aborts halfway through. This is why I've spent days not being able to get the thing to rebuild under itself. Sigh.

It also means I can't cut a release until I get mercurial to emit a non-corrupted tarball. (All the _files_ are there, and I could tar them up myself, but the release tarball won't match the tagged version...)

Got a fix from Denys Vlasenko, it turns out mercurial is setting the "length" field nonzero for symlink entries. It souldn't be doing that, but it's easy enough to work around.

Ok, FWL revision 373 is probably what will become the 0.5.0 release, but it takes several hours to build all the targets and I have to hit the road for OLS now. Maybe I'll cut a release from Ottawa...


July 19, 2008

I take it back. It was not a nice mammoth.

So, preparing to go to OLS and then sword camp. Possibly leaving this evening, depends whether we want to make the tuesday mini-summits or not. The virtualization mini-summit looks vaguely interesting, but the only really interesting presentation in that is the mini-VM one (extending KVM towards embedded systems) from 2-3pm. Not quite enough to worry about arriving a whole day early for, and there might be some weird extra registration requirement like they're doing for tutorials this year anyway. *shrug*

I still need to get a Nail board HOWTO to Andrew Morton. He doesn't seem to be speaking at OLS this year, he might not actually be attending, but it's a decent excuse to get something done I should have finished months ago...

Somebody who is scheduled to present is Ubuntu founder and space tourist Mark Shuttleworth, specifically delivering the Friday night keynote. My ex-boss Dave Mandala (who's known Shuttleworth since before he was rich and famous) will also be there, so there's an unlikely but technically nonzero chance Dave might take me out to dinner with him even if I didn't try to say hi. (That's how I met Thomas Gleixner at a previous OLS, Dave knows all the fun people...) Except that I have to leave Friday to go to sword camp (missing saturday entirely), because the two overlap and Google says it's an 8 hour drive. Might be able to stay for the keynote, but not after. Oh well.

Naturally, my first response to noticing Shuttleworth's keynote was "perfect convention guest". There's never any guarantee someone would say yes, but it's the perfect opportunity to invite him, and I think he'd probably really enjoy being a guest of honor at a combination SF convention and Linux expo. I'd have to find out his favorite flavor of LN2 ice cream and who his favorite SF authors are (and whether they're good GoH material too), but that's not to hard to find out. (Among other things, I could just ask...)

Except I'm no longer involved with Penguicon thanks to this year's con chair. (I'm not even attending his year.) Linucon ended when I moved to Pittsburgh, and the new one Stu and I are starting up got bumped back to 2010. So currently, I have no context in which to SMOF. Strange feeling, that. Oh well.

I think the most boggle-worthy OLS panel this year is probably SyngergyFS: A Stackable File System Creating Synergies Between Heterogeneous Storage Devices. In the speaker's defense, I suspect English is not his first language, but still. Nothing aimed at "Creating Synergies" belongs anywhere near the Linux VFS layer, nor should "Quality" initiatives or any other pointy-haired-boss speak straight out of Dilbert.

Oddly for something that pointy-haired, there's no mention of Xen. But the winner of this year's "giving oneself a hernia straining to emit an acronym" award goes to VESPER, which _does_ mention Xen. Again, english not a first language I'd guess. (Can we just let Xen die already? Even Red Hat switched to KVM, which is partially based on qemu. Xen is simultaneously more complicated and less capable, and if you really need to run emulated Windows on a system without the special memory management bits KVM depends on there's always kqemu. Even VMWare is finally rolling to a stop.)

It's somehow reassuring that new horizons in memory management still comes down to competing approaches from Rik van Riel and Andrea Arcangeli. (Not that I could make a saturday panel anyway, or would go to that instead of building a multimedia embedded linux system from scratch. But there's probably a paper in the proceedings...)


July 18, 2008

Went to Epoch in the wee hours of the morning, planning to tackle my svn to hg converter so I could bang on the uClibc bug. Found a fix for it waiting in my email, thanks to Joe Soroka. Tested it and it works. (Yay!)

Found that Roberto Foglietta posted a bunch of messages in the toybox list going back to Tuesday. Tried to catch up a bit there.

I should put out a FWL release tomorrowish...

Also transplanted a gig of ram from the 64 bit desktop that doesn't work into the 32 bit system that does, so I have something I can just leave running when I go out to build all architectures. It's noticeably slower than my laptop, but I feel better about leaving it going overnight.


July 17, 2008

Another day offline. This week I've gotten the car poked at, gone grocery shopping, made a hotel reservation in Ottawa (at the hostel from last year), scheduled the Lethal Chemicals Man to come dissuade the ants so the cat food dishes will be safe while we're gone, confirmed Mark can feed said kiggies, assembled more bookshelves and unpacked more boxes onto them... Still haven't gotten the laundry out of the car.

But mostly, I've spent this week reading Tamora Pierce books. I have now run _out_ of Tamora Pierce books. Bloodhound apparently got bumped to 2009, and there's no sequel to Will of the Empress yet either...

Now re-reading Roger Ebert's "Your Movie Sucks", which is more a bathroom book than anything else...


July 16, 2008

I need to prepare for OLS, so naturally my only use of my computer today was reading the Casey and Andy archives and playing Desktop Tower Defense. (There are youtube videos of people playing the challenge modes.)

I should really upgrade Ubuntu, the flash plugin keeps leaking some kind of resource until flash stops showing up in web pages, and then I have to do "killall nspluginviewer; killall npviewer.bin" in another window. Nope, killing just one isn't always enough, and yes individual pages can have enough flash in 'em to drive the plugin to exhaustion so you sometimes have to do it after _every_page_. Yes, this is the kind of thing desktop Linux users need to know, which is why we're so rare.


July 15, 2008

I remember now why I don't hang out at Jimmy John's much, even though they're open until 3am and have a table next to an outlet. That table is under a very loud speaker, which is sometimes playing absolute crap. (In this case, the C is silent.) Somebody is literally singing about vandalizing mailboxes, for a definition of "singing" that involves monotone chant in front of a drum machine. About every third word is unprintable by newspaper standards. (I don't get it: "I'm bad, let me prove it by singing! Fear my three note range!")

The really _sad_ part is that all three people working behind the counter are "lilly-white". Listening to a recording of somebody screaming about killing whitey. Voluntarily. (With police whistles and vinyl record scratching, neither of which have existed _outside_ of rap for many years.)

Reading "Terrier" by Tamora Pierce, not doing any real programming today.


July 14, 2008

Today's way to crash Konqueror is to tell a tab to load a new page, have the "some piece of javascript is taking too long and we think the page is frozen" window pop up from the old window before it can connect to the new site, have the new page load behind the pop-up, and then dismiss the pop up window telling it _not_ to kill the javascript. Instant segfault.

Sigh, lost a ton of tabs. (Most recently, I was watching a marvelous bbc show (from 2003) called "Posh Nosh", which was hilarious. Top Gear turns out to be surprisingly entertaining too, David Tenant's two appearances on the Friday Night Project... He's such a remarkably good sport.) I also had zero punctuation open, which is probablly the best _actual_ use of multimedia to convey information I've encountered so far. (The audio and video tracks reinforce each other, neither would be complete without the other. Most things don't do that very well. Plus I'm a sucker for well done british sarcastic rage.)


July 13, 2008

Poking around with mini-native-i686 in a chroot, trying to figure out the uClibc static build problem. Decided to use the RECORD_COMMANDS wrapper to snapshot the commands actually being run (to find the ./configure step that's dying). Found 3 bugs in the wrapper so far, and checked 'em in.

Great. Here's the problem:

main(){return 0;}

That program, statically linked against uClibc, segfaults. If you dynamically link it, it works. If you add a function call before the return (such as a printf()), it works.

I have two or three guesses about what might be going wrong, but somehow I foresee single stepping through the assembly to see what it's doing, and that sucks.

Ah yes, this issue. And the recipe from there still mostly works, although "show r" doesn't seem to be recognized. Ah, it's "info r". (Fixed the old blog entry so I have the right recipe recorded somewhere.)

Ok, so it starts in _start, I step through all that and it matches, and then it calls __uClibc_main which is long and complicated. And it's dying somewhere in __uClibc_main, I _think_ near the "Pull stuff from the ELF header when possible" comment. There's a loop right after that which looks promising. It seems to be before the call to __uClibc_init (which got inlined)...

Ok, back up and try a more comfortable debugging approach. Rebuild uClibc (based on what cross-compiler.sh is doing) using the source in build/sources (which is correctly extracted and patched, and won't get rebuild until we re-reun setupfor), reinstall it, and build "../../cross-compiler-i686/bin/i686-gcc -static test.c" to make sure problem is reproducing there. Yup. Ok, now edit libc/misc/internals/__uClibc_main.c and insert write(2,"narf\n",5) just before where I think it's crashing, rebuilt test.c, run a.out, and... It says "narf", then crashes.

This is a debugging approach I can get results with: stick printfs into the source code (or in this case write() because it boils down to a system call and is less likely to screw up early init). I know gdb has its adherents, but it's a tool of last resort around here...

The call to _stdio_init() is failing...? (It's making it to __uClibc_init() almost to the end of that, but the last if() statement with the call to _stdio_init() is unhappy. It's not making it _into_ _stdio_init(). If I take "attribute_hidden" off it at least doesn't segfault there, but it still segfaults somewhere after the return and it's not calling the contents of _stdio_init().

Hmmm...


July 12, 2008

Went to see Hellboy. It was very well done in a lot of ways; excellent acting and excellent effects. It managed to include a Barry Manilow song in a _good_ way, which is an Epic Feat right there. But the writing triggered more than one of my pet peeves.

Here's a paragraph break so you can stop reading. (No programming today, just movie spoilers.)

I despise the "disposable girlfriend" trope, am not a fan of the "heroic suicide", and am annoyed at any writer who sets up a Bad Thing early and obviously in the movie and then DOESN'T FIX IT, instead letting it hang over the story for most of the movie and finally playing through to a predictably tragic conclusion. (She was as Obviously Doomed as King Redshirt from the stereo nosebleeds in the throne room; going on to set up a love story between her and one of the protagonists making her _into_ the disposable girlfriend was just torturing the audience.)

I kept hoping they'd subvert such an obvious setup, the way the first movie did with its iteration of the "Disposable Girlfriend" thing, but no. Having a bad guy and a good guy share wounds so the good guy could commit suicide to take out the bad guy at the climax was the plot of the movie "Dragonheart", which despite being voiced by Sean Connery is really not worth copying from. This was a much better movie than that.

That's what really annoyed me, the rest of the movie was substantially better than that. It was both wasted potential and made this particular plot thread look unworthy in comparison. Sure it was a summer action popcorn blockbuster, making it a bit predictable in places, but going "I know, let's ditch the happy ending to break the mold a bit, and yet telegraph this move for an hour and a half" is not an improvement.

There are a dozen other ways it could have ended. If Abe Sapien caught his girlfriend's arm as she tried to stab herself and instead suggested that Hellboy use the crown to order the golden army to imprison her brother while they left, taking the crown with them. (They even commented he was the brains of the outfit earlier, but gave him no real problem to _solve_ during the entire movie. Guessing where a large lump of metal is hidden doesn't count when you have a single room to search, 20 agents to do it with, and a time limit measured in hours. And possibly metal detectors.) Or Liz could have done it, since all the guys were blind and her contribution to the final fight scene was to stand there instead of her usual job of being the cavalry (or at least the team's tactical nuke). Or the german dead guy could have done something, giving him a reason to have actually come along at all and making him a useful part of the team instead of some tangential sidekick along for the ride. (Ok, he fights well, but that's what Red's for, and usually Liz.)

Alas, expressing my disappointment in the movie upset Fade, leading to an argument. Didn't feel like programming afterwards.


July 11, 2008

At the laundromat. Really annoyed by money falling out of my pocket. (For some reason, over the past year, cash does not stay in the pockets of my shorts anymore. I've probably lost $200 that way. I see why people have money clips now.)

Some fat guy is holding forth about how the government's a secret cabal. "It's obvious, that's what's happened. The guy was on the internet. That's totally suspicious. It's a cabalic action of a dark force that's kinda so much of the guy who tried to kill treaty oaks, but..." These are direct quotes. "Skull and bones, or even darker action... That was a ritualistic sacrifice, metaphorically, it's like killing little babies...") Five minutes ago he transitioned seamlessly from the bee crisis (them all dying off, and they pollinate all our food, and how much he respects Jerry Seinfeld for tackling this issue head on in The Bee Movie.) Now he's talking about alternative energy ("unlimited hydrogen") technology existing but being suppressed... now J.P. Morgan is the largest bank and they "killed Tesla"... Out of context quote "It's the watermelon that does it"...

I'm having a hard time keeping a straight face while typing this.

I honestly couldn't make this stuff up. I know sturgeon's law apparently applies everywhere, but wow...

Digging through old computers, figuring out which ones to goodwill, and hoping to find a server I can set up to run overnight builds on.

The most meorable was the one that made a very loud _bang_ noise when I turned it on, and a distinct burned smell. Turned it off again despite the fact it seemed to be booting up just fine. (I think it was just enough dust had collected in the power supply to conduct electricity, and it burned off almost immediately, but still...)

I found the first 64 bit machine I got, an AMD Sempron that that was slow and unstable. No interesting data on it, but several interesting parts (2 gigs fairly fast memory, 250 meg sata hard drive, cd burner). Can't use that as a server because it panics if you try to do anything CPU-intensive with it, probably something to do with the CPU fan but I could never jiggle it to work right. It's also VERY SLOW.

I found another Sempron (a 32 bit one, yeah AMD switched from 32 to 64 bit without renaming the processor line) that was the desktop system I limped along with between my previous (Pentium M) laptop and this one. I'm tempted to set it up as a server and run overnight builds on it, but it only has 384 megs of ram and 70 gigs of hard drive space. (Maybe I can transplant the 2 gigs from the panicky 64 bit system into this one, but I'm not sure it's compatible. Worth a try. Can't move the hard drive over, SATA vs IDE. And I never _could_ stabilize the 64 bit motherboard so it didn't panic after a few hours...)

The ironic part is that the two Semprons are the exact same MHZ and have the same amount of L2 cache (256k), but the 32 bit one runs twice the speed off the 64 bit one. Making a 64 bit processor with only 256k of cache brings back memories of the original cacheless celeron...

So now that the system's building under itself, and I've got the cross compiler building static, I want to build every cross compiler target from every host target. This is harder than it sounds. Just tried it on arm host and not _one_ of the targets built to completion. (Trying i686 now to see if it's something wrong with the environment, or just nobody ever having tested arm as a host...)

Ok, i686 went "boing" the same way. But it built a few days ago. What's going on? Hmmm... (Ah, one thing that's wrong is that distccd isn't getting killed when the script exits. Why is that?) Right, kill the old distccd by hand and re-run emulator-build.sh to make sure the client and server match, and then inside qemu rerun ./cross-compiler.sh with CPUS=1 so the error message is actually at the end of the build...

And it reproduces. The problem here is that BUILD_STATIC is producing an unusable binutils, the output of which segfaults immedately. The dynamic build doesn't have that problem. Great.

Ok, killall distccd to eliminate that as a variable, and rerun the build... Which confirms that's not the problem. Single processor, fully native build, and it dies trying to ./configure gcc using the binutils it just built. Why is that?


July 10, 2008

Reading Cory Doctrow's "Little Brother" (via the free creative commons PDF I'd link to if this whataburger had internet access). I like the world "exfiltrate". :)

Teaching the cross compiler to build static binaries if I tell it to. (I've meant to do this for a while, I'm just finally getting around to it.) That should make them a bit more portable, and it means if I rebuild the system under itself (linked against uClibc), I can distribute those versions as the release tarballs for the cross compiler.

The next release may have 100 or so cross compiler tarballs, because I hope to build each target on each host. Currently that's 8 squared (64), but if I get sparc working that becomes 9 squared (81). If I can beat sh4 into working (it builds, but qemu hasn't got a target board that'll run it), or m68k (darn gcc internal compiler error, but maybe I can work arond that?), or armv4b or armv5l-eabi... Anyway, one more and I'd have an even 100.

This isn't necessarily _useful_, but it's cool. :)

I've been trying for two hours to make the binutils build static. (No, I can't look it up, I don't have internet access at this whataburger and the LFS version I cached is new enough that the /tools section isn't tatic anymore.)

I want to find whoever created the stupidly overcomplicated binutls and beat them about the head and shoulders until the apologize. I've set LDFLAGS, BOOT_LDFLAGS, LDFLAGS_FOR_TARGET, LDADD, and CFLAGS equal to "-static". (From reading the Makefiles, the build uses all of those at various points.) I've set them as environment variables, and as make commandline overrides. I modified the top level makefile so that instead of stupidly blanking LDFLAGS it sets it to "-static". And it's STILL creating dynamic executables.

This is why I hate all software ever written by the FSF: it's smug bloated crap written by people who assume everyone knows (or is interested in) what they think, because it's the universal One True Way. (And this whole "libiberty" thing stopped being funny in 1992.) They're a political organization, not programmers.

Time to pull out the chainsaw...

Ok, the flag "-O2" is being passed down to cxxfilt (the last executable built in the build, easiest one to scroll up to). Grepping the top level makefile, five different variables are set to include "-O2": CFLAGS_FOR_BUILD, BOOT_CFLAGS, CFLAGS, CXXFLAGS, and CFLAGS_FOR_TARGET. (Yes, this repetition is just sad. They don't know what they're doing, so they have to repeat themselves. Moving on...) Set each one to a different -O number starting at 3 (everything above -O3 is equivalent to -O3 anyway, so it's an easy way to insert information without breaking the build). And... The build broke.

*Blink* *blink*

"Warnings being treated as errors" (where did that come from?), and "size" is used uninitialized in binutils/wrstabs.c. What the...? Yes, -Werror is being passed in (I didn't touch it, apparently it was already doing that), and the different optimization level throws a warning that breaks the build. Right, so what I need to do is use _lower_ levels, -O1, -O, and -Os. And -O -O should work too. (I want to change -O2 because I want to prove it _is_ one of these, and not somewhere else I've missed.)

P.S. Don't ask me why it's building cxxfilt when I told it "--enable-languages=c" and did _not_ include C++. I believe the british would say "Gnu software is totally pants".

Ok, when I took -j3 out of the build and just did a single non-parallel build, the last executable built isn't cxxfilt anymore, it's "ld-new" (whatever that is). Think I'll stick with looking at cxxfilt, since I'm fairly certain that winds up in the final system and I haven't got a _clue_ what ld-new is).

Ok, cxxfilt.c is being compiled with "-O -O -O", and on the next line being linked with -O -O -O, and that's... CFLAGS. Alright, what happens if I stick -static in CFLAGS?

Well, the build didn't break. It created a 2.4 megabyte binutils/cxxfilt file. And according to ldd, it's _still_ linked against the dynamic libc.so.6. How?

Ok, the command line that's creating cxxfilt looks like:

/bin/sh ./libtool --mode=link gcc -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror -g -O2 -static -o cxxfilt cxxfilt.o bucomm.o version.o filemode.o ../bfd/libbfd.la ../libiberty/libiberty.a

Yes, -static is getting passed in. What the heck is...

Sigh. Ok, this command line works to create a static cxxfilt:

gcc -W -g -O2 -static -o cxxfilt cxxfilt.o bucomm.o version.o filemode.o ../bfd/libbfd.a ../libiberty/libiberty.a

The difference? Yanking libtool. Once again, the Gnu project's stupid pointless shell script that should be a NOP on ELF is screwing up something simple. It fails at being a NOP. What the heck is wrong with these people? (And I'm not going to try to debug it because it's over 5000 lines long. It shouldn't _be_ there, but it's built into the binutils source tarball.)

HA! Guess what? Both gcc and ld recognize both "-static" and "--static". On a hunch, I tried the one with two dashes, and it worked. Four hours of debugging, and I wind up fixing it by playing a hunch totally unrelated to all the source I've read and all the tests I've done.

At this point, I want to swear at the FSF for being MIND_BOGGLINGLY_STUPID. None of this was necessary, it was due to a bug in libtool, something that SHOULD NOT EXIST ON LINUX BECAUSE IT DOES NOTHING HERE. They wrapped so many layers of redundant crud on top of each other that you can't figure out what it's doing without a major archaeological expedition, and every one of those layers is brittle and easily broken.

As soon as I find decent replacements for all off their software, I want it off my computer. (I should check llvm and see what kind of progress it's making.) THESE PEOPLE FAIL AT SOFTWARE DEVELOPMENT.

Grrr.

Ok, so that's binutils building static, now to get gcc to do it. Try setting CFLAGS="-O2 --static" as a make command line override and... it didn't work. Of course. The way to make binutils build static does not work for gcc. Never do anything the same thing twice, every single action is a special case. Sigh.

Poring through the binutils code for _four_hours_ didn't really produce much in the way of useful results, so I'm just going to start _guessing_. (And trying to remember how Linux From Scratch 3.0 used to do this, years ago...) Set LDFLAGS=--static as an environment variable... Nope. Set it as a make command line override... Ha! That worked.

I am _loving_ little brother. (Ok, some of the early chapters were hard to get throguh, but "Operation False Positive" is just such a marvelous name...)

[Much later...]

"Here in Germany, we have much experience with what happens with a government that gets out of control." Marvelous line, delivered totally dry...

Good grief, when did it become 8am?

Now 8:43, and I _really_ need to go home. And use the bathroom. But... Book! (Right, I can read book at home, it's only a 20 minute bike ride, suspending laptop now...)

I have now finished reading Little Brother. It's noon. I've been on a night schedule. I fall over now.


July 9, 2008

Went to the pool for another 4am swim, but it's kind of filthy. (Yesterday I noticed it didn't smell that great and didn't put my head underwater. Today it's _cloudy_. I think the power failure a few days ago knocked the pump and filter offline. Hope they fix it soon...)

My laptop's learned a new trick: fail to come back from software suspend with a black screen, not even responding to the power button (which I made re-suspend it when it comes back from software suspend with the keyboard and mouse paralyzed) unless I hold it down for the 10 seconds or so that makes the hardware yank the power out from under it.

Oh yeah, "ready for the desktop". Right.

The Daily Show broke its website again. (They seem to have a full time staff of MCSEs devoted to finding new ways to screw up fairly simple tasks.) They used to use a flash applet to navigate to old videos, which was stupid but at least worked. A month or two back they put all the old episodes of the daily show online (back to John Stewart's first appearance). Now the same navigation page lost the flash applet, and instead they show videos by page going back 25 pages, which just makes it to the end of October. So I _was_ going back to 1999, now I can go back 8 months. Big improvement, guys.

Ran memtest86 for a while after the dozenth crash of the flash plugin (considering the two resume failures when it didn't _used_ to do that, thought it was worth a check). Didn't find anything. Bit of a relief, after spending almost $1000 on medical stuff this week, having to buy a new laptop would make me nervous about burn rate. I'm living off my savings until I get the consulting business started, and I need to get FWL 1.0 out before I expect anybody to want to pay me to support or extend it....

I have a fedex tracking thingy for my 6 cases of Splenda mini-packs. They were last seen in Pennsylvania.

Checking /proc/cpuinfo for the string "qemu" is not a reliable indicator; armv4l doesn't contain it. So I need to have multiple names for the script, which means I want to check a symlink into Mercurial. It didn't used to be able to do that, but I'm told that was one of the things Sun paid Matt to implement, and it was a criteria for the 1.0 release...

The internet remains the internet. Today's installment: The Ukelele Orchestra of Great Britain performing "Smells like Teen Spirit". (British people, performing in suits and ties, playing grunge rock on ukeleles.)

Not nearly as impressive as Jake Shimabukuro's Ukelele rendition of While my Guitar Gently Weeps, but let's face it: not much is. (I'm particularly amused by the way the mpeg encoder just breaks down trying to follow his hands moving. The frame rate simply isn't fast enough...)

Now that I've updated to the current busybox, the only package left that can't do a parallel build is uClibc. (The current stable release intermittently dies during the build if you give it -j 2 or higher.)


July 8, 2008

Went skinny dipping in the pool at 4am, then biked to Epoch for more exercise. (Obviously got dressed between those. Still damp even after the bike ride, despite toweling off fairly thoroughly. when did Austin get so darn humid?) Epoch's internet is down, and the note at the counter A) says it'll be down for a couple of days, B) blames file sharing. How...? (Did they tick off their ISP? This _is_ a coffee shop, I'd think all sorts of weird virus infected laptops come in spewing spam. Ok, currently every laptop I can see in this room other than mine is a macintosh, but still...) Luckily, this being Austin, there's another random wireless access point in a neighboring building somewhere... :)

I'm trying to figure out which is more disgusting, teaching the uClibc header rebuild (for readelf and ldd) to look in /tools/include if /usr/include doesn't exist, or making a /usr symlink to /tools from qemu-setup.sh just for that. (I already checked in the latter, but I'm not happy with it.)

The fundamental problem is hardwiring in the /usr/include path. The uClibc build wants to know where the kernel headers are, and I know where I installed the _target_ kernel headers, but this is the _host_ kernel headers. Yes, /usr/include is a standard location, but our toolchain is relocatable and in the system I'm building it's at a nonstandard location (to conform to what Linux From Scratch does)... I'm relying on a standard in one place and violating it in another, and that's just _icky_.

On a semi-unrelated note, it occurs to me that I can have every target rebuilt itself and test the result via _chroot_, without having the packaging step working. I need to bang up a new build.sh variant for this, but that's not too hard. I can probably even use "uname -m" to autodetect the host, and feed it into qemu via the smoketest.sh script...

Splitting up qemu-setup.sh so there's a separate chroot-setup.sh turns out to have too many sequencing issues. (Can't mount /dev/hdb until mdev -s gets run, but chroot-setup.sh does an exec so it can't return to to qemu-setup.sh...) Pretty much I need one script that _detects_ whether it's running under qemu or not. I could grep /proc/cpuinfo to see if it contains the (case insensitive) string "qemu", although I'm not sure if that's going to work for all targets. I could also give the script two different names hard/symlinked together and do a test on $0...


July 7, 2008

Yay doctor's appointment. I'm not happy about spending $700 on a cat scan (although it was a new experience to see the inside of my own head), but I _am_ happy that the doctor confirmed I have a chronic sinus infection (showing me the pictures, I hadn't known I had sinuses near my spine but those were the ones full of grey on one side and black on the other), and prescribed me three weeks of such a high dose of antibiotics that the pharmacist A) had to tell me to take two pills each day rather than just one because they didn't have 500 miligrams in one pill, even the 250 milligram ones are pretty darn big), B) only had 13 days worth on hand rather than the full 21, so I have to come back in a few days once she's ordered more. (Plus a steroid nasal spray despite my nose being fine, but apparently it helps anyway).

This is somewhere between the double-barreled shotgun approach and "I say we take off and nuke the entire site from orbit, only way to be sure". I've been pretty much guaranteed it'll kill all the symbiotic bacteria in my digestive tract so I'll need to eat lots of yogurt. They also warned me about a metallic taste, which I can confirm but am happy to put up with for a few weeks.

I'm already feeling better. My hands have gone back to normal already, and typing is no longer a chore. I think the sinus infection was starting to trigger auto-immune responses. I've had it ever since Pittsburgh, where I thought being miserable was just part of pittsburgh and that I was probably allergic to something making my lungs congested so much. After almost two years, my immune system was getting frustrated and a little trigger happy. (Several other weird random symptoms may be attributable to having a chronic infection right in the middle of my skull, near my spine and brain stem. Bad thing. Very happy to finally get rid of that...)

Banging on the "building FWL under itself" thing some more, this time using the i686 mini-native directory as a chroot, rather than messing with qemu. (It's faster, and once I get it working under i686 the rest should be easier. Plus I don't have to preallocate space in a block device, and I can just copy files into the chroot directory from another window. (Yeah, if I set up a network share on an nfs or smb server I could do that with qemu through the virtual network, but I haven't done that yet...))

Ah! Hmmm... The breakage is that after I build uClibc, I need to build a host version of uClibc's readelf and ldd for the cross compiler toolchain. So I do a make distclean, make allnoconfig, and make headers in the uClibc source. Making headers needs to know where the kernel headers are under, so I tell it /usr/include since this is the host... and the system FWL built doesn't have a /usr directory because everything still lives in /tools. Right.

I'm already creating /bin and /lib symlinks to tools (so things that use absolute paths ala /bin/bash and /lib/ld-uClibc.so.0 work). This is a third that qemu-setup.sh needs to do before we have a working build environment, I think. (This is a Linux From Scratch issue more than a FWL issue, having a blank root directory with just /tools is great if you want to create a new system from scratch first thing, but if you want to do anything else you have to do lots of fixups to get a working build environment for arbitrary packages. Hence the qemu-setup.sh script...)

But with that fixed up, it's building the cross-compiler.sh stage under itself. Yay!

In theory, the entire FWL build should run under itself up to the packaging stage. That part's been problematic all along, of course. The two main problems with it right now are 1) User Mode Linux only runs on x86 and x86-64 hosts, not arm or mips, so loopback mounts without root access are out. 2) mke2fs and tune2fs aren't in busybox anymore, so creating a filesystem image is missing a tool. Both of these problems can be fixed by putting gene2fs into toybox.

The other short term todo item is to put toybox back as an optional overlay replacing the appropriate busybox tools...

It needs more testing, but I can pretty much do a 0.9.0 release any time now. I want to do the expontential bootstrap thing of building each cross compiler from each host (which is likely to result in about 100 packages), and I should probably bite the bullet and make sparc work...


July 6, 2008

Hmmm, the uClibc breakage turns out not to be while actually building uClibc, but during the "make headers" phase afterwards. Unfortunately debugging it got interrupted because my laptop locked solid and I had to reboot it.

Sigh. Suspend to ram mostly works, but every once in a while it damages some kernel data structure somewhere, some time after which it either gets a null pointer dereference trying to poke at the filesystem (a non-fatal oops which means some file somewhere becomes inaccessable and undeletable until I reboot, which is a real pain no matter where it is), or it just hangs.

Need to upgrade to 8.04 and see what that breaks...

After the reboot I tackled documentation for a couple hours. (Specifically, the FWL project history page, which is pretty much a big blog entry. Link to it when it's finished, I'm up to about 2003...)

Feeling outright terrible. My fingers hurt enough to slightly interfere with typing. My joints seem swollen, and are popping. I would _hate_ to develop arthritis in my 30's. Doctor's appointment in the morning...


July 5, 2008

The FWL build-under-itself seems to be going fairly well so far. Lots of "serial8250: too much work for irq4" messages, which the Linux kernel guys (specifically Peter Anvin) blamed on qemu, even though it's their spurious message getting repeated over and over. But at least their blame came with a patch attached, although I'm using the most recent unmodified qemu release, and judging by the year that elapsed between their last two releases, the next one can be expected around January. Building one from svn to play with right now is a bit questionable due to the ongoing change to a new code generator. I really need to catch up on the list and see how that worked out...

Anyway, that's a cosmetic problem. The build progresses. (I don't care if the right place to fix it _is_ in qemu, as long as I'm stuck using 0.9.1 and my userbase is likely to as well, I should patch the kernel to shut it up.)

I'm really looking forward to my doctor's appointment monday morning. My right hand feels like I pinched a nerve, and has felt that way for two days. Alternates between pins and needles and not-exactly-numbness. Ye Olde Sinus Infection seems to have found fresh nerves to annoy. And the right side of my neck has a muscle that's gone all stiff and hurty. Plus the stuffed up ear, mild headache, and congestion in my throat are all back. And this time it's presumably resistant to _another_ antibiotic they didn't have me on long enough...

Hmmm, building armv4l cross compiler under the i686 mini-native seemed to work until it got to uClibc. At the end of the configure stage of that, it went:

./extra/scripts/conf-header.sh .config > include/bits/uClibc_config.h
:1:24: error: no include path in which to search for asm/unistd.h
distcc[8410] ERROR: compile (NULL) on localhost failed
:1:24: error: no include path in which to search for asm/unistd.h
distcc[8412] ERROR: compile (NULL) on localhost failed

July 5, 2008

Hmmm, FWL command logging missed tee. (Because only forkbomb.sh needs this, build.sh doesn't. Skip it for now...) And it missed the commands run in the packaging stage because the script sets the $PATH for the UML instance by hand. (The biggies there are mke2fs and tune2fs I think, neither of which current busybox provides anyway.)

Bzip2 compression support went in to busybox? Hmmm... Denys broke up Julian Seward's code, not the cleaned up stuff I did. Not surprising. (That said, his version is over 60k of source code.) Oh well, that was one of the blocking commands and it's in now...

What's calling _mercurial_? Rummage, rummage (I have logs!)... It's linux again, on sh4 right after git fails to identify the current repository it calls "hg id". Right, that's similarly useless. (I like mercurial, but doing a "./configure;make;make install" should not invoke source control. That's evil.)

Ok, the only command left after enabling all the busybox stuff and playing whack-a-mole with the other commands (shuffling flex into yesterday's lists and such) is "dnsdomainname". That's called by the Linux build from scripts/mkcompile.h... in a stupid way. If /bin/dnsdomainname exists, it assumes it's in the $PATH. Why not check the _path_? Sigh... Anyway, it shouldn't cause a problem for that to fail in context, it leaves a blank #define LINUX_COMPILE_DOMAIN which is the fallback anyway if it can't find dnsdomainname or domainname. (Oddly, I _can_ put domainname in the $PATH, but it won't fall back to use it because it'll still still dnsdomainname at the absolute path.)

Ok, disable toybox building in host-tools, swap in the new busybox with the new config file... Explicitly add a "make busybox.links" step because apparently I have to do that now... (They sucked in kbuild? Really? Isn't that _massive_ overkill for what they're doing? What exactly does modules_install mean in the context of busybox, anyway?)

Try the build, and... it didn't even make it out of host-tools.sh. Sigh. The busybox 1.11.0 "patch" command failed trying to setupfor linux:

Applying /home/landley/firmwar