Well I thought I’d fill your friends pages with more drivel and attempt to start a (lj-style-)meme, since its been a week or so since we had one, so hereforth I do announce the “Epiphany/Grokking/Lightbulb meme”, usual style applies:
a sudden, intuitive perception of or insight into the reality or essential meaning of something, usually initiated by some simple, homely, or commonplace occurrence or experience.
If you want to do this meme copy this text into your blog then follow it with a discussion of something which caused you to have an sudden understanding of something important to you that really changed how you think.
Well I keep pondering writing long screeds but never seem to get around to it. But regardless of that I thought I’d make a short post.
In the light of recent vulnerbilities in Firefox to do with its password management. If you do use it to remember passwords, please think of using a master password and/or installing something like Secure Login, an extension so simple you’d think they’d make it an optional default behaviour. This attempts to get around people writing scripts on sites like myshit, farcebook and licejournal and nabbing your password by making it so firefox won’t fill in the username/password boxes until you click a button.
p.s. Solaris can fucking suck from an administration point of view, its a weird mix of the cutting edge and 20 year old tech, and the 20 year old bits could be replaced for free. This is just daft and frequently annoying. Discuss.
Well recently suggested that in fact sitting was one of my hobbies, and while I realise it was in jest (and I did indeed giggle) the comment conceals one of the ways I’m currently interested in looking at the world. In that most of the time we just work out how to get something done basically and never really return to look at the area properly.
Since I’m not particularly great at anything I do (although I think I’m pretty good at many things) I’ve found solice in the materials written by those who are and am attempting to absorb their material for my benefit (i.e. learnin’). Now one of the threads that I keep coming back to is that of the fundamentals.
Now its not that I enjoy studying samey basic materials over and over again, its that a truly good treatment of a subject must start by addressing the very basic things from which that subject is built, and it takes a truly lucid and deep understanding of something before those fundamentals are truly absorbed in to the self and can be communicated clearly. Every time you read a description of something fundamental from another experienced and valid point of view you pick up at least a new way of thinking about it, which may help things click with you and help your own practice.
In my opinion truly mastering a subject or improving at it beyond a certain point requires at least cursory study of the fundamentals of what goes into building it.
For example (and I realise I’m banging a drum about this but it interests me) my iaido is especially fascinating to me because never really been physically fit, so to move through the first 11 training forms (which are the ones I can say I “know” in at least a rough way) I’ve had to start to learn all kinds of things from that groups point of view. Posture, sitting, standing, stepping, breathing, these are the basic things (you also get to do cutting, which in itself is an elegant system) but even these can be broken down. The fundamentals of shifting weight, of tensing and untensing certain muscles, of balance and body position. And this has come back to help the rest of my life. My posture has improved in other places, I’m fitter, I’d like to think my movements are a little more graceful and I’m less likely to trip over my shoes now.
The book that initially got me thinking about this is Lessons in the Fundamentals of Go, a truly excellent text by Kageyama Toshiro, in this the very basic building blocks of a truly well played game are discussed and outlined, the connections between moves, the natural way things should flow into each other, basic strategies like nets and ladders and a number of other topics. Now I knew of most of these things before I picked up the book, but I didn’t really stop to think about it, and mostly played on instinct. My game has deteriorated through lack of practice but I’ve enjoyed starting to get it back on track with books like this, thinking about the very basic things and coming back to them again and again to ponder how they influence the more complex behaviours.
At an earlier point in my life I studied the work of Constantin Stanislavski, specifically briefly going through (most of, I was lazy) his excellent work An Actor Prepares, which is essentially Stanislavski going back to the fundamental building blocks of acting, how to construct the mental and physical notions of character within yourself, how to break up and study texts, searching for motives, how to stir yourself to various emotions, how to condition yourself to be able to use your imagination to tie it all together in a moving performance.
I feel this also plays a part in a number of interesting occult systems I’ve looked at (even so briefly) over recent year, I feel in some ways the enduring attractiveness of a lot of the Hermetic or Egyptian work is that it is essentially the fundamentals of the later more baroque schools of thought. But also the later stuff in a way holds similar goals, the GD (although in many ways very complex) I always get the impression sought a return to the fundamentals, by attempting to create a massive syncratic union of everything into Kabbalah and Tarot they sought to understand the fundamental things that were the building blocks of other systems and the world. Austin Osman Spare I always get the impression was motivated by this. While he’d go away and learn in other peoples systems he was truly looking at the fundamentals and constructing his own way (not always the best route, theres a lot to be said for really trying to grok a system of anything, but its true at some point you should try to do your own thing). In many ways the current final child of the old guard of Magic is the Chaos Magicians who are again I think looking into what the real fundamentals of humans and the world are and how you can tweak them for the most benefit.
In a similar vein are the Runes in a way, since they are at heart a mystery or a secret they describe the fundamental states of the world and inside that our lives and minds. I feel the study of Runes is again the study of fundamentals, in that although they can be represented as staves, sounds, numbers, letters, concepts, names, postures… but all some attempt to represent something truly underpinning the world.
I’ve also looked at this with roleplaying (and I believe and have recently been posting on this topic). What are the fundamentals of roleplaying? How to get people involved, to help them have fun, to explore characters motivations and actions, to play types of people they never get the chance to in real-life, to make them experience (at least in some way) a number of feelings they’d rarely get the chance too otherwise. My well known long running Kult campaign is in many ways a series of experiments on this front. Do we need dice? Character sheets? How can we generate an atmosphere? Do props help or distract? What kinds of lighting and music can help build atmosphere? What kills it? How best to pace a game? Can you run combat without getting bogged down? How to make players care for their characters? Is a “party” structure really necessary or just useful? How much direction does the game need, how much free reign do the players need? What kind of game do these players want to play? What kind of story do I want to help them tell?
In my own day-to-day profession I’ve also found that this sort of study is apparent. Again and again we see this outlined in many ways, the same building blocks are reused again and again. Breaking algorithms up into subroutines or functions, breaking code out into libraries, treating communication between programs as very simple streams (TCP sockets anyone?) and holding all of this up the concept of abstraction. We abstract to make things faster to develop, easier to modify and in many ways better to use and run, we abstract to make things simpler so we can make our computers do even more complex things, we abstract away from the fact that every current computer is at its heart a limited turing machine glued to a metronome.
Programmers relentlessly train themselves into the habits of efficiency, of doing things once and once only, and only then if really pushed. Always looking for ways make things cheaper and faster but always the idea that things must be robust hanging over us, if an algorithm has too many shortcuts, too many special cases, too many dodgy machine specific hacks it becomes brittle and unportable. In Perl culture its said that the three virtues of a programmer are Laziness, Impatience and Hubris and while I’m not sure I agree totally its interesting to ponder.
Even our user interfaces are built around these concepts, sooner or later every user has to get their hands dirty actually typing commands into a computer (although this is again abstraction), and those of us who enjoy this kind of thing get hooked on it, simple commands that can be held conceptually inside the mind join simply together with pipelines, and we again return to efficiency, abstraction and simplicity.
“When the Patriarch McIlroy invented the pipe, he knew that it would transform software, but did not know that it would transform mind.”
— The Rootless Root
When programmers I know write code (and indeed write anything) they really have three choices. They do it in vim, they do it in Emacs or they use some piss poor tool that makes Baby RMS cry. They use concrete implementations of the platonic ideal of these two editors (okay originally they was ed and teco) because they were created, nay accreted over time in environments where people really really wanted to edit text. Vim is in many ways I feel the more simple, the more fundamental, the cleaner of the two ideals. Whats that? You want to move forward 2 paragraphs and three sentences? 2}3) and thats it. You remember typing some section title starting with the word “Good”? /^good and then hit ‘n’ until you find it. Emacs, whilst fun, is really more an entire environment in which the fundamentals of manipulating text are laid bare before your eyes, and hence you can do your own crazy thing should you wish.
Our Internet is also based on these principles, abstraction, efficiency and simplicity. It also looks towards that of independence, as given away by the name. Its an Inter-Network, a joining together of various independent autonomous systems to create a greater whole and pass information about, but at its heart its clearly very independent.
Just look at how email works for example (although those with a nervous disposition may wish to look away and pretend email isn’t foul) its a giant system for passing basically unformatted text files around, these days the text files are optionally formatted, but the actual mail transports don’t care. And look at the protocol, its simple (well it got more complex, the original is like 12 pages), so simple it can be typed by hand. Sure it would be more efficient to have it all squashed down and compressed into binary code but frankly its nice to be able to simply write or debug something with just telnet. Sure it would probably be more efficient in some ways to have some kind of big post-office like system and punt things around like that, but Email is built upon the idea that “When mails going between systems on the net we do SMTP, what you do to deliver it, read it or write it on your system is none of my business, just don’t expect me to do things your way.”
This is best summed up I feel by a wonderful checklist I’ve seen in a few places on Usenet and also sometimes on Slashdot about antispam ideas, essentially it includes things like “Your idea requires spammers to play nice”, “Why should I trust your system?” and other simple problems.
Efficiency, abstraction, simplicity, robustness, independence. These are just some of the fundamentals of computing, I’m sure in my rant I’ve missed a lot out.
Anyway the point of all of this was to attempt to discuss why I think the fundamental parts of activities require pondering and in some cases deep study before a subject will start to make real sense, so ask yourself:
How am I sitting, is it comfortable, is it good for my body?
How am I reading this text? Am I staring too long, will that be good for my eyes? How am I taking this information in? Can I recall it all? Should I take notes? How to take the notes? How to arrange them, format them, link them to the original text or other thoughts in my mind?
When I’m writing what are the fundamentals of that craft? The paragraph? The sentence? The word? How do I get my point across? How do I tell the story? What kind of structure should I use for my work? How to break things up? If its typed hows my typing? Should I take a course in touch typing? Is the light and desk the right height? How will it appear to the end reader? What control do I have on that formatting, should I use it? If its hand-written hows it organised? Can I correct mistakes? Is the actual motion of my pen making just text or is it writing as an art? Is that needed here? Is this a scribble or am I writing something important?
What about food, what are the fundamentals behind preparing food? Selecting ingredients, blending flavours, physically slicing or chopping items (and what about that? The best way to handle a knife, the best kind of blade for the kind of object), and what about eating food? Best place to be? (do you want a view? Do you want to sit? Stand? Sprawl?), methods of cutting food? Blending tastes from the meal on your palate? Drinks to go with it?
I recall a story of a zen master who looked particularly smug after eating something, and when asked about it said that this was because he was full. When it was pointed out everyone else had eaten as much as him he declared this to be false, his reasoning was that when he was eating that was all he was doing. Just eating, and savouring that. Everyone else was thinking about things, shifting themselves about in their seats, looking about and chatting.
What are the fundamentals of communication and polite conversation? When I was younger I watched a few small children interacting. One of them about 5 years old taught me the fundamentals of polite conversation (which I often forget to follow). In that: (a) You are not the centre of the world, (b) Conversation flows and forks naturally, don’t drag it too hard or it’ll jump the rails and crash and (c) Wait your turn to say something if you feel you have a valid point, if the conversation drifts away before you do then let it go, at some point in the future you may get a chance to say your bit, but does it really matter?
Now note that this is just about polite chatter and enjoyable social conversation, these rules don’t hold for meetings or any situation where it might be important that people know the information.
“If you have an important point to make, don’t try to be subtle or clever. Use
a pile driver.”
Next time your climbing a tree think of this, what are the fundamentals of climbing? How does one lift ones self with the arms, or even with the legs? How many limbs should be on the tree at once, what kind of grips are needed? How do you judge the weight a branch will take? Where should your weight be positioned, resting on which limbs? If you fall how should you try and land? How best to try and catch yourself and stop the motion?
Everything from filing to swimming to walking and breathing have fundamentals, a lot of them overlap and most are useful to know, improving many parts of your life, just a matter of working out which to study then thinking and testing, fascinating work :)
So Mish’s machine has been getting slowly wonkier over time, first booting it got tricker then over a few days it rapidly went from “needing a bit of a kick to get going” to “taking 20 minutes of reboots to approach running, then hard crashing after about 15 minutes”.
So this evening was the time to give it a poke, start off in the normal way by unplugging everything, it boots says no disks then stops on a floppy error. So I move to plugging in CD drive, still okay, then hard disks, still fine… so perhaps it was the floppy? Oh wait, whilst good for 5 minutes (due to being moved? What got shaken back into place?) it then started acting up and crashing again.
Back to the drawing board, whats the most likely thing? Ahh yes, 128Mb stick of RAM, as old as the rest of the machine itself. Right, chuck that for starters leaving the shiny new RAM all on its own, then spend the rest of the evening periodically rebooting the machine… and lo and behold I think thats cracked it.
Time to stick the RAM back in and break out Memtest86 tomorrow perhaps to verify things, but that looks like it was the cause.
Well being boring as I am and having nothing better to do I’ve spent this evening sat online chatting to people, futzing around on the next and generally wasting time. The upshot of this is I’ve finally beaten up Firefox significantly so it acts like I’d like it to. As an upshot of this I thought I’d waffle on about how I did it in case it’d be useful to other people.
Now I’m a chronic bookmarker, although I’ve had a purge this evening my bookmarks.html file still currently loiters dangerously near the 1MB mark. However I tend to be rather bad at organising them, unless I’m paying attention and adding for specific purposes I tend to just dump cool things into a single “current reading” folder for later purging/organsing and keep more specific placemarkers on the toolbar on the main screen (things like the link to which page of an article I’m reading, that kind of thing).
This leads to some issues with the default FF bookmarking system, hence the adoption of the following extensions:
- Bookmark Duplicate Detector – Lets you quickly purge dupes from your bookmarks and warns you if your adding one you’ve already got (can be made to only warn if your duping into the same folder), most handy I think
- Bookmark Scrollbar – for when you’ve got three hundred items in one folder of “interesting stuff”.
- Advanced Bookmark Search – The finest search box ever, lets you search title,keywords,description,URL all at once and also search for words/absence of words/starts with/ends with/is/isn’t and other kinds of crap like that, fantasticly handy. The end result is a bit shoddy (in that it seems to not want to open in tabs but instead another damn window, must see if I can force its hand with Tabbrowser Preferences
- OpenBook – Perhaps the most useful, means that when you hit ^D to add a bookmark you can have the option of entering keywords, have a default folder selected (see above about “current reading”) and the folder menu of bookmarks already dropped down. Nice one, I can’t believe the default is not to have keywords or description boxes available to poke and theres no way of turning them on without major faffing.
Ahh yes I have indeed been partaking of quite a large volume of functional kool-aid lately, its quite scary. This week I’ve mostly just been doing lisp, lisp, lisp, and more lisp. In fact I don’t think I’ve touched Perl this whole week long, which is weird.
Still its been a good time, I’ve grappled with CLOS (let me fetch my crack pipe) and won the functionality I wanted, I’ve started to do more experimentation with some of the finer points of the whole style of coding itself.
For example, let me for a moment take you on a waffly journey around my criteria system (EDIT: Its probably worth knowing that I’m writing software that searches a graph of nodes and looks for suitable paths between any two nodes), for judging if a path has the right metrics/length/whatever to be acceptable.
We start with (make-criteria-pointer), this takes the name of a function and the arguments to pass to it, and returns a pointer to a function that takes a single path and runs the original function/args against it, returning true or false.
While that sounds a bit confusing, let me break it down for you, I’ve got a function for juding if a list is too long, which looks like this:
(defun max-length-p (path n) "Accepts a list-of-nodes (path) and an length (n) and returns T(rue) if the list is shorter than the length" (if (<= (list-length path) n) T nil))
So if I run
(make-criteria-pointer 'max-length-p 5)
it returns a pointer to a new anonymous function that looks like this:
(lambda (x) (max-length-p x 5))
i.e. it always checks to see if x is longer than 5 items long.
Now this doesn’t seem to be too useful, however there are simple ways to build a list of these function pointers, so if I do the following:
;; Maximum path length is 5 (new-criteria (make-criteria-pointer 'max-length-p 5)) ;; Path must include one of the nodes foo,bar or baz (new-criteria (make-criteria-pointer 'path-must-include-p '(foo bar baz))) ;; The minimum level of trust between nodes is 10 (new-criteria (make-criteria-pointer 'metric-p '("trust" 10)))
Then new-criteria keeps adding these function pointers to a list (called *criteria*, although you can tell it to add them to another list), and now if you say:
(check-path-p path-to-check *criteria*)
It will go through the list stored in *criteria*, passing path-to-check to each one of these functions and if the list doesn’t pass muster then check-path-p just returns false.
metric-p is also a generic checker of numeric (or other) values on links in the path, and so you can make it do crazy shit like this:
(metric-p path-to-check '("bananas" "plenty") :test #'(lambda (x y) (check-number-of-bananas x y)))
And it’ll dig up the “bananas” value about each link in path-to-check and instead of just checking this value numerically it will pass x (the value from each link) and y (“plenty”) into the newly defined function (lambda is an anonymous function), which will call check-number-of-bananas on these two values to determine if the link has “plenty” of bananas.
Now I’m sure there are plenty of other ways of doing systems like this but frankly Lisp can be deeply satisfying to write this kind of thing in. Once I got the last bits of this system in place this evening I left work pondering ways to improve it for speed or functionality, and have a list of three/four more things it could do by the end of Monday to complete it.
Just so damn shiny!
Well I’ve had a fairly busy couple of weeks what with moving and all, and now the Crackenthorpe event is over I feel I can relax again. So heres some waffle about the event, and also a little about work.
Excellent, although rushed this morning I’d consider today a success already.
Firstly I had a rather good meeting with my supervisor about how things were going, after which I accumulated some fine texts I had on order from the dept. These including a copy of The Camel to live in my office (its something I dislike lugging about) and also Graham‘s ANSI Common LISP. Tasty :)
Still waiting for a shiny new copy of K&R to show up, then I feel I’ll have all the books one really needs (Well, I was also tempted by the Big Book of Postfix, Perl Best Practices, Applied Cryptography, The Jargon File on paper, a complete run of Lovecraft, a new Principia Discoridia, Illuminatus! and other inspirational works, but I thought I’d best not take the piss, that and I don’t want to have a discussion with my supervisor about why knowledge of Fnords will help me get some code and papers written :).
In other news, whilst waiting to collect said books of joyfilled joyfulness I got a call asking me when I wanted to move into a house, since I’ve apparently managed to pass the intimate background checks required.
Expect to see me moaning about that and fixing horrible bugs in it for the next few months, but at least we now have a backup in case nothing wonderful appears on the horizon to save our arses when cent2 comes rolling into town.
In other news I’ve got some nice numbers and some graphs on the way about email, as well as lots of notes that are slowly (too slowly) turning into a paper about my work. Huzzah!
Also I’d like to announce to everyone with a taste for fine computer games that Call of Cthulhu: Dark Corners of the Earth is out for PC… for a mere 20 quid you too can be traumatised by horrible things from beyond space and time :)
Oh yes, it doth rock bells mightily.