Expertise and Versatility

Successful entrepreneurship hinges largely on maximizing benefit and  minimizing risk. While striving to solve some of the world’s most difficult problems, entrepreneurs that rise to the top are those who optimize the process of weighing the risk versus reward of their decisions. The end goal for businesses and communities should not only be to survive but to also thrive. Rather than making strictly safe and comfortable decisions, people ought to encourage taking an appropriate amount of risk for the right reasons. After all, the health of a society cannot adequately be defined by “success” or “failure” in a word.

In a world replete with industries that constantly change and develop, consumers have grown to expect that products and services will become better and cheaper over time. Entrepreneurs and businesses who look beyond the basics tend to find opportunity knocking much more frequently, because they are willing to learn and share their knowledge with others.

With others striving to beat out the competition and have a “better than them” mentality, some of the greatest success stories have started with an individual whose desire is to become better today than yesterday and become better tomorrow than today. This yearning to improve and accomplish more each day ensures that the business will exceed customer and consumer expectations, delivering greater quality and value over the long term.

Over the long term, expertise alone will not suffice to assure sustained business growth. Along with expertise, businesses need to be able to understand how to apply their knowledge and continue addressing the new problems that arise. Versatility paired with expertise can provide the essentials necessary to build a business that is strategically positioned to endure the storms that businesses ultimately face.

Businesses ultimately face many challenges.  The task of satisfying and exceeding the expectations of clients, customers, and consumers can seem daunting. However, those who more willingly face adversity tend to more easily overcome adversity. We have woven these principles into our own business model, so that we grow alongside our community by sharing our expertise to help businesses create new value. As you consider applying this information to your own business, think of ways that you might increase expertise and versatility to make awesome happen for our community.

Getting Started with Artificial Intelligence

It seems that artificial intelligence is in the news more and more. Most larger companies use AI for something within their business, and more and more businesses are finding ways to improve their organization with AI. Purchase recommendation systems, self driving cars, video games, language translation apps, and route mapping software are just a few examples of artificial intelligence we see every day.

But where does someone interested in AI get started?  AI can be very complicated, but that doesn’t mean you can’t get involved too! One of my favorite resources for learning AI is the series Artificial Intelligence for Humans by Jeff Heaton. In his books, he covers a variety of topics including genetic algorithms, machine learning, clustering, linear regression, swarm algorithms, and so much more. While these topics can be complicated, Jeff presents them without all the math in a way that is far more readable than most texts on the topic.

If you are interested in AI, one of the first questions to answer is what programming language you want to use. While any language can be used for AI, the bulk of the tools and frameworks available exist for Java, C++, Python, and R. If you’re big into number crunching and Big Data, R may be the obvious choice. If you’re not a programmer, Python may be easier. For existing developers, Java or C++ may be best.

What type of AI do you start with? Try genetic algorithms or swarming algorithms. Genetic AI assumes the answer to be like a genetic genome and, through a series of mutations and genetic splicing, attempts to find an answer.  Swarming algorithms look at groups of objects and attempts to have them behave like a cohesive team. Swarming algorithms are great for games with AI controlled enemy armies and are commonly used by game developers. Other common, and simple, AI algorithms include K-Means clustering (used to group objects by similarity),  linear regression (used to predict unknown values using relatively simple algebra), or path finding algorithms such as Dijkstra’s Algorithm.

Once you understand the basics of AI, you can move onto frameworks like DeepLearning4J or TensorFlow to help create Neural Networks (a far more advanced type of AI) or look into libraries like OpenCV for tinkering with Computer Vision.

Whether it’s creating an emulation of a fish tank using swarming algorithms, solving the Traveling Salesman Problem using genetic algorithms, or calculating a path through a maze using Dijkstra’s Algorithm, artificial intelligence is loads of fun.

Carpe Diem!

Today, my daughter and I ran the first of three 5K runs this summer. We decided to participate in the Disney Virtual 5K this spring, and have spent the last few months training. Today’s race wasn’t great. We didn’t break any records, but we accomplished our goal for this month. Next month, and again in August, my daughter and I will run another virtual race.

As I was running today, I remembered something I read this spring. “Today I will do what others will not so that tomorrow I can do what others cannot.” This simple idea applies to just about everything in life. Today, I will show my wife that I love her so that tomorrow I have a marriage others look to as an example. Today, I will study Spanish for 30 minutes so that when I travel to Mexico later this year I can get around. Today, I will learn a new technology so that tomorrow I will be more marketable.

To achieve any goal in life, effort must be exerted day after day. I see people everyday who want to own their own business, or write a book, or run a marathon. Yet, rarely do these same people have any plan to get there nor are they exerting any energy toward their goals today. They are hoping that, by some miracle, they will wake up one day and it will have happened. But it never will. My business, my profession, my 5K run today, and everything else I have ever accomplished have taken untold amounts of effort and energy. But never once have I looked back on those efforts and regretted my decisions. Can you say the same about the things you have put effort into?

A leadership conference I attended this spring talked about the importance of self-leadership. About how we can never lead others if we can’t lead ourself. How do we lead ourself? By setting goals and working toward them. The leaders we wish to follow are those who have a record of achievement. They are people we aspire to be like. Are you putting in the effort today to be the leader that others will look to tomorrow? If not, are you willing to put in the effort today so that tomorrow you can do what others can’t?

Sieze the day! Make something awesome happen!

Gaming Addiction Disorder?

I read a recent article indicating that the World Health Organization had recognized gaming addiction as a disorder. Decisions like this should bring fear  to all tech organizations. As we strive to create compelling content, we run the risk that someone may become ‘addicted’ to our content in a way that negatively impacts their life. Websites like Facebook, Pinterest, Thingiverse, and others can easily become a time blackhole with an afternoon gone before you even realize it. Isn’t that what we want though? We want to attract users and keep their interest. But what happens when courts rule that the addiction that we caused created a negative financial impact on the user? Will content providers like Netflix be sued in class action lawsuits because people couldn’t stop binge watching the newest TV show? How far will this go? Will we have a future where employees who watch TV all day can’t be fired because they suffer a recognized disorder? Must we, as employers, provide reasonable accommodations for their disorder? How about social programs – will we be required to provide welfare because someone has become so ‘disabled’ that they can’t work?

When I was younger, I played a lot of games too. Hours spent playing The Legend of Zelda, Super Mario Brothers, and other Nintendo games; and even today I enjoy playing classic NES games. But gaming is only one part of my life. I enjoy reading, learning foreign languages, studying astronomy, playing board games, and so many other things. Gaming has never become an all consuming obsession in my life.

I am concerned to see how this will play out and what the ramifications may be, but I do know this – the future will be filled with people suffering from carpal tunnel and vision problems looking back on their life filled with the regret of having sold their dreams for a digital fantasy world that left them empty in the end. And we, as taxpayers and businesses will be left with the financial burden.

The Value of Open Standards

One of the most frustrating aspects of working in the tech world is dealing with proprietary systems, protocols, standards, and languages . Countless technologies do things their own way, even when standards exist for the technology. Some vendors like to avoid open standards simply so they can hold a segment of the tech population hostage. Unfortunately, many of the biggest offenders are also among the largest tech companies out there. Because of their influence, they ignore standards and create their own. These vendors may argue that they created their own way of doing things because the standard isn’t robust enough to do what they want. While this may occasionally be true, it’s often an excuse. A shining example of this problem is the Swift language created by Apple. Did we really need a new language for iOS? Certainly it was time to retire Objective-C (another Apple only language), but did Apple really need to create a new language? Were there no other languages that would have worked to achieve your objective? I doubt Swift was really necessary. Microsoft has done the same thing with their C# language. While I personally like the language, did they really need to create their own clone of Java?  How about Microsoft’s Active Directory? If you’ve ever tried to integrate a non-Windows machine, you quickly see how painful it is. These are just a few examples, but I am sure everyone reading this has experienced issues where things weren’t compatible that should have been if the vendors simply followed existing standards.

Why does this really matter? Because incompatibility negatively impacts consumers. When vendors create proprietary protocols, the consumer often loses. Time is wasted trying to connect a Mac to a Windows network. Programmers spend time learning another language that is useless outside of a specific niche. Money is wasted for additional software to convert between file standards. Users waste time fixing an OpenOffice document that doesn’t import nicely into Microsoft Office.

As new technologies continue to come out, this problem is only going to get worse unless we start working today to create open standards and to follow existing standards.

Lifelong Learning

I’m a nerd – it’s hardly a secret. My favorite hobby is learning. From math to foreign languages to astronomy to theology – I read and learn all the time. That’s one of the things that makes being a programmer such an amazing job. For most people, work is the same today, tomorrow, next week, next year. Over and over again, the same tasks, the same problems. Software engineering is completely different. Rarely are the problems the same from project to project. Every single day, a new problem appears for development teams to tackle. A new user experience to create. A new bug to find. But it doesn’t stop there. Technology never stands still. Technologies that appear cutting edge today will seem antiquated in a year. The libraries that make everything seem so easy this week will be cumbersome this time next year. For twenty years, I have watched new languages spawn, new paradigms of programming become popular, new technology stacks gain prominence, and new tools take the limelight. As I was writing some JavaScript code today, I learned a new way to solve a problem that repeatedly comes up in my projects. Next week, I’ll learn another novel way to solve another problem. That’s the life of a programmer – an inexorable march forward toward the ever elusive notion of being an expert. Indeed, what makes programming so fun is that, no matter how much you learn, it’s an intractable problem that beckons you back for more every single day!

Enthusiastic Indies

Several times each month, someone gives me an idea for an app. Usually, it’s an app they would love to have, and so they assume there must be a market for it. These apps typically fall in niche markets. For example, I have been asked to write apps to help firefighters identify symbols on chemical trucks, to aid frequent travelers in finding radio stations matching their musical taste, or apps to help off-roaders find their way and map new trails. Each of these ideas are great, but none of them would ever generate enough money to pay for development. The problem is that developing good mobile applications typically requires a fair amount of time for any non-trivial problem. And, since most users will look for free apps instead of paying for them, there’s little income generated from an app. Of course, there are some apps that make a substantial sum of money. Well known games, for instance, can generate massive amounts of revenue for their developers – but this is an incredibly small percentage of the apps out there.

So how do all the niche market apps get out there? Often, they are done by a devoted indie developer who is passionate about solving some problem. So, they develop an app. They may spend months learning how to write an app, or they may be a programmer writing an app for one of their own hobbies. Either way, they spend countless hours writing software that will likely never generate enough money to even pay for the electricity they used to write the app.  These developers are really an unsung hero of the tech age. Developers writing code for hobby projects create not only apps we use on our phones, but also countless free applications we use online, or on our desktop machines.

It’s amazing to me the amount of free software and applications that we have available to us because of passionate indie developers out there writing code for free. Few other professions give so much back to the community!

The Cryptocurrency Elephant

For the last 6+ months, cryptocurrencies have been the news over and over again. Ranging from the highs of Bitcoin at the end of last year through hacking of cryptocurrencies during the last week; cryptocurrency news has been everywhere. But with all the buzz about cryptocurrencies, the elephant in the room seems to be completely ignored: the huge waste of energy.

During the last several decades, there have been growing concerns about climate change, global warming, green technologies, etc. Al Gore insisted that we lower our green house gasses (ironically while traveling around the world in a private jet creating more green house gasses in a year than many of us will in our lifetime). Car companies want us to use electric cars to lesson our usage of fossil fuels. Wind and solar farms are showing up all over the place to decrease the nation’s carbon footprint. We’re asked to heat our houses to 66 at night and cool them to 75 or 80 in the summer. Turn lights off when not in use, ride a bike to work, shut off your computer when not in use, don’t idle your car in the winter to warm it up, on and on the list goes. But that’s not enough – the environmentalists say – we need to stop using all the earth’s natural resources on cell phone components, batteries, etc. Use rechargeable batteries, recycle your cell phones, don’t throw computers in the trash because they contain hazardous parts.

Then, cryptocurrency hits the market. No longer do we care about energy consumption. Cryptocurrency is intentionally designed to use as much power as possible – increase the difficulty of a block and the power consumption goes up. Mining generates huge amounts of heat, and then air handling systems need to be installed to keep machines cool. Cryptocurrency is both directly and indirectly causing global warming! To make matters worse, miners spend huge sums of money buying special chips (whether video chips or specialized ASIC chips) which require more mining to retrieve the necessary minerals. From an environmental perspective, cryptocurrency may be one of the biggest disasters of the 21st century. Yet, nobody wants to talk about it. A few years ago, it was suggested that I get rid of my Dodge Ram truck because it used too much gas. Now, the world is on fire for crypto mining.

Let me be clear, I think blockchain is an amazing technology. The potential is mind boggling. However, if it continues to grow like it currently is, how will we handle the energy requirements? How will we reduce green house gasses? How will we achieve any goals that involve using less energy when cryptocurrency is based on wasting energy? I think this is a problem the cryptocurrency community needs to resolve. The technology is great, but I doubt the global community is willing to sell out the entire planet for a few bitcoin.

I’d really love to hear thoughts from the blockchain community on how this can be resolved!

GameMaker Studio 2

For the last decade, I’ve been tinkering with game development. I’ve played around with DirectX and OpenGL, and written games for Android, as well as desktop games using Java and Unity. I’ve taught students to use Scratch and to write scripts in C# for Unity. Through the years, I’ve come to really like Unity. Unity is free, can create awesome 3D games, and has a wide variety of resources available through their resource store. However, I’ve found that there are some things that Unity just doesn’t work as well for. For instance, while Unity does have 2D support, it seems like a hack to their 3D world. Platformers can be especially painful since floating platforms, for example, violate the rules of physics. And while their animation tools work very well, they can be overwhelming for the novice to use. Overall, Unity has a steep learning curve and, too many times, things that would seem simple become painfully difficult. I remember the attempts I made at creating a simple 3D racing game – wow, dealing with their car controller was a lesson in frustration. This isn’t to say that Unity isn’t a great tool, it most certainly is. It just isn’t the best fit for all games. If I wanted to create a first-person, explorable, realistic, 3D world to explore – Unity would be my first choice. But for many other games, Unity just isn’t your optimal choice.

Enter GameMaker Studio 2. I was recently contacted by a non-programmer who had been tinkering with GameMaker Studio and wanted to know if I would help him make a game. Having worked so much with Unity, I was initially hesitant to switch platforms. To make matters worse, GameMaker Studio isn’t free. So, I reluctantly downloaded the demo version and played around. Wow! What an amazing development platform! I quickly upgraded to the full version ($100) and have been loving what I can do! One of my favorite aspects of GMS2 is the ability to create and edit sprites inside the app. This may seem trivial, but I don’t always want to use Photoshop or Illustrator to create simple pieces of graphics content. Another great feature is how the project resources are automatically broken down into types – objects, sprites, audio, etc. For many junior developers, project organization is never considered. Long term, that means projects become unmanageable. The simple aspect of automatically organizing resources by type helps to keep the project clean. The GMS scripting language is based on C++, but all the ‘hard stuff’ is hidden from the programmer. No need to worry about imports, constructors, or any of the stuff that would make programming daunting to the junior developer. Individual micro-scripts are created for startup, step (each new frame of the game), or events such as button or keyboard actions. These small scripts keep code small and more easily understood. (I would image that as a project gets larger, this could be problematic. But for smaller projects, this is nice.) GMS has built-in functions to change the angle of an object, play a sound, or create labels on the screen. Built-in variables exist for an object x/y position as well as the screen dimensions. Everywhere I look, I see that the makers of GMS worked to create a platform for non-developers to create games with as little technical knowhow as possible. For me, this is particularly exciting. Why? Because many of the people who want to work on a game don’t have the technical expertise to use a more complicated development environment. But with GMS, the bar has been lowered to allow everyone the fun of developing games!

If you’re interested in trying game development, I would highly recommend Game Maker Studio 2.

Angular is Awesome

Over the last six months, I have started doing a lot of Angular development. Initially, I was less than enthusiastic about the experience, but today it is probably my favorite technology. So, what makes Angular so great?

Angular provides a clean breakup of code, HTML, and CSS. Like MVC models for desktop or web applications, the Angular model ensures a clean separation of concerns allowing web designers to write HTML code while programmers handle the underlying logic.

Angular components are modular. I love this aspect of Angular development. I can create a cool widget in one application and easily use it in another application. This kind of modular approach reduces development times and allows for plug-and-play development of applications.

Angular applications run on the client side. As servers get more and more traffic, dealing with all the page requests can become burdensome for a web server. Running as much as possible on the client side not only improves user experience by improving speed, but also reduces load on your servers.

Angular applications use AJAX. This prevents full page reloads and just changes portions of the webpage based on user interaction. It looks slicker, feels better, and allows for all kinds of cool web experiences such as filtering and sorting data in a way that feels like a desktop application.

Angular applications easily consume REST services. This makes it easy to interact with countless services – whether homegrown or provided by a third party. Typically, REST services provide data in the form of JSON objects which need no manipulation to use in an Angular app. No parsing – just consume the data. It’s easy and convenient. Likewise, when sending data to JSON-based REST services, no translation is needed – just send the native JavaScript object to the server.

Angular can be used to create mobile applications. Ionic is a commonly used framework for creating hybrid mobile applications for both iOS and Android. Ionic provides an Angular framework as well as components to create awesome mobile applications.

Angular can use countless CSS frameworks. While not specific to Angular, I feel I would be negligent to not mention the amazing variety of CSS frameworks out there that can be used by Angular to create visually appealing web apps. Materialize CSS and Bootstrap are two of my favorites, but countless other libraries can be used allowing developers to create a beautiful experience for users.

If you’re not using Angular, you’re definitely missing out!