strugee.net

Posts from 2017

Show only posts from January February November December March April May June August October

RC week 9

This is week 9 of being at the Recurse Center.

Day 31

Arrived ~10:30, departed ~15:15, arrived ~17:30, departed ~1:30, total time at RC 8h45m.

There were only two people in my checkin group this morning, and one of them was me. We thought about joining another checkin group, but it was confusing so we did it with just us.

Didn't really do a whole lot for the rest of the day. I fixed up a couple minor problems on strugee.net. Also I finally(!) fully caught up on blogging and went out to lunch with a bunch of people, including Nelson, the new resident. He's awesome. We had some seriously interesting discussions about the recent CloudFlare incident, as well as the work he did while at Ksplice.

Left early to do laundry, then came back for Nelson's talk.

Spent a lot of time in the evening cleaning up the [pump.io homepage][pump.io] - I removed a bunch of duplicated content, reordered the remaining text to put the important stuff first, and imported all the pump.io-related posts on my personal blog into http://pump.io/blog/.

Day 32

Arrived ~11:30, departed ~21:40, total time at RC 10h10m.

Missed my checkin by a wide margin because a) after I realized I just couldn't make it by 10:30 I gave up and had a nice relaxed breakfast and b) I looked at checkins.recurse.com and realized that I was the only one in my checkins group.

Went out to Taim for lunch relatively soon after that. Didn't do a whole lot for the rest of the day, honestly - although I did go for a walk to a park with some folks. Also, tested out the Signal videocalling beta with Matt, which worked pretty damn well, I gotta say.

Day 33

Arrived ~10:40, departed ~1:45, total time at RC 15h5m.

I kinda tried to make it in for checkins this morning, but not really because I still hadn't fixed the "I'm the only one in my checkin group" problem. Didn't really do much today, honestly.

Went out to lunch with Ant6n and Andrew and had a lot of interesting discussions with them, ranging all the way from Zig to x86 hardware - did you know that internally x86 is actually essentially a VM implementation?

Spent a lot of time keeping Eliana company in Hopper late in the evening.

Day 34

Arrived ~11:05, departed ~17:55, total time at RC 6h50m.

Went to Nelson's "my first kernel module" talk immediately upon arriving at RC, which was awesome. I had some interesting conversations with him afterward, too, where I confirmed a theory I had about some weird btrfs-related behavior I'd seen a long time ago (where I kill -9'd an obviously hung btrfs process, which refused to die anyway). We also spent some time trying to figure out why benchmarking loopback network performance gave some weird results, which was quite informative.

Didn't do a whole lot after lunch. Left halfway through presentations to go to a play with Ant6n which unfortunately (due to a water incident with the subway system) I didn't quite make it to.

Friday

Arrived ~15:10, departed ~23:10, total time at RC 8h0m. As always, Friday doesn't count as a day because RC is technically not in session.

Woke up at a decent time but didn't really bother to get up or do anything, so I arrived relatively late to RC. Spent some time reading TOTP in preparation for the RFC reading group meeting (which ended up not happening) and then went to the RC Game Jam kickoff. Spent most of the rest of the day discussing game design with my team before getting dinner and hanging out in Babbage for Bottle Share Friday, even though there weren't that many of us (particularly since James was doing stuff in Babbage) and we didn't have any bottles to share. Oh well - it was still fun.

Talked with Deniz and Alex and some other folks (I've forgotten who, to be honest) before heading home.

Executive summary

Most of the "interesting" stuff that happened this week had to do with the resident. Got a little done codewise, but not that much. I'd say this week was 50/50 in terms of productivity.

Total time at RC 48 hours 50 minutes; cumulative time 412 hours 0 minutes.


Driftless at 1,000 mph

Last week I published How I passed 2k GitHub contributions. This post is, in some ways, the antithesis of that, and it will be very emotional and messy. Here be dragons.


Throughout my time at RC I've noticed only one thing is consistently difficult for me: focusing on hard things. Intellectually I love the idea of challenging myself. And I find that when I start to work on things that are new and not easy, it feels good and I tend to keep working on those things, because they're interesting. But starting is something that I just don't do frequently enough, and so I find that I haven't progressed as a programmer nearly as much as I would like to have.

What is productivity?

Merriam-Webster defines it like this:

  1. the quality or state of being productive

  2. the rate per unit area or per unit volume at which biomass consumable as food by other organisms is made by producers

And "productive" is defined like so:

  1. having the quality or power of producing, especially in abundance

  2. effective in bringing about

  3. a) yielding results, benefits, or profits; b) yielding or devoted to the satisfaction of wants or the creation of utilities

  4. continuing to be used in the formation of new words or constructions

  5. raising mucus or sputum (as from the bronchi)

By definitions 1-3 I certainly seem to have been productive; I've written a lot of code, much of which is useful. But useful to whom, and for what purpose?

I sometimes feel as if I'm just generating more and more code without any guiding process, as though I'm wasting my time even though concretely I'm getting a lot of things done - driftless even though I'm churning out work at an extremely high rate. Is this imposter syndrome? Or are my worries legitimate?

Maybe a better way to frame this question is to split it in two - am I being productive for myself, and am I being productive for the community - the two things that are currently important to me personally.

I think I am failing at being productive for myself, in some really important ways. I'm also succeeding in some - for example, I used to wish I had an engine to run my blog, and now I have such an engine. But in others I am failing.

What is the purpose of RC? Why am I here?


recurse.com says this about people who come to RC:

The Recurse Center is for people who want to become better programmers. We are not startup school nor are we a bootcamp: Our focus is helping people become better programmers, not building prototypes, and we're not a training program for web developers.

Because there is no certification or grading, the only reason to come to the Recurse Center is to become a better programmer. As such, you will find kindred spirits and tremendous energy. We look for smart, friendly, self-directed, intellectually curious people who enjoy programming and want to get dramatically better.

More directly, the manual has this to say:

You should be here primarily because you want to become a better programmer and spend the majority of your time here programming and doing things directly related to programming.

Well, we could ask you to be respectful of speakers and keep conversations on-topic in the Recurse Center space during the day (i.e. if you want to take a break and chat about your weekend, go grab a coffee).

However, as Harold points out, that isn't necessarily an accurate picture of what RC is about. I think a lot of what it's really about is the people who are in the space with you. I've sure had a wonderful time with the people. Does that mean I'm "succeeding"?

Then there's the teaching.


Screenshot of a Zulip message where Anja says "thank you AJ for teaching us so many things. :)"

This is referring to the fact that I teach at Security Club every week, plus my volunteering to run a workshop or two for Beginner's Club and Web Dev 101.

Practically speaking, I get very, very little out of teaching at RC. Sometimes it helps solidify (or just plain remind me of) the concepts I teach, but this is the exception, not the norm. So in that sense by spending time teaching, I'm "failing" at being productive for myself. But it seems clear to me that people get a lot out of the time I spend, so I seem to be very productive for the community.

Equally importantly I love teaching. I qualified the previous paragraph with "practically speaking" because emotionally teaching is something that's very beneficial to me. Does that mean I'm "succeeding"? Does it mean I'm "failing" and "succeeding" at the same time?

I honestly don't know.


RC week 8

This is week 8 of being at the Recurse Center.

Day 27

Arrived ~10:35, departed ~0:30, total time at RC 13h55m.

Had a nice discussion about Stratic in my checkin group this morning. After that I went to the Capture The Flag introduction workshop, then spent essentially the entire rest of the day finishing up static to Stratic (which included, in a truly horrifying fashion, me rewriting and force-pushing the demo repository's history a good four times or so) so I'd have a post up for the iron bloggers meeting. Also spent some time fixing some bugs in generator-stratic and published the beta 2 release with those fixes. Closed out the evening by digging into a remark problem where <script> tags would be stripped from posts. Ended up just asking on Gitter.

Day 28

Arrived ~10:30, departed ~20:40, total time at RC 10h10m.

Continued to investigate the remark problem based on replies received overnight - turns out it was a bug in remark fixed in a release that had gone out the door literally the same day I asked. After that I spent the day upgrading generator-stratic (which, remember, was originally scaffolded years ago) to newer and newer releases of yeoman-generator until it used yeoman-generator@latest. Then I spent time adding some basic tests - they're kind of just smoketests for now (are the correct files generated, does gulp serve work) but I intend to expand them. Also moved over some issues to the new straticjs/RFCs repository and attended Casual Presentations.

Day 29

Arrived ~10:50, departed ~20:35, total time at RC 9h45m.

Didn't do a whole lot codewise today. However, I did teach Unix fundamentals for Beginner Club, which went pretty well - I just spent the entire time in the commandline, demonstrating different commands. We spent a little time talking about shell scripting, but not much. I forgot to cover conditionals, which was dumb since they're pretty weird in shell scripting. Spent some time in the afternoon starting a draft of How I passed 2k GitHub contributions

Watched Kiki's Delivery Service in the evening.

Day 30

Arrived ~10:35, departed ~00:05, total time at RC 13h30m.

Finished and published How I passed 2k GitHub contributions. Presented cryptography basics at Security Club, then spent a lot of time fixing miscellaneous items on steevie. In particular ejabberd was apparently configured to use a standalone certificate bundle (instead of symlinking to something in /etc/letsencrypt/live) - this was because ejabberd requires the private key and the full chain to be in the same file. TLS certificate renewal didn't properly update this bundle, so XMPP client connections weren't working. ZNC was broken in the same way, so I fixed both of those. I also spent some time setting up a system to publish everything custom in /usr/local on GitHub so that it's public and version-controlled. So that's nice.

Friday

Arrived ~15:50, departed ~1:00, total time at RC 9h10m. As always, Friday doesn't count as a day because RC is technically not in session.

Came in super late (though I woke up earlier). Almost immediately after that I attended an initial meeting about starting an RFC reading group (an idea I floated on Zulip a couple days ago). Spent most of the day poking at IETF things as well as responding to hubot-seen PR comments. I just got write access! \o/

Closed out the evening by attending Bottle Share Friday, where I had a long discussion with Alex about running my own email server (which spun off into a discussion of how completely terrible and busted email is), followed by a long discussion about whether Apple's release schedule for Safari and attitude towards new web features and third-party iOS rendering engines is justifiable.

Saturday

Arrived ~11:15, departed ~23:30, total time at RC 12h15m. Saturday doesn't count as a day because RC is not in session.

Marathoned Lord of the Rings today. The showing was small and people drifted in and out but most of the time there were a couple people watching, which was fun. The original plan was to watch the director's cut versions, watching The Return of the King on Sunday, but we ended up watching the regular versions because you can't rent the director's cuts off Amazon, and I wasn't about to pay $30 for movies that I already own on DVD back home. We probably would've still watched on Sunday, except that I went out to get pizza for dinnr and found out that it was pouring rain (with thunder/lightning and everything). So I decided we'd watch The Return of the King and wait for the rain to let up, which worked beautifully.

Hussein came in just as I was about to leave and stated that he almost had a heart attack because he sprinted literally from his apartment to Duane Reade, which truthfully was absolutely hilarious. We had some fun wandering around Duane Reade trying to find soap (which I needed to buy) before we both headed home.

(As a side note, my favorite brand of mac 'n' cheese by far is Annie's, which my local supermarket does not carry. But apparently Duane Reade does!? Wat???)

Executive summary

This week was weirdly divided - some parts were hyper-productive and some parts were pretty terrible. I certainly got a lot of work done on Stratic, and I taught a lot. But I didn't really do a good job of working on stuff that pushed my programming abilities forward.

Total time at RC 68 hours 45 minutes; cumulative time 363 hours 10 minutes.


RC week 7

This is week 7 of being at the Recurse Center.

Day 23

Arrived ~10:00, departed ~21:45, total time at RC 11h45m.

Didn't get a whole lot done today, mostly because we were all welcoming the Spring 1s - I went out to lunch with some of them and participated in Code Dojo in the afternoon (Aditya and I solved the challenge in bash, which was pretty interesting an also hilarious[1]). However, I did do some maintenance on gplenforced.org. I did, however, start a project to display activity in 455 Broadway in realtime which I'm pretty exited about.

[1]: Aditya asked me "so can you just cast a string to an integer in bash or...?" and when I said no he looked at me and asked how in the world we could complete this task - not realizing that the correct question is, of course, "does bash have a type system?" The answer to which is no, no it does not.

Day 24

Arrived ~14:30, departed ~1:10, total time at RC 10h40m.

Spent most of today working on realtime.recurse.com - I got the basic API working, so you can POST to the server and it'll handle expiry properly. Also spent a lot of time blogging for the Iron Blogger meeting (in which I got sentenced to use vim for the week instead of Emacs for not writing a post a couple weeks ago).

Day 25

Arrived ~10:30, departed ~19:10, total time at RC 8h40m.

Spent the day catching up on various things, notably putting out a new pump.io beta that backported some regression fixes. In the evening I spent most of my time finishing up a mid-year college application form before videocalling with a friend in college.

Day 26

Arrived ~10:35, departed ~1:05, total time at RC 14h30m.

Spent some time working on server stuff today. Other than that though I didn't do much of anything.

Friday

Arrived ~16:20, departed ~1:45, total time at RC 9h25m. As always, Friday doesn't count as a day because RC is technically not in session.

Worked on generator-stratic today. I fixed some bugs and disabled some functionality that wasn't complete (and was non-trivial to complete). Published a beta 0 in the evening.

Executive summary

This week was... okay in terms of productivity. It started off relatively good, slipped a fair amount in the middle, and then somewhat came back at the end of the week. I did, however, check off some semi-longstanding issues on my todo list. So that's nice.

Total time at RC 55 hours 0 minutes; cumulative time 294 hours 25 minutes.


How I passed 2k GitHub contributions

So the other day I logged into GitHub and saw something crazy:

Screenshot of my GitHub contribution graph showing 2,054 contributions over the past year

How in the hell did I end up with that many contributions? Well, I think I know why - it happened because of a couple related, small habits I have. I thought I'd share them with everyone else as a sort of trivia - maybe you can adopt these habits too! (Although hopefully because you think they're good ideas, not because you just want to make yourself look cool on GitHub.)

Fix typos

If projects are freedom-respecting, that means that anyone is welcome to contribute if they're able to offer something valuable. How many times have you seen a typo in some docs? GitHub makes it super, super easy to fix these (just click the pencil icon in the upper-right of GitHub file views), and they're a fantastic way to contribute a little back to projects. Even if you aren't reading docs on GitHub, it often doesn't take that much time to find where they're hosted (which is frequently GitHub anyway). Really good docs will even have a link to their source right on the generated page.

So whenever I see a typo, I send a Pull Request. It's become an automatic response to seeing something that needs fixing, and is pretty routine for me nowadays.

Oftentimes there are changes that aren't as easy as a typo, but are still super easy to fix. Take this Homebrew PR - I authored it on a tablet and it took me under 3 minutes to make the suggested change[1]. That's not a lot of effort, and it'll help lots of people looking for the Homebrew change log. The next time you find yourself thinking "it kinda sucks that..." ask yourself - can I fix this myself? And if you can, go for it! Even if you screw up, I promise most projects will want to help you out instead of making fun of you[2] - as someone who runs several freedom-respecting projects, I know that getting new contributors is very, very valuable and because of that I'll do a lot to make contributing a good experience. I would encourage everyone to, as Mike McQuaid puts it in that Homebrew PR, "be the change you want to see in the world."

[1]: of course, that's partly because I'm pretty good at git and grok things like rebase -i. But even if that's not you and it would take you longer, it sounds like a great opportunity to improve your git skills to me!

[2]: I feel obligated to point out that not every project is like this - there are some projects that have a terrible culture (*coughcough*Linuxkernel*cough*). Screw them. They're not that common in my experience and it's their loss, anyway. Don't let them deter you from trying to improve things outside of their bubble of suck.

File issues

I just talked about making small changes whenever you see something you can improve with a couple minutes' time. But what if you're in a hurry, or it would take longer?

Filing issues is a super easy way to solve this. Get into the habit of filing issues for everything that irks you[3] - you're not allowed to say "such-and-such a project sucks because it's buggy!" when you haven't told the developers about the bug you're experiencing!

Filing issues also takes very little time and is super helpful to the developer. Probably a lot of the people who read this blog are software developers, so I'm betting you can understand how great it is to receive an issue that gives you lots of details that you can then use to fix a bug or a design problem. So why not give the gift of issues? Just make sure to search for duplicates! (This accounts for a significant amount of those 2,000 contributions on my GitHub profile. Over the course of my time on GitHub, I've filed 619 issues, 438 of which were on other people's projects. Of course, that's just on GitHub - I also do this frequently outside of GitHub.)

Again, every time you find yourself saying, "why doesn't it..." or "I wish it..." or "it's so annoying when...", let the developer know! You'll help them make their project better.

[3]: this is not to suggest that you file ridiculous issues that don't really say anything or just complain. But a focused bug report describing something concrete that's problematic is awesome.

Publish by default

This is the last and biggest habit I have that I think led to those 2k contributions: I publish everything by default, no matter what. It doesn't matter how bad or hacky or ugly I think a software project is, I just publish it. Because honestly, why not?

Keeping projects public doesn't get in anyone's way. It's not like someone will look at your GitHub and be annoyed that you give so much software to the world. And there's even a chance that your hacky script may actually be useful to someone. Even if I think a project is "bad" I'll still publish it because the reality is that no one is going to go around GitHub specifically trying to find people to make fun of.

Publishing projects also gives me incentive to clean them up - write a README, write tests, and keep a change log (if relevant). My standards are higher because I know all my work is all in the open - not because I'm afraid of other people telling me I'm doing it wrong, but because I want to create high quality code that has a better chance of being useful to the wider community.

In summary

All of these habits are related. The tl;dr is this: engage by default. Get used to being involved instead of shrugging off a problem and moving on. Put your work out there for other people to see. The open source/freedom-respcting software community belongs to everyone - and that means we can all contribute to improving it. We just have to start.


~