Older blog entries for ncm (starting at number 439)

31 Dec 2012 (updated 31 Dec 2012 at 08:47 UTC) »

Here is the most satisfying function I have written in years:

int init_iovec_from_circular_buffer(
struct iovec* iov, char* buf, size_t size, size_t tail, size_t head)
int count = 0;
if (head < tail) { // wrapped
iov->iov_base = buf + tail;
iov->iov_len = size - tail;
tail = 0; ++iov; count = 1;
if (tail < head) {
iov->iov_base = buf + tail;
iov->iov_len = head - tail;
return count;
It sets an iovec array to point to the occupied part of a circular buffer, ready to pass to writev(). Pass trivially different values for head and tail, and it sets up iov to pass to readv(). If it can be improved upon, I don't know how.

dmarti: Thank you, as always. The Xiph article was especially enlightening. Mims's article wouldn't load, although I didn't try enabling quantserve's javascript.

But Simon Doonan cannot be trusted. He is in thrall to Camille Paglia, whose metier is rhetorical tricks that rely mainly on confirmation bias. Not everything Paglia writes is false; only (1) what disagrees with people equipped to know better, or (2) what seems gratifying to believe. But that's almost everything.

I have installed Cinnamon, and tried both Cinnamon and Cinnamon2d. Both crash frequently, although I have been able, with a bit of cleverness, to get them restarted without logging out. Right at the moment the 2d one is taking, as reported by top(1), 151% of a CPU to do basically nothing. The autohiding panel flutters like an ingenue's eyelashes. Overall, all I can say in its favor is that it's mostly not so bad as Gnome 3. I will be switching back to Mate, but have become curious about E.

My daughter is learning Russian on her own, using memrise.com. The web page construction is kind of clunky, but wow! Learning a language through to basic fluency in 20-30 hours is very appealing. I may actually get to learn Arabic and Khoisan. Khoisan is the oldest language in the world, spoken mainly in the Kalahari now. Linguists seem to agree, to the extent they can agree at all, that Arabic is the most beautiful to listen to.

It is distinctly possible that I may get to live in my house by Christmas.

27 Nov 2012 (updated 30 Nov 2012 at 10:58 UTC) »

Epson has finally released official Linux CUPS and SANE drivers for its Workforce WF-2540 "all-in-one" printer/scanner gadget: (iscan_2.29.1-5~usb0.1.ltdl7_amd64.deb, iscan-data_1.19.0-1_all.deb, epson-inkjet-printer-201211w_1.0.0-1lsb3.2_amd64.deb). The scanner doesn't work over wifi: the scanner grinds for a bit, SANE reports "I/O Error", and the scanner control panel LEDs flash until you power-cycle. It only works with the (old-style) USB cable plugged in, but then it works well. So, don't bother with their iscan-network-nt_1.1.0-2_amd64.deb unless you want to help them debug it.

It's been many weeks since 32-bit Firefox running on my amd64 Linux last crashed in the cycle-reclaimer. Congratulations to somebody! The 32-bit version is nice because it never leaks beyond 4GB :P.

Aphorisms for posterity:

  • Pavement is real, paint is just an opinion
  • Watching a progress bar does not count as working
  • Archaeologists will note freeway ramps as the signature religious edifices of the 20th century

Here's the best idea I've seen in a long time:


There are similar petitions for a bunch of other states, but Texas has more signatures than all the others combined. I'm not Texan, but I signed. The funny thing is, Texas, uniquely, is legally allowed to secede with no say-so from anybody outside Texas. That was one of the conditions Congress agreed to when it took Texas in. Texas controls 36 House seats. Let them take Oklahoma with them, and that's 41 House and 4 Senate seats.

The best thing is, they would immediately declare war.

4 Nov 2012 (updated 4 Nov 2012 at 19:45 UTC) »

I just brought home an "Epson WorkForce WF-2540" "all-in-one" printer/scanner to use via wifi from various Linux and Android machines in the house. Unfortunately, since Apple gave CUPS the heave-ho, specs in CUPS from manufacturers for new printers seem to be lagging. After extended experimentation (misled by anti-clues in macosix drivers), I find that telling CUPs you have an Epson "Workforce WF-845" seems to work OK. This probably is true for the new WF-2530 as well. This seems like a pretty mature device. It has a USB "device" socket and an RJ45 ethernet socket for if you don't have wifi, and a USB host connector, apparently for talking to your camera or USB memory stick. I haven't tried those, or the scanner.

This being the eve of the election, there's just one thing I'd like to hear at a debate: "If you have to lie to make your case, what does that say about your case?"

The best deal on a webcam/mic I've found lately is a "Gear Head" WC740I (or just maybe WC7401) "Plug-n-Play 1.3 MP WebCam for PC" for $15. It worked immediately when I plugged it in, using the standard UVC driver, no fooling around. I don't know how common this is, but it has a mirror ring around the lens so you can tell if it's pointed at you.

12 Sep 2012 (updated 12 Sep 2012 at 02:21 UTC) »

This is the time of year when we in the United States of America look back to the day that our nation, in response to a provocation by a loose-knit, scattered band of thugs, declared before the world its abject cowardice. The thugs destroyed a few airplanes and buildings and killed their occupants. The US response was to kill many more than that number of its own servicemen and -women, and hundreds of times as many entirely innocent civilians and their families.

Our nation followed up by creating an institution devoted to torturing people, innocent and guilty alike, by the thousands, and shielding the torturers from the law; a domestic surveillance system that is the envy of our former enemies; a legal apparatus that negates those constitutional freedoms our ancestors had won; and legions of secret police who eagerly imitate the crimes of those former enemies.

The lasting legacy of this cowardly response is a multi-trillion-dollar debt, a renewed and re-invigorated hostility from citizens of civilized countries, a fully equipped national police-state apparatus, and a cowed, deluded citizenry. The sad joke is that the star-spangled banner does yet wave, but o'er a land neither of the free, nor the brave.

Emacs24 vs. GDB fail

I upgraded to Emacs 24, and interaction with GDB 7.4 (in "gud" mode) failed. It seems to be fixed after I enter "set interactive-mode on" in gdb. (It took an unusually long time to find that.) There doesn't seem to be a command-line flag for it. I don't see an obvious way to get emacs to feed it that command line, without hacking. I suppose I could put it in a gdb startup script, conditional on "mi" mode, but I'd rather they just fix it.

Isn't Btrfs ("butterfish") supposed to be close to ready for serious use? I had to drop it because I was getting kernel oopses for very workaday disk writes.

I have been buying used Thinkpads on craigslist.net. Experiences have been mixed, but thinkpads are very fixable. A friend has a service collecting scrap metal and hates to melt down equipment that people need the way it is -- big electric motors, stainless-steel fixtures, collectible rarities, but he hasn't had any way for those people who need the stuff to tell him so. I got a laptop and set it up for him so he can put the stuff on craigslist and, eventually, ebay, and quadruple his income. I've been pleasantly surprised at how well a Wheezy install handles his bluetooth phone/camera, and wifi, and a Sony camera via USB. It's funny, though, how a six-year-old ATI radeon "gallium" X1300 is only just getting 3D acceleration support in the 3.4 kernel.

As part of a new wave of setting up laptops for newbies, I have been exposed to Gnome 3. Thank <deity> for Mate and Cinnamon. (Sorry, Xfce, I tried hard to like you.) The Gnome crew could have avoided all the unpleasantness by forking, themselves, and handing off Gnome 2 to a responsible party. On the other hand, if they had the good sense to do that, they might have had the good sense not to ruin Gnome in the first place, and then the fork might not have been needed at all.

I saw that "liberal vs. conservative software engineering" rant. It's BS. We use loose languages for small, short-lived, ill-specified, performance-insensitive, non-critical and/or one-maintainer projects -- i.e., nearly all projects. We use strict languages and processes for "the rest", the 1% that demand serious engineering, and as much attention as the rest combined. An engineer moves freely between those spheres, using a loose language where it suffices. What that guy calls "liberal programmers" are just people who gravitate to the former, and like to imagine that it constitutes all projects. Maintaining a project that should have been seriously engineered because it ranks among "the rest", but wasn't, is a special hell that I almost wish on that guy.

I got Minecraft working on my son's Debian setup. It was annoyingly but very familiarly niggly, like all Java programs: I had to use Oracle's own JRE, none other would do. I might get some "mods" working, one of these weeks.

The Seagate in my two-year-old laptop began making terrifying cries and grinding noises this weekend. Luckily, it settled down long enough to image.

3 Jun 2012 (updated 3 Jun 2012 at 17:30 UTC) »

Congratulations to Chris Granger on his successful Light Table IDE Kickstarter project proposal. It is inspirational. I find myself inordinately pleased that he didn't call it LightTable.

Unfortunately, it does not appear that it will be very useful for me or for people like me, programming in type-enabled languages like C++ and (one can hope) Clay, or even C, any time soon. Furthermore, the Java-world heritage implies a tolerance for the slow and stupid (e.g. Eclipse). There ought to be room for a complementary project tuned for those of us working with C++. To that end, I have registered luxmensa.org. (I suffer a fond delusion that Latin-geeks will admire the attempted pun.) The name is meant to imply a spin of the Light Table idea for Real Programmers. I'll hand the name over to anybody who can use it better than I can.

The problem, of course, is that your typical IDE is intolerable for anybody serious about working on code. Tiled windows? Mouse-based editing? Please. We need interaction with shell pipes, embedded editors including real emacs and vim, a deep awareness of git semantics, maybe auto-generating and auto-running of tests and micro-benchmarks of code fragments during editing. The useful features are those that make hard things easier, not those that make easy things mindless, or that automate what would best not be done at all.

Firefox still crashes regularly, but now less predictably. I sometimes wonder if it is AdBlock or NoScript that is responsible for the worst leaks, but I recover my wits quickly.

24 Apr 2012 (updated 24 Apr 2012 at 10:18 UTC) »

I have been running Gnome since 1998. In response to a need for a current version of Libreoffice, of all things, I finally "upgraded" to Gnome 3, and immediately switched over to Xfce. The result has not been entirely satisfactory. Loss of emacs edit key bindings turned out to be fixable with a cheesy bash command. I'm not yet certain that middle-button emulation will be as easy to restore -- I'll have to restart X to find out. The Gnome battery-condition indicator was better than Xfce's, and I miss Gnome 2's performance-graph panel applet. I'm half-tempted to give Gnome "fallback mode" a try, but then I remind myself Gnome can only get worse, while Xfce might actually get better. And who knows? I have yet to try Lxde, E17, and KDE. This feels a lot like the old days.

Firefox still crashes weekly when quiescent, most typically in GC cycle detection. I tried running with ulimit 2G, and it crashed immediately. With 3G it runs for a day or two. It's hard for me to contemplate how absurd this is.

The first functional language that does not depend on GC might well take over the world

8 Feb 2012 (updated 8 Feb 2012 at 11:54 UTC) »

I thought the potentially very interesting Clay language was dead when its web site and mailing list disappeared, but in fact it just moved. It turns out, in the meantime, that they have just released a version 0.1 compiler, a front end for llvm.

When Magellan got to Tierra del Fuego at the southern tip of South America, the people he found there wore no clothes, and would lie down on a snowbank to sleep. If they could do it, why can't we? The answer, as usual, is practice. I determined to raise my base metabolic rate, initially by sleeping with one arm out on top of the blankets. In an astonishingly short time -- a couple of months -- I was finding any sort of blanket too hot, and now a sheet is plenty cozy at 60°F/15°C/298K. I still have a way to go before sleeping in a snowbank, but I have not needed a coat this winter.

Upgraded to firefox 10. Now it crashes unattended, again. 8 and before usually crashed in GC cycle detection. 9 didn't crash unattended, but crashed in regular use, somewhat less often. Now, the 10 crashes seem to have something to do with timer expiration. (Recall this is 32-bit ff running on 64-bit linux.) Maybe now it's just not fooling around for as long after it's gone corrupt. I count this as progress. [I spoke too soon. It crashes attended, too, and in the cycle collector; this time after barely 16 hours running; VSZ 3359988, RSS 2457468.]

430 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!