Author: Matt

  • Thoughts on Swift

    So for an iOS developer like myself Swift is pretty exciting.

    When a new language comes along, especially one that is sure to get traction, there is a lot of opportunity to create some exciting new things.  We all know that Swift will make inroads into the mac and iOS app scene, but as a modern language it also has a chance to become something more than that.

    Because of the native integration with Objective-C and C libraries Swift offers some interesting opportunities for high performance compiled apps on the server as well.  This is a space that until now has been completely empty on the Objective-C side of things.

    The space is wide open to create a Rails inspired web framework for Swift (or Express/Django/Sinatra/etc). All of the key tooling that you have with other languages now can be ported over to Swift.  Things like commandline tool frameworks, APIs for various services, BDD and unit test frameworks.  The space is wide open and everyone right now is on equal footing to deliver the next big thing.

    It’s the chance to make a name for yourself in the open-source community by publishing something cool written in swift.

  • What happens when computers are smarter than you

    A few years ago I was working at a finance company doing quantitative stock algorithms and I remember hearing an interesting story.

    Back in the early 2000’s there was some buzz around neural networks and their ability to be used to pick stocks.  The company at the time had invested some R&D into creating their own neural network algorithms to help with their trading.  The algorithm performed well and they apparently moved it into production.  However, it was quickly pulled back out.  Even though the trades were profitable, when investors asked why they had made specific trades the portfolio managers couldn’t give them a reason.  An “I don’t know” answer from your highly paid portfolio manager doesn’t instil a lot of confidence.

    The neural network algorithm was in someways smarter than the portfolio manager, it could identify correlations in the stock market that could not be explained in terms the investors could grasp.

    I believe there is nothing inherent to the bundle of neurons in your head that would make it impossible to replicate in silicon and software.  Furthermore, if it’s possible to replicate the average person’s brain then it’s possible to replicate a brain with an IQ of 200, and if that’s possible then perhaps it is also possible to simulate a brain with an IQ of 500 or 10,000! The ramifications of which are incomprehensible.

    Over the last handful of years big strides have been made in the world of AI.  Facebook has face detection algorithms that are as good as humans, Google has self driving cars with a perfect driving record, publishing companies have algorithms to write news articles.

    We are fast approaching a time when computers will be smarter than us all.  They will gradually pick off more and more tasks to be better than us until they are smarter in a general sense at virtually everything.

    When I look at my profession of being a software developer, I can foresee a way for computers to make dramatic inroads to making even me obsolete. You take all the publicly accessible code online and feed it into a learning system. correlate issues and bug reports to the code fixes and it becomes possible to identify logical errors and bad practices, or autocomplete entire sections of code. Even without cutting out software developers completely, it seems possible to increase their productivity by an order of magnitude.

    When a computer is smarter than me at programming, it will program itself.  I will be out of a job, and likely, so will everyone else.

    When a computer is smarter than all of us, the entirety of human civilization will change.  We are currently unaware how a system a complex as everything on Earth will react, and that’s kind of scary.  Perhaps someone should attempt to forecast this future.  An economic forecast may have more weight to pull in political debate.

  • Investing in your Productivity

    This week in discussion with the rest of my team it became apparent that there was a lack of investment in creating tools to help with the productivity of the team.

    There are four distinct areas you can focus on to improve your productivity as a software developer.

    Focus

    Software development requires a lot of time to think about solutions.  This usually requires focused thought to make any real progress.  Distractions can totally derail your day.  Finding ways to always reduce the number of distractions in your day can pay huge dividends.  Improving your focus is one of the first things you can do to improve your productivity.

    Knowledge

    The more you know about all the tools you use the less time you spend looking for answers on StackOverflow.  As a developer myself who jumps between Python, Ruby, Javascript, Go and Objective-C on a regular basis I sometimes blank out on even simple things like the syntax of a foreach loop in javascript.  As a result of a detour to google for answers I can easily loose a few minutes here and there throughout  the day which can add up.

    Knowing your higher level constructs can reduce the amount of time you spend re-solving already solved processes.  Having a solid understanding of authentication techniques, CRUD interfaces, caching strategies, SQL etc can make a task that would require a google search and turn it into a trivial exercise.

    Reading or re-reading books about your language of choice, framework, or concept can greatly improve your code, and your productivity. I try to read one book per month, and subscribe to weekly email lists for everything I’m interested in keeping current on.

    Typing Speed (core skills)

    Your ability to translate thought into code is dependant on how seamlessly you can move things from your brain into the computer.  The keyboard is your interface and being able to use it effectively is a basic skill for anyone who uses a computer.  Even though I have been touch typing for 15 years I still invest some time here and there to master the keyboard.

    Tools

    Knowing how to use your text editor advanced functions is one thing, writing your own tools to help streamline your processes is an investment in your productivity going forward.  You can do some pretty cool things with a 100 line shell script.  If you could spend 10-20% of your coding effort on creating tools to improve your productivity then it would compound into tremendous gains over time.

    The current evolution of devops is an example of what’s possible.  The old days of purchasing hardware, spending weeks having IT configure the server software stack and then developing a custom process for deploying your app has been replaced with ‘git push’ to the cloud.

    Investing in tools for your business (Sales, Marketing, Accounting) automation or tools for personal productivity (creating S3 buckets, debugging notifications, app templates) can pay huge dividends.  They give you a competitive advantage.

    Open sourcing some of these tools can provide new visibility to your business (see thoughtbot as an example)  and can attract top tier developers.

    So get out there and keep an eye on always getting better.  Always be learning, always care.

  • Lessons from Consulting

    As a consultant you get the chance to work on lots of unique projects from the ground up and also to come in and fix up existing projects.  With an eye towards managing a budget, estimating your time, and  keeping active communication there are a lot of valuable lessons to learn.

    On the other hand things are very different when you have only one client (the company you work for).  As an employee developing software that is owned by the company there are fewer external constraints, timelines are often times more flexible, and how you budget your time is less onerous.

    Making a good estimate on a software project is extremely difficult.  When you make an estimate and are held accountable to deliver within that estimate then there is pressure to be as thorough as possible.  Knowing how things are progressing within that estimate requires accurate time tracking.  Learning from it, to get better at your estimates, requires a feedback loop where you can compare the estimated time to the actual time and figure out why they don’t always match up.

    Keeping yourself to account on initial estimates helps develop a better sense of the scope of the projects you undertake.  This benefit carries over to personal projects as well.

    When working on 10’s of different projects over the course of a year organization is key.  It’s not limited to just your files.   Organizing your communcation, reading material, and schedule is super critical when juggling a lot of projects. Being able to jump into 2 year old code to patch a security vulnerability quickly requires a level of organization and consistency that takes time to develop.

    Everyone at some point should at least try to be a consultant. Running your work like a business gives a unique perspective on how others perceive you. It’s a game changer.

  • Strategy Adjustment

    Despite my amazing singing, Birds can fly had a less than stellar first week in the store. Invader Crush essentially saw no downloads.

    It seems that there are just too many games in the store. It’s nearly impossible to get noticed with simple games (outside of pure luck).  I thought that the laughable graphics and sound in Birds Can Fly would be enough to create some word of mouth buzz (at least with my friends it has).  But for a wider audience I need to step up my game.

    So my next attempts at publishing a game will raise the bar.  The things I put out there will be better than the current competition in at least one of these things:

    • unique (no competitor)
    • better graphics
    • better gameplay
    • better social integration
    • better use of mobile

    So no simple clones, or re-skins.  I’m going to go back and attempt to follow through on some of the bigger plans I had to expand on my previous games.  In particular I have some good ideas to take the slot machine game to the next level with some features not yet seen in other games.

    That said, if anyone want to pay me to finish (and brand?) this game called Fantastic Voyage I’m open to offers.

    iOS Simulator Screen shot Apr 5, 2014, 9.30.54 PM

  • Getting Back to Node.js

    Javascript is the most popular language on GitHub.  There is roughly 5 times more Javascript than Ruby code!

    Node.js has been moving very fast since it was first released 5 years ago.  It has been pushing the development of Javascript to expand into numerous other areas including commandline tools and servers.  Coming back to it now after a year, it’s amazing to see how it has matured.

    The bleeding edge ECMAScript 6 Harmony language changes to Javascript have helped to tame callback hell, Express has become the defacto standard for web servers, and there are now libraries available for just about everything you could want.

    One thing about Javascript that is interesting is the uniqueness and flexibility of the language. When you read other people’s code and say “that is clever” it feels like you’re understanding how another developer really understands what the code is doing.

    Most developers who haven’t worked with Javascript make the mistake of assuming they know Javascript.  However Javascript deceptively complex.  Understanding the subtleties of how ‘this’ is defined gets tricky.  Being able to write idiomatic, properly encapsulated, testable code is requires some dedication.  Good code is much different than just using jQuery to hide a div.

    I just finished reading Node.js the Right Way: Practical, Server-Side JavaScript That Scales and though I picked up a few tricks it left me wanting to dig much deeper to understand and learn more.  Thankfully there are now plenty of books to read on the subject.

    It seems as though Node.js and Javascript have been infiltrating the enterprise.  Using the same language from front end to backend is a great selling point.  The high performance is perhaps more valuable.  What this means to you is that learning Node.js has actually become a good career move.

  • Birds Can Fly in the store

    My new Flappy Bird clone, “Birds Can Fly” made it into the store yesterday. To kick things off with a bit of a boost I ran $250 worth of ads. That worked out ok though it’ll take a long time to earn that money back. The idea with the ads was to try to get the game in the hands of a range of people who will hopefully show their friends and get the game out there.

    This game features me singing, and sound effects I recorded in the basement.

    Birds Can Fly – HalOtis Inc.

    I’m going to continue to work on a number of quick games now that I have a bit of a handle on using SpriteBuilder to help with the development.

  • Invader Crush in the Store

    After a longer than usual review process, my latest game Invader Crush made it into the App Store.

    I had to resubmit my flappy bird game due to a bug that was picked up by the reviewers. Expect that to be reviewed within the next week.

  • Open Sourcing old Projects

    While trying to clean up my computer a little I noticed that I have a lot of old projects that are really doing nobody any good by just sitting on my computer.  So in an attempt to both back them up and share them with the world I’m going to be reviewing some of these old projects and sharing them on GitHub.

    The first project I’m open-sourcing today is an old simple web app I did way back in 2007 called TwitSig.us.  It’s a PHP application that retrieves your most recent tweet and renders it into an image.  It was designed to be used as an email signature that would continue to be up to date.

    You can now find the code for this project on the github repository.

  • Creating More Apps

    One of the goals of Halotis is to create and launch a number of robust webservices for Mobile Apps.  However, before we are ready to launch those to the public for use we want to make sure they work at scale and prove that the ideas are useful.

    To that end we have set an ambitious goal of launching a large number of apps and games over the next few months in order to gain the scale we need to dog food our own services.

    A game we have been working on which will be coming out soon is a match-3 type game called Invader Crush:

    IMG_0548

     

    Another game which will be released shortly is our hilarious take on the Flappy Bird phenomenon.

    iOS Simulator Screen shot Feb 13, 2014, 9.32.25 PM

     

    With the help of tools like SpriteBuilder we are producing a stream of new games as quickly as possible all of which will be used as a test platform for refining our backend services before they’re ready for public use.