Ok, the weird bug I was seeing is because toybox patch is broken. If I do a ./download --extract before building the host-tools, alt-uClibc patches fine. If I do a ./forkbomb.sh --nofork and it builds host-tools.sh before doing the ./download --extract, the patch fails to apply thinking it has a reversed hunk.
Yay, msnbc added Rachel Maddow's show to their podcast page. I need to set up an rss feed reader.
I put current uClibc toolchains and system images up on my uclibc web page (which is the same as my busybox web page since they're the same server.)
Darn it, missed my condo owner's association meeting today. (Forgot, and remembered shortly after it ended. Sigh.) Phoned 'em, and they said they're sending out a letter about what happened.
Ok, I'm all for "never attribute to malice what can adequately be explained by stupidity", but when Republicans simultaneously freak out about Obama's pastor (this "Reverend Wright" guy) and at the same time insist he's a Muslim... That achieves levels of stupidity that may be synonymous with malice. Can't have it both ways, guys. The _charitable_ interpretation is you're lying to yourselves at "la la la fingers in my ears can't hear you" levels.
Catching up on the qemu weekly news stuff. Yeah, it's laughably far behind, but the reason I got blocked was I hit a bunch of patches posted to the list, and needed to cover the source control commits in order to do the writeups. Now they've switched to subversion and I have a patchlist extracted from that. Put the commit lists in the existing writeups, and now I'm working on the last week of january.
If I really buckle down, I can do about two weeks worth of summaries per day, meaning I can do a month worth of summaries every 2-3 days. I'm currently 9 months behind, so that's upwards of a month to catch up. Wheee...
Oh yeah, Stu told me Linus Torvalds has a blog now. I'd forgotten about that...
Re-reading the misfile archive. Perhaps you have to be in the right mood to properly appreciate a line like "Logic is for the weak. Follow me." But I want it on a button anyway.
Mark and Fade and myself went to Maker Faire today. It was awesome. Also very hot, the food was too expensive, and after four hours of walking I wanted to fall over. But we got to watch robots destroy each other, and a tesla coil concert, and Fade got to see many variations of knitting and soap making. I couldn't tell if Penguicon's tesla coil concert was inherently better (I think they did hook more diverse input sources to their tesla coils rather than just a synthesizer keyboard), or if it was just the fact the indoor venue had horrible acoustics and the speaker the announcer was using for "patter" was so loud you couldn't hear the tesla coils when he was talking. (And those weren't anywhere near quiet.) Downside of using an old Hockey rink, I suppose. I wonder whatever happened to the Ice Bats? Off season?
Got a card for sparkfun. I should fiddle with hardware more than I do. I know the theory, but I break stuff. Software you can restore from a backup, hardware less so.
Spent several hours today head-scratching at a bug that turned out to be svn being "helpful" with no warning. (Instead of saying "your local files are modified because you reverted a broken patch", it just dumps lots of <<<<< lines into the thing, which then break the build. I note that mercurial doesn't do this, not only because mercurial is much better at merging, but because it stops and asks for human intervention when it can't do a merge rather than crapping all over your files without telling you.)
Huh, audio of one of the panels I did at Penguicon 5 went up. Specifically, the talk Garrett and I did about embedded software. (And this is why I have the google vanity alert on my name, even if 95% of what it pulls up is ancient or weird.)
I should probably put a page with links to all the OLS/CELF/Penguicon/Linucon recordings, the youtube videos, papers and articles, that one timesys podcast... (Ok, done it.)
The battery on my laptop is now down to three minutes. Thank you Dell, for selling such a quality product. Now I know why you push the extended warantee so hard.
A fun issue that comes up on reboot is that the little app that shows you how much CPU and memory your system is currently using (helpfully named "kde system guard" to make sure you can't remember what it's called when you install) has degraded over the past few releases again. It now does "automatic range detection", I.E. "no, we can't look in /proc to see how many processors and how much memory you have, that would be cheating". So instead it uses the highest value for memory usage and for CPU usage that it's seen so far as the max for the scale, meaning when the system first boots up the graph is completely useless, and keeps rescaling itself as more stuff loads. You can go into its properties and switch off "automatic range detection", but then it wants you to specify the range, with no units, and only one range for both displays (CPU and Memory). I'm _guessing_ it's 0-100%, although I remember in previous versions maxing out _one_ CPU was 100%, but apparently not now...
Managed to screw up my busybox patchlist download, so I deleted it and told it to do it all again. (This is the script that creates these.) I forgot how INSANELY SLOW svn is, it's been going for 4 hours and it's only up to the year 2001.
On the bright side, I once wrote a script somewhere to convert such a patch list into a mercurial archive, and that I can mess with offline...
So uClibc-0.9.30-rc2 is out, and Bernhard is now uClibc maintainer. (It may not be official yet, but I'm shanghaining the man.) Testing the -rc2 in FWL...
Peter Mazinger tells me that to get arm soft float working on a newer gcc:
[15:24] <psm> landley: modify arm/t-linux according t-arm-elf and t-linux-eabi (LIB1ASMFUNCS) and undef LIBGCC_SPEC in arm/linux-elf.h, you can also default it to sed s/HARD/SOFT/ /mhard/msoft/ in linux-elf.h
[15:28] <psm> the part from t-linux-eabi is to replace a *tls file with one *lnx, see comment about div0 rasing SIGFPE
[15:43] <psm> if you add that file to libgcc.a, you will end up missing __raise in libgcc.a and that will come up, when you make use of div0 (if you revert arm/ldso in uClibc to an older version, you would see that, see changelog about division
I'm sure that'll make sense if I stare hard enough at the source code. Todo item for later.
Wrote up an explanation of what complying with the GPL for BusyBox actually _means_, from the developer point of view instead of the lawyer point of view. (It seems obvious to _me_, but there still seems to be some confusion about this...)
Spent 7 hours at Chick-fil-a today. Highly productive. I keep forgetting how much I get _done_ when I just get out of the hosue and hunker down with my laptop somewhere the cats can't bother me...
Watched the debate feed on NPR and MSNBC. I agree, Joe the Plumber clearly won.
Oh, wow. I downloaded Dwarf Fortress and ran it under Wine, and it... worked? (*BOGGLE*. I even have sound. No idea how to _play_ the game, but wow...)
Took the day off to hang out with Fade. Went to Dead Lobster (Cheesy biscuits!) and then to the discount theatre up in Round Rock where we decided to see Wall-E again. (Yes, I am aware I dragged her away from her computer so we could go watch a CGI film about robots.)
Wow that's a good movie. Right from the start, with the CGI disney logo intro, it was like Disney was saying "look, we're relevant again! We have something to be PROUD of!"
Wall-E got a bunch of LITTLE things right. It's got in jokes (the old macintosh startup sound when Wall-E finishes charging, Otto's voice is the mac "speak" command, the mice that wake up Eve in the cargo hold are one-button mice) which you don't need to catch any of to enjoy the movie. The shot where Eve first figures out how to light the zippo and the flame reflects off of Wall-e's eyes is amazingly done. The footage of the president is live action of actor and the blob humans are highly cartoonized to avoid the uncanny valley, but they make it work together by panning past highly realistically rendered machine stuff like the autopilot, so the transition isn't jarring. They do so much without dialog; Wall-E doesn't speak at all until Eve shows up, and then they communicate in single words. The humans speak full sentences to each other (and to Otto) but when Eve says "Directive" to Wall-E and points at her green leaf symbol, or Wall-E says "Earth" and points at his tread and jiggles his eye/camera, you know _exactly_ what they mean.
And the mileage they got out of Wall-E's expressive cameras is still amazing. The bit at the end where he boots the rest of the way back up and his cameras sag down a bit to provide his normal expression is one of those "didn't notice it was wrong until it was fixed" things that's just _masterfully_ done.
I also like the way the movie repeatedly establishes its non-horror, non-drama nature. Right at the start, Wall-E accidentally runs over his cockroach friend with one of his tank treads, the movie pauses for a beat for Wall-E to show dismay, and the cockroach pops right back into shape and continues about its business. This clearly establishes A) it's a _cockroach_, B) the movie could do pathos, but simply doesn't need to. (Leading to the marvelous moment later where the cockroach makes first contact with a trigger-happy Eve, gets blasted point blank by a massive death ray leaving a huge crater, and after a beat crawls right out of the crater to continue to try to make friends. Yup, it's a cockroach. Fed on 700 year old twinkies. It's clearly the most indestructible thing in the film. Wall-E running over it a second time is used to indicate his zombie state. The cockroach is mildly annoyed by this, but more concerned about Wall-E. It establishes this with a _scuttle_ and a _chitter_.)
Fade was happy they didn't anthropomorphize the cockrach. It never breaks character by speaking or anything, it's actually a cockroach. (It's clearly more intelligent than modern cockroaches, but not more than a modern squirrel. That's quite forgiveable considering the context and the amount of time it's had to evolve. Its ancestors spent centuries in a challenging environment, and maybe Wall-E's been breeding them to be good companions.)
I've gushed about this before, so I'll stop now.
When we got home we watched disk 3 of Full Metal Panic, which remains a surprisingly good anime. It's two completely different anime genres colliding, with competing _types_ of plotlines fighting it out. A gritty military type who pilots giant mecha is sent undercover to a high school to protect a 16 year old female student. Each context has its tropes which Cannot Be Denied, except that they directly conflict with each other. It's great.
For example, the last episode of this disk was primarily one genre, being devoted to a Giant Mecha Battle with much property damage, heroes wounded and bleeding, both bad guys actually getting killed (not just defeated; actually dead). This situation evolved (last episode) out of an interrupted romance plot at the high school (really), and in the last couple minutes at the end of the episode two protagonists who were presumed dead turning out to have survived and it ended by establishing a new love triangle involving the two protagonists and the submarine captain. (The characters themselves were sort of going "wait, what?" from sheer whiplash as the other genre bounced back and reasserted itself _hard_.)
There's a sort of Yin/Yang thing going on with the two contexts, (I forget what they're called, it's not Cujo and Shi-tzu, those are dogs. Shinto and Sasquatch? Something. Boy anime and girl anime.) The Giant Mecha Battle anime is based on a submarine that acts as their "whatever an aircraft carrier is called when it carries mecha instead of aircraft, and is actually a submarine". Except the commander of the submarine is a cute 16 year old girl. (Who is a military genious prodigy trained since age 6, of course.) And the 16 year old girl high school student protagonist has similar knowledge of mecha technology (apparently through no fault of her own, it's genetic or something; she didn't even know about it until she was kidnapped by the bad guys so they could exploit her to develop improved mecha, hence the reason the other grenre's protagonist is assigned undercover as a student at her high school, to guard her). In true yin/yang fashion, each genre has a bit of the other genre carefully placed right in the center of it. That's craftsmanship, that is.
Decided to bike to the south chick-fil-a location, put a big wooden thorn thorugh my front tire maybe half a mile south of the river, turned around and biked back before the tire could go flat. Made it to about Jimmy John's, from where I type this.
Tested the new busybox/vi.c:readit() on qemu's arm emulation, and although it's better now, it didn't _fix_ it. Cursor around enough and it'll still blank the line you're on. I've also seen it blank while cursoring _right_, which seems to imply a different cause for the bug. (I really don't _want_ to go down this tangent, but it's bothering me.)
The busybox vi command is a mess. It needs a massive crapectomy. (There's code to scan for function keys, but no code to _do_ anything with function keys. It's full of #defines and #ifdefs.) And strangely, my cleaned up version of readit() is about 2/3 as much source code, but the resulting x86_64 machine code is six bytes _larger_ according to bloatcheck. Much head scratching about exactly _why_. (Presumably, the optimizer could do some serious magic with all the repetition there used to be. I could look at the assembly output if I cared.) Eventually made my "shrink it by 17 bytes" roll after a half dozen attempts, but that was weird.
Conceptually the new code is cleaner because it never reads more bytes than it needs to see if this is a known escape sequence. Alas, it still needs a readahead buffer because it might _not_ be an escape sequence, and then the extra characters need to be kept and parsed later.
Sigh: once again while not connected to the internet, and I want so do an "svn annotate". Once you get used to distributed source control, it's hard to go back...
Ok, found it, fixed it, checked in the fix, emailed the list about it. (The problem is actually that escape sequences sent over serial consoles get de-blocked and arrive as individual characters, so depending on read granularity or poll always saying there's another character waiting is _not_ a reliable way to detect escape sequences. I added a 1/3 second timeout to the poll, and can't reproduce the problem anymore. That could probably be trimmed down a bit, maybe to 1/10 second, but for now it's fixed and I can move on...)
Now, back to debugging the binutils thing.
So the binutils config problem isn't something config.status is calling, it's that config.status is being generated wrong in the first place. The big "here" document that dumps into $tmp/undefs.sed only has two lines, when it should have a line for each enabled symbol.
The busybox vi command remains deeply screwed up. In raw mode the cursor keys come in as ansi escape sequences (esc, left bracket, and then capital A through D depending on which direction it is), but escape is how vi switches between command mode and insert mode. (Yeah, terminal handling in unix derivatives is horrible, isn't it?)
In theory, the three characters come in as a block. In practice, input can get chopped up, so the capital D of a left arrow gets interpreted as "delete to end of line". Yes, cursoring around in busybox vi can eat your data, at least on a heavily loaded system (or something slow like QEMU's arm emulation).
Wound up rewriting readit() in busybox's editors/vi.c.
I'm having trouble following Bleach episode 17. The protagonist leaves his body behind to battle in astral form. This is a significant plot element in previous episodes. So after a big astral battle, he's lying in bed bandaged and recovering. What? Did they lose track of the context switch, or did I? Or is this one of those Matrix "your mind makes it real, so we don't have to" things occurring for the first time in episode 17 of the series?
I do admire the way Orihime's mystic abilities are all based on the Mythbusters mantra. (Every time she does her power chant, I hear Adam Savage going "I deny your reality, and substitute my own.")
Finally got the two international faxes faxed (admittedlly by printing them out, signing them, scanning them both, and emailing the PDFs to England and France respectively), but it's done. (Yay! The SFLC is nice enough to include fedex return envelopes so the three of those in the past two weeks were much easier.)
Mark continues to have a black belt in paperwork, but is now learning corporate politics on top of that. Interesting to watch...
So, the arm building problem works the same on uClibc 0.9.29, so it's not a uClibc-svn issue. Bumping the busybox version to 1.12.1 before trying too hard to debug it...
Nope, that didn't fix it. Sigh. Debugging the hard way. Wheee...
Met with Stu and decided we're not up for organizing a con right now. He's worried about the economy, I just haven't got the energy to spearhead it, Mark's still burned out... Maybe we'll try for spring 2010.
Got the latest Busybox settlement paperwork signed and returned (the SFLC is nice enough to include fedex return envelopes, I just have to go drop 'em off). While I was there I tried to send the two international faxes I have pending (one to a french lawyer, the other a release for a british TV show that wants to use the footage of me dumping LN2 into a swimming pool, although Howard Tayler might be able to handle that one).
The daily show website has once again screwed up its javascript so if it doesn't recognize the exact browser version you're running (I.E. no Linux system that isn't configured to lie) it refuses to display a video, instead telling you to download a flash plugin you alread have. But it turns out it's on hulu, and they're competent about this whole "web" thing.
Trying to figure out if I should post FWL notes to the mailing list, here, or both. The thing about putting them here is I can find them again in future, which is the main reason I write this. Posting them there lets other people respond, not that I really expect them to. I suppose I could post in both places, but that seems a bit redundant...
Oh wow, that's screwed up.
I've mentioned the current economic crunch before. I talked about Liar's Poker and the invention of mortgage bonds with trenchards. (These days they've been renamed CDOs, "collateralized debt obligations". Fine.) That book talked about having half a dozen slices. The screwed up part is mentioned in this radio program, which talks about having almost 200 slices, the bottom few of which are pretty much guaranteed to be defaulted on and never paid off, just by simple statistics saying that some predictable percentage of mortgages wind up in foreclosure, and these slices get paid off last. Hence when the pool was thinly sliced like this, these bottom slices were nicknamed "toxic waste", and nobody would buy them.
So what they did was chop the "toxic waste" slices off the bottom of each mortgage-based CDO, create new CDO pools entirely out of this "toxic waste", and then split _that_ into trenchards. And now magically, the rating on each of these new slices is based on where they were in the CDO, not what the CDO was made from. So the top slices are rated as good as treasury bonds (roughly equivalent to cash), and the middle's ok... Despite the _entire_pool_ being constructed of junk expected to wind up in default.
Warren Buffett used the word "insane" to describe this.
This economic crisis is a mix of a bunch of things. It's got elements of the 1929 stock market crash, the stagflation of the 1970's, the first Bush administration's savings and loan crisis, and some unique little bits of its own.
But the fundamental problem is that the regulators were STUPID. Nobody with a brain ever _looked_ at this stuff, because the Shrub administration decided to deregulate everything. No reporting requirements, no oversight. Nobody ever HAD to look at it, other than the people who were getting rich off of it and retiring before it all went south.
If "government is evil" is an article of faith, then deregulators don't care that the regulations embody what we learned from previous problems, such as the big less of 1919, "letting people go 90% on margin is a recipe for disaster". It's just like teaching evolution vs his other articles of faith, rational thought and evidence don't enter into it. Obviously no problem we've ever encountered before could possibly ever hit us again, otherwise we'd have seen it by now. It's some weird kind of economic creationism, abject refusal to pay any attention to history at all. Iraq repeats vietnam, while the economy gets a medly of greatest hits. Idiot.
The only reasons I'm not as worried as Naiomi Wolf, despite Bush now having his own private army deployed domestically are:
Bush is a moron and the people pulling the strings (his father's posse) are all World War II veterans in their late 70's or early 80's.
If they rig this election (shooting somebody, declaring martial law, another round of diebold's "popular vote vs electoral vote" shenanigans) I have an up to date passport, cash to leave the country, highly portable job skills, and a willingness to go rather than suffer through the rest of the frog boiling ritual.
The thing is, the US no longer has much influence over the rest of the world. It's spent the past decade growing, while we've stayed in place or even shrunk. If the US agenda threatens china's interests, they'll cut off loans like a bartender with a belligerent drunk. The federal government is so deeply in debt it can't afford to keep the lights on without massive foreign loans, and we no longer have a manufacturing base worth speakign of either. China's not going to stop us from becoming a police state, but they are going to take the lion's share of the world's oil as the supply dries up over the next decade. Not sure how that'll play out, but it does limit the "foreign wars to distract from domestic problems" card a bit...
The driving force behind all this is that the baby boomers continue to have the same disproportionate impact they've always had. They were teenagers in the 1960's and career yuppies in the 80's, and now they're old and grey and scared and collectively yelling at the world to get off their lawn and awaiting death from the front rows of their churches. The polite way to say "old fogey scared of change" is "conservative". Of _course_ the republicans have been benefitting from the increasing senility of the baby boom.
That said, the baby boom's power has to peak soon. The early retirement benefit of social security kicks in at 62, and 1945+62=2007. (Plus a 9 month gestation period, so really this year for the first batch. Possibly one reason to play up this economic crisis thingy is to discourage boomers from retiring just yet; only three more years until the full benefits kick in, not hard to scare 'em enough to convince them they'll really need it.)
The same math says the leading edge of boomers hits 65 in 2010, and if the average life expectancy in the US is 77 years (and it's only gone up 2 years since 1990), meaning half the first wave of boomers should be dead by 2022.
I'm aware that the baby boom actually lasted around a decade (what with the GI bill and everything), which is probably why Woodstock came at the very _end_ of the 60's rather than the middle of it. If the 90's were the decade of saving for retirement, and this was the decade of "the baby boomers being grumpy old farts yelling at the world to get off their lawn", then the 2010s look like "the decade of baby boomers retiring and moving into nursing homes" and the 2020's the decade of baby boomers dying of en masse.
The real question is how much damage will they do on their way down. I'm not talking about social security sucking the economy dry, I'm talking about people who continue to vote after they've lost the ability to drive. The Baby Boomers' nominee is already the oldest non-incumbent presidential candidate in history. This is not a coincidence.
We'll see.>
With the new uClibc, the arm native build is going "boing" during binutils because config.h in the subdirectories isn't getting STDC_HEADERS set (except in the "intl" subdirectory, because consistent behavior is anathema to the FSF, and redundant code is how you make your project grow up nice and big).
Wrote up a post for the FWL mailing list instead of posting today's debugging here. I should use the project's mailing lists more often, people can actually reply there...
Ok, getting multiple qemu system-image instances to run in parallel turns out to be slightly more complicated than you'd think.
I want to do this because qemu doesn't take advantage of SMP very well. Emulating multiple processors properly would require the emulator to be multi-threaded internally, plus emulating various IPC things on top of that (memory barriers, anyone?), and the qemu developers just haven't wanted to go there yet.
The FWL compiler toolchain can take advantage of smp on the host via distcc (or even a compute cluster if you want to set it up by hand), but this doesn't help with ./download.sh --extract or the ./configure stage. If I'm running smoke tests on 10 targets, I'd like to be able to do those targets in parallel. (I've got 2 gigs of ram and each emulator's using less than megs, except for x86. It should work.) I fixed up distcc to vary its port numbers based on the PID, so what's left?
Well, for one thing, whatever bash's default terminal type is, it has some newline/linefeed confusion if you redirect the output of /dev/console to a file. I need to set $TERM I suspect. Not a big deal, but annoying and triggering a second problem:
If you kill qemu while it's modifying an ext2 image, it can leave the image in a state that makes the next run _very_ unhappy. (Stale nfs file handle? I didn't build nfs into the thing!)
Oddly, e2fsck refuses to be scripted. It insists it needs a terminal to fix stuff interactively, so 'yes "y" | e2fsck' is gratuitously broken. I'm sure there's a workaround (-a was it?), but at this point I'm too disgusted at the developers' totally artificial limitation to bother, and doubt running e2fsck on the image each time is really a good approach.
What I should probably do is mount hda read only, and have the only writeable space be hdb. This means pregenerating /proc and /sys and /home and all that at the top level, which is a design issue. Right now, I've got a Linux From Scratch style /tools directory and nothing else at the top level, and an _optional_ script that fixes that up into something usable. Unfortunately, that's not amenable to mounting read only.
I could mount a tmpfs in a subdirectory of /tools, --bind mount tools under that, chroot into it, and mount hdb on /home under that. It seems kind of silly and overcomplicated, and also means that run-emulator.sh without run-from-home.sh would be far less useful.
Sigh. The tradeoff here is between "provide something simple the user can extend themselves" and "automate everything to provide the user with more prearranged functionality". The second assumes they want to do the same thing I want to do, which I'm never comfortable with.
Ok, now I'm confused.
I've been banging on the powerpc FWL build, testing the resulting system-image it by building cross-compiler.sh static under it. And I'm getting random hangs.
If I call the emulator script myself (output not piped through less), and disable distcc, the hangs don't happen. It ran overnight that way building more or less to the end (I got tired of it and killed it near the end). But if I use my wrapper that pipes the output to tee and sets up distcc, it hangs.
I think it's in the 2.6.25 powerpc network stack. The most recent hang was during wget, it hadn't even gotten as far as distcc yet. But is it a driver issue, or a qemu issue? Would it be fixed in 2.6.27 if I could get powerpc to work on a newer kernel? Would trying the svn version of qemu help? Can I declare victory since the root filesystem I'm building seems to be working just fine, and this is really an intermittent kernel problem? (Debugging an intermittent 2.6.25 problem is neither fun nor useful, I need to debug on a current kernel, so that means bumping getting a current kernel working for powerpc back up the list.)
Sigh... In any case, I should check in the kernel alt stuff I did, although I need kernel config files so I can _build_ the alt version first...
Poking at putting binutils 2.18 back as an alt package. I have to set five environment variables in order to work around bugs in the binutils build, and it would be nice if I could do that conditionally without polluting the environment or firing off a subshell. Alas, "THINGY=THIS=that; $THINGY command" isn't the same as "THIS=that command". It tries to run a command "THIS=that" instead. Oh well, it was worth a try. (Once again, something that's easy to do but hard to do _cleanly_.)
I guess setting the extra environment variables won't hurt building the old version. (It's not needed, but shouldn't screw anything up.)
Ever want to smack a political campaign?
In response to the second coming of the savings and loan crisis, and John McCain being one of the original "keating five" group of senators caught in that crisis, Obama's campaign produced this unwatachable video. The entire first minute of that video is not just useless, but alienating. Lots of buzzwords flying past the screen at various angles with nothing to back it up sets off everybody's BS detectors. Chop that off, start right at minute one, with the footage from the ethics committee hearing. And then edit out about half the rest, it's INSANELY SLOW... Just give us the facts already.
Contrast with this, which is quick, simple, snappy, comes across with at least a modicum of objectivity, and gets all the info out of the way in the first two minutes with another 3 minutes or so of discussion/analysis. So it's about 1/3 of the length of the official video, but says more, and does it without access to the embarassing historical footage the first one dug up.
What happened to all the hollywood people Obama supposedly has on staff? Why release a video that looks like it was put together by an intern? (No, I haven't forgiven Obama for the FISA thing yet, and it's the reason I'm not giving him a dime, but I'm apparently still capable of being disappointed.)
I don't even want to say "amateur" when condemning Obama's overpolished video. This is totally amateur and yet a huge improvement over what's coming out of the actual campaign.
Poked at FWL a lot. Took advantage of the alt infrastructure to revert the linux kernel to 2.6.25 (with .27 as the alt version), so I can build something I can test PPC with. Tested PPC a lot. Redoing the smoke test infrastructure...
Checked on Mark's cats then headed to the Chick-fil-a down the street from him, except I forgot that franchise is broken on sundays. Hit Arby's instead. No outlets or wireless here. Sad.
Kubuntu does _not_ have a pppd upgrade available. Sigh.
Yesterday's uClibc snapshot builds on all the targets I've tried, which is highly cool. Building binutils natively under arm dies with conflicting types for "psignal" between libiberty/strsignal.c line 553 and include/signal.h line 142, but still: progress!
The new cable modem box fixed the internet at home, and I managed to download a new snapshot, and _now_ it's dying with:
libc/sysdeps/linux/arm/ioperm.c:221: error: conflicting types for 'outb' ./include/sys/io.h:98: error: previous definition of 'outb' was here
And such. Headed out to The Mug of Unity One
Mug's Einstein's with my cell phone and bluetooth thingy. (It was,
indeed in my jeans pocket. Along with a quarter.) And guess what: the
cell phone internet STILL DOESN'T WORK. Apparently, whatever was
wrong with it up in the northeast is still broken
now that I'm back in Austin. Which is _weird_ because I didn't change anything
in my laptop's settings. Bluetooth is talking to the phone just fine, all the
AT commands get the appropriate "OK" or "CONNECT" responses, then it does PPP
and insists it's doing chap authentication... and then the modem hangs up. It
immedately retries, it can do the cycle about 4 times in a minute. At
which point I stop it and call tech support.
Unfortunately, the cell phone's the only phone I have with me to call tech support with. (And calling 611 from a land line isn't likely to get me T-mobile tech support anyway, but let's gloss over that little step in their recommendations, shall we?) This means that every time they try something, it hangs up the phone, but oh well.
Standard hold times for each call apply, most of which is actually the rigamarole to get the voice response system to get me a human (although it sucks much less than it did, apparently "Get me a human." is now a recognized phrase. This is progress).
Got escalated to tier 3 tech support. They confirmed there are no reported outages in my area. Eventually I convinced them that walking me back through the bluetooth association is unlikely to be productive when the AT messages are being acknowledged and I can get pictures off the phone (although I have to walk through the phone's menu to manually set visibility on each picture I take before I can see it, because the user interface on this thing was designed by crazed weasels). The first hang up and call back attempt was to reset the time zone the phone thinks it's in (this doesn't happen automatically, don't ask me why). This involved taking out the battery, which turned out to be "interesting".
Turned it back on, did the dial thing, no improvement. Put the back panel on... phone switched itselff off. Turn it back on, put it down on the table, switches itself off again. Fiddle with battery a bit. Try to call tech support back, the phone switches itself off... It took about five minutes of jiggling and pressing the battery, popping it out and cleaning off the contents, making sure there was no hair in the thing... Finally got the battery back in securely enough that the phone didn't keep spontaneously switching itself off again. After a few false starts, some of which involved hold time. (Oh, and apparently they have a "we call you back when you reach the head of the queue, so you don't wait on hold" service, except there's no option to call me back at this number, and while trying to figure out of "all ten digits of the number" meant I should start with a 1 or not, and then the button not registering the second digit I dialed and there being no "back" button, and of course while trying to figure out what to do about this the phone powered off again and it was back to fiddling with the battery. It occurs to me that this is probably the way to talk to them on another phone, but I still haven't got one with me and the option only comes up if the expected hold time is up around the 3 minute range.)
New level 3 tech support guy. Very polite. Enables the "t-zones" thing my phone has never had set up, so my phone's built in help screens actually work now. (Will wonders never cease. I have no confirmed they're useless and that if I do a "search" for things like "volume" instead of browsing their topic menu, it pulls up pages that don't apply to my model of phone. But oh well.)
Second "this will cause you to hang up" attempt: re-associating the phone with the network. Er, sounds good? This time I could just switch it off, didn't have to fiddle with the battery again. (Thank goodness.) And of course, it didn't fix anything with the ppp session.
The t-mobile people have been unfailingly polite, and quite willing to help me even though Linux isn't one of the Windows or MacOS versions they've been trained on. But they haven't really been very _useful_ so far, and even though the problem seem sot be on their end I want the negotiation to be way more explicit. It keeps printing lines like:
--> pppd: z[7f] --> pppd: z[7f] --> pppd: z[7f]
Which isn't very useful. So now I go in and look at wvdial to try to beat some more debug info out of it. Except wvdial's working fine (it's the child pppd process that's failing), so apparently I want to fiddle with /etc/ppp/options and add "debug", and then give it a "logfile" so it doesn't spit tons of crap out into the system log...
And now it's giving me a bunch more of those lines, except now they look like:
--> pppd: 2[7f] --> pppd: 2[7f] --> pppd: 2[7f
And when I run it again, the "2" is now a "g". Great. THANK YOU UBUNTU. Your main log message for pppd is printing TRASH ON THE STACK. That's just BEAUTIFUL.
Ok, I know I break everything. I expect it. I also know I didn't put these bugs in there, both t-mobile's internet and Ubuntu 8.03's ppp error message fprintf() broke themselves. What I object to is when the bugs I keep running into STACK. They're interfering with each other.
So, I need to go to somewhere that has wireless internet, and see if there's a pppd update I can download. If not, or if it doesn't fix the error message, I have to build the darn thing from source, either lobotomize the copy I've got or else figure out how to get wvdial to call a local version (possibly fun with $PATH will be sufficient here), figure out what the log messages I'm not seeing actually SAY, possibly stick some more printfs() in there to get the information I actually _want_, then call back the t-mobile tech support people so I can diagnose the problem for them and possibly get it _fixed_...
I'd call in Mark for help on this, but he's visiting family in Arkansas this weekend. I need to check on his cats tomorrow.
At this point, I note that I have 30 tabs worth of unread web pages loaded (I was up until 7am reading the world's most addictive website), and United Mug has free soda refills, and pumpkin bagels with pumpkin cream cheese, so I'm unlikely to make much more progress on this issue just now...
The cable modem deteriorated to pretty much unusability while I was away, to the point where Fade logged out of work early because the web pages she's supposed to edit were taking 5 minutes each to load. Called time warner tech support and their diagnostic reported 70% packet loss. Yeah. They think we might need a new cable box, so Fade and I drove to their HQ to swap it out, then stopped at Fry's built-in coffee shop on the way back to use the cellular wireless.
Two problems here:
1) it turns out that Fry's is right on the edge of T-mobile's signal range, so the connection here isn't really better than home was. (Sigh. As backup plans go, "drive out of cellular signal range and then use cell phones" isn't one of the all time greats.)
2) I can't find my darn USB bluetooth dongle. Again. It might be in the jeans I was wearing on the plane yesterday (I'm pretty sure I had it then).
I am once again annoyed at Dell for not making the built-in bluetooth actually work on Linux when they sold me a box preinstalled with Linux. I am _at_ Fry's and could drop another $20 on a _third_ dongle, but this is silly. (Also, none of 'em will clip onto my key ring the way my USB memory stick does, so I'm likely to loose this one too.)
I got a phone call from a recruiter this morning who was sending me email with potentially interesting positions in Austin, and I want to reply to my email, but I haven't been able to _check_ it yet.
And of course Fry's's (Fry's'? The first ' is part of their name...) supposed coffee shop wireless doesn't work, but I knew that from the last time I was here. (They have an access point; it doesn't route packets. It also took them three tries to make me a hot chocolate since my first two flavor syrup selections curdled the milk, and although I feel kind of bad about that I'm not the one who should be tracking it. Still, it's a coffee shop IN A FRY'S. That makes up for a lot.)
We managed to avoid buying a 42" plasma TV today, but the sale runs two more days...
I'm trying to figure out if the number of failures from the uClibc-svn build I did wednesday evening is "amusing", "impressive", or "appalling", a word which I'd google for the correct spelling of if I had internet access. My attempts to use aspell to find out ran like this:$ aspell appalling Error: Unknown Action: appalling $ [looks at aspell man page] $ echo appalling | aspell -c Error: You must specify a file name. $ echo appalling | aspell -c /dev/stdin Error: Could not open the file "/dev/stdin" for writing. File not saved.
I'm sorry, this tool is now in my "too stupid to live" category. I don't care what the engine looks like, the UI is pathological.
Anyway, the uClibc snapshot from the day before yesterday (again, no internet access since the night before I got on the plane; yesterday I was just too tired and today The Cable Modem Faileth) built through to completion for exactly three architectures: i586, x86_64, and m68k (which I spent a chunk of last week getting to work so it'd _better_ still be ok).
The i686 regression is because I'd taken LINUXTHREADS_OLD out of the uClibc miniconfig. I've been complaining for a week that uClibc has two pthreads implementations, and is about to get NPTL on top of that so it has _three_. I'd like to remove one of the two old ones before NPTL shows up, but Bernhard is against it and he's de-facto the new maintainer.
So switching i686 threading back to LINUXTHREADS_OLD, that brings the number of functioning targets back up to 4. Some of the others are dying on sizeof saying user_regs struct is an incomplete type, and I thought that was fixed in svn. Did I accidentally re-download an old version? Lemme download this morning's snapshot and try building again. As soon as I get internet access again, anyway.
Head down on the paper for the past few days, and there's no way it'll be ready before I have to catch a plane back to Austin tomorrow. Alas. But we might get enough bits back together to send a draft out to reviewers, maybe post what we've got done so far.
The m68k target in FWL is now building through to the end. Alas, it's in the same position as the sh4 target: I can build it, but I can't get qemu 0.9.1 to run the result. (It seems to be stuck supporting only coldfire.) Hmmm...
Reading Honor Harrington on Basilisk Station, since it's one of those series I'm expected to have read. Seems reasonably good, but I've only made it 2/3 of the way through the book in the past week and a half because I've been so busy with other stuff. (Mostly the paper, a little FWL stuff, socializing with Eric and Cathy and their cat the rest of the time...)
And the FWL uClibc svn version build is checked in! And there was much rejoicing.
Built all the targets. Only arm, x86, and x86_64 currently work all the way through smoke test. Mips doesn't build with uClibc-svn, powerpc doesn't work with the 2.6.26 kernel, m68k still has an internal compiler error, sparc still fails to boot (but in a new way that I hope to be able to debug), and last I checked sh4 didn't have a working qemu target that emulated real hardware. But that last one I can fiddle with via teaching BUILD_SHORT to do an initramfs, to make at least some progress.
Very much to do, but now it's time to get back to the paper...
My second stage smoke test builds cross-compiler.sh under a target system-image, and that's dying in binutils while trying to link against libgcc_s.so, which implies it's due to the change I made to the gcc wrapper back when I was trying to build perl and glibc for Linux From Scratch. If so, it's not a uClibc problem at all. (Strangely, if I add DEBUG_WRAPPER=1 to the build environment so the wrapper writes the command line it generates to stdout before executing it, the binutils build breaks even _earlier_...)
Ah! It's doing a BUILD_STATIC. Of course it can't link against libgcc_s, it needs libgcc.a instead. Yeah, the wrapper's doing the wrong thing there. Must fix.
Finishing FWL alt-package handling and giving uClibc-0.9.30-rc1 the real shakedown it reserves remain tangled together, but progress is being made on both. And of course the paper is interrupting both of those, so I'm juggling three projects at once, but that's what makes it fun. :)
More banging on the paper last night, until I went to bed after Cathy got up and went to work. I am now almost entirely nocturnal, and have dragged Eric along with me. (This tends to happen to me a lot.)
There's a new linux-api@vger.kernel.org list for breaking the API and ABI of both the kernel and glibc in a more organized manner. I suppose this has to be considered an improvement, over the ad-hoc breakage we've had.
Ah, Eric has told the world what the next paper's about, so the hate mail can flow into his comments section and maybe we can get some useful references out of it. (Which are also likely to be opaque and immutable, but oh well.)
Hey, twitter's down. "You need to supply a username and a password to access this site: Production-Staging Access - Employees Only at twitter.com." Both the main page and /home are doing that, although the individual user pages still resolve if you remember what they were.
Kmail ate itself this morning. Apparently somewhere north of 117,000 messages, it decides that the linux-kernel folder's index file has been corrupted, and decides to regenerate it, warning that I'll lose all status info (like read/unread/important). *shrug* Ok. So it goes away for ten minutes and thinks. Comes back:
The mail index for 'linux-kernel' is corrupted and will be regenerated now, but some information, including status flags, will be lost.
Exact same message, it wants to do it all over again. It's stuck in an endless loop. There's only an "OK" button on this dialog, there's no "forget it you insane malfunctioning *blank*" button. It's halfway through an email download cycle, trying to append mail to the linux-kernel mbox file. If I just kill kmail, I'm likely to lose mail here.
I recall a few years ago having this problem at 32,000 messages. It didn't realize itn eeded to regenerate the index, it just corrupted it and I got pretty colors and _nicely_threaded_ series of messages from "unknown" to "unknown" with no text in the body. Took several confused minutes to guess what exactly had gone wrong.
So I'm opening the mbox file in vi behind Kmail's back and copying about half the messages to another file. (This is just linux-kernel since January, yes traffic is that high. I was hoping to get a whole year in the mbox before splitting the folder, but alas...) I need to break kmail's world into small enough chunks for it to understand (or at least not have a nervous breakdown about). (I note that opening an 800 megabyte file in vi on a system that's already fairly heavily loaded takes some time. My laptop's only got 2 gigabytes of ram, might be getting near time to upgrade.) Let's see, line 20005117 looks like a good place to split...
Always nice to see progress in supercapacitors. The big problem with most alternative energy stuff like stirling engines and windmills is they produce energy in surges, with gaps between 'em, so the result has to be stored and transported to sommewhere useful. It's electricity, so the obvious thing is batteries, but batteries suck. They charge slowly, lose a lot of their input as heat, and worst of all they degrade over time and lose capacity.
Supercapacitors are extremely high density capacitors. They charge almost instantly (and can discharge as fast or slow as necessary), don't heat up much when they do so, and can cycle millions of times without noticing.
Both suck in terms of energy density compared to gasoline, of course. A gallon of gas can still releases several times as much energy as the equivalent weight in batteries. Of course combustible materials are _cheating_ because half the energy they release comes from the oxygen in the atmosphere. (Yes, we live in a highly charged atmosphere that reacts just about anything it comes in contact with, rusting or catching fire. If it wasn't for all the plants constantly pushing the energy potential back uphill the whole atmosphere would react and use up all the oxygen in a few thousand years. You don't find an oxygen atmosphere _without_ life, it's just not stable unless constantly maintained.)
This is the main attraction of hydrogen fuel cells, which react with the oxygen in the atmosphere to produce electricity. You only have to count the hydrogen as fuel, the oxygen is assumed ambiently available wherever you are. Hydrogen's a real pain to store and transport though, it's a tiny molecule that can osmose through all sorts of pipes and tanks, and it's a gas that refuses to turn into a liquid or solid unless you subject it to to outright hazardous temperatures or pressures. Quite possibly still the way of the future, but scientists are still sullenly poking it and hoping they can beat totally different behavior out of it.
But supercapacitors are great for the "recharge" demographic rather than the "refuel" demographic..
More work on the paper. I'll post a link when it's done, we've got another week to bang on it and it's looking like it'll take all of the time we've got. (And that's just to get the first draft out, we'll probably be incorporating feedback for a while...)
Finally figured out what I want the FWL unstable package logic to look like, got most of it implemented, and now I'm fighting wget. (-P and -O didn't want to coexist, but -O can take a path...)
And checked in! (Finally!)
Now, why did I go on this tangent in the first place, again...? Ah right, uClibc.
Alas, my description of references as "pointers with the safety catch on" runs into Eric's gun-nutness. He insists that I can only include the phrase if I rephrase it "pointers with the safety on", which non-gun-nut types won't even see as a reference to guns. (What's "safety" mean here? Pointers, now with safety! And a drop of retsin!) Sigh. Yanked the phrase entirely.
We had a similar disagreement over his first attempt to describe references as "opaque and immutable". Having taught this before, I could come up with a list of common ways to misinterpret that, starting with:
It goes on from there...
It's easy to describe references if you're willing to spend three paragraphs doing so, we just don't want that long a digression. I believe we're now on something like our sixth attempt. Getting closer...
Trying to make FWL download alternate packages was making my head hurt, so I moved the logic into if statements in download.sh (Should FWL try to download alternate packages from mirrors? Keeping in mind the name it's downloading and the actual name of the package don't necessarily match. Yeah.) This isn't too hard to implement, but looking at the result and calling it "simple"? Not quite.
Sigh, the darn dell+ubuntu hard drive eating bug came back when I installed Kubuntu 8.04. (Far be it from them to ever actually _fix_ anything.) Now it's up to 220k cycles of the 600k my disks's rated for. The script to fix it properly is on my backup USB drive, don't have it with me at Eric's. In the meantime, I should remember to run "hdparm -B 255 /dev/sda" after every power cycle or resume from suspend...
Eric and I got a couple pages written on the next paper. Poked at FWL a little. Played battle for Wesnoth and watched Mythbusters episodes. (Eric and Cathy have the "just one disk" netflix thing, because they seldom make time to watch them. Kind of a self-fulfilling prophecy if you ask me, but oh well.)
Every release, Kubuntu develops new bugs. Every single release. Knetwork manager hangs forever "waiting for key from Kwallet", even though Kwallet is open. (For which I have to provide my password, which is sad. Just save the darn wep key in a .config file, I'm ok with this.)
This means I'll need to use my bluetooth thingy to use my cell phone to get net access until I can get the wep key from Eric again, so I'm risking bluetooth subsystem panics. Wheee... Except that it's not working here. It didn't work in Trenton either, but that's understandable. (It worked ok in NYC...) Does it _require_ 3G in order to function? The guy at the shop didn't think so...
In other Kubuntu bugs, vi is broken in new and exciting ways. This one involves .swp files. When you're editing a file, it writes a .filename.swp file saving every keystroke you do. (This is part of the reason it hangs for upwards of thirty seconds between keystrokes when the disk is busy; every few dozen keys it does a sync(). Not an fsync() on the swap file, it does a _sync_ which waits for _all_ pending commits to hit disk, which can take 10 minutes when you're formatting a terabyte USB disk, as I found out. Anyway...) The problem comes in that it can reliably detect that such a swap file is _there_, which gives you a full screen warning when you try to edit the file (which is obstructive and tends to make me lose the first few keys that I type because I wasn't _expecting_ this). But then when you tell it :recover it goes "can't find .swp file" which is just _dumb_, because it just finished giving me this warning screen about there _being_ a .swp file. (And it doesn't go away after one warning, I have to drop out and delete the file by hand to get it to shut up.)
I suspect this means *.swp file had no useful data in it, you did a :w before suspending to ram, and then wound up rebooting when the battery ran out because this is a Dell and after a year the battery lasts about 9 minutes of normal usage and maybe 5 hours of suspend to ram if you're lucky". But saying that it couldn't _find_ the swap file, and failing to delete it if it confirms it's useless... That's sad.
Inflicted the first David Tenant episode on Eric and Cathy. Eric couldn't stand it (full of cheese and cliches, he thought). He liked Christopher Eccleston but is not, so far, at all impressed with David Tenant. Cathy could at least tolerate the cheese to get through to the good episodes. (I didn't make Eric watch the next one because Cassandra + Technozombies is about at the edge of _my_ tolerance. And "Tooth and Claw" isn't really an improvement, to be honest. But we have School Reunion to look forward to, and that's a darn good episode, I think...)
Tried to exhaust my laptop battery and recharge it a few times on the theory "maybe it has battery memory". I note that memtest86 is good for this, it doesn't do a low battery suspend nor does it leave filesystems unmounted or anything like that. Sadly, it doesn't seem to have a notable positive effect. I'm guessing that in my 9 cell battery, maybe 2 of them are still working. This implies one or more of the rest may be leaking lithium. Note to self: do not get laptop wet. This implies I shouldn't feed it after midnight either...
On the train to NYC with Eric and Cathy. We wound up driving to Trenton to pick up the train from there. We learned never to drive to Trenton.
Knetworkmangler remains reliably stupid, with the collusion of things like Konqueror. I'm not on the net right now, but I run a copy of apache on loopback to do things like look at the mercurial archives of my project using the web interface. Trying to talk to http://127.0.0.1/hg/firmware was telling me it couldn't connect, so I wasted several minutes restarting the apache server and looking at its config files and man page. The problem is, I used knetworkmanager to log onto Eric's linksys last night (it's got a wep key, easiest to use the GUI to fiddle with that), and I forgot to kill it. So it was going "you're not connected to the internet through me, therefore there can't POSSIBLY be a server running on the loopback interface."
Dear knetworkmanager developers: you do not understand your problem space.
So, back to adding ALT functionality to FWL so I can test build unstable versions of packages without forking the build scripts. There are actually layers of stuff here:
Figure out a syntax to say which packages to test build. I'm leaning twoards "TEST_PACKAGES=uClibc,linux,toybox".
Teach download.sh about "ALT=url://" so it knows where to get test packages from, and when to download them. (Also not to delete them when playing with the stable version, or to delete the stable version if that's already been downloaded.)
Teach the extract logic which patches to apply to which version. I thought about labeling each patch with the first version number it applies to, but that doesn't say when to _stop_ applying it. I could have "test-uClibc-blah.patch" and teach extract to look for those when applying patches, and then rename those files when checking them in...
Teach the build logic how to handle different build needs for different versions of a package. I'd like to find a less ugly way than a big if statement with a big else case for each package duplicating the entire build logic, but I don't want to get too subtle either...
Good party for Software Freedom Day. Got to stand next to a conversation between Eben Moglen and Eric Raymond, which was about as informative and entertaining as you'd expect. Also met a nice girl from the Wikimedia foundation, who apparently lives in DC and was just up for the party. And some dude who maintains "Electric Sheep", which I really should Google.
We didn't get home until 3am because getting _out_ of New Jersey turned out to be just as difficult as getting into it had been. (The prospect of running out of gas trying to get out of Trenton was not a pleasant one, but we managed to avoid it at some point after the little low gas light came on.) That entire state seems to believe that accurate signage is an admission of weakness. Eventually we found bits of it I was familiar with, which let us get _out_ of it, and there was much rejoicing.
The room bill says $479. I'm _very_ glad I'm not the one paying it.
The Panel was fun. (I totally forgot to talk like a pirate, though.) It was me, Jeremy Allison, Eben Moglen, and Brett Smith. Although to be honest, more than half of it was the audience talking, which is fine with me. (I prefer to learn than to spout. I can hear myself talk any time.) There was apparently panelage on Linux on the Desktop on thursday, which I would have loved to see but there's no way I was asking them to pay for another day's hotel room at NYC rates.
Jeremy Allison of Samba is cool, and about what I expected from a major project lead. He lived up to being Jeremy Allison. It's the other two who surprised me.
Brett Smith is the new FSF license compliance guy. He's younger than I expected, nicer that I expected, and (apparently) far more sane than I expected. This damages my worldview. Not only could I work with this guy, I think I actually like him. To be honest, I'm not entirely sure how to respond to that. Still boggling. (The Mepis thing was done by his predecessor. I asked. He didn't apoligize for it, but didn't know the details off the top of his head either.)
Eben Moglen is smarter than I am, and after the panel he took me to see the SFLC offices (and meet all the other lawyers I've only emailed at before), and then I got to bend his ear for something like 4 hours. I feel positively honored about that. He actually managed to convince me that GPLv3 isn't necessarily the end of the world as we know it, which is... also strange. Need to think about that.
It's now 9pm and I'm sitting in a train station in New Jersey awaiting the train to philadelphia. There's an SFLC party thing tomorrow evening. Dunno if the train trip back is too much time and money to drag Eric and/or Cathy back to NYC. (Yay party, but the vaguely affordable way to get there is 2 hours each direction, and the fast train is something like $100/person round trip.)
Ok, my laptop battery is _damaged_. It's saying a full charge is 16 minutes. I suspect it's got some variant of battery memory, the charging circuitry seems confused.
I have to catch a plane in 6 hours or so, so I can be in New York City for an open source license enforcement panel being held on "talk like a pirate day".
I'm trying to figure out if this qualifies as irony.
Slept through my alarm, but Aaron from the SFLC called to remind me about priviledge, so I didn't sleep through my flight. Just paniced a bit about getting there.
Got on the plane, which took me to Newark. Caught a train to Penn Station (also known as Madison Squard Garden), which is apparently right under the HP building. Unfortunately, the security people at the front of said building (the entrance is next to a giant Border's) wouldn't let me in because I'm not on "the list" today, and Scott Peterson's cell phone is going straight to voicemail. (He's the HP lawyer who put this together.) Found a Starbuck's and used my internet via cell phone thing there, but nobody was online there either. (In theory there's a dinner tonight. In practice, I dunno where it is. Not that I could find my way around NYC anyway.)
Wandered to the hotel room. It's big, and it overlooks times square. Literally, the glowy billboards are out the window and about 15 floors down. (I'm on floor 37.) I'm not sure I want to _know_ how much per night this room is, but I'm very glad I'm not the one paying for it....
Running around doing pre-flight chores. Picked up my charger from mark's. The USB cable isn't in yet so I bought another bluetooth dongle for my phone. (Trying it out now, seems to work. Had to re-associate with my phone, but ok...)
Fade and I went to Mark's place today, to see if he could figure out why we couldn't get the internet through cell phone thing to work with her mac. He noticed that it worked with mer mac attached to _my_ cell phone, but not hers. A half hour on hold to get in touch with tech support later, and their guess is that she has a bad sim card.
I totally do not understand this. How does that work? The sim card tells the phone which number it is, but how does it malfunction in such a way that the phone can make calls, but not use internet access? (It _sort_ of knows which phone it is, but not well enough for the internet? Confusing...)
Argh. Left my power cable over at Mark's. Well, this is going to be a short blog entry. :P
The battery monitor now says how many watts the laptop is eating. (Currently 18.) That's pretty cool...
Can't swim, there's broken glass all around the pool. Sigh. There's a sign saying it's a $500 fine to have glass near the pool, but I dunno why they bother. How do they expect to find out who to fine? (This isn't "something dropped and smashed", this is "glass spread for a dozen feet along an entire side of the pool, almost certainly intentional". It's the kind of thing that makes rooftop mounted snipers seem like a slightly less unreasonable social policy.)
Launching Kaffiene to play a Dr. Who DVD crashed X11, bringing down my desktop. Great fun. (They keep saying have this stuff in userspace has some kind of benefit. The dmesg dump trace blames updatedb.mlocat, which seems unlikely.
Did my first uClibc checkin in a longish time. Just some menuconfig help entries, but it's a start.
Banging on BUILD_SHORT some more.
Hanging out at Zen while doing laundry next door. I have a cold, which combined with my sinus infection means nothing has any taste. Which is sad, I _like_ the food here...
Trying to poke at uClibc from Zen. Their wireless is down, so things like "svn log extra/Configs/Config.in" doesn't work. I simultaneously miss A) my bluetooth dongle enabling internet through cellphone, B) projects that use a real (I.E. distributed) source control system.
My laptop battery has now deteriorated enough that software suspend doesn't get triggered before the abrupt power off that comes when the battery drops below whatever the threshold voltage is. (Meaning if you plug into an outlet that isn't providing power, and don't notice, you have maybe 20 minutes before you lose your work.) That's Dell for you...
So busybox is not building under FWL. It dies in the linker stage, unable to find -lgcc_s. Which is odd, because it's _there_...
Ah, the problem is the gcc argument "-static-libgcc", which the wrapper doesn't know how to parse. It should enable/disable the new libgcc as_needed stuff.
Ok, before I fiddle with the wrapper I need to finish and check in the pending changes in the BUILD_SHORT logic. Eventually I want to turn BUILD_SHORT into the basis for an initramfs build. (A minimal busybox+uClibc system can run quite happily out of initramfs. Add in a dozen megabytes (compressed) for a toolchain: not so much.
There used to be an evil sequencing issue that we needed to install the linux kernel headers before we could build uClibc, and uClibc gets packaged into the initramfs so we need to build it before we build the kernel. The only remotely clean way to deal with this is to setupfor and cleanup the linux kernel package twice, which was painfully expensive.
Luckily, these days setupfor no longer extracts and patches each tarball before each build. Instead it extracts it the first time it's needed into a common build/sources directory and then uses cp -lR to create a bunch of hardlinks to that common source. This makes a second "setupfor" relatively cheap (I switched from symlinks to hard links so now the source cacheing behavior doesn't even use extra inodes).
My itinerary for my trip to the northeast came in, I head out for HP's legal seminar thingy on the 18th and fly back October 2. So I get to see Eric and Cathy (and maybe some family) for a couple weeks, which is nice.
Tried to watch a movie on hulu.com, but the cable modem's gotten so slow the first 14 seconds of the movie took 3 minutes to display. (And it wasn't even in the "high resolution" option.) So I called time warner tech support and got through to a human after only about twenty minutes on hold (and reciting the gettysburg address into the automated phone system until it gave up trying to "help" me).
Their speed test says we're getting a little under 50k/second each way, which is certainly more than I'm actually seeing although that's to their _local_ server and not trying to go out of their WAN to any actual websites. On the actual web, I'm seeing more like 4k/sec, which is dialup speeds. (My cell phone connection gets about 50k/second to actual websites, but I can't use that until I get a new bluetooth dongle or USB cable. I ordered a USB cable at the tmobile place on the drag, but if it takes the week to come in he estimmates, I'll be in the northeast by then. Sadness...)
I explained to the tech support guy how ever since all the students came back on west campus at the start of the month, the cable modem's connection lights are on solid about 3/4 of the time, and whatever's collating them a hop or two up seems to be totally choking. This was, alas, outside his script. So he's scheduled a technician to physically come out on Friday the 19th to frown at our cable modem and magically fix the problem. (Which is the day after I leave.) Oh well, Fade can let the guy in and at least they'll notice if they can't fix it from here and follow up from where the fix needs to be made. (And maybe they can change which channels the cable modem is using or something, who knows...)
My little bluetooth USB dongle seems to oops the kernel a lot. Not a full blown panic, just a stack dump to dmesg and then the bluetooth subsystem is frozen and won't work until I reboot. This makes me sad.
Sometimes it can be fixed by yanking and reinserting the bluetooth dongle. It seems to be software suspend that drives it into an easily confused state. (Specifically, suspend to ram without remembering to yank the bluetooth dongle first. It _really_ doesn't like that.)
I note that suspend to ram now drains the battery a lot faster than it used to, and leaves the USB ports powered during suspend (which seems to eat battery even when nothing's plugged into them). I vaguely recall people talking about trying to leave usb devices mounted across suspends, but that's not a good way to go about it if you ask me...
Still, internet via cell phone otherwise remains highly cool. Fade remains addicted to Spore to the point I've had to go watch her play spore if I want to see her ever since she bought it. (And she estimates another couple weeks of this.)
And now my little bluetooth USB dongle seems to have wandered off. This is sad. I had it around 5am, and I put it in my pocket, went home, slept, biked back to campus... and I don't have it anymore.
It's too bad that the built-in bluetooth in the "everything works with Linux" laptop Dell sold me doesn't work with Linux. The bios insists there's bluetooth, anyway. The kernel simply can't find it, and all Google brings up for this model is other people complaining it doesn't work for them either, no actual solutions. Oh well, that's Dell for you.
I note that btdelconn is still cycling eating an entire CPU, and kill -9 doesn't take it down even though it claims not to be in D state. Sigh. The entire bluetooth subsystem is _fragile_...
Teaching FWL to build experimental versions of packages, so I can check in the uClibc-svn stuff I've been doing. (Yeah, I could do a mercurial branch but I just don't want to go there.)
Hmmm, decisions, decisions. Design issue time: I'm trying to add the minimum possible additional complication for the new functionality. The best way to do this is non-obvious. (Or all the ways I've come up with so far suck, take your pick.)
My first guess was to have variables like UCLIBC_NEXT and LINUX_NEXT indicating whether or not to download and use the new packages. That requires if[] statements in the build scripts (both mini-native.sh and cross-compiler.sh), and also in download.sh. A tricky bit in download.sh is that I want to keep the release version if it's already been downloaded, so I need to "touch -c" the release filename. (There's a cleanup function that deletes everything out of the package directory with a date stamp before the download script started running; this removes old package versions when download.sh is updated. The sha1 confirmation bit touches the file to update its date stamp so it doesn't get deleted if it's something we want to retain.)
But doing the "touch -c" in the download script is an ugly implementation detail that shouldn't be duplicated in each caller. The download script was very simple before it knew about experimental versions, and at least the kernel, uClibc, busybox, and toybox all have experimental versions I should try out regularly. (It would be nice if I could try out new git snapshots nightly to find regressions a lot faster. If so, that needs to be more or less automated.)
I don't really want lots of if clauses duplicating chunks of code if I can avoid it. So, is there some way I can add an extra argument to the existing download calls that says "here's the experimental version", and have download know when to call it? The download function already has all the information it needs to retain the stable version, adding the touch command _inside_ the download function is trivial. The hard part is telling it which of its two behaviors to do this time around.
I don't want to download the experimental version every time, that's a waste of bandwidth and disk space. I don't want to try _every_ experiemental version at once because when several things change at once you don't know which one broke and can't debug it. So it should download the new version only when told. There are both generic and specific experiental URLs (uClibc-snapshot.tar.gz is always the latest, and it's a symlink to uClibc-20080911.tar.gz or some such in the same directory; same for things like http://landley.net/hg/toybox/archive/tip.tar.gz). The specific ones are best for manual testing trying to track down actual known bugs, and the generic "give me the latest version" ones are best for automated regression testing. Except then you want to re-download versions you've already got, so it would need a cleaning step.
Offline for a couple days. No particular reason, it's just not much fun using my laptop on the downstairs couch with neither fan quite pointing at me and four cats competing for my attention, and I didn't work up the initiative to get out much. (Went swimming 5 of the past 6 days, though.) Read several Discworld books (going postal, making money, night watch, now working on Thud!). Watched Fade play a lot of Spore.
Of course the travel arrangements for HP's NYC thing would come in right after the last time I checked my email, with a "please confirm in 24 hours". Oops. My Livejournal and twitter friends lists have scrolled. *shrug*
Ended my tinycc fork. The page explains why.
I realize this is at least my third attempt to end it, but that's not exactly a sign of health in a project, is it? I have too many projects, and I'm focusing in on the ones I actually want to spend time on. (For example, this might free up time to work on uClibc and documentation. If nothing else, I shouldn't feel spread quite so thin.)
Cooked bacon a few days ago. I'm not much of a fan, but Fade likes it, and the internet seems to consider it important, at least when taped to cats. This left me with almost as much grease as finished bacon (I'd forgotten it's big strips of about 90% fat, half of which melts during cooking), and I kept it on the theory there's got to be something useful to do with it.
Today, I used the leftover bacon grease to cook potatoes in. The result tasted remarkably like bacon. What a surprise.
Mips is broken in uClibc svn. Wheee. And the 2.6.26.3 kernel didn't fix the powerpc linking thing.
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.
Ok, this amuses me. I suppose that the modern definition of "liberal" might be someone who watches Bill Moyers interview Keith Olbermann for fun. Twenty years ago it would have been the definition of "intellectual", of course. These days republicans are trying hard to be the Party of Stupid. I'm still annoyed at Obama, but it's nice to see somebody get nominated with a brain, who isn't trying to hide it. (My Mensa membership expired in 1999...)
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.
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.
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...
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.
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...
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...
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...)
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...
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...
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.
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.
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.
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.
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.
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.)
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.
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.)
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.
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.)
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...)
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?
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...)
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...)
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