A modern git cli.
What is bit and why did you build it?
I created bit out of frustration with the Git CLI. If you ask anyone new to the development community, they’ll say it is a really big challenge to get ramped up on Git, and if you ask an experienced dev they will tell you they still need to Google stuff about it. The main goal is to save developer time. Bit is a solo open source project. I received input from co-workers and fielded feedback from Hacker News and Reddit, but largely it was just me developing it.
I saw potential in the concept and felt it would resonate with the hacker and Golang communities. After building a prototype I felt I was ready to market it through social media websites like Reddit and Hacker News. I also gave some thought to the post title to make sure that people would upvote it by researching what had been popular historically. I realised that images and GIFs are great. Humans are naturally visual people, so it's helpful to have something that sort of just pops out. The GIF in the readme shows the autocomplete commands which shows how bit is different right from the start.
Why did you write bit in Golang?
I like Golang a lot, it has some nice properties. For example, it's completely self-contained, which is even more so with Go Embed, since you can embed static files into the binary. It is also easy to implement parallelization or Go routines, which I often use. Not to mention Go has the fewest number of keywords at 25.
I prefer Go to Java, as there's no first class functions in Java, which I've always found frustrating. As a result, I write all of my side projects in Go, such as bit and GoSecret. GoSecret is a side-project that allows you to send a disappearing message on any communication channel. If you want to send a sensitive message on Slack, you can write a message in GoSecret, and it will create a link. You send a link, and then once the recipient views the message it will disappear forever.
I also have a project which I'm working on in collaboration with my brother called ReconBuddy (in Beta). This is a tool for open source intelligence (OSINT). Enter your website address and it will show you potential risks for your website.
How did you first get into software development?
I started in high school through a computer science introduction class. When I started out, I thought I was really bad at coding, and struggled to make sense of it. So when I went to college, I opted to do accounting and then soon after finance since accounting was a bore.
All the while a lot of my friends were studying programming or engineering, and it was through them that they made me want to give it another try. I read Java’s “Really Big Index” and suddenly it made complete sense. Something just clicked. I’ve been coding ever since and finished college with a computer science minor.
While at college I built an Android game because I love video games, and won a competition hosted by Google. I ended up interning at Google and then after graduating I started a fintech job which marked the beginning of my CS career.
What was the most interesting challenge building bit?
There have been many challenges along the way.
I originally planned to dynamically retrieve autocompletions programmatically by simulating tab completing a git string. However, there's actually no way of doing that, because you'd have to run it in the shell specific to that command. Pressing tab doesn't really work, so I recorded a macro recording that just went through all the Git commands and literally pressed tab, and copied that huge output. Next, I wrote a Go program that parsed the output from all the tab completions from ZSH, and outputted it into a Go source file.
If you look at the GitHub for Bit, there's this one file that is a massive tree of completions, and it's generated by the program. Solving this problem was a huge pain, but hopefully I can apply the same approach to other CLIs.
What is the most interesting tech you are playing around with at the moment?
Argo is a cool tool. It's also written in Go. You can run it on top of Kubernetes and it's a way of describing complex pipelines in YAML. I know people don’t like YAML, but it is still cool that you can represent a fairly complex pipeline in YAML which is the power of Argo.
Additionally, I’ve been trying to resurrect some old family photos from the 1920s using an image restoration tool.
Describe your computer hardware setup
Computer: MacBook Pro 2015.
Chair: Herman Miller Aeron.
Desk: WorkFit-TL Standing Desk.
Describe your computer software setup
OS: macOS Big Sur.
Chat: Slack for work, Discord for gaming
Daytime or nighttime? Night Time.
Tea or coffee? Coffee.
Silence or music? Silence.
What non-tech activities do you like to do?
I enjoy gaming, table tennis, hiking, listening to music and of course Netflix. Fun fact: My friend and I were the number one 2v2 team in Starcraft 2 when we were seniors in high school!