Monthly Archives: March 2015

How Tests Improve Code Structure pt 1

Hunger Tracker needs to persist data past the closing of the app.  Knowing nothing about Android I googled “android write to file” and used the first reasonable looking thing that came up.  This was sufficient to let me write to and read a file, which was good enough for a first try and powerful enough for me to release version 0.1.  But as I planned the next step I ran into problems.  The read function I found required me to specify the number of chars I wanted in advance.  I couldn’t spot the end of the file so I grabbed a fixed number of entries every time.  I could extract the data as strings but couldn’t figure out how to make a proper scrolling list (even though I’d done one in the Udacity tutorial).  Attempts at fixes felt muddled and high friction, which is usually a sign I’m afraid of losing data, either to a hard drive failure or to a introducing a bug and failing to detect it.

Step 1 in fixing this was setting up my github account so I had proper version control.  Step 2 was testing.  I spent a long while figuring how to properly test the kind of android class I was using (“android unit testing” being a surprisingly unhelpful search term), and then some basic tests of “The text fields that should be there, are they there?”.

The next step was to test the data storage.  But I couldn’t figure out how to unit test that.  If I tested whether the app was writing to the correct file I needed to look for the exact same file.  But that means updating the test every time I change the name of the file, which I didn’t want to do.  Plus seeing if the correct thing is written to it is ugly.  Tests should be atomic (meaning it doesn’t matter what order you run them in), but the file is persistent, meaning I either need to clear it every time or factor in what previous tests have done.  Plus I would have to shape the test around the exact storage format the app was using, but again that means making the test dependent on an implementation detail.  I could trigger writing and then reading and make sure the display element was correct, but that’s testing two different things and a unit test should only test one.

What I finally worked out was that the handling of persistent data was not actually a core function of HungerTracker’s MainActivity.  What I needed to do was separate out those functions into a separate class, and then use mock objects to make sure the expected calls were made.  E.g. instead of the app writing to a file and the test looking at the exact file and verifying the writing, the app calls the HungerTrackerWriter object.  The test swaps out the real HungerTrackerWriter with a fake one, and monitors that the expected call is made.  This leaves the HungerWriter proper tests blissfully unaware of the implementation details while still verifying that the app is doing what was expected.

[Technical details: somewhere I read that the android junit framework handled mocks easily. This was something of an exaggeration. It has built in mocking for a lot of Android specific classes, but nothing for user created classes. There are many well regarded Java mocking libraries, none of which provided comprehensive instructions that worked for me. Apparently they integrate weirdly with Android? My first round of mocking was hand-written, just so I could work on test code. I never did get the best regarded library, Mockito, working, but I eventually cobbled together a set of build instructions that made EasyMock work]

You might think that making that big a change in order to make something more testable is the tail wagging the dog, but as I was doing it something magic happened.  Those problems with reading exactly as many entries as there were and putting them in a list (as opposed to reading exactly 10 and dumping them in a string) were suddenly much easier to conceptualize.  What seemed so muddled when it was part of HungerTracker was suddenly easy to think about when it was part of HungerTrackerWriter.

If you are super curious, here is the code before the refactor, here is the code after, and here is the test code with mocks.

Prostaglandin, omega-3s, and health

My cat has lost weight since going on a special “I’m inbred and my kidneys don’t want to kidney” diet.  He’s also wheezing a lot.  My vet has recommended fish oil to get him some extra calories, and to fight the wheezing, if the wheezing is something something allergy something something prostaglandin.  She didn’t explain it very well, so I’m consulting with Dr. Internet.

Prostaglandins are lipids that send signals from a cell to itself or its close neighbors.  Prostaglandins take their name from the prostate gland, signifying the fact that they are produced and have effects in almost every tissue of the body.  This is what happens when you name things after the first place they’re discovered.  “Local signalling” covers a lot of ground, including constricting blood vessels, dilating blood vessels, inducing a fever, making you more sensitive to pain, digestive muscle contraction, digestive muscle relaxation, airway contraction, and airway relaxation.  So they could definitely either cause or cure my cat’s wheezing.

What about fish oil?  Prostaglandins are made from fats, but less so from omega-3 than any other fat, and their prostaglandins are less active than others.  Fish oil is rich in omega-3s, but it’s not the only source, as soylent has been working so diligently to demonstrate.  That’s an argument for swapping omega-6 for omega-3, but it doesn’t mean adding additional omega-3s will be any help.  What is an argument for straight up supplementation is that all fats are converted to prostaglandins by the same enzyme, which exists in limited quantities regardless of the amount of fat available.  Omega-3’s slow conversion rate effective blocks the conversion of the more inflammatory omega-6s.  So while I don’t see any reason fish oil would do better than other sources of omega-3s, this certainly seems like a plausible treatment with limited downsides.

Now is as good a time as any for a general omega-3 vs. omega-6 lesson.  3 and 6 are different in ways I can’t be bothered to look up because it doesn’t matter; your body absolutely needs both of these to survive.  Presumably we adapted, more or less, to whatever ratio was available in the evolutionary relevant time period.  Unfortunately 6s have a much longer half life than 3s before going rancid, and everything in our modern food system pushes this- olive oil bred for shelf life, cows are fed grains, which have more omega-6s than grown plants because they don’t want their seed energy going bad either.  The end result is that the intake ratio of omega-6:omega-3 is extremely different than what our bodies expect, and this causes various problems, like maybe prostaglandin-mediated allergies and inflammation (source).

Video Games for Good

Extra Credits is a video series on game design and the game industry.  It has interesting insights I don’t see elsewhere, but it is also… low density.  You could compress most episodes into a single written paragraph and lose nothing.  I tend to watch them when being told the same thing over and over with completely unnecessary accompanying graphics is calming, rather than annoying, which isn’t very often, so I only just caught this video on whether games can induce empathy.

If you are not in the mood to be reassuringly talked down to, they helpfully provide a summary:

Many studies have investigated whether or not there is a link between video games and violence, but few have looked at the bigger picture. What is the correlation between video games and empathy? Since games put us, as players, in the role of characters who are not ourselves, asking us to understand their situation and the problems that they face, they have the potential to teach us about how to empathize with others. While many gamers have anecdotal evidence about games that made them feel a character’s pain, there’s a disappointing lack of formal studies into that side of the question.

Examples: This War of Mine, Cart Life

I didn’t think anything of it until a week later at my Effective Altruism meetup, when we were discussing egalitarianism/maximization.  In a nutshell, EA believes that all lives are equally valuable, so if you can save two lives for $n each or one life for $2n, the most moral thing to do is to save the two lives.  Phrased that way I don’t understand how it’s at all controversial, but in practice it comes up against many people’s instinctive priorities.  For some, passing over a homeless person to give to GiveDirectly doesn’t just give them fewer warm-fuzzies, it feels actively immoral.  Someone at the meeting suggested it was a matter of empathy- people naturally feel more empathy the more often they see someone, or the more they have in common with them.

This is  of course obvious, which is why so many charities try to up the empathy you feel for their beneficiaries, by implying you’re helping a particular person when you’re not, or just sending a letter with a few heartwarming stories of all the injured dogs they’ve saved that year.*  They do it because it get donations, but it’s very hard not to slide into poverty porn. I find those examples really manipulative, but I loved the ability to choose out specific recipients when donating to Modest Needs so clearly I’m just as susceptible.

This is where I thought of that Extra Credits video.  What if instead of telling people how awful extreme poverty is, we gave them a video game demonstrating both the difficulties poor people faced and the resources they used?  Some things I would like to include:

  • Trade offs, trade offs, trade offs.  Do you invest in your child’s schooling or new farming equipment?
  • Bee Sting theory– demonstrating how it is easy to do the right long term thing when you have a few problems, but when too much is wrong sometimes palliatives are all you can manage.
  • The importance of social capital.  The poor (both in the US and the 3rd world) get a lot of criticism for spending so much on alcohol and ceremonies, but the fact is that that builds social relationships that can be crucial later on.  This doesn’t mean spending a lot on booze and parties is optimal, but that the change must come at a societal level.
  • How many well intentioned NGOs fail.  E.g. my continuing hate for the play pump.
  • Ideally you’d like to convey the scope of preventable deaths.  I don’t know how to do that respectfully.  You could do something like Shelter or The Oregon Trail, where you go in knowing some characters will die and the goal is to save as many as possible, but that seems a little horrifically callous.

I have several ideas for how to do this.  You could do the trade offs with a choice mechanism like that of Depression Quest or Long Live the Queen.  Soha Kareem has has apparently done some great work with video games to express her experience of microaggressions and sexual abuse.

EA strikes me as having a real comparative advantage when it comes to producing video games, relative to other charitable movements.  And by “real comparative advantage”, I mean “lots of programmers”.**  None are games programmers specifically, but it might be a skill worth picking up.

*Pro-tip for my local humane society: this may not work as well on cat owners as you were hoping.

**We were up to two non-programmers at the last meeting.  High five.

100% Food versus Soylent

I really, really wanted to like 100% food.  It has so much going for it- made of actual grown food, high protein variants, convenient portable single serve containers, shipping time measured in days rather than months… Unfortunately, it is inedible.

And if I’m saying inedible, it must be pretty bad.  I drink Soylent at room temperature, and for a long time didn’t bother mixing up the little protein clumps that formed (although once I realized how easy to clean my blender was, I did mix it).  As I write this I’m consuming my smoothie with a spoon because I put in too many chia seeds and it turned into a gel.  I cannot drink 100% food.  I ordered the six-variant mixer (chocolate/plain and regular/high protein/low carb), but I’ve only managed to try two (one low carb, one regular) and one of those was a mere pinch.  Extremely diluted the taste is tolerable, but still leaves this unbelievably gross oil aftertaste/film in your mouth.  I won’t drink it and you can’t make me.

The single serve containers were a disappointment too. There’s not enough room in them to really shake up the mix, so you end up with a lot of dry mix protected by a layer of wet mix.  So 100% food’s only real selling point is that it ships quickly.

I’m not 100% happy with Soylent.  I would really prefer fewer digestible carbs and more protein and fiber, but that’s addressable with some flax seeds and additional protein powder.  I would also love it if they shipped in < 3 months, and didn’t tell me they were going to ship a month before they did.  But it is better than starving to death, which is more than I can say for 100% food.

How effective is volunteering at a suicide hotline?

Months ago my local EA group had a meeting around the concept of Effective Volunteering.  EA is not opposed to volunteering anymore than it it’s opposed to working directly for a cause, but it is more skeptical than the general population that this is the most effective way to help the world.  This doesn’t mean volunteering is bad, it can have all sorts of benefits outside of helping the world- building community, buffing one’s resume, and generally feeling good.  But if you want to justify volunteering on its helping-the-world merits, you have to compare it to the standard option of “work more, donate money.”

[I’m ignoring the argument that most people aren’t paid hourly because “learn skills to boost wages, donate excess” is an equally valid plan]

Based on the local discussion plus this post by Ben Kuhn, I propose that volunteering is most effective when some critical mass of the following are met:

  1. The product produced by volunteers is not the same as that produced by minimum wage workers (e.g. food kitchen volunteers are generally more cheerful than McDonalds workers)
  2. The volunteer has some comparative advantage in the task (e.g. pro bono work by lawyers)
  3. The activity does not take away from paid work (e.g.I have more hours in the week total than hours in the week I am capable of programming).

The problem is that 2 and 3 are often in conflict.  People’s comparative advantage tends to be used at work, either because that’s what led them to the work or they developed the talent there.  So it either has to be someone not capable of working regularly, or the person has to have two different comparative advantages.  I happen to think I fall into this category, because I’m very good at both programming and crisis chat counseling and they use entirely different parts of my brain.  And actually crisis chat makes a good play for having trait 1 as well: it’s heavy emotional work, and there are a lot more people capable of doing it 4 hours a week than 40.

Which got me thinking: how effective is crisis chat?  I’m fully prepared for the answer to be “not very”, it really seems like it’s on the less efficient side of things, but let’s run the numbers.

First step: how much does running a suicide hotline cost?  The first posting I found that listed a salary said $16.00/hour, and that’s for bilingual workers in an area with a cost of living 60% higher than the national average.  Let’s say $20/hour to include taxes, phones and computers, vacation time, etc.  GiveWell considers anything under $5,000 per life saved to be extremely cost effective, so to be competitive a hotline worker would have to save one life every 250 hours worked.  Statistics on chat line effectiveness are hard to come by because they’re anonymous by design, but I worked ~170 hours last year and I know for a fact I was 1/2 of a team that saved one life, and find it plausible that I saved more.  I work on the text line, which for various reasons is less likely to attract people who are imminently suicidal, so I suspect the phone line workers are more effective.  By this measure, suicide hotlines are competitive with GiveWell’s top charities.

The complication is that the hotline doesn’t do this alone.  I gave myself half a life because I called in a rescue for a phone worker who contacted me via chat, but that success depended on emergency workers finding the person and a mental hospital to take him in.  Malaria nets don’t work alone either (they can’t solve famine or war), but this seems more like evaluating the cost of the nets without the cost of employees to distribute them.  On the other hand, some percentage of chats may talk people out of suicide without requiring an active rescue.  If I help a person form a plan to keep themselves safe until the urge passes, that’s incredibly effective.

The other way to look at it is what would people pay for the service.  My gut feeling is that the service I provide is more valuable than anything the visitors could buy with $20*.  The most comparable services, therapy and psychiatric visits, start at $60/hour.  Crisis lines are not a substitute for psychiatry or counseling, but a marginal hour of chatting may be a reasonable substitute for an hour of either, given how much of their sessions is empathetic listening.    Even if hotline workers are not as effective at listening because they are lower status, that’s still substantial savings.  Plus we get a good chunk of people are uncomfortable talking to a real professional because they are so high status, but feel okay talking to us.  On the other hand, I’m pretty sure most of the bottom billion would take the $20, or even $2, over an hour talking with me.  Competitive within the sphere of 1st world interventions is not the same as competitive.

Still, that’s a much higher effectiveness rate than I was anticipating.  And it manages to hit all three of my criteria above (for people who are good at listening but don’t do it professionally), which is a pretty neat trick.  Unfortunately it does not work for Kuhn’s use case at all, since he was looking for things EAers could do as a group on an ad hoc basis.  I suspect this is not a coincidence.

*Testing this directly would be hard, since there’s nothing to stop someone who wants two hours of chatting to say they want five, but will accept two + $60.

Is Nicotine Harmful?

Tobacco is so definitely harmful  I’m not even going to cite a source for that statement.  But tobacco contains a lot more chemicals than just nicotine.  TobaccoHarmReduction.org says nicotine isn’t harmful, but TobaccoHarmReduction.org also says nicotine isn’t addictive, so I’m not giving them a lot of credit as a source.  Wikipedia also says pretty nice things about nicotine, but exactly how nice seems to depend on what day I check.  The page appears to be edited a lot, and sometimes claims it isn’t addictive.   So I’m going to fact check Wikipedia very carefully here.

Let’s get some basic things out of the way.  Nicotine is addictive to at least a certain percentage of the population. You can see that in science or in anyone you’ve ever watched try to quit smoking with and without the aid of nicotine supplements.  It is probably true that propensity to nicotine addiction varies in the population, and some people can try it a few times or even use regularly without becoming addicted, the same way opiates are insanely addictive to some people and I actively dislike them.  But most people with that propensity won’t ever start using tobacco because smoking is disgusting and if your brain doesn’t make you do it, you won’t.

Nicotine imitates choline in some but not all choline receptors (conveniently, the ones it affects are called nicotinic receptors).  Neurotransmitters are weird and powerful and we don’t fully understand them.  At best, nicotine could be in the same category as medications meant to treat depression, which have some costs and some benefits, all of which vary widely between individuals, and whether a given person is better off with or without it depends heavily on their exact mix of genetics and current environment.

Nicotine is poisonous in large enough quantities.  This is not necessarily damning: lots of things are poisonous in large doses including vitamin A, which has vitamin right in the name.

Which one will be your last?
Which one will be your last?

More to the point, nicotine is poisonous because it imitates choline, and in large doses completely borks that system.  This is not entirely dissimilar to the way SSRIs (commonly used as anti-depressants) can in large doses cause serotonin syndrome, and the same mechanism that causes that makes SSRIs incredibly useful for treating depression.*  Coincidentally, nicotine maybe also treats depression.

Nicotine promotes the growth of new blood vessels.  If you have just had an injury this could be good thing (although I found no data on nicotine specifically, and tobacco is definitely bad for recovery), but it also makes it easier for tumors to feed themselves, which is extremely bad.  It may also lead to hardening of existing blood vessels, which is pretty much always bad.

This may or may not be related to nicotine’s ability to temporarily raise blood pressure.  I would super like to tell you if or how they are related or at least if they are happening on the same time scale, but I could not find a primary source that measured the immediate cardiac of nicotine (as opposed to tobacco) with a sample size of more than 16. There are lots of secondary sources that say the increase in blood pressure/narrowing of capillaries is immediate, but they seem to be scare monger sites against nicotine use for harm reduction and don’t draw a strong distinction between tobacco and nicotine.  On its own this is worrisome only if it pushes your blood pressure to problematic levels, but if the process also leads to permanent hardening of blood vessels, it’s pretty concerning.

Nicotine also has some cognition boosting effects (even in people with Alzheimers)** similar to caffeine, appears to either partially treat schizophrenia or reduce the really awful side effects of anti-psychotic, and maybe Parkinson’s as well.

Based on this, I’m pretty confident that we should be investigating nicotine-derived treatments for a number of issues, and if I get Alzheimers or Parkinsons I will probably pick up a patch the next day.  But I still have serious concerns about its addictiveness that  would keep me from using it as an everyday cognition enhancer.  But I abstain from caffeine almost 100% of the time, so clearly I’m on the low side of risk tolerance in this area.

*Probably.  No one actually knows how SSRIs help.

**You remember last month when a study came out suggesting anti-cholinergics increased propensity for dementia, and I complained that they only studied drugs that affected muscarinic receptors, not nicotinic, so drugs inhibiting nicotinic receptors might be fine?  This would suggest I was wrong.

Every conversation I’ve ever had about opioid pain killers.

Me: The mild ones do nothing for me and the heavy ones are so unpleasant I’d rather be in pain.  Even when I got dry socket I only took them to sleep, and that was after days of going without.
Them: Opiates aren’t supposed to make you stop being in pain, they’re supposed to make you not care.

I’m not sure how they think this is helping. If I’m complaining about pain the drugs have pretty obviously failed at making me not care. I am especially confused by medical professionals trying to talk me into dangerous, addictive drugs I’ve said I don’t want.

Side note: Dry socket is a condition in which the blood clot that forms in the wisdom tooth extraction site dissolves, exposing a nerve to open air. I’m not sure what kind of pain you’re supposed to be in after wisdom teeth extraction, but ask your dentist, and if it’s more than that get help immediately. Especially if it gets worse over time.

Testing Android Software

Dear frantic and desperate programmers: if you are looking for an example of a populated android activity test file, go here.

Dear everyone else: you may wonder why that was necessary.  Let me explain.  There are five billion tutorials on how to build android apps and two on how to test them.  Both are full lessons requiring a lot of knowledge of android to make sense of them and are based on Eclipse (deprecated) and not Android Studio, neither provides a decent sample file for steal-and-mutate learning.  For those of us who want to write tests because we are learning to program for android and are worried a new technique might break our lovingly created app in ways we don’t know enough to fix, this is frustrating.

[For the slightly more advanced among you: yes, you could try searching github for the name of the class you know must be involved in your testing.  Unfortunately the push for testing means that 95% of what you find are stubs with no actual tests.]

To be fair, I’m pretty weird in wanting to write tests so early.  I complained to a stranger at a party that work on Hunger Tracker had stopped because I couldn’t find an android testing tutorial and he expressed surprised, because he’d watched people release much more complicated apps without a single automated test.  I know that works for some people, but it would drive me absolutely nuts.

The point of testing isn’t to make the product work.  The product is going to work, or you’ve failed.  The point of testing is to make your work on the project faster and less stressful.  Every time you change anything, and sometimes even when you’re sure you’ve changed nothing, you risk breaking something. The more time or changes that pass between you breaking something and you noticing it is broken, the more effort it takes to fix.  You could manually test every time you change every little thing, but it’s boring, time consuming and prone to error.  Computer science selects for the opposite of people who are good at doing the same thing over and over again.

So you do the programmer thing and write a program to do it for you.  It’s just that the program is tests of the software.  You can run this new program as often as paranoia or check in rules compel you.  This frees up your time from manual testing, your mind from tracking your changes and worrying what might possibly have broken, and decreases the time to notice breaks. The mere act of writing the tests often encourages good code structure by making you think about it rigorously, the same way writing a program makes you define your problem until you practically don’t need a computer to do it.  And in my particular case, when the project is as much about learning as it is producing anything, it’s good practice.

Good testing is especially critical in my case, because I’m working on this project in little bits at a time.  If I break something and don’t notice it until two CLs later, I might as well be debugging someone else’s code.  I know what people about the devs whose code they are forced to debug without tests or documentation, because I’ve said it, loudly, and at length.  I may have expressed a wish for weapons.  I would hate for someone to think that about me, especially myself, and testing is the cheapest way out of it.

Hunger Tracker 0.1

When I started this blog I intended to leave programming for medicine fairly soon.  After a long medical leave that let me recover from burnout, I realized that programming is actually a really valuable skill and before I throw it away and spend several years in school, I should see how far it can take me towards my goals.  My goals are unchanged (mostly around nutrition and mental health, but with some bonus input from Effective Altruism), but maybe there’s a better way I can contribute.

Eventually this means founding or joining a company working on something I care about, but I’m still not capable of consistently working sufficient hours to work with other people.  But I can play on my own projects with no coordination costs, so I started learning to program for android.  Meanwhile on the health end, my nutritionist informs me there are states of hunger between “unpleasantly bloated” and “would shank an infant for juice” that are useful to experience, and that the first step to achieving that is tracking my hunger consciously.  She meant with pen and paper, but I am an engineer, so I wanted something on my magic pocket computer to do it for me.  I’m sure something exists on android that would do this, but I couldn’t find it, so I did the logical thing and started developing my own.

Thus was born the Hunger Tracker app.  Here is my dream feature list for Hunger Tracker:

  • Alarm goes off at pre-set or random times (your choice), to shut it off you enter a number between 0 and 9, representing your fullness level.
  • Timestamp + fullness level data is dumped…somewhere, I don’t know.  A google docs spreadsheet would work for me but there’s probably other services I should integrate with.
  • UI not actively offensive

Here’s what version 0.1 does

  • No alarm, user must manually call up app.
  • User enters number in ugly ass UI.  Actually user can enter any arbitrary string, but don’t, it will break the retrieval.
  • User can retrieve first 10 numbers entered.  Any further entries are skipped, if there are too few entries the last one is repeated.
  • It’s a debug build rather than a release build because Android Studio won’t produce a working release build and fixing that is not at the top of my priority list.

If you are interested, you can download version 0.1 here and install it the usual way for non-market apps.  If you are spectacularly interested, you can check out the source code at github.  Comments are extremely welcome

My next step is not actually features, but testing, which I will explain in the next entry.

Male Birth Control

I complain about hormones being the go to mechanism for women’s birth control, but that isn’t half as dumb as hormonal male birth control.  Women at least do spend a majority of their time not able to conceive.  In fact, the number of ovulations a modern first world woman goes through is way higher than they would have in the ancestral environment.*  But men have to be seriously ill or starving to stop producing sperm (temporarily.  Obviously there’s some good options if you want to permanently lose the capacity).  Nonetheless, at least until a few years ago a lot of research into male birth control focused on hormones.

For years India has had what looks like a panacea of male birth control: cheap and easy to administer, completely reversible (although not quite as cheaply or easily as it is administered) , and no side effects.  RISUG works by injecting a polymer into the vans deferens (the tubes that funnel sperm out of the testes).  Sperm can still travel through the tube (which is important because completely blocked deferens tend to cause medical problems and become spontaneously unblocked), but their cell membranes are disrupted, rendering them incompetent to bond with the egg.  You could have a sperm count of 200 million/mL and still be completely infertile.

I’ve heard many people say that male birth control is dead on arrival, no man will want to take it and no woman will trust a man to.  These people are not talking to my male friends, every one of whom would give a kidney to get this technology.  My female friends’ tend to think that by the time they’re not using condoms with someone, they trust them to accurately report their birth control, and they will be just fine not perpetually feeling half pregnant, thank you very much.  The exception would be the women who can tolerate hormonal IUDs, whose attitude is more “do what you want I’m still going to enjoy not bleeding every month kthnxbai.”

It does slightly concern me that they’re not sure how RISUG actually works.  How did they discover it then?  Did they just keep injecting different plastics into monkey testicles until they found something that worked?  But no one is really sure how the copper IUD works either, and that doesn’t seem to bother anyone despite it having obvious painful side effects (compared to RISUG’s apparent zero side effects).

RISUG is being developed for the US under the brand name Vasalgel.  Interestingly, it’s not a big pharma company that’s doing it, but a non-profit dedicated to getting neglected treatments into practice.  This is pretty much the best possible solution under the current circumstances (where bringing treatments to market is very expensive).  They are currently taking donations, and I am seriously tempted to give them some.

*This is also true for menstruation.  The Pill was originally designed to give women false periods, and all the pain and health implications, to appease the Catholic church.  It didn’t work, and it took 35 years for someone to notice and suggest not doing that.