Recently, I had to compare several charting toolkits. Amongst the charting toolkits out there, I found three different ones that suited my needs, so I put them through their paces. They were: JpGraph, OpenFlashChart and RaphealJS. Just to be clear why I left some toolkits out, here is a list of the requirements I used. The toolkit we end up using must be:

  • freely redistributable. This will be incorporated into the GPLed iHRIS Suite so a proprietary license means we can’t ship charting with the software.
  • look good. Who wants ugly charts?
  • work on Internet Explorer 6 and above. There are a few toolkits out there that require <canvas< support and at least one does not support excanvas.
  • currently maintained. Many nice charting projects haven’t been touched in two or more years. I’m willing to fix bugs if I need to, but I’d like to know that I’m not alone.

All three of the charting libraries that I tried fit this criteria. After putting the three toolkits through their paces (source included), which one did we ultimately choose? Right now, we’re going with RaphaelJS — we were using a Flash-based toolkit before and wanted to rid ourselves of that dependency, and, since our primary server target is Ubuntu, JpGraph’s lack of anti-aliasing with Ubuntu’s PHP GD library knocked it out. I’ll try to post an update if I come across anything new.

Ok, it’s been a couple of weeks since I posted the 64bit Linux installer for Google Gears. And some people have asked for the diff or a smaller installer. Fair enough. There they are. The directions for compiling your own are simple enough. Here is a cut-n-paste list of directions:

svn co http://gears.googlecode.com/svn/trunk gears  cd gears  curl http://mah.everybody.org/gears.diff | patch -p0  chmod +x third_party/gecko_1.9/linux/gecko_sdk/bin/xpidl  cd gears  make

If you look at the diff, you’ll see there is nothing particularly 64bit-ish about it. Its mostly just fixing warnings and declarations. So the real question I have is: Why doesn’t Google offer 64bit builds? (Now, if only I could come up with an Ubuntu package for this…)

Universal Health Coverage is coming! Universal Health Coverage is coming! Get out your guns! There is an enormous amount of fear mongering going on around the issue of Universal Health Coverage (UHC). From the UHC advocates, we hear about scary medical bankruptcies. From the UHC opponents, we hear that this is just a way for the government to run our lives. In fact, that last article was sent to me by an old college friend. “Is this the health care bill you want?” she asked. (Peter Fleckenstein (aka “the fleckman”), the creator of this “analysis”, posted a complete copy on his blog.) Well, if its as bad as the tweet-filled weblog post makes it out to be, no, I don’t want it. A couple of points.

  1. Mr. Fleckenstein and many reactionaries harbor a deep suspicion of bogeymen such as ACORN and illegal aliens. These bogeyman don’t scare me. I will totally ignore those sections of the criticism. I don’t care if the government supplies health care for members of ACORN. And even illegal aliens are people who sometimes need health care. Which part of “Universal” did you not understand?
  2. The bill being referred to, HR 3200 — “America’s Affordable Health Choices Act of 2009” — is over 1000 pages long. I don’t have time or interest to read every page. What I do have time to do is fact-check statements about the bill that I find alarming. Good thing “the fleckman” provides direct pointers.
  3. This is the House bill. The Senate bills up for consideration aren’t finished. One doesn’t include a government-run plan — something that seems to be the biggest sticking point for many of the article’s complaints. I am personally more comfortable with the “co-op” idea of the Senate Finance Committee’s bill — it sounds similar to Germany’s version of UHC.

With that in mind, lets look at a few claims:

  1. There will be a government committee that decides what treatments or benefits you get. (Sec. 123) The actual text says: “Committee to recommend covered benefits and essential, enhanced, and premium plans.” There is a big difference between a recommendation and a decision. As far as I can tell, no one is going to stop you from paying for extra treatment if you want it.
  2. Your health care is rationed!!! (p 29 ln. 4-16) The actual text referenced here has nothing to do with rationing health care, but with how co-payments on the public option will be adjusted.
  3. Government will have “real-time” access to individual finances. (sec 163) This is a modification of the onerous HIPAA regulations. The addendum the bill puts in does, indeed talk about “[enabling] the real-time (or near real-time) determination of an individual’s financial responsibility”. But again, this isn’t mandating access to your individual finances. Instead, it seems to be saying that they want universal standards for determining a co-pay or your liability for a specific treatment or office visit instead of the current system — which involves multiple rounds to the insurance company.
  4. Government will have direct access to bank accounts. (sec 163) The actual text here: “enable electronic funds transfers [for] … health care payment and remittance advice”. This isn’t government access — this is the access for the health care provider. And enable processing isn’t the same as forcing individuals to surrender information.
  5. Government will tell doctors how much they can charge. (sec 225) Just like they set payment levels for Medicare and Medicaid. Doctors are not obligated to accept the government plan. If you want health care from a doctor who doesn’t accept the government option coverage, then you can get it, provided you can find a way to pay for it.
  6. Employers must enroll employees into the public plan. (sec 312(a)) This section is talking about how an employer can meet the government requirements. One of the requirements is “automatic enrollment”. Part (c)(2) of this section explicitly states that an employee may make “an affirmative election to opt out”. And the plan doesn’t have to be the government option. If the employer offers adequate private insurance, then they meet the criteria.
  7. States give up some of their State Sovereignty. The horse is long ago out of the barn. When my friend and I were in college in New Orleans, there were news stories about a drinking age being imposed on the Quarter. Previously, it was illegal to buy alcohol if you were under 18, but not to sell it to anyone under 21. This makes an incredibly hard law to enforce. The federal government, in order to bring Louisiana into compliance with the rest of the country’s drinking laws, threatened to withhold federal money for roads if the laws weren’t changed. You can argue that this infringes on a state’s sovereignty — but no one is forcing the state to take the money. If it wants it, it has to change. If it is willing to fund its own road system entirely, it can leave the laws as is. This is a pattern the federal government has repeatedly followed when dispensing federal money. It has withstood Supreme Court challenges on the basis that it infringes a state’s sovereignty. But the state, if it really wants to be sovereign, can opt-out of the federal money.

The fear-mongering continues, but I’ve got to get to bed. The pattern I see here is that Mr. Fleckenstein is skimming (understandably) the 1000+ pages of regulation looking for alarming phrases and not bothering with the context. He ignores other parts (like the religious conscience exception on p170) completely.

Often, when setting up email on a server, you want to receive email from local processes (cron jobs, etc) but don’t want email accounts to be abused by spammers. For example, on Ubuntu systems you might have a cron job that runs as www-data that you want to get mail from, but you don’t want spammers sending email to www-data@example.com. I just had a client ask me to fix this problem for them, so I thought I’d share the solution I came up with. Typically, the /etc/aliases file directs mail from all these extra accounts (like www-data, nobody, etc) to root and you’re expected to set up an forwarder for root (e.g. mah@example.com). Instead of directing mail for all these accounts to root, I created a locked out account. The only purpose of this account is to verify that only locally generated email is sent on to the end recipient. No more Viagra spam for www-data@example.com! To set up the locked out account:

$ sudo /usr/sbin/useradd localmail  $ sudo /usr/sbin/usermod -L -s /dev/null localmail  $ echo '"|exec /usr/bin/procmail"' | sudo -u localmail tee ~localmail/.forward  $ echo <<EOF | sudo -u localmail tee ~localmail/.procmailrc  # replace example.com with whatever domain locally generated email has  :0:  * !^Return-Path: .*example.com  /dev/null    :0:  !root  EOF

This works with postfix, but I haven’t tried other MTAs.

Last week was my first RAGBRAI ever. (Poor quality camera-phone RAGBRAI pictures here. They’re only meant to covey concepts, not realistically portray anything.) RAGBRAI and I are the same age and its a real shame that this is the first time I’ve been. We’ve both been around since 1973. Some bits and pieces from my first RAGBRAI, recorded here without too much organization:

  • The first night we got there we found a county-fair-like atmosphere in the small town’s town square. It was as if the whole town had come out, but the town was made up of 10,000 cyclists and their families and, instead of staying in one place, the county fair covered 70 miles of roadside.
  • It rained the first night. Thunder and lightening woke up Jim (my cycling buddy) at 3AM. We both had trouble getting through the night. But we were both up with the tent packed and on the road by 7AM.
  • The first day of my ride (Thursday) included an optional 27 mile loop to bring the day up to a full century (100mi). Jim and I split up and I took the century route. I quickly met a 60 year old contractor and we spent those 27 miles talking about work, family, death, and changing times. It was a great ride. We split up when I decided to take a ride in one of the ultralights that a group of pilots had set up beside the road.
  • I didn’t get my “century patch”. This is kind of disappointing since I learned later that everyone who rode the century route could get the patch. Ride enough RAGBRAI centuries and you get to plaster a jersey with them.
  • By the time I arrived at that night’s campsite, Jim had been there for two hours and had the tent set up. We had a choice of the primitive shower my team (the Road Hogs) put together or a $5 group shower. I was already soaked by the rain that came down during the last half hour of my ride. I chose the makeshift shower instead of paying $5.
  • Pie! Practically every small (and medium) church along the route was selling pie or some sort of food. Pie is an essential part of the mythos of RAGBRAI — so much so that this year’s RAGBRAI poster depicted the ride stages using a pie chart — made up of pictures of a real pie being consumed.
  • As a result of all the pie, as well as home-made ice cream and other heavy food, I actually managed to weigh in a couple pounds heavier at the end of the race. This, despite the 4000+ calories that the ride took each day.
  • The thousands of cyclists riding 450 miles across Iowa were not the insane ones. Well, not the *most* insane ones. There was a woman attempting to run the 70+ mile route each day. I heard that she was admitted to the hospital at least once, possibly twice.
  • The age and size of cyclists ran the gamut. Let no one say they’re too young, too old, or too fat to ride RAGBRAI. I saw men on recumbent who were easily 350lbs+. Fathers and mothers brought their kids on third wheels or tandems. I even saw one young couple on a tandem pulling their 2 year old in a bike trailer. Most of the men on my team were retirement age or older. One father from St. Louis told me that the team he was with was made up of a few different families with at least three different 11 year olds.
  • Jim and I fell into a rhythm: we would ride together in the morning and then make our way to that night’s camp site separately. The third and last day, only 40miles, we split up after grabbing coffee (“Organic, Fair Trade!” the proprietor would repeat at every sale). Feeling relatively awake, I started pumping the pedals. I spent the last 20 miles that day chasing a cyclist from the Air Force cycling team. We blew past everyone at 23mph. In the end, he outlasted me, but it was a blast.
  • Some people treat this rolling town as a big party and stop in every town along the way to drink. Don’t try this at home. It is only possible because of the sheer number of cyclists, the state police, and Ambulance drivers every few miles along the route. The partiers don’t generally arrive until sunset — about 9pm at night.

I plan on doing the entire RAGBRAI next year. I’d love to get a tandem so I could take two of my kids for at least part of the day. Highly recommended, even if you aren’t in that fit or are just a casual cyclist. The chance encounters were a great way to restore my faith in humanity. The party atmosphere and conviviality made the time on the road a ton of fun.

I’ve gotten some feedback on the mediawiki mode I’ve been working on.  So I’m releasing a new version.  Some highlights:

  • Now works with HTTP Auth (I’ll write a seperate post on how Emacs handles credentials for HTTP Authentication).
  • Introduced tab-completion of sites.  If you have multiple MW sites set up that you work on, this makes switching between sites super-easy.
  • Started working on making it more XEmacs compatible.  As far as I can tell, XEmacs lacks the Unicode support that GNU Emacs has.  The released version of XEmacs also lacks the POSIX character classes for regular expressions and ships with a very out-dated version of url.el.  All these combine to make it very difficult.  But do-able.  I’m surprised there are still XEmacs users, but if it doesn’t cause me too much pain, I’ll help them out.
  • Misc other clean up (including making the url.el wrappers much better).

Since I run 64bit Ubuntu, I couldn’t use use Google Gears. Which was annoying. The Google Gears site says 64bit OSes are not supported. But it is open source. So I grabbed the source code, tweaked a few things here and there and I now have Google Gears up and running on my 64bit OS. It hasn’t crashed and burned yet, but I haven’t really tested it heavily yet, either (suggestions welcome). Anyway, here’s the XPI to install it. I’ll post the source soon. Or maybe just the diffs to the Google Gears list.

m4s0n501

The crude distinction between genes as implacable programmers of a Calvinist predestination and the environment as the home of liberal free will is a fallacy.

This sentence is the sum of what Matt Ridley does so well in Genome. He takes conventional wisdom and turns it on its head. He doesn’t shirk from the most dangerous ideas that can accompany genetic determinism — eugenics, selecting for ability — but he also wraps up his book with a very good argument that free will and determinism are compatible. Yes, you may have a gene that makes it means that likely develop Alzheimers. But that doesn’t have to run your life. And then he flips it around: isn’t it better for you — including your genes — to determine what you become than for someone else — the state, your peers, or even your parents — to proscribe a path for you? I have my own Libertarian tendencies (strongly tempered by communitarian Orthodox Christianity), so I find his reasoning pretty compelling. Matt Ridley is a special kind of journalistic genius. He can wade through volumes of technical arcana and create something like Genome, a very readable, very enjoyable, book. If you want an overview of what we know about genetics (or what we knew 10 years ago, at least) this is a great place to start. But, the book is over 10 years old. A lot has happened. He hints as much when he talks about developments in genetics that happened in the decade leading up to the publication of the book — sometimes dramatic developments. The story wasn’t finished when he wrote it and I am starting to look around for something more up-to-date than this. Like any good author, he has captured me and left me wanting more.

This week I’m at the Global Health Council’s conference in Washington D.C. IntraHealth (my employer) is working hard to promote our work in Capacity building and, especially, the work we’ve been doing in iHRIS and other projects with Open Source Software. Listening to great speakers like Hans Rosling of Gapminder.org is always fun and entertaining. Hans promotes a fact-based world in a way that challenges a lot of our assumptions about the world and isn’t afraid to kill sacred cows. “You should forbid the discussion of ‘HIV in Africa’” he said at one point after presenting data that showed the differences of infection rates across the continent. (I had a chance to meet Hans and talk to him about the iHRIS software when he came to IntraHealth’s event Wednesday night. He asked lots of great questions.) But it is often said that conferences are most useful for what happens in the hallways, not the main sessions. From the people I met during the conference, it made my time at the GHC36 much more valuble to me and, I hope, IntraHealth. Here are some of the more interesting people that I met at the conference:

  • Martin Namutso — Actually, I met Martin last year in Uganda when I helped him implement a new Knowledge Management portal for the Ministry of Health in Uganda. He works as an Open Source developer in Uganda, implementing Open Source solutions like iHRIS. It was good to catch up with him and talk about future prospects. I especially like the story Martin tells about his decision to focus on Linux and Open Source right out of school in order to compete for different jobs than most of his Microsoft-focused classmates.
  • Paul Biondich — Paul is one of the creators of OpenMRS. He’s a pediatrician and software developer bringing an Open Source EMR (Electronic Medical Records) system to low-income countries. When I mentioned that I had worked on a pilot project in which I created a PHP interface into the OpenMRS’s database schema, he asked for my help in maintaining the PHP interface to the OpenMRS API in any future work I do. I hadn’t found this when I was looking before, so I readily agreed. Working with OpenMRS’s API instead of the database directly would be a much more robust solution to building PHP applications that work with OpenMRS.
  • Jørn Klunsøyr — Jørn is a registered nurse and software developer at the University of Bergen where he works on mobile projects like EpiHandyMobile to make form submission with cell phones much easier. Using a web-based application, it is possible to build forms and push them to a low-power J2ME cell phones. Later, after the data has been gathered, the data is sent from the phone via SMS, GPRS, or BlueTooth to the EpiHandy server and, from there, to applications like Clinica and OpenMRS. When he demonstrated the software, I immediately saw applications for iHRIS: making it easy to fill in the iHRIS information in the field when a laptop and Internet access might not be available.
  • Eric Woods — Eric Woods is the Executive Director and Founder of Africa Aid. His org is helping distribute cell phones to doctors across Africa. While the phones are useful in and of themselves, he is looking for applications and partners that would make the phones that much more valuble for the doctors. One example he thought of was a cell phone directory. Making the contact information in iHRIS available to other doctors would make it possible for doctors to more easily consult with each other and develop relationships that they might not otherwise.

These are just a few of the people that stand out from those that I met. After talking to them, I can see ways that we could work together and I hope that before we meet at GHC next year, I will have worked with a few of them.

My friend Jim has a couple of good posts on listening to people from the “ex-ex-gay” movement. I think he is right: the Church does need to hear from people who have tried to convert from homosexual to heterosexual — especially those Christians who believed they could “convert” their sexuality from being gay to being straight. We need to listen especially closely to those men and women who have sincerely attempted to alter their own sexual orientation and failed. Most importantly, those of us (and, yes, “us” includes me) in the Church who believe that homosexual relationships are sinful need to listen. Before I tell you what I hear, let me explain a bit about where I’m coming from. It is no surprise that there are a lot of confused people out there. And by confused, I don’t mean the men and women who are homosexual. No, I mean the people who think that being a homosexual is, in and of itself, wrong. There is nothing wrong with being gay. I would go further, though, and say that if you are not actively seeking a relationship with God, then you are not better off in a straight relationship than in a homosexual one. The primary concern is our relationship with God. Everything hinges on that. In fact, morality doesn’t matter. Morality plays no role in our relationship to God. This should be clear enough from story of the Publican and Pharisee that the Orthodox begin each celebration of Great Lent with. The tax-collector was the morally disreputable person in Jesus’ day — the person everyone knew was doing wrong, cheating them out of their hard-earned money. In his place, I can imagine a gay man, someone all conservative Christians would “know” is a sinner. The Pharisee stands there proclaiming his piety, ridiculing the tax collector. Likewise, I see many conservative Christians holding themselves up as moral examples, making a very public display of their moral superiority. They kick and scream when they feel they’ve been wronged — when someone has stripped their courthouse of the Ten Commandments or a crèche — and loudly condemn those whose sins are more public. The answer is not to hide your sin, not to be discreet about it. “All have sinned” and no one persons sin is any less or any more than anyone else’s. No one is perfect. No one can exalt themselves above another or look down on another. Jesus told us as much when he said it was the tax collector, not the pharisee, who went home justified. Which means, of course, that I’m no better than the most flamboyant, promiscuous gay man. In fact, I have no right to comment on anyone else’s sin. I’m reminded of the story of Abba Sisoes from the fourth century:

Considered to be a very holy and venerable man, many drew near to Abba Sisoes while he was on his death bed. In his last moments, he saw choirs of angels and archangels, not to mention prophets, Apostles and saints. Wondering what was going on, those gathered around him asked, “With whom are you speaking, Abba?” “With the angels,” he replied, and indicated that he was seeking to do penance before he left this life for the next. Knowing his holiness, one friend said to him, “You have no need for penance, Father.” Abba Sisoes replied, “I have not yet begun to repent.”

Here is someone no one thought could be condemned, yet, truly embodying the spirit of the publican, he felt he had not yet begun to repent. At this point, I hope I’ve made myself clear: I am in no position to proclaim my own piety or tell others that they are condemned. So what does this all have to do with listening to “ex-ex-gay” people? One thing I hear is a gay man (Peterson Toscano, founder of Beyond Ex-Gay) who struggled for almost 20 years and spent over $30,000 to become “straighten” himself out. It didn’t work. At this point, it sounds like a bad Scientology tale. The first thing that comes to mind (and Peterson says as much) is the obsession with sex. Since the focus is on sex continually, it heightens the awareness and temptation. In another video, Peterson even says that he had more sex when he was trying to “de-gay” himself than he has since he gave it up. But that part of it, obsession with sex, seems to be a part of American Christian culture. Witness sites like Book22.com (a Christian sex-toys web store), or Christian sex toy parties, or even Exodus International’s methods — at least, those Peterson describes. The focus is on sex. Sure, we pay lip service to putting God before all else, but the idea of a married couple voluntarily abstaining from sex? That would be unheard of! Lifelong voluntary “marital fasting” that some saints of the Orthodox church undertook seems impossible and ridiculous to us. As one person described this fasting:

Rather than repudiating the legitimate pleasure taken in eating and in marital relations, fasting assists us in liberating ourselves from greed and lust, so that both these things become not a means of private pleasure but an expression of interpersonal communion.

The second thing I hear is the singling out of this particular sin. As Peterson says: “I thought I couldn’t be gay and a Christian.” While all Christians are called to live pious lives, many of us struggle with a particular sin or temptation. Sometimes, we sin and are not aware that what we do is sin. So, again, the focus on homosexuality, singling it out for special attention and treatment, and not on whether or not homosexuality is a sin, is where we’re going wrong. Consider the advice that St. Theophan the Recluse gave to a young girl: When confronted with a thought to pursue some sin, don’t fight it. Don’t grab onto it to beat it into submission. Instead, let it pass and immediately pray the Jesus Prayer: “Lord Jesus Christ, have mercy on me, a sinner!” By turning our attention to God instead of the thought to sin, we redirect our energy. Note, also, the parallels between the Jesus Prayer and the prayer of the Publican. Finally, and probably most controversially, it makes me wonder about things that we universally agree are wrong today, but that, at the time the New Testament was written, weren’t seen as huge sins. Slavery, for example. I see no evidence that new Christians freed their slaves or started treating them humanely. I also know of no restrictions on ordaining slave owners. Yet, today, we see any kind of slavery, not just the brutal kind sometimes practiced in the early American South, as universally wrong. So what’s the point of all this? What have I found from listening to this ex-ex-gay man? Well, to be honest, I haven’t learned anything. I have taken the opportunity, though, to think through my prejudices and to clarify them a bit. Peterson deserves our compassion: he has been ill-served by a church that tried to take him down a road he simply couldn’t travel — by a church that made his sexuality more important than his relationship to God. The focus should, as always, be on God, not our sin.