Fault tolerant Web hosting (by alaric)
As Sarah reminded me, I should blog my article:
As Sarah reminded me, I should blog my article:
Grrr, it's a little thing, but it somehow really bugs me that there's a graphical flaw in one of the icons in Mac OS X's Software Update utility:
![]()
(I added the red arrow)
You can tell how it happened, too - somebody was using Photoshop or whatnot to fade the ends of the arrows, and didn't finish the job properly.
Efficiency is a major goal for programmers. It used to be a much bigger goal; once upon a time, it was a struggle to fit useful applications into machines with 1MHz clocks, which took several clock cycles to perform basic operations on 16-bit values. You had to optimise even quite basic algorithms to get them to complete in acceptable timeframes.
In the 1980s and 1990s, the available computing power and memory for running an application exploded, but the sizes of data sets people wanted to work with grew in step. Now people wanted to word process documents with large images. Or keep databases of EVERYTHING. So efficiency was still a big concern for application programmers. But the focus began to shift.
I'm interested in programming languages. When I was a kid, I'd get books on different languages out of the library, and sit and learn a language. I didn't get to write code in many of them, since this was before I owned a modem; all I had at home where BASIC, Z80 assembly language, Pascal, x86 assembler, then C and C++. But I devoured new languages whenever I could. When I came across FORTH I wrote my own implementation (although at the time I didn't get the metaprogramming stuff), since FORTH is easy to implement (it's a great bootstrapping language), and later on, I implemented a kind of Lisp as a scripting language for a game engine (except I used a Prolog-esque syntax, foo(bar,baz) rather than (foo bar baz)). I really wanted to play with the rich feature set of Ada, and the parallelism of occam. I studied COBOL and FORTRAN and found they didn't look much fun. I studied Smalltalk and found that it looked like great fun. Prolog was interesting, a radical departure, but I saw it as foolish to write whole programs in it - I felt it should be used as a database query language like SQL. It's Turing complete, but a large class of programs are ugly to write in it.
Back in the day, Ken Thompson described a rather scary problem with the way programming languages are compiled.
In summary, one could modify the C compiler so that, when it compiled some security-critical application like sshd, it inserted a security hole. The pristine sshd sources, when compiled, would produce a vulnerable executable. But then to protect the modification to the C compiler from being found, one can use the same trick on the compiler - make it insert the bugs into sshd and into itself when compiled from pristine sources. Compile this compiler up, then test it on its original sources, and when it's all working OK, install it on a system (and the bad sshd) and remove the dodgy sources. Clear your .bash_history and you're done 😉