Category: Alaric

Insomnia (by )

yawn

5:30am and I haven't slept a wink yet! I really need to sort out my lifestyle so I get (a) exercise and (b) time to think every day. Time to think is important for me; if I don't get enough, then when I go to bed, I lie there and think. Lots.

Tonights thoughts have included:

  1. Some ideas about how whole-program transformations (eg, the macroexpander/partial evaluator and the OO system) in CHROME might be handled. The OO system needs to be a whole-program transformation rather than just some macros using the normal macroexpander since things like inheritance graphs and method lists for generic functions need to be accumulated together; most Lisps handle that with macros that destructively update data structures, but I'm trying to design a system without rampant mutation, so need a whole-program code walk to do this. Clearly, since we want to be able to write macros that produce generic functions, methods, and the like, we need to do this AFTER normal macro expansion, but before the compiler gets its hands on it.
  2. Some ideas about separating the generic function/method system - the dispatch part of Lispy OO - from the classes-inheriting thing. Subtype relationships that are used to dispatch GFs should be doable with plain predicates - pair? my-record-type? etc. Or more complex predicate expressions on groups of arguments, so we can support multivariate typeclasses in the Haskell sense, as a rich interface/implementation system as well as a traditional records-with-single-inheritance class system. To do this properly we also need declarations that one predicate implies another - (number? x) -> (integer? x) - so that a method on numbers will be used for integers, yet a more specific integer method can override it. I'm not sure how decidable the "most specific method wins" thing can be with complex multivariate type predicates, though. Must experiment and ask knowledgeable formal logic folks.
  3. Thoughts about future computer architectures. The drive is for more speed, but these days, most CPUs are idle waiting for memory to feed them code and data, or (much more often) for the disk, network, or user to feed them. The only places where the CPU maxes out tend to be highly parallelisable tasks - server stuff handling lots of requests at once, games and other audiovisual things, and scientific number crunching. This suggests to me that a future direction of growth would be one or more high-bang-per-buck MISC processors embedded directly into SRAM chips (sort of like a CPU with an onboard cache... but the other way around, since the CPU would be much smaller than the SRAM array) which are bonded to the same chip carrier module as a set of DRAMs. One or more of CPU-and-SRAM and some DRAM chips are then all designed together as a tightly-coupled integrated unit for maximum speed due to short traces and the lack of standardised modular interfaces between them (like DIMMs and CPU socket standards) meaning that the interface can evolve rapidly. The whole CPU+SRAM+DRAM unit is then pluggable into a standardised socket, which motherboards will have several of. The result? Lots of cores of low power consumption reasonably fast CPU with high speed access to high speed memory. And for those demanding games/media/scientific tasks? The higher-end modules will have FPGAs on as well...
  4. Forget nasty complex unpredictable memory caches: have a nonuniform physical address space (with regions of memory of varying speed) and let the OS use the virtual memory system to allocate pages to regions based upon application hints and/or access statistics. Not having cache tag and management facilities makes for more chip area to put actual memory in.
  5. We've been wondering about getting goats lately. Goats are useful creatures; they produce milk (which can be turned into cheese) and they produce decent wool (just not in the quantities sheep produce it). Their milk and cheese don't make Sarah ill the way cow-derived versions do. Plus, we need something to come and graze our paddock. We've been doing a little bit of research and apparently two goats would be about right for the space we have. We'd need to put an inner layer of fence around the paddock to keep them in while still allowing the public footpath, and we'd need a little shed for them to shelter in. But thinking about setting things up in the paddock, I'm now wondering if it would be a good idea to build a duck run in there too, down at the bottom by the stream, all securely fenced against foxes and mink and with a duck-house up on stilts in case of flooding, but with a little pond dug out for them (connected to the stream by a channel with a grille over it to prevent escapage). It would be a convenient place to have the ducks, and it would make a good home for them, I think.

It's now 6am. Do I try and go to sleep, or try and last the day out? Hmmm...

Derren Brown at Southend (by )

Tuesaday saw numero-uno of my friend Clares Birthday celebrations and so we headed off to South end (of all places) to see Derren Brown. We saw him in London about two years ago when I was still on the crutches - I got hit by a monky that time so Clare got to go up on stage and win £50 off of him which was fantasmigorical as you can imagine.

This time none of us made it onto the stage but the show was fantastic! What with gorrilaz and a truelly spectacular Oricle show that had me wowing - he does he do it? Clare almost took out half the threater with her egerness to put a question in his pot! We really enjoyed the show 🙂

However the pre-show meal was a bit of a disastor, they just took too long to bring it out and got the order wronge and in one case brought out something that was inedible ie Lianes cake could smash plates! They are the resturant in the theatre so you'd have thought they would have been better but no we had to leave half our desserts and had no coffee (which was all part of the set meal) and we only just got in for the beginning of the show.

Also poor Al had to do a bit of a marathon to get to us for the meal which he should have been late for but becuase of how they where being we had bearly ordered! Still us girls had a nice wonder around the place and as me and Lianne are obessed with taking photos and neither of us had a camera Clares new camera was getting a good old try out. I'm hoping to see them soon so I can post them up on here 🙂

Tonight sees round two of the celebrations - Karyoky mucho mucho fun 🙂

Paradigm shifts (by )

When I was a kid, I used to read a lot. I'd devour the technical sections of libraries for new things to learn about. Then I got an Internet connection, and tore into academic papers with a vengeance. Then when I left home and got a job, I had money, so I would buy a lot of books on things that I couldn't find in the library.

I look fondly back on when I read things like Henry Baker's paper on Linear Lisp, Foundational Calculi for Programming Langauges, the Clean Book. Or when I first learnt FORTH and Prolog, and when I read SICP or when I learnt about how synchronous logic could implement any state machine.

All of these were discoveries that opened up a new world of possibilities. Mainly, new possibilities of interesting things I could design, which is one of my main joys in life.

However, after a while, I started to find it harder and harder to find new things to learn about. Nearly a decade ago I all but gave up on the hope of finding a good technical book to read when I went into even large bookshops with an academic leaning. I started browsing the catalogues of academic publishers like MIT Press and Oxford University press, picking out good things here and there; that's where most of my Amazon wishlist comes from. But even then, most of the books I find there are merely ones that will give me more detail on things I already know the basics of, rather than wholly new ideas.

But, of course, the underlying problem is that my main field of interest - computer science - has only been pursued seriously for about seventy years. Modern computing (as most people see it) isn't really the product of current computer science research; industry lags far behind academia in many areas. The computer software we run today is primarily based on the produce of academia around the 1960s (imperative object-oriented programming languages, relational databases, operating systems with processes that operate on a filesystem, virtualisation, that sort of thing). This is for a number of reasons (some more valid than others; but, we are catching up, mainly thanks to the social effects of the Internet), but it means that there's little incentive for industry to actually fund more computer science. So the rate of new ideas actually being developed is far less than the rate at which I can satisfy my curiosity by learning them!

One answer is to try and come up with new paradigm-shifting ideas myself. I'm trying, but I'm not really good enough - I can't compete with proper academics who get to spend all day bouncing ideas back and forth with other proper academics; I can't really get my head deep enough into the problem space to see as far as they do. All I can really do is solve second-level problems, such as how to integrate different systems of programming so that one can use the most appropriate one for each part of one's program without suffering too much unpleasantness at the boundary between them.

Which is why, whenever I read something about some fun new deep idea, I have to stretch my mind to encompass it in the first place.

And that's half the fun...

Cake! (by )

Sarah made me a nice cake for my birthday. It was quite an involved process:

Out of the oven Turned out of the tin The two halves temporarily assembled Applying the sandwich icing The two halves finally assembled Chef at work Jean helps clean the equipment Starting to apply the icing The icing is too runny The Result Half eaten

It's really nice - it tastes of honey! The icing came out runnier than we'd expected and ran straight down the sides and pooled around the base, but that was only a minor issue.

Mental modes (by )

Hmmm, it appears I have two mental modes when working.

  1. Deeply focussed into something. I block out distractions to hold onto the focus. This is what I need when I'm programming. Once I get into this mood, I get a lot done, since I have all the pertinent information sitting in my head and all the correct windows open on my computer, but it can be an uphill struggle to get started.

  2. Event driven. When I'm dealing with emails, phonecalls, broken servers, and that sort of thing, I'm in a very different mode, agily flipping between things. I come across problems that will clearly need some deep focus, and I have to put them off for later, since it takes me a while to get out of deep mode and into event-driven mode.

This morning I've been event-driven, catching up on email, dealing with a down server, and now I really ought to try moving back into deep focus mode to work on something else, and I'm finding it hard; my thoughts just keep jumping around!

I really want to decrease my dependence on lots of deep thought mode for earning money; part of this revolves around getting an underling to do more of the programming so I can be event-drivenly mentoring them while doing the considerably easier form of deep thought required to design software architectures for them to implement... which is a work in progress as we speak...

WordPress Themes

Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales
Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales