Grams was bragging all morning yesterday (again) about how she was going to win the pool tournament. She actually managed to get 2 games ahead at one point, but I rallied back and swept the last 3 games to prove once again that; while you often can offend the karmic balance enough for it to sway the outcome of an upcoming game of chance, it's seldom that you offend it enough to have it retroactively change the score... so brag after you win.
After my glorious and hard-won victory I spent the evening with OpenGL-ctypes. Found at least part of the problem with the tessellation routines (a moderately subtle bug in my use of indexing a ctypes pointer). Who knows, some day it may even work...
Today was mostly administrative interfaces and making the search/paging mechanism from Friday bend to support multiple search types (i.e. queries across different table types, queries where only a subset of records are requested, etceteras). I also took an hour or so to play with the system and look for areas that need work. Found one bug that would have been a PITA if it had hit customers; basically I hadn't realised there is a feature in the voice prompts where they can change their voicemail password via the phone, so I wasn't doing anything to check for that situation. Fixed now.
This (admin interface development) really is the point where a fully-fledged web framework shines; the dozens of trivial editing tasks which are seldom used, but have to be there. With most frameworks the bulk of the work is already done; Zope's managment interface, Django's admin interface. It falls directly out of the "object" model of the application, and you often just tweak the display of the objects to make sense to the user.
Anyway, that was the thought that made me sick of writing admin interfaces, so I stopped work there. Probably do a few more hours after I get back from coffee with Dan.


Comments
2010-07-25 14:02
> and would have no Trac integ ration The trac-bzr plugin[ 1] seems to provide good integ ration between bzr and t [...]
2010-07-13 21:47
I've always been fascinated wi th the Asterisk AMI interface. So much so that I married tha t fascination with the [...]
2010-07-03 21:32
Yes, only references in dicti onaries are replaced, so hold ing references in lists, tuple s, etceteras keeps them alive.
2010-07-03 11:18
They hold references to remove and install?
2010-06-24 08:34
There's higher-level objects w hich are tracking what is repl aced (the actual Mock objects) . They hold references [...]
2010-06-24 08:23
I haven't tried it, but it see ms to me like this approach ha s one fundamental problem: If you replace all refs o [...]
2010-06-24 08:22
That's the "magic" that made m e go "ooh shiny"
2010-06-24 06:03
That's even more evil than the mock patch decorator...
2010-06-06 18:33
blush Oh.
2010-06-06 11:07
That's what the module does (a utomatically), but on a per-te st-run basis, and only for the process being tested (i [...]
2010-06-06 02:43
Maybe I'm missing something im portant here, but why not just write small scripts to mimic whatever dangerous utili [...]
2010-06-05 15:17
I thought about stubbing out t he python call to the process in the current process, but I want something which stu [...]
2010-06-05 14:47
Hmm... if Mock isn't flexibl e enough to handle mocking pro cesses adequately then I'd lik e to know how it could b [...]
2010-05-19 10:27
Hey, maybe it's a stupid new bie question, but where and ho w exactly should the patching of the core take place? [...]
2010-05-04 14:36
I used Qemu and VirtualBox pre tty extensively back when I wa s working for the OLPC, but mo st of the stuff we were [...]