strugee.net

Posts categorized as "personal"

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.


RC week 6

This is week 6 of being at the Recurse Center.

(I feel obligated to point out that this is being published a week later than it's supposed to be because I got behind. I am, however, very confident that the following is accurate. I used GitHub history and location data to help me remember the parts that were fuzzy.)

Day 19

Not at RC. Total time at RC 0h0m.

Traveled back from FOSDEM.

Day 20

Arrived ~16:45, departed ~22:10, total time at RC 5h25m.

Somewhat unproductive day. Spent most of it just trawling the web. I was completely exhausted since I got back to my apartment from the airport at 3 in the morning. (My flight got in late, I waited at the airport for a while to see my sister, and at 12:30 I got on my train away from the AirTrain station except that it was in the wrong direction. Also, fun fact, subways and trains run really infrequently at 1 AM. Who knew!?)

I did, however, write the slides for the next day's Security Club presentation on the basics of cryptography. Started them pretty late, though, and mostly finished them at home, which was unfortunate since I was up real late again.

Day 21

Arrived ~13:00, departed ~22:00, total time at RC 9h0m.

Arrived with a little time to spare before teaching Cryptography Basics for Security Club. Didn't do much in the afternoon before leaving to walk down to the waterfront with 15 people or so, which took an hour and was really, really lovely, honestly. Especially since the Winter 1 batch is ending so soon.

Day 22

Arrived ~12:00, departed ~5:00, total time at RC 17h00m.

Spent the morning and early afternoon pairing with Jackie on icalc. We fixed a maddeningly weird bug where, when the user input an incorrect value, the operation type prompt would be displayed twice. You can see the fix here - the problem was that getchar() was retrieving the newline used to "submit" the operation type when the function was called again (recursively). In other words, the stdin stream had two characters on it - the incorrect character, and the newline. The solution was to just use a different function from libc that did this correctly. The entire process was pretty educational, since it required delving into C strings, the libc manpages, etc. After fixing that, Jackie and I paired on a JavaScript project that will display Bank of America account balances on the commandline (a non-trivial problem, since Bank of America requires JavaScript).

In the late afternoon, switched gears a bit to review a PRISM Break PR.

In the evening, I gave a presentation at Thursday night presentations entitled "Mercurial for Git folks". I put zero effort into slides and instead simply opened up a bunch of tabs and terminal windows with content I wanted to point to while I was talking. Then I got up there and just... talked about why Mercurial is neat. At the beginning I asked who used Git (most hands, including mine, went up) and who hated Git (a fair number of hands, including mine, went up). So that was pretty amusing. I talked about how the design was pretty similar to Git, how Mercurial has extensions (because it's written in Python), how that plays into its "disable confusing/dangerous stuff like the staging area and rebase by default" philosophy, and how I've been learning it by just using hg-git with GitHub. I thought it went pretty badly, because I didn't feel like it was very coherent. But the people I asked about it said it was actually pretty good, so that feels nice.

After that, we had the end-of-batch/goodbye Rose party. :'(

I spent a lot of time discussing politics and education with Stephanie, which was lovely, and had some other long and interesting conversations that I wish I remember but don't, truthfully. Spent quite a bit of time with Pieter, Heather, and David L messing around on top of the desk chairs, which completely filled Hopper. Eventually ended up sitting in Babbage with Rose, James, Heather, and some other folks (can't remember, honestly) just hanging out. We jacked the space heater way up so it felt like a sauna (aka reeeeeeal nice) and just talked about stuff. Around the 2-3 AM mark Heather and I got bundled up and went out to go to the pharmacy (which turned out to actually be literally right next door) and buy chocolate and nail polish. And then I spent somewhere between 1.5 to 2 hours painting my nails a fabulously sparkly red color called "Devil's Stare" from a brand called "Sinful Colors" - a combination which strikes me as being nothing short of wild.

At around 5 AM, everyone decided to go to sleep. I was the only person to go home, and honestly the only reason I did so was because I knew I'd want a shower in the morning. So I spent about 15 minutes trying to find the stupid switch to turn off the kitchen lights, finally gave up and went home, and fell asleep a short while after the sun rose.

Friday

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

Arrived exceedingly late since I woke up around, you know, 5. Got to RC and did very little before noticing a very large party leaving for dinner, which I joined and ate with (despite saying before I left that I'd had breakfast recently, so I "wasn't going to get anything"). We went out to get Chinese food, then went to a place that served Asian dessert of some kind (I've forgotten). It was beyond lovely, honestly.

(I also mentioned at dinner that I'd missed a week of blogging, so during a discussion with Chris about it I posted to a Zulip topic named "shame AJ" soliciting ideas for a punishment as well as moving the regular Iron Blogger meeting to Tuesday due to the Spring 1 introduction day.)

Executive summary

This week was particularly unproductive. I only did a little bit of work on icalc, my C project, and other than that the only really RC-related project I did was my security club presentation on cryptography basics. This was mostly because my sleep schedule was super messed up from Brussels, and then got messed up again (just as it was getting back to normal) on Thursday.

This week was also very emotional, since it was the Winter 1s' last week. To all my Winter 1 friends: you made my time at RC amazing and welcoming and exciting and wonderful and I loved being around you all. And I will miss you for a very long time. <3

(*starts crying a lil bit*)

Total time at RC 38 hours 40 minutes; cumulative time 239 hours 25 minutes.


Gender representation at RC

So I want to talk (real quick) about gender representation in tech. Specifically, the fact that it's abysmal. Women[1] usually account for, at most, 30% of the employees in a company and that number is often much lower. Even at the companies where it's 30%, that number is misleading because it doesn't adress management positions which are often much lower. (For reference, women accounted for about 59% of the overall workforce as of 2015, when the article I pulled those numbers from was published.) Here's an article that says that on average, women leave the industry within 7 years of being in it. Let me repeat that, because I didn't say they leave their jobs, or take a break. They completely leave the entire technology industry. And unfortunately it makes sense, since incidents of sexism in tech are rampant.

Unlike (most of) the rest of the tech world, the Recurse Center is mostly (completely?) gender-balanced. I want to point out that while for years I've believed in diversity, it didn't become clear to me how much implicit bias I held until I joined RC. I find that, having previously spent significant amounts of time in environments that were predominantly white, cis and male, I find myself needing to self-correct discriminatory and gender-based unconscious assumptions significantly less frequently at RC. In other words, my subconscious is making less incorrect, gender-based suggestions about what people are like that I then have to consciously reject. I would attribute this almost 100% to the fact that at RC I'm surrounded by lots of people who are a) super talented and know their shit and b) aren't male.

If I have a point to this blog post (and I'm not sure that I do), it'd be to underscore what many have said before me: representation and role models are important. Advocating for gender equality is good and important, but in the end what really matters is what's actually in people's heads. That's mostly influenced by what they see in their immediate lives, and that's why representation is so important - believing in equality is great, but presenting actual evidence to your subconscious that its biases are incorrect is a much more powerful way to improve the way you perceive the world.

If folks have any comments or different perspectives, I'd love to hear them privately or via WebMention.

[1]: I'm focusing on women here because I'm not aware of any statistics about non-binary people in tech. But it's worth noting that it's a huge problem for them, too.

Update February 22nd: the lovely Rachel Vincent from RC faculty says this about RC's gender-balancing:

Of the folks who are currently in-batch (Winter 2's and Spring 1's), ~36% identify as women. It's roughly the same for the community as a whole (~33%), though we don't have super accurate numbers because we don't update information on folks' gender. The most gender balanced batches were a little over 40% women. We're always pushing for 50/50, though. 😊 Our overall strategy is to try to get an applicant pool that is as gender balanced as possible, and we don't do any kind of balancing during the admissions process itself.


RC week 5

This is week 5 of being at the Recurse Center.

Day 15

Arrived ~10:20, departed ~16:30, arrived ~20:00, departed ~23:30, total time at RC 9h40m.

Somehow managed to get up early and arrive at my checkin early, despite being dead-tired (I couldn't get to sleep so I was running on ~5 hours of sleep). Spent most of today working on my HTTPS presentation, but took 30 minutes to an hour or so off to make a couple small improvements to my website - mostly just trimming the projects page and adding information to the contact page about how to communicate securely with me. Left for a while to have dinner with a friend and returned via the subway[1] to work on my HTTPS presentation some more.

(Note 1/31: I felt quite productive today, but in hindsight really didn't get a whole lot done since I was just so tired.)

[1]: which truthfully made me feel unreasonably accomplished since my phone died right as I looked up directions, but I got on the right subway and figured out I could transfer and take a closer line halfway through and eventually made it back anyway

Day 16

Arrived ~10:20, departed ~23:10, total time at RC 12h50m.

Spent - no joke - basically all of today working on my HTTPS presentation, which in addition to actually writing the content entailed reminding myself of how things like e.g. TLS False Start actually work. Reminding and/or properly learning (for False Start in particular I had a vague idea of how it worked before, but didn't really understand it).

Took about an hour off in the evening to help repaint a large stretch of wall in the space as part of the cleaning party. Then went back to HTTPS. Highly productive day.

Day 17

Arrived ~11:30, departed ~17:40, total time at RC 6h10m.

Caught up with some GitHub stuff in the morning before teaching HTTPS. We went for an hour and a half and still skipped the entire section on TLS performance because HTTPS is complicated and hacky and also really terrible. (As Claire put it, "I'm now terrified of browsing the web." Me too, Claire. Me too.) I think it went really well, even though it was a little overwhelming for everyone at times.

Spent a bit of time watching YouTube videos on how Diffie-Hellmann works and how Elliptic-Curve Diffie-Hellman (ECDHE) works - we'd touched on both of these during the presentation and I needed to put them in Zulip. The one on plain Diffie-Hellmann was just a refresher, but the one on ECDHE was something I'd previously tried to watch several times and had always been too confused. But, this time I got it! Whooo! So that felt awesome.

Left early to go home and sqeeze in some laundry before closing out the evening by going to an RC-organized talk on Crystal.

Day 18

Arrived ~10:30, departed ~14:30, total time at RC 4h0m.

Did just a smidge of work on pump.io before going to Abstract Salad Factory, then heading home to catch my flight to Brussels.

Friday

Not at RC. Total time at RC 0h0m.

In Brussels for FOSDEM.

Executive summary

This week had its ups and downs. I was really productive on the HTTPS stuff, but other than that I didn't reeeally get a lot done.

Total time at RC 32 hours 40 minutes; cumulative time 230 hours 45 minutes.


~