Archive for the ‘ Thoughts ’ Category

Demajoring the Major Version Number

PCWorld recently ran an article stating that Firefox's new release cycle will fail. The rational stems from the idea that version numbers actually need to mean something. Unfortunately the business world strongly feels this is the case. Typically, IT organizations only allow minor updates to be pushed out to the users. With major version changes needing approval.

There is an upcoming shift in the way software is versioned. Chrome was one of the first major pieces of software to switch to the new model. With the shift to agile development, it was inevitable for software updates become more frequent.  Once updates become a norm instead of the exception does a major number version number still make sense?

Businesses will need to adapt to the changing world. Technology is always changing and for a magazine focusing on technology to make the suggestion that it shouldn't is a bit ridiculous. Someone needs to tell them not to be a Dodo Bird and to evolve.

Chrome OS – About a Month Later

I have had my Chrome OS Laptop (CR-48) for a little over a month now. Things were going well till one day when I needed to SSH into my home desktop and change something for a presentation I was about to give. That is when I realized that I am giving up a lot of power when all I carry around is my CR-48.

My presentation was saved because I was able to use my Nexus One to SSH in. It got me thinking, why should my cell phone be able to run apps locally when my laptop could not?

The cloud promises ubiquitous data access. The CR-48 does a great job of putting me into that cloud and accessing all the data that I please. The problem is, so does my desktop. I only lost power by using an operating system that could not run local apps.

I have decided to put Ubuntu onto my CR-48. I followed this guide on how to get ubuntu installed and this guide on how to get the multi-touch track pad working in Ubuntu. The tutorials are not for the faint of heart, but they are mostly complete with little to no modification of the steps required.

Ubuntu on the CR-48 runs great! I installed Chrome as my default browser (my broswer of choice anyway) and chrome feels less sluggish compare to when it was in Chrome OS. I also get the power of a complete desktop, plus with the Chrome browser I get fast access to the cloud as I did before.

I am not sure what Google should do going forward. The most powerful concept of Chrome OS is that all a computer is, is a terminal into the cloud. A user doesn’t care how much hard drive space they have or how many Ghz their CPU has. As a power user it is hard to image a world where the computer is commoditized. That is exactly what Chrome OS is trying to do. I am not sure if the average user is ready for this commoditization.

For example, my fiancee was using my CR-48 to upload some pictures to Facebook from our digital camera. She couldn’t understand why my laptop didn’t have any photo viewing/editing software. She did not want to upload it to the ‘cloud’ to do what she did in 5 seconds on her own laptop.

Maybe in the future Google will find a way to make these net apps run native on a computer. As it stands now, the cloud is not mature enough to satisfy an average user of a computer. Let alone a power user such as myself.

Google picked me

I got home yesterday to see a good size box waiting for me. I figured it was a few last minute gifts I had ordered from Amazon. To my surprise, it was a Chrome OS CR-48. I had applied a few weeks back and never heard anything form Google, so it just arriving at my door was a pleasant surprise. I am sure over the coming months I will be posting more on Chrome OS but here are some of my initial thoughts.

I have been using the CR-48 for about a day now and I am finding that in general I really like it. Having an always connected long battery life laptop seems to fit right into my life. Chrome OS provides a great experience on sub-notebooks that other operating systems such as Windows tend to miss. Sub-notebooks tend to be fairly underpowered when compared to full laptops. This means that even power users are in reality unable to do much on their sub-notebooks besides surf the web. Since Chrome OS specializes in this over Windows, it makes Chrome OS the perfect operating system for sub-notebooks.

At this point Chrome OS is very rough around the edges. Flash is the biggest draw back on the CR-48. When you have a web site that is heavy in Flash, it causes the whole computer to run sluggish. I suppose this is to be expected, flash has never worked well under Linux. I am sure Google will push Adobe to fix this before official release. Plus it will mean that Linux will finally get a decent version of Flash.

The coolest thing about the CR-48 is the concept. Chrome OS commoditizes the PC. When a user picks up a Chrome OS PC they don't think what is under the hood. The user just knows that they will be able to do whatever task they wanted to do. What is even cooler is that the laptop doesn't even need to be owned by that user. The user's preferences and  data will just be there as soon as they login.

I am glad that Google is going about this revolution of the PC in an open manner. They are not trying to be the ultimate authority when it comes to what is on your PC or what you can do with it, as Apple would do. They are releasing the operating system as open source software, unlike what Microsoft would do. I think of all companies Google is the best suited to lead this revolution.

Averaging A Group’s Salary

I recently wanted to find the average starting salary for some recent college graduates that had also worked at Surface Systems and Instruments. As most people know it is rude to ask what someone's salary is and can cause awkward situations. So I came up with the following algorithm to get a group of people's average salary without disclosing any information to anyone else, except for the average of course.

Person 1 comes up with a random number k. k should be much larger than person 1's salary. Person 1 should compute S1 + k, where S1 is person ones salary. Person 1 then tells person 2 and only person 2, S1 + k.

Person 2 takes S1 + k and adds S2 to it. Then gives person 3 S1 + k + S2.

Person 3 takes S1 + K + S2 and adds S3. Then gives it to person the next person.

On this goes till n people, where n is everyone we want the average salary of,  has added their salary to the running sum. The last person gives S1 + k + S2 + ... + Sn to person 1.

Person 1 subtracts k from S1 + k + S2 + ... + Sn and is left with S1 + S2 + ... + Sn. To compute the average, Person 1 simply takes (S1 + S2 + ... + Sn)/n and can then share it with everyone.

In order to make this secure, n must be grader than 2 and no person can give their sum to anyone else besides the next person in the line. Unfortunately, this does suffer from an attack. If person a and person a+2 want to know person a+1's salary, by subtracting the sum person a gave person a+1  from sum person a+1 gave person a+2.

So this is a fun method. My goal was to make it simple and practical to use. If you can find any other attacks please let me know.

Google Wave – Waves Goodbye

Sadly it seems Google Wave days are limited. Google is pulling the plug on their Wave service sometime after the end of this year. I was surprised to hear that Wave was not doing too well, I have used it nearly every day since I got private beta access to the service. There has never been a tool created on the web that could allow true real time collaboration and also auto documents the collaboration. Video conferencing can not hold a stick to Wave, video does not provide any useful record of the conversation or a way to pick it back up immediately from where you left off.

There are probably several reasons why Wave failed, however I believe the biggest is that Wave never hit its tipping point. The saddest moment with Wave is right after you first launch it, when you realize none of your friends are their. Wave is nearly completely useless without others to use it with. I got lucky because I work closely with several people across the United States, we saw Wave as the perfect tool to help us work together. I can imagine a lot of users are not so lucky and just couldn't find a use for Wave in their personal life. To combat this, Google should have integrated Wave directly into GMail. A user should have not been able to tell the difference between a Wave and an Email, except that in a Wave the other user could see you typing your message.

Wave really could replace about 80% of my emails, mainly the ones that are for debugging or brain storming. Their will always be emails that a Wave could not replace, like receipt from Amazon purchases.  Wave would revolutionize digital conversations within businesses. In order for that to happen however, Google would need to make a push for other services to be able to host their own Waves, like the current state of Email. Where I can send an email to anyone, even people outside of Google. Wave should have been explained as Email v2, and Google should have pushed it that way.

I'll be sad to see Wave disappear, hopefully Google has a good plan to bring the benefits of Wave back.

Microsoft’s 2019 – Where are the developers?

A little known fact is that Microsoft invests heavily into developing technologies for the future. Every now and then these researchers look to the future and into how to turn what is being developed as pure research into reality. Nearly a year ago Microsoft released this video of how productivity will be in year 2019 (ten years after the video was released). I just recently saw the video for the first time, if you have not seen it you should check it out here:

After I watched the video I was left with a few thoughts, which I'm sure was the true purpose of the video. The over arching theme in the video was that productivity will shift from application based to task based. By this I mean instead of thinking I need to open up Word to work on some research paper, I will instead have a research task that has a word document associated with it along with all of my research references and my collected data. At first glance it isn't that big of a change, users already associate related files/material together by creating folders or some naming scheme. You need to look a bit deeper, instead of the user associating files together with some type of organization, the computer will automatically discover context and associate the correct material together. It is a very cool idea and one that I am sure will come true some day. The question I think is how do developers get involved?

Since the world is not slowing at producing computer scientist, they will need jobs in year 2019 just like they need them now. So if we assume that a lot of these things come true, especially the task based productivity, what do these computer scientist do? Well clearly, a lot of the computer scientist will help develop the software that is capable of detecting the correct context and making sure this stuff stays secure. These are the developers that work for companies like Microsoft and other top software companies. What about the rest of the developers? Like the ones that do open source, developers for hire, or work for a small software company. What will they provide to an end user?

Cloud services are featured all over the place in this video. Data is everywhere you are. How does an open source developer be part of this type of world? I think it will be a lot like it is today. Protocols will be open enough to allow anyone to interface with the cloud. In order to make this possible, these protocols we will need to move from today's free services that are paid for by ads to paid for services. This will happen due to privacy concerns and cloud services will have trouble placing ads so the user will be interested in them. Interfaces to the cloud will be what open source developers are creating. Microsoft and other propitiatory software will still exist along side open source software, like it is today.

Well these other developers could not write custom applications anymore. This is because applications no longer exists. So they must provide a task environment. Now the question becomes, what does it mean to provide a task environment? This is a difficult question because we have never seen one yet. I would expect a task will resemble a rule set, where developers tell the host system in which context input should be handled by the developer's task. Then host system will provide the windowing environment and placement of the data in the user interface.

What are your thoughts?

Code Reviews, the Lost Art

Nearly every software development shop worth its salt has some form of what is known as a code review and nearly every developer dislikes them. Most matured developers tend to like the idea of code reviews but given the choice, on there next commit they would likely opt to not send their code for code review. The reason why is simple, code reviews can delay the forward progress of the software and they take time. When you have other developers needing access to the library you just wrote it is hard to say we need to take a few hours to a week of our time to look over my code. I think we should be able to make code reviews better and into something everyone wants to do.

After a code review I often finding myself wondering was what was found worth my time and the reviewers time? Most of the code reviews that I have been apart of have had minor suggestions or more commonly code standards compliance problems. When you rummage through several hundred or a few thousand lines of code during a code review and all that is found is that you have a few extra blank lines or should change the name of a variable, it does seem like a bit of a wast.

I'm not saying that we should not care about those extra lines or any code standard for that matter. I'm a big fan of code standards, I think they help in the readability of code. I'm saying that there is a cost to code reviews, we have to weigh those costs against the rewards. When a reviewer only finds a few compliance issues, things that could be fixed by anyone that is reading through the code, it was not worth the time the reviewer spent reviewing.

So how do we make code reviews worth everyone's time? Simple, we change the intent of a code review back to what the actual intent was. Code reviews are put into place to find bugs. Bugs that would show up to an end user or other developers that are trying to use the code.

You may say, “well Cory that is what every code reviewer is doing, they are looking for bugs.” However that is not true, sure they are looking for obvious bugs like unassigned variables being referenced, but they are not looking for deep bugs. One of the most common bugs comes from input validation, and yet it is a bug that is often over looked in code reviews. This is because it is often difficult to tell exactly where input to a function is coming from and how much it should be trusted. Detecting multi-level bugs requires a reviewer to see how the multiple levels interact and the path of the code in correct and error states. This kind of review takes a lot of time and drastically increases the complexity of a code review. The sharp increase is due to the fact that we are moving a code review from a mostly passive practice to a very active process.

Obviously code reviews could not detect all bugs and there will be times when a code review will not find any bugs. From this active process of a code review you get a new found level of confidence. Bug counts will be decrease and actual development should increase. This confidence is how a code review pay for themselves.

Examining Security Of Open Source and Closed Source

I recently just completed a research paper, with two of my colleagues: Clint Caywood and Matt Strayhall, on the security of Open Source Software. The paper went very in depth and I feel helped fill a void of the lack of credible information in this hotly debated topic. Here is the abstract:

In this paper, we examine the security of open source software versus that of closed source software. Facets examined include a brief history of the growing need for security in software, a comparison of the different philosophies driving the development of security in open and closed source software, arguments for obscurity in closed source versus the “many eyeballs” theory in open source, and the pros and cons involved with both development processes. We also look at the two approaches in practice, focusing on competing software like Linux and Windows, OpenOffice.org and Microsoft Office, and Apache and Windows IIS Server. Finally, we examine the impacts on society from software security, as well as who is responsible for maintaining secure software.

You can find more, including download links, if you visit my Research section of this website.

Risks of Modern Life

According to Confused using social websites such as Twitter or Facebook can increase your risk of being robbed. It is even being said that using Facebook or Twitter may soon increase your home owners insurance. At first glance this seems pretty scary and is something that most people likely never considered.

Robbers want to rob a house when they will have the greatest chance of not getting caught. That means they do not want anyone to be home. These articles point out that when you post your ware abouts online, you are informing robbers. They could use the information that you are not home to go to your house and rob it. The first assumption is that your address is freely available. After doing a quick check of my computer illiterate friends on Facebook, I didn't find any with that information available. However, the robber could use your name and a phone book to look you up.

The other problem is robbers already have tons of ways to find people that are not home. Simply picking up a phone book and calling numbers in order and going to the houses that do not pick up. In fact the robber could get lucky and they home owner would have put a message on their voice mail saying they will be out of town. Robbers also know that nearly everyone works during the day. So they can simply go up to a house during the day and knock to see if someone answers the door.

If we look at someone who can guarantee is not home during a certain time, such as a news anchor who is live on air at a certain time each day. We do not see an increase in the likelihood of robber for news anchors versus the average person.

I'm not saying its perfectly fine to post your ware abouts online. I just want to point out that it is very doubtful it increases your likelihood of being robbed. I hope the smart people at the insurance companies actually look at some data and not just jump on the chance to charge more money.

Future of AI

AI has always intrigued me. The idea of recreating human or at least intelligent behavior with software is an amazing idea. Unfortunately modern AI is nothing like the dream of creating human behavior. Sure the current solutions can solve some pretty cool problems, but its not the types of problems that people think of when they dream of AI. At h+ Magazine an article was posted discussing what the experts of the AI field predict to happen over the next century. Most seem to think we are a long way off from even being able to pass a 3rd grade exam and possibly 100 years off from making smarter than human AI.

The thing about most AI style problems is that we can solve them in a much easier ways without AI. Passing a 3rd grade exam could be done with advances in natural language processing and some clever Internet searching. It turns out to be very difficult to find ways to test AI. Even the famous Turing Test may not be as satisfactory as one might think. Its hard for a human to tell even if they are talking to another human even if they are, in fact, talking to another human.

The reason why it is so hard to identify another human during the Turing Test is because we don't know what we expect from another human. It comes down to the fact that we have no idea what makes us human. Its nearly impossible to describe a humans intelligence and identify the intelligent parts. So it would be very difficult to quantify how an AI system is better than a human, let alone equal.

I think before we are able to make any true AI system we first need to figure out how the human mind works. Which is turning out to be much easier said than done. Every time we figure something out about the brain, it creates at least ten more questions about the brain. To put this problem in some sort of perspective: We had a theory of computation decades before the first computer hardware and we had predictive models of space centuries before we had the ability to test them. However we have the hardware to run our AI systems on, but no theory as to how to do it. So I think we are at least half a century away from having anything near what we dream AI to become.