Job stories: Simple

I recently got dinner with a rad friend who I used to work with at Simple. (Rachel is a skilled wordsmith and a sharp wit — she’s recently launched her new business, Gimme The Lute, and if you might need help with your brand, you should get in touch with her! She’s also an excellent florist, because of course she is. But I have more experience with her writing, and she is masterful. She was the one who did the majority of my initial training, and her blend of directness and compassion made a huge impact on me.)

We talked about resumes and how to distill several years of experience into a few bullet points. I’d really been struggling with this, so she suggested I write down the good-parts-only version of my time at Simple. It was just the push I needed, and I ended up with two pages of things I’m really proud of, which surprised me a little!

It’s occurred to me that this might be fun to share, so I’ve copied it below. If you’re wondering what I did in my last role, this covers a lot of it!

I found out about Simple (then BankSimple) at a networking event in the summer of 2011. I met Al3x, the CTO, and was impressed with his energy and his complete lack of ego. I went to Simple’s site to see what they were hiring for, figuring it would be “lots of programmers,” and was really excited to see that they were hiring for support.

Simple was about two dozen people at that point. I was the second customer relations (CR) hire; the first [Rachel!] had been there for almost a year and made the move with the company from Brooklyn to Portland, OR. We were pre-launch by an undetermined amount of time (it ended up being about seven months more), and all our customers (~100-200) were friends or family. Our accounts were so lightly featured that we gave every new account holder some spending money right off the bat, because depositing money was a particular pain point. (There was no check deposit, no Simple-initiated bank transfer, and we couldn’t accept electronic debits.) We had a nascent Rails app for managing customer interactions, coupled with external partners’ well-developed and kinda creaky old systems. Our whole phone system was two iPhones that rang with the wee-ooo space-robot noise. At that point, they often didn’t ring for days; that ringtone is still a good way to get my attention.

My training was shadowing the person who had been doing all (potential) customer interaction [also Rachel], plus having several meetings with the founders and a few other key people. I got occasional programming help from my boss as I worked through Chris Pine’s “Learn to Program” book (which uses Ruby), following a summer Ruby/Rails workshop with Stumptown Syndicate (through their Portland Tech Workshops, which may someday see a second workshop!).

When the VP of engineering found out I was learning to program, he told me that the best way to learn was to look at other people’s code, and so he set up an internal GitHub (GH:E) account for me. The CFO walked by in the middle of this, said “you can’t do that,” and the reply was “yes I can,” so I got my GitHub account, the first for someone in a not-technically-technical role.

We hired a few new support folks the next month. None of them had previously worked in a customer relations role (one was a bank branch manager, one was a lawyer, and one was a civil engineer). We talked about what had worked well in previous jobs, what might be transferable, and what our big dreams for the team were.

Customer Relations instituted a lightweight scrum-inspired daily standup, where we reported on what we’d accomplished the previous day, what we concretely hoped to accomplish that day, and any potential blockers. I later began recording all our daily goals/accomplishments (in handcrafted JSON!), with an eye towards building out a small web app. The web app, alas, never came to full fruition, but did make me very good at handcrafting JSON, and as a bonus I started learning to use different text editors.

I interviewed candidates. I joined the Twitter team as it grew from a single person’s responsibility to a shared one, and later mentored new members. I jumped right in when our internal Code Club started up, where engineers volunteered to teach some programming to anyone who wanted to learn. (There were a few iterations of this over time!) I suggested hand signals to our now-weekly CR standup meetings, which dramatically reduced interruptions and are still in use several years later. I ran CR’s new-hire education program for a while. I taught the culture class in new-hire education for a much longer while, and cultivated a space where we talked about fears, hesitations, and how to be successful even if you’re not perfect (mistakes are okay! Responding well is key to getting through them). I joined our off-hours PagerDuty team to help customers with urgent needs in off-hours, whether they were in Los Angeles or India.

I noticed that a lot of coworkers said nice things about each other behind their backs. Suspecting that it was at least partly due to shyness, I started a “Box o’ Compliments” form for sharing compliments with coworkers (anonymously or not), and regularly sent out the incredible results from this project. (It impacted people enough that it’s still in use, and its administration has been adopted by someone new. I am absolutely delighted by this.)

I pioneered a stats-inclusive, human-focused, peer-review-driven QA process for CR messages. I sent regular reports to each member of the CR team, and I worked with certain teammates one-on-one to improve particular problem spots. (Sometimes you need someone to understand where you’re coming from and figure out a game plan with you; sometimes you can use TextExpander to ensure you never send “withdrawl” again!) After an illuminating conversation with our Communications Lead in marketing, I learned how to strike the word “but” from my vocabulary almost entirely, especially when giving potentially difficult feedback, and saw strikingly positive returns.

Our customer numbers grew ever higher. We were acquired by a big Spanish bank. Our employee ranks soared into the triple digits.

I worked with our amazing, supportive engineering leadership to pilot a half-day weekly collaboration (tiny internship?) with our ops team. I paired for about half the time, and hacked on my own the rest of the time. I learned to use vim, and I made multiple PRs and contributions to our internal continuous integration tool, written primarily in Python. Ultimately, a large infrastructure upgrade (and the resulting complications) pulled the plug on this pilot after a few months, but if I hadn’t caught the programming bug before, this cemented it. The bug, that is. The bug was cemented. But not in a “sad butterfly in concrete” way. In an “I’m excited and I air-punch with happiness way more than I used to” way.

A few months later, I worked with one of our data engineers to try to implement something similar, with the ultimate goal of joining the data team. We started meeting one-on-one twice a week, before work, to teach/study Python (and a bit of SQL). For a while, we shifted focus to data structures and algorithms, and invited a few members of the data team to join us.

I was really hungry for the opportunity to learn programming for more sustained periods of time (an hour here and there is hard!), so I applied to the Recurse Center in NYC, which describes itself as “a writer’s retreat for programmers.” I was accepted, took a leave of absence, and moved across the country for three months. I loved the RC community, loved the supportive environment, loved the space to be joyfully intellectually curious. There’s much more to say about that, of course.

And now? Now, I’m more certain than ever that I’m on the right path. I like being intellectually tired at the end of the day. I love the challenge of a good problem. I thrive around kind, hardworking people. And I can’t wait to join my support experience with something more technical.

2016 resolutions

Send at least birthday cards, and maybe presents, to all family members. On time. (I already slipped on this, with my mom’s birthday on the 4th. In my defense, I planned to drive up and surprise her, and then we had an ice storm.)

Learn the names of the service people I regularly interact with

Together with Nathan, maintain our so-far flawless streak of leaving the country at least once a year. (PyCon being in Montréal the past couple years made this dead simple; we’re going to have to do more planning this time.)

Start working somewhere new in a role that feels sustainable.

Practice French as regularly as possible (maybe even daily!). I’m way out of practice but already have a new seven-day streak on Duolingo. Waffling on whether to start a class at the Alliance Française; it would be fun to have the structure and the community again. (edit before posting: I did it! I’m taking an advanced class, and we’re gonna talk about wine, and the teacher is an excellent one I’ve had before.)

I would say go chill in nature all the dang time, but honestly I don’t know how we’d NOT camp and hike a bunch more this year. We’ve already been hiking this year, and it was a blast.


It’s December!

When we last left our protagonist, she was in the midst of wrestling intergalactic warrior beasts figuring out how best to write the next chapter, given the tools at hand. It’s tempting to say the choices came without drawbacks; they didn’t. It’s tempting to say there was a lot of handwringing; there wasn’t.

I worked with HR at Simple to extend my leave, which gave me the space to investigate a few last things before ultimately deciding to…well, leave. That’s the short version. A long version can be acquired with approximately one (1) cup of coffee or similar; just be like, “you wanna get coffee on this particular weekday?”.

With some confidence, I can also now say that (if you’re in this situation anyway) getting bad news while you’re already sick is actually kind of terrific. You’re already listlessly petting the cat and watching Netflix, but since you’re sick, no one’s interested in telling you to “just get outside” or to “chin up” — they offer you tea and soup and encourage you to do whatever you want. So I had a weekend full of malaise, had honest talks about The Near Future with my partner, and then (largely at his urging) committed to taking some active semi-vacation, maintaining my “you still need to leave the house every day” requirement.

What I have been doing since this pivot?

  • I helped Carye Bye with Hidden Portland‘s library organization project! I got excellent mentorship in choosing the good bits (and keeping them useful — dates matter!) and joyfully recycling the rest.
  • I’ve had coffee/tea/resume-help rendez-vous with four former coworkers, all people I respect in different ways, and am meeting a fellow Portland Recurser on Friday.
  • I took a day trip up to Tacoma to visit my almost-two-month-old niece (she’s two months old today!), and I brought homemade vegan chocolate chip cookies. Little Veera reminds me to breathe. We breathed in the lovely scent of their Christmas tree while her dad fixed the fence outside. We breathed at wildly different rates, with our wildly disparate lung sizes, while my sister caught a nap. I narrowly missed the complete shutdown of I-5 North.
  • I helped an amazing friend move back somewhere that might have been home all along, and returned to my home with a new Dischidia ruscifolia (a Million Hearts plant).
  • I accidentally found a posting for a job I’m really excited about (!), which put a wrench in my “don’t look at jobs just yet” plan.
  • I am going to take a mid-week hike, now that the extremely torrential rainfall and landslides seem to have calmed down a bit.

And, following the really excellent advice of one of my former coworkers, I wrote out the good-parts-only story of my ~three and a half years at Simple. I ended up with two pages; I am a little shocked at how proud I am of what I DID do there. There’s a lot!

Now it just needs to get distilled into resume-sized tidbits. Onward!

Notes from 28 October, 2015: probability & math runes, errands in NYC, being an issue-filer

It’s kinda rainy today, we went for a run this morning, and I have new  glitter boots:

like combat boots, but fairly translucent, with a lot of silver glitter

Things are pretty much rad.

Doing a bunch of probability review and I am convinced that math symbols are basically runes. I mean, look at this. Square, for instance. Does it mean square? No, it means Q.E.D. Or end of proof. Or everywhere. Or “tombstone.” And sometimes it’s a rectangle. And sometimes it’s a triangle. And sometimes, for whatever awesome reason, we call it the “Halmos finality symbol.”

And like, I know (or HAVE known) a bunch of the runes. But it’s been a while.

It’s also interesting to see how symbols can be organized, though! Symbols that point in a direction. Things that are brackets. Stuff that looks like letters. That way, you can find things in this big rune-soup.

Today I am also distracted by Latvian passport application stuff. This can be done any time in Washington DC (has to be done in person), but they also do a mobile passport station once a year in New York. And, uh, I miss New York. So. It’s taking place at the end of next week, which crept up awfully fast, and not being in an office means it’s weirdly hard to print out a one-page document to fill out with my hands. Although it just occurred to me that I could fill it out as a PDF. Man. This is why it’s good to talk about stuff. Even just to a blog.

Anyway so I get to go to New York against next week and I am pretty excited about this.

I spent the afternoon taking my sloppy list of suggested corrections/improvements to OpenHatch “training missions” and turning them into actual GitHub tickets, which sort of terrified me? Like, “hi, I think this part could be written better.” I mean, who am I to tell them how to write things? I also filed a couple issues on things that just seem to be wrong, which did not fill me with the same level of horror.

I suppose it’s important to practice things that terrify you, perhaps as long as they’re not Actually Dangerous.

Notes from 27 October, 2015: algorithms, panicccc, bike-ifying my weather app

Earlier start to the day! I even did some chores at home, and saw the sunrise. (It was slightly foggy and ethereally beautiful.)

The Coursera Algorithms course continues to walk that line where it’s alternately awesome and completely baffling. It’s fine. This is fine.

Started in on quicksort today — partitioning is so simple it seems like it shouldn’t be so cool. And yet.

I feel like I have a reasonably good grasp on comparing Big-O complexities of various algorithms (like O(n log n) vs. O(n)), but DETERMINING the Big-O complexity of a given algorithm is something that I understand only temporarily, and then it slips away again. (I only know that merge sort is O(n log n) because I accidentally memorized this.)

My mom (who teaches programming) says Big-O is one of those things that you get, and you are so relieved, and then you learn more and it becomes SO HARD, and then you learn more and things start to click again. I think I’m in the middle part.

Finally headed back to Concordia University’s library for afternoon studying. (Also picked up my community library card!!) Decided that panicking for several hours over not being able to build a database from super messy data is not productive, and also it makes sense that I do not yet know how to do something I haven’t done before. (Panicked about other things instead [work-related things].)

Instead of panicking about the database that isn’t (yet), I headed back to my little weather app. I added in some temperature stuff, which I’ve been way more interested in since the answer stopped being “it is hot all the time, except when it is DANGEROUSLY hot and the air is poison.”

I started a new branch to do something I’ve been excited about since well before I started this project — I’m going to gather together whatever information seems most relevant for bike commutes so I can call up that info with a single command. (Maybe I’ll fling it in a mobile app someday, so I can call it up with a single tap.)

How much will this rule? I’ll just get to be like, “yo computer, I’mma bike today,” and it will give me relevant data.

From my preliminary notes, here’s what I want to include, with aspirational stuff in italics:

  • precipitation, if there’s going to be any today (later: narrow this to commute hours, so just morning/evening)
  • humidity, if it’s high (also decide what constitutes “high”)
  • temperature, if it’s “low” or “high” (decide what constitutes low/high) (later: only display if it’s very different from yesterday)
  • visibility, if it is (or will be) pretty low at some point today
  • sunset time, if it’ll be before I expect to head home
  • apparent_temperature (Dark Sky defines this! how rad), if it’s very different from the actual temperature. I’m fairly certain I care more about THIS measure of temperature than the technically-true one, unless there’s a good reason to pay more attention to actual-temperature (like…danger?). Haven’t thought of one yet, though.

Maybe I’ll do something really weird like make up a “biking pleasantness score” or something so I can be all, “ugh, today’s gonna be a 12” or “oh wow, I just HAVE to bike today; it’s a 47!”

Notes from 26 October, 2015: headache-b-gone, exercise

Actually went for a run with Nathan for the first time in…well, we never ran together in New York. I ran one evening with friends when we were there. It’s been a while.

But we ran this morning! There will be more of this.

My body celebrated by giving me a headache. Thanks, body. I hear you, and I dig where you’re going with that, but I’mma see what happens when I drown your feelings in Headache Tea. And naps. And the cat? And not doing my work.

I am THISCLOSE to making myself an actual sticker chart like a five-year-old and putting stickers on the days I have a productive morning, and the days I have a productive afternoon. I’m finding, post-illness, that my initial “YEAH DO ALL THE THINGS” enthusiasm has fizzled into “I LOVE MORNINGS” followed by “no, I can’t, everything is impossible, I should just not leave the house again” afternoons.

Ideas I have had to counteract this:

  • literally a sticker chart
  • do not go home for lunch
  • timebox lunch/mid-day break
  • aggressively schedule day
  • start going to a gym or some kind of fitness-y class

Maybe you got to that last one, and went, “Wait, what?”

I’ve been trading my usual “bike commute twice daily” for “go for a walk to the coffeeshop twice daily,” and this is the opposite of the intensifying I wanted to do (since, uh, forever-ish). (It’s been making me way less of a baby about walking here, though, even though it takes much longer. That part is great.)

Everything I have ever read from people who work out regularly (whatever that means for them) is like, “yeah, this is the thing I can’t make optional, this is the last thing to be cut, I will cancel meetings for this,” because it trickles down to everything else. It helps you sleep. It improves your mood. It reduces stress. It makes you feel like a card-carrying badass (maybe).

My days are full right now, but in a way that I choose. This would be a rad time to test-drive some changes, because I have that freedom right now.

Tomorrow, maybe, there will be no headache and I can get out of my way.

Notes from 20-23 October, 2015: hard work, sick times, fixed/growth mindsets

A non-what-I’m-working-on post! A mega-post of multiple days!

Last Tuesday was a fine and hard morning, and then I felt kinda weird in the afternoon, and by evening I was feeling awesomely awful and cancelled plans I’d been looking forward to (in a nutshell, I was Too Sick For Twitter).

Took Wednesday off, which the cat appreciated.

Thursday and Friday were well-intentioned, and I got algorithms time in the morning (later than planned, but I did it!), and then the afternoons kind of fell away. This Coursera class is kicking my ass. I regularly feel like an idiot, like I can’t possibly learn this stuff, like I’m missing something critical and there’s no reasonable way to find it.

Relatedly, did I tell you about the note I taped to my computer that says “HARD WORK IMPROVES INTELLIGENCE”? This is an actual thing that I did. Why? Let’s talk about it.

As a related aside, I would love to learn about beliefs around intelligence that formerly-labeled-“gifted” kids had, or developed. I’ve largely had the impression in my life that things are either easy, meaning I am good at them, or hard, meaning they are probably out of reach.

There is good science suggesting this is not a helpful belief — and that post is excellent, and even if I haven’t finished it yet, you should still read it [okay I’ve finished it now]. Anyway, Carol Dweck! Sociologist, intelligence-belief researcher, probably rad person. Allison Kaptur (writer of the piece above), former Recurse Center facilitator, speaker, programmer, beloved by pretty much everyone I talk to who has met her.


[Dweck has] found that there are two different frameworks for thinking about intelligence. The first, which she calls the fixed mindset, holds that intelligence is a fixed trait, and people can’t change how much of it they have. The other mindset is a growth mindset. Under a growth mindset, people believe that intelligence is malleable and can increase with effort.

I’d run into this before, but now I have an easy-to-access resource. And then we get to here:

Several studies found that people with a fixed mindset can be reluctant to really exert effort, because they believe it means they’re not good at the thing they’re working hard on. Dweck notes, “It would be hard to maintain confidence in your ability if every time a task requires effort, your intelligence is called into question.”

HI. You rang?

And then THIS:

there is some research in [the book Mindset] about gender discrepancies, and findings that high-achieving girls are more likely to have a fixed mindset and less likely to risk failure when they hit something hard.

I once dated a dude who came from a science/programming background, and he got really into astrology, which a lot of people find surprising/weird. “I don’t know whether astrology is real,” he once told me, “but I don’t really care, because it’s given me a framework to finally come to terms with parts of myself that I’ve struggled with my whole life.”

The more I learn about intelligence mindsets, the more a lot of things about my self-perception start to make way, way more sense. Not that I now have something to blame, or that I’m off the hook for those things — but I finally have a starting point, a way to address them directly.

Notes from 19 October, 2015: remembering that things exist, inertia, OpenHatch, man page humor

It’s Monday! I am READY FOR THIS (I am sleepy, but I have coffee, and I did get out the door in plenty of time to have a full day AND enjoy some daylight). I am not feeling totally awesome, but am trying to ignore this.

I am officially almost lost, but I recognized literally non-zero concepts in my algorithms course. I know about Big-oh notation! Today I also learned about Big Omega, Big Theta, and Big Brother notation.

Just kidding about the last one!


Had a kind of rough momentum-crushing lunch break (but a deliciously weird burrito). Took a short nap, which sort of helped, mostly because it gave me a deadline for getting up and going again. Took some ibuprofen in the hopes that it would decrease the amount of space that “pain” is taking up in my attention. It maybe helped?

Remembered that exists and learned that there’s a new tea café not that far away from here. It is like some sort of light-filled hipster dream space, filled with white walls and plainly finished wood and mason jars and succulents in tiny pots, so I wanted to be Too Cool for it…and instead, I kinda dig it. I’ve been kind of blown away by the gluttonous uses of spaces here since returning from New York (so much space unused! how can you afford that?), but sometimes that feeling is really good.

Decided that rebuilding inertia was more important than working towards graphing my UP data today, and tried poking through YourFirstPR tweets (it’s Hacktoberfest! I still haven’t submitted any PRs!), then remembered that OpenHatch exists and went there instead.

I’m practicing using my newly installed (as of Friday) wget, and I made my first tarball (!), and I read a ton of the man pages for tar,  and boy howdy is there a lot there. Knowing how to search for things in vim/vi has been SUCH a huge boost in reading man pages. (Don’t know how? In vim, or in a man page, type / and then your search. [Since you can do really complicated searches if you want, searching for . will not search for a literal period — it’s a wildcard! — but letters and many kinds of punctuation should work as you expect.] Type n to find the next instance of that term, or N to find the previous instance. Bask in your wizardry.)

In further man page adventures, patch has (surprise) another long one, but check out this gem:

Assume  that  this  patch  was  created with the old and new files swapped.  (Yes, I’m afraid that does  happen  occasionally,  human nature being what it is.)

The -s flag is also basically how I work as a human being. I will leave it as an exercise for you, the reader, to figure out what that is.

ALSO learned about diff, which is one of those things that people have mentioned in context a lot, as if any garden-variety nerd toooootally knows what that is. “Yeah so like you just do a diff on it; it’s super easy.” Well, I didn’t. I mean. I got the concept. But apparently it’s a command-line tool. To generate these files that tell you the difference between this file and this updated/fixed one. Which rules.

diff -u nutty-pancake-original.txt nutty-pancake.txt

On the OpenHatch patching mission, they’re like, “yeah use the -u option, because this creates a unified diff (“the universally preferred flavor of diff output”). So it’s just diff, that flag, the original file, and the newly updated file. (Having used git a bunch, it took me a second to realize these files had to be separate.)

Also practiced using more grep to find and destroy every aubergine, regardless of capitalization. Turns out Digital Ocean has a nice little grep reference here.

Whew. I feel like I got through some stuff today! It’s still in short-term memory, but that’s a fine place to start.

Notes from 16 October, 2015: algorithms resources, Apple Store win

Started the day flipping through Mathematics for Computer Science (amazing old link here — it has the very incredible “What is a Proof?” introduction to Chapter one; a more recent iteration of MfCS is here). It was mentioned by the Coursera algorithms course I’m trying out, so, hey! I have indeed already been lost by some of the math stuff in CLRS, so it seems like having a concise-ish reference on hand will be…handy.

Really, all this algorithms stuff seems to be a knowledge rabbit hole. “But I need to learn more math!” I hear myself say. I took calculus in high school (it was fine, and then it was a disaster), and then again after I dropped out of college because it seemed like fun (hello, I was raised by engineers!), and then…that was a very, very long time ago at this point. I ran into trouble trying to use my phone calculator to compute logs of things yesterday. So. Fortunately I know some excellent math nerds, and now I have actual things to ask them about.

Also! Do you love algorithms, too? Or would you maybe like to? Maybe you would just like to “Netflix and chill” with some algorithms. The animated (i.e. lively, not a cartoon) lecturer of this Coursera course has some recommendations, which I’ll share here for fun.

Aside from the Eric Lehman and Tom Leighton document, there are also books! The instructor gives his four favorite algorithms books, the second and fourth of which are available for free (!) online:

  • Kleinberg/Tardos, Algorithm Design, 2005.
  • Dasgupta/Papadimitriou/Vazirani, Algorithms, 2006.
  • Cormen/Leiserson/Rivest/Stein, Introduction to Algorithms, 2009 (3rd edition).
  • Mehlhorn/Sanders, Data Structures and Algorithms: The Basic Toolbox, 2008.

Also there’s a brief “you may be rusty on this stuff” explanation of log base 2, which is just, like, plug a number n into your calculator, then divide by two. Then keep dividing by two until the number is smaller than one. And the number of times you needed to do that is the log. WHAT. Awesome.


Trying to learn stuff and immediately apply it is still kind of terrifying. Maybe just with Postgres.

Also I had a way shorter afternoon than I intended, because I ended up going into the Apple Store to get my phone fixed. (There’s this thing with some early iPhone 5s, and I do indeed have a very early iPhone 5, and the sleep/wake button on top stops working, and it’s…not great. The fix requires sending the phone away, where they have to take EVERYTHING out, and you have to wipe your phone beforehand, so you have to have a recent backup, which I did not when I first went in in June.) The wait was especially long, I went to the library nearby and tried to study a bit, there was a really distracting dude nearby…and then Apple texted me to head back.

Here’s a fun fact: I got the iPhone 5 when it was new, to replace the iPhone 3 my dad had given me when he was fed up with it (I had no smartphone). Know when the 5 came out? A little over three years ago. Know how long this warranty fix is good for the faulty button? …Three years. So I was toast.

Fortunately, I had YET ANOTHER experience at an Apple Store where the people helping me intuitively understood the right thing to do (<3 to Erika/Erica and Mark, who modeled really good mentorship interactions during this whole thing). They found the note from when I came in early this summer, and they got a manager to sign off on…just swapping my phone out (!).

Anyway so I have a phone that just, like, works now.

This took forever, though, and I didn’t fancy studying til 7. Back to it Monday, then.

Notes from 15 October, 2015: loop invariants, psql will eat your soul, bad server.log pickup lines, TV ideas

Autumn Bridge Term continues!

I have some outstanding questions from the end of chapter 1 of CLRS (outstanding questions…they’re terrific!) (ho ho ho), and I will ask about them later, but also I dove right into chapter 2.

Unsurprisingly, it gets denser pretty fast. I am reading and rereading and rerereading a bunch of things. I have a basic grasp on, say, loop invariants, but I absolutely do not yet grok them.

Had a part-social-catchup, part-lunch-with-Nathan-and-his-mom-who’s-in-town lunch, and have significantly decreased my FOMO related to RC chat (Zulip). (I made a lot of choices about what NOT to read, which I am really proud of, and chose to read a small number of threads. All hail good threading.)

Now I do not have a big glaring “6949 UNREAD MESSAGES” thing hovering over the icon, and also I haven’t been keeping Zulip open, which makes it even easier. And I didn’t have to read 6949 messages to get there. (Phew!)

Decided to bravely tackle a Postgres problem with Nathan after lunch. We’ve previously tried to work on programming problems before, and it turns out that that might be a dangerous thing to do with your partner?

This time went a lot smoother, though, than any previous attempt, which I suspect is largely due to practicing “I don’t know” and related skills at RC.

Let’s back up in the terminal and see what we discovered! My brain is exhausted, but I know that I can understand my past.

🎈 🎈 🎈 🐣 🎈 🎈 🎈 psql
psql: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

As you may remember from previous adventures with my prompt, the “🎈 🎈 🎈 🐣 🎈 🎈 🎈” is literally my bash prompt and I refer to it by its shortname sometimes, “chickparty,” because that’s what you get with a baby chicken and six balloons.


All the googling in the world yesterday & today helped me find some interesting information: namely, be exquisitely careful with your, because you can do DEEP DAMAGE if you go messing with it all willy-nilly, but sometimes you MUST mess with it. This was not one of those times, regrettably.

For an excellent explanation of one possible path here, see this StackOverflow post. I’m especially impressed that the OP  ultimately solved their own problem, and THEN took the time to retrace their steps, explaining each one for the benefit of others.

I tweaked the find command just in case I was missing something, but there was indeed no postgres…except, as Nathan explained to me, the instance of grep that was searching for postgres. Sigh. Now I know!

  501  6548  3487   0  3:19PM ttys016    0:00.00 grep postgres

Ugh. Go find yourself, grep.

Alas, the end of my server log had an entirely different error than the one in the SO post:

LOG:  skipping missing configuration file "/usr/local/var/postgres/"
FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.4.4.

Yesterday, I had PAGES upon pages upon pages upon pages of this, almost endlessly repeating (there was some other stuff way way way up high, and the only dates I found for THOSE were in early 2014…hmm!). I scrolled with the mouse, the scrollbar barely moved, and I ultimately just had to drag and drop it like some kind of…person who does inelegant things.

For fun, and because both the internet and Nathan had suggested this, I ran tail -f,  which follows (aha! there’s the f) the progress of the file until you tell it to stop. Sure enough, guess what kept adding to itself every few beats:

🎈 🎈 🎈 🐣 🎈 🎈 🎈 tail -f /usr/local/var/postgres/server.log 
DETAIL:  The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.4.4.
LOG:  skipping missing configuration file "/usr/local/var/postgres/"
FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.4.4.

(and on and on until control-c stopped it)

SPOILER ALERT it is the postgres logs! My friend, you have been so, so busy for SUCH a long time, huh? Your legs must be tired (why) because you have been running on my computer for all eternity (groan) ho ho ho

This postgres directory had all kinds of goodies in it:

🎈 🎈 🎈 🐣 🎈 🎈 🎈 ls
PG_VERSION	pg_clog		pg_multixact	pg_subtrans	pg_xlog
base		pg_hba.conf	pg_notify	pg_tblspc	postgresql.conf	server.log
global		pg_ident.conf	pg_stat_tmp	pg_twophase	postmaster.opts

And yeah, doing cat PG_VERSION netted a clean 9.2. Rats. 9.2 is apparently five hundred kinds of trouble! Down with 9.2; long live 9.4 until the next Extremely Different New Version comes out.

We looked at disk usage here with the -h flag, which stands for human? It displays it not in…another format which is trickier.

🎈 🎈 🎈 🐣 🎈 🎈 🎈 du -h
6.0M	./base/1
6.0M	./base/12265
6.0M	./base/12270
6.0M	./base/16384
 24M	./base
428K	./global
8.0K	./pg_clog
8.0K	./pg_multixact/members
8.0K	./pg_multixact/offsets
 16K	./pg_multixact
8.0K	./pg_notify
4.0K	./pg_stat_tmp
8.0K	./pg_subtrans
  0B	./pg_tblspc
  0B	./pg_twophase
 16M	./pg_xlog
 83M	.

All the base are belong to us directories correspond to previously existing databases (from a zillion years ago when I managed QA reports for support, and also possibly from an open source day at Grace Hopper a few years ago?). Which is neat! I did not know that. That is a thing I learned today, too.

Because I decided that I did not care about these old databases that I have not looked at in literally years, we sallied forth with a rm -rf *,  which felt so so spooky to run.

Just. Whole postgres folder there. GONE. Run ls, completely empty.

Running psql still gave the same error (about /tmp/.s.PGSQL.5432), BUT, I ran ls again in /usr/local/var/postgres/, and we NOW have…dun dun dun…a server.log file! It’s Not Nothing!

Look at the cool new stuff at the end of server.log:

postgres cannot access the server configuration file "/usr/local/var/postgres/postgresql.conf": No such file or directory

It’s different! And then it was just THAT forever and ever, ^C (which is, I don’t know, like a computer’s “amen”? sure).

Okay so maybe not the most thrilling, but it’s Progress, and that is what I was after today.

Tried to get something going, since we’d now cleaned out all the old misbehaving stuff. Ran a series of commands that did not impress the computer:

  • initdb? no.
  • initdb -D .? no, initdb: directory “.” exists but is not empty. If you want to create a new database system, either remove or empty the directory “.” or run initdb with an argument other than “.”.
  • How about rm server.log; initdb? nooope. How about…
  • rm server.log; initdb -D . ? JACKPOT. By which I mean “success messages.”

So about that empty postgres directory. What’s it got in it NOW?

🎈 🎈 🎈 🐣 🎈 🎈 🎈 ls
PG_VERSION		pg_ident.conf		pg_snapshots		pg_xlog
base			pg_logical		pg_stat
global			pg_multixact		pg_stat_tmp		postgresql.conf
pg_clog			pg_notify		pg_subtrans		postmaster.opts
pg_dynshmem		pg_replslot		pg_tblspc
pg_hba.conf		pg_serial		pg_twophase		server.log

It’s not nothing! [distant cheers] The crowd goes wild [some woo-girls scream “WOO” in the background] everything is coming up Chickparty

And look at this adorableness (this is the whole server.log, not just the constantly expanding tail of suffering):

🎈 🎈 🎈 🐣 🎈 🎈 🎈 cat server.log 
LOG:  database system was shut down at 2015-10-15 15:31:42 PDT
LOG:  MultiXact member wraparound protections are now enabled
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections

So then we whacked a few sticks against the wall, eventually creating a database, but that part almost feels like it will be helpful to struggle through a few times.


psql foo

psql postgres
(yeah, but, what if we want something else. let's try to do something else.)

psql postgres 'create database foo'

psql postgres -c 'create database foo'

(thus spake Zarapostgres)

This puzzled Nathan for a bit, too (we didn’t hit on the perfect command the first time, anyway), which made me feel way better, because he does Postgres-y things a bunch for work. It’s nice to have people model that expertise does not equal omniscience — part of being experienced is knowing how to be productive and curious when stuck, I think.

So! Now I still have four CSVs full of all numbers (one date, many many many floats with 15 digits past the decimal…if they’re already double precision types, I’m kinda wishing there were a non-CSV format for these SUCH AS perhaps a database file). But I also have a working postgres to wrestle with tomorrow.

Postgres wrestling! Coming to a television near you. It’s gonna be big.