ADHD / Atomoxetine

Edit: added some updates 2024-03-01

I’ve been quite open about the fact that I was diagnosed with ADHD in December of 2021, and in January I started taking Atomoxetine (brand name Strattera) for it. I think it’s important to talk about neurological health and mental health; the stereotype of guys not talking about mental health is true. When I revealed to my friends that I had ADHD, several of them confided to me that they had a similar diagnosis – which I didn’t know! I think if we’d all been open about it, the process would have been easier for me to navigate. So: I have ADHD and am happy to talk about it.

Everything else in here is Not Medical Advice. Talk to your doctor. I just want to share my experience.

I was *very* nervous about getting a prescription for ADHD medication, since I feel like I get addicted to things easily, and I’d heard that many of the drugs on the market (especially the stimulants like Adderall) were habit-forming. The idea of adding something to my life that would be difficult to remove later really scared me.

To theorize for a moment, I think that the availability of only the stimulants, and perhaps also a lack of data on correct dosages + lack of time release pills led to the “adhd zombie” stereotype that I saw a lot of in the oughts and tens when I was really struggling to exist in the neurotypical-centered school system, and really could have used the diagnosis. I was afraid of this “zombie” outcome, which is part of why it was only after lots of therapy that I was willing to attempt a diagnosis.

My psychopharmacologist ($10 word) told me that there are newer (well, since 2002, compared to Ritalin in 1944(!)) non-stimulant drugs for ADHD that are less likely to be effective, but without the habit-forming effects. With my doctor, I decided to try Atomoxetine (brand name Strattera), and I’ve been on it since January.

I only have a layperson’s understanding of how Atomoxetine works, but here’s my attempt: Atomoxetine is an noradrenaline reuptake inhibitor. This means that noradrenaline that I produce will linger in my system for longer, leading to an increase in my alertness level, but without artificially increasing my noradrenaline creation or release – just the rate at which it’s reabsorbed if not used.

The effect is that I no longer need to stim as much to keep alert and not bored. And as a dad of a three-year-old who wants to play doctor for the 1000th time, not needing new stimulation to avoid wandering away or becoming distracted allows me to stay focused on play with my daughter, which makes it incredibly worth it. Being able to focus at work is also good 🙂 The medicine just makes it like, 30% easier to say “no” to distractions (e.g. phone, internet) which is enough for me.

My Experience with Vyvanse

After taking Strattera for a while but getting sick (lol) of the side effects, I finally got over my fear of Stimulants and tried Vyvanse (I can’t recall the dosage, but IIRC I started at half the normal amount, so, 10mg? 20mg?). My layperson’s understanding is that Vyvanse is basically Adderall (amphetamine salts) with a lysine amino acid attached. Your body metabolizes off the lysine at a certain rate, which then activates the stimulant. Because your body can only metabolize so much lysine at once, it causes the stimulant to slowly enter your system instead of all at once, making for a smoother experience.

At least, that’s what’s supposed to happen. Even on half the normal dosage, I ended up feeling incredibly high and light headed for the two days that I was on, and my memory and executive function were much worse than normal. I took a half dose and then nothing, but I still experienced a deep depression afterward for a few days.

I talked with a relative who also has ADHD and they said they had the same experience with Vyvanse/Adderall, so maybe we just metabolize it in a weird way? I’m sure stimulants work for some folks but they don’t seem to work for me. I did like that you could split the dose up or mix it in with food.

Erty’s Non-Medical-Advice guide to Atomoxetine/Strattera

This is my own experience based on about two years of taking Atomoxetine. The main side effects I got were nausea/lightheadedness, high heart rate, anxiety, and some acid reflux/heartburn. However I’ve mitigated most of them using the methods below.


The heartburn isn’t super bad and I can take tums for it. Sometimes it leads to a phlegmy throat, which goes away with tea and throat clearing. I’m not entirely sure that this is related to the Atomoxetine, it might just be that I’m getting old, lol.

Nausea / Anxiety

I think the nausea and anxiety are related to an empty stomach OR too much meds at once. My doctor started me at 40mg which I eventually figured out was way too much for me (For reference: I’m 130lbs) so I dropped to 25mg and felt much better while still feeling like I was getting the benefits of the medicine. I also found that I could resolve the nausea/anxiety by eating a large, protien-filled meal. For example: I would get the side effect if I ate a bowl of cereal (carbs), but not if I ate a bowl of cereal with a bunch of peanut butter on top (oils/fats/protein). I finally tried 10, and am now on 18 (just starting it!). So it took me a while to find the “right” dose.

I also think the nausea is worse at the beginning of the meds (or if you skip a few days). It seems like my body got used to the meds and figured out a homeostasis with them that didn’t involve nausea. Thanks, body.

The anxiety also seemed to crop up when I ended up with an empty stomach and meds still in my system. This was most pertinent when I would wake up in the middle of the night and feel “chemically anxious” – not anxious about anything in particular but just like, anxious. I eventually realized this was because my stomach was empty. I started eating a healthy midnight snack just before bed and that helped resolve it. I also started taking Magnesium Glycinate supplements which really helped reduce the anxiety.

High Heart Rate

I found that my heart rate would spike if I drank caffeine at the same time as my meds – like, a resting heart rate of 90 when it’s usually more like 55-65. In fact, I was able to completely drop my two-cups-a-day caffeine habit without any withdrawal. Nowadays I can have one cup of coffee in the morning without making myself too anxious, although I sometimes opt for decaf or half-caf.

Taking the Meds at Night

At the advice of my doctor, I tried taking the meds at night right before I went to bed. The idea was that the worst of the nausea happens a few hours after I take the pill, so if I’m asleep, I won’t notice. This worked ok! But it also made me wake up at 5am or so most nights. That … might be a good thing? But I don’t know, I ended up more tired later and my sleep schedule was sometimes biphasic which left me exhausted the next day.

Eventually I switched back to taking the meds in the morning / early afternoon.


I don’t like eating a big protein breakfast though, so my current (working for me) system is:
– Morning: Drink a small cup of coffee with a very light or no breakfast.
– Around noon: Eat a large lunch with some protien/oils/fats and take 25mg atomoxetine.
– Around 6pm: Eat a normal dinner.
– Around midnight: Eat a medium meal with Mg supplement and some sleepytime tea, fall asleep.

All in all, I’m quite happy with the meds. I don’t notice anything really different when I take them, but when I don’t take them, I can tell that it’s much harder to get things done, and my partner especially notices. In fact, there are days where I’ve later said, “Oh, I forgot to take my meds yesterday” and she’s replied,”oh, that makes yesterday make so much more sense”. So obviously they’re doing something.

I hope this helps someone!

From Grand Rapids,


Mental Model Metacognition

I’ve been seeing a therapist recently, and it’s been quite nice to be able to take an hour to introspect my mental processes with help from a professional. I also enjoy the time set aside to focus on myself – I don’t feel like I’m taking over the conversation or being selfish with the time.

Aside: I’m not working through any particular issue or trauma in these sessions – a fact that reminds me how messed up the health care system is. Folks who would really benefit from therapy are unable to afford it, while my employment and insurance provide it to me for very cheap. I acknowledge that I’m very privileged in this way.

I think about the idea of a Mental Model a lot, both for myself (“what is my mental model of X”) and for others (“how can I teach Y so that the student has a good mental model”). Teaching, I like to say, is the act of building and debugging mental models in others.

When we interact with the world, we use our mental models to predict what will happen given certain conditions and actions. When we get a mental model wrong, it can be bad, embarrassing, or harmful. Having an incorrect mental model of how a stove works might cause a burn, for example.

Therapy like mine, then, is a way of airing out my own mental models. I show them to someone else and they give me feedback. In this way, I refine the mental models to make better predictions and live a better life.

A 2019 post by Alok Singh titled Mental Model of Dental Hygene got me thinking about the practice of publicly airing out a mental model. I think about Alok’s post often (a lot of time while brushing my teeth, natch), and applying this technique in my own life.

Journaling surely helps in this way as well – the act of organizing a mental model so that it can be written, and viewed as a whole, allows for a different kind of processing. But a journal also doesn’t provide feedback. There’s a certain risk that people take when sharing a mental model with the world. This is perhaps why a journal is kept private, and therapists have laws around confidentiality. The more risk you’re willing to take on, the more and wider feedback you can get.

But why is there a risk? Here’s my mental model (ha ha!) about what that risk is:

  1. A wrong mental model can be embarrassing
    1. People don’t like feeling like they’re wrong, and especially in ways that form a foundation for other thought. Revealing a mental model that’s wrong can invite scorn, teasing, and other humiliation.
    2. Sometimes, this causes people to double down on a wrong mental model instead of abandoning it.
  2. The mental model reveals a deeper kernel that’s shameful
    1. One might reveal a mental model that relies on an assumption that’s e.g. racist or sexist, which would cause them to lose respect or face repercussions.
  3. The mental model conflicts with a political, ideological, or commercial standpoint
    1. You may find that people are resistant – even physically – to a mental model being shared. Purely for example: Alok’s post might run afoul of folks who believe in conspiracy theories about Fluoride, or dentists who make money off of fixing cavities.
    2. I find myself often overweighting this risk. The odds are low but the penalty is high.

But perhaps it’s in the face of this risk that sharing a mental model becomes even more important – you can simultaneously retool your own process and at the same time influence someone else’s.

I sat down today to write out my mental model of Dopamine and focus but wrote this instead, which is apropos. I’ll have to follow up with another post.

From Grand Rapids,


Teaching Programming

Note: This is a post I drafted in 2017 and am publishing now in 2020.

My Background

I’m working as a tech educator now – my official title is “Lead Instructor”. I even have a super fancy business card:


This is after “years of industry experience” and “many hours of classroom instruction”, specifically volunteer work through TEALS-K12 teaching computer science in Brooklyn, work-study teaching Python to 7-12th graders during college, and teaching a self-designed actionscript/flash curriculum to peers during high school.

I think a lot about education. I think a lot about quotes like @LiaSae’s because I agree with it. I believe the current problems with the American school system are problems of economics, not education. The problem is that it’s the “Silicon Valley Jerks” like myself that have the wherewithal (read: money/privilege) to try crazy things like coding schools, but we don’t have the teaching background. Someone needs to combine the two.

Teaching Certificates and Regulation

The boot camp I work for is accredited by the state (CODHE). The application process is rigorous and it takes hundreds of hours to put together the documents. This ensures that CODHE has reviewed our curriculum and approved it. But, this means that if we come up with a “better” curriculum that we’d like to try, there’s no room to pivot. We would have to go through the approval process again, which nobody wants to do. Pros and cons.

(Edit from 2020: we actually could pivot. As far as I can tell there was very little oversight and so calling “audibles” to switch out materials or teach something different was totally fine, as long as we believed it would benefit the students. The state just wanted to make sure we were actually thinking through this stuff? The company is now defunct so I feel like I can admit this).

I don’t have a teaching certificate. As far as I can tell, the need for programming teachers is so huge right now that they’ve basically dropped that requirement. You also don’t need a teaching degree at a private institution like the one that I’m teaching at now. I understand that this is a huge gap in my experience and I’ll certainly be getting one right after completing an undergrad teaching preparation course, 800 hours of teaching experience, and… yeah… not going to happen anytime soon. I can’t even find if there’s an accredited program for getting a computer science teaching certificate (maybe at Regis? What a convoluted PDF).

As far as I can tell, no teachers at bootcamps have teaching certificates (let me know if you do!). Does this mean we’re all those silicon valley jerks? Yes, and that sucks for the students and it sucks for the companies that try to hire out of boot camps like mine. Lots of people argue that boot camps should be regulated by the government and I agree with them and I think @LiaSae would too. But then, I would be out of a job and 99.99% of bootcamps would shut down.

(Edit from 2020: it seems like this was a good idea. I should have taken a harder stance on this, since it does seem like a lot of fly-by-night bootcamps popped up and quickly shuttered. The one I worked for, I believe they were doing a lot of the right things, but the market quickly saturated for junior developers and we started not being able to get people hired. After I quit – taking a job with a 30% salary bump – the bootcamp I had worked for was able to attract enough students and shuttered.)

It’s hard enough convincing programmers to take a pay cut and work at a boot camp. It’s even harder to do that to programmers who have the prerequisite charisma to teach, since that probably means they have the prerequisite charisma to climb a corporate ladder. All of my favorite teachers have done the job because they love inspiring students and because they love teaching.

I taught programming at the School for Human Rights in Brooklyn, NY, through the TEALS-K12 program. The TEALS program takes tech professionals and places them in morning classes – usually four volunteers to a class – and has them teach programming before they go in to work. They teach not only the students, but also the teacher, with the hope that the teacher will be able to teach the class on their own after 3-4 years of instruction.

None of these volunteer teachers are regulated or licensed, though they are trained. The year I participated, they also expected us to come up with the assignments and lessons for the class. It went… poorly. (Based on our feedback, they’ve hired curriculum developers and really flushed out the materials. Based on their new materials and their progress, I highly recommend volunteering through them if you’re interested in tech education but you can’t quit your job just yet.)  I was lucky that I’d done amateur curriculum design before, and one of my co-teachers had been a licensed chemistry teacher for years. That said, if they tried to hire only programming professionals who had teacher licensure, they’d have just a handful of schools in their program instead of 161.

I think this is a great example of Silicon Valley Jerks who know nothing about education really trying to make a difference. Is it the best teaching experience for the students? No. I certainly floundered a lot when I was learning to teach. But it’s certainly better than no technology education at all due to a lack of resources.

(Note from 2020: The more I learn  about how schools are funded by property tax to specifically benefit rich folks’ schools, the more I strongly believe we need more fundamental reform than just sending Silicon Valley Jerks like myself to go teach at underfunded locations. But it’s a good bandaid in the meantime. You need to treat the symptoms while you treat the cause.)

I’m not sure where I stand on the issue of teacher licensure in computer science and I would love to incite a discussion on the issue. Pros mostly involve better oversight, better instruction technique, and more consistent curricula. Cons involve not being able to move fast and pivot, even more undersupply of teachers, and less learn-to-code startups. Imagine if Salman Khan had to get a teaching license first.

(Note from 2020: I’m back to teaching, but this time I’m actually titled as an “Adjunct Lecturer” at Howard University through a program at Google, where I work now. It’s the same thing: send us Silicon Valley Jerks into programs to help build out the pipelines. We need to do this and ALSO address the underlying economic and prejudice problems that lead to this, by rethinking how we do things like students loans and school funding. I originally had some more topics to cover here, but I think what’s above is good on its own.)

From the Upper Peninsula of Michigan,


Awkwardness, Wavelengths, and Amplifiers

I’m an introvert, and although I can pass as an extrovert in certain situations (like being in front of a crowd, or when hanging out with people I know well), I still have a problem with small talk. I’ve run into this problem a couple of times over the last few days, where a conversation I’m having with someone suddenly dries up. I often make it worse by sighing or shifting my gaze downward. There’s just nothing to say for a moment and we (this happens in one-on-one and small groups, mostly) just sit for a while and steep in the silence.

Often we get the conversation going again (I usually try to ask about hobbies, goals, work, etc) but it’s a painful reminder that I’m not great at keeping a conversation going.

But there are some people who I seem to be able to talk for a long time with, at length about topics, and some external force has to intervene to end the conversation. I, of course, try to make friends with these people and hang out with them often, but occasionally it happens with a stranger. What mysterious force is it that suddenly makes me able to hold a deep and intelligent conversation with someone, without having to resort to “small talk”? I was thinking about this on the subway home after a party tonight and framed it in an interesting way, that I thought might make a good essay.

Note, I don’t want to claim I’ve “discovered” anything or that this is “the way”, I just want to explore this idea and would love feedback on it.

People have certain interests, and various intensities of these interests. I might call these “wavelengths” – a frequency (topic) and an amplitude (depth of knowledge / interest) that people carry a multitude of. I, for example, could talk to you at length about webcomic publishing, or perhaps the 1987 roguelike computer game Nethack, or how everything about the Scott Pilgrim movie was perfect except for Michael Cera. All of these things I have factoids, opinions, and perhaps most importantly and interest in discussing.

If you ask me to talk about gasoline cars, or maybe the Kardashians, or football, I have a thought or two but you’ll quickly discover that I’m not “on that wavelength.” The conversation can’t last long because I don’t have much to contribute. I’ll say, “hmm, interesting” and listen to you and be happy to learn some things, but I won’t have anything real to contribute. And so unless you’re very passionate about the topic, the conversation will soon end and I’ll make an excuse about having to refill my drink and wander off to find a new conversation. Which is fine, I bet you don’t want to be in this staring-at-the-floor-contest any longer either.

There are also some real dampeners, which one should seek to avoid. Some people don’t like to talk about some things for real reasons, and it’s not kind to force them onto those topics.

And so striking up a conversation is a frequency-searching exercise. What do we have in common enough to talk about. Work, sure. The weather, sure. Complaining about the MTA, sure. But those things aren’t (usually) the kind of things that get people really excited. And sometimes they’re dampeners, when someone is having a bad time at work and you ask them how work is going. But it’s difficult, since the things people really like to get into the weeds about are often obscure, and there’s a strange pressure against just opening conversations with, “hey are you into Nethack?” unless there’s some reason, like I saw you playing Nethack. I think it’s a failure thing; if I get all excited, “oh, are you a Nethack fan?” and the response I get is, “what’s that?” then I know I’m in for giving an explanation, which isn’t the same as a conversation.

Which of course is one of the reasons that the internet is so neat. I can just click some buttons on my $2000 facebook machine and get instantly connected to a large group of Nethack fans. Sometimes these online conversations spill over into real life. But often the Venn diagram of people I hang out with IRL and the people who are in these online groups is two circles. The fact that we can find these “lifestyle enclaves” (see Habits of the Heart by Bellah et al) of people on the same wavelength can also be dangerous echo chambers.

But the best, the best thing is when you run into someone who is an amplifier on your wavelength. My partner is like this for a lot of things, where we both get excited about something and end up being able to talk about it for a long time. And I have a friend who is like this for technical things – once we start coming up with tech and business ideas it’s very difficult to stop.

But to do this, your wavelengths have to be similar, and just like music there have to be other notes – other wavelengths that you can bounce off of to add interest to the conversation without it falling flat. And these amplifiers are rare. You know them when you find them and you hold on to them. They’re people who hear your ideas and “yes and” them, sending the wavelength back to you, but louder. You’re safe to explore here. You can even dig around for new wavelengths together, since you can always return to your common ground if nothing turns up.

There are some people who seem to be able to frequency-hop easily. It’s practice, I know, but I’m not that good at it. And as an awkward nerd-human I’m terrible about hiding when I’m uninterested in a wavelength, I quickly lose interest. My partner is great at this – she has the ability to work with people across a much wider variety of interests and be (or at least seem) interested in what they’re saying, and carry on a conversation. This is a skill I’m still working on, but it is a skill that can be practiced.

Name Change

When Greta and I got married, we joked that we were going to merge our last names (Dohl and Seidel, respectively) into a portmanteau, “Seidohl”. With our wedding date approaching and no better ideas, we happily went forward with that idea and made it our legal last name. This isn’t a guide (there’s a good one here) but really just a story.

For posterity, and also to hopefully instruct anyone interested in doing the same, I’ve decided to write down the processes we’ve gone through. Please let me know in the comments if you’ve had similar or different experiences!


To begin: my parents, The Seidels, took my mom’s maiden name when they were married. As far as I can gather, they did it mainly because of my dad’s strained relationship with my Grandfather. (Only one child – an adopted second cousin – still bears the Pizarro name that was handed down by my Grandfather). Still, they apparently faced some hardship in changing my dad’s name officially, so I was expecting a tough time of making up an entirely new name.

Telling my family was not hard. Most of them agreed that it seemed a perfectly reasonable thing to do and actively encouraged us. My maternal grandfather (rest in peace) seemed surprised, although he was in good humor about receiving the news that I would be likely the last Seidel on his side of the family. He mentioned one great aunt who would be “spinning in her grave” about the news. (Connect her to a turbine?). I never met her and, to date, have not been visited by her angry ghost. So I think I’m good there.

YMMV, of course, with your own family.

Marriage License

In the county where we were married, we could only change our names to a) one of our existing last names or b) hyphenate our last names. (I can no longer find a reference to this, but Michigan’s marriage laws being as backwards as they are I wouldn’t be surprised). So for our actual marriage, we just c) kept our own last names.

New York

We moved to NYC right after getting married, and changed our names through the NY state court system. This was relatively straightforward. We filled out some notarized paperwork and got a court date. Note that finding a Notary Public can be difficult, even in Manhattan! We needed our original Birth Certificates as well.

We dressed up nice and appeared in front of a judge. The main questions we were asked related to figuring out if we were doing this to get out of a debt, crime, or other obligation. I remember that the guy in front of us was changing his name for religious reasons and the judge approved that as well.

The details of this next part are a bit fuzzy, since this was so long ago. The judge approved our name change and sent us to get certified copies. There was a (IIRC) $65 charge to change the names, and then each notarized copy cost about $10. We ended up needing five (?) certified copies, one for our records, one for a couple of services like the Social Security office, debts (student loans companies), and more to publish in the newspaper. You must publish your name change in a public newspaper.

You can publish in the New York Times, if you want to shell out a boatload of money. I published in, I think, the Irish Echo, which cost about $35. You don’t need to be Irish to publish there! It’s one of the cheapest papers to publish in so I expect they do a brisk business on this.

Finally, we got certified copies of our completed name change documents for our records (another $6 per copy, I think?). We used that to do things like refresh our passports.


The only institution that really gave me any grief was my bank. They seemed perfectly happy to accept that my wife’s last name had changed through marriage without any documentation (this seems like a major security flaw???), but as soon as I told them that we’d changed it in front of a judge, suddenly they needed me to send documents for both of us. I did, and they changed the names promptly.

Trying to change my frequent filer miles name on Southwest also caused problems. Their online name change form simply didn’t work, and none of the phone support people could do anything but tell me to go fill out the form. I think I eventually got around it but it required some developer console hacking??

Changing emails, usernames and websites was also tricky. I still have my old last name in some usernames. I was very fortunate that I’d chosen ertysdl as my email username, since sdl stands for both Seidel and Seidohl! I promise I didn’t plan that. Some sites seem to use your username as a unique identifier, and why would that ever change?


Changing my last name wasn’t a difficult task, although it was made harder by state law in Michigan which didn’t allow us to change our name at the time of our wedding, which would have saved us a lot of time and expense. Only a few entities gave me trouble about updating my name, but otherwise it seems like a pretty common thing to do and most of the clerks didn’t blink an eye – in fact, it seems like several people change their name every day in NYC, so the process is pretty streamlined.

Postscript: Thinking thoughts

I didn’t grow up with any strong connection to the Seidel name. It’s generally a German surname, and I’ve always wondered if the anti-German sentiment of the 1940s led to my earlier family suppressing that aspect of my heritage. I have a much closer affinity for Sweden, since I was partially raised by my dad’s mom who was born to Swedish immigrants. That said, I don’t really consider myself Swedish or have any connection to the country and its people other than that.

There aren’t many other Ertys in the world! I used to come up on the first page of google results with just my first name, but that seems to not be the case any more. Unfortunately, unique names come with downsides as well. There’s some weird art out there with my name attached to it (I didn’t make it!). However, with a unique first and last name, I end up being very Googlable. That’s something I decided was good?

To me, changing my name like this is an expression of the individualism and emptiness of the modern “white american” culture. I don’t have a connection to any large family or lineage through my names. I’ve changed both my first name (from Erik to Erty) and my last name (from Seidel to Seidohl), and I rarely use my middle name (and have considered changing it at times as well). A name is an outward expression of self. It’s like a tattoo. I don’t not like my original names, I’ve just found new ways of expressing myself. I think this is a form of rebellion against previous generations that put so much caché into names – let’s discard that and refer to ourselves how we want, not just on the internet. I’ve been lucky to not have familial pressure back on these decisions, so they’ve been almost no work at all.

Cabal Package Installation Woes

tl;dr: Nuke ~/.ghc and then run cabal install --lib (every lib you need)

Edit: Since writing this post, there’s been some movement on the cabal bug, and it seems like there’s soon going to be a fix!

I’m trying to write a simple webserver based on Warp, but I ran into an issue with a hidden package. Here’s my imports in Server.hs:

{-# LANGUAGE OverloadedStrings #-}
import Network.Wai (Application, Response, rawPathInfo, responseFile, responseLBS)
import Network.HTTP.Types (status200, status404)
import Network.Wai.Handler.Warp (run)

And here’s the relevant part of my .cabal file:

executable server
  main-is: Server.hs
    base >=4.12 && <4.13
    , wai
    , warp
  default-language:    Haskell2010

Note that http-types is missing, but we’ll come back to that at the end.

I’ll start by saying that I don’t fully understand the difference between cabal and stack, and at the beginning I decided to just use cabal and not worry about stack.

I ran cabal install wai warp and got the following error:

Resolving dependencies...
cabal: Cannot build the executables in the package wai because it does not
contain any executables. Check the .cabal file for the package and make sure
that it properly declares the components that you expect.
Cannot build the executables in the package warp because it does not contain
any executables. Check the .cabal file for the package and make sure that it
properly declares the components that you expect.

It turns out the solution to this is to append --lib and run cabal install --lib wai warp. (I wish it would say that in the warning though.)

I ran cabal install wai warp --lib and tried running Server.hs by pressing command+b in Sublime Text 3, but I ran into this error:

Could not load module ‘Network.HTTP.Types’
    It is a member of the hidden package ‘http-types-0.12.3’.
    You can run ‘:set -package http-types’ to expose it.
    (Note: this unloads all the modules in the current scope.)
    Use -v to see a list of the files searched for.

I think what’s happening here is that http-types is installed, but not explicitly. Haskell wants me to definitely say that I want it, so I try running cabal install --lib http-types.

This, however, runs into a very frustrating error. Apparently the process library is required at two different versions in two different packages – despite already being happily installed as an indirect dependency:

cabal: Could not resolve dependencies:
[__0] trying: base- (user goal)
[__1] trying: ghc-8.6.5/installed-8.6... (user goal)
[__2] next goal: process (user goal)
[__2] rejecting: process-, process-, process- (constraint
from user target requires ==
[__2] rejecting: process- (conflict: ghc =>
[__2] rejecting: process-, process-,
process-, process-, process-,
process-, process-, process-, process-,
process-, process-, process-, process-,
process-, process-, process-, process-,
process-, process-, process-, process-,
process-, process-, process-, process-,
process-, process-, process- (constraint from user target
requires ==
[__2] fail (backjumping, conflict set: ghc, process)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: process, base, ghc

The solution to this is very frustrating, because even rolling back my git repo to the last known good commit didn’t fix it – it’s a global system problem (ironic, for Haskell, which is so demanding of “pureness” in the language). I deleted ~/.ghc and ran the install again:

rm -rf ~/.ghc && cabal install --lib wai warp http-types

And it worked! My server runs 🙂

The problem is now, I want to build some tests, so I run cabal install --lib hspec and I run into the same “could not resolve dependencies” as above!

Hm, let’s see if just a rm -rf ~/.ghc && cabal install will fix it, if I declare hspec in build-depends in my .cabal file? I get the following error:

cabal: Path '/Users/erty/.cabal/bin/server' already exists. Use
--overwrite-policy=always to overwrite.

So let’s try the suggestion and run --overwrite-policy=always. Infuriatingly, this build succeeds but when I try to actually run Server.hs (by pressing cmd+b in Sublime Text, perhaps that’s missing a flag or something? I wonder if cabal install builds a binary but fails to install the libraries) it fails to find any of my modules:

Could not find module ‘Network.Wai’
Could not find module ‘Network.HTTP.Types’
Could not find module ‘Network.Wai.Handler.Warp’

Let’s try rm -rf ~/.ghc && cabal install --lib, since adding --lib worked before. First, I also added http-types to my build-depends in the .cabal file. Nope:

Resolving dependencies...
cabal: Cannot build the libraries in the package crossword-hs because it does
not contain any libraries. Check the .cabal file for the package and make sure
that it properly declares the components that you expect.

But! We were able to get it working by listing all of the dependencies explicitly during the install phase. So let’s try that and run rm -rf ~/.ghc && cabal install --lib wai warp http-types hspec:

Works! The problem is that I have to remove ~/.ghc manually list out all of my deps every time I want to install something, but at least I can move forward for now.

I also added http-types to my cabal file, but it didn’t seem to really matter for running in sublime text, as long as I’d installed it via cabal install --lib.

I would love to hear from any more experienced haskellers out there if I’m not understanding something about cabal. Specifically, coming from node, I feel like cabal install (or even with --lib should “just work” and install all of the deps I’ve listed in the .cabal file.

Hopefully this writeup saves someone else time 🙂

Expanding the !!Con Aesthetic

TL;DR: There’s a cool new project to put on plays about computing. In addition to traditional talks, we’re inviting people to submit more artistic 10-minute plays or other “non-talks” to !!Con as well as The Art of Python.

Sumana Harihareswara and I had lunch sometime late last year and talked for a while about her newest brainchild, The Art of Python. To steal her own description, The Art of Python is a miniature arts festival at PyCon North America 2019, focusing on narrative, performance, and visual art. The Art of Python was recently accepted into the PyCon Hatchery Program, an incubator for PyCon-related ideas. It will be a series of short plays, 5-20 minutes each, held on the evening of Friday, May 3.

Sumana has worked with the !!Con team before and wrote one of my favorite articles about the conference, Toward a !!Con Aesthetic, which I re-read every year to re-center myself on what !!Con can (and in my opinion, should) be. One of its sections is titled Spectacle and play, and explores how some of the talks cross from being a “talk” into being a comedy or sketch show. We as audiences remember these moments where the magician shows us that something more than meets the eye can be done – and in our case, presents a new kind of magic to an audience of magicians.

That’s why we’re inviting people to open up the idea of what constitutes a “talk” at !!Con this year. We would love to see drama, comedy, and magic. If you are interested, we invite you to submit a play to both !!Con and The Art of Python, theme and length (10 minutes for !!Con) allowing. Note that The Art of Python’s CFP specifically says that the play does not actually have to be about Python, just the emotional experiences of programming.

Our CFP will open Feb 6 Feb 8, and The Art of Python’s CFP is already open. Bring us your explorations and reenactments. Show us how your computing is spectacle and emotional. Explore with comedy and tragedy the feelings that surround this field that has only been around for one generation, two or three if we’re really generous.

Some caveats: !!Con is still going to be looking for “the joyous, exciting, and surprising moments in computing”, and we’re not going to have a separate track or approval process for non-talks. But, based on the amazing work that we’ve seen in years past, and ideas we’ve been pitched, I don’t doubt that you the reader have something worth submitting to !!Con and The Art of Python.

Of course, I encourage you to submit your proposals for 5-20 minute plays to The Art of Python regardless of whether you go on to submit them to !!Con! You should also check out the Hatchery program for next year, if you have an idea for a conference track that you’d like to try out in the context (and with the backing of) PyCon.

We talk at !!Con a lot about the intersections of humans and computers, since indeed the things that computers do are ultimately created and consumed by humans (well, or their pets). The lecture format is often ill-suited to explore this emotional side of computing, and especially poor at exploring the relationships between people who make the magic lightning rocks go fast.

I will admit that watching a play about programming sounded awkward at first, but then I reminded myself that 1) the spectacles that Sumana mentioned from previous !!Cons have only been amazing, and 2) when I go to plays about far more uncomfortably introspective topics, I generally end up learning something about myself and/or the world. It’s sometimes not even something that can be put into words – but that’s exactly the point. Some things are very hard to describe by speaking at a room with a slideshow behind you. Perhaps one of these non-talks will inspire, delight, and amaze in a way that’s uniquely deep.

We are still exuberant about accepting traditional-format talks and are looking forward to seeing all of the cool, fun, scary things that you have done with computers. Polish up your demos, dust off and re-submit your !!Con talks that didn’t make it in previous years, think about the fun bug that you defeated, and come tell us about it. If you want some more information before we post the CFP: Lindsey Kuper, organizer emeritus now leading the charge on the west coast, has a great article about the kinds of talks we’re not looking for. I’ve written previously about how we select the talks.

I’m optimistic about this widening of our focus. Similar to our inclusion efforts, there’s a difference between not-not-permitting and inviting. If people had submitted drama/magic/spectacle to previous !!Con we would have judged it seriously, but to openly request it alongside the traditional talks breaks down the assumption that a 10-minute !!Con slot is only for a “talk”, which, to be honest, is just because that’s what other conferences do. I like to think of us as more avant-garde than that.

Radish Cache

After coming across a (now deleted) answer on StackOverflow, I took some time to find instances of “redis” (a popular caching program) misspelled as “radish”. I think autocorrect is likely the culprit.

I’m posting these here because I think that this is a wonderfully innocent error and not to shame the people involved. Imagining someone refreshing their cache of small red vegetables brings joy to my heart and I hope it does to yours as well.

The Original

This came up in an edit queue, but I didn’t have the heart to edit it. I now suggest this as the solution to most of our technical problems at work, much to my coworkers annoyance.

From Harvard

This one is in an article published by Harvard, so you know it’s legit.


This person has radish cache on their LinkedIn profile, so you know they’re an expert. (Last item)

Please go to my LinkedIn and recommend me for radish cache. I’d like to add you to my persimmon network.

Speeding up Magneto

Vegetables are part of a healthy diet. Varnish, not so much.


Unfortunately, the only IRL radish cache has been removed and no longer exists.


Remember, if you have a problem, flush your radish cache!