Hodge Podge | 2023 Feb 12-18
Spent a lot of time this week doing some personal celebrations, but got some good thinking in and got around to exploring an issue.
I used VS Code through most of college, but there was one day I couldn’t get the SSH extension to work to program on remote machines we used for class, and so my only option was Vim. I had been curious to learn it so I took it as an excuse to give it a try. I was pretty slow at first but I got better and found it pretty fun once I got the hang of it. I used Vim bindings in VS Code for a while, until just about a month ago I was struggling to navigate the rust-lightning repository, and I watched some video about Helix and decided to give it a try. I had an absolute blast picking up Helix and it definitely helped me navigate rust-lightning a lot quicker. I liked Helix a lot, but I kept getting these YouTube videos about NeoVim recommended to me and I liked the kickstart.nvim theme a lot and couldn’t easily emulate it in Helix (but I probably could now lol) so I decided to switch. Yes, I won’t lie, the theme was a non-negligible factor in my decision. NeoVim was sort of annoying at first because a lot of things that were native in Helix I had to setup in NeoVim and I had to relearn some keybindings, but nowadays I’m having a blast discovering new things I can configure.
Sure some particularly vocal people on the internet who use Vim or Emacs will tell you to use it because you’ll be faster or something, but at the end of the day it should just come down to if you find it fun or not. If you really don’t want to and you’re having a swell time in VS Code, so be it. I find it fun to do all this stuff so that’s why I’m using NeoVim.
The issue I was exploring this week is pretty cool. It was checking whether swapping a
BTreeSet for a sorted
Vec would help with memory usage/fragmentation. It was fun to compare benchmarks and memory usage, and it was just cool to see some of the data structures concepts from university classes show up in my work.
Learning while contributing
I’m realizing how just contributing on its own will not teach you everything. You don’t have to know exactly why everything works in order to close an issue. I could just rely on other contributors to verify whether things make sense. I could close a bunch of trivial issues and tell people I was a regular contributor to LDK and most people would never realize I wasn’t really doing anything.
But I wouldn’t be helping. And that’s ultimately my goal: meaningfully contribute to the development of the lightning network. So I need to go out of my way to really learn things and understand why things work, and hopefully that will lead to me being a more effective contributor.
Some things on my mind that I’d like to do in this overall effort:
- Take on some harder issues
- Continue working through the cryptopals challenges and solving them on my own
- Try building stuff - wallets, servers, CLIs
- Take the time to really understand why things work or don’t work
- Follow my curiosity, go down rabbit holes, and learn by writing and playing around with code
Figuring out what I’m interested in
Summer of Bitcoin project ideas are starting to be released. I’ve still got a while until I need to submit a proposal (April 1st) but soon I’ll have to figure out what I want to work on for this summer.
I feel like I’ve gotten a decent overview of the different areas and focuses of lightning and LDK at the moment besides Taproot, PTLCs and async payments (although I get the general ideas at least). Although I don’t know enough to make a proposal at this very moment, I feel confident I could investigate and find out the necessary information. And I’m looking forward to it.
I’m really liking everything about developing LDK that I’ve done so far—mainly I enjoy thinking about all the lower level systems programming type stuff—however I think I’m most intrigued with the actual cryptography side. I’ve been really liking the cryptopals challenges, so I’m thinking I’ll finally get around to understanding taproot stuff some more. Will investigate.