An advent calendar for nerds
By popular request: a postscript hack to produce a four-fours advent calendar.
Each of 24 printed pages bears a label such as 4+4/4-4
or
4+4*4+4
. Print, fold e.g. as shown below, insert pralines, (more…)
By popular request: a postscript hack to produce a four-fours advent calendar.
Each of 24 printed pages bears a label such as 4+4/4-4
or
4+4*4+4
. Print, fold e.g. as shown below, insert pralines, (more…)
So just now, as I was writing up the advent calendar a door-to-door salesman came asking whether I might want to purchase lovely phone and internet connectivity from Telekom.
Now I need to vent.
I was a Telekom customer for years. Not very happy, but also not unhappy and changes seemed risky. So when I needed more bandwidth, early in July 2009, I ordered an upgrade. (more…)
The text we've all learned to read is arranged in lines: Horizontal baseline, regularly sized letters, regular line height, lines neither too narrow nor too wide.
Anyone who breaks those rules disturbs the mind's reading and distracts from the content. Minor violations cause minor disturbance.
Which is fine, I suppose. Ask any advertising agency. If you violate the right norm you can make the brain sit up and take notice of a message it would otherwise skip. Drink Coca-Cola. But it's not something a GUI program should do. GUI programs should form the thinnest possible barrier between user and data. (more…)
I've wanted more RAM and a third monitor for a while. Upgrade time. I hate upgrading hardware, it's the worst of chores.
The new hardware is a Zotac Fusion ITX A motherboard including a Radeon 6310 graphics blah, a passive Radeon HD5450 graphics card (actually a 5430 chip), and the rest is from from the previous libertango: (more…)
The short version: Mikrotik RouterOS doesn't support multiple, redundantly configured IPsec links. Amazon's cloud services use just that. Pain ensues. I haven't found any workaround I really like.
The long version: (more…)
Computers are good. More computers are better. But more keyboards are not. Swapping keyboards all the time was how I first ruined my wrists, almost twenty years ago.
That's why now, with a Mac Mini under and a linux box near my working desk, I definitely don't want to use two keyboards. One is the right number, and Synergy is the way to share keyboard and mouse. (more…)
The Silverlight streaming has a tendency to pick a very low frame rate on some hosts, particularly on the Macintosh. Microsoft has promised a fix in Silverlight 5, but that doesn't help now.
The workaround is to disable WindowSizeHeuristicsEnabled in the player configuration file. Of course that may have negative consequences.
My neighbour is putting up another concrete building and I don't like noise.
For the past few days I've used a Nuforce μDAC-2 together with Bose QC15 headphones. I tried the QC15s alone, but they don't suppress the construction noise very well on their own. They do better when fed music.
The μDAC-2 does well. It's not exactly highend (for context: I think Musical Fidelity makes highend gear, and I consider most Bose devices to be overpriced beep-beep gadgets). But it also doesn't offend me like most computer audio gadgets. It's pleasant, and allows me to work in complete disregard of the $#$@# concrete mixers. Well worth the price.
Consider the function Message::acceptableBoundary(). That function's reading order is exactly the same as the its execution order. This is not unusual in C and C++ (and more or less in Java), but there is a significant exception, for(). (more…)
I quote at length from chapter four of Jef Raskin's book The humane interface:
We have looked at two interfaces, one of which will take about 5 seconds to operate and the other of which will take more than 15 seconds. [...] It is clear which of the two better satisfies the requirement. The next question that we ask is how fast an interface [...] can be. (more…)
Mikrotik RouterOS doesn't have a tcpdump command. It has solutions for most/all of the problems I like to solve with tcpdump, though. (more…)
This week, another thousand bloggers explain that patents are bad because they're used to harass, etc.
Noone seems to understand that for software patents to be meet their stated aims, it must be possible for programmers to learn something by searching for, finding and reading the relevant patent.
Wikipedia defines patents as a set of exclusive rights granted [...] to an inventor [...] in exchange for the public disclosure of an invention.
That public disclosure isn't happening now: software patents aren't
understandable to software developers, so the rights are granted in
exchange for effectively nothing.
Wikipedia goes on to say the same thing again in different words:
The word patent originates from the Latin patere, which means
.
to lay open
(i.e., to make available for public inspection)
Avoiding harassment is a start, but it's not enough. Patere necesse est.
Update: Two corollaries, obvious IMO, but... There must be something in each patent that's worth learning. Restating textbooks isn't enough. And each patent must be such that it's practically possible to work without infringing/licensing it.
Lawnmowers may be classified according to noise, speed, price, reliability, durability and so on. I don't have a lawn, so all I really care about is how loud the superintendents near me are, and for how long. (more…)
I'm throwing away old books. The room with all the old bookshelves is getting a new life, and in the process of moving the books to the new shelves in a different room, some books… don't come along.
One such is Beautiful code
, an anthology to support
Amnesty International. I bought
it for one chapter, Code in motion
, in which Christopher
Seiwald and Laura Wingerd elaborate on Christopher's earlier
Seven pillars of pretty code
(go read it, it's good).
I want to throw the book away. The other chapters are just so much filler. But I can't bring myself to throw away the figures on pages 534 and 535, those are too valuable. Must have those.
Some of the code I've written since 1992 (when my first significant contribution was accepted into an open source project) is still there, bits of it heavily used. The parts of my code that goes on working without much change shares one characteristic: It reads clearly and easily. It's well-documented, well-commented and there's hardly any nesting.
I spy a causal relationship: Truth is beauty, beauty is truth.
This post describes how I configure IPsec tunnels between Mikrotik routers and VPCs (virtual private clouds) hosted at Amazon AWS. (more…)
Some Java book I read long ago, I think it was Thinking in Java, explains that one of the benefits of Java exceptions is that you can shift error handling away from the normal path, leaving the implementation of the common case clearer and better.
Fine. There's just one catch: You have to catch the exceptions and handle the error somewhere. (more…)
The Amazon Prime game is an odd kind of game: The players are Amazon and myself, but the winner is usually either DHL or UPS.
The rules are as follows: (more…)
I have a new bicycle. A marvellous new bicycle. It has front and back lights that work well enough to not annoy me, a gear shift that's just as good (as well it should be) and brakes that stop me when I want to stop, even when I'm pedalling 160kg.
Why is this marvellous?
But the true wonder is the manuals. (more…)
Leaving the offices of customer.com today, I pressed the button half a dozen times. (For some reason, customer.com's planners thought it best to litter the offices with giant TVs, most turned on, all muted. There's a corporate espresso bar with seventeen corporate television sets. Really makes one wonder.) Walking to the hotel, I pressed the button a few more times.
Just as I was entering, I saw one last TV, reached for my tv-b-gone and... nothing. An employee had turned the TV off as part of closing for the day.
I'm not sure how I feel. Puzzled to have seen someone turn a television set off. Happy to have seen it happen. And somehow cheated.
Update: What a pity the TV-b-gone is too slow for drive-by actionism.
Wrote colleague A to colleague B: With all due respect,
suggesting anything other than an IDE today for coding is not
reasonable. IntelliJ IDEA, Eclipse, NetBeans, whatever. Still running
circles around your stone-tablet-tech editors ;) So, I don't
understand why you would want anything less.
But B could suggest anything other, and wanted less, and he's one of the two best programmers on the team, too.
A, hm, a lively discussion ensued. What I learned: (more…)
What Amazon wrote:
We have noticed that one or more of your instances are running on a host degraded due to hardware failure. [...]
The host needs to undergo maintenance and will be taken down [...]
What Amazon might have written:
Thought you were clever, eh? Running that fancy Cassandra cluster? I bet you didn't expect your redundant copies on several Cassandra nodes to really be stored on the same crummy drive. (more…)
We have two access points at home, and wireless clients can roam freely, keeping their IP address.
Most clients can. Android phones and tables could not. For example, if a Motorola Xoom (Android 3.0) was in range of both APs, then it would switch to the other AP every 3-4 seconds.
The problem was that one AP was set to support only 802.11g, while the other was set to support b/g. Setting both to G-only solved the problem. The Xoom now connects quickly and keeps its connection (so long as it remains still at least).
Jira is what I'm supposed to look at in the morning. It tells me what's urgent. What I should fix. It's almost never anything I really want to do. I want to write code. Something that's challenging, with a useful result.
Telling me to open a web browser is not a good way to make me perform chores. Sorry.
All bug trackers suck. That's why Abhijit and I really don't want to use one for aox.
Here's what we do instead. It's subtle.
There's a notes file in the version-controlled source tree. The only way to add to a note (ie. file a bug) is to make us do it. There are some scripts that look at the file. (more…)
Snippets is a jabber/xmpp bot that periodically asks each team member
what are you doing?
and collects the answers on a web page.
(more…)
After a few years of service, my ReadyNAS NV+ broke one day. The hardware was fine, but the software had painted itself into a corner and didn't want to boot at all.
Googling showed that lots of other people have been bitten by the
same bug. I phoned support. The support person told me that my box was
out of warranty, and would I please post to a web forum and I'm
sure someone will help you
. I could tell from his voice that he
didn't really believe that.
I eventually moved the drives to a linux box. LVM (on ubuntu 10.04) recognised the drives automagically and ext3 let me mount the file system, so I bought a new Synology NAS and copied the data to it.
When I did a factory reinstallation (the hard way) the ReadyNAS booted without problems. From now on I'll use it to back up other devices, nothing more.
A neighbour is noisily tearing down one of its office blocks. I'm sure a new unpretty office block will then be noisily built in its stead, so I bought a Bose QC15 to work in peace meanwhile.
Summary review: It handles the construction-related noise well, but it does really badly with respect to human noises such as a telephone conversation or a crying baby.
Both of the employees I spoke to in the Bose shop here in Munich were sloppy, arrogant and ignorant. Not a good combination. I walked out, and bought the headphones elsewhere.
One really good thing I learnt from working with Abhijit on Archiveopteryx is how to get quickly into the flow. Click, flow.
The basic pattern involves a good kind of task, and a good way to get to it. Both parts are vital. (more…)
Blog posting number one, from a typical silver bullet merchant (more…)
It's debian. apt-get install works. But they removed some files without telling dpkg, and edited some, too.
For example, they removed the man pages. Why? It's a NAS: Disk is the one resource it has in abundance, and the man pages aren't even big.
Foo.
When my previous printer ran low on toner, I bought a new printer. Billing is critical. A Brother MFC-8880DN, which I already know from setting it up for someone else.
It's a decent network printer. Notable positive aspects: It can scan in colour (even though it's nominally a monochrome printer). (more…)
A fine cocktail, supposedly F. Scott Fitzgerald's favourite, and key to a fine scene in Sweet Thursday. Such a shame that it's mostly forgotten nowadays. (more…)
My previous laptop (a Lifebook P7210) grew bad-tempered. Investigate or replace? Stupid question considering how much netbooks cost.
My new laptop is a Nokia Booklet 3G, a moderately expensive netbook with good battery lifetime, a 3G modem, a high-resolution screen and no fan. Ubuntu 10.10 runs well (more…)
jam -g is the best make system I've ever used. Best for the simple reason that when the build fails, it usually fails quickly. I start the build, and a second later I'm already looking at my mistake. That feature outweighs any and all drawbacks.
Sadly, I don't use jam very often at the moment. I mostly use maven 2, which starts the build by determining from first principles which source files to use and which libraries to download. In practice the set needed hasn't changed in the past minutes, (more…)
So
Paul Allen sues over patents
and I'm sure he'll attract a lot of flak for that. But a side issue
interests me particularly:
The patents were originally awarded to Interval Research, a tech
R&D firm founded by Allen and former Xerox executive David Liddle in
1992. The firm was folded in 2000, and the patents were later
transferred to Interval Licensing.
(more…)
Short version: Samsung Kies (Samsung's own program for backing up and upgrading Samsung phones) bricked my Galaxy S while upgrading it. Combining Heimdall with some recipes from other blogs allowed me to save the device.
Long version: (more…)
One of my not very frequently used possessions is a large laptop bag. Big enough for two laptops and some random other items, or for one laptop, a change of clothes, random chargers and whatnot, and a book. (more…)
Three million web forum postings contain wrong, misguided or overly complex solutions, so here:
When ubuntu complains WARNING: untrusted versions of the
following packages will be installed
, that's because of bad data
in the keyring for ubuntu packages, which is part of the package
ubuntu-keyring. (more…)
I've had the 4828 for half a year, and have had several bad experiences.
I have crashed the printer twice. Once by printing the guice guide using chromium and once by printing a book-length ΤΕΧ (dvips) document, mostly text with some tables and figures.
The copier is really, really bad at copying grey-on-white or green-on-white text. (more…)
Earlier this year Hari K. Prasad and others got hold of an Indian election machine and proved beyond doubt that they can be manipulated. I wrote a long, angry blog post, which I forgot to post. Now I post it, edited to be a less angry and with an added link.
Indian election machines don't suck. They're a great design for Indian elections. The attacks on them (bad seals, etc) also worked against the previous paper-based system. (more…)
Nice. Very nice.
It's solid, doesn't move around on the desk, the keys feel clear without any jarring click, (more…)
A public service announcement: Upon learning that
Dave Cridland describes
identi.ca as a snark broadcast facility
and claims to
use it that way,
too, I have decided that when I cannot
repress my snarkiness, letting it out at
identi.ca/arnt is acceptable.
Maybe even good. rant.g/rant has helped me regain calmness more than once.
I recently purchased a few bottles of arak from the duty-free shop at Dubai airport. They had Al-Zumot, Golden Eagle, Al-Massaya and two varieties of Brun. (more…)
A little bit of 3G first: A 3G connection is in one of several modes, ranging from PCH (which uses hardly any power and can't transfer payload data) to DCH (which uses much power and is used for bulk transfers).
The way Archiveopteryx handles IMAP, POP and SMTP is very battery-friendly. (more…)
I am sitting in Madikeri, Karnataka, India, a nice small town in the middle of picturesque forests and hills. Regrettably, the beauty of the scenery is not matched by the quality of the area's GPRS coverage. (more…)
Sometimes people don't want to provide arguments (for something that may be right, wrong, or arguable). In that case, what can be better than to quote something famously true, such as Dijkstra's Goto Considered Harmful, and hope that the truth rubs off? (more…)
The normal linux pptpd will talk to the normal Android PPTP client, but brokenly by default. The magic (more…)
No it doesn't. Used well, the exception shows the
rule. Smoking is permitted in the ground-floor foyer.
Used more
typically, it's just another vacuous rhetorical device that may or may
not fool the reader.
The Telly Terminate is a small keyring gadget to turn TVs off. It appears to have sold well during the recent sports event.
Pro: It turns TVs off. (more…)
Some fonts have already been updated to include ẞ, including the ones I generally use (on ubuntu 10.04). Lovely.
Stronger: I have two desks, and both are now reasonably tidy.
I've had a tidy desk before, such as when I moved to a new office in 1998, but this time no force majeure is involved. I tidied my desks, and kept at it until I was done. Three days.
I congratulate myself. My mother would, too, if I were to tell her.
Once upon a time, Norwegian residents could apply for a personal .priv.no domain by sending email to the hostmaster. I did so.
Times have changed, registrars and proper procedures now complexicate such things. Still, those who have .priv.no domains can keep them, (more…)
For the last couple of months I've been using a program written in one of the fashionably brief languages, Ruby. I've had to read the source on more than one occasion.
On one hand, the source is very brief. It does get a lot done with very few lines of code. (more…)
People keep saying blah about how IPv4 can go on even if there are no free addresses, they'll just be traded on a free market.
So. I don't think so.
Either, the blocks to be traded will primarily be large (the kind commonly routed today), or primarily be small (the kind commonly handed to end-users). I'll argue each separately. (more…)
Writing about Knuth's literate programming book reminded me about when I met him (at a conference) and asked why the following algorithm wasn't in TAOCP. He grasped the algorithm from a ten-second description, and said it wasn't there because he didn't know about it. Good reason.
My TA at university (when I invented it for an exercise) wasn't aware of it either, but unlike Knuth, my TA didn't understand it. And I hadn't commented the code at all. Sigh.
Here are some words in sorted order: (more…)
read errors
If AnyDVD pops up a big warning dialog about read errors (suggesting a region-free fimware from rpc1.com, cleaning the DVD, etc), and you're using it inside Virtualbox, then the correct solution is: (more…)
I need to use Puppet, a system to configure linux boxes (add the right users, install and configure the right services, make sure the right things are running and the wrong things not). Puppet seems good, better than cfengine.
So I read the existing configuration, which seemed to make sense but left a lot of open questions, read the the documentation, felt little wiser, and bought a book (Pulling strings with Puppet by James Turnbull) and (more…)
Last year I bought a phone for Abhijit, who prefers something small and simple and couldn't find it. I could, at €17, so I ordered one and sent it to him, and have been spammed ever since. Not a problem, I can reject mail faster than (more…)
I have a Samsung SCX-4828FN printer/fax/copier/scanner, and use it with linux and BSD. (Update: I've a follow-up posting about the printer.)
The printer is fine for black and white text, such as I usually print: Fast, crisp text with fine edges, nicely readable. Duplex printing just works. The printer can print quite close to the paper's edge, too. (more…)
Back in 2008, the Bundestag passed a law which may make network owners responsible for certain acts performed using their network, and does limit their responsibility to €100 or the plaintiff's legal costs, whichever is lower. A year or two later, the music industry sued a network owner, (more…)
I need to reconfigure a device via its serial console; the device emits many ANSI/VT escape sequences and other control codes. These are perhaps helpful if one is typing, but not so helpful when a script is to reset and reconfigure the device.
The following perl s/// magic gets rid of most (but not all) escape codes. (more…)
I have a feeling that most (all?) parser generators are written with one overwhelming goal: Parse fast/well when the grammar and input are both correct. (more…)
Github thinks aox is 83% PHP. That is even more of an insult than its previous supposition. 60% C might have been misleading, but that error was understandable (it thought cryptlib was part of aox). 83% PHP is just insulting.
Ohloh also smokes the good stuff: Archiveopteryx is GPL'd, thank you so much.
WD Caviar Green disks (WD15EADS-00S2B0 in my case) like to unload the drive heads to save power. The ReadyNAS likes to load them again. This causes two problems: Frequent eight-second delays as the drive heads move away from the platters and then back towards them, and in my case, the drives would reach their stated lifetime (300,000 load cycles) in less than a year.
Several solutions exist. (more…)
The icon was drawn by
Brodd Nesset,
based on exactly two sentences about what I wanted.
I like it very much; it represents exactly what I want it to
represent, and in a manner which represents me. Very grateful.
Finally there's a C++ compiler that makes a reasonable attempt at emitting helpful error messages.
Bjarne Stroustrup may have sins to answer for, (more…)
The earlier posts on git and perforce sound as if I'd rather use perforce than git. True in a way. Perforce rocks. It's practically bug-free, for a start — after more than a decade of use I can only remember one bug (using one variant of p4 obliterate made p4 diff report the wrong diff).
But rocking bug-freely isn't enough. (more…)
Archiveopteryx often needs to massage incoming mail to make it syntactically valid. 99% may be valid, but 1% is still a lot. One of the chores is to guess how a message is encoded — unicode, ISO-8859-x or what? For that Archiveopteryx uses a novel and good algorithm. (more…)
Sad to say, but I recently installed ubuntu 9.10 (karmic koala) on a Fujitsu Siemens Lifebook S4572. I installed the minimal system followed by xubuntu-desktop and gcompris: xfce is supposed to be better for small boxes and gcompris is the whole point. (more…)
The inverted pyramid is how journalists are taught to write typical
news stories. It puts the most newsworthy information at the top,
and then the remaining information follows in order of importance,
with the least important at the bottom.
(The quote is from
Chip Scanlan.)
This is the right way to write most API documentation. (more…)
Another finding-my-thoughts posting. Documenting helps fix bugs early, but what are its companion techniques?
Polishing the code all the time. Make it look good. Beauty is truth, truth is beauty. (more…)
LWN ran an article on Archiveopteryx. Some points.
It's BSD-licensed, not OSL-licensed. It was OSL-licensed until last year.
One commenter opined that we might not have tested big mailboxes. Well, we have. Not sure exactly how big. We've routinely tested up to a million, bigger occasionally. At a million it's quite simple: Most mail readers fall over. (more…)
Written with doxygen. It's funny to see how early qdoc syntax is still there. Features I added because they seemed to make sense, then discarded later, when I saw they didn't carry their load.
And there they are, still in use. Maybe funny isn't the right word.
The Popcorn Hour A-110 is a small silent box that can play ISOs and other movies scaled up to 1920×1080 resolution. We have one, diskless, connected to our NAS via gigabit ethernet, (more…)
I hate it when different, independent computers all send me mail from my close friend Charlie Root. Here's an aox hack to ease the pain. (more…)
Archiveopteryx 3.1.3 is done. Finally the unending series of bugs stopped disturbing the server, and the server started running reliably, and recover from problems the way it's meant to. (more…)
What else I miss:
Change numbers: Perforce's mothership issues change numbers. Sequentially increasing, fairly small numbers. Six digits sometimes, but really fairly small, since only the last 3-4 digits tend to matter at any time.
I like the change numbers. (more…)
Received, etc.
Summary: Archiveopteryx is loyal to its users, right or wrong. (more…)
If my Benq M108 mouse is plugged into the USB hub of my Eizo S2100 monitor while linux 2.6.31 (and several others) boots on my Zotac ION-ITX-B motherboard, then the kernel freezes after this line:
[ 0.828204] io scheduler cfq registered (default)
Numlock does nothing, I need to press the any key.
If I unplug the mouse from the hub, or the hub from the PC, then the boot succeeds. (more…)
I enable IPv4. Temporarily at least. (more…)
I still do not understand why Archiveopteryx runs stably in some places and crashes every few hours or days in others.
It's just just a question of platform-specific bugs. We've seen it too many times: A bug hits some people, not others, for reasons I do not understand even after fixing the bug. As a result, some people see aox working really well, others really badly, and I have no way to explain why this is so, and see no pattern I could use to improve testing or avoid these bugs.
It's very frustrating.
One of udoc's problems is that its error messages arrive towards the end of the build process. Often, when fifteen executables are being built, I wait for the interesting one to be finished and immediately switch to testing it. Later on udoc delivers some useful error messages, but I'm not looking any more. (more…)
If you can read this sentence, you have IPv6 support, either directly or via a web proxy. (Update: no, I added IPv4 access to the blog.) (more…)
That's good, because posting this on my birthday would be a little boorish.
I'm sitting in my office, pondering whether my location is best
described as an office, an office, an office or perhaps
(overwhelmingly correct) an office. I think I like
room
. Simple words are so… unruffling.
Javadoc is built in to Java, but I think they botched it. It's
clear that they didn't care deeply:
JLS3 grammar
doesn't mention javadoc at all, and the
JLS doesn't
specify it, hardly even mentions it… the word stepchild
sounds more appropriate than does builtin
, in my oh-so-humble
opinion.
There are many things I don't like about the result, and few things I do like.
There's too much typing for not enough benefit. (more…)
Archiveopteryx uses OpenSSL by default starting with version 3.1.3. Sadly, it runs noticeably better than with Cryptlib.
Compatibility with other TLS stacks is clearly better. (more…)
A sentence:
Amazon, a big Net Neutrality advocate has come around to
acknowledge the fact that it is reasonable for broadband service
providers to sell premium service to broadband subscribers or content
providers.
A question: Does the fact that
ever mean anything other than
in my opinion
?
I bought a ReadyNAS NV+ years ago, and don't like it. It serves files, but does so many things badly that next time I want to add more disk space, I intend to purchase something else. (more…)
Bad news: Opera lost IPv6 ability in version 10.10. Opera cannot connect to this site, even if it's running on a host with IPv6 ability.
No news: The search engines still don't support IPv6. The (other) browsers still support IPv6.
Good news: Today I saw a torrent swarm with more than 20% IPv6 peers. Not a special swarm in any way: I download my old LPs whenever I play them, so I'll be able to play them in the kitchen or office too next time. It was the torrent swarm for one of them.
Here's what I did to get a sensibly large character repertoire for my keyboard, using ubuntu 9.10.
First, read any of the fine explanations of the compose key and configure some suitable key.
Next, explain to ubuntu that you do wish to XIM:
im-switch -s default-xim
By this time, X applications will read your ~/.XCompose file when they start, so set it up. There's a large repertoire on github:
cd ~/src git clone git://github.com/leoboiko/pointless-xcompose.git
Here's my ~/.XCompose (more…)
Another browser test (I'm looking at you, android). These signs are mostly ones I've used in 2008-9 (with some added for symmetry etc.), and I do not think they are too odd to be worth rendering.
Signs:
| ☐ | Feature not supported (U+2610) |
| ☑ | Feature supported! (U+2611) |
| ☒ | Feature supported! (U+2612) |
| ✓ | Check mark (U+2713) |
| ✔ | Heavy check mark (U+2714) |
| ✕ | Multiplication x (U+2715) |
| ✖ | Heavy multiplication x (U+2716) |
| ✗ | Ballot x (U+2717) |
| ✘ | Heavy ballot x (U+2718) |
| ☏ | Telephone (U+260f) |
| ☎ | Telephone (U+260e) |
| ☮ | Peace (U+262e) |
Arrows and that kind of thing: (more…)
There are four things I dislike about the GPL. In no particular order:
Its bad writing causes flame wars. So there are flame wars about the concept, that's OK, but there are also flame wars about what the GPL says, and that's simply inacceptable. Writing clear prose isn't that difficult.
I do not want to spend a single hour in the rest of my life arguing about what the GPL says and doesn't say. I do not want any more mail from advokids with (more…)
When you sync in perforce, it updates the files you're not editing to the latest revision, and leaves the ones you're editing untouched. Git fetch, by contrast, updates everything that's changed.
Perforce's behaviour requires that client state cannot be expressed as a simple change number. Some files may be synced to change 5522, others to 5525. A git tree is always at a particular change, plus a local diff.
The cost of that simplicity is that git fetch ties p4 sync and p4 merge. If you want to pull unrelated changes into your tree and there are conflicts with your current work, then you have to deal with those conflicts immediately. p4 sync is low-risk, git fetch risks interrupting your train of thought with a merge.
When you open a file for writing in perforce, it checks whether anyone else is working on the same file, and tells you who, if someone is.
This is a fine feature. It warns you if there was a
misunderstanding and someone else is already doing what you're about
to start doing, and it warns you if someone else has forgotten to
commit a change. The price for that is that the perforce server has to
know who has the file open for writing, and that when you see that
message x is also editing y
, you have to talk to
x about whether your work conflicts.
Git has nothing like a perforce server, so no place to check for such approaching conflicts.
Zotac ION ITX B motherboard, Silverstone SG05 case, Scythe Slip Stream 120mm fan, Be Quiet SFX power supply, SSD. (more…)
Archiveopteryx uses Cryptlib. Still. It's good code, and Abhijit and I trust Peter. Almost everyone else on the planet uses OpenSSL. A few outcasts use something that shares code with OpenSSL, such as GnuTLS or SSLeay (why do these people all have a MiXEDcaps fetish?), and there's an even smaller lot that uses cryptlib, matrixssl etc.
Naturally, there are interoperability issues. There always are, (more…)
Every programmer has bad days. Days on which no code wants to be written, days spent tinkering with the CSS of a blog noone reads, or posting something to said blog.
Every programmer can do that. It takes a very special kind to
☑ finish a
long posting on a
subject which interests noone
☑ post it to a blog which noone can read, due to the sad
state of IPv6
☑ tinker with the CSS of that blog
☑ — using
CSS3 text-justify,
which no browsers support
☑ and finally to reconfigure the blog
to withstand
heavy load, as if IPv6 deployment were to happen before 2011.
All on one day.
The four major output formats (long print, piecemeal print, ASCII on screen and hypertext) all have their fans, all have their uses, the ideal system would support all four, but it isn't possible to support all four really well.
Writing, designing or encoding for plain ASCII just isn't the same as writing for pages. One of the books I read ages ago had a very nice example, showing two pages of text vs. one screen of text. The pages allowed boxes that didn't intrude on reading the regular text, fine graphics, and easy overview of a lot of data. In all, around six times as much information in front of the reader's eyes. (more…)
Exceptions are such a pain. They look as if someone thought they could solve many disparate problems with one tool, and in the end, the tool doesn't look terribly elegant, and people don't use it terribly well. (more…)
The TeXbook employs something called literate programming: Knuth wrote code and text together, effectively writing a narrative about that code, with that code as part of the narrative.
Knuth could do that, he's a genius. He was able to write a sizable program practically without bugs, in a note-book. Mortals like myself could not. I'd have to go back and rewrite earlier bits, and before long the narrative would stink. (more…)
Most people who talk about literate programming seem to care mostly about the output. The written documentation. I care more about the actual writing, and the result of the writing process.
When you write something, when you explain it, you gain a deeper insight yourself. That's a cliché, to be sure, but it can be leveraged to write better code. There are two parts to it: Helping yourself and having your tool help you. (more…)
Scientists have proven that eighty-four per cent of Microsoft-bashing is ridiculously wrong, and that all that rubbish makes valid criticism of Microsoft look bad.
API documentation is a particular subclass of literate programming. What makes it special?
First, its audience is diverse. Some readers know almost as much as the maintainers about the subject, others are rank beginners. Many know quite a bit about some parts of the subject and are almost ignorant of other parts. Some readers like to point and click, others prefer dead flat trees, others again prefer on-screen plain text such as man pages (I do, because I can type much faster than I can point and click). (more…)
After eleven years and a bit, I think I stopped.
Alt-F2 was too slow, and the application serving it ate 400MB RAM including all the shared libraries it didn't actually share with anything. (more…)
Below are almost all the letters in Unicode. Let me see what my browser can render.
Arabic: ء آ أ ؤ إ ئ ا ب ة ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ى ي ٮ ٯ ٱ ٲ ٳ ٴ ٵ ٶ ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ ڀ ځ ڂ ڃ ڄ څ چ ڇ ڈ ډ ڊ ڋ ڌ ڍ ڎ ڏ ڐ ڑ ڒ ړ ڔ ڕ ږ ڗ ژ ڙ ښ ڛ ڜ ڝ ڞ ڟ ڠ ڡ ڢ ڣ ڤ ڥ ڦ ڧ ڨ ک ڪ ګ ڬ ڭ ڮ گ ڰ ڱ ڲ ڳ ڴ ڵ ڶ ڷ ڸ ڹ ں ڻ ڼ ڽ ھ ڿ ۀ ہ ۂ ۃ ۄ ۅ ۆ ۇ ۈ ۉ ۊ ۋ ی ۍ ێ ۏ ې ۑ ے ۓ ە ۮ ۯ ۺ ۻ ۼ ۿ ݐ ݑ ݒ ݓ ݔ ݕ ݖ ݗ ݘ ݙ ݚ ݛ ݜ ݝ ݞ ݟ ݠ ݡ ݢ ݣ ݤ ݥ ݦ ݧ ݨ ݩ ݪ ݫ ݬ ݭ ﭐ ﭑ ﭒ ﭓ ﭔ ﭕ ﭖ ﭗ ﭘ ﭙ ﭚ ﭛ ﭜ ﭝ ﭞ ﭟ ﭠ ﭡ ﭢ ﭣ ﭤ ﭥ ﭦ ﭧ ﭨ ﭩ ﭪ ﭫ ﭬ ﭭ ﭮ ﭯ ﭰ ﭱ ﭲ ﭳ ﭴ ﭵ ﭶ ﭷ ﭸ ﭹ ﭺ ﭻ ﭼ ﭽ ﭾ ﭿ ﮀ ﮁ ﮂ ﮃ ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ ﮊ ﮋ ﮌ ﮍ ﮎ ﮏ ﮐ ﮑ ﮒ ﮓ ﮔ ﮕ ﮖ ﮗ ﮘ ﮙ ﮚ ﮛ ﮜ ﮝ ﮞ ﮟ ﮠ ﮡ ﮢ ﮣ ﮤ ﮥ ﮦ ﮧ ﮨ ﮩ ﮪ ﮫ ﮬ ﮭ ﮮ ﮯ ﮰ ﮱ ﯓ ﯔ ﯕ ﯖ ﯗ ﯘ ﯙ ﯚ ﯛ ﯜ ﯝ ﯞ ﯟ ﯠ ﯡ ﯢ ﯣ ﯤ ﯥ ﯦ ﯧ ﯨ ﯩ ﯼ ﯽ ﯾ ﯿ ﺀ ﺁ ﺂ ﺃ ﺄ ﺅ ﺆ ﺇ ﺈ ﺉ ﺊ ﺋ ﺌ ﺍ ﺎ ﺏ ﺐ ﺑ ﺒ ﺓ ﺔ ﺕ ﺖ ﺗ ﺘ ﺙ ﺚ ﺛ ﺜ ﺝ ﺞ ﺟ ﺠ ﺡ ﺢ ﺣ ﺤ ﺥ ﺦ ﺧ ﺨ ﺩ ﺪ ﺫ ﺬ ﺭ ﺮ ﺯ ﺰ ﺱ ﺲ ﺳ ﺴ ﺵ ﺶ ﺷ ﺸ ﺹ ﺺ ﺻ ﺼ ﺽ ﺾ ﺿ ﻀ ﻁ ﻂ ﻃ ﻄ ﻅ ﻆ ﻇ ﻈ ﻉ ﻊ ﻋ ﻌ ﻍ ﻎ ﻏ ﻐ ﻑ ﻒ ﻓ ﻔ ﻕ ﻖ ﻗ ﻘ ﻙ ﻚ ﻛ ﻜ ﻝ ﻞ ﻟ ﻠ ﻡ ﻢ ﻣ ﻤ ﻥ ﻦ ﻧ ﻨ ﻩ ﻪ ﻫ ﻬ ﻭ ﻮ ﻯ ﻰ ﻱ ﻲ ﻳ ﻴ (more…)
udoc
Udoc is the name of my latest program to do literate programming, and I'm reusing it here, for writing about the subject. It is perhaps not a very good name, but I used it since the subject is such a many-faceted one:
API documentation is what I did at Trolltech. At least that's what I thought I was doing at the start. As I was developing the format and writing text, I found I could use the documentation for two other purposes:
Maintainer documentation is one half of what Abhijit and I do for Archiveopteryx.
Writing better code through writing documentation and thereby developing a better understanding.
Checking boxes is what I see much too often. There Shall
Be Documentation
, or I Will Document My Code
; but the
actual documentation is meaningless — doesn't answer any
questions I have about the code or interface.
Literate programming tools can be used for all three. Some are better suited to one purpose, some to another. Disciplined usage can help reach a goal even if the program fails to help — I still think it's a failure, though.
Googlebot, msnbot and Yahoo Slurp have all seen links to rant.gulbrandsen; none of them followed the links.
On one hand, a blog which can't be indexed by the major search engines is pointless. On the other, this particular blog is really a CMS/publishing tool for my writings and ramblings about udoc and literate programming, and until I'm done with that subject, it doesn't matter much whether anyone can read the site, oops, the blog. So I'll leave it 6-only until that writing is more or less done, then reconsider the matter.
The origin of udoc goes a long way back, to when I still was a student at the University of Trondheim, the world's first and only Quasar Toolkit user, and about to start working at Trolltech, which at the time was called Quasar Technologies (Hi Haavard) and occupied a room and a half overlooking a busy street in a rather unfashionable part of Oslo.
I wasn't very happy with the Qt documentation, which was then written using LaTeX macros and already obsolete. I was also an opinionated asshole and far too sure of myself, and I'd just learned about Donald Knuth's literate programming techniques, but I hadn't read his book. Naturally I looked at the existing litprog tools (there were quite a few) before discarding them all to write something good. (more…)
This is a placeholder.
I'm the next many months, I'm going to write long series of semirelated postings on source code documentation, covering the techniques I developed at Trolltech and extended for Archiveopteryx, what other people are doing and what I think of it all.
This is the introduction, which I mean to revise so it points to this and that. It points to nothing yet, there being nothing it could sensibly point to.
For a long time udoc was called qdoc. Because Trolltech might want to
release its qdoc (abbreviated from qt doc tool
for no particularly
good reason), it seemed sensible to rename
this one before release. A
simple matter — just step along to the next letter, I thought. But then
there turned out to be
something called rdoc already. And two
programs called sdoc. tdoc was taken too. A few quick searches showed that
there are more than 26 programs like udoc.
You can understand why I considered naming it fdoc.
Mikrotik makes a series of small, neat routers. I have a 433UAH (with indoor case), which has a VPN tunnel to OpenVPN running on a rented server at vollmar.net. This describes how to build an IPv4 and IPv6 VPN tunnel between a Mikrotik router with a dynamic IP address and a Linux server running OpenVPN with fixed IP addresses. (more…)
Canter & Siegel posted a few thousand spams (the famous green card spams), probably helped by someone with imagination and technical skill. Long and tiresome threads discussing the legality, morality and all other aspects of this resulted. Canter & Siegel then tried again on a different subject, this time without able help.
On the same evening, my friend Chris Owen posted a 300-line diatribe, rebutting something or other point by point. I clicked. I just couldn't bear to read it, and decided: It's time to stop discussing this and do something. (more…)
New IPv4 addresses are being allocated at a rate of 6-7 per second and there aren't very many left. In a while, we're going to run out. What then?
I think that when it happens, some people will try to buy other people's IPv4 addresses, but frankly I doubt that there'll be enough willing sellers to supply 6-7 addresses per second, so at least some people will have to make do with only IPv6 addresses. That's going to be painful.
That period will be less painful if a few people put web sites and other services on only IPv6 now, so that the transition starts sooner, with fewer victims, and ramps up later.
I'm not willing to do all that much. But this blog is unimportant, so I put that on IPv6. I could have used a name-based virtual host or used one of my free IPv4 addresses, but someone has to make a start.
Later, maybe I can put something other than a web site on IPv6.
I own and like a Popcorn Hour A-110, but I don't agree with all the web pages that say it plays everything.
Below is list of things I've tried to play that cause the player to freeze. In each case I ripped the DVDs using k9copy (a straight copy, no recompression or size/quality reduction). When I try to play the resulting ISO files the player freezes, does not react to the remote control, and has to be power-cycled. (more…)
fatal error in vts css key
Most Unix DVD players, and the Popcorn Hour boxes, use libdvdcss to play DVDs and ISO images. Libdvdcss is a fine piece of software and decodes almost all DVDs.
One of the DVDs it cannot play is this version of Moulin Rouge, which uses many different CSS keys, including one libdvdcss (version 1.2.10) cannot crack: (more…)
Postings to this blog represent the opinion of Arnt Gulbrandsen, arnt@gulbrandsen.priv.no, Schweppermannstraße 8, 81671 München, Germany, fax +49 89 45029758. If something sounds more like fact than opinion, then it represents my understanding at the time of writing, no more.
Links to other sites worked as intended at the time of writing, but of course I cannot vouch for their accuracy or veracity at the time of reading.
There is no comment form here, because German law requires moderation, and in my opinion comments aren't worth that horrible chore.
Please send me email if necessary.
The Quickmill 3035 Pegaso, also called Quickmill 03035 or Quick Mill 3035 (or other combinations of the same units) is an espresso machine with built-in coffee grinder and an unusual heating mechanism. (more…)
This is a bit of a rant.
I claim that, for any single page in a documentation set, whether it's pages in a book, web pages on a documentation site or even unix man pages, one of these three cases holds: (more…)
IRC ignores characters sets while jabber always uses Unicode and clients map appropriately. On Jabber, München is München. On IRC it's München or M�nchen sometimes and each user has to (more…)