Sunday, October 27, 2013

Programmer Life: An Introduction to Object Oriented Programming

Lately, I've been talking to a lot more people who are opting out of the traditional 'let's go to college and get a Computer Science degree' and, instead, teaching themselves how to program. For someone who learns quickly, is highly motivated, and has a strong interest in the subject, this can be an excellent route to take and can get you into a working position in the industry remarkably quickly.

So I've decided to start a biweekly column on this blog to contribute to that effort. The column will be called, as you might have already guessed, "Programmer Life" and we're going to cover all of the fundamentals you need to know in order to become a working programmer, broken down into short, easily understandable chunks.

This week, we're going to start discussing one of the most widely used methodologies in the modern software development world: object oriented programming. You've probably heard that term before and it might have confused you. Let's see if we can take away some of that confusion.

First, let's start with a basic truth: everything is either an object, a property, or a method. For the most part, that can be extended even into real life. Think about that for a second. Think about your car (an object). It has properties (color, make, model, etc) and  methods (go forward, turn left, etc). So how would we represent a car in code? Probably much like this: 

public Class Car{
    public int yearMade;
    public String make;
    public String model;
    public String color;
}

With the code above, we have everything to need to describe any car in code because all cars share a common set of attributes. So, how to we represent a Black 2014 Ford Fusion using this code? Pretty easily:

Car myCar = new Car();
myCar.yearMade = 2014;
myCar.Make = "Ford";
myCar.Model = "Fusion";
myCar.Color = "Black";

Pretty easy, huh? We could just as easily represent a 2013 Chevy Malibu or a 1978 Grand Am. Because all cars share these common properties, we don't have to rewrite the same code for every single vehicle we define. We simply define a new instance (called instantiation) of a class of object we've already defined.

So that's a quick and dirty introduction to OOP. In our next column, we'll discuss how we make our objects do something using methods.  Until then, go play around with code!



We need more AnonyMail servers to strengthen anonymity. Can you help?

One of the strengths of AnonyMail is that it completely separates the sender of an email from the received. By the time an email reaches its recipient, it's impossible for that person to tell who sent that email or from where. This is because AnonyMail routes messages through several 'hops' before they are delivered to their final destination and those hops are all run by volunteers.

But we need more volunteers!

In order to keep users of AnonyMail safe, we need as large and robust a network as possible. The more hop servers there are, the harder it is for anyone, including governments, to accurately track an email message as it's working its way through the Internet. Right now, we have a little less than 40 servers but we need more. We need you.

If you'd like to run a hop server, it's easy and doesn't require much at all. In fact, if you have a place you're hosting a website that can also send email from PHP, you've probably already got everything you need.

If you're interested in running a hop server, please send me an email at anthonyp@netscaletech.com and I'll get you what you need. It doesn't cost anything but a little time and you're helping protect privacy around the Internet.

Friday, October 25, 2013

AnonyMail2 has been released!

If you've followed this blog for a while, you probably know that I write a little program called AnonyMail. AnonyMail isn't sexy software or software that will help you be more productive or get a date but it's software that does one thing and does it well: it protects your privacy when sending email.

AnonyMail began life last year as a side project that I thought might be useful. Then we found out that the US National Security Agency was spying on the world and the project became much more important to me. It became so important, in fact, that I formally brought it into my company as a product.

Now, after three months work, I'm proud to announce the release of AnonyMail2. AnonyMail2 takes the software to places I didn't even think of in version 1.

New Features Include:
  • Multi-hop message delivery to fully hide your true location
  • The ability to route your message through the Tor network
  • Arbitrary sized message padding to defeat traffic analysis
  • Strong, encrypted, connections to the server for message delivery
As of today, the Windows version of AnonyMail2 is available for immediate direct purchase from our GumRoad sales site. Versions for Ubuntu and Mac are coming as soon as we get approved in the respective app stores.

Thursday, October 24, 2013

Oh Look! A New and Awesome Podcast!

Let's face it: there are a lot of podcasts out there. Whatever you're interested in, there's probably a group of people sitting in front of microphones talking about it, ranting about it, and creating content around it. Unfortunately, a lot of this content is kind of...how do I put this nicely...crap.  Finding podcasts isn't hard at all. Finding really good podcasts can be a bit of a challenge.  That's why I got so excited when some of my favorite tech people on the planet, Bryan Lunduke, Jono Bacon, Stuart Langridge, and Jeremy Garcia announced the flagship episode of their new podcast "Bad Voltage".

Bad Voltage is everything I want in a podcast. It's got tech talk from people who actually know what they're talking about, it's got music, it's got humor, it's just about the perfect podcast. I'm listening to the first episode right now and, I have to say, I'm pleasantly blown away by it. For the first time in a long time, I'm hearing a podcast that doesn't bore me to tears, has good production quality (this is important, listen to some of the other crap out there. You'll understand), and is has people who aren't just in it for the clicks but actually care about the topic they're talking about.

So if you get a chance, hop on over the the Bad Voltage website and listen to the first episode. I guarantee that, once you do, you'll be hooked!




Wednesday, October 23, 2013

Looking for a job as a software developer? Learn to use Git!

Over the last few years, Git has emerged to become the dominant source control platform in the software development world. Everyone uses Git, from small open source projects to large commercial endeavors dealing with hundreds of millions of lines of code. So you'd think that every software developer, especially those coming fresh out of university, would have a good, solid, complete, understanding of the technology.

You would have thought wrong.

Over the last few weeks, I've had at least 15 discussions with programmers who are  either just out of college or current in their final year. Of those 15 or so people, all of whom are going to graduate and end up in software development jobs, only 5 understood how to properly use Git and only 2-3 could tell me why they should use it over another 'source control' method such as FTP or Dropbox.

These are the developers who are going to be working in your company one day soon and they are going to destroy your source code backups because they have no earthly idea, in many cases, how to even do a basic check-in/check-out. These are the programmers that are going to lose their companies millions of dollars in lost productivity by blowing away source code and wasting other developers time as they learn, on the job, how to use a basic source control system.

Colleges: get on the ball! I understand that you can't cover 'everything' in your programs. But by not teaching your students some sort of source control, you are handicapping them and you are overburdening the companies they will end up working for with the task of having to teach them things they should already know. I'm not saying teach Git specifically, but teach something. Or, at the very least, impress upon them why they need source control.

Programmers: you will be the future of software development and on the tip of the spear of the coolest technologies of tomorrow. Your colleagues are going to hate you if you don't come to the job prepared with the skills you're going to need to be successful. I'm not talking a mild 'I don't really care for the guy' type of feeling. I mean abject and pure hate.  For the love of god, if your school isn't teaching you source control, take it upon yourself to learn it. Go to Amazon and buy a book, go online and read a tutorial, go to Code Academy and take the free course. Whatever you do, learn how not to destroy yours and others work!

This might come across as a bit of a rant. If you think it is, I invite you to revisit this blog post after your fresh new college graduate blows away your source tree that's been years in the making. You'll likely see it differently then.



Tuesday, October 22, 2013

Looking for Secure Email? Check out Runbox!

I'm always looking to increase the security of my online communication. It's why I use Jitsi for encrypted voice and video chat and why I use PGP to encrypt my email so only those I send it to can read it. But there's been one problem that I've not yet overcome and that's the one of finding an email provider that not only values my privacy as much as I do but actually does things to make sure that privacy is protected.

Like most of you, I've used several of the big, free, commercial email providers out there. The problem is, I know there's no such thing as free. We pay for these products, not in cash, but in the abdication of our privacy.  As they say, if you're not paying for a product, there's a good chance you are the product. The free providers, while dumping a lot of goodies in our laps, don't have any incentive to protect our privacy. Sure, they take basic steps to stop hackers from ravaging our email and files, but they will usually turn over pretty easily in the face of a government request. That turnover might be handing over the contents of a single users email or as big of a deal as handing over their SSL keys so that any traffic between a remote PC and their servers can be decrypted.  You just don't know and, from the things Edward J. Snowden has revealed, we can safely assume that privacy, at least with US based services, simply doesn't exist.

So I went shopping. I specifically started looking for email providers outside of the US, in countries that had both a technical and  a legal framework for protecting user privacy. The country I found that fit the legal framework was Norway and the company I found was Runbox.

Runbox is amazing.  First, the company is not a large, multi-national giant. It's largely employee owned and the employees take a direct hand in the business. Second, they are committed to open source principles and actually use open source software to run their business. But that's not the best part. The best part is that these guys believe in protecting the privacy of their users.


Using technology like perfect forward secrecy, the company makes it virtually impossible for anyone to eavesdrop on your connection to their server. Because of the way PFS works, they could literally hand over their private keys to a government and users would STILL be protected.

Next, the way Runbox stores your mail is unique in that they stick it in a giant, semi-anonymous pool with thousands of other messages. Grabbing this pool, which is encrypted, is useless as it's nearly impossible to identify which message belongs to which users.

Finally, and this is a very cool thing, email messages sent between Runbox users never go over the Internet at all. They are simply transferred via their internal network and that's that.

Those are a few of the technical tools that Runbox uses to protect our privacy. But there's also a legal aspect too that is just as important.

Because of the type of service Runbox is, they are not required to log anything about their users. This means that they can choose not to log connections so that there is nothing to turn over should a court request come.

Additionally, Norway, the country that Runbox operates in, has a strong history of erring on the side of privacy. They opposed the European Unions data retention laws and routinely side with users on issues effecting their privacy. They also don't automatically assume that a corporations needs outweigh a users right to privacy and have, in the past, not handed over data on file sharers to courts requesting such data.

All in all, I think I've found the perfect solution to my email needs. And, best of all, it's affordable too. I pay only $39 a year for a decent sized email box and a great web based email client. I can pay slightly more to get a larger box, the ability to send more messages per day, web hosting, and file sharing, but, honestly, the $39 a year plan more than meets my needs.

So I'd like to encourage those of you who are concerned about your privacy or who are fed up with your privacy being raped by providers like Gmail, Yahoo, and others, to take a serious look at Runbox. It's not perfect, but it's as close as we're going to get unless we're willing to host our own email.

Find their site at www.runbox.com




Monday, October 21, 2013

It's about fragmentation, not writing code!

I've been following the discussion surrounding this blog post from Canonical founder
Mark Shuttleworth all weekend.  For those who haven't read the post, it's basically a'go team' praise session for shipping 13.10 along with a healthy dose of fireback at both Ubuntu and Canonical critics. While I'm not going to get into the details of the post here, I want to address an issue I think Mark and a few people in the Ubuntu world have completely wrong.

Now, before I go into this, let me make a statement here: I love Ubuntu. I really do. I'm heavily invested in it both personally and professionally and, when I write Linux software, it's primarily targeted at Ubuntu. I want to see it to  succeed and I want it to succeed in a big way.  That said, I think part of helping the system succeed is keeping the people leading the project in check. Sometimes, when you care as passionately about something as Shuttleworth does, it becomes very easy to see everything else in a skewed 'us against them' way.

Mark seems to believe that those who criticize Ubuntu or his company are doing so because they have some personal ax to grind or that they are criticizing their code. He even likens those who oppose them as 'the open source tea party', referring to a fringe of the American right widely thought to be obstructionist.  Nothing could be further from the truth. Everyone supports Canonicals right to write code and, for the most part, almost everyone agrees that the company produces really good code. The issue most people have with Ubuntu is the same issue people have with Android: fragmentation.

With each release of Ubuntu, the project seems to be moving in its own direction, further and further from mainstream Linux. The Mir display server, the Upstart initialization system, the Unity desktop, are all great examples of this.  Over and over, we see Canonical rejecting widely adopted technologies in favor of designing something completely new.  I'm not saying new is bad, mind you. But I think Canonical's time would be better spent improving the widely accepted technology instead of falling trap to their own version of 'not invented here syndrome'. Imagine the strides the GNOME project could make if Canonical were actively contributing to the desktops development? Or systemd. Or X Window. Instead, Canonical chose to cut its own path and start from scratch.

That attitude might work in a 'let's get grandma on Ubuntu' mindset but it certainly falls down in a 'let's get grandma on Linux' one. There seems to be coming a time, and it may be soon, where there will be 'The Ubuntu Way' and 'The Linux Way' and those two might be widely divergent.  And, yes, I know all of the technologies are open source and anyone could use them. But the fact that almost nobody but Ubuntu has chosen to shows that the industry has spoken and congregated around other technologies for whatever reason. Perhaps Canonical should look around their growing island and see that it's largely populated by themselves and almost nobody else. Perhaps that should tell them something.

In the end, it's not just about code. It's about the unity of the open source world. In the face of intense competition from well funded and profitable companies like Microsoft and Apple, the last thing the community needs is fragmentation. We should be making it as easy as possible for new developers to write applications that work just about any Linux platform, not just the most popular one.

So, Mark, write code! Write good code! Nobody is going to try to take that right away from you. We're just all a little concerned that it's becoming 'Ubuntu first and we'll get to the rest of the community if we can' type of deal. You may very well be shooting yourself in the foot.


Thursday, October 17, 2013

Ubuntu 13.10 launches today. Is it the best Ubuntu Release Yet?

Every six months, Canonical releases a new version of the Ubuntu Linux operating system to hoards of waiting fans. Today, October 17th, is that day for Ubuntu 13.10
and the media and user hype around the release has risen to a near fever pitch. But with so much competition and so many things happening in the Linux world these day, does Ubuntu 13.10 warrant all of the excitement it's getting?

As most of you know, I'm not Ubuntu's biggest fan. While I use an Ubuntu derivative (Xubuntu) as my primary operating system at both work and home, I feel there's some things with Ubuntu proper that rub me the wrong way. For example, I simply can't stand Unity and I don't like the way the company has installed a shopping lens that is, essentially, spyware. But, all that aside, I was pleasantly surprised when I installed 13.10 day before yesterday to check out for myself what all the slovering from the fanboys and girls was about.

It was amazing.

13.10 is one of those rare operating systems releases that get it right. It's obvious that Canonical has put enormous amounts of work into making this release the crowning jewel of everything they've been working on for the last six months. It's fast, responsive, stable, and usable for just about anyone. With 13.10, Canonical has finally delivered what Linux has promised for years: making a distro that grandma can use without many problem.

Considering that 13.10 is the last release before the next LTS, a lot was riding on the company to get things right. If they screwed up this release, the LTS six months from now would likely have been a complete disaster. Had they done something silly, like include the Mir display server when it wasn't quite ready for prime time, both this release and the 14.04 LTS would have been garbage. Thankfully, they over promised with 13.10 but then backed that up by over delivering too.

If you're a fan of the Unity desktop, there's a lot to love in this release. Unity runs faster now than it ever has before with the lowest resource use I've ever seen. Sure, it's going to take more memory than your old GNOME or today's XFCE, but, then again, it's supposed to. The entire reason you're probably using Unity instead of one of the other desktops is because you want the glitz and bang that a nice, compositing, desktop offers, and Ubuntu 13.10 doesn't disappoint.

Another exciting thing, though easy to overlook, is the addition of Smart Scopes. Smart Scopes make finding things from the Dash a lot  easier and more intuitive. It also means that you're going to get a lot less garbage returned when you search and your searchers will, as a result, return a lot faster. Things are also categorized a lot more sensibly in this release and it looks like someone paid a lot of attention to both functionality and usefulness.

The new Mir display server isn't included in this release which was sort of disappointing and logical to me at the same time. I don't think Mir is ready for everyday desktop use yet but I really want to play around it without having to install it myself and risk breaking things. But Canonical made the right decision to hold off on the new server as there are some major performance issues that really need to be addressed before it's let loose on the world. One day very soon, possibly by the next release, Mir is going to be amazing. It's amazing now. It's just not quite ready and Canonical obviously knows that.

Lastly, the newest 3.11 kernel, just released in September, ships with this release and it brings some solid performance improvements to power consumption and memory use as well as a whole bunch of other things. Not much to review here but it's definitely worth noting.

Overall, there's very little not to like about 13.10. The only real complaint I could come up with was that the shopping lens is still on by default and, as Matt Hartley from The Linux Action Show says, default rules the world. It's a major privacy issue that Canonical has shown itself fairly unwilling to address in any meaningful way. Additionally, the results brought up through the lens are, in many cases, completely irrelevant.  The first thing most users will do when they install the new OS is to disable the lens or completely remove it (which would be my option).

Should you upgrade to 13.10? If you're sitting happy on 12.04 and don't have a compelling need for the new stuff 13.04 offers, no, you shouldn't. Wait for the LTS to come early next year and grab that. But if you're someone who wants new hotness now, 13.10 is an absolute no-brainer. Canonical has hit one out of the park with 13.10. I hope this is the start of something amazing.

Ubuntu 13.10 releases later today and can be downloaded for just about any system on the planet by going to www.ubuntu.com/desktop.


Tuesday, October 15, 2013

ADCL is now NetScale Technologies

As many of you know, I've run a small company named Advanced Data Concepts for a few years now and we've done pretty good. But, over time, I grew to like the companies name less and less to the point where I didn't feel it really fit what we did and our personality as a culture anymore. So, as of yesterday, ADCL is now NetScale Technologies!

While some people might think that changing a company name is a small thing, there's often a lot riding on such a decision. First, if you're not careful, a name change can easily spook customers who may mistakenly believe that you're changing your name because there's trouble at the company, you're going bankrupt, or some other underlying issue. Additionally, you're risking sparking a period of market confusion whereby your customers aren't sure if you've been acquired or not or if they can still trust your brand. It's a big risk but one that must be taken sometimes in order to move forward.

In addition to changing names, we're going to tighten up the business focus quite a bit. ADCL tried to be everything to everyone. We administered servers, developed software, did tech support and network consulting, and a host of other functions that, while revenue generating, wasn't really our forte. From here on, we're going to focus on what we do well: software development. That's all, nothing else. We're going to focus on desktop software development for Linux and Mac, mobile development for Android, iOS, and Blackberry (also considering Firefox OS), and web application development. That's it. Total focus.

I believe this new focus will allow us to perform better as a company and pursue some things in 2014 that we've been simmering for a few years but could never quite execute. All in all, these changes, while small, will be a very good thing.

You can visit our new site at www.netscaletech.com (it's still under VERY heavy development and looks like crap) and you can send me an email with feedback, questions, etc at anthonyp@netscaletech.com.