Thursday, March 11, 2010

The True Behind the Software Patents

Finally someone said the true about the Software Patents. Since yesterday all the blogosphere is talking about the latest Jonathan Schwartz (former Sun CEO) post "Good Artists Copy, Great Artists Steal".

For years I've seen the big companies (Microsoft, Apple, Nokia, Adobe, ....) defending the need of software patents. The main reason, the excuse, was always to protect the intellectual property, the investments these companies where doing in research and development. And that's the point that was never clear to me.

Let's see. If you create a chip, or an engine, or a car, there's always a big amount of work, design, engineering, models, tests, .... The same could be said about a software package. Any Operating System (Windows, OSX, Linux) or production software like the ones created by Adobe, Microsoft, .... All of those cannot be pirated or illegally copied, since there was a huge amount of work to create them.

But what happens with the Software Patents? Most of them are only ideas, and the patent owner is not always the one that had the idea. Patents like Amazon's "1-Click", or some of the crazy Microsoft patents like "the sudo command", "XML", or "the click". In Amazon's case, the "1-Click" is an obvious choice if you want a nice user experience in your online shop. Regarding Microsoft patents ... well I think it's quite obvious that they where only trolling.

Now finally someone said the true. The software patents are nothing else that a way to protect your company against trolls. The software patent alone has no value, the real value appears when you can use it to do a deal with another company so you can use the others ideas for free.

Guys, do you known something? You can do the same using some of the Open Source licenses laying around. I would really prefer more investment in real technology: new protocols (someone said IPV6 support?), better languages (HTML5 before 2015?) or simply more stable, secure and mature software.

What's clear is that Jonathan Schwartz won a new fan in me. I'm waiting to see what else he couldn't say...

See you soon.

Thursday, January 28, 2010

iPad: What can we do with it?

After months of rumors the iPad is finally here. It's a great device, but is also missing some great features, that for sure will be included in iPad v2. But right now we have a first version opening a new way (or as Apple usually does, converting an existing market).


Worldwide the media is talking about this new device, saying things like "The future is here", "The best device for ....". But, what's really the iPad? What we will do with it? How is it going to change our way of working?


Let's see different examples:


iPad in the Education


That's the first situation that comes to my mind. Maybe because I've children, maybe because in Spain the government is starting to invest in netbooks for the schools.


The iPad looks like the perfect solution for the 21st century education. Some countries are investing in netbooks (like Spain) to introduce the new technologies to our kids. But looks like the iPad is a much better choice.


The main objective of the netbook is that the children can learn how to use internet, read the text books and write their works. The problem appears when the netbook is hit by a virus, someone needs to install the applications, configure the computer, ......


The iPad can do everything that the netbook needs to do, but is also easier to manage, safer, everything can be installed easily and the UI is really intuitive. 


In fact, the iPad seems to be a winner as an educational tool.



iPad in the Company


I see the iPad in the company doing mainly 2 different jobs. 


The first one is again in substitution of a netbook. If you need to travel a lot, but you need to be always in touch, a netbook is a good option, but probably an iPad with a bigger screen and a lighter weight is a better partner. If you need a tool to write email, surf the web and read the latest news the iPad is a good solution. If you add a 3G connection and a GPS is a winner. I can foresee different scenarios where a GPS can be an extra benefit. Simply looking for the closest restaurant or hotel for a meeting is an example.


The second example is when you're always at the office, but your work request continuous walks inside the company (think of a secretary or a warehouse worker) The iPad is a good way to have all your worksheets, documents and email always with you.


Another situation (I known, I said "2 different jobs") is when your work requires an specific image. Design or Media companies are just an example of companies that are alway looking for the cooler device for their receptions, for a device that says "we care about how things look". And right now, the iPad is the best way of saying it.


iPad at Home


And of course, the iPad is also a great device to have at home. The iPhone has already proven itself as a great gaming platform, just imagine with a bigger screen. 


At home, the iPad, can be ideal as a family device for "quick tasks". Checking your email, twitter or social network is just an example. Using it as a photo album or contacts manager is just another. You can also watch your movies or series or listen your favorite music. And now you can also read books.


Most of these things were already possible with the iPhone/iPod Touch, but the screen is making here all the difference. I'm the owner of an iPod Touch, and even when I use it a lot, I cannot write more than a short answer to an email, or do a quick check to a website. I cannot imagine myself working hours with this tiny screen. But I can see myself perfectly working with the iPad, in fact, I can see myself writing in this blog with the iPad in a couple of months.


Conclusion


The iPad is far away from being perfect. The fact that doesn't have a camera is, from my point of view, an error. The apparent lack of multitasking is also a problem, the fact that the screen is 4:3 is another drawback.


It's clear that the iPad is not a computer, is not a portable console, is not an MP3 player and is not an ebook reader. 


We can only wait that the next generation will solve all these negative points. But the iPad is also a bit of everything, and that's its strength.


See you soon.

Friday, January 1, 2010

Is Desktop Development Dying?

After the Oracle/Sun issue and the poor Java 7 announcement, a lot of people has been talking about the "Java is Dead" issue. I completely disagree with this statement, but I really think that something is dying: desktop development.

Last year's improvements in languages and frameworks related with desktop development can be easily reduced to CUDA and OpenCL (please tell me if I'm missing something else). The improvements in frameworks for desktop applications was null (at least in the Java world). On the other hand, let's check other technologies and see the consolidation of the "App Store" and the whole iPhone OS world, how well Android is doing (maybe slower than expected), the quality jump in the Google WebToolkit, Google Chrome OS, the consolidation of Cloud Computing, ....

All these technologies are related with mobile development, web development, ... but desktop development is not following. From my point of view, desktop development is stuck at the same place since some years ago. Let's see what will bring the next year, but so far all the buzz seems to point to the same place, again mobile development.

Not so many years ago a lot of people was looking the whole HTML/JavaScript coding as "second class development" (well maybe was not that many), but nowadays it's an essential part of any developer work. Almost all the restrictions that we had 10 years ago to do "web applications" are gone. And the rest will disappear when HTML 5 finally arrives. So if there's any of you that's still not looking into this new world, it's about time to jump into it ;)

See you soon,

Tuesday, December 22, 2009

The iPhone/iPod As an IT Tool

It's not Christmas, but I've already got my present :) Some days ago, my current employee, gave me an iPod Touch 2G. It was not a simple present, but also a tool to work with a new iPhone application that we're developing.

As many of you, I'm working in a small company. My main job is as developer, but I'm also doing some IT and technical support work, so I was curious to see how could the iPod help me with these tasks.

As I said, I have an iPod, but everything explained here is also applicable to the iPhone. In fact the iPhone is even more useful since you don't need to look for a WIFI connection ;)

Let's start:

A Communication Tool

Here we will see how can we use the iPhone as a communication tool:

  • Mail: Configure your e-mail accounts (check here for the documentation to setup your email accounts)
  • Skype: Even if you have an iPod, you can use Skype to stay in contact with your friends and colleagues. If you also want to talk, you'll need to buy a headphone+microphone kit.
  • Social Networks: Almost all the social networks have an iPhone widget. In my case I installed Facebook, LinkedIn and Twitter (Twitterrific). But you can also find widgets for Xing, MySpaces, ...
An Administrator Tool

Let's see what do we need to have control over our computers and network:
  • Network Ping Lite: It's a simple application that gives you the power of ping, traceroute and telnet commands
  • Mocha VNC: With this tool we can control any computer with a VNC Server installed.
  • iSSH: Another great application. With this one I've all the power of an SSH console, but I can also do remote X connections
  • VPN: Integrated in you iPhone is a cool VPN client, so you are never outside your network.
  • iNet Pro: With this one you can ping, scan ports, scan network, ...

Other Useful Tools

That's the miscellaneous section where I list other tools that I feel are really useful
  • DropBox: Does it even need a presentation?
  • GoodReader: A really good PDF reader
  • AppBox Pro: It's a useful package with different applications.

I'm still investigating what other cool things I can do, but what's your preferred iPhone application?

Sunday, November 8, 2009

How to Properly Comment Code? (Part II)

It took longer than expected to find the time to write the second part, but finally here it's

For some reason, the last month has been full of articles about commenting code, like Is Commenting Your Code Useless?, Code Comments: The Lowest Form of Communication or Comments are a sign of bad code

You're free to visit those sites and see their arguments. I must say that I only agree with the first of them, in fact this article is almost a duplicate of his arguments.

When should I comment my code?

To properly answer this question you need to look at your code and think if your comment is improving in some way the understanding of what you're doing.

// We're done
isDone = true;

Is not really helpful, is it? Your comments must aggregate some value to your code, otherwise are worthless.
Also you must always keep in mind that your code should be clean enough that's self-descriptive. Keeping your code self-descriptive have 2 benefits. The first one is that you'll not need to add comments, the second, and most important, that will make things easier when arrives the time to maintain it  (and believe me, this time will come).

Only in the case that your code is not descriptive enough, you must add a comment. Is that bad? not at all.

My code is self-descriptive, why should I comment it?

Some pieces of code can be quite complex, mainly when you work in real projects. You only need to thing about financial, graphic or simulation software. They require tons of complex coding to achieve their objectives and it's usually quite hard to get the mentioned self-descriptive code.

Even when your code can be really clear, the purpose of this code may be not. I'm going to copy a good example from Jani

//Calculate if two circles intersect
$xd = $c2->x - $c1->x;
$yd = $c2->y - $c1->y;
$diameter = $c1->radius + $c2->radius;
$intersection = ($xd*$xd + $yd*$yd) < ($diameter * $diameter);


Simply reading this code would be a bit hard to known what's happening. The variable names could help, but the comment is giving us the final information

Monday, September 28, 2009

How to Properly Comment Code? (Part I)

If you do a search in Google for "code comment" you'll find 216,000 hits and if you do the search for "comment code" you'll find 505,000 hits. Then, why is so difficult to find properly commented code?

The first point that I want to clarify is that I'm talking about "commenting code" not "documenting code" which is slightly different.

The code documentation is used to generate the API documentation, to known which methods are available, what arguments are accepted and what's the result of the call. The documentation is destined to be used and understood by the users of your code (like users of you code library and/or classes).

On the other hand, the code comments are helpful to understand the internals of your methods. Usually these comments are only read by your colleagues.

Now that the difference is clear we can continue.

As developers we usually ignore or forget the "code comments", but we always try to write some information (even minimum) when is related with the "code documentation", we even have tools to autogenerate the documentation or whine if it's not correct.

Why do we keep forgetting and ignoring the "code comments"? From my point of view there are 2 main reasons:

"It's not needed"

That's what we think when we're writing new code. At the moment the code is always so clear and beautiful that there's no need to document it. Why should we spend time? Who can be so dummy that needs extra info about our code?

Well the dummy guy that will need this comment is usually ourselves. When we come back to this block of code in the future, things will not look so clear and obvious.

"Laziness"

That's the other major reason. The typical "I'm really busy right now, I'll do it later". You known what? If you leave it for later, is almost sure that never will happen.

The lack of proper comments in our code is always going to come back in the future and bite us.

The next day we'll see some tips about how to properly comment our code.

See you.

Friday, September 18, 2009

StackOverflow and the Lazy Developers

Hi again,

During the last days I've been looking deeply into StackOverflow and I must confess that's a great source of information and knowledge. But I've also found something that worries me a bit, lazy developers.

Most of the questions in StackOverflow are really valid. Complex questions about special cases, people looking for the help of a more experience developer or even questions that can be due to a lack of knowledge in an specific subject or a part of a language or API. But I've also found a big number of questions that can only be caused by pure laziness.

Why am I saying that? Because simply putting the question keywords in google you can find the answer. I've even seen cases where the first result in Google points to the valid answer (sometimes even inside StackOverflow).

Why does it worry me? Because I've always believed that a software developer must be capable of reading documentation, creating test cases and find solutions by himself (doing trial and error if needed). If we just limit ourselves to ask the most simple questions, means that we don't care enough about what we're doing. If we just ask about stuff that can be easily in our language/API/SDK documentation, I don't want to think what we'll do with more complex problems.

This behaviors will produce tons and tons of copy&pasted code in our programs and will create a generation of developers unable to think by themselves, solve the most easy problems or understand the real consequences of the pieces of code they write.

See you soon.