Archive for April, 2008

10 things to look for when searching for .NET controls

One of the best ways to speed up the development of that project you’re working on is to use third party libraries controls. In particular, .NET has had an absolutely amazing number of third party controls. Microsoft has made it amazingly simple to build re-usable code.

image

Buying third party controls will allow you to focus on your unique functionality without reinventing code that others have already planned, tested, and are maintaining.

Here are the top things that I look for, in no particular order:

  1. Does the author have a demo page or application? If I’m looking for a type of control with a lot of competition, I’ll use this to immediately exclude some of them. If you have a unique control and I don’t have many options, I’ll probably still check it out, but you better hope I can set it up quickly.
  2. Is the control reliable? Can I break it? Once your software goes out, the users are equivalent to monkeys in many respects. If there is a bug in a control you’re using, they’ll find it. I would rather not have to deal with that, so I take a good look at reliability.
  3. Does the control play well with others? Some control manufacturers build amazing controls that work great with the other controls they sell. The problem is, if you mix and match, they often don’t play well. With ASP.NET controls, take a look at the rendered output and make sure it’s elegant and well thought out.
  4. How much does it cost? This is obviously going to factor in different amounts based on your project and situation. If the control costs less or more than you expect, try to figure out the root cause. If it’s expensive, I would expect amazing support and documentation. If it’s cheap, I would make sure that it’s because the control focuses on doing what it is supposed to. For the price, the control needs to save me time, which should translate into savings for the project.
  5. What kind of support is available? Great support can make up for a lot of shortcomings. I’ve used controls that were buggy, but I basically had one of the control developers holding my hand. They were able to fix it quickly, or tell me what I was doing wrong. Support can come in a variety of ways:
    • Phone support – Is it paid or free? If you have to pay, is it per incident?
    • Email support
    • Forums with support monitoring – How actively monitored is it? Have everyone else’s questions been answered.
  6. Is the author going to be around tomorrow? If you want to be able to get updates or support, will the author still be around to provide them?
  7. Does the control take over my computer? I don’t like controls that are much more than a DLL, or a set of files. I don’t like having to “install” your control on my computer. If it’s difficult to install, the probably means it going to be difficult to figure out how to deploy it. I want XCOPY deployment. I don’t want to mess around with GAC registration and manual licenses.
  8. Is the license overly restrictive? Many licenses require your first born child to use them in a real world. I prefer a license that lets me use it in pretty much any way I want. That’s why I’m spending the money. I don’t have any problem with tiers (per site, per server, etc). If you do have licensing tiers, allow me to upgrade and pay the difference. I also want to be able to have all of our developers actually compile the code without having to buy additional licenses. Some controls require a license for each developer, regardless of whether or not they’re working on the feature that uses it.
  9. How much are upgrades? I have seen a few controls that offer free upgrades for life. Personally, I’m about twice as likely to buy those. Not having to justify paying for an upgrade is great. Companies like to buy things and forget about them. Even if it’s not free to upgrade, it’s nice getting good discounts for being an existing customer.
  10. Is the control easy to use? This is obviously critical since you’re buying the control to avoid having to write the functionality yourself. If it takes 10 hours for you to write the code to use the control, and it would have taken 10 hours to write everything yourself, you probably haven’t gained anything.

Here are some great places to get started:

DotNetKicks Blogger integration that actually works!

I found a couple of posts describing how to embed the DotNetKicks "kick it" button into your blogger template:

However, they DON’T work! It took me a little while to figure it out, because that code was working for the people that posted it. It turns out that they were posting the code in a blog post, and they were not encoding it so that it would show up correctly for the browser.

Blogger

This is the actual code that you need in your template:

<p><a expr:href='&quot;http://www.dotnetkicks.com/submit/?url=&quot; + data:post.url + &quot;&amp;title=&quot; + data:post.title' expr:id='data:widget.instanceId + &quot;_kickit&quot;' rel='nofollow'><img alt='Submit this story to DotNetKicks' expr:src='&quot;http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=&quot; + data:post.url'/></a></p>

NOT this:

<p><a expr:href='"http://www.dotnetkicks.com/submit/?url=" + data:post.url + "&title=" + data:post.title' expr:id='data:widget.instanceId + "_kickit"'><img alt='Submit this story to DotNetKicks' expr:src='"http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=" + data:post.url'/></a></p>

I tested the corrected code, and it’s working great!

Frog’s Brain has great instructions how to use this code:

"To add the tag into your post template go to the Template tab under your Blogger accounts Customization section. Select "Edit HTML" and check the "Expand Widget Templates" check box. Scan the template until you find a line that looks something like "<p><data:post.body/></p>". That is where the Blogger templating engine inserts the body of your post. I inserted my tag to appear directly below the body of my posts but you can play around with whatever position you like by using the "Preview" button. You’ll have to save the template to apply the changes when you are satisfied."

Deadlines are bad, goals are good

Deadlines are a fact of life. If someone throws a football at your face, you have a certain amount of time to block it before the ball smashes into your face. Does software planning work the same way? That depends on the type of software you’re writing.

On Time

If someone else is assigning your deadline, you don’t really have a choice. The IRS might need that new tax software in time for the tax season, or the whole government will come crumbling down. In that case, you pretty much have to get it done no matter what. To miss the date would mean catastrophe. Features will need to be trimmed as necessary to complete the job. This type of planning is known as deadline driven scheduling.

Boy that sure sounds great! Pick a due date, and it’s done! Why wouldn’t everyone do that? Well, for one, it only ensures that your software goes out on time, not that it’s good, or that it does what you want. Most people choose this method under the incorrect assumption that they’re helping the project, when they’re severely hurting quality.

The alternative method of planning a software release, is to pick your features, and calculate a release date. If you have actually made a conscious decision to make sure that your features get completed, and get completed well, the due date is actually a goal. By making it a goal, you can relax a little bit. If you’re implementing a new feature and you estimate it will take 2 days, you might realize that to do it right will take an extra day. Hopefully you’ll have a good project lead that can make prioritization decisions, make sure everyone stays on task, and can accurately plan in some padding for things that were not in the original design. In the end, you’ll end up with a good product.

I think this page makes a good point:

“Creating software is both an art and science. It is an art because there is quite a bit of creativity involved. It is a science because it ultimately involves engineering a logical set of instructions.”

It should be very obvious that creativity is impossible to schedule, and even with a good plan, good ideas are missed.

Can you have your cake an eat it too? Of course. The theme is speed, quality, and price. You can pick two. This post assumes that it’s a compromise between speed and quality, on whatever fixed budget you have. If you have a virtually unlimited budget, then there would obviously be more choices available to you.

Of course, as with anything, these are simply guidelines. People haven’t been writing software and perfecting software engineering for hundreds of years. We’re using an evolving process, that is undoubtedly in its infancy. If you’re using something that works, good for you! If you care to take the time, leave a comment and let me know what you’ve learned while writing software.

More reading:

ASP.NET LinkButton and SEO

A common question that comes up, is what do LinkButton’s do for SEO (Search Engine Optimization)? Well, let’s take a look what a LinkButton actually renders for HTML:

<a href="javascript:__doPostBack('ctl01','')">Click me!</a>

Notice that it’s simply a standard hyperlink with a JavaScript call. Typically, the search engines are only going to look at your HTML. They’re not going to evaluate the JavaScript. Doing so would be a big can of worms.

WWW Web

So basically, the LinkButton is going to be invisible to the search engines. At most, they might look at the words in the link text, and consider them as part of the rest of the content.

Remember, the purpose of the LinkButton to be a replacement for the ASP.NET Button control, but with the look of a hyperlink.

Ext2IFS Can’t read a drive from a RAID array

I converted my Ubuntu home server to a Windows 2008 Server. The biggest challenge of the conversion was the 400GB RAID 1 array, which was Linux software RAID based. I threw caution to the wind, and figured that I could convert it after installing Windows Server 2008.

I was sort of banking on the fact that I could use the Ext2 installable file system for Windows to read one of the drives in the array. For some reason, it was unable to read the disk. I had assumed that since the drives were simply mirrors of each other, it would be able to read one by itself. I was wrong.

My solution was to create an Ubuntu Desktop virtual machine, and use it to mount the physical partition. I was then able to copy the files over the virtual network adapter.