Alex Papadimoulis' Paste As Add-In

I downloaded this addin from Alex's blog today and was instantly impressed with its features. I regularly am doing copy and paste stuff and always have to format the pasted value by hand. Many thanks Alex.

Published at

VB .NET code documentation

I found this article that outlines how to provide code documentation features, that exist in C#, to the VB.Net IDE. The ability to provide an XML file, containing comments, directly from the source code, then manipulate this file into a readable interface, is a great feature. The most likely places where I can see this being used are for internal (i.e. developer, tester, etc.) documentation and for the foundation of external technical documentation (i.e. 3rd party control documentation). All the same, it is very interesting to see this concept for the first time.

Wizards

I've built enough applications to know that the UI acceptable to the developer is completely non-functional for the end user. In my VB6 life I built a number of wizard based work flows for applications. For those of you still working with VB6, I suggest the GHPWizard. It is very robust, offers a large number of events when moving from page to page, and presents all the properties I've ever needed when creating wizards that have conditional work flows. The reason behind this post is that I am currently reading C# and the .NET Platform by Andrew Troelsen. I must say a good read thus far. The best thing that I've seen in it has been the reference to the keyboard wizard. Although he was using it to describe the process of coding from scratch, this is how I will always think of the standard non-wizard UIs that I create.
[Listening to: Super Overdrive - Billy Idol - Devil's Playground (04:18)]

Published at

And we wait

It appears MS has decided to<a href="http://news.com.com/Microsoft+delays+tool%2C+database+updates/2100-1007_3-5628166.html?tag=cd.top"> delay the releases</a> of VS 2005 and SQL 2005 yet again.

Published at

The ***

Found this on <a href="http://www.thespoke.net/MyBlog/Bernard/MyBlog.aspx">Another Day in the Antz Farm</a>.  Thanks to Bernard


You keep asking us who called the cook a bastard;
what we want to know is who called a the bastard a cook.

<i>- Anonymous Australian Soldier</i>

Published at

VB.NET Coding Guidelines

<a href="http://addressof.com/blog/">Cory Smith</a> has published a <a href="http://addressof.com/blog/articles/CodingGuidelines.aspx">manifesto</a> for coding guidelines in VB.NET.

It is a very well thought out document and I agree with almost everything that he has written.  I agree with his <a href="http://addressof.com/blog/articles/CodingGuidelines.aspx#1513">comment on indent sizing</a> rather than the literal suggestion in the document.  Indents need to be consistent for all developers rather than any one specific size.  I have worked in code where there has been 3 different lengths of indents used and it is so very much harder to read.  I also would agree that 2 is a better sizing than the default 4 for the indents.  I work on a 19" monitor set at 1600x1200 resolution and I regularly have code that starts disappearing off the right side of the screen when it is embedded deep in the logic.

I do disagree with the exclusive exclusion of single letter variables.  As commented by <a href="http://addressof.com/blog/articles/CodingGuidelines.aspx#1519">Bill McCarthy</a>, the use of for i = 1 to count is a perfectly valid use of a single character variable.  Once the variable takes on more meaning than a placeholder for a looping function, I agree that the naming should become much more meaningful.

Overall, this is a wonderful document to be used as a starting point.  Some people will adopt it as is, and it will provide them with great standards.  Others will want, and need, to modify it for specific scenarios in their environment.

Published at

Emotional Software

I watched part of Mr. Holland's Opus tonight (Movie Night in Canada -- please bring back hockey!) and one of the things that I started thinking about was how communication is so much more effective when delivered with emotion.  The idea came to me when I noticed how the animation of sign language adds another dimension to a conversation.  We've all had one teacher, lecturer or professor who delivered his/her message monotone.  We complain about these people being boring and often our dislike for the subject they speak on is predicated by their delivery.  Most people we work with, meet on the streets and spend our free time with convey their messages with adequate emotion.  We always remember those that convey their messages in a way that evokes the most powerful emotions from you immediately and repeatedly.

How does this all play into the software realm.  Well, for me, software is a method of communication.  It may be that you are directly communicating with a person or group of people (email, instant messenger) or you may be indirectly communicating with said people (data entry later consumed by the Sales department).  One thing we overlook as developer is that in all software we are facilitating a communication of information between two or more parties.  Ultimately we (developers) must build user interfaces for our software that enhance the communication experience.  Too often software is that monotoned professor that puts us to sleep before they start their lecture.

How do we do it?  That is a difficult question to answer because of the wide variety of user bases that software covers.  Some users may become excited about skinning or theming of the application.  Other's may become attached to software if it provides them with analytical business data in an automated method.  What we as developers need to do is practice one side of the communication process; listening.  We can't just role into a company or department and begin telling the users what they need and how technology will solve their woes.  We need to understand what drives the business, and more importantly what drives the people who will be the daily users of the software.  If we can win over those people the software will be successful in its use, its uptake and its long term viability. 

Ultimately you still need to build software that does what the business needs.  A piece of crap that wins over the end users will only do so for a short time.  End users are much more attuned to the needs of the business than we usually give them credit for.  In the end, if you create a viable package and the end users buy into it whole heartily, you and your team will be recognized as a success.

Published at

Sherlock Holmes

If anyone is Edmonton and your feeling parched, a stop at the <a href="http://www.thesherlockholmes.com/">Sherlock Holmes</a> downtown is a must.  I visited this Thursday past and was more than pleasantly surprised.  The place is a small tudor style building in the heart of downtown, surrounded by towers on all sides.  Once inside, the decore is very traditional with large wood beams and white walls (where not covered by memorabilia).  They had numerous beers on tap, a good selection of liquors and, best of all, a full menu.  True I visited during the <a href="http://www.timhortonsbrier.ca/">Brier</a>, but for a Thursday night the place was packed.  As I have moved only recently to the city from a very small town the selection of beauties that patronized it that night was most appealing.  My company was visiting from a farming community and her review of the male customers was two big thumbs up.

So if you're in, or going to be in, Edmonton I suggest a visit.  And drop me a note, I'll tilt a couple with you.

Published at

Computing in 2004

I saw this <a href="http://www.bearcanyon.com/etc/HomeComputerEvolution.jpg">posted</a> on <a href="http://pluralsight.com/blogs/mike/">Mike Woodring's blog</a>.  Today is the last day that I complain about my 19" CRT.

Published at

Why I like VB

When I was working in Australia, I was asked by non-technial types what development tools we had used to create our software.  I casually reponded with VB, SQL and Crystal.  The blankly looked back and me and, not knowing that VB was a programming language, asked how VB played into our development tools.  After a short discussion it became very clear that VB to them was Victoria Bitter beer.  Here's a <a href="http://vbroadhouse.mvps.org/images/VBsixpack.jpg">6 pack</a> of VB for you.  This is why I love VB.

Published at

Crystal Reports vs Active Reports

This blog post is from 2005 and has not been updated for newer versions of these products.
Update
One of the things I've since found, while using Active Reports, is a very poor implementation of exporting reports. Active Reports offers the ability to export reports to PDF and XLS formats. The PDF export works fine and has never once caused me any concern. Unfortunately, XLS exports are the polar opposite. I created a simple listing report consisting of approximately 5 columns of data with no summaries or groupings. When exporting the data to XLS, a 2 page report was taking in excess of 30 seconds to save. Larger and more complex reports would effectively freeze the computer. In addition, once the export had completed, the XLS file generated was unreadable.

In complete contrast, I have never once had a problem with the export functionality of Crystal Reports.

So, if exporting data to Excel is a requirement of your project, stay clear of Active Reports.



Original

Finally I have gotten around to writing this. For the past 4 years I have worked extensively with Crystal Reports v7, 8.5 and 9. During that time I listened to my co-workers grumble about it and, on occasion, participated myself. Recently I took a new job and my first task was to design and code a reporting module using Active Reports .Net v1.0. Since I'd done similar projects with Crystal, I thought it would be right for me to document differences, troubles and opinions on both.

Reporting Philosophies

Active and Crystal Reports have taken very different philosophical paths in their execution of reports on the development side of things.
Crystal Reports are self contained .rpt files that only require the Crystal Engine to execute. The end user does not even need an application to do this. All they have to do is double click on the report and voila, it displays. Active Reports have opted not to provide this functionality. Their .rpx reports require the use of the ActiveX viewer control, from within a compiled application, to display the report.

Because Crystal Report files are 100% self contained, there is no code behind module to be used whereas in Active Reports there is. The code behind in Active Reports provides you with an event driven coding arena to fine tune the display of the report (more on this later).

APIs

The Crystal Reports API is referenced, in non-.Net environments, by using the craxdrt.dll file. This will provide you with the entire report object model. The object model is quite easy to understand and the model has structural depth where appropriate. Finding data, label or formula fields in a report or sub report can be accomplished through on line of code. There is no need to know the section that the control exists in as all are returned to you in a report-wide collection. The API also supports extensive use of embedded objects to allow you to reference an item without having to set it to a variable first. Loading a report into memory is as simple as a passing the filename to the appropriate property. One of the things that is limiting is the ability to programmatically add and move controls to a report. I believe that there are licensing issues whereby this type of code would require a licensing payment for each installation of the end software.

Active Reports provides a similar API for manipulating reports using code. The redistributable files required are minimal both in numbers and in size. Initializing reports and sub reports is quite simple. Because of the differing philosophies in reporting, Active Reports offers two different ways to open a report. One is to treat the report as an object like you would a form. You initialize it, set it to new and run a show sub routine to display it. The second method is to load the report, using one line of code, from the rpx file. Finding controls, in reports or sub reports, is much more difficult than in Crystal. To accomplish this you must loop over all sections, and all controls in each section, to find the desired control. Unlike Crystal, you can add and move controls in an Active Report with no need to worry about licensing. Performing these actions, however, is not very simple. Adding a single control to the report can take close to ten lines of code.

In this category, the winner by a narrow margin is Crystal Reports because of the ability to find a control in the report with one line of code.

Designer

The designer is the portion of the reporting experience that most of a developers time is spent interacting with. This requires that the designer is intuitive, powerful and aesthetically pleasing. Crystal Report Designer wins this hands down. The one item that I notice daily when using Active Reports is that there is no ability to zoom in on a reports design surface. Having to work at a high resolution is fine when preforming the overall layout of the report, but regularly I find that I am performing fine tuning of control placement and, with the zoom feature in Crystal Reports, there is significantly less eye stress. Both Crystal and Active Reports have smaller nagging issues. Crystal Reports has a "feature" where setting the X, Y, height and width properties does not retain the exact value (variance of one tenth of an inch is common) your enter. The snap to grid feature in Active Reports does not react well to moving of controls using the keyboard arrow keys resulting in controls that no longer are lined up on the grid correctly.

Overall, both products are adequate, but the lack of a zoom feature in Active Reports puts it a significant step behind Crystal Reports for me.

Connecting to Data

One of the things that you will always hear people complain about with Crystal reports is that connections to the database, when dynamically set or the data server or database has changed, will return the error "There was an error retrieving data from the server: Service Not Found". You will not get this type of error when using Active Reports, primarily because the data sources are .Net DataTable objects. I have encountered this error so many times in Crystal Reports that I was considered an expert on fixing it by my coworkers. In my opinion this error is caused by nothing more than a lack of attention to detail by the report programmer.

Everything else about these two products, when it comes to data connectivity, is very close to the same in functionality and limitations. I will give the edge to Active Reports simply because of the frequency that data connectivity errors occur in Crystal Reports.

Viewer

Both the Crystal and Active Reports viewer are very feature rich and stable products that perform well for the end users. My only complaints are with the Active Reports viewer. Although the Active Reports viewer is very powerful, has a nicely structured object model and performs well, it has object model structure that exists for no real reason. For instance, you can add your own controls to the toolbar in the viewer, and when adding them the object model exposes an image property. Completely undocumented everywhere, except the user forums on Data Dynamics' website, is the fact that this feature was never built out. Spending time looking to see if the feature is there, telling your boss that you can add your own icons, and then spending an hour troubleshooting and researching again, only to find out that you've just found vaporware, does not sit well with me at all.

A big thumbs down to Active Reports on this one.

Distribution

Another area of gripe for Crystal Reports is the difficulty distributing the runtimes. I have fought for many a hour trying to make a fresh installation work, only to find out that one of fifty plus files is missing, in the wrong location or is of the wrong version. Part of the problems do arise from the fact that Crystal Reports is bundled with so many different products that a single PC often encounters 2 different versions when installing. Another part of this problem is that Crystal Reports is very bad at maintaining backwards compatibility, so you run the risk of your software or someone else's software not functioning after a new installation.

On the flip side, Active Reports distributes less than five files and, because it has a smaller installation base, you rarely will encounter multiple versions trying to coexist on the same PC.

Although you can alleviate a large number of the Crystal Report distribution issues by using a merge module with your installation software, Active Reports gets the nod here easily due to it's simplicity and minimalism.

End User

The end user experience for both products is fairly similar. The only significant difference is that the is no ability with Active Reports to execute and display the report by simply double clicking on the RPC file. This is fairly important, but the most benefit seen from this feature in Crystal Reports is for those who are running stand alone reports. Crystal Reports wins this one by a nose.

Personal Opinions

There are a number of areas that are important to me as a developer. Using both products I have been asked to build very dynamic and flexible solutions. Because of the reliance on the code behind to perform many tasks in Active Reports, accomplishing the goal was very difficult. Simple things, such as a percentage field, based on two displayed values, required me to write 8 to 10 lines of C# code in the scripting editor. Yes you can do this with the code behind module, but that is only useful if you are compiling the report into your application. In Crystal this is possible through the use of a formula field and, in my opinion, is the better solution for ongoing support and maintenance of the product.

Because report developers spend the majority of their time in the designer interface, this is another area that I look to immediately. That look gives a clear indication that the zoom feature in Crystal Report give it the edge easily.

Although both products have excelled in different areas, I would choose Crystal Reports because of the power for data manipulation that exists in the designer and layout editors.

I have been doing some research into SQL Server 2005 Reporting Services at work, and one of the new features that it will offer is a report viewer that can be added to a WinForms application. While this does present another competitor in this market, I will not comment on it until I have had more time to look and play.

Assimilation

I have become what I fear.  Today while creating a data structure, I created a foreign key field that allowed NULL values.  I know what you are saying to yourself as you read this, so see this <a href="http://igloocoder.blogspot.com/2005/01/relationship-hell.html">post</a> to know that I abhor this practice.

Please let me find my way out of the quagmire of standardization vs. good practices.

There was an interesting post today on <a href="http://geekswithblogs.net/ronp/archive/2005/03/08/25767.aspx">Ron Phillips blog</a> commenting on coders who have higher standards than their bosses.  I'd like to say that the issues that Ron discusses can be present due to an overall company culture of technical ignorance.  I have personally had to lower my professional standards at my current position so as to provide the functionality required using the tools provided.  More frustrating than lack of knowledge or caring is a perceived knowledge that makes decisions based primarily or solely on the cost of a solution.  It is one thing when the solutions are approaching and exceeding 6 figures in cost, but another entirely when the solutions rejected based on expense hardly exceed 4 figures.

Published at

VS .Net 2003 IDE wackiness

For the past couple of days, we've run into this problem at work where the VS IDE was acting really weird.  If you edited something in the design window, and went back to the code window, none of the intellisense features would work.  Also the Undo Checkout feature wouldn't work correctly and at one point VS took it upon itself to check out about 8 to 10 files.  Today was supposed to be build day, but, needless to say, it got postponed in favour of finding the culprit.

We searched high and low and found little if anything about such things.  Most of what we found was related to Visual Studio 6.  Of course we first (2 days ago) went to the <a href="http://msdn.microsoft.com">MSDN</a> site and found nothing.  Weren't we not-so-pleasantly surprised when I stumbled on <a href="http://www.eggheadcafe.com/ng/microsoft.public.vsnet.ide/post10156363.asp">this article</a> today.  Not only does it describe our scenario to a tee, but it also quotes a <a href="http://support.microsoft.com/?id=839293">MS Knowledge Base issue </a> as part of the solution.

For those of you who don't have the patience to traverse many websites here's the solution.

Open the licences.licx file in a text editor (notepad works great). 
Remove any blank lines from it (don't forget to check the end of the file for blanks) and save.
Restart Visual Studio.

Thank god I found it since I was the last person to check in the licenses.licx file.

Published at