Go to homepage

Reid Main

iOS developer

  1. Archives
  2. Tags
  3. About
  4. @reidmain
  5. Email
  6. GitHub

January 2018 Retrospective

Health

I limped across the bouldering finish line in 2017 but I am happy to report that I have rebounded strong. I actually did so many V4 problems in January that I cannot remember every one I solved. I even managed to do three V4s in a single session, multiple times, which was not something I thought would happen. I have gotten to the point where do not hesitate to attempt a V4 problem.

Other than my positive attitude (damn I didn't think I would type that out this month) I believe there are two other factors that are contributing heavily to my bouldering resurgence. The first would be that I have started drinking a Soylent before I go to the gym. I grossly underestimated how much eating before climbing helps you and that extra tank of energy really seems to be making a difference. The second is that I have started doing some strength training before I run. I finally got back on Strong app and am using it to track some very basic exercises. The difference this time is that I am very explicitly trying to consistently better my maximum rep count every week rather than just come up with a rote routine that bores me. I want to see progress and I am pushing myself for it. This month it has been all push-ups, tricep extensions and back extensions. I intended to carry those forward into February and re-evaluate them in March.

Everything has been positive up until this point so I need to bring myself back down to reality. I did not make any attempts to do yoga or improve my flexibility. I simply planned too many things after work and never made time to exercise. This has to change in February.

I have actually managed to gain weight but lose body fat this month so I can't really be made about that. Like I have said before I really have no issue with my weight it is how much of it is fat so as long as that continues to trend down and my bouldering up I'm game.

Food is a fairly stagnant area yet again. Other than the addition of Soylent before the gym nothing has changed. Avocado toast or cereal for breakfast, well portioned lunch at work, something from the grocery store downstairs for dinner. I have probably snacked more than I should have but it was on things like almonds or crackers with peanut butter rather than the typical unhealthy crap. We only managed to cook a handful of times again so that is another aspect that should be worked on.

On the whole this month was a great step forward with respect to health. I got back on the exercise wagon and it seems to be paying dividends. We'll keep on it in February and see if we can eat a teeny bit healthier.

Hobby Programming

I am a big fan of the contributors section of a GitHub repository. It is probably the competitive video game geek inside me that likes seeing how I stack up against other people. That or I just love seeing that I usually delete more code than I add. However, one thing I dislike is that based on the type of project you are working on there are usually a number of commits that do not really count as "work" (like generated code) and you ideally wouldn't want them to contribute to this leaderboard. Also contributors regularly have multiple names they commit under and if they are not all linked to the same GitHub account they will show up as different contributors.

Back when I worked at Uber I wrote a simple Ruby script that parsed the output of git log --numstat and normalized it such that it gave a much better representation of every author's actual contribution to the repository. This month I decided to revive that script and publish it to GitHub.

Here is a very simple overview of how the script works:

Ask the user for the following: - A dictionary where the fields are names that have committed to the repository and the value is the real name that the author should be credited under. This is for people who commit under multiple names like john, jsmith, john.smith, johns, etc or those crazy people who have git aliases like 420bootywizard. - An array of names that are banned and should not count towards the leaderboard. A lot of projects will have automated commits for various things and we don't want that to dirty the data. - An array of regular expressions that will be used to check if the path for a file modification should be ignored. A simple example for iOS projects would be *.xcodeproj because anything that contains that path was generated by Xcode.

Gather the output of git log --numstat --no-merges --pretty=format:'Author: %an%nEmail: %aE%nHash: %H' -z and use a regular expression to segment it into individual commits.

Iterate over the individual commits and using the information the user provide normalize the commits into Ruby objects that contain the author name, commit hash, list of file modifications that contain the path, number of additions and number of deletions.

Iterate over these full Ruby objects and group them by the author names and then simply sum up their additions and deletions and there you have it. You have a rough estimate of their contribution to the repository.

Since I had done this before at Uber I thought it wouldn't take me long at all but it turns out git log's documentation isn't that great and what I intended to be a two or three day project turned out to be two or three weeks. God damn edge cases just kept rearing their ugly head whenever I ran the script on a new repository. But I think I finally sorted all of the kinks out.

At this point in time you may be wondering where the GitHub link is to this project and the answer is I have not gotten it ready for publication yet. I'm sure all programmers can sympathize with the feeling of "I just need to spend a day or two cleaning up my code, adding some documentation and I can publish it" and then it is a week later and you still haven't published. Well I have fallen into that hole now but I am going to hold my feet to the fire and say I have to get something out to GitHub this weekend! Hell the git commit history is all there so if someone looks back at it I'm probably going to have egg on my face regardless.

Read a book

I finished Words of Radiance and have gotten halfway through Oathbringer. I thought that this deep into the The Stormlight Archive it would be hard to continue to surprise and impress me but I am flabbergasted. The series just keeps getting better and the world continues to be fleshed out. The number of revelations that have happened in only the first half of this book surpass everything that I learned in the The Way of Kings. I thought this was going to be a very tropey, one dimensional fantasy world but the depth to it is amazing.

I am genuinely getting scared about finishing this book and having to wait three years for the next one. At least Brandon Sanderson is much more prolific then George R. R. Martin so I am confident that I'll see the next book in The Stormlight Archive which is more than I can say for Game of Thrones.

Gaming

I played two games in January. One that I absolutely loved and one that I absolutely despised. I am going to start with the one that I loved in hopes that I will write so much that I will not want to write about the game that I hate.

Monster Hunter: World was released on January 26th, 2018 and it is the latest game in the venerable Monster Hunter franchise. I have been playing Monster Hunter since Monster Hunter 3 Ultimate and it is undoubtably one of my favorite game franchises of all time. It is probably rivaled only by X-COM and Half-life. While the recent games have been absolutely stellar they did feel like Capcom was simply tweaking the formula that had worked for them in the past. Adding just enough things to make the game feel fresh but still have a lot of those rough edges that Monster Hunter veterans simply wrote off as being a core part of Monster Hunter that they would just have to live with.

Monster Hunter: World completely broke that mold. All that jank that you thought was an something that would never change is gone. The number of quality of life improvements are absolutely insane. Here are just a few:

  1. You no longer have to paintball a monster. You can track them on your map once you've discovered them.
  2. You can eat when you are on a hunt. No more forgetting to eat before you leave.
  3. There are no more blademaster and gunner armor sets. You now customize your ranged weapons instead.
  4. Armor skills are no longer triggered when you reach 10 points. Every point grants the skill and as you put more in the skill gets better.
  5. A radial wheel interface lets you access dozens of items with a flick of your control stick.
  6. You get an actual reticle when you try to throw something. No more lining your hunter up so they hit what is directly in front of them.
  7. Pickaxes are infinite.
  8. Whetstones are infinite.
  9. Key quests are no longer mystery quests that you have to consult a wiki to figure out. They are given their own quest category now.
  10. You no longer have to consult a wiki or website for weakness or drop rates. They are in the game.
  11. Items can be auto crafted. If you have a potion in your pouch and pick up some honey it will be turned into a mega potion automatically.
  12. There are no more zones. Every map is a large open world.
  13. No more timed harvest quests. You can go on an expedition and stay in a map infinitely.
  14. Mining spots are now directly on the map and can even be marked with a waypoint so you'll be taken directly to them.
  15. Armor and weapons can be added to a wishlist so you can see exactly how many materials you need.
  16. Armor sets can be previewed so you can see exactly what skills you will have if you forge the armor.
  17. Multiplayer sessions can now host up to 16 people.
  18. You can move while healing. Let me repeat that. YOU CAN MOVE WHILE DRINKING A POTION!
  19. A combo list is displayed in the upper right and corner of the screen.
  20. The sharpness meter is now a gauge so you can see exactly how much sharpness you have left before you drop to the next level.

Sweet Jesus I just wrote 20 quality of life improvements out after thinking about it for only 10 minutes. This game really did change everything.

I honestly think everyone should give Monster Hunter a shot. It will undoubtably be my game of the year and I would absolutely love to play with anyone who picks this game up. Cooperative monster hunting is one of the greatest experiences.

Ok whew I did gush about how much I loved Monster Hunter. Now let's move on to what a garbage game Horizon Zero Dawn was. You know what at this point I don't want to waste my time writing an in-depth description of all my my complaints. I'm just gonna throw out bullet points and get back to Monster Hunter: World.

I will say two good things about Horizon Zero Dawn. It looked absolutely stunning on my 4K HDR TV. Also the world that they constructed was really intriguing. I wanted to figure out what was happening which was why I kept trying to do the story missions but then I would run into the boring human enemies and ask myself why was I doing this again?

Ugh that was painful to write. I need to go play some more Monster Hunter.

Plan out my day

I wrote goals in my Hobonichi Techo journal every day and looking back now I only managed to complete about 50% of them. At this point in time I am not sure if that is a good thing or not. I really did try to complete them but it seems like something was just always coming up. I haven't yet figured out if I was just setting bad goals or if it is just difficult to plan out your day like that.

I am going to do this again in February and do a deeper retrospective at the end of the month. See if there is some sort of pattern to the goals I fail.

Review

Alright let's see if I started 2018 off on the right foot.

Publish retrospective on my 2017 resolutions and an article detailing my 2018 resolutions.
Finished both my 2017 resolutions retrospective and my 2018 resolutions.

Publish Game of the Year articles dating back to 2010.
This I failed horribly because I grossly underestimated how long each article would take. I managed to write very basic outlines for each article but I only managed to publish the 2010 list which probably took me like five hours to finish.

I think I will aim to do one of these a month and hopefully finish them all by E3.

Create at least one hotlink article.
I technically succeeded by publishing my article about Jason's All-Sumo YouTube channel but I am disappointed in how little I actually thought about things to share.

Linking to Jason's channel sort of fell into my lap because I am subscribed to his channel and the January tournament started so it was constantly in my face. But I have easily read hundreds of articles either through my RSS reader or various news app and looking back I can't think of one thing to share. I need to do a better job of thinking about this stuff in February.

Complete four different V4 problems.
This is one of the goals that I legitimately thought I could fail because I had a really miserable month of bouldering in December. But not only did I solve four different V4 problems I actually lost track of how many V4 problems I completed.

The Soylent Drinks before climbing and the strength training seemed to have really helped.

Exercise everyday.
I failed this but I am honestly not upset in the slightest. I missed only a handful of days this month and it was mostly because I was super tired from climbing the day before and just wanted to rest up my body. The day after a break I always got back on the saddle and pushed myself.

Use UberEats or TryCaviar only once a week.
Still keeping this up. In February it is time to switch up my food related goal.

Beat Horizon: Zero Dawn before Monster Hunter World is released.
As I wrote above, Horizon: Zero Dawn was such a slog that I stopped playing and could not finish it before Monster Hunter: World was released. There is little chance I will go back to it now.

Finish Words of Radiance and start reading Oathbringer.
Not only did I finish Words of Radiance but I got halfway through Oathbringer. I was not expecting myself to read as much as I did but I got sucked into that book.

Do something involving Kingdom Death: Monster.
I just couldn't find time for this. Looking back at my daily goals I put a lot of focus on writing, reading, video games and programming such that I forgot to make time for Kingdom Death. I must rectify this in February.

Build script for generating iOS framework projects.
Failed this but my excuse is that I put dozens of hours into another programming project so I can't be too mad.

Draw something using my iPad.
🤫

Conclusions

While there were some missteps I am very happy with how January turned out. Everything is moving in the right direction and the biggest knock I can make against myself is that I appear to have taken too much on. I am happy with how much effort I put into the things I worked on such that even though I didn't finish all of my goals I am content with where my time was spent.

Before I move onto my February goals I want to preface it with I am going to play a fuckton of Monster Hunter: World in February. Two hours every night after work is probably on the low end so I am going to be really pragmatic and try to set realistic goals with the spare time I will have.

So without further ado, my February 2018 goals:

#MonthlyRetrospective

🎮