Monday, August 04, 2008

I now get anonymous methods: but I really dislike them already...

The example below was taken from Andreano Lanusse's blog on anonymous methods.




After examining this example for a couple of minutes (yes, really it took me that long...) and looking at the other example in his blog, I think I've made my mind up. I detest anonymous methods already. IMHO (of course as always), I can only conclude that using anonymous methods make your code less readable (to me at least) and don't add any real value to the language. Still, I haven't found examples or explanations that help me to get into the anonymous camp. Even Craig Stuntz's doesn't help me get there.


I also realize that there is one principle that I live by that renders some of the 'advantages' of anonymous methods useless. Sure, using anonymous methods can help you to limit the amount of 'real' code in a method and thus make it a bit more easy to overview. Or, at least, that's one of the reasons give to use anonymous methods.

However, this 'advantage' is only of use if you write really long methods and functions. The more code you have, the sooner you will find yourself repeating things and the quicker an anonymous method can help you reduce your code. But, if I look at my own coding style, I try to make small methods and functions, archieving only a couple of things in it. That hardly ever takes more than 10-20 lines of code per method. If you are writing longer code, chances are that you better start that refactoring utility and split your code up. Most of times that will make your code better reusable and easier to maintain.


As for Craig's argument of being able to do things that a designer of a framework didn't think of: I think you are working against the principles in that framework or the framework simply is not well designed. But, that's maybe another personal style of programming. If I use somebody else's framework, I try to use it as intended. Maybe the 'hacking' you are talking about becomes a bit easier, but I for one are against hacking.


The last sentence reminds me: due to some technical problems, you might have missed my posting on why a developer wants to be a CIO (or not). If you are border tonight, you might want to have a peek.


Bye,


Bart

Saturday, August 02, 2008

Why would developers want to become a CIO?

I found these articles today:


5 Reasons why a developer would want to become a CIO

and

8 Reasons why a developer would never want to become a CIO


They are about reasons why a developer might want to or might not change his position for a position as a CIO.

Now, I'm going to discard all the financial arguments. I'm not interested in money, at least not to the level that it will make me decide in favor of or against a job. Maybe it's because I'm Dutch and not American, I don't know. But I couldn't look at myself in the mirror if I would take a job just for the money. I would deny a job if they wouldn't pay what I'm worth though, but I think that's another matter. Bottom line: money couldn't get me into a job, but could keep me out of it.

Now, for the other reasons that a developer would want to be a CIO (only 2 of the 5 arguments remain after removing the financial reasons...) #2 is bullocks. It tells us that you want to be king of the company because you will have power over the people. To me, that's not a reason to be the king. I want to have the power over the faith of the software, not the people. I want to be able to tell which directions we need to take with the software. That's the real beauty of being king, not that you can tell people they need to fill in form A,B, or C.

Reason #5 (you get tired of solving the bugs) is bollocks too. Every programmer knows solving bugs is part of the job and you want to improve your software each day to give your customers a better product and toe get you less bugs on your todo list. If you are solving bugs each and every day and nothing but bugs, you're a bad programmer and you won't survive the business. If you have to do that because you're the bug solving programmer, you probably are just starting (solving bugs is a great way to learn the software and learn programming) and chances are you're not CIO material yet.

So, a nice article that draws some attention but, IMHO of course, full of nonsens.

As for the other article: the 8 reasons why you DON'T want to be the CIO, it's much the same.

Reason #1: we live to write code. True, but I guess that CIOs that have a developer background still continue to write code, or at least will research (new) code developments. You will be the senior in the company (after all, you started as a developer) and chances are there will be some hungry young dogs trying to learn from you. You won't leave your code: you only get to pick the nice pieces to be involved in.

Reason #2: seeing the fruits of your labor. Being a CIO for once you can make the decisions that you think are good for the software and the company. If you have sound ideas, the company will improve with your leadership and you will see the best measurable results possible: an increase in turnover. The results of a days work as a programmer is a nice piece of code that makes it through the unit test cleanly. The results as a CIO will show in the daily sales of licenses and positive customer feedback. I'd rather have the latter.

Reason #3: being able to speak Java/C/et cetera is a must for a CIO. That's the only way you won't get fooled by the developers that tell you that something isn't possible (anything is!). But, sure, you need to be able to express yourself as a human too, but I require that from my programmers too! If you can't talk Dutch (or English :-)) you would have a hard time surviving in my company. It's not a CIO-only requirement: it's a human's requirement to be able to express yourself.

Reason #4: there probably are a couple of people that want to be remembered for their hacking capabilities. But, again IMHO, hacking is stupid. If you are such a good programmer that you can do some facinating stuff, apply your abilities to do some good and useful work. It's a waste to spend your talents at stuff that gets people mad. You can do a lot better in making people happy.

Reason #5: sucking up to other people with jobs beginning with C's. What nonsense. If you are a good CIO, you will be taken as an equal amongst those C's. If you're not, you're not in a technology company and/or you're no good. If you find yourself sucking up the whole time you probably did it before (and you might even have gotten the C-job for it), but you won't make it.

Reason #6: the reference in the article to point #1 is a good one, because the same counter arguments apply. As the CIO you for once get to pick the directions and you will be able to do some real innovation that has an impact in the company. As a developer you will find you write just a bit more clever code that nobody will see. You'll take pride in that, but it will only matter to yourself.

Reason #7: not liking Powerpoint. If so, use something else: easy. Use video, music, exotic dansers. You're the guy with the 'C': pick your own tools. Now you can!

And for reason #8: that will all change, once YOU are the CIO. All the other developers will think: thank god, we now DO HAVE somebody that has a clue.

Again, Just My 2Cents Worth.

Bye,
Bart

Friday, August 01, 2008

I don't get anonymous methods...

Today I watched a presentation by Adreano Lanusse and David I on Tiburon. Nothing really new was shown from the things we already know. Luckily there were a couple of exceptions showing up as my installation does from time to time :-) And I now know that showing recorded videos using Microsoft Live Meeting is not a very good idea. The upload speed of the host was just not good enough. The rest of the presentation was pretty good to watch.

During the presentation we could ask questions and mine was: what's up with anonymous methods?

We've probably all seen the example of anonymous methods shown at http://blogs.codegear.com/davidi/2008/07/23/38915.

I just don't get why you want to use anonymous methods and I'm afraid Adreano and David were not able to explain it to me.

Why wouldn't you use a private class method? Or an local procedure? I really tried but I can't think of a situation where you want to use an anonymous method.

Who can explain this to my satisfaction? Why would I be happy with those???

Bye,
Bart

What are those prizes in the race - (part of) part 3

You might be wondering what's keeping part 3 of the reviews on the prizes in the race. To be honest: I started looking at RemObjects'  DataAbstract but business has kept me from looking at the software properly. It's not your daily component pack that your can write a quick review about. It's a proper software framework that needs a good looking at before coming up with an impression. So, please bear with me, the review will come, but it may take me a bit of time.

Bye,
Bart

Impressions from the webcast by Embarcadero

Yesterday I attended (half of) a webcast by Embarcadero presenting their products. Everytime I attend such a webcast I am amazed that it actually works. LiveMeeting (and all their competitors for that matter) really work and help to do a presentation from a distance. 

But, the presentation itself gave me some strange feelings. I must tell you that I am probably not in the target group of Embarcadero of their ' original'  products. I only have one database to maintain (the one that is used by Sevensteps' software) and that is not a complex one at all. That's also why I only saw half of the presentation: I realized that I probably won't use their products and will look at the Tiburon presentation later today. That's more my cup of tea.

There's another thing that I noticed in the presentation: the user interfaces that I saw were terrible! I saw an enormous amount of cluttered screens, about a trillion buttons in toolbars, 'old fashioned' icons and very complex dialogs. There was one tabbed dialog that had about 20 pages with numerous controls on each page. There were also wizards that help you do some complex work, but the wizards themselves were very complex and did not have a clear and clean design.

I probably understand were that's coming from. From what I saw the software can do a lot of complex tasks for you and you can pick from a large range of database (formats) to choose from. That probably is the reason why the user interface is so complex: there is a lot to do on a lot of database formats.

If I were to redesign the user interface I would start with one option screen where you can pick the database formats that your are interested in. Probably there's only one or two formats that you will be working on (in that session). Based on that choice I guess you can lose half of the buttons, options and windows

Also, in a dialog or wizard, when an page is not available due to previously made decisions: hide the page, don't just make it disabled. It will clean up the windows a lot and will make the software a bit easier to use. There was a wizard with a couple of tabbed pages which only had one active page of the 10 available. That's not a good design. If you only have one page available: lose the tab. There is no point in showing the other, disabled tabs.

That's just my 2 cents worth for now. I only hope that we get better user interfaces in Tiburon...

Bye,
Bart

Wednesday, July 30, 2008

And the winner is: Werewolf

The results are final. Werewolf, our superfast, late entry, has just won the race by a couple of votes from Jan Wicher. Werewolf, Jan and third place Tom Glenn will pick their prizes from the prizes made available by our sponsors.

First and second prizes were won with Delphi programs. Third place Tom Glenn made a fine contribution using C#.

Congratulations to them and thanks a lot to the contenders that didn't win a prize. To me, it was a lot of fun to be involved in this, albeit not as a contender. Who know, this might become an anual event. I will keep the website alive for the next year or so.

Bye for now,
Bart

Monday, July 28, 2008

Two days of voting left...

It is becoming a very tight race. There are three contenders for first place and the are only seperated by a couple of cotes. If you want to be the deciding vote, go to the site now and pick your winner.

Bye,
Bart

Friday, July 25, 2008

Races within the race

Now the voting has started for the winner of the Darwin Race of Languages the favorites are seperating from the pack. Two contenders are battling it out for the first two places and two others are fighting for third place. As you may know, there are three prizes to win, so there will be a couple of disappointments I'm afraid.

You can still have your say about the entries and make a difference for the contenders, so go the the website, try the published programs and vote the winner. The published programs are all well worth looking at and you might even find them usefull. I know I have one of them as a startup utility installed already - I will tell you which when the race is over :-)

Bye,
Bart

Wednesday, July 23, 2008

You can now vote for the winner of the race...

The results are in and you can now vote the winner in the Darwin Race of Languages competition. Seven of the participants entered a solution to one of the three problems and I think they are all worth examining. There are some very usefull utilities to be found there.

Go to the website and check out what the participants did and how they did it. On 30 July the winners to the competition will be announced and prizes will be handed over.

Bye,
Bart

Monday, July 21, 2008

Hans Starborg submits his entry

As time is running out for the race - there is only one day of programming left - Hans Starborg has published his results. All the results must be in by the end of tomorrow. From Wednesday on the audience can vote for the winners in the race. If you like you can already check some of the entries out.

Bye,
Bart

Wednesday, July 16, 2008

Late entry Werewolf publishes his solution too...

Well, the guys are not holding back. Werewolf, although a late entry only entering a couple of days ago, already submitted his solution for a GUI to a command line utility. He also added his documentation on the project.

Go check his work out.

Bye,
Bart

The first multi clipboard utility is in...

Yogi Yang was the first to come up with a result in the Darwin Race of Languages. He used Visual Basic to implement a multi clipboard utility that you can go and check out from the darwin site. IMHO I think this is a very usefull implementation. Go and check it out. In a weeks time the results of the others are in and you get the chance of voting for the winner in the race.

Yogi is till thinking about making the sources available, but for now you can go and have a look at the end result.

Bye,
Bart

Saturday, July 12, 2008

What are those prizes in the race? - Part 2

Next up in the list of pizes for the race to be evaluated is SmartInspect. I must be honest here: I'm a CodeSite user and quite satisfied. My evaluation will inevatably be influenced by my CodeSite experiences and there will be a couple of comparisions. This is my second easiest evaluation because I already know the concepts from CodeSite.

Installing
Installing was like it should be: no hassle and flawless. SmartInspect can be used in Delphi, Visual Studio and Java. I've only looked at the Delphi implementation: I guess VS and Java implementations will be compareble.

Using SmartInspect
Basically SmartInspect is an advanced logging tool. You start a session, send out information and that is caught by either a server, a file or in memory. When logging to a server (which is built in into the viewer) the logging information is displayed live while running your program. When logging to a file, you can later view the file with a viewer.

You can of course log a simple string, but more usefull things can be done. You can log objects, the properties of which are available in the viewer. You can log images, stacks traces, system memory information, a screendump of the current window or the desktop window. There's a lot too choose from.

For more advanced debugging tracing methods/functions can be quite helpfull. Now, it basically is a minor thing, but I found the TrackMethod statements vary valuable. The working is comparable to the EnterMethod/LeaveMethod combination. But, EnterMethod/LeaveMethod must be used in pairs. And that means you best add a try/finally construction to your code to make sure the LeaveMethod is executed alwas.

TrackMethod however works with an interface and relies on the reference counting of the interface. This means you only need to add one call at the beginning of amethod/function to track it. There's no need for the try/finally construction. To me, that is a good thing because it won't clutter the readabilty of your code as much. Nice.

The console
Until now CodeSite and SmartInspect are about equal. The only real difference I found was the TrackMethods in SmartInspect, but CodeSite has functionallity to log to the windows event logs. So, the scores are equal at half time. But the real difference is in the console. While the CodeSite viewer isn't bad at all and gives you good possibilities to view and filter log messages, I think SmartInspect wins on points in that department. You have various viewers (a watch pane, some detail panes) for information from you log file. There's plenty to filter and various ways of finding specific information in your log file.

Conclusion
SmartInspect is just a very good product. From experience I can tell you that having these kinds of logging capabilities out of the box helps you to debug your software immensely. I couldn't program without them anymore. CodeSite and SmartInspect are comparable products with (about) equal prices. Download the trial versions to see what's your favourite.

Bye,
Bart

Thursday, July 10, 2008

What are those prizes in the race? - Part 1

While the race is one I will write a little report about the prizes that the contenders are programming for. First up will be the DevExpress components. This one is easiest for me, as I am a current user of the VCL subscription package.

I've written about various parts of the DevExpress components before. If you've read those postings it's not a great surprise to you that I am a big fan of the DevExpress components. This posting is basically a song of praise. I've written before that the standard that DevExpress works on, is what we strive for in our company. That sums it up really...

DevExpress website
While technically not a part of any of their packages, the first thing that you experience is the DevExpress website. I thought I'd mentioned this because it can make a huge difference in the first opinion that you have about a company and their products. The DevExpress site is beautifully layed out (although a bit bombastic for my taste) and you can find any information that you like very quickly. Their support sections is up there with the best to be found on the web. All of this gives you great confidence about the products you are about to buy.

VCL subscription
Now, here's a tip that will actually save you money. Go for the VCL subscription package immediately instead of buying that one companent pack that you think you are looking for. I started with the navigation controls first, purchased the grid controls later and ended up buying the VCL subscription. Although you get some discounts of you ask for them, in the end you will pay more money. If you go for the VCL subscription in the first place, you get the lot immediately. And you will get all the beta releases of new components first, so you can immediately dig into those.

Overall quality
The overall quality of the controls is really excellent, with good online help and examples. All the components have plenty of properties to tweak them to your liking. Special attention is given to the look and feel of the controls. There's about nothing that you can't reconfigure with regards to the way the controls appear in your program.

However, a couple of things can be said. There are some components that haven't been updated in a while. I found myself using the navigation controls, the grid controls, the editors of course and the cxLayout components a lot. The other controls I don't use that much.

Look and feel
Recently DevExpress released the ExpressSkins libray which is used to apply skinning to your controls. That means you can give your application a very unique look and feel. There's a skinning editor to create your own skins and of course there are plenty of ready made skins to choose from. It took me about a day to add a user configurable skinning option to our software so each end user can select the look and feel of their choice. Great stuff.

Grid controls
I think DevExpress is best know for their incredibly good grid controls. DevExpress grids are very versatile, very fast, user friendly and offer unrivaled filtering and sorting capabilities. The only 'negative' thing that somebody told me once is that you can configure too much. True, it takes a bit of time to learn all the properties of the grids, but once you've got the concept behind the properties, it's not that difficult to find your way. And of course, a lot of properties also means that the control probably can do what you want.

Layoutcontrols
On different occasions I wrote about one of the frustrations of the last year or so. I started looking at the layoutcontrols once we got the VCL subscriptions. Before, I had read about the layoutcontrols, but to be honest, I didn't believe what DevExpress put up on their website. How could a set of controls relieve me from all the positioning that I was used to do on my dialogs? Not in a milion years a set of controls could do a better job than I did.
That was one of the biggest mistakes I made the last couple of years. I should have had a look before. If I had done, I would have started to use the Layoutcontrols ages ago. They are SO good that I still am amazed every time I use them. Positioning controls on a dialog has been removed from my tasks completely. The DevExpress layout controls take over all the hassle of making sure my dialogs look good.
The Layoutcontrols don't get much exposure but I honestly think those are the best controls that I ever worked with. You're a fool if you still are positioning your controls yourself. Go on, have a look at those and your life as a user interface programmer will change completely.

Schedular controls
Now, I haven't actually used the schedular controls yet from in demos and experiments. But, everytime I use them I am amazed at what I find. You can literally with adding one component implement a calendar feature to your application. There's not much more to it that adding the control and filling it with data. Of course to use the information in your software you would need to program a bit more, but the actual calendar and storing the calendar data is all taken care of. An excellent component that - if you have any use for it - will be much appreciated by your end users.

Navigation controls
The navigation controls (menu bars, navigation panes, ribbon controls) is what started me as a DevExpress user. Needless to say that using them is dream. Using the navigation controls means it's a no hassle, painless way of implementing a professional navigation interface to your software. One excellent thing is: there is a cxImageList control that supports PNG images. If you use PNG images (like http://www.famfamfam.com/lab/icons/silk/) you get excellent results. Much better than that old Win95 icons that you might be looking at in your software right now.

No trial version
I've seen comments on the web complaining that DevExpress doesn't offer trial versions of their software. That is true for the VCL components, although there are demos and there is a 'money back guarantee'. The .Net controls do come with a trial version though. To me, a money back guarantee is good enough but I think it would be better for DevExpress to see if they can implement a trial systems for their controls. Especially if you have large development teams, purchasing the controls means serious money and I think one is 'entitled' to be able to test the controls in real life. But that of course is a business decision DevExpress needs to make.

Summary
I'm not a dxExperience user, although I am using the ASPx packages. To summarize the C#/.NET packages: IMHO they are at least of equal quality to the VCL components, if not better. I think that the comments I have on the VCL package should be applicable to the dx components too. I've use the dx-components in their trial version and I really like what I saw. Very familiar way of working compared to the VCL controls.

All and all I couldn't give more praise to a company than what I did here. I truly believe (and not because they sponsor the race) that DevExpress has a great philosophy, offers unrivaled value for money and actually will save you a lot, a lot of time as a programmer. Their support is great and the VCL components still get their updates and new features. I only whish they had even more programmers working on the VCL components (it's quite obvious that their money is in the C#/.Net controls).

Bye,
Bart

Race on in its way: first reports are in...

The Race has started and the first progress reports are coming in. Go and read the website on a regular basis to see how the contenders are doing. Some don't publish their reports on the website, but on their own blog, like here: http://beauhinks.com/category/programming/darwin-race/

Bye,
Bart

Tuesday, July 08, 2008

DevExpress donates a great prize for the contest

DevExpress will give away a license to DXperience Enterprise or the VCL Subscription, the winner gets to pick either one. I think this is a great gesture and will be welcomed by the contenders. If ever you needed an incentive to make yours a last minute entry, now is the time.


For more information point to http://www.darwinraceoflanguages.com/.


Bye,

Bart

The race has started: 8 contenders rumble for the prizes

The race has started. 8 Contenders will program their tool of choice to win the prizes.

They will work on the problem that they picked and will keep a record of things that come up, documenting their experiences while programming. After two weeks (the duration of the race) their software and experiences will be published on the website for all of you to judge.

If you want to enter the race, you still can. You won't get more time, but if you think you are up for the challenge, please drop me a note.

Best of luck to all of them and I will post their notes when I get them during the race. So go check the website every now and then to read about their progress.

Bye,
Bart

Monday, July 07, 2008

6 contenders in the contest...

But, it is still the 7th of July, so you can still enter the race. The prices are good enough and you will help your fellow programmers in supplying valuable information about your tool of choice.

Tomorrow the race starts and the contenders start programming. After tomorrow you can still enter the race, but you will lose valuable time (the race ends at 22 July, no matter what).

So, go to http://www.darwinraceoflanguages.com and pick up the challenge.

Bye,
Bart

Saturday, July 05, 2008

Branden Tanga enters the race!

Branden Tanga, the guy that gave me the idea for this race, just entered the race AND he will enter a Delphi program watching CPU load and temperatures.

Now, that's bravery for you. In my book he gets extra points just for entering.

So, come on everybody out there. We all (including me) were a bit harsh on him and told him that he should use the tool first, was completely false in some departments and do some real work before criticizing our favorite tool.

He picked up the challenge! How about you??????

Go to http://www.darwinraceoflanguages.com/ and read all about it. To enter, just drop me an email at bart.roozendaal@sevensteps.nl

Bye,
Bart

Thursday, July 03, 2008

Three languages are now represented...

But, we need more than one programmer per language :- . So, are there any more programmers that want to join the race? You still have 5 days to register at http://www.darwinraceoflanguages.com/.

Bye,
Bart

Wednesday, July 02, 2008

The first participants in the race

The first two participants in the race (DarwinRaceOfLanguages.com) have entered: one Delphi guy and one Mac guy. We need (a lot) more to make it a true race. So, go on, go to the website and see how to enter this race.

There's also a suggestion by one of the participants that applications suitable for portableapps.com can get extra points. I think that's a very good suggestion.

If you think I should twist this or that rule, or maybe add another problem to the list to pick from, don't hesitate to let me know. The rules are still open for debate until 8 July when the race starts.

Bye,
Bart

Tuesday, July 01, 2008

The Darwin Race of Languages is on...

The race is on. A couple of hours later than I promised (sorry, I've got work to do also :-)) I put up the website and you can now officially enter the race.

Please point to http://www.darwinraceoflanguages.com for more information on what to do. If nobody enters the race, I get to keep the prizes! There were over 50 people that said they would enter the race: let's see how many of you will!

Please comment to this posting if you have any remarks about the problems to pick from, the rules, the schedule or otherwise. It's an open competition, but after 8 July the rules cannot change.

Good luck everybody!

Bye,
Bart

Sunday, June 29, 2008

The Darwin Race of Languages - Part 4

Another sponsor has volunteered to give away a prize. RemObjects will give away a copy for Data Abstract. The winner gets to pick which version, .NET or Delphi.

Tomorrow will be the launch of the website with the rules of engagement, so keep your eyes on http://www.darwinraceoflanguages.com/

Bye,
Bart

Friday, June 27, 2008

The Darwin Race of Languages - part 3

The first sponsor has offered to come up with a price. GurockSoftware will kindly offer a license to SmartInspect as a prize for the race. I'm in contact with a couple of other companies out there. If you are a company that has products suitable for Delphi as well as/or for Visual Studio or any of the other IDEs out there, this might be a good time to have some cheap publicity.

To reassure any of the companies that are thinking of sponsoring: this is not a bashing contest. It's about getting and sharing real life experiences writing software. Taking away the basing of a product just because you think it's bad, is just exactly what started this little contest. Any bashing through comments or otherwise won't get published on the website.

So, if you are still thinking about it, maybe this little notice will help :-)

Bye,
Bart

The Darwin Race of Languages - Part 2

So, the race is on :-) If within 24 hours more than 20 people think they will enter the race, there's no holding back.

There will be a little web site next week on http://www.darwinraceoflanguages.com/. I will need a bit of time to work things out and put them up there, but it's already work in progress.

There are a couple of things that you can help me with:


  1. Find C#, C++, Java or other programmers to enter the race. A race is not a race without different horses, is it? Spread the word amongst news groups, friends, colleagues, et cetera.

  2. Help me pick a tool or program to build. I'm currently thinking of offering three subjects to pick from. I have the following suggestions:


    • A GUI for a Firebird compression tool

    • A tool to convert code on the clipboard to html for using it in a blog posting

    • (we need more!)

  3. Bug your boss to supply us with prices to give away. If you're the boss: handover those goodies :-). A small gesture is fine: it's all about honor anyway.
  4. Go to http://www.dzone.com/links/the_darwin_race_of_languages.html and promote that up the ladder so more people in the developers community get a notice of this.

The plan so far

  • 1 July: launch of the web site for the race. There will be some explanation on the race, what the purpose is, how to enter, et cetera. It will be a democratic race: there will be a voting system to pick a winner.
  • 8 July: entry closes. The race begins. There will a short 2 week sprint in which you can spend as much time as you want to and can afford to. You don't necessarily need to enter a full working program; it's more about how the language and the tool helped or hindered you in your work - you will need to write something about that.
  • 22 July: the race closes and the results will be published. Extra points will be awarded to people that documented their experiences during work. The voting begins.
  • 29 July: the voting completes and the winner gets the price (whatever it will be...)

Plans of course can be changed, and the format of the race is much open for debate. So, please send in your remarks.


Bye,


Bart

Thursday, June 26, 2008

The darwin race of languages

Update: the race is on

It's funny how fanatical people (including me) can get when we are talking about the IDEs that we favor. If someone comes up with some (partly false) statements about out beloved (...) Delphi, we all (including me) jump up and start making a case for our pet. I don't think the guy was expecting that many comments after his posting. I can almost see him scratching his head :-)

Now, I think that's a very good thing. My post about dying Delphi programmers was intended to stir up some things and in the end I might have found a (couple of) new programmer(s). Besides all the public comments I have had hundreds of reactions in my email box. So, I can concluded, the Delphi programmers are still fighting to come out of top of the Darwin race of languages.

Now, I was thinking. There already must be a developer contest out there to compare Delphi to other languages. I couldn't find one though (but that might be because it's still early days yet :-))

How about setting one up? Let's find a small program (if in the end it is also usefull, all the better) and let's see what the results are when developing it with, let's say, Delphi and C#.

Now, before all the comments come in :-) I know that we would probably only compare the capabilities of the programmer, not the language. And, choosing C# would probably mean choosing .Net. If we would use Delphi for Win32 that means a comlpetely different platform. But, nevertheless, I think it would be fun to see what would happen.

So, please send in your suggestions for a small, but usefull program that could be the subject for this. It could be something like my all time favorite Stickies, but anything goes really.

If you think this is a fun thing to do, I will try to arrange for this and maybe even find some sponsors for prices to award.

Bye,
Bart

Wednesday, June 25, 2008

Delphi's Play Of The Day

Nothing to do with Delphi, but this is my Play Of The Day



Come on guys, don't say you saw this one coming!

Correction: I didn't see it coming. As commented, this is a staged (I won't call it a fake) video. But, IMHO, that makes it twice as funny :-)

Creating an always on top web browser window

For one of the publications in the LearningGuide Manager we needed an 'always on top'-browser window with some information in it. The Learning Guides provide support information to end users. This information needs to stay on top while working on other software.

A normal browser window isn't suitable because you cannot make that always on top. In the past all kinds of hacks and workarounds were available, but tabbed browsing, increased security and the like make it impossible to do something from within the broser (I think ... if you think otherwise, please let me know).

The publications are HTML based and must run on every browser possible. In the past we used OCX-es to implement such features but with the increase in diversity of browsers another solution was needed, since there are only a few (...) browser that support OCX-es.

Here's what we did (I think it's kind of neat). We created a small application that is deployed on the client systems. This application does a lot of things, but also has a TIdHTTPServer which listens at the localhost of the client. It listens for special urls which can do special things.

One the commands is to open an always on top window which has a TWebBrowser component in it and will serve a passed url. E.g. an url like http://localhost/cgi-bin/show?http://www.google.com will popup an always on top window with the google website in it. There's a whole range of commands that can do special things - one's only limited to the imagination of the day.

Of course there are some measures to prevent abuse of this method (which I won't disclose here...) and in the end we have a platform and browser indepent solution to do all kinds of special things next to simply serve HTML files to the end user.

Bye,
Bart

Saturday, June 21, 2008

Are Delphi programmers a dying breed?

For some time now we are looking for new Delphi programmers in our company and were unsuccessful in finding any Dutch programmers. We hardly had any response to advertisements and posting on job sites.

Of course, when you start doing that, you are approached by outsourcing companies. One of those contacted me 'at the right time' and we did a small trial project (not in Delphi though) to see what is involved when outsourcing software. The results were mixed (speed was low and quality was ... well poor). The price is right though, so that makes one hesitate. But, I found with this particular company - as well as with other outsourcing companies that approachedme - that they all could offer Delphi programmers, but "would start looking for one once the project goes through". None of the companies that approached me had any inhouse Delphi programmers.

So, adding that up, no local Delphi programmers are available, and no outsourcing company (that I know off) have inhouse Delphi programmers.

We are seriously considering switching to C#/.NET although programmers in that field don't come by the dozens either :- But at least, there are some outsourcing companies out there that say that they can deliver good C# programmers.

It kind of feels to me like the days when I still was a Cobol programmer. That breed almost died, and of course as a contractor that made sure you got a good price for your work :-).

Will the Delphi programmers go the same way? What do you think?

And hey, while we're at it, if you know any affordable outsourcing company with inhouse Delphi programmers, please let me know.

Bye,
Bart

Thursday, June 12, 2008

SHFileOperation / Vista and oh boy ...

Yesterday I reported problems using SHFileOperation on Vista in a multi threading application. I experienced problems overwriting files when running Vista. The problems didn't occur running XP or Windows 2003 server.

For starters: it has nothing to do with multi threading applications - that was a false assessment on my part. I should stop working so late :-(

Comments from other programmers made me look again and create a small program that demonstrated the problem. I could not reproduce it using the small demo. So what gives?

It turned out the problems were cause by the specification of the file paths. The program I'm working on synchronizes folders, having the source on the web or on a local file system.

It turned out I was feeding paths using a '/' as a folder delimiter instead of a '\'. XP and Windows 2003 don't have a problem with that, Vista does...

In this case, changing the forward slashes to backslashes solved the problem. Still, kind of weird, but a smaller problem than SHFileOperation not being thread safe.

Bye,
Bart

Wednesday, June 11, 2008

SHFileOperation not thread safe under Vista

I found the 'cause' of the problems with the SHFileOperation function in Vista I reported earlier. It turns out that this function is not thread safe under Vista. It works fine with earlier operating systems when used in a multi threading application.

For now, the problem in my situation was (somewhat) easy to fix. I now execute the ShFileOperation in the main thread (using Synchronize) and that solved the problem with the utilities that I was working on. I can imagine that for larger application a bit more work would be involved. But maybe this little piece of information helps others.

I will implement the IFileOperation interface for Vista later on, but for now it can wait...

Bye,
Bart

IFileOperation replaces SHFileOperation on Vista

Today I got some reports from users that part of our file handling functions gave irregular results. On my development machine (a Windows 2003 Server) all was well and I could not replicate the problems.


After some digging into these issues I found a couple of postings (this one in de MSDN amongst others) about a new interface (IFileOperation) in Vista that replaces the SHFileOperation function.


Now, most of my code works just fine, but I have some specific problems with overwriting files that already exist. Some get overwritten, others don't. I suspect the SHFileOperation functions that (apparently) are still availble under Vista aren't quite backwards compatible.


Luckily I have created some wrapper functions in my code around the SHFileOperation functions, so it will be fairly easy to implement the IFileOperation method of Vista. But, being under pressure as always, this wasn't what I was waiting for right now :-o.



If I encounter any special issues I will let you know.



Bye,

Bart

Thursday, May 29, 2008

I'll better my life as a designer, promised...

As you may read on my blogs I sometimes write for pdalive.com about using my smartphone and evaluating software on it. My last post was about Windows Mobile 6.1 on my TYTN II. Although the update was minor (from 6.0 to 6.1 is a small step after all), there is something in this update that made me realize something important about creating updates of my own software.


There is a couple of things in WM 6.0 that I always did wrong. E.g. when I want to lock my phone, I press and hold the red 'hang up' button. This locks the device so I can't make an accidental call to someone (something that happened quite a lot before I made a habbit of locking my phone). But, when you lock the phone, it locks with the current application in front. Most of the times I want the home screen active before I lock it. So, I made a habbit of activating the home screen before I locked the device. Frequently this means unlocking the phone, activating the home screen, and lock the phone again. But, I also want the first page of the HTC pluging (which displays a clock) active. So, most of the times, I unlock the phone yet another time, activate the first page on the HTC plugin before locking it finally.

Besides all the 'major' improvements in the WM 6.1 update, this is something that either Microsoft or HTC now does for me. Whenever you press and hold the read 'hang up' button, the home screen is made the active application and the first page of the HTC plugin is selected before locking the device. Apparently, other users found themselves performing the same procedure as I did in WM 6.0.

Now, what's all this got to do with my life as a designer? Well, I realized that I was very please to find such a small improvement in a new release of the software. It's not something a sales person can use to sell additional licenses with, but it is a change that makes the life of a uses just that tiny bit better.

I want to add more of such things to the releases of our own software. I want my users to get the same pleased feeling about our software when they start using a new release. I want them constantly thinking: hey, that's great! Simply because a little function or feature just does it's job a bit better.

From a commercial point of view it might be much better to have big new features in your release (like support flow charts in our upcoming main release version 6). But, and that is the promise, I will make sure that version 6.1 will have a big focus on all those little things that can make you go oooh. I think in the end, that will pay off, even from a commercial point of view.

Bye,
Bart

Friday, May 23, 2008

TYTN II Rom update: go for it

I couldn't hold myself. Yesterday some sites (I saw it first on the Dutch site www.allaboutphones.nl) reported the leaking of the offical to be ROM update for my HTC TYTN II. This update should include Windows Mobile 6.1 and - reportedly - speed improvements of the display drivers.

Of course I am also reading the forums of the XDA developers (http://forum.xda-developers.com/) where a lot of work is done on 'custom' ROMs. WM 6.1 is out there for quite some time now. But, since I am still in the warranty period of my HTC TYTN II, I never decided to install a ROM-update, although I was longing for it very much.

But I believed the posters yesterday, telling us that the leaked updates are the offical ones. The story is that they are leaked to have some 'cheap' evaluation with expert users by HTC. Fine by me. So this time I jumped in and installed this update and am now running on WM 6.1 on my TYTN II.

SO, what is it like? I can only say: great! The phone responds much faster, feels a lot quicker. It boots quicker and I get the feeling that the phone has come to life. I never found it that bad, despite my agreement with things stated at www.htcclassaction.org). But having the WM 6.1 update installed I can relate to the frustration of the guys behind htcclassaction.org even more. IMHO it's a disgrace that HTC has sold me a phone for a lot of money that could perform a lot better, simply by installing the right drivers.

Now, I also understand that the improvements are only partial of what the chips are capable of. I'm keeping an even closer eye now on all those hacker sites. I want more of these improvements, absolutely. My call to HTC: make these improvements even better en implement them for all phones. You will gain a lot of respect if you do and customer satisfaction leads to increase in sales in the end. To read my opinion on how great customer support helps sales, please read my blog item on that. I was seriously considering the upcoming iPhone 3G, but this improvement will make me wait a while. At least until WM 7 is out... I hope Microsoft will deliver something that is stunning. It needs to I'm afraid :-)

That's that on the speed improvement. Now, what about WM 6.1. Of course a lot is already said on that subject. Most find the improvements minor. You can't disagree with that, but I think threaded sms, zooming in IE and the overall speed improvement is very valuable. I was getting hooked on Opera mini, but the zooming in IE makes me doubt that a bit. So, here's another call to HTC: make Opera 9.5 mobile available on *all* your phones, not just the Diamond. It will hook your customers to your products even more. Most of us buy a new phone every 6 - 24 months and chances that being a HTC improve vastly if the customer is satisfied.

So, if you're not a hero, wait for the official ROM update, but get it as soon as it's there. It is very much worthwhile. If you are a hero, go get it now.

Google for RUU_Kaiser_HTC_WWE_3.28.405.0_radio_sign_25.83.40.02_1.65.16.25_Ship and you'll find the English update.
Google for RUU_Kaiser_HTC_NLD_3.29.404.0_radio_sign_25.83.40.02_1.65.16.25_Ship and you'll find the Dutch update.


I'm only so sorry for everyone that doesn't get this update on their HTC phone...

Bye,
Bart

Wednesday, May 14, 2008

Windows Ultimate Extras is a sham... I agree

Today I finished installing Windows Vista Ultimate edition. My machine was ready for a fresh install, something I do about once a year. Since we have a partnership with Microsoft I decided to install the Ultimate edition. Who doesn't want that anyway? I want everything in the Ultimate edition if that's available :-)

When I finished installing this version I went looking for all the extras that I remembered that were promised by Microsoft. I only found the poker game. The DreamScene did't want to start when I had two monitors connected to my portable. After disconnecting the external monitor I enjoyed the videos on the desktop for at least a minute or so. Then I realized that M$ was asking a ton of money for, well, just a handfull of useless things. Yes, more fun, but not for longer than a minute or so. Not worth the money at all. Although I am very MS-minded, I was very disappointed with what MS calls the Ultimate. I found this nice looking website which I wouldn't have otherwise, so there is something good in all this :-)

Btw, I had some problems installing update 2 of the BDS 2006 I am using, but found this article that solved the problem. I had to read it three times to realize I had to start the command box as an Administrator, but I'm up and running now.

Friday, May 09, 2008

Embarcadero: you'd better keep Delphi/Win32!

The storm of postings has died out (a bit), so let's give my two cents worth. First of all: I'm only thinking about Delphi for Win32 here. I'm not particularly interested in the other CodeGear products I'm afraid. So I won't bother you with my comments about those.

All the postings on the aquisition are quite positive about the future of the products, Delphi for Win32 not excluded from that. I'm not so sure though. A take over/merger like this inevitably will lead to a refocus of the future of products and services. Embarcadero will probably take this opportunity to save and extend profitable products and cut those that are not. Now is the time to do so: everybody (employees / customers / partners) will be open for that and will understand such moves. It's common sense, right?

If the above thought is true: what are the chances for Delphi/Win32? Somewhere along the line the following discussion will come up:

(boss/financial manager/commercial manager): Ok, we've cut the number of products. What do we do?
(A): Let's drop Delphi/Win32
(B,C,D..Z): NO! We can't! There are too many developers and products out there.
(A): Well, let them move to Delphi/.NET!
(B,C): That's a thought. Yeah, why not. I never had a problem with that...
(D,E,F..Z): But, that's a completely different way of working for them...
(A,B,C): They probably will have to anyway in the future and most of them won't mind.
(D,E,F,G): That's right, I never had but positive effects since I changed.
(H,I,...Z): But, what about the Tiburon? Didn't we just update the roadmap for that?
(A,B,...Y): If they want Unicode and stuff: let them use .Net. It's the future. And of course, they can always keep using Delphi2007.
(Z): Why doesn't anybody ever listen to me?

I would really hate it if this happens, but - to be open and frank - I could relate to such a thought. Cut the (large) number of products and focus on the ones that have the real future. It would give me an immediate problem (well, not that immediate, there's always Delphi2007, right?) but I would understand it, really.

But, I don't think I would switch to Delphi.Net to be honest. I think C#/.Net would really come into the picture in that case. Give the problems I have to find good Delphi developers (if you know a good Dutch Delphi developer send him/her to me now!) I would really consider leaving Delphi.

Others might go that line too. So, Embarcadero: you'd better keep Delphi/Win32!

Monday, April 28, 2008

Folders kept in use

Some time ago I noticed that a couple of small (conversion) programs of mine showed some strange effect. Folders that were used were kept in use. If, even after closing down the program, I tried to delete the folders, Windows told me they were in use.

I looked high and low for this, but in the end found the cause of it all. I didn't close a Find in the folders. Putting a try..finally in the code did the trick. This guaranteed closing the Find, no matter what. So, if you experience that folders are kept in use, go look for this one.


procedure foo;
var
sr: TSearchRec;
ok: boolean;
begin
ok := (FindFirst('*.*', faAnyFile, sr)=0);
try
while ok do
begin
goDoSomething();
ok := (FindNext(sr)=0);
end;
finally
FindClose(sr);
end;
end;


Bye,
Bart

Tuesday, April 22, 2008

The top 10 tools every (Delphi) programmer needs

This week I was at a client site to talk about our ways of developing software. Our client uses Delphi for developing their software too and are contemplating using DevExpress' components for their next generation software.

I was stunned to find that (until now) they only use Delphi. That's it. No other support tools or component libraries (apart from the Virtual Tree List).

That meeting inspired me to list the tools I think are absolutely necessary or at least very helpfull in developing (Delphi) software.

1) A professional component library.

As you may have guessed DevExpress is my top one favorite. I hardly need any other components to implement a professional user interface. There is *no* way you can get better results for the amount of money you need to spend on the library. I would always recommend the VCL subscription. It will set you back $500-$1000 every year but you will get a ton of components for that.

There are a couple of alternatives that you might want to look into. I'm sure that I will get some recommendations in the comments on this post :-) Let the list grow...

2) A logging tool / component

Of course you can use OutputDebugString to print debug statements or you can write your own logging tool. But there are a couple of professional libraries out there that already have done that for you (and more than you probably think of at first) and that are extremely usefull.

My favorite is Raize's CodeSite, but SmartInspect is very good also. Again, I'm sure there are others out there.

3) An exception catcher

I don't know another word for this type of tool, but I'm using two actually. Madexcept (which is my favorite, and only $25 for a commercial license) and EurekaLog. It will help you explain exceptions, especially when your software is already in the wild out there.

4) A bug administration tool

There are a couple, but my favorite is FogBugz. It's reasonably priced and does the job very well. It also has a simple but very effectie planning and time tracking feature. It will handle registering the status of issues, mailing to clients, handling received mail, et cetera. Excellent stuff.

5) Version control system

Now, I was perplexed to find that the client I visited didn't use a version control system. I couldn't think of a workable environment without it. We are using Visual SVN Server and Turtoise as a client. Even if you are in a single developer environment you should take the time to set this up. Don't let the costs scare you: it's free...

6) Creating setups

Every piece of software should be delivered in a setup. There's a couple of free (and not so free) tools out there, but we are using Wise for Windows. That's a bit old actually, but does the job very well.

7) Build tools

Now, eventually you have to deliver your software. You can build your software and assemble and distribute the setup by hand, but invest some time in setting up a professional build tool. Once you got the right scripts set up, delivering your software is a snap. We use Automated Build Studio. I actually wrote a testimonial on that which you can find on their website. Good support too.

8) Debugging tools

I don't use many other debuggers from the one in Delphi, but if you need some special things (like profiling the performance of your application), you might want to look elsewhere. We are using AQTime but I don't need it that much to be true. It's only at special occasions that I start that.

9) Unit testers

Every other month or so I tell myself I have to develop some unit tests. I never get to it, but writing this piece makes me a firm believer in unit tests again. I will, honestly, setup some unit tests.... Really, you should do it to.

10) Documentation

Now, here's a bit of plugging our software. How could I ever use anything else but our software for that? Google does it, SAP does it, Microsoft does it, so I'd better use it myself too :-)

If you want more information on what our products can do to your documentation (not only as a technical documenation tool, but for a great variety of documentation needs), please don't hesitate to contact me.

That's my list. What do you have to add, strike or comment?

Bye,
Bart

Sunday, April 20, 2008

Opera Mobile Mini browser

My last review of Makayama's webbrowser made me realize I was ready for a new browser. WM6.1 is coming with a tweaked IE Pocket and WM7 promises to be great, but I won't wait any longer. I installed Opera Mobile Mini and gave it a shot. I know it has been around for a while already, but I only looked at it recently.

Now, there's something between Java and me. I always have an eerie feeling when I know I have to start Java and from there I start something else. I know it's me: I'm from the Basic interpreters age. It feels (in my mind that is) clunky and slow and not optimized. I know I'm wrong, but I can't get over it.

But, if there ever was an application that will make me change my mind and (more important) take away that feeling when reading the word 'Java', it will be Opera Mobile Mini. It's extremely fast, renders pages very quickly and will do so (almost) the same as a desktop browser will.

But, what I like most is something I missed most in the Makayama browser: the zoom function. It makes the difference between a good browser and an excellent browser. I can't imagine I will use another browser again (until something new comes along of course :-)).

There's a couple of things I need to find out. I already read how to create a direct startup link to the Opera midlet, but I would like to have it registered as my default browser, so it will launch when clicking on an url in a newsfeed or e-mail message. I'm sure that information is out there, but if you know, please share it with me.

Bye,

Bart

Friday, April 18, 2008

Astraware Platypus reviewed

I was planning to take my time for this review. For once, I would sit down and make a proper evaluation. After all, when you have a ton of work to do, who can afford to play games? Our Office Wii is locked up, our lunch time has been reduced to half, all because of our work load.

So, how come I found time to evaluate Astraware's Platypus? Simple: I couldn't put it down. It's addictive. It's old fashioned in a world with interactive super controllers, tilting phones and jumping up and down in front of a television set. But, that's good! I love the retro feel of the game. It's shoot-em-up old style, and it's completely destroying my work day.

The game is very responsive, you really get an arcade type feeling looking at your business phone. The colors and graphics are nice and it's very playable. Nice things like automatic suspension when an email arrives made me smile. It's a jewel of a game and one that is worth it's money.

Maybe I will update this review a bit later to tell you what things you can find in the city of Collosatropolis. But to do that, I will have to end here and get back to it (now, would that be the game or my work...).

10 out of 10 for this one!

Bye,
Bart

Thursday, April 17, 2008

DevExpress apparently will support unicode with their controls

It is not official yet, but in one of the Delphi news groups there was the following reply from DevExpress' Julian Bucknall to a question if they will support Unicode.
Re: Delphi 2008, Unicode and Dev Express

Tony

On Wed, 16 Apr 2008 15:22:46 -0500, Tony Caduto
wrote:

>Anyone know if DevExpress is going to release versions of the Quantum
>Grid etc that will be Unicode Compatible with Delphi 2008?

Duh . Of course we are.=20

You know you can just email me if you have questions like this. Anyone
can. Heck, I don't even try and hide my email address with DOTs and
ATs.

--
Cheers, Julian

-----------------------------------------------------------
Julian M Bucknall
CTO, Developer Express, www.devexpress.com
julianb@devexpress.com

Personal blog at http://www.boyet.com
Company blog at http://community.devexpress.com/blogs/ctodx
Author of "Tomes of Delphi: Algorithms and Data Structures"=20
Read my articles in PCPlus every month
-----------------------------------------------------------


Kind of makes my day :-)

Wednesday, April 16, 2008

Spending a lot of time on your support department pays off,

I am using third party controls wherever I can. If I can buy the stuff that I need, we don't need to develop it myself. Buying software components is always cheaper than developing them yourself.

If you look at two component(s) (sets) that I am using (DevExpress Suite and ProfDHTMLEdit) you can tell which gives good value for money. We spent $3000 on DevExpress software and about $100 on the ProfDHMLEdit component. DevExpress is way cheaper for us and I will always recommend that to others. ProfDHTMLEdit has proven to be very expensive and I won't recommend it to anyone.

I'll explain why. But first, let me emphasize that the two software packages don't compare in functionality. The DevExpress package is much bigger and serves quite different purposes then ProfDHTMLEdit, hence the difference in price. But, that's not the point. The point is: what do I get for my money, support wise. And how does that make you feel as a customer.

Another thing to know is that I realize that DevExpress is a much larger company then the single person that supports ProfDHTMLEdit. But, again, that is not the point. The point is: what does attention, curtosy and friendliness do to you.

The Bad Support Scenario
Once upon a time I started to use ProfDHTMLEdit. I was looking for a WYSIWYG XML editor, couldn't find a suitable one, and ended up with ProfDHTMLEdit. It is a HTML editor with no special features to support XML. However, using some tricks and stylesheets I was able to make into the light weight XML editor that I was looking for. Usage of our software grew and I was beginning to get strange bug reports that were caused by ProfDHTMLEdit. I looked high and low but couldn't find a cause nor a solution. I contacted the author of the component and at first he was very helpfull in trying to locate the problems. But, after some time it became clear it wasn't the usual kind of problem and he sort of gave up. I tried to insist, offering to travel to him in Russia, looking for the cause together. But, he wanted a lot of money for that (starting with a 'setup fee' of $1500) and that made me move away from that option.

I tried other components, but there still wasn't a good alternative available. I continued debugging, tried wild guessed work arounds, all to no avail. To make a very long story short: after two years I found help with Marco Cantu and we were able to solve the problem in the end. It was all caused by a memory corruption in the ProfDHTMLEdit control. We were even able to create a good work around for the problem.

I reported this (including demo program of the problem) to the author again and also found that my work around benifitted other users. I have had no official reaction or software update since. In general, the questions asked on the support forum are answered in one sentence, sometimes a single word. No thank you, sorry, did it help? None of that. You feel like you are a burden to the supplier instead of a customer.

I never did a calcuation of the actual cost of this simple, one component. But it must be in the many tens of thousands of euros. Remember the original purchase price was about 100 euro.

The Good Support Scenario
As said earlier, we spent a lot of money on the DevExpress components. Starting with buying the one component pack, gradually we used more and more DevExpress components and ended up with a VCL subscription (worth $600 / year). All in all a couple of thousand dollars changed hands.

In the years that I have used the DevExpress components I have reported numerous bugs and questions with DevExpress. Let me just describe the typical flow of support messages.

  1. I report my problem on the website. Using a form I can supply the necessary details, search existing questions and knowledge base. If it is a new problem or question I can submit it.
  2. I will be notified when the issue is accepted (or declined) and will be informed when:
    1. The issued has been reviewed
    2. An answer was given
    3. A suggestion for a new feature is accepted
    4. The new feature is planned
    5. The new feature is actually implemented
  3. If the answer to a question cannot be described in text only (in a few lines), a sample project is always supplied.
  4. I can respond again using text, modifying the sample program or whatever I feel is the right way.
I will always get a prompt answer. If a solution or answer is not easy to give, they will tell you they need more time. You can track the issues you have opened. You really feel there's somebody on the other side that is working with you.

If I had to pay the hours that the DevExpress support people spend on me, I probably owned them another couple of thousand. And, having such excellent support, saved me a lot (and I mean a lot) of time.

The point and the benefits

Working in a software company myself I can see where the benefits are with excellent and abundant support:

  1. Your customers think very highly of you.
  2. They will always recommend you to others.
  3. Your customers will give you much more feed back, which is invaluable to you. You will know precisely what they want.
  4. Your customers will probably come back to you without thinking twice.
And probably there are a couple of other reasons to think of.

In any case (and I have writting that down a couple of times before): the support team of DevExpress is that level of support that we strive for. I can only hope we can reach that in our live time.

Bye,
Bart

Ps: right after posting this, I found an artical that touches some of this
Ps2: coincidence or not? Only hours after I posted this, I got a response from the ProfDHTMLEditor with an official solution to the 2-year old problem... Maybe blogging is gooed for something.

Makayama's Touchbrowser

Now, here's a line that you won't see too often: I love software by Microsof and I love the iPhone. When first reading about the iPhone I wasn't convinced at all about its innovative power. But, once I got my hands on it, I was hooked. I think that the iPhone really is a next generation thing.

So, anytime I read that a piece of hardware or software brings the iPhone experience to Windows I am intrigued and I have to take a look. Now, when the TouchBrowser was announced I was very optimistic, because the pocket version of IE is, well, not too modern. After reading that the TouchBrowser was 'nothing more than a wrapper around IE' my hopes died immediately.

But, after using the TouchBrowser I think it really could be innovative. It eliminates all the clutter and chunky user interface bits that go with Windows Mobile applications. It really is a 'fingers only' application. It performs well and it maximizes the usage of your touch screen. And I love the way you enter URLs; I didn't flip my TYTN II open once to go to the keybard.

However, as said, it could innovative. There's a couple of things wrong and missing. First and foremost, you need a zoom function. You have no clue what is on the page. There's a couple of small scroll bars to tell you where you are on the page, but as you don't know what's on the invisible parts of the page, that doesn't help much.

Other things are minor, but I was looking for that. Increasing font size (if you
are over 40 like me, you need glasses or bigger fonts), better management of your Favorites (you get the IE-favorites), progress indicator for loading pages ("please wait" doesn't help)

There's also a couple signs that it's a first release. The close application button doesn't work, after ending the task via the task manager you can't restart TouchBrowser. There is no home button. The settings page looks clumsy. Stuff like that.

Final conclusion: we're not quite there yet, but I think the iPhone experience will eventually be available on Windows Mobile. It won't be with (this version of) TouchBrowser, but we're getting close. Rest assured I will give version 2 a very close look.

See http://www.makayama.com/touchbrowser.html

Bart Roozendaal, Sevensteps

Saturday, April 12, 2008

Alternative to TToolbar

Download sample code


If you are a DevExpress user, like me, you will use TdxBarManager instead of any of the standard Delphi controls that are available. I can imagine that CodeGear doesn't invest anything in (any of) the user interface controls with such many excellent alternatives around.

I am a VCL component developer too (for internal use that is). Most of those controls go with an ActionList for it's functions. The end user can access the functions using (amongst other things) a TToolbar. And one thing that I had not done (until today) is to replace the TToolbar component that I was using for toolbars that are part of the controls.

Now, I might be alone on this, but I think that TToolbar is one of the worst components that is in the standard package. It behaves irratically and configuring at runtime (as I do in my controls) is really a pain. Some years ago I created a subclass that kind of worked ok. But I never was happy with it.

This weekend I took it upon me to integrate the TdxBarManager into the current set of UI controls. The solution took me a bit of work, but I think that how I did might benefit others. So, I've created a demo project that demonstrates how you can use the TdxBarManager as a toolbar as part of your own UI VCL controls.

Unzip, compile the package, install it and run the demo program. That should do it.

If you have any questions, just mail me.

These examples are just a proof of concept and you will need to do some work on it to get it going. My actual code is a bit more complex than this. I might have forgotten something or made some typos.

Friday, April 11, 2008

Writing for PDALive.com

As from this week I will be writing for PDALive.com on a regular basis about things that concern Windows mobile phones. I own a HTC TYTN II myself. Apart from personal experiences I will write about projects and programs that we do that involve (windows) mobile phones.

First project will be an application that will be created to offer the user support information. One of out partners (LearningGuide Solutions) sells training material which is published as an end user support system in HTML and as trainingsbooks in PDF.

The next few weeks and months (probably) we will create a new application/publication that targets Windows Mobile phones. I am still looking for some ways to use Delphi for that, but I don't think that will be wise or possible. It will probably be C# and .Net (which of course is fine).

You might see some copies of articles I will create for PDALive on this blog. I will mark those with a special label.

Bye,
Bart

Class helpers vs Subclassing

In a Dutch Delphi forum I came across a posting that had some sample code using 'class helpers'. At first, I didn't know what it was. Later I realized I had seen that before, but somehow I forgot about those. Class helpers extend an existing class, without subclassing.

I tried to put down why I don't use class helpers, but do subclass frequently. I couldn't (and can't) remember. While writing all the pros for subclassing, I couldn't find and argument agains class helpers. Except of course, you can't override members. It took me a while to realize (again) why I don't help a class, but do subclass.

If anyone is reading this, what is your opinion about the subject? Are class helpers of *any* use?

Bye,
Bart

Monday, April 07, 2008

Rediscovering FogBugz

This weekend I had a bit of a crisis because I couldn't see the forest from the trees (is that English at all?). There is simply so much to do, that I panicked a bit and wondered how to solve that.

I thought it would be best to make a list of things to do. Sometimes that helps to realign your thoughts. First I started typing the list as tasks in Microsoft Outlook, but I realised that I tried that many times before and I simply don't like that. So, I looked further on at the tools we have. I realized that we use FogBugz for storing our bug reports and feature requests, but I could also use it to create my own lists.

I did know FogBugz has a couple of things that we don't use (wiki, discussion board) because I think that user interface is too simple. But I found that, after entering my task list and estimate the time needed for that, FogBugz has a great feature. It can calculate if a planned release date can be met or not. It will also tell you the probability that you will make that date.

Even based on this weekends work it already tells me the probability for the next release (about 20% :-(). I can imagine that, if you use it to plan bigger amounts of work of more people, it can be a really helpfull thing. So, we will be good boys and use that feature of FogBugz and see if it helps.

If you don't know: FogBugz s created by FogCreek, a company with a state of mind much like ours. Just read http://www.fogcreek.com/About.html.

Bye,

Bart

Saturday, April 05, 2008

Namechange

We are thinking of changing the name of our company from Sevensteps to 7-Steps. Not a big change, but to see what it would look like in documentation, I will try it out for some time on this blog.

Bye,
Bart

Update: I reversed the title of the blog (and other general info). It probably won't be 7-Steps. Maybe not a change in name at all... We'll keep on thinking

Investements in hardware - continued...

In one of my postings I wrote about investing in hardware. Sometimes this involves a lot of money (computers, beamers, et cetera). Sometimes the investment is small but the gain is large.

Last week we bought a couple of pcmcia Gigabit network cards for our portables. For EUR 25 per card our networks speed increased 10 times! Now, that's value for money :-)

We are currently looking at a new fibernetwork that is being rolled out in our neighbourhood. For a mere 350 euro / month we would get a 1Gb network connection.... That would mean 100x our current upload speed... I canb hardly wait; working at home using a remote connection would be so much more comfortable...

Bye,
Bart

Thursday, April 03, 2008

When do you decide to do a redesign of your software?

I'm working like hell right now on the implementation of a new feature of our software in oder to support flow charts. With the flow charts, and accompanying editors and publication engine plugins, an author can add flow charts to describe a business process, work flows and stuff alike.

The flow charts are, in the tradition of the Sevensteps approach, object oriented and stripped from whatever visual markup that could be there. If you want a green flow chart element: fine. But, first create a style for that and apply it to the flow chart object. Want a italic text? Sure, but change the style to do that.

This approach enables us to have a true single source system and reusable content objects in our CMS-es. But, yesterday I was working on the styles editor and the flow charts editors and found a flaw in my design. The handling of actually applying the styles was programmed in the style editor, instead of in the flow chart object. Although the style editor worked beautifully, I realised my mistake when working on applying the styles for the actual flow chart objects. I found myself reimplementing the same code again.

Although I am under enormous time pressure, I decided to change that implementation and moved the code for applying styles to the place where it belongs: the flow chart objects.

It all took another day of my available time for all this (and I am running out of time already), but I am assured to know that later on I will be glad I did it. Right now it feels like time wasted, but I know better than that :-)

I have one rule that I don't move away from, no matter what: if you decide to do something, do it right, or don't do it. If you do it wrong, and - worse - if you know that it's wrong, it will bite you later on. It might take a day, a week, a year: you will regret it.

So, the answer to the question is: you do a redesign if you know that it's wrong. Don't change it and it will haunt you. Do it over again, and you'll be happy in the end.

Bye,
Bart

Tuesday, April 01, 2008

Upgrading user interface

In the upcoming release 6 of our engine we have added a couple of nice features. E.g. we are introducing a flowchart module which will help you describe business processes and work flows.

But, one of the other things that will be visible immediately, are our new icons. Over time the icon set that we use has become, to put it mildly, a bit out of sink. Icons were designed by different visual designers, I 'borrowed' from Office; you know how it goes.

We decided to go through the entire interface and replace all icons with icons that can be found here:

http://www.famfamfam.com/lab/icons/silk/

This is a free, yet professional set of icons that is used quite regularly. It holds about 80% of the icons that we need. The missing icons will be in the style of the famfam icons.

We also implemented the skinning engine by DevExpress. Although it doesn't make the software any better, it is always nice to have a good looking interface. And the end user can now select from 20 different themes to give the software a bit of a personal look.

Btw: the famfam icons are PNG images. I used the TcxImageList of DevExpress to use those. That gives a much better visual appearance than the good old icons that we all know.

Bye for now,

Bart

Friday, March 28, 2008

Vista solves XP SP2 problem

This week one of my colleagues visited a client at the university of Antwerp to upgrade their installation of Sevensteps software. They were still using version 4.x (which we developed some 5 years ago). It was really time for them to upgrade to the current state of our engine.

Version 4.x suffered from the Windows XP Service Pack 2 upgrade - in fact that upgrade broke our software big time. It was then decided to do a complete remake of our software and version 5 was born. It was a major upgrade for us as you can imagine but one that we didn't regret for a single moment.

Much to our surprise we found in Antwerp that installing version 4.x on Vista generated a Windows error message, stating that the problems were known and if we wanted an update for it. After confirming that - we just were too curious to find out what MS had in store for us - some downloading occured, a new OCX was installed and presto: version 4.x performed as well as it ever did, and some....

So, Vista not only takes you to a next level on Windows, it also solved our old problems. A bit late, I must admit, but it is nice to now that customers with old versions of our software can still us it under Vista.


Bye,
Bart

Wednesday, March 26, 2008

New hardware is always a thrill

I admit, I'm a gadget lover. And gadget lovers always get a buzz when something new pops up. This time it was a new mouse. My old one was worn out, it just didn't work properly anymore. So, I got myself a new mouse, a Logitech MX Revolution. It's an expensive one, but luckily we have a motto in our company: our hardware is our tool and we should get the best available.

This thing has one function that I haven't had before. The scroll wheel can have two modes: one light, fluent scroll mode and one 'clicking' scroll mode. By default (as far as I have found out yet) browsing on the internet uses the fluent mode and all other programs use the clicking mode. To me it means that scrolling through my code uses the 'clicking' mode, which is great because it clicks at every scrolled line. The fluent mode gives you a 'soft' feeling when browsing the internet, which somehow eases my mind. I don't feel as rushed as before when reading webpages. Funny how such a thing in hardware feedback can set your mind.

I can recommend adopting our motto: investing in hardware is never bad. It's much better to spend some money on fast, good performing hardware then having a mindset that is uncomfortable. Feeling not well when working can cost you money.

Bye,
Bart

Tuesday, March 25, 2008

Anticipating Unicode Delphi

For some time now the Delphi community has been waiting for Tiburon, the Delphi version that will support Unicode. It is announced to be released somewhere this year. Of course, you can expect companies like DevExpress to wait for that version to do any work on their components for Unicode support.

There is some news though, which you can read at http://blogs.codegear.com/nickhodges/2008/03/24/39041. Apparently things are going very smoothly and 'some technology partners' have had a look already. You can only expect DevExpress to be one of those.

We are waiting for Unicode support very eagerly I can tell you. Our engine is quite ready to do propery multi lingual support, but we couldn't implement it in a proper way due to the lack of user interface controls that support that. That all might change this year and I think the 2009 versions of Sevensteps products will have the multi lingual support that we designed many moons ago already...

If anything new comes along, I'll keep you posted.

Bye,
Bart

Friday, March 21, 2008

Things that make you go humble

Today I started working with the full set of VCL controls from DevExpress. We used a couple already, but we decided to buy the lot. Mainly because I was working on some much needed tidying up of our dialogs and I got sick and tired of moving controls a pixel left or a pixel right. I already had some logic in place for my own VCL controls (I have created about 20 or so) to do some automated formatting and placing, but that wasn't good enough.

I knew DevExpress had something called dxLayoutControl, but also noticed there weren't many questions about it in the support database. I had the feeling it didn't get much attention, so I nevergave it much thought. But, when the pixel movements were required again, I decided to give it a go.

The demo led me to believe there was actually something good in it, although I was not fully convinced. There were a couple of other libraries that I was interested in, so we did decide to buy the lot.

I couldn't be happier after working with it a couple of hours. It takes a bit of hassle to convert your current dialogs to ones that are built with dxLayoutControl, but once you get the hang of it, it's just a bit of work. After that, you don't have to look at it again and the layoutcontrol takes over and care of everything.

I feel so relieved to know that I don't have to think about placing controls again. As a matter of fact: I will probably redesign some of my compound controls to take more advantage of the capacbilities of dxLayoutControl.

This component by DevExpress might not get the best exposure, but it sure is worth every dollar you pay for it. It really relieves you from the troubles you have to make a real nice form. I can recommend it wholehartedly.

Bye,
Bart

Wednesday, March 19, 2008

A node is *not* a document...

Tonight I spent a considerable amount of time looking for a problem that wasn't there. In the end I was feeling kind of foolish...
I have a XMLDocument (in a XMLDomDocument from MSXML) that has the folowing structure (this is fake...):
<root><parent><child /></parent></root>
Now, I select a single node, using the xpath query:
/root/parent
and pass it to a procedure. In that procedure I was looking for the child. Suppose this is the procedure:
procedure foo(myNode: IXMLDomNode);
I tried to collect the child node using the xpath query:
/parent/child
and applied that to the passed node. After all, when I inspected myNode, the debugger told me that its structure was:
<parent><child /></parent>
So, why was I getting nil as a result of the xpath query?
The answer (which I found after two hours of debugging...) of course is simple. Even if you apply the xpath to a node, using '/' as the first character starts the query from the start of the document of the passed node. Not at the start of the node...

Boy oh boy, how foolish I was. The correct xpath to select the child was:

(can you guess....., read on .......)

child


Just a little moment of humiliation is called for.... To bed, to bed, my friend.

Bye,
Bart

It's a bugs life

Two weeks ago I visited Marco Cantu in Italy to solve a long lasting memory related bug. Below you find the posting on his website about this experience.

It's a bugs life
I've been programming for ..., well, since ever really. The first programs I've written were on paper cards, ticking boxes with a pencil. Those cards were send to a computer center which returned me the output the following week. Yes, I'm that old.

For a decade or so, I've been working with Delphi and much to my pleasure I might add. But, two years ago something happened. I have a couple of programs out there with a couple of hundred users and some of them were sending in bug reports that I couldn't explain. I looked all over the place for the cause of these reports but I simply couldn't find it.

I knew they were related to this text editing control I was using abundantly, and I dug deep into the source code of it, but I couldn't find a problem there. I was beginning to doubt myself. I knocked on the door of the developer of the control, but he asked ridiculous prices, even to *start* looking at the bug. And for all I knew, the control was actually causing the problem. So, even though I was in big trouble, my pride told me not to pay for solving a bug - at least not to the one who caused it.

I continued my hunt, sometimes giving up, sometimes digging deep. I made some small progress, but nothing that completely took it away.

Then, one day, I saw a news posting somewhere that Marco Cantu was starting a new service to help you out if you have any problems in finding solutions in Delphi software. Although the posting focused on new software and thoughts, I contacted him to see if he wanted to dig into this existing problem.

Soon we agreed on a reasonable fee; one for when we would find a solution to the problem and one if we wouldn't. Now, that's confidence: no hassle, no long e-mails, more like a gentleman's agreement.

I made the necessary travel arrangements and went to Piacenza (near Milano) in Italy. After going through some things I found out earlier and showing some of the bug reports to Marco, he concluded it must be a problem with memory management. We grabbed WinDbg (Microsoft debugger) and very soon we cold confirm that there actually was a problem with that. After having a great lunch we worked a little more, but because of other arrangements I had to leave early that day. But, we already made some real progress.

The next day we soon were able to create a small program that reproduced the problem (something I wasn't able to do the previous two years) and after that, the rest was easy. There was a problem with heap memory and it was due to some timing problems inside the control. Working around the problem didn't take more that a couple of lines of code and I can tell you I was elated! Just by having the correct assessment of the problem we were able to come up with the solution I was looking for for two years.

I couldn't have done it without Marco's expertise and - in the end - it was really fun working together on this. Peer programming really is a joy if you make more progress than working on your own (which not always is the case really).

I can recommend Marco to anyone, not only to novice programmers, but to very experienced once also. He has a quick mind, great expertise and is very friendly and makes you feel welcome. I'm sure to contact him again is something comes up that I can't solve alone.

Bye Bart

http://blog.marcocantu.com/blog/bugs_life_roozendall.html

Monday, March 17, 2008

Looking for a VCL Wizard component

First, there is a sort of discussion going on about deleting items from a list. Should you do that traversing forward or backwards to a list? Point to http://17slon.com/blogs/gabr/2008/03/on-bad-examples-and-smelly-code.html to read on.

Back to wizards. Until now I have used JvWizard (from the JVCL components) as my component of choice for implementing wizards. It's a great component, but there are a couple of reasons why I want to abandon that.

First of all: I have a bad smell (...) about using open source code in my commercial software. Although there are professional programmers working on libraries like JCL, I simply want a phone number or e-mail address I can turn to in case of trouble. I don't want to be dependent on the good will of some programmer. I want to pay for my software and (hence) get some rights to support on it. It's a matter of principle.

Second: I want the controls to comply to my user interface. In this case, I want the controls to use DevExpress components. I saw some switches and stuff to turn DevExpress support on in the JVCL library, but the library is simply too complex and large to dig into and find out what's happening where. And, I want to be sure that if DevExpress upgrades its library (which becomes less frequent unfortunately), the wizard components upgrades too.

So, what to do? DevExpress doesn't deliver a wizard component. I can't find another commercial one. So, I'd better create one myself. Maybe there is some commercial value to that in the end too.

I'll keep you posted.

Bye,
Bart

Friday, March 14, 2008

What a differance a machine makes...

Yesterday I replaced our old build machine (the dedicated machine that creates the builds and setups for our partners and products) with a new one. The old one was, well, old. The new one has two processors on board, 4Gb memory and a fast harddisk.

The build time of our largest product (>100Mb in setup, with a lot of files and documentation) took 55 minutes to build on the old machine and a mere 4 minutes on the new one.

I actually decided to start developing on that build machine using a Remote Terminal session and that has changed the experience of programming quite a bit. A recompile of a product takes an average of 2 minutes on my own computer (depening on the number of sources that has changed since the last compile of course). Recompiling the complete product on the new sever takes 11 seconds. That actually changes the experiencing of programming. I'll let the compiler do more work (e.g. check syntax) than before.

I can recommend investing in good hardware to anybody; it's money well worth spent.

Bye,
Bart

Thursday, March 13, 2008

Getting back to blogging...

Since Google is now a customer, I think I should do well to do some blogging on blogger again :- Actually, since they signed up, we are in the middle of some interesting changes in our business model. More about that later.

We are on the verge of releasing version 6 of our software engine. We decided to make some pretty drastic changes to the user interface at the last minute. Due to our object oriented way of programming this won't interfere with our release plan too much. We thought we must use this opportunity to bring the UI back to standards. After all, the last major release was more than two years ago.

After version 6 is released we will release a new product that I think might change the way we work. More about that later again;I've gotta get back to working again. We installed a new server for our automated builds and that machine is about 20 times faster than the old one, so there is not much waiting involved anymore. I used to take that waiting time as an opportunity to do some other stuff, but that's history now. I will have to make some proper time for blogging and stuff like that.

Bye,
Bart