Author: Matt

  • My Personal Brand

    Over the last week several things have popped into my news feed mixed with conversations I’ve had which brought up the idea of honing my personal brand.

    I’m not much of a fan of brand marketing in general but I’ve been doing some more research and reading about the idea.

    Personal branding is about taking the techniques used by big companies to create a persona around a corporation and apply it to you as a person.  That may include creating media assets, publications, books, blogs, videos, podcasts, advertising etc which are used to give people and impression about who you are.

    The goal of creating a personal brand for me would be that if people looked me up or came across me they would be impressed by my accomplishments, see me as a guru in whatever my expertise is, and if they’re looking for help in that area reach out to me for speaking engagements, consulting gigs etc.  Also if it came time for me to look for another job, a solid brand would enable me to demand a higher salary at a top company.

    Over the last few days I’ve started crafting a brand strategy.  Depending on how it goes you may see some big changes to my online presence.  this blog, halotis.com and other communication outlets could get a refresh.

  • Trick for crispy homemade sweet potato fries

    After much trial and error to create yam/sweet potato fries as good as a restaurant we finally discovered the secret.

    Coat them in corn starch and oil before baking.

    Simple and delicious.

  • Learning Ruby on Rails

    Rails has been the popular framework for generating web applications for a long time now, yet I’ve managed to avoid learning it until this month. However a new job gave me an opportunity to dig in and learn it.

    Having come from several years of Python/Django development learning Rails shouldn’t have been difficult. Ruby has a comparable feature set to Python and both Django and Rails frameworks perform the same roles. Yet the transition to Rails has proven to be more confusing than I expected.

    Perhaps the biggest thing having come from the Python world is that the belief in python is to make all code explicit and reduce the amount of “magic” that happens. Rails on the other hand is all about magic. declarations in models can affect how pages render and there are many.

    I have yet to find a good resource for discovering what is available in my namespace.

    The biggest thing I haven’t yet wrapped my head around is the declarative nature of the code. The problem with that is that it doesn’t leverage my existing knowledge of HTML/CSS/SQL and instead starts over. As a result the learning curve is steeper than I expected. The fast pace of development of the rails framework itself leaves documentation and online help confusing for new developers to follow.

  • A Better In App Purchase Model

    A couple years ago I gave my girlfriend one of the best christmas gifts she’d ever gotten. It was a pair of tickets for a full day at the spa. The catch was that she had to gift the other ticket to one of her girlfriends.. the second spa pass wasn’t for me. I gave her the gift of being able to give something to her friends. She felt good that she could give her friend a great day at the spa, and her friend felt special that she got to go for free.

    My purchase was a win, win, win for all three people. I looked like a stud to both her and her girlfriends, my girlfriend got a great day at the spa and gratitude from her friend for the free pass, and her friend got a free day at the spa and the special feeling of being chosen as the one to go.

    I think there’s a nugget of an idea here for the evolution of a better IAP model in games. The idea that the status of the person buying an IAP purchase can affect their social standing in the game community though gifting to other players is huge for two very profound reasons:

    1. The gifting is public and therefore provides social proof that someone is spending money in the game. Proof that other players are spending money is a huge motivator
    2. The social status gained by being the one who is gifting to other players is real. Even in a virtual community complex social interactions happen, friendships develop and status within the community is important.

    If a game can provide these sorts of social benefits to their IAPs in addition to the in game benefits then the stage is set to motivate a huge number of buyers.

    I have not yet seen this in practice in a game which makes me curious if there’s a way I could quickly test this idea out in a game I could develop. If only I had time.

  • The Web Sucks

    I’ve been bouncing around between working on native Applications and web apps for the last few years. Having experience with the state of the art in both areas of software development. One thing I have found is that web development is not nearly in a state that programming a complex application is sensible.

    A modern web application is probably leveraging client side MVC with a framework like Backbone.js or Angular.js. These are great frameworks that allow us developers to finally create web applications that behave in a usable fashion on the internet. These are definitely a step in the right direction. However, these frameworks bump into a hairy mess as soon as you start to work on the Javascript code needed.

    Javascript simply wasn’t designed to power these sorts of complex web applications and as such the language lacks a lot of the higher level syntax for organizing massive code bases. Without these language constructs it’s difficult to avoid having the code evolve into spaghetti.

    The separation of structure and style (HTML vs CSS) seems great in theory but in practice it’s hard, and limited. Between fundamental limits of styling, and the bugs/differences between browsers, targeting a pixel perfect design is an exercise in frustration. In fact attempting any non-standard layout of a web page is frustrating beyond reasonable. Add to this the new design requirements that websites should be responsive and scale down or up to all screen sizes and orientations and now you’ve probably tripled the amount of work to do.

    These hurdles result in much longer development times and more bugs to fix along the way.

    Native Applications on the other hand provide two key advantages to developers. First is that designers are generally not requesting uniquely laid out, graphically intense applications, so standard widgets are usually ok. Second is that for different types of applications there are better layout techniques available to use. Simple desktop applications can be designed in an interface builder tool while something like a video game can be flexibly done in code.

    Both the web and native sides of app development are still evolving so it’s not simply a case of the web catching up. Native is a moving target which is itself getting better all the time as well. However with the web your technology is much more restrictive, you can’t simply opt out of HTML/CSS and write client side web applications in C++. Where as if someone writes an amazing predictive layout system in Go, you could feasibly write UIs in it tomorrow.

  • Racing to 10% BF

    In the spirit of friendly competition, Colum and I are battling to be the first to reach 10% BF.  10%BF is a lofty goal that is difficult to achieve without serious commitment.  Winning will take everything I know and doing it all at once and staying committed to a lot of exercise as well as a strict diet.

    To start with I’m going to be heavily restricting my carbs. Zero sugar, no wheat, and very few starchy vegetables.  This was what proved to be the most effective diet I ever tried.  I will attempt to eat fewer than 50g of Net Carbohydrates per day in order to induce ketosis, a state where much of your body’s energy comes from keytones rather than blood sugar.

    Effectively it means eating nuts to snack on through the day, and having lots of salads with some meat for meals.

    The second component is exercise, which is more difficult since it requires more of a time commitment. I will be developing a program with a 50/50 split between cardio and strength training which according to research is the most effective way to lose fat.  Ideally I’d like to target 1 hour of exercise per day. To get to that level I may have to restart my early morning routine.

    Colum started with a 6% lead on me for %BF so I have some catching up to do if I’m going to win.

  • What Do You Know Soft Launch

    A week ago we did a soft launch of the new iOS game “What Do You Know”.  With very little marketing behind it we managed to push a couple thousand downloads of the game and brought in a little bit of revenue from IAPs and advertisements.  Knock-out successes out of the gate seem to be just not possible now with the level of competition on the iTunes marketplace.

    We will be giving this game another week of natural promotion before pushing the first update to the game to fix some minor issues.  At that point we’ll be comfortable to start getting some more reviews, and paying for some advertising on various different ad networks.

    One thing we know from the first week is that the IAP sales conversions are pretty solid for this game.  Given the number of downloads we got, there were a substantial number of buyers compared to my other games, which is a good sign that it’ll be worth any marketing money we have to spend on it.

    Once the game gets to a critical mass of players the hope is that the social integration will help continue to push it higher in the charts.  We’ll see if that holds true with some testing.

  • Code Reviews: Good or Waste of Time?

    I’ve been working with a team in Pakistan for the last couple weeks on a project which is starting to reveal itself to me.  It is an iOS game that’s nearing completion and should be ready to submit next week.

    Perhaps it’s just that as a professional software developer it’s hard to accept sub-par quality code and ship it as my own product. In this case I’m doing a code review and finding so many things that were done that wouldn’t take more than a minute to fix but were not done.

    My question is: is it worth the effort to try and push best practices on the team I’m working with?  Should I take the time to re-factor and debug their code so that it lives up to my standards? Should I integrate myself into a team leader position to coach my developers to get better?

    Just for some idea of the quality of code. Some of this code makes me a bit stomach sick… like not using #define for numbered constants. resulting in code thats like:

    if (tag == 2){ 
      check=999;
    }
    

    Other bits of code obviously taken from other projects hasn’t been refactored to change variable names. Code styles are all over the place. Best practices are thrown out the window.

    My biggest takeaway from this is to absolutely enforce access to a git repository during development. As soon as I started looking at the code I had to fix it, and now it’s in a state where it’s difficult to merge in fixes that the team does. Start working on the code early on to fix and refactor things.

  • High Performance Static Websites on Amazon S3

    I’ve been seeing more frameworks lately for generating static websites. The reason for these becoming more popular recently is the result of several developments.

    1. Cheap shared hosting is notoriously unreliable, slow servers overloaded with too many websites and hacked servers being able to infect and hack many other sites at once.
    2. The development of 3rd party services such as Disqus to power the dynamic parts of a website with embedded javascript. (removing the requirement of server side logic)
    3. The scalability, performance, uptime and low cost provided by Amazon S3 and their CloudFront CDN service.

    The difference in cost between a scalable dynamic site and a scalable static website can be staggering.  So if there is a way you can convert a website over to be static (perhaps with a daily or hourly upload of new content) it may be worth your while.

    A website with 1 million page views per month on Amazon S3 with CloudFront would cost roughly $6/month depending on the size of the assets.  Building up a simple server configuration with 1 database server and a webserver with small EC2 instances would bring the costs up around $150/month.

    One of the nice things about developing a static website is that you can script things however you want to.  Concatenate strings in bash or PowerShell or go all the way to having a complex database backed CMS system and template engine.  It also means massively less complex server infrastructure.   No more nginx reverse-proxied gunicorn server paired with a database server and a host to tools to monitor uptime and send alerts should things break.

    It’s for these reasons that I am working on my next project to have a static website backend instead of a dynamic django app.

    Using a template engine like Jinja2 it is trivial to convert content over to static files ready to be uploaded.

    Some tricks may be needed to handle things in a more complex static site.  Perhaps a small light server to refresh the static content every hour, or to run scheduled tasks, or to do other various asynchronous jobs.  Still the costs can be brought way down if your servers don’t have to handle the web requests.

     

     

  • Exercise for Programmers

    Staying on top of your game is best accomplished by continuously learning and by ensuring you are mentally and physically at your best.  As a desk jokey it can be difficult to get enough exercise in a day so you have to be pro-active about staying in shape outside the office.

    For several years I did a lot of running, 4-5 times per week I would run between 5km and 30km. Running is a great exercise because:

    1. it’s intense – you can always push yourself to run faster/further.
    2. Very little equipment required – just running shoes
    3. Local fun runs and races to keep you motivated
    4. Great way to see your neighbourhood from a different perspective
    5. it engages your entire body

    After moving to a new city running became  less enjoyable due to poorly maintained sidewalks and the only walking paths close by are along a noisy highway.  So I discovered something else to focus on.  Strength training.

    Strength training has a number of key benefits to health.  It makes you prepared for those few days a year that require lifting and moving heavy furniture or equipment.  The last thing you want to have happen is to throw out your back when doing some chores around the house.  When it comes to strength training the classics seem to be the most effective: deadlifts, squats, and bench press.

    Regardless of if you choose to do running, strength training, cycling, swimming, walking or yoga it would be wise to trade some evening TV time for some physical activity.