Author: Matt

  • Building something bigger

    Halotis is in the process of a pivot. We’re re-writing all of the software developed for the backend of our mobile apps so that they can be opened up for anyone to use. We will be offering a host of BaaS style applications to make mobile development easier, more social and hopefully raise the bar for what individual developers can accomplish.

    Imagine individual developers able to launch in game chat features like that in Clash of Clans. Or provide social networks to tie players together.  We have tools for monitoring analytics, and providing game config files dynamically, for pushing ads and sending notifications.

    It will take some time, but progress is being made to launch a host of services.

    We’re excited for this change and to see where things go in the future.

  • Playing with Docker, Vagrant, Dokku for deployment

    I’m looking at launching a series of new web services in the future and that got me thinking about finding ways to improve my development and deployment workflow to make it super trivial to launch new services and APIs.

    Recent experience with Heroku’s PaaS got me looking in that direction. Pushing a git repository to kick off a server build is an eloquently simple approach that makes spinning up new services a snap.

    However Heroku costs can quickly spiral up and out of control. Running it myself on raw Amazon EC2 or a local dev server would be ideal.

    Thanks to several new projects it’s possible to create an easy to use mini-heroku on your own server.

    Docker is a brilliantly simple idea that has sparked a huge following in the last few months.  It is one of the most exciting developments in Open Source at the moment.  Basically Docker lets you run an extremely lightweight virtual machine on top of Linux.  You can spin up and down services in 1-2 seconds that are isolated from the host server which allows you to play with various server configurations quickly, easily, and without touching the core system.

    Docker allows you to specify your entire server configuration in a Dockerfile of which there are already thousands defined and shared and searchable at http://index.docker.io.  Need a WordPress server? Redis? Memcached? you can now get them up and running in a virtualized environment extremely easily.

    Dokku, builds on top of Docker with the ability to replicate the most impressive feature of Heroku: git push to deploy.  Once set up you can configure a git push remote and have Dokku automatically build and run a Docker for your app and host it on a subdomain.  Brilliant.

    Managing all these Docker services can be done with another awesome tool called shipyard. Bring your virtualized multi-host environment under control.  It even supports automatic restarts of crashed services.

    Getting it all up and running has been fairly straight forward. Once in place, it will make managing my own cloud of services much more robust.

  • 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, mattwarren.co 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.