Back in June, I posted that I was attempting to become a better developer, in 6 months, by accomplishing 3 goals. Well, it's been more than 6 months, and I thought I'd post an update.
1) Complete 3 OMSE courses.
Well, I did great on this one, having finished OMSE 522 in the summer, and OMSE 513 and 535 this fall. All three were great courses, and I learned a great deal. For the next 6 months, I intend on completing another 3 courses.
2) Add 1 tip, trick or tool to this blog per week.
Well, if good intentions were the name of the game, I'd be winning. However, as it turns out, I was only able to crank out 2 tips and 2 tools. Because I am so busy with work and school, I'm changing this goal to be 1 tip/trick per month. Hopefully, this is more realistic, and I'll be able to keep up with it.
3) Comment on at least 5 forum questions per month from the various forums that I usually lurk in.
I actually did pretty well on this one, posting in some ASP.NET and Telerik forums. I will keep this goal active, and continue posting.
Today, I had the pleasure of trying to use CSS to style some ASP.NET ImageButtons. One aspect of the style that we wanted was a border around the button on a mouse hover. However, no matter what I tried, I could not set a border on the button with CSS. After a bit more digging, I found out that ASP.NET is trying to help us by inserting an Inline style of border-width:0px if we haven't defined a border-width for the ImageButton (which, of course, we have not, as we're using CSS!). So, I went to faithful Google, to find an answer.
The best solution I was able to come up with was to make my own CustomButton that inherited from ImageButton. In the CustomButton, I override the BorderWidth property, as seen below:
1: Public Overrides Property BorderWidth() As System.Web.UI.WebControls.Unit
2: Get
3: If MyBase.BorderWidth.IsEmpty = True Then
4: MyBase.BorderWidth = Unit.Pixel(0)
5: End If
6: Return MyBase.BorderWidth
7: End Get
8: Set(ByVal value As System.Web.UI.WebControls.Unit)
9: MyBase.BorderWidth = value
10: End Set
11: End Property
The key here, is to set the BorderWidth to zero if it's not set, to prevent ASP.NET from setting the inline style for us.
We all know that IE 7 is a big letdown, and Fire Fox is still the best browser, for tech minded people. Today, however, I became aware of an add-on to IE 7 that helps level the playing field. It's called IE7Pro. I haven't done extensive testing with this plug-in, but what I've seen so far is very promising.
I've been using Reflector for .NET for a while now to help me debug issues. I recently became aware that Reflector has support for AddIns. I haven't checked all of them out yet, but I must say that the CodeMetrics add in really rocks. It has metrics for Cyclomatic Complexity, Code Size, counts for Methods and many others. I'd love to see this add in enhanced to have additional metrics, such as maintenance complexity, and the ability to run metrics from the command prompt.
I've had to do some graphics work lately, and was looking for an alternative to GIMP, when I ran across paint.net. So far, I'm really impressed. This little app is FREE, currently under development (meaning it's getting new features all the time) and was really simple to use. Give it a try!
I am a huge fan of Continuous Integration and have been using CruiseControl.NET (CCNet) successfully for the past year. Recently, I've run across a limitation in the way the cnet.config file is used. Normally, when a developer needs to reuse some piece of information, such as a file path, he will put this information in a Property or Constant. However, unlike MSBuild files which supports a PropertyGroup, the ccnet.config provides no support for Properties or Constants.
For example, in my ccnet.config file, I need to specify the artifactDirectory, where build artifacts will be stored.
<artifactDirectory>C:\Projects\Artifacts\MyFirstProject</artifactDirectory>
Let's say I have 10 projects to build. I will need to copy and paste the path above 9 more times. This "copy and paste" mentality introduces too many places for error for my taste. So, after searching the net for a while, I finally found a solution. Enter the XML Entity.
So, now, we can do the following.
Enter this at the top of the ccnet.config file:
<!DOCTYPE cruisecontrol[
<!ENTITY ArtifactsDirectory "C:\Projects\Artifacts">
]>
Use the XML Entity in place of the hard coded string:
<artifactDirectory>&ArtifactsDirectory;\MyFirstProject</artifactDirectory>
<artifactDirectory>&ArtifactsDirectory;\MySecondProject</artifactDirectory>
etc...
I was recently “called out” by
George Clingerman to join The Brotherhood of Becoming Better Developers. Although I do not have the energy level George has, I will accept the challenge.
Here is my list of goals for the next 6 months:
1) Complete 3
OMSE courses.
I am currently enrolled in the masters Oregon Masters of Software Engineering, so this one goes without saying.
2) Add 1 tip, trick or tool to this blog per week.
This one will be tough, as I never post on blogs.
3) Comment on at least 5 forum questions per month from the various forums that I usually lurk in.
This is equally as hard as #2, as I love to lurk.
Hopefully I can help spread the word. As I do, I will update this post with the others I've pulled in.