Daniel Janus’s blog
Web of Documents
7 October 2019
In 1960, Ted Nelson envisioned a web of documents.
It was called Xanadu. It was a grand, holistic vision: of documents that, once published, are available basically forever; of bidirectional links that could glue together not just documents, but parts thereof; of managing copyright and royalties. It was complex. And it never really came to fruition.
Re-framing text-mode apps
5 February 2019
“But, you know, many explorers liked to go to places that are unusual. And, it’s only for the fun of it.” – Richard P. Feynman
A couple of nights ago, I hacked together a small Clojure program.
Happy Programmers’ Day!
13 September 2014
Happy Programmers’ Day, everyone!
A feast isn’t a feast, though, until it has a proper way of celebrating it. The Pi Day, for instance, has one: you eat a pie (preferably exactly at 1:59:26.535am), but I haven’t heard of any way of celebrating the Programmers’ Day, so I had to invent one. An obvious way would be to write a program, preferably a non-trivial one, but that requires time and dedication, which not everyone is able to readily spare.
You already use Lisp syntax
20 May 2014
Unix Developer: I’m not going to touch Lisp. It’s horrible!
Me: Why so?
UD: The syntax! This illegible prefix-RPN syntax that nobody else uses. And just look at all these parens!
DOS debugging quirk
6 April 2014
While hacking on Lithium, I’ve noticed an interesting thing. Here’s a sample DOS program in assembly (TASM syntax):
.model tiny .code org 100h N equ 2 start: mov bp,sp mov ax,100 mov [bp-N],ax mov cx,[bp-N] cmp cx,ax jne wrong mov dx,offset msg jmp disp wrong: mov dx,offset msg2 disp: mov ah,9 int 21h mov ax,4c00h int 21h msg db "ok$" msg2 db "wrong$" end start
2048: A close look at the source
2 April 2014
Dust has now mostly settled down on 2048. Yet, in all the deluge of variants and clones that has swept through Hacker News, little has been written about the experience of modifying the game. As I too have jumped on the 2048-modding bandwagon, it’s time to fill that gap, because, as we shall see, the code more than deserves a close look.
Lithium revisited: A 16-bit kernel (well, sort of) written in Clojure (well, sort of)
26 May 2013
Remember Lithium? The x86 assembler written in Clojure, and a simple stripes effect written in it? Well, here’s another take on that effect:
My top three iOS apps for mapping
13 September 2012
Living in London means that I now have a whole lot of new area to explore by cycling or walking. I try to take every opportunity to spend a free day or weekend out. One of the most important things when on the move is knowing where you are, where to go, and how to get there — and for that, you need a map. As I soon learned, the maps to use in the UK are the Ordnance Survey ones (either the Landranger/Explorer series, or maps by another publisher, such as AA, based on OS data). However, the Landranger series encompasses over 200 1:50000 maps, standing at some £8 each, and when that level of detail is not enough, there are more than 400 Explorer maps on top of that. Not only does this get pricey after a while, but also the sheer volume of map juggling quickly becomes impractical when you cycle a lot outside of town.
Lithium: an x86 assembler for Clojure
14 May 2012
Ah, the golden days of childhood’s hackage. Don’t you have fond memories of them?
I got my first PC when I was 10. It was a 486DX2/66 with 4 megs of RAM and a 170 meg HDD; it ran DOS and had lots of things installed on it, notably Turbo Pascal 6. I hacked a lot in it. These were pre-internet days when knowledge was hard to come by, especially for someone living in a small town in Poland; my main sources were the software I had (TP’s online help was of excellent quality), a couple of books, and a popular computing magazine that published articles on programming. From the latter, I learned how to program the VGA: how to enter mode 13h, draw pixels on screen, wait for vertical retrace, manipulate the palette and how to combine these things into neat effects. One of the very first thing I discovered was when you plot every pixel using sum of its coordinates modulo 40 as color, you get a nice-looking diagonal stripes effect. Because of the initially incomprehensible inline assembly snippets appearing all over the place, I eventually learned x86 assembly, too.
How to call a private function in Clojure
25 April 2012
tl;dr: Don’t do it. If you really have to, use
A private function in Clojure is one that has been defined using the
defn- macro, or equivalently by setting the metadata key
true on the var that holds the function. It is normally not allowed in Clojure to call such functions from outside of the namespace where they have been defined. Trying to do so results in an
IllegalStateException stating that the var is not public.