A look into Code::Blocks.

Code::Blocks.This is my second entry on Code::Blocks in the past couple of weeks. I had earlier commented on the release of the IDE but refrained myself to get too carried away and thus, purposefully, didn’t get into details at that time. The reason? Well, we all know how deceptive first impressions can be, especially about something like an IDE. IDEs can be complex beasts and it can take some time to work things out with them. However, Code::Blocks has been mostly easy to adapt to, at least for me. This in part due the fact that it mostly mirrors how Visual Studio works, and I work on that beast 98% of the time. So adapting to Code::Blocks was not too difficult except for minor differences.

First of all, Kudos to the Code::Blocks team. They have done a great job at bringing us this editor. It’s no mean feat, but they seemed to have pulled through all odds and that does indeed deserve a praise. It’s true I was eagerly waiting for the Code::Blocks release for some time now, and if you have been reading my blog, you will have seen me mention the IDE a couple of times before. To cut the long story short, I am lazy! I hate writing UI code and Code::Blocks (wxSmith) just does much work for you in that regard and yes, I always tend to use wxWidgets for most of my cross-platform UI projects. I wish this release could have come in a year earlier, when I was working on a C++ project which involved using wxWidgets for the UI, would have saved me a sh**t load of trouble.

Even though the IDE auto generates UI code, it’s surprisingly clean. Most editors will make a mess of code generation, but not so with C::B. The UI code is generated into pure C++ files (.h and .cpp) which you can continue editing like your normal text files provided you don’t insert code into the blocks C::B uses. Reminds me of the days I worked with Visual Studio 6.0 and MFC. If I am not mistaken VC++ 6.0 used a similar method for code generation. You can even move the code around and C::B is correctly recognize it, yes, provided the blocks are kept intact. A good thing is the fact that you can save the resources as .XRC files, which I tend to use extensively with wxPython. For me, Code::Blocks could very well become the de-facto editor while working with wxWidgets. To bad it doesn’t allow native Python support. That would have been great indeed.

So, besides having a good integration with a UI builder what more does C::B offer? Other than the fact that it can be used for UI development, can it be used for (, maybe other) serious C++ development? Yes it very much can be. All said, my main interest in IDE was not how easily you could build UI. My main interest was too see if C::B could be used for serious day-to-day development and how well it scales to full scale projects. There are several other IDEs that look equally impressive, until you actually try to get things done with them. So what’s the story with C::B? Does it live up to the standards of other professional IDEs? Well, besides some niggling quirks C::B seems to be pretty good for full scale projects. I always have a habit of building, a hello world, a “hello notepad” project with any new UI library I encounter. It gives you a fair idea of the capabilities of the UI. I tried the same with C::B and was pretty happy with the overall experience.

Now for some issues I had with the IDE. First and probably the most annoying was the fact that short-cut key assignments are very different from other editors, at least the ones I use. Also the fact that the IDE doesn’t allow me to set shortcuts like Ctrl-F5 or Shift-F5 is somewhat of a hindrance to quick acclimatization to C::B. That’s one serious nag! The other thing I noticed was the fact that the debugger can get really slow on Linux systems, though I must say it happened only twice for me and is not a frequent occurrence. On Windows the Visual Studio 9.0 directories got messed up when I installed VC 9.0 after I had installed C::B. C::B doesn’t pick up the VC 9.0 directories when you upgrade or remove older express versions. Not a problem though, I did managed to manually set them in the Options section. The debugger is not as extensive as others, but I guess you can generally live with that by adding “watches”. Most other issues, or for the matter of fact even these are rather trivial, I suppose.

OK then, how does the IDE handle projects across platforms? I found almost no trouble porting applications across platforms, at least no issues that were IDE centric. But then again my sample application was not entirely that extensive. Even then it’s worth a mention that after having been setup right, the project written under Linux compiled without a single major change on windows. No mucking around with Makefiles or build systems. Yes, it’s true I programmed for compatibility but still, all I really had to do was switch the compiler settings (for VC 9.0) thats all.

So can C::B be used for production quality projects? I would have to answer “yes” to that question. It definitely is good enough to be used for production code and if you are working with wxWidgets, I would even go so far as recommending this IDE over others. True it is not as powerful as Visual Studio, at least yet, but it still deserves more than a praise. For C++ development under Linux, I would recommend this IDE hands down, period!

A tryst with CSS and web-design.

I have been juggling my time these days working on 2 things at one time. Yes of course there is the game, and then I have also been spending some time with getting the website up and ready. Yes that also means I am getting my hands dirty with web technologies like CSS and PHP. The two things couldn’t be more different. On the one hand I have this geometrically intensive and monumental algorithmic monster called the game engine and on the other there is this woefully deep chasm in the form of web-design. It’s a fact I would choose the monster over the chasm any given day, (I can slay monsters pretty easily,) but that doesn’t elude us from the fact that web-design is notoriously difficult than I had previously anticipated. Yes I have a good hand on Gimp and Inkscape, and for the record all of the game interface was created using those two packages. Creating most of the art for the web pages in easy! Yes, I am pretty good with most programming languages (, if I can say so myself). However, putting up the web-site has had me cringe with frustration more than once in the past week.

Talking with friends and colleagues who have been down this road, I always knew web development was a bit quirky. But let me just say this, web-design can be crazily non deterministic! OK that was a bit too much, maybe I am going a bit overboard, but sometimes web browsers do tend to have a mind of their own. It is this quirkiness that makes web-development a pain in the rear. Different web browsers can interpret web markups differently, mostly the way they want to and that to me, who falls in the stronger discipline of application programming, is rather distressful. It isn’t one particular browser at fault, though some are more unreliable than others, but most browsers do have some sort of weirdness built into them ( check out CSS compatibility, W3C DOM compatibility). IE (Microsoft) as usual receives the most flack as being hypocritical in its approach towards maintaining standards (, oh please don’t even get me started on that!!). But what I found surprising was that the story is no better with others as well.

All said, most problems are no more than a Google away. Considering the amount of people working on web-development, there is always some poor unfortunate soul who has battled with a similar problem that you face. He has, probably after much deliberation and hair-pulling, found the solution to it, and yes, has been kind enough to post it on a website or a blog so that those who follow in his footsteps will not falter like he did. Bless him\her! I found Google to be an invaluable resource for web development, and with some degree of query refinement, you can pretty much get exactly what you are looking for. Fortunately when it comes to web-development, there are too many tutorials and code dumps all around to get things working.

Then again, I have decide to take a shortcut and go with Joomla for the site; since obviously it’s very easy to understand and saves me a lot of work. Also weighing in was the fact that I have had a pretty good experience with it running my personal site, and it seems a good all-round solid free CMS (Content Management System) solution. The fact that Joomla has a very active community and a myriad of plug-ins for almost anything and everything also makes it an attractive choice. I tried other CMSes as well but couldn’t get around to understanding them as well as I did Joomla. However, it would seem there is no escape from CSS and PHP to some extent since customizing anything with the CMS also means understanding Joomla’s own structure.

The work on the website continues. I hope to finish it soon but it has (, as always,) been a learning experience. With all said and done I am a person who loves challenges, and to tell you the truth, I am kinda enjoying it! 😀 .

Are integrated graphics chips the new battlezone?

In what could be an “one up” and almost a sucker punch to Intel, AMD announced an amazing new chipset, the 780G which is sure to create some flutter in the industry. The 780G puts a full fledged GPU on to the main-board and while I was reading the specs, it does seem to be substantially better than any of the other on-board or, ( in correct terminology,) integrated graphics chips out there. While Intel claims to have “more half of the graphics” market, the graphics or should I say “craphics” cards supported by Intel (, and to some extent AMD earlier) are nothing more than a big joke. The only reason they have such a huge portion of the market is because the average joe/jane is stuck with it and because it came pre-installed. I was recently quizzed by an acquaintance as to why his system could not run Bioshock and the only answer I could give him really was, “Well your system isn’t designed for that sort of gaming”. To that his reply was “Oh I just got a brand new system. How is it that it can’t run a latest game?”

It’s really disturbing for people who buy a brand new PC only to see it fail, utterly miserably I might add, to even push a last generation game at a shallow 24 FPS. Most are clueless, and while their PCs may be brand new with a “fast” multi-core processor with gazillions of RAM at it’s disposal, it can only but run their Office applications. Yes they run faster and better! No such luck with games though. People have to realized, having a faster CPU or for that matter having more cores doesn’t really help too much with games. It does to some extent, but as it stands right now, I would rather have a top-line graphics card like the 8800 GTX than a quad core CPU. It’s a very deceptive concept, I know, but thats how it is.

Anyone who has worked on graphics knows how utterly lousy and how much of a pathetic abomination integrated graphics chips can be. I have battled with all sorts of problems, everything from broken drivers to faulty implementations to near absent feature support. I hope things are finally changing for the better. The question is where does that leave Intel? Intel has been desperately trying to get a better graphics solution on to it’s boards without too much luck. The chipset that AMD has thrown up beats anything that Intel can conjure up hands down! At least in the near future that is. While Intel may add on more cores, they aren’t going to be too useful for people who want to run the latest games. With quality of integrated graphics on offer by Intel, users will have to install, at the very least, a low end graphics card. Sorry Intel, that’s how bad things are!

Then what has the Green Brigade (NVIDIA) have to say to all this? AMD’s acquisition of ATI is finally showing it’s advantages. While the graphics chips may not be the fastest out there, they are indeed very attractive considering the price point. Chipzilla and Graphzilla better get their acts together because if 2007 was the year both ruled in their respective departments, there is a new kid in town. He’s got better and faster guns, and looking more attractive than any of the old boyz!

More than impressed with Xfce.

I am a long time Gnome fan, but recently I had an unexpected run in with Xfce. I was visiting a friend of mine and he had an old laptop that couldn’t be used for anything much really. So we decided to give a shot at install Linux on it. Obviously Xubuntu was the distro of choice since the hardware was pretty old. We got around to installing it and I quickly noticed how fast the GUI was responding even on such old and rather archaic piece of hardware. The Xfce environment looked really slick indeed. I was under the wrong impression that Xfce missed all the bells and whistles provided by Gnome or KDE. Obviously the next thing was to install it on my own desktop, which I did, and I can tell you, the Xfce desktop manager is quite a bit faster than its older and heavier cousins. I generally don’t mess around with stable OS configurations, but I happen to be a speed freak and anything that is fast and light always tends to get my attention. Naturally I made an exception with this one. Now, Xfce is my default desktop.

With everything set to default, Xfce does take less memory than Gnome or KDE. But it wasn’t the only thing that impressed me about this desktop environment. In functionality too it seems to be designed to enhance productivity. Not like other managers aren’t, but you know those little things that nag you about other windowing systems under Linux; well they are nicely taken care of in Xfce. The desktop environment has a uncluttered interface, and though it may miss the richness of KDE, every focus is made so that the user can find his\her way around quickly. Xfce feels and looks very much like a lightweight clone of the Gnome manager (, thought it is not). Also Xfce will happily work with Gnome and the two can exist on the same machine without conflict and to some extent are even interoperable and share data between them (, like Xfce being able to use Gnome icons and files). That’s just a thumbs up as far as I am concerned.

The default file manager under Xfce desktop, Thunar is much (much) faster to open up, and though it lacks some features of Nautilus, I didn’t find any work hindering features missing. So on the whole, is Xfce for you? Well judging from this post you can pretty much see where I stand. However it is a matter of personal taste. If you like an uncluttered fast desktop, or have a lot of windows open which you switch around often (, I know I do),  then you have to check Xfce out. I for one, am pretty happy with Xfce, and I am not switching in a hurry.

Code::Blocks 8.02 has been released.

The much awaited release of Code::Blocks has finally happened. I was waiting for this for like forever! It’s time to go get the new IDE. From the initial looks of it, it’s been worth the wait. More later!

W’ow’ubi!

Finally someone did it! I mean this could have, and should have been done a long time ago, but no one really bothered. OK, what the hell am I talking about here? Oh well, seems like with the upcoming release of Ubuntu 8.04 code named Hardy Heron, you will finally have an option of installing Linux on a Windows installed PC without tinkering with the file-system and disk-partitions. A new installation mechanism called Wubi will allow Windows users to install Ubuntu on to their Windows OS using nothing but a simple Windows installer. Click and Install! No partitions no data-loss no headaches. It would seem Wubi installs the entire OS on a disk image which neatly sits in a folder on your existing Windows drive. Uninstalling is equally trivial. Simply use Add/Remove from Windows, just as you would use a normal uninstaller. Cool!

Linux installations are typically non trivial. I mean at least for the average home user, who doesn’t understand things like partition tables and dual booting options. Yes, there will be those of us who will continue to have separate partitions for Linux, but most non tech savvy users would try to skip such headaches if they can. If Wubi does achieve what it says it can (, still remains to be seen if it indeed can), anyone will be able to install and use Linux just like they would use any other software. It’s still an open question if this will mean more people signing on to Linux. Though debatable, Linux as an OS is still not as “user-friendly” or as some would say “Windows-friendly” as Windows is. Yet this is an interesting development indeed!

Wha’zup with Microsoft?

In an almost uncanny act, which has surely taken a lot of people by surprise, Microsoft very recently pledged that it would open up it applications and platforms to allow for greater interoperability. Yes, Even pledging to work with open-source communities and developers. All this seems to be a part of it’s compliance to the EU anti-trust decision. Interesting, very interesting indeed. Microsoft has been getting cute with open-source communities for some time now, but this is probably more than anyone had expected. However, it remains to be seen if Microsoft genuinely believes about open standards. I was reading through the published article and there are some things in fine print that still seem a little bit vague (, or maybe I am limited by my intelligence). Some things do appear rather subjective. A phrase like “low royalty rates” is open to debate. What does “low” mean? How low is “low”? Ah, and what’s a “covenant“? It will be interesting to see how these new initiatives are adopted. Does it mean all projects that opt for interoperability with Microsoft products, end up paying royalties in some form to Microsoft? Reading some portions of newsletter sure seems to suggest so.

However with everything said, it will be interesting to see and explore possibilities for FOSS projects under these new initiatives by Microsoft. For whatever it’s worth, it’s definitely a step in the right direction. So let’s hope the new gesture by Microsoft does pave the way for better interop solutions between FOSS and MS applications.

Virtualization: What is it exactly?

There has been a lot of buzz about virtualization and a lot has been said about it everywhere. Recently everybody and anybody who has something to do even remotely with operating systems is talking about it. So what exactly is it? And more importantly, what benefits do you gain from virtualization? Is it even that useful? A lot of questions, lets look at them one by one. First, lets look at what virtualization actually is. By it’s very definition virtualization means “abstraction of computer resources”. To put it simply it means sharing of physical resources on one system via several or multiple logical resources. In it’s true sense virtualization is a broad term and can mean different things. A CD/DVD emulation software can also be called as one form of virtualization. However virtualization is often mixed and used interchangeably with hypervisor. A hypervisor is a virtualization platform, meaning it is a platform using which you can run multiple operating systems simultaneously, often under one parent or host operating system, i.e. under one operating system kernel. Every operating system under a hypervisor runs inside it’s own virtual world or virtual computer (, if you could put it that way); completely isolated from the host or any other operating system that might also be running under the hypervisor.

ReactOS
React OS running under QEMU
Ubuntu (Gutsy Gibbon) 7.10.

So what is the real use of the whole virtualization thing? Several, and as a programmer/developer even more. My first experience with virtualization was with VMware, about 4 years ago when I was working on a freelance project. I used VMware to port an application across windows to RH Linux. I did a lot of monkeying around with the virtualization platform back then, and soon realized that such technology can be put to good use. Besides it’s obvious benefit for a cross-platform developer, virtualization can also be used very effectively for other purposes. More so now that we have machines with multiple cores. Since every OS runs in it’s own separate world, you can pretty much do anything with it. To name a few examples, how about hacking the Linux kernel or maybe writing a device driver. Maybe try a hand at screwing the file system. Crazy things you would never try on your machine, are all possible using virtualization software.

On a more serious note though, besides giving an environment to screw around what more benefits does virtualization provide? The one that is probably more of an interest to an enterprise is, “Utilization”. Underutilized servers and machines can be made to run multiple virtual machines, each taking more responsibility and more load. People have often sited benefits of virtualization as it could save up on physical resources like hardware, power-consumption, management and infrastructure, all leading to obvious cost benefits for an enterprise. With machines getting more and more powerful, this could well be a norm in the future. “Utilization” could well be the single most important reason a technology like virtualization could see a lot of interest.

Also of interest is the ability of virtual systems to be used as a potential secure sandbox testing environments. They could be (, and already are being) used for software QA, analysis and for controlled environment test beds for applications and untested software. Tech support can simulate client specific scenarios on virtual systems that mirror real systems. Virtualization is also excellent to carry out performance analysis on systems and run complex debugging scenarios that could be very difficult to do on normal systems.

The next use will probably be of more interest to the average joe/jane net surfer. If you haven’t already guessed it, virtualization could be used to safely surf the web and keep your system free of viruses and worms that infest web-pages, especially the “good ones” (, you cheeky monkey, you!). Even if your virtual system were to get infected or hacked, it’s just a matter of reloading the entire virtual OS and everything is erased clean! No cookies, no browse history no nothing! No one logging into your computer will ever know which sites you visited or what you did. Sounds interesting doesn’t it. 😉

So where can you get your hands on something like this. VMware offers a free virtualization software which you can download an use. I would recommend VMware hands down, since it is probably the best one I have used. Besides that there are also free ones like QEMU, which I use quite often. If you are on Linux, also check out KVM, Xen and lguest though I haven’t used them myself. Then there are commercial ones offered by Microsoft, VMware and others that are a lot more powerful which you are welcome to try.

[Edit] Also Microsoft Virtual PC is another free virtualization software for Windows.

Spying at the workplace. The things you should know.

I was intrigued by an article I read in a mag recently. The article was about employers spying on their employees using computers and networks within an organization. A tad bit disturbing I must say, not completely unexpected though. All previous organizations I have worked for were paranoid about security, so I guess I kinda always knew, ” the boss was looking”, when I was working. The article gave some really good insight on the whole matter. Apparently good enough to have piqued my curiosity, at least enough to write about it.

How do they do it? For those who arn’t tech savvy, let’s look at more technical details. Apparently the easiest and the most powerful way to spy on anyone using a computer is by installing a key/data logger. There are hardware and software keyloggers. The hardware ones can be easily seen just by peeking around your computer’s back. They sit between the Keyboard plug and the computer. A software keylogger is a program that logs every key you hit on your keyboard. So all your passwords and website are basically open for scrutiny. A keylogger program is surprisingly easy to write. A programmer like me could probably do it in about a day or so. Google around and you can probably get a dozen free ones on the internet. A data logger is something similar, but more advanced. It maintains a history of data interactions including keyboard and mouse. Dataloggers are often more difficult to write. However, don’t be mistaken, such programs are available. What’s more such programs are available from professional software development companies focused on security, and you might have one running on your PC right now! No, most key/data loggers are not caught by spyware or antivirus programs. Don’t bother trying it. So if there is one running on your work PC, there is a good chance you have no knowledge about it.

Spying using keyloggers is pretty easy, however that is not the only way an organization can spy on employees. Your email is also subject to scrutiny. If you are using your work email address to send personal messages to friends and family or maybe sending insults about your boss to your friends, there is a good chance they have already been read. Don’t expect to get a raise very soon! It’s child’s play to archive emails from a message queue on a mail server and those can be read during weekends or holidays. Forget about even reading all of them, the system can be configured to run a automatic script to isolate mails that have specific words or phrases. Your laptop isn’t spared either. If you do dock it in when you come to work, it leaves a door open for the sysadmin to logon to your machine and install whatever he/she wants, and if for some reason it has had a recent unexpected trip to the IT department, you probably should be asking the question, “why?” right about now!

Pretty much anything can be monitored, from the sites you visit to the friends you chat with. If you think your organizations is a little bit over protective about security and probably doing it, rest assured, they are! So the ethical question to ask is, are such organizations violating employee privacy? Is spying on employees even allowed? You will be surprised to know the answer! It is! There is no explicit law that forbids employers from spying on employees. Privacy laws are pretty murky when it comes to something like email and chatting. True, no one can barge into your house and violate your privacy there, but your workplace isn’t your house and anything said, written or emailed doesn’t explicitly fall into the category or personal privacy. There can also be serious legal complications associated with seemingly innocent practices. For example forwarding pornographic material in an email can be subject to sexual harassment lawsuits. Even seemingly innocent jokes, that are generally forwarded at a click of a button can be taken to be racist or radical remarks. Copying or emailing copyrighted material can land you in jail, even if you were to do it innocently.

As technology advances so does the need for organizations to protect themselves. Having personal data of an employee on office machines can lead to complications for the organization. With visuses and data mining rampant, organizations are left with little choice but to have more and stringent monitoring policies. I for one believe, organizations should make their policies clear. If they do want to monitor their employees, then there is no harm in letting people know. Spying secretly is not very well appreciated by anyone. It leaves people rather distrustful of the management and the organization. However, rest assured spying at the workplace is all too common. It is here to stay. So the next time you have and urge to forward that great joke or poke fun at your boss, remember “Every breath you take, Every move you make …..”

Designing user-friendly GUI.

What is good GUI? Or should I ask what make a GUI good or bad? Is it the snazzy looks, the cool effects, transparent windows, bright colors or is it really something else? Why do people hate some GUIs and love others? Or is it only just a matter of personal taste? Somethings to really think about I would say. GUI is actually a very broad term and can mean different things for different people. For a web-site a GUI could mean the web-page. For an application it could mean the application interface. For a everyday normal computer user it could very well mean his windowing system. A GUI is a graphical interface to a system, and the system can be, well, anything really. Though this entry is more about application GUIs, most points discussed here are also directly or indirectly valid for other GUIs.

Most novice developers working on GUIs never really understand, or for that matter appreciate the meaning of the phrase “good GUI”. It is often confused with “good-looking GUI”. That however, is not the case. Yes, it is true, good GUI must look good. You or the users of your application wouldn’t want to use bad-looking GUI. However, the single most important thing any GUI must accomplish is user-friendliness. How many times have you seen a good application get a bad reputation just because it was difficult to use? I would say too many times. Sometimes a GUI can make or break your application, but often times a bad GUI can give a bad reputation to applications that would otherwise have had much wider appeal. During my initial years as a developer I worked a lot with GUI libraries, everything from MFC, Qt, FLTK, wxWidgets and learned most of the GUI design principles the hard way, mostly by trial and error.

If you were to Google around for GUI design principles you will no doubt get a bunch of sites that give you some very good subject matter on the topic. However, GUI design is more about experience. Just saying, “You must know your user”, or , “Empower the user”, or , “Know the user’s perspective” doesn’t really cut it. True, most of the data is accurate and you are more than welcome to read it. However, these are very broad phrases and often lead to nothing conclusive. As any good engineer knows, data and facts are what matter. So lets looks at some of the hits and misses in GUI design.

a) Overly bugging a user. This is probably the worst mistake that can be done by any GUI. Remember those annoying pop-up dialogs in Vista! “Do you want to really move a file”, “Do you want to install this program”, and more. Nope, please don’t do that! It will make any UI interface extremely unpopular. The main culprits are Modal dialogs. Modal dialogs are one of the most overused GUI feature. I would go so far as to say, avoid Modal dialogs except for rarest of rare cases. Only use them to warn a user about data loss. Nowhere else! Even in situations where they are used, allow the user some way to turn off the warning message boxes.

b) Use tool-tips and modeless pop-ups, and use tool-tips judiciously. I can’t understand why so many UIs use modal dialogs to present information. Tool-tips are a great way to show information and they can be extremely useful in enhancing the GUI. Use tooltips instead of modal dialogs to convey simple bits of infromation. In one application I replaced information modal dialogs with tooltips that would fade away in about 10 secs or so. They were an instant hit. Azureus comes to mind, the program uses a similar feature to warn users. Also if possible try to replace modal dialogs with modeless ones. Again modal dialogs are not all that great even for user inputs. Compare the search (Ctrl+F) in Internet Explorer 6 and search in Firefox. Which do you think is more intuitive?

c) Another annoyance is leaving the GUI unresponsive. If there is a lengthy task, please delegate it to a worker thread. See to it there is always a way for the user to cancel a lengthy and intensive task. Never ever leave the user in a state where he/she can’t interact with the UI. It’s really annoying

d) Short-cut keys are such a help. I tend to always use them. A GUI application must have short-cut keys for the most commonly used tasks and must be consistent with shortcut keys. For example; never use Ctrl-Z for pasting something, Ctrl-Z is always an “Undo” command under all Windows applications, at least correctly designed ones. So stick to it. Not all tasks need to have shortcut keys. Actually it’s not always prudent to have short cut keys for commands that involve data loss. Also try to keep shortcut keys spaced apart. OK another example here; there was a friend of mine who was working on an application where he assigned Ctrl-S as save and Ctrl-D as delete. A few months later he got a nasty mail from a client asking him to remove that Ctrl-D since the client use to accidentally hit the delete key during save. Also overly complex shortcut keys and key combos like “Ctrl+Alt+F10” are not well appreciated.

e) “Empowering” GUIs are very very popular. GUIs that allow the use of both hands can quickly become a hit. Consider the copy-paste command. Initially the combo used to be Ctrl-Insert and Shift-Insert. However for a right handed person that would mean lifting his hand from the mouse to operate the shortcut keys. So two new short-cuts were introduced Ctrl-C, Ctrl-V. Now the user can select content with a mouse and copy-paste with shortcuts using his left hand. For those who don’t know, Ctrl-Insert and Shift-Insert still work with the Windows Notepad and most other GUI editors under X. Left handed people can still take good advantage of that. Such design can really go a long way because they empower the user to work rapidly.

f) Good GUI applications strive for “Undo” and “Redo”. This is easier said than done. It requires a lot of thought and pre-planning in the design stage of an application to have a full functioning Undo-Redo functionality. However this is a “must” in today’s GUI design. Can’t escape it. Hint: If you want to use Undo\Redo in your application, apply the Command and Memento design patterns to your designs.

g) Tool-bars are friends. Tool-bars are also a must for all but the most trivial applications. True some applications are too small to have toolbars. But the rule of the thumb is if an application has menus, it should also have tool-bars.

h) Another thing I hate is, deeply nested menus. If an application has to have them, then it must have a separate tool-bar for those menus. Deeply nested menu-items can be difficult for the user to locate. I have seen this, maybe not too often, but sometimes applications do have some commonly used functionality deeply embedded in the menu hierarchy. Not too well appreciated I must say.

i) Applications that fail to set the tab order on dialogs can quickly become unpopular, especially with laptop and notebook users. Same is the case with accelerator keys for input widgets. I have seen really good and professional applications miss out on this point.

j) Good GUI designers try to conserve space, but never go overboard. A GUI should not cram widgets, however intelligent choices while selecting widgets can go a long way. For example; often times a combo-box/choice-box will require far less space than a list box and provide equivalent functionality.

k) Readability is another factor. Sometimes snazzy looking applications with all those “skinnable” interfaces can make a mess of it. I generally try to avoid skins, custom fonts or custom colors. It is best to use system default colors and fonts since such GUI scales across systems that may have different settings and hardware setups. It is also best to go for flow layouts or sizer based GUIs. This allows for full compatibility even across platforms and with different windowing systems.

These are probably only some of the things that can go wrong with GUI design. There maybe more, but maybe I got a little bit tired with typing, and maybe you have too (, after reading such a long post). I will just leave you with this link. I think some very good points are addressed there. Have a peek if you are interested.