Holiday work planning

For the IT stuff the weekends and holidays are often the times of full work when infrastructure needs to be changed or updated. During these times there are less users affected. I don't say none because I know companies where there is nearly always somebody working.

I wish everyone a relaxed set of holidays and my special wishes go to those who have to work.

For those who will do major changes during these days, remember to plan in time and check the availability of required suppliers in case something unexpected happens!


IT investment required

I hear a lot of news about companies laying off employees.

They use the financial crisis as an opportunity to do something that they should have done earlier: Simplifying organization and increasing the efficiency work flows. In addition to that they follow another general "hype": The rush to achieve more with less people (who are even less trained).

So, companies want to have a few very productive apes working for a banana.

The challenge: Companies must invest in the appropriate IT infrastructure to be able doing more with less. But "investment required" is something that companies do not want to hear right now...


Apple worse than Microsoft?

The Apple iPhone is currently one of the most wanted gimmicks as far as I noticed. And I had the opportunity to test it:
  • Design: There is no doubt that Apple has a good feeling for design - even if there is nothing particular on the iPhone. Basically it's just a rectangular brick similar to other mobile devices. But anyway, it feels good in the hand. But also talking about the GUI. At least a technical versatile person like me gets familiar quickly with it (and I am not a Mac user). However, there are also some critics: In some cases - contacts for instance - while dealing with contacts (looking up information for instance) you may accidently call a person. Further I would like to have the possibility to "officially" close the last Safari browser window (when I press the single real button on the phone I return to the main menu but I never feel sure that browsing is really stopped then).

  • Keyboard: However, a basic important instrument - the touchpad keyboard - has quite small keys and as I do not feel boundaries of keys on the touchpad I had typos all the time. This is really annoying.

  • Phone: The first thing I noticed: You can't use the phone if you did not first plugged it into a PC or Mac with iTunes installed. Hell, I only have Linux at home! Luckily my parents and my company notebook still have Windows installed. The phone speech quality was very good in the few tests I did - even using the hands-free mode (speaker) showed a good quality. I really wondered when I noticed that I cannot use an existing mp3 as ringtone. Apple really wants me to buy a ringtone from their store! - Luckily there are services helping to get around this silly limitation.

  • Browsing: Web browsing is not so annoying because the screen is quite large, you can zoom with the fingers and you can view a site also in landscape mode on the screen. GMail (or Google in general - was also easy to read my blog) is very optimized for mobile devices. Yahoo already less, many other sites worse.

  • Applications: There is a large set of applications available, many very useful ones available for free. Backdraft: You need an Apple ID for getting those (without dirty hacks) which you can get only if you provide your credit card information (no, I don't have a credit card) or your bank account information. Why that if I am not going to buy anything?

  • Synchronization: Synchronization of contacts can be done under Windows basically with Outlook, Yahoo and Google contacts (there was something else I don't remember yet). Calendar can only be synched with Outlook. In general these choices are poor. No Thunderbird synchronization and in general - as iTunes does not run on Linux - no synchronization features on Linux. Although there are some people who hacked it and there should be some possibility, but I didn't try that.

  • Usability in general: Once you got a little familiar, it is an efficient phone and mobile device. They have realized some very creative and good UI elements striving your finger(s). These can be used very efficiently. However, I still think that real keys do have advantages. Real keys could be either smaller being better to use because you feel the key boundaries. As long as you use the internal calendar you can be fine, I tried to use Google Calendar (through the Safari web browser) and it was very easy to lookup the appointments of the next days but very annoying to create a new one. Would have been faster writing the appointment onto a piece of paper and add it later on a real computer. Similar experience for taking notes or surfing on websites. So it's still (as other mobile devices) no real alternative to a real computer - no chance regarding productivity.
I have to say that I am not a fan of the business strategies of Microsoft (at least from the moral point of view) but my experience with Apple is even worse than Microsoft. I even tested an iPod about a week ago with similar experiences. They try to force me using their software as Microsoft does. They only support Microsoft products where really definitely necessary to sell their hardware to a larger amount of people. They don't support Linux. I read from people trying to get an iPod working with Linux complaining about encrypted firmware for instance. I probably also never understand, why a multimedia application (iTunes) holds and manages firmware and drivers for a piece of hardware. But worst, they urge me to provide them credit card information or a bank account even before they let me install the free stuff. But once they have the information they give me a lot of options what I can buy with just one click away (don't give such a phone to your kids!). When trying the iPod with Linux I could mount the iPod but the folder structure was quite strange and copying files there did not make them show up on the iPod - only with Songbird I was able to put a piece of music there. Why the hell? If I already can mount it why isn't it enough to copy something there? It could have been so simple...

Related post: Why Linux?.


The sad thing about Linux...

...is that it does not run on every hardware.

No matter, what operating system you use - or more general - whatever piece of software you are using, there are always downsides.

For Linux there are also several downsides but the most annoying downside is that I have to take good care of the hardware I am choosing.

Last weekend I tried a Fedora 10 Live CD on two separate machines and on none of the two I got to a login screen. I could have investigated the issues but then I decided that it would be less problematic to just try to solve the particular problem the user faced with his Vista.

Although I was very annoyed with some flaws (although considered as features in Vista) and although it ended up in a lot of software uninstallation (shipped by the vendor of the notebook) replacing with other components that work better, I am sure that fixing the major hardware issues for the Linux would have been much more trickier.

Further last week I tried to get an iPod nano to work with my Linux at home. As it did not work in an instant I started searching and finally found out that there are some models coming with a particular firmware version that only works in combination with iTunes (refusing to work with GtkPod or comparable applications). I noticed that there are either USB sticks that are not certified to be compatible with Linux. Didn't try one of those but already the fact that it's not written either on the package I am quite sure that the vendor isn't either.

A lot of hardware that is not (well) supported out of the box there are often specific tools and drivers available somewhere (my NVidia graphic board at home was such a case). I can fix this in some cases although not an expert on Linux.

However I cannot assume that users not familiar with computers can fix such issues themselves. Let's assume that a user bought a computer with preinstalled Linux and now buys an iPod or a new cheap photo printer or whatever other hardware piece that promises to be connected via USB and that's it in many cases. And in other cases it comes with a CD containing a double-click setup with a colorful wizard and all done. Yes, it is not always working on Windows anyway but my experience is that the probability is much higher that your new piece of hardware runs without problems under Windows than under Linux.

When the hardware is supported then the system runs in general more stable and more fluently under Linux. But I guess vendors do not want to take the risk and therefore they ship their machines with Windows. If they would put Linux on their machines (if the hardware is supported) the risk is that users bring the computer back angry because their newly bought iPod or Photo printer is not working with it.

Related posts: The good, the bad and the ugly, The operating system, Ubuntu compatible hardware, The Dell Latitude 2110 and Ubuntu 10.04.1.


My application set on Windows

For work I am using a notebook with Windows 2003 Server (which I need for developing with several server applications and in combination with several virtual machines running on that host depending on what I do).

In the last years I tried to reduce commercial closed-source products and replace them with others (free and - where possible - open source). Here is the list of free software pieces I use most:
I use others, but these are my most used free applications and tools under Windows.

Related post: Why Linux?.


Sunlight at the end of the tunnel

In the last years I have developed more and more on myself instead of using 3rd party components. I have tried to minimize the use of 3rd party tools and components because I can't fix issues for myself in mostly closed-source components (in the realm of specific applications there is not much open source yet). I would have used more of those 3rd party components if I would have experienced good support.

Unfortunately many companies try to sell you a cardboard box with some nice stuff and they don't want to bother with you any more. This is also due to license based sales systems. Although there are some exceptions, especially very big companies with license based sales are not interested any more in serving you. Companies rely on big advertising and big marketing events instead of getting recommended by users due to good service.

Often there is a lot of color and a lot of gushing and self-adulation and I hate it. Even on trade fairs I could really find much value. For the last year I was completely avoiding any of such events.

Yesterday I have been the first time at a local event of Sun Microsystems. Before I have only been on events from Microsoft. And it was a completely different experience:
  • There were only few people there (it was not one of those mega-events known from Microsoft) and the presentations were completely free of self-adulation focusing on the content.

  • The technical strategies presented attracted me, everything seemed to be clear and well designed. I could feel the underlying experience.

  • The sales model was explained in about 10 minutes (there are companies where you need a special course to understand the licensing models). And you can either get support for some related 3rd party products directly at Sun.

  • The presenters had a detailed background and technical knowledge.

  • I could get in touch with all relevant persons and they answered all my questions. They explained me where I missed some underlying basic know how. They were available for more than an hour after the event.

  • I got the E-Mail addresses of all presenters for questions that come up later. Sales already got back to me with answers to other questions.
So I feel better and full of hope that there are still companies who are interested in providing good services. If Sun keeps what such events promise subscribing to their services is value for money.

Related post: The dawn after sunset.


Why I hate ribbons

Ribbons are those fancy new toolbars of Microsoft Office 2007. I read an article a longer time ago from Microsoft telling that they did some survey before the release of Office 2007 to ask people what features they would like to have in the next versions. And it turned out that a very lot of features the people were asking were already there in 2003. This made them think about why the users didn't find those features that are already there. And that made them redesign the user interface.

In my opinion they made the first error already there: An application that offers many features can't be mastered fully by everybody. And people often do things as they were used to for many years. The only thing you can try is to get a good structure how your features are sorted and organized in the application so that people intuitively find what they are looking for - if they would look up (and many don't - just when you ask them what features they would like to have they start inventing and thinking).

  • Ribbon bars are no guarantee for a well structured organization of program features.
    And indeed, Microsoft didn't organize many things well. For instance I do not know why the macros are under "View".

  • Ribbons take more space than normal menus and toolbars.
    This might not be very important for big screen resolutions but when I use bigger resolutions and larger monitors I want to reduce the window size to see more windows and not one window bigger.

  • Buttons are different sizes and according to Murphy's law those I need are tiny and those I don't are huge.
    Microsoft (or the appropriate software designers) decided about the size of particular icons in the bar. They adapted it to the desires of the mean user. But who is the mean user? This is a person that in reality does not exist. And so some button sizes can fit for some users.

  • Ribbons are a replacement for toolbars and not a replacement for menus.
    When introducing ribbons Microsoft dropped the pull-down menus. But on the ribbons only a few features are displayed and many are hidden behind a very tiny button on the lower right. If they would just have dropped the old toolbars for the ribbons then I would have understood more.

  • Buttons are not general in line.
    The buttons on the ribbons are not always ordered next to each other. Some are left and right others are above and below. This makes it more difficult for the user to get along.

  • Ribbons are not customizable.
    Older Office versions had completely customizable toolbars. With the introduction of the ribbons this feature has completely gone.
These were just the general issues with ribbons and I am not talking about things that are Microsoft specific. For instance that behind the tiny buttons on the lower left you get to the old dialogs so that the ribbons are only facade.

Just a side note: There are free Ribbon components for Java (Flamingo) available (and I guess also for .NET although a quick search on Google only showed up commercial variants). So it is not a matter of inability to create such a GUI why I don't like them.


The IDE and the libraries

I followed a few discussions lately about Flex, Silverlight and JavaFX and also about the never ending war between the programming languages. Yes, we don't have a sufficient number of programming languages yet and therefore we need new ones - like D for instance. I am sure there will be born others in the future.

But aren't we missing the point? Aren't we trying to reinvent the wheel again and again?

I have seen people pushing languages and technologies one week and and another week something else without having real knowledge or without going deeper into the technologies to get aware of their real purpose. Same type of software is written again and again using different languages and technologies but where is the main additional benefit? Where is the improvement in efficiency while developing?

I have learned over 10 programming languages, really working for a longer time (on real-world projects making money) with about 3 languages. The experience shows it clearly to me, that the programming language itself is only plays a minor role in efficiency of software development. Much more important is the IDE and the libraries. In detail:

  1. The IDE
    • Code-completion
    • Quick tips
    • Debugger (Breakpoints, watches, step-by-step-debugging)
    • GUI-Designer
    • (Online-)Help (or JavaDoc for instance)
    • Editing tools like bookmarks or tasks in code, code folding etc.
    • Refactoring tools
    • build tools (for compiling and deploying)
  2. The Libaries
    • Standard libraries the language offers.
    • Available libraries on the Internet (opensource, free, commercial - the wider the field the better).
    • Your own libraries created while doing your work. The value of those is often underestimated although those include the code you usually do reuse most. And those are what I miss most when learning a new language - the stuff I already did and want to reuse and improve on the fly.
Both - the IDE and the Libraries have to be learned. So being familiar with the syntax of the langauge is one thing. Being familiar with an IDE and with the existing (standard) libraries is a second.

Fact is that one using a language he or she is not familiar with and then either using a simple text editor can never be as productive as a developer knowing the IDE and their features (and use them efficiently) as well as the existing (standard) libraries. When the latter also have a good overview about other free and commercial libraries or tools out there he or she can either efficiently decide where to write own stuff or use 3rd party components.

When I searched for an alternative to my Visual Basic I looked at several languages and the language itself was of minor priority. I liked Python for instance from the general language features and efficiency in coding I also imagine problems due to the indentation orientation when different developers use different editors with different indentation settings. But despite the language itself I tried several IDE's for python and there was none that I was really satisfied with.

Eclipse and NetBeans are IDE's that like to solve the IDE problem in general to be the one IDE for all languages. But from what I read and heard by now they work best for Java (and C++ - which I didn't try yet) so far (which is subject to change). But new languages usually lack of integration with good IDE's - logically.

So all this in a whole made me switch to Java (apart from the very good reason for platform independent development). - I do not urge anyone to use Java but I strongly recommend to not only look at the language itself when choosing a new one for future projects.

Related posts: IT investment, Utility libraries, Popular Java myths, Install NetBeans on Ubuntu 10.04, Choosing a programming language.


Homogeneous programming style

I am currently on the smooth move from Visual Basic 5 to Java (for new projects). Although I did also some PHP and ASP my focus was on Visual Basic and VB Script for the last about 12 or 13 years. VB was a very good choice for my Windows focused development because the dialect for VBScript, Microsoft Office Macros and ASP was all the same and every COM-component developed with VB could be reused in Scripts, Office Macros as well as ASP web applications.

So whereever there was something to develop I could do it most efficiently using VB and reusing components or single methods I already developed. I also have some little experience with "language hopping" by using a little Python here and more PHP over there.

The experience tells me that every language has its own pitfalls and while hopping from one to the other you either trap in the beginners problems like missing a semicolon here or mixing up indentation there. If you can focus on one language which can be used to do everything then you should prefer that - you are simply more efficient in programming.

The two major benefits of focusing on one language:
  • Easier reusability of components and libraries you already created.
  • Better knowledge of the language and the pitfalls because you have more experience on the particular language.
And that was one reason (but far not the only) I have choosen Java. And although JavaScript is not the same as Java, it has at least same basic syntax.

Related post: The programming language.


Web vs Thick client

I think their is no doubt that we are in the middle (or is it the beginning only?) of a web application hype. When I lately faced the VMWare infrastructure web access I wondered what sense that makes to intentionally reduce performance for ... - for what? For accessibility? When I am at a client where I need access to a vmware I will take it with me - on my notebook or either (as colleagues of mine do) on a USB drive. I wonder if it was a technical guy or somebody from upper management taking this decision...

So I think there is some clarity required when it makes sense to design an application as a web application and here are the advantages:
  1. Zero installation at client side.
    I think this is a big advantage of a web application and and from what I have seen drives many people to design the next application as a web app. I can see it from my own experience at Windows related support. On approximately 1 of 10 workstations there are troubles installing an application due to some "corruption" at the system or some other application conflicting. But this also depends on the application. For highly integrated applications (having intensive contact with OS or other components) I expect problems at 1 of 5 machines at least. So one reason for a web app is to avoid installation problems. - That is understandable, but guys, remember: That is an OS problem in reality. I very rarely have problems with installations under Linux. So for the zero installation we are in reality talking about a workaround for a Windows problem. - But wait: There are also the dummy users who don't really know how to install and those who don't want to bother with installation...

  2. No updates at client side required.
    Whenever an application is installed there are also updates needed. Installation and updating is always work needed - in most cases somehow the Administrator and/or the user is involved and somehow handicaped or interrupted in his work. Yes, this is very bothering and for the vendor it requires also to maintain the appropriate infrastructure for downloading updates and (on Windows) the appropriate feature set at the client checking for the updates. The advantage of the web application here is that every user automatically is using the most current version as soon as the server has been upgraded.

  3. Platform independency.
    Also a good reason to design a web application. But there are issues with different versions and types of browsers. So dependency from OS is traded in for dependency on the browser - which anyway seems to be the better choice...

  4. Accessibility.
    New users can usually get access to the application very fast - they only need to surf to the particular site and they are there. This is a very important reason to design as a web application if it is important to get the masses and those who only use the application from time to time. Nobody wants to invest additional effort for installation of a software he or she maybe uses only once and maybe the next time only in a year from now. Although - if we look at Skype for example - if a software is worth using, many people install it also locally.
Note: Using Java or Python for instance you could also gain platform independence without the need of using web applications.

While it sounds very good anyway to use web applications there are also disadvantages coming with this architecture - well there is no advantage without disadvantage - this people tend to forget. There are also good reasons for using thick/fat clients:
  1. Performance.
    Using a thick client data transfer can concentrate on the real data. All client logic and GUI is kept on the client. So performance of thhttp://it-tactics.blogspot.com/2008/11/web-vs-thick-client.htmle net traffic is in general better and servers do only have to deal with the server business logic and storage/retrieval of the data.
    AJAX and RESTful programming is a workaround to the problem of web applications that GUI and all the program code has to be transferred when the application is used.

  2. GUI Features.
    Thick clients have more freedom (access to local data) and more possibilities of GUI design (available widgets, drag and drop for instance).

  3. Available Offline.
    Thick clients can be used offline (if the application itself is not requiring the connection). For example data can be saved locally and can be transferred when you are online again. Only thing: The application has to support such an offline and online use (or synchronization respectively).

  4. Privacy.
    You might produce or deal with data that in a whole or in parts should not be transferred to the server. This is one reason why I think that a local office software pack can never be replaced by an online office. I think that there is no company that wants to rely just on the provider to keep the company data save and private. As an alternative the company needs to provide the appropriate server environment to provide the office functionality. Another example is CRM - I think that people prefer have their contacts locally with them.

  5. Different configurations and versions.
    Using web applications all users have the same version, this has already been mentioned. What in general is an advantage, can also be a disadvantage when you want only a few users to test a new version or when different users have different requirements. Firefox is a good example here: There is a basic product and a huge amount of available plugins. There will be nobody using all the plugins and Firefox would need a startup time of one hour and then hang up. Instead every user is using those plugins that are focused on the needs of the user optimizing productivity. This can only be done when every user is free to use an adapted version of the software.

  6. Distributed computing.
    Using rich clients you split computing power between server and client. Some applications are either focused on decentralized purposes - like file sharing for instance. It also can be an advantage if the application hangs - because then in more cases only the client hangs and not the complete application at the server.
There are good reasons for both types of architectures. I can say that I use both - web clients and fat clients and both make sense according to the purpose of the application. It is important to think of how you want to implement your solution. Don't take the decision to implement your program as a web application or a thick client just because of a hype or by looking at it from a religious point of view!

Related posts: Your holy machine, About agile software development, Web application security, Pros and cons of cloud solutions.


Technical side of management

When I was thinking about some next post I somehow had the impression that a decision must be taken whether I want to write more for technical focused guys or a little more for the management focused people.

The final result is that I think it is one of my specialities that I do have the technical background and knowledge but I do want to see the final purpose. For the final purpose you need overview and this is also what management needs.

Although I am trying to improve productivity by using helpful software I do also know that sometimes pen and paper is simply the better choice. I look at the actual practical need.

So this blog will continue to address both type of readers somehow and I think especially nowadays often there is a gap (or rather a canyon) between that management and the technical or practical solutions. Both often do not well understand each other and therefore often management takes decisions that cannot really be implemented in a way that still makes sense.

I will try to fill this gap a little.


Simple IT

Last Friday when I went to buy some food I saw two guys working on an old Ford Capri (like this one, although in red). It was from 1972 and one of the guys told that he is still the first owner.

We began to talk a little and the other guy - about to repair something - told that in two hours it's will be done although some bigger change. When I mentioned that with the modern cars it is not always that easy he got red, agitated and began to badmouth (I was worrying if there will fly tools in a few seconds) about the modern cars. He told that he worked on a newer car some days ago where it took two hours only to remove the parts so that he could get to the main part he wanted to change or repair.

I know it from my own experience, that in newer cars sometimes it is either very difficult to change a headlight yourself.

Well, this is an IT blog so why the hell I am writing about cars here?

The answer is simple: I think that in IT similar changes happened. While software and either programming languages get packed with a lot of features the basic purpose often suffers.

Example: Many years ago it was sufficient to copy an executable (and maybe some configuration or data files) to a destination folder. Nowadays special tools for setup creation must be used (and either programs in their particular language must be written - the program for the program) and then it is not sure that everything works fine then. And it is possible that you need additional runtimes in addition to the setup (some setups for .NET applications for instance).

And then applications often need very huge amounts of space - memory and harddisk. I had the MS Visual Studio 2005 installed which used more than 2 GB (!!!) on my harddisk.

Or to mention the libraries and technologies in Java: Spring, Hibernate and all those "frameworks" - there might be a reason to use these in very large applications or projects, but I guess in 75 % of the projects using too much of that stuff only produces bloatware without a real benefit. I have been on a course for Alfresco API and one of the major impressions was that 75 % of the time we were struggling around with XML files and only 25 % with coding.

It often seems that IT is very far from applying the KISS principle, hence I strongly recommend reminding to it. Try to keep it simple. IT is already complicated enough even if you keep it simple!

Related posts: The good, the bad and the ugly; The Features.


IT investment

People smile at me when I tell them that I am still developing in Visual Basic 5 - Maybe you wonder also. (For the case you wonder why I did never do the change to VB 6: It was because of the IDE stability especially when using threads and other lower level Windows API - VB 5 was the better thing here which is another prove that new is not always better. ;-) )

Well, I learned more than 10 programming languages yet but I could hardly say that I can be very productive and efficient with all of them. It is one thing knowing the syntax, a second to know well the standard libraries, a third to know the libraries which are available out there from 3rd parties and a fourth of having your own libraries for the recurring jobs in your realm of work. Further it makes a big difference if you are using a language every day or only occasionally. In general it is better if you have one language that covers all your requirements (e.g. can be used for thick clients and web applications).

It takes years until a system has evolved and reaches it's maximum performance. What for me applies to the programming language used, applies for many other IT infrastructures also.

Let's say, you think of switching from Microsoft Office to Open Office. There will be some migration work and maybe a lot of annoying details (apart from macros that have to be rewritten) that will reduce productivity of the employees in the first step. And therefore you will not do it until it is really worth it.

IT changes fast but this does not mean that you have to be always the early adopter. The primary question should be the costs and the benefit in the long run.

There will be the time when the benefits of a particular change legitimate either big investments (of time and money). In my case switching to Java brings independence from the underlying operating system used for instance, easier network programming, better IDE support when developing web applications and other advantages. However it will take a while until I will reach the same productivity level and development speed as I have in VB where I can reuse libraries that I developed in the last ten years.

Not always big effort is needed for implementing new software products. Just remember that when you start investing more time into a particular product then it should be one that will be used a longer time and make sure that you use it efficiently.

Related posts: IT project costs explosion, The Open Source movement, Ignorance of the different.


The good, the bad and the ugly

I am developing software since about 25 years - I started when I was about 10 and in these times there were either the annoying line numbers you had to write on the start of each line and then there were the gosubs and gotos. IDE's weren't existent - just a very basic editor with an interpreter included. Later developing with other languages like C or Clipper I remember school times when compiling and linking took at least 10 minutes for a bigger project. One typo and again waiting - awful!

The good: Nowadays development is wonderful in comparison to the early eightees. There are comprehensive integrated development environments (IDE) with debuggers and refactoring, code and syntax highlightening as well as graphical user interface design (GUI) and much much more. So it is wonderful and therefore I can't understand that some guys still prefer using a text editor and compiler.

The bad: In relation to the older times I mentioned above IT is developing much faster and you could stay learning over and over again never starting getting productive. Programming languages got new structures like delegates, generics and exceptions for example. Let me take the exceptions as an example: I wondered what they are good for when I first heard about them. It was something that about twenty years I could perfectly live without. But I thought that it is only my defense against something new and so I tried to use them in a first few tests. But from my gut feeling I don't like them. Today I found - by accident an article that delivers perfectly the logical reasons against using them (see about Exceptions at Joel on Software). The annoying thing here is that the beginner get told to use them and you read it also in books. Only with a lot of experience and reading a lot of different opinions you can well destinguish which of all that new stuff is really important and what should be avoided or can be ignored.

The ugly: As mentioned not all of the new stuff is really necessary - but hell, I don't have to use all that, I can pick the cool stuff only, isn't it? - Unfortunately some things in IT really developed in an ugly way. One good example is the installation of software: In former times using DOS (that was the OS most people had at home) you only had to copy all the files on the disc to a folder and start it from there. Another example: Restoring the system was basically copying everything back from the backup tape or from the backup disks (the only bad thing was that you had to be a disc jockey). Not only that a simple copy operation is not sufficient any more because some runtime or other precondition is required, in addition to that there is dll or dependency hell. You have either a lot of shared libraries which are maybe slightly incompatible or your program is growing because of the large amount of dependencies of the dependencies and there must be programs written to create the setup program (or package) for putting everything necessary together. Well, and if something gos wrong you start the big search which of the 50 components is the guilty one and then implement a dirty hack workaround because you have no hope that the 3rd party will fix that in time. My only hope here is Linux - I hope that the communities continue developing into the right direction(s).


The features

To increase the number of items sold companies often try to pack more and more features into their products.

There are two things they often forget during feature-packing:
  • The more complex a system the easier to create confusion and problems.
  • If the focus is not kept main original purpose then the item may loose it and hence people are not interested any more.
I lately stumbled upon a digital photo frame with e-mail-feature included. What? - Can the digital photo frame now also receive viruses? - Do I have to update it for saving it from being hacked? Will somebody be able to use it as a relay e-mail server?

I already run hot, when my mobile phone takes about 30 seconds to send an SMS message - that was sent much faster on my older models. Not enough, I also had memory leaks so I had to disable some feature. Further it is still that about once a week it needs a reboot - just as a Windows Server (although there is no Windows on that phone).

Although I can write e-mails also with this phone it is slow, few memory, tiny screen to view and typing time is also longer than on a normal keyboard. Once I tried to correct a Word document while on the way. I should have waited until I am again in front of a real computer and read a book in the meantime...

The all-in-one product is a myth. Products that can much usually can do everything a little bit but nothing really good.

So I recommend that you
  • carefully think, what are your needs,
  • prioritize your needs and
  • get a few, reliable products or devices that fit your needs.
The features or functionality you need most needs to be covered by a reliable product.

Remember that for complex things usually more maintenance time and work is required. So beware of the "Total cost of Ownership".

Related posts: IT project costs explosion, IT outsourcing, The hardware.


The framework

If somebody would ask me for a contribution to the buzzword bingo game then my 50 cents would be the word "framework".

Companies are building huge frameworks - even big pieces of software - stating that it does provide a framework that enables you to do everything and the workflows, the meta-information and all the rest only has to be configured or implemented.

Well folks, they sell you everything and nothing. Often they even give away their framework for free. What they sell you then is consulting, configuration and implementation.

A piece of software being "only" a framework can make application development easier but a framework without some concrete implementation is worth less than an application (that is maybe less flexible) but actually doing something that is saving you work or opening opportunities you didn't have before.

Nowadays companies do have to maintain several different pieces of software and each new piece introduced has to be flexible so that it can fit in. However, the flexibility can be exaggerated to a level where pieces of software are written that - in theory - could help you to achieve everything, "it just has to be implemented". That makes real sense...

From the technical point of view there is another issue arising with the hype of frameworks when they are stapled together. A larger application can make use of several frameworks and libraries for object serialization, javascript operations (AJAX), database abstraction and many more. For smaller applications making use of many frameworks you get a big bulk of overhead.


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.


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.


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#.


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.


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...


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.