Welcome to Paul's Blog

This is where I put down my thoughts occasionally.

Hack The North 2020++

So this past weekend I participated in Hack The North 2020++. I first learned about Hack The North from 2019-2020 computer club president talking about it on the club Discord server. I then planned to participate in HTN in 2020, but unfortunately the pandemic happened and it got delayed.

So here we are in 2021, with a virtual hackathon. My first hackathon is a virtual one. So sad. HTN had some very good talks leading up to the actual event. Those talks started on last tuesday and continued until friday, when we had our opening ceremony. While the talks were impressive, my favourite one happened to be the opening ceremony, where Vinod Khosla showed up and gave some very interesting opinions.

Right before 11 PM we were brainstorming ideas for a while. We had many ideas but we found that they were all taken. We finally ended up going with "Borz", which is from "BAF" and "ORZ". Then the hacking began at 11 PM.

My team involved L.Z. (BattleMage_), P.Y. (yaxollum), and myself. We have been debating about some ideas for like a month until then we finally landed on developing a social network, except we develop a command line client and we add in a group system in which groups can be either independent or under another parent group. (Just like a tree) Finally we decided that we wanted to add the ability for multiple instances of our API server to interact with one another and for a giant network. The main functionality of the network would be to just become a forum.

L.Z. decided to work on the command line client, I decided to work on the API server, and Peter decided on Sunday that he is going to work on a networking stack that allows Borz to use domains that end with .borz just like .onion.

I didn't really sleep much the night before (thanks to myself procrastinating on ICS) so I decided to just bootstrap our project and go to sleep for 4 hours. Also I did not want to work on this project without consulting my friends.

I woke up on Saturday and started working on our network with L.Z.. My approach was to implement basic API functions to create Threads and Replies. While L.Z. implements the basic UI for the terminal app, and then work together to get the client to work with the API and then complete the federation functionality to complete our network.

We settled on using Django, Rust, GraphQL, and Ngrok to work on our projects.

I quickly completed the basic API quickly and started planning on how our federation was going to work. P.Y. advised me that I use PGP for accounts, which we had discussed earlier before the hackathon. I decided that it was going to take a long time to implement PGP logins so I decided against it. Federation took a long time to plan.

At 3 PM I decided to go attend another panel on Starting a Company. I really liked this panel too. The information on there was somewhat contrary compared to what I was hearing so I think it was quite valuable. It featured VC investors from many parts of the world.

I then started to implement federation. Federation was suprisingly harder to implement, especially with the addition of GraphQL into the mix. I was coding until 7 PM, when I had to go to Olympiads for my Competition Math Class. I had to collaborate with L.Z. a bit during class to help not waste time. After class ended I started to work on federation again.

I soon realised that I would not be able to implement federation in time. L.Z. has said that he would go to sleep at 11:30 PM and I could not stablise my API in time to prepare for federation. So We decided to drop federation. (As opposed to dropping GraphQL and adopting REST)

We had to stay up all night. I debugged few things on the server until 3 or 4 and I fell asleep unconsciously until 6 AM, when I woke up again for work. The Devpost submission was due at 10 AM and the entire hacking needed to stop by 11 AM, so we had to get to work quickly. We finished off implementing a few things and fixed more bugs and I started to package the client into a Snap. I ran into bugs I couldn't resolve them in time. I also began setting up the server outside of Ngrok. L.Z. also added a way to specify the URL of the server. All this time we also worked quickly to get the Devpost up.

Then hacking ended and we could now rest for a while. I cancelled my LOA class so I could take some break before our presentation. Presentations were 4 minutes in total: 3 minutes to pitch the project and 1 minute for questions. I demoed my project while L.Z. was explaining it. P.Y. listened. We answered questions about why we chose to create a CLI client. The reasons we listed were: it's easier to create a CLI client, we want to appeal to people familiar with technology, and we wanted to take a stance against bloated apps by building something very lightweight. We were also asked a question if we implemented our own backend, which we most certainly did.

This presentation happened during Computer Contest LvL 4 class, so I couldn't listen at all for the majority of the class, as we had to practice our presentation for an hour before hand, and we had to wait 30 minutes just to present.

The result came out at 6:30 PM and we did not win. The winning projects were certainly interesting and I hope to do better next year. Myself and all my teammates have expressed interest in maintaining our project even after the hackathon ends, so we plan on making this project great. I really think the idea of allowing (child) groups under a (parent) group is really exciting as it closely matches what we see in many organizations.

So what do I think about Hack The North?

One thing was that many judges were CEOs or representatives from establish companies or startups. While command lines are favoured by many developers, I really don't think these people would like our product, which is only targeted to a niche category of users. I realised over the week that HTN is more about rapidly prototyping a new product that could potentially become a product, more so than something really cool. This doesn't mean that a project can't be both or only projects that could generate income later could win though! I really think there should be another hackathon targeted towards the niche group of technology-oriented people. I seriously doubt it will get much funding though.

Second, we were originally planning for a hardware hack, but it didn't work out because they weren't able to provide us with the hardware necessary due to the pandemic. Hopefully next year they will be able to provide us with the necessary components required to build .

Third, I really think we could have planned better by coordinating what everyone would do and establishing the protocol. P.Y. were building the .borz protocol but wasn't able to complete it. This creation is really interesting but was unplanned. L.Z. were a bit confused about the federation system. I myself was confused on how the terminal client worked as I only worked on the backend. We really should have chosen a technology stack that everyone could work with and understand. We should have worked together on all aspects of the project. I think some technology choice have led to some development slowing. We could have stuck with technologies that we were familiar with (like REST) and stuck with higher level languages. (This goes back to the problem with Judges most likely disregarding the implemention details and only caring about the end user experience, when most hackers probably do care about the implemtnation details of a software)

Fourth, we could have not wasted the first night and did something productive. I estimate that I spent around 30% of my time just sleeping, which didn't really help. I plan on sleeping more before the event so I don't need to sleep much for 36 hours.

Fifth, we could have also created a simple web client to allow more people to interact with our backend. I sure do wonder what would have happened if we did that exclusively or along side the CLI app.

Sixth, we also could have focused on getting some of the API prizes but we didn't. I really think we could have attempted to score one of the prizes. I plan to do that next year.

Seventh, our brainstorming process was a bit of a mess TBH. We had loads of ideas and we tried to eliminate unoriginal ones, but ended up going with a social network, which still isn't original? We had to land on this because at the end all ideas were somewhat unoriginal and we knew we had to improve something that existed to be better.

Eighth, I really don't think 36 hours is enough for a hackathon. There should be a week long hackathons where we try to build quality software with best practices.

Nineth, I think presentations should be longer than just 4 minutes. Our thought process behind choosing our group projects could have been elaborated more, but we had to keep it short because of the three minute project. Some argument against this is the importance of the elevator pitch, in which one is to convey the idea of a project to someone else in record time, but I really don't think it works for some projects.

Tenth, we did bite more than we could chew. The federation would definitely have had our project unique, but we just couldn't implement in time. Leyang also had to stay up til 5 on night 2 implementing all the views. (I'm not sure how long it takes to add something to the command line client, but I would imagine it to be very long. Rust is low level and would defintely made our project slower to implement) We were all new to our choices of the technology stack so we had to get used to it while building out our project. Our choice also was a bit complicated as social networks generally need a lot of features. In the next hackathon, we would definitely do some more careful planning.

Eleventh, I regret not moving my Olympiads classes to accomodate for the hackathon. I could have saved the two precious hours and collaborated with my teammates during that time.

Overall this event was quite energizing and fun but I really wonder what the in person hackathon would have been like. I really hope the next hackathon participate is in person.

Whats next for our project?

We plan to extend the idea of group hierarchy, and try to make this a unique platform for everyone by making a simple web client that everyone could try out. The API server could also be secured by implementing some measures against automated clients.

I am genuinely interested in extending this project and making it an actual network with actual users. I hope to start working on this soon. For now, I'm tired and I need some rest.