2008-09-22

The mobile device

In general I prefer working on a notebook or a fixed PC because of the power as well as monitor and keyboard size. What I do not like is having multiple devices that have to be synced. As I am often working at customers I got used to working with a notebook which is plugged into a docking station in the office. That is IMHO the best allround solution for the standard IT worker.

While on the road things are a little different, the most important features required from a mobile device are in my opinion:
  • Quickly available (no startup times):
    I have to change public transport lines two times and the maximum time I stay is about 15 minutes. So a notebook (even if you put it in standby mode) has relative long start-up time as long as you have to pull it out, open it, get it up from sleep mode and until everything is in cache already you have to finish.

  • Specialized on the two major actions on the road - phone calls and taking notes:
    Basically the actions I can do in the smaller time frames on the road is thinking, talking and writing. So I can talk with the neighbors in the train, make a phone call, think and write down notes (drawing mindmaps and other graphics included). The mobile device I use should be optimized for that.

  • Reliability:
    I hate it when my technical aids break and refuse to work. Usually it takes many hours to reinstall and reconfigure. Many hours lost being very unproductive. So the mobile device of choice should be always available.

  • Small-Size:
    I usually already have to carry my notebook, keys, wallet and so my back is packed and my wallets are full. So I want a mobile device that does not occupy too much space especially in summer when I don't wear a jacket (which has a lot of larger and smaller pockets).
I think, my requirements are well fitting also to many other "standard" worker. So what mobile device is the best choice?

Before thinking of those big mobile phones, iPhone and all those things stop for a minute and think: Does a small and handy mobile phone + pen and paper do the job for me?

Related posts: The hardware, Your holy machine, The Dell Latitude 2110 and Ubuntu 10.04.1, Use cases for netbooks.

2008-09-20

Data file format

Initially the XML format was a hype. It was praised for it's flexibility, human readability (clear text) and praised to be the ultimate solution for every export and import problem. Although it is true that this format can be used for many different things I never liked it.

The format is flexible, that is true, but other advantages are myths:
  • Human readability:
    Yes, it is a text format. But from the practical view it can be very difficult to get an overview in a bigger file. This because without an appropriate tool matching opening and closing tags are not obviously if the text is not really well formatted.

  • Data Exchange (import, export and application interoperability):
    That the XML format is very flexible is a disadvantage here but as any common format has to be flexible we cannot see this as a disadvantage here. The problem is different: No matter which format you are using you always need additional definitions on the tags, columns, sections or whatever - which elements are required, which are optional and what exactly are the allowed values. For application interoperability you always need a detailed specification on how the format is used and which elements. So the file format itself can never be a general solution.

  • Simple and efficient:
    Although the general rules are simple there are a lot of additional optionals like specifying DTD, parameters of tags or XML headers. But when I once tried to write a parser for XML you know that there cannot be an algorithm with real good performance on reading XML. Parsing other formats like CSV, INI and so on will always be faster. You need to use existing libraries that do that parse the XML for you if you have to achieve your goal quickly. Further XML cannot be efficient just from the character overhead. XML is simply big.
What developers already noticed has not yet been really broadcasted but there already have been created alternatives like YAML and JSON. Both formats are very easy to learn, very easy human readable, easy to create and easy to parse. And further they produce smaller files and hence produce less traffic. So I think those formats should be more enphasized in the future. However a lot of people are still betting on XML...

An argument for XML could be the possibility to specify element types and so on. Well, in any case there must be a business logic checking the input (in whatever format) for it's validity. I do not think that all type validation can be done through XML definitions. As there might be code logic involved also it is better to have only one place where checks are done.

Related post: Document file format, Ignorance of the different.

2008-09-18

The programming language

The list of available programming languages is very long - many are listed at Wikipedia. A comparison can also be found at Wikipedia.

I would say the most important languages are:
  • C(++)
  • Java
  • Python
  • C# (VB.NET, ...)
  • PHP
  • Javascript
If your favorite language is not listed here then be told that it does not mean that it is a bad language - not always the best things are those that are well known and popular.

According to my last post "The operating system" it is a logical conclusion to choose a programming language which can produce programs that run on several systems and are not limited to Microsoft Windows for example.

So from the languages listed above C# and the complete .NET framework is the one that is less portable to other operating systems. Although there is the Mono port from .NET to Linux, it is in the hand of Microsoft to give them the needed documentation and let them live.

But a programming language cannot be justified only by the compiler. I remember DOS times and the Borland Turbo Pascal or Borland Turbo C - we used them at school and it was not only a compiler - it was Integrated Development Environment. It supported the developer with tools and help. Nowadays IDEs bring features like
  • Debugger (one of the most important features of an IDE).
  • List available classes, properties and methods and autocompletion (also very important).
  • Quick-Help on the used classes and methods.
  • Code folding (collapse and expand blocks and methods to have better overview in the code).
  • Code highlighting (highlight keywords, search terms, matching brackets and so on).
  • Automatic proper formatting of the code.
  • Refactoring (Renaming classes and methods for example).
  • Assistant for creating specific code parts.
  • Macros and hotkeys.
  • GUI Designer (design window dialogs).
  • ...
Most of those features are included in every modern IDE.

From what I read in forums there are still many purists who write their code in text editors. vim might be an exception here because there can be added a lot of stuff and features to it, but mostly using a text editor you can't develop with the same productivity and performance as if you were using an IDE. So IDE is an important thing.

The .NET has a huge IDE and in general I liked also the previous Visual Basic IDE which (if looking at version 5 and not 6) was also very stable and reliable. The .NET IDE however I do consider as bloatware and unstable. That is was just was my experience with the Visual Studio 2005. And for the Visual Studio 2008 I do not have enough harddisk space left. Although there are alternatives to Visual Studio I am sure that the Visual Studio is a more complete suite. I tested only SharpDevelop which lacks on debugging. Installation size of Sharpdevelop is less than 40 MB - I didn't believe that is possible to develop .NET applications with GUI (yes, a GUI designer is included) only with such a little piece of software where Microsoft needs more than 1.5 GB - although I must honestly say that there is no .NET documentation included with SharpDevelop.

In my opinion the portability and the availability of a good IDE are the two most important aspects. As I am using Windows and Linux it should be either an IDE that nearly looks the same on both platforms. Another important thing is the time that you need for getting up and running. The optimum would be if you either can learn the language fast.

I tested several IDEs (or at least tried to install them and get them running) - I tried IDEs for Python, C++ and Pascal as well as for Java.

The largest number of IDEs are available for Java - here I tested Eclipse and NetBeans. Eclipse focuses on SWT from the GUI design (additional plugin needed) and NetBeans on Swing. Eclipse and NetBeans are already very powerful and they are free.

For me the time needed to get up and running and to start into getting productive was shorter on NetBeans and further I prefer the Swing concept because the technology offers more freedom in developing more sohisticated visual controls and more independent from underlying OS. The disadvantage is that the core dialogs like a file chooser do not look as the user might be used to. But as I work on Windows and Linux I already have to get around with two different dialog variants and so at least in my applications the dialogs (the core dialogs and all the other window controls) look the same no matter on which OS it is used.

Although I also like Python very much I could not find a good IDE that is available for free. For C++ I found Code::Blocks which is available on several platforms. For Windows they have a combined setup download including the MingW C++ Compiler. C++ is for me the only real alternative when trying to write code for several platforms. However I know from my earlier experiences with C that writing C-Code you have to pay more attention and it is very likely that you write more buggy code with C than with most other languages (not C-like). But the biggest advantages of C are the faster code and the more complete access to and management of the system resources. Here Java has a disadvantage as it has no direct access to drivers of particular hardware (e.g. a scanner) that might be connected to the machine - you need wrapper libraries to get around this problem. Further C is fitting better if you write commercial software because Java programs can be decompiled easily (and also .NET applications).

Another option is PHP which is platform independent. Although there is a possibility of writing standalone applications PHP is basically for web applications only.

From the portability and usability point of view in my opinion Java and C++ are the two favorite languages to use in the long run as you can't be wrong betting on those. Regarding web development there a lot more options (PHP, SWF, AIR, FLEX and so on) and I do not have the confidence to give a good forecast on that.

Related posts: The operating system., Homogeneous programming style, Popular Java myths, Install NetBeans on Ubuntu 10.04, The future of Java, Choosing a programming language, Java vs .net/C#.

2008-09-14

The operating system

When I learned my first lessons on how to handle a Computer I took the DOS operating system for granted (it was a very early version) and I did not have an idea that there are also others. When I got my first own Computer I have chosen one that already had a very powerful version of Basic included. When I got to school most others had a Commodore 64. Although my Computer was better from the architecture it was less popular and after a while I also switched to a C64 otherwise I would not have been able to talk with my companions and I could not play games with them - because for the Computer I had there were not many games available.

I am telling this because it is a good example of the fact that not always the best technology is the one that gets popular. This is a sad truth.

When we got the first XT PC at home it came (still/again) with DOS (although some newer version) and later with a 286 the Windows times began. At this time I did not knew that there were already other operating systems existing - I simply didn't know them, nobody of my companions were ever talking about something else.

At the IT specialized school I attended we learned something also about Xenix (a Unix type OS) and BS2000, but the main focus was on the PC - maybe because of the simple fact that we all had a PC at home by this time. So it was simply the most popular. And it was the most popular maybe because it was available to everybody.

For years DOS and Windows was normal for me and the only relevant operating systems. A few years ago I noticed more often existence of other operating systems. By this time I was already used to many flaws and bad concepts of the Windows OS and only after experiencing a lot of frustration and after compassionate looks from other people (using Linux) when I complained about my problems I started to get more interested in trying an alternative. By this time there were only few attempts just to do some first tests and it was awful. If you are used to do certain things in a certain way for many, many years then it is hard to get along with something that works a little different.

Since about two years I am using Linux at home (the Fedora distribution in particular) and here is why I switched away from Windows:
  • I had some bad experiences with hardware failures and on Microsoft Windows it was hard / impossible to find out what the real problem was because it was simply running slow and unstable. This is behaviour that can be seen with a lot of Windows software: Problem analysis can be very difficult and error messages can be misleading.
  • I tried to backup some data I didn't have a copy from so far and the burned CD showed empty on Windows - even on a workstation that was intact. When I gave Linux a try the CD was completely readable and I got my data. So Windows was simply not reliable any more for me for basic features such as "is there data on my disc?".
  • Windows is expensive - not talking only about the licence cost - I am talking about the complete Return of investment. For some simple additional features Microsft waits to include it in the next version instead of adding it to the next service pack for older versions.
  • When installing Windows you get a very basic set of features only. For word processing, spreadsheets, presentations you usually have to get a version of Microsoft Office also. A good alternative (at least for what you usually need at home) is Open Office. When installing Linux Open Office comes already with the OS.
  • The software installation and deinstallation architecture on Windows is fault-prone. It is seen as "normal" that a Windows machine after a lot of software installation and deinstallation gets slower and more unstable and after a few years has to be completely reinstalled.
  • A lot of useful additional software for Windows is payware.
  • It is seen also as "normal" on Windows that even a server has to be rebooted on a regular basis to ensure that the system runs properly.
  • The business conduct of Microsoft does not fit to my understanding of fairness, honesty and correctness (there are a lot of other companies not fitting as well :-( ).
Since I switched to Linux my view of the world grew larger. There are a lot of other Operating Systems and technologies around that are not used by Windows but make a lot of sense. Windows is really not alone in the field - have a look at the list of operating systems for example. From my point of view some of the most important are (still) Microsoft Windows, Linux, Mac OS X and BSD.

I have the very clear opinion that an Operating System not opening it's interoperability for being used together with other systems and technologies will not make it on the long run.

Related posts: Why I have chosen Fedora, Why I switched to Ubuntu, The hardware, Installing your PC from scratch, Why Linux?, Going Linux, The Microsoft logic.

2008-09-13

About this Blog

I think there are more blogs about IT topics than about anything else.

So why the hell should I create another one?

The reason is: The field of IT has grown so big that it is often hard to decide which hardware to buy, which software to install, which websites or web applications are better and how to invest best into IT infrastructure. There are a lot of hypes causing people investing in technologies that get completely outdated only a few years later. I do want to assist at this point offering help in your IT decisions and apart from that give a few very concrete more technical oriented help (on how to tweak your computer or some programming code example).

Because of the fast change in IT there are frequently news talking about new technologies. From my point of view they are often not so new - just older ideas in new clothes. Other technologies might be really new and one year later nobody talks about them any more.

The focus of this blog are long-term considerations about IT strategies - this means that I will not hop on every new hype. At this blog new technologies are considered more from the critical point of view. But this also means: If I do recommend something, that recommendation has undergone a longer evaluation and/or testing phase.

Although there will not be a big focus on hardware, I will post from time to time some tip - again most likely if I see long-term relevance.

Sure, I cannot know the future - and my expectations might not become real - we will see...

2008-09-12

About Me

For an abstract of my work and interests see my profile.

You can contact me writing e-mail to mwildam[at]gmx.at.

I was about 8 or 9 years old when my father brought home a computer for work and he sat a lot in front of it to get some things done. - I got interested in it and asked what he is doing. He explained me a little and he implemented some programs for me to improve my maths.

I remember a program where a figure was going up on step on a stairway for each computation I calculated correctly and it went down two when I did wrong. Maybe I got frustrated by this figure and wanted to change the program or maybe there were other reasons that my father began teaching me how to program. However, it brought me to my profession...

When I went to a more specialized school with the focus on IT and Organization I wanted to get a computer specialist. Nowadays I know very well that the IT branch of business is so large that one can impossibly cover everything.

As with the time the branch grows faster than one can learn all the related stuff, IT students as well as IT professionals already working in place do have to make decisions. I focused on software development. During my work my daily job is not only Software development but also support, analysis, project management and consulting - all those roles in and around the DMS and ECM area.