Analysis of my 39 day GitHub streak
A few days ago, I ended my GitHub streak. I started this streak to keep me focused on my Multiplayer-Game-Server project on GitHub. I had began that project a few days prior to starting my streak. When I started my streak I was in the process of creating the initial connection between the server and the MapleStory game client.
My reasoning for stopping the streak stems from something I had noticed. There were some days where I wasn't as productive as others which can be seen by the amount of code committed on a certain day. However there is an exception to this as some days I wouldn't commit lots of code but that code I did commit would have a substantial effect on the performance of the server. Another reason I wasn't very productive is because on weekdays I'm very busy. Every weekday this co-op term I have been developing software at work for 7 hours. Add a 3 hour commute both ways and an early wake up and you have one tired engineer by the end of the work day. This leaves only a few hours at night to code. This productivity decline usually was the result of setbacks in development.
After the streak finished, I had a functional server but not a barebones MapleStory server emulator. In terms of MapleStory, right now you can run my server emulator and load up a client as described in the
readme description on the project page and select a world, select a channel, and see an empty character selection screen. In terms of NodeJS server jargon, right now the server can send the handshake packet to the listening client and handle some packets based on the opcode described in their respective packet header.
Results of the streak
Now that the streak is finished, I feel more confident that I can create a server in NodeJS and moreover, a MapleStory server emulator. Judging by the progress made by the end of the streak as talked about in the above paragraph, I believe the streak has positively affected this project. Additionally, since the streak has improved my confidence in this area of development, the future of this project is looking bright. The project its self is growing in popularity. This streak gained the attention of people other than myself. One user other than me is watching the progress on GitHub and there are others who are also interested. So far, others have yet to notify me whether or not they have attempted to use my server so I do not know whether they like it or not. In the future it would be nice to receive advice based on the current state of the server. Perhaps splitting the repository into multiple branches for development and master would help with such advice.
Some setbacks are more notable than others. The first major setback I experienced had to do with the encryption and decryption of data sent between the client and server. I had posted my issue and resolution for this setback here on StackOverflow. Another major setback I had experienced resulted from incorrect usage of asynchronous functions in NodeJS. At first, I had coded my database queries sequentially assuming that one would be called before another. However this was not the case and the exact opposite was happening. I asked one of my coworkers about this and he directed me to Promises. Using a Promises library for NodeJS called Q, I was able to chain together asynchronous database queries and get the functionality I wanted.
Recently, I have ended the streak during a setback. Whenever a MapleStory player enters the character selection screen, the client sends a request to the server to load the players characters from the servers database. The current setback I am on is acknowledging the request to load characters. This requires sending a large packet of data that contains the characters if they exist and any relevant data relating to the selection screen. I am having some trouble writing that packet as there are many functions that must be chained in a certain way to generate this packet. I find that when I am not actively coding or thinking of a solution to this setback, my subconscious is.
The next streak
I don't want to plan to do another streak, I want it to happen naturally. There were points during this streak where I felt like I had to commit code on a certain day just in order to keep up the streak. The next long streak that I take part in should be one that doesn't have this feeling attributed to it. Once I get to that point, I think I will be more productive. I hypothesize that the more natural and enjoyable that building something feels, the more motivating it will be to the builder.
My next steps are to execute on the solutions my subconscious has proposed about my current setback and move forward. Ideally, before I go back to school next month, I would like to be able to completely login to the channel such that I can play MapleStory in a very basic fashion.