Saturday, July 9, 2016

Oh Snap! Has Ubuntu just developed the Holy Grail of package managers?

How many times have you wanted the latest and greatest update to a piece of Linux software only to find out that it had dependency versions that were out of sync with your system. Your system finally grab the latest update to the software you wanted.
required library version x but the software required library version y. Until now, the only thing you could do is sit it out and wait (and hope) that your operating system vendor would eventually get around to updating the packages you needed so that you could

But Canonical, the company behind the Ubuntu Linux operating system, wants to change that with the introduction of "Snap Packages". Think of Snap packages as a combination of the tarballs of the 1970's and 1980's and modern containers. When you install a Snap package, you not only get the software you want but you get all of the dependencies it requires too - at their proper versions. All this without touching your base system, changing or updating its libraries, or introducing potential instability.

Also, one of the coolest things about Snap packages is that they aren't an Ubuntu-only thing. Any Linux distro can easily provide the snapd daemon and support snappy packages easily. That means that Snap Packages might finally deliver a solid universal package manager that works on any distro. No more creating an RPM for Red Hat systems, a DEB for Debian based systems, etc. With Snap packages, you literally create a single package and it works on any distribution that supports them.

While Snap packages are a great advancement for the Linux ecosystem, it doesn't come without a cost. That cost is your hard disk space. Because Snap packages don't rely on system libraries but come packaged with their own dependencies, it means software installations could potentially be a lot larger. In today's world of 1TB+ hard drives, that might not be such a huge issue but it's something users should be aware of when venturing into this new territory.

In the end, we're still at the beginning of Snap packages and there's still a lot of work to do. For it to become a true universal package manager, we need more distros to adopt it, we need more developers to use it, and we need more users to demand it. It's going to take a while for those things to happen but we'll be in a much better place when they do. We'll have more stable systems, less frustrated developers, and much happier users. All of that makes Linux strong and more united in the end.

To find out more about Snap Packages, you can visit this link. To use them, you must be running Ubuntu 16.04 or later or another distribution that supports them.

Tuesday, June 21, 2016

The Path to Mobile App Developer: How and Why

If you're a small or independent software developer, you're probably not making a lot of money by writing desktop software. Sure, there are the outliers who happen to hit upon a big title that carries them to profitability but, overall, it's amazingly difficult to make money on the desktop. Add to that the fact that just about every major metric used to measure Internet usage says that more and more people are using mobile devices instead of laptops and desktops and you can easily see a trend away from the desktop and towards mobile. Many of us don't go anywhere without our mobile devices and we even feel a sense of loss or unease when we forget them at home or at the office. For better or for worse, we're in a love-affair with our mobile devices and we're constantly tethered to them.

This presents an amazing opportunity for software developers who are willing to invest the time and money to move away from the desktop and start to think about the mobile space. It's an exciting place where, even with over one-million apps in the Apple App Store, still isn't saturated and still presents opportunity for innovation and, most of all, income. But making money on mobile isn't always easy. It's not a platform you can move onto without considerable learning and, sometimes, a considerable investment in hardware. Depending on the platform for which you've chosen to develop, there's not much you can do about the hardware costs. But I'm writing this post to help those interested in moving to mobile development save a little bit of time on the learning side.

Which Platform Should I Choose?

There are basically two mobile platforms in widespread use today: Apple's iOS and Google's Android. Sure, there are others like Blackberry and Windows but their market share is really too small to matter and you're basically wasting your time and effort if you develop from them. There's just no market there anymore.

Out of the remaining two dominant platforms, your choice for which you want to develop comes down to three things: number of users, ease of development, and return on investment. When looking at Android and iOS, you have to ask yourself which platform has enough users who are willing to buy your app to make spending the money on hardware or development time/tools worthwhile.

While both Android and iOS have massive amounts of users, I'd put forth that users, while certainly larger in number, don't pay for software nearly as much as iOS users do and, when they do, simply aren't willing to pay as much. Android users tend to gravitate more towards free apps than iOS users and seem to bristle a bit when asked to pay more than a few bucks for an app. I personally know Android users who've spent an hour looking and trying free apps just to avoid paying $.99 for an app they needed. iOS users tend to be much less shy about shelling out cash for the apps they want and, for that reason, I believe iOS is really the only platform you should focus on if you're a serious mobile developer.

A second thing to consider when looking at Android vs iOS is the time it will take you to develop and test your application. There are literally hundreds of Android devices that can run your application. The majority of them, unless you've done extensive testing and tweaking, are going to either run your app very poorly or it will look like absolute crap on the device. Android is a very fractured platform that boasts everything from $30 devices running ancient versions of the operating system to high end $800 devices that sit on the bleeding edge. This presents a nightmare for indie developers who want to reach as broad of an audience as possible since, even developing just for the high-end, often involves testing on a dozen or more devices all at a costs of several hundred dollars each. Even then, there could be 'gotcha' issues that harm your app and all of that translates into negative ratings on the app store and less exposure of your app to the market.

iOS on the other hand is unified. You only need to develop for two devices: the current iPhone/iPad and the previous iPhone/iPad. By the time you're three generations of device out, the market becomes so small that it's insignificant. This, of course, not only simplifies your development but also greatly reduces your overall costs.

So, for all the reasons listed above, my strong advice for a developer starting out in mobile is to ignore Android and focus entirely on iOS. It's where the money is and it's where you should focus your entire effort.

OK, I'll do iOS. Now What?

Deciding to develop for iOS is an easy decision. Actually developing for the platform requires a bit more thought. Primarily, you're going to face three major hurdles when you're getting started: hardware, learning the platform, learning the development tools. Let's tackle each of these independently.

1. Hardware

If you're going to develop for iOS or MacOS, you're going to have to use Apple hardware. That means the Mac and the device for which you're developing. Apple hardware can be rather expensive with a decent Macbook Pro costing at least $2300 and, with often approaching or exceeding $3000. For an indie developer, this can be a significant hurdle to getting started. If you're used to paying $800 for a Windows or Linux development machine, handing over that much money can be a tough decision to make. Nevertheless, it's one you're going to have to make if you want to get into mobile development on iOS.

Thankfully, there are a few options available that might help you save some money. The most common route new developers take is to buy used hardware either privately or on eBay. While this can be a bit risky it often gives you the best bang for your buck if you're careful and do some due diligence before handing over your cash.

Next, you could consider renting a Mac from one of your local 'rent to own' shops. This will often provide you with recent hardware for about $35-$45 a week. This isn't the best option but, depending on your project and how long it will take to finish and test, it could offer you some cost savings over buying new.

Lastly, you could rent  a 'Mac in the Cloud'. This service is offered by several providers and usually costs between $59 and $69 a month for a basic Mac configured with your development tools. You access it over the Internet using a program like RDP or VNC.

Which should you choose? Honestly, if you're not a full-time Mac user but just trialing iOS development, I'd strongly suggest you look at the last option. It gives you the chance to develop a real project and sell it without the commitment that comes with buying a $3,000 piece of hardware every few years.

2. Learning the platform

Each platform for which you develop does things its own way. iOS is no different. Apple has created a unique and often confusing set of application programming interfaces (API) that you will have to learn if you want to develop cool software for the platform. If you've developed software for other platforms, even desktop ones, this won't present too difficult of a challenge for you but it does present a learning curve nevertheless. While you could develop software without delving too deeply into the API's, you're not going to develop anything amazing and it definitely pays to learn to do things "The Apple Way".

As you might expect, all of the documentation is available for free online but, if you're a new developer, it might help to get a book to help you get started. This is the one I currently recommend. You should note that it is specific to iOS 9 and, as of this writing, Apple has announced iOS 10. This book won't cover the new features of iOS 10 but it will still give you a great grounding on iOS development that will allow you to easily pick up the changes in the new system.

Spend some time working through the example code and applications. Don't just cut and paste but really learn the platform. It'll seem tedious and useless at times but it will pay off in the quality of the applications you develop.

3. Learning the tools

Lastly, we come to what some new developers consider the most challenging part of iOS development: learning the tools. Apple provides a development environment for free to developers called XCode. XCode is technically the only tool you need to develop your applications. It provides a way to do everything from writing your code, testing it in an emulator, cryptographically signing it, and even submitting it to Apple for review.  It's a "decent" tool but requires you to learn either Swift or Objective-C.  I actually recommend something slightly different for new developers: Xojo.

Xojo is a cross-platform development environment and language that can be used to develop web, desktop, and iOS applications. It's language is simple to learn and it's syntax is similar to Java or C#. Using Xojo, you can easily develop iOS apps that are native to the platform and are indistinguishable from apps designed in Swift or Objective-C. Best of all, it doesn't require you to learn Swift or Objective-C and is easier to learn than either of them.

Using Xojo will sill require XCode so that means you will still need a Mac. It also will add to your overall costs as it will cost you $299 a year. In my opinion, it's a fee well worth paying so that you can get your apps out quickly and with few bugs.

Last but not least, you're going to need an Apple Developer account. Basically, the developer account allows you to publish your apps to the App Store and provides you with additional testing tools that help make your apps as bug-free as possible. It also gives you a code-signing certificate that you'll need in order to sign your applications. You cannot publish to the App Store if your app is not singed. That means you don't have a choice but to sign up for a developer accounts. It's $99 a year and you buy it directly from Apple.

That's it! Once you've gotten everything set up and you've take the time to learn a little about how to develop apps properly, you're ready to start designing and coding! Not everyone will make the next million-dollar app but you just might. One thing I can tell you is that the iOS platform currently offers the best opportunity for developers to make money and, even if your app doesn't make a million, you could end up making a comfortable living from it.

This article isn't intended to cover every nuance of developing for iOS and you'll no doubt learn a lot as you go through the process. Remember that there are vibrant, passionate, communities out there willing and ready to help you with almost any problem. Take advantage of them and get involved.

Now, your time has come. Get ready and go get started. Your mobile dev future awaits!


Friday, May 6, 2016

You are not a victim of Microsoft or Google. You choose your enslavement!

Over the last few years, I've gotten a steady stream of messages from people complaining about how Google and Microsoft spies on them and asking me what, if anything they can do to stop it. Many of these people have gone through extraordinary steps to prevent such spying including paying for VPN subscriptions, using Tor, and even not using services from these companies from their home computer. But each and every one of them are missing a very important and critical point that I hope to make clear to you today:


Furthermore, these companies are not as the narrative goes, 'enslaving humanity and stealing our privacy'. YOU ARE CHOOSING TO BE ENSLAVED AND TO GIVE AWAY YOUR PRIVACY. Yes, you read that right: nobody is 'stealing' anything from you; you are giving it away for a little bit of convenience. You are no more being stolen from than if you asked me to check your mail while you were out of town and I said 'sure, but it will costs you $5.00 a day'. Am I stealing your money? Of course not. It's a voluntary relationship that you are entering; one that you can also end at any time you want.

Both Microsoft and Google depend on the fact that most people, including myself, are lazy. We don't like to jump through hoops just to get things done. We like things streamlined, fast, convenient, and easy. We don't want to have to think. We want stuff to 'just work' and 'be magic'. In fact, I think these companies have gone a step further and deliberately tried to dumb us down about our technology so they have the opportunity to step in and be our saviors, in exchange for our privacy of course. Unfortunately, for most people, it's a deal they are all too willing to strike. Most of us don't value our privacy. We don't that when a government agency or a company reads our email we aren't just compromising our security and privacy, we are also compromising the other persons privacy and security. You might have the right to not care about your privacy and to give it away for a little bit of convenience, but who gives anyone the right to give away my privacy for their convenience.

So now that we've explained how we are willingly enslaving ourselves, the big question needs to be answered.


It's one thing to accept that we're complicit in our own enslavement but it's another to discuss what it's going to take to end that enslavement. Thankfully, in this case, the answer is pretty simple:  


For just about every single Google or Microsoft service or product that you use at home or in the office there is a privacy respecting alternative out there. These alternatives might not be as flashy as Windows or as easy to use as Google Docs or Office 365 or as no-setup required as Skype but they are out there and all you have to do to end your enslavement is to take the time to use them.  It's going to take a bit of time and it's going to take a bit of effort. You might even have to learn something new or deepen your knowledge of something you already know but the only thing keeping you from freedom is you.  

So what next? Start by taking baby steps. If you're using Gmail, start to look for privacy respecting alternatives. look at Proton Mail or, better still, learn how to run your own mail server and take total control of your email. If you're using Skype just to chit-chat with family, seriously look at programs like Jitsi and encourage your family to move to it too. Using Google Docs or Office 365? What's so horrible about emailing a document back and forth between you and your coworker? Sure, it's less convenient but it can be much more private. Use Windows or Mac? Download and take a serious look at Linux. Step by step you can take your privacy back from these companies. Revoke the deal you made with them and set yourself free. Stop the excuses and, like Nike says, just do it!

The bottom line is that you aren't going to free yourself in a day. You didn't get in this web of surveillance and spying overnight and you're not going to get out of it right away. But every step you take is a step that is closer to freedom. More importantly, it's taking data out of the hands of someone you shouldn't trust and putting it where it belongs: under your control.

Lastly, I know some of you reading this will think this article is harsh. It is. It's deliberately so. I'm tired of hearing people complain about how they wish they had privacy like it's some sort of forgone conclusion that it's gone and there's nothing they can do about it. Microsoft isn't going to empower you. Google isn't going to empower you. These and companies like them have a good, solid, financial reason to keep you asleep in convenience. But it's time you wake up. Because only then can you realize the truth: you can empower yourself. And that, my friend, is true empowerment that no company can ever take away.