We went to see Sarah's cardiologist the week after she was discharged from
hospital, and he said that looking back over all of the echocardiograms that
have been taken in the 18 months or so that he's been following her, it
looks like her aortic
aneurysm has gotten a little bit bigger.
It's still below the size that they'd normally operate at, but he said that
in his opinion it should be repaired before attempting another pregnancy, to
play it safe. He even said that afterwards, Sarah could go back to doing
triathlons, which is a big step back towards a normal life.
So on Monday, we had an appointment with Dr Craig Miller,
who is apparently the best cardiac surgeon in the US, and one of the top
three in the world, when it comes to aortic aneurysm repair whilst being
able to save the heart valve.
We'd done a heap of reading up on Dr Miller before the appointment, and the
cardiologist's clinic administrator had told us about him as well.
Apparently he's a real character. He certainly looked it from the staff
photo (linked above). In reality he looked much more like this.
But he's certainly a real cowboy type. We saw his nurse practitioner on
Monday before we saw him, and his nurse practitioner was this moderately
pierced, cowboy boot wearing, "y'all" speaking kinda guy, who really knew
his stuff. In fact we exhausted all of our questions that we had for Dr
Miller on him before we even saw Dr Miller, because he was running a bit
late with the previous patient.
This is where Sarah's got a pretty detailed
write-up of what they're planning on doing. They're going to replace
more of the aorta than they would otherwise (because the enlargement seems
to be continuing further up the aorta), which makes the surgery a little
more involved, in that they're messing with the arteries that lead up to the
brain, so they've got to some more funky bypass work, and lower her core
temperature so her brain copes with the blood flow being monkeyed with.
Dr Miller was very softly spoken, and a lot older looking than I'd expected,
given the whole cowboy hat thing. He seemed really nice and thorough, and
explained everything. He also showed us what a mechanical valve looked like.
The reason sparing the valve is so important is that the alternatives if
they can't are either a pig's heart valve or a mechanical one. Both have
their drawbacks.
A pig's valve won't last the rest of Sarah's life. She'd need to have valve
replacement surgery at some point down the track (I think they said about 8
years, although they wear out faster in younger people).
A mechanical valve requires you to take blood thinning drugs for the rest of
your life. One of the side effects of these drugs are birth defects. It's
also audible from outside the body.
We got to see (and keep) a sample of the Dacron tubing that they use to
replace the part of the aorta they're removing. I was totally taken aback by
the diameter of it. I hadn't sat down and really thought about what 4.4cm
(which is about what her aneurysm is currently at) really looked like.
The operation is likely to take 8 to 10 hours. I'm not looking forward to
that waiting game. Dr Miller said the procedure, whilst sounding pretty
bloody scary has about a 1% risk. I'm not exactly sure what that is a risk
of though.
Sarah's booked in for January 3 next year.
The road ahead is still long.
SELinux is entirely correct about disallowing dynamic code generation, as it is a major security risk.
Disregarding Just-In-Time compilation, the main legitimate need for dynamic code generation is to support (downward) closures that are ABI-compatible with normal C functions. GCC’s local functions extension of C is one example, and many non-C languages need them badly in their foreign-function interfaces (Haskell is one, Ada I’m told is another).
A closure is a function pointer that refers to a function that is local to another function. That function has access to the local variables of the parent function, and this access is provided by having the caller give the callee a static link (a pointer to the parent function’s stack frame) as a hidden parameter. If the call is direct (that is, not through a function pointer), the caller knows the appropriate static link and can just pass it. The trouble comes with function pointers, as we need some way of including the static link in the function pointer.
The simplest way is to have function pointers be two words long; one of the words contains the classical function pointer (that is, the entry point address), and the other contains the static link. Unfortunately, the prevalent C ABIs, including the SYSV ABI used by GNU/Linux, mandate that function pointers are one word long. The only way I know to work around this is to dynamically generate, when the function pointer is created, a small snippet of code that loads the correct static link to the appropriate place and jumps to the actual code of the function, and use the address of this snippet (usually called a trampoline) as the function pointer. The snippet is generated on the stack or in the heap, and thus requires an executable stack or executable dynamic memory.
It’s time to fix the ABI to allow for proper two-word function pointers.
The C standards committee is apparently preparing to revise the C standard. The proposed C1x charter sets the goal of the committee draft’s completion in 2009, with publication of the new standard in 2012. The proposed charter adds security as a significant new goal for the standard:
Trust the programmer, as a goal, is outdated in respect to the security and safety programming communities.The proposed charter also sets the requirement that all new features must have a history in non-experimental compilers and be in common use.
Well, still in the planning stages...
The general idea is to get a largish house in Denmark for one or two weeks, share the cost among ten people, and live a life of debauchery for one or two weeks, probably in the first or second week of January.
I decided to experiment.
If you experience the following error:
W: GPG error: ftp://ftp.cyconet.org etch-backports Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 8B78E5581BCDFF8C You may fix it with something like:
# aptitude -t etch-backports install debian-cyconet-archive-keyring backports, Debian, Packaging, planet

If you know of an occasional passerby who takes the time to extract the contents of Debian source packages to see whether the RFCs are here or not, please let us know. We are always looking for new potential contributors.— Josselin Mouette

Any sufficiently advanced stupidity is indistinguishable from malice.(I have no attribution to give. Googling for it gives multiple, mutually inconsistent attributions.)
mod_wsgi 1.0
Yesterday the official 1.0 version of mod_wsgi was released and uploaded to unstable (the binary package you want to install is called libapache2-mod-wsgi, in case you were wondering), so I think it's a good time to blog about it.
Mod_wsgi is an Apache module which can host any Python application which supports the WSGI interface (the reference is also available as package). Major applications and frameworks which are known to work well with mod_wsgi include CherryPy, Django, Karrigell, Pylons, TurboGears, web.py, MoinMoin, PyBlosxom and Trac. In fact every application which provides a WSGI compatible interface should be able to be hosted with mod_wsgi. The module is very simple to use, is very well configurable, documented, has a very active and responsive upstream author and is suitable for use in hosting high performance production web sites, as well as your average personal site.
There are two common ways of operation:
On your clients you have to modify /etc/snmp/snmpd.conf:
#com2sec paranoid default public
com2sec readonly default public
exec .1.3.6.1.4.1.2021.8.3 aptupdate /usr/local/bin/nagios-check-apt-updates
Get the check script to the client:
# wget –no-check-certificate \
https://kosh.ganneff.de/ganneffutils/nagios/nagios-check-apt-updates \
-O /usr/local/bin/nagios-check-apt-updates
# chmod +x /usr/local/bin/nagios-check-apt-updates
Allow the snmp user to make use of apt-get:
# echo “snmp ALL=(ALL) NOPASSWD: /usr/bin/apt-get update” >> /etc/sudoers
# echo “snmp ALL=(ALL) NOPASSWD: /usr/bin/apt-get –simulate upgrade” >> /etc/sudoers
Restart the snmpd:
# /etc/init.d/snmpd restart
Restarting network management services: snmpd.
On the nagios monitoring system you have to run something like this:
# /usr/lib/nagios/plugins/check_snmp -H <client> -t30 \
-C public -o .1.3.6.1.4.1.2021.8.3.101.1 \
-r “No updates available”
SNMP CRITICAL - *”Security updates (1): libkrb53; “* iso.3.6.1.4.1.2021.8.3.101.1=”Security updates (1): libkrb53; ”
After upgrading the client you should get:
# /usr/lib/nagios/plugins/check_snmp -H <client> -t30 \
-C public -o .1.3.6.1.4.1.2021.8.3.101.1 \
-r “No updates available”
SNMP OK - “No updates available” iso.3.6.1.4.1.2021.8.3.101.1=”No updates available”
Debian, opensource, planet
I've just accepted an job offer from Google and I'm now moving from Rio de Janeiro to Belo Horizonte!
I did upload a updated version of eGroupware to my pool. You can grab it from http://ftp.cyconet.org/debian/archive/bpo/egroupware/1.4.001.dfsg-2.1~bpo40+1/ or via:
deb ftp://ftp.cyconet.org/debian etch-backports main non-free contrib For installing the rules analog backports.org applies. Have fun! backports, bpo, Debian, opensource, planet
Earlier this year I blogged about using the twitter bot for Remember the Milk. I still use it fairly well, even though the SMS messages from the RTM come late a bit. It's working for me in order to get a good chain going for the thesis proposal. There are a couple other bots that I'm using which are on twitter as well.
(In other news, I just uploaded darcs-monitor to Debian. It’s sitting waiting for NEW processing. In the meantime, you can get the package at the upstream distribution site.)
Next.