This blog has been moved to Redwerb.com.

Showing posts with label software. Show all posts
Showing posts with label software. Show all posts

Monday, July 16, 2007

SlickRun Review

Summertime has really effected my blogging schedule. I've been spending my freetime working on a website for my neighborhood and building a garden wall. I'm almost done with the wall, but we might end up extending it another 30 feet, so we'll see.

Just recently I've started using a tool called SlickRun. It's a very simple tool that is essentially just a textbox (no form, buttons, etc). It allows you to type in commands similar to the Run (Win+R) dialog built into Windows. The cool thing about SlickRun however, is that you can also add "MagicWords" to it so that you can perform more complex commands with a single word.

SlickRunConfig There are plenty of configuration options for SlickRun to get it to look and work the way you want (see the screenshot to the right). You can even setup SlickRun to run instead of the Windows Run dialog. This is a little tricky since you have to edit the config file (I'm not sure why this setting isn't in the SlickRun config dialog), but once you set it up, when you press Win+R you get SlickRun!

Instructions to setup SlickRun to handle Win+R in Vista
  1. Install SlickRun
  2. Open Windows Explorer (Win+E)
  3. Navigate to your profile directory (C:\Users\<MyUserName>\AppData\Roaming\SlickRun) - AppData is a hidden folder, however, you should be able to type in the path directly.
  4. Open the SlickRun.ini file in your favorite text editor
  5. Locate the GrabWinR setting and change the value to 1 (GrabWinR=1)
    SlickRunIni
  6. Save the changes

Thursday, June 14, 2007

Making the Build

AutomatedBuild I am of the belief that an automated build process is perhaps the most essential element in producing a quality software application. The build process can be used to enforce good practices within the development team and also detect any issues within the application in a timely manner (the sooner you know about a problem, the less code you have to look at to determine what caused it). Even a small team with a simple application can benefit from an automated build process.

Recently I've gotten the opportunity to recreate the build process for the company I work for. The product is over 5 years old, is fairly large and complex (well over 200 separate .Net projects as well as database and legacy code), and has grown a fairly complicated build process using a combination of batch files and custom executables.

The main reason for recreating the build process is due to the difficulty of maintaining it. There were quite a few batch files and it wasn't easy to run. We averaged a build about once a week (builds should be run several times a day, nightly at most) and the unit tests weren't run very often and if they were, the results often times weren't published (it could be months before you find out a unit test no longer works and then who knows what changed that broke it).

I started building my own build software using Windows Workflow (see my April 28th post, Windows Workflow and Your Next Build System). Although it probably could work and is a great way to learn Windows Workflow, I soon remembered one of my life rules, always use the right tool for the job.

I decided to try FinalBuilder instead and boy am I glad I did. FinalBuilder (FB from here on) is a great build tool. They have dozens (maybe hundreds) of different actions (that's what they call activities or tasks) available to use, such as MSBuild, get from VSS, run SQL, update AssemblyInfo, NUnit, send email, etc. They also allow you to write script (either VBScript or JavaScript) that is run during the build. If that isn't enough for you, you can also create your own custom actions using .Net (or other supported languages).

I've looked at several of the build tools available out there today (especially the free ones :) such as MSBuild and NAnt and the thing that strikes me about these tools is that they seem to be designed for full time build engineers. I don't have time to figure out how to setup these tools let alone write a complete build process using them. Perhaps even more frustrating is that I actually did take the time to learn MSBuild at one point and had done some interesting things with it, however, I couldn't tell you the first thing about MSBuild anymore. I wouldn't use MSBuild to create an entire build process for the same reason I wouldn't use Perl to write an entire ERP system (write only code doesn't work well in a complex, constantly evolving product).

I am not sure if it would have taken longer to create the build process using another technology (such as MSBuild or batch files) or not, but the big benefit in using FB is in the ability to maintain it months later and, if I'm lucky, by somebody other than myself (I definitely don't want to be the "build" guy).

I'm sure there are other great build tools out there. If you know of one, feel free to leave a comment (I always love to find out about new tools :). I plan on writing another article within the next week or two that has more concrete tips for creating a build process (perhaps even some source code), so stay tuned.

Sunday, June 03, 2007

Dispatch - Visual Studio 2005 FTP Upload

I've been working on a website for my home owners association (HOA from here on) recently (converting it to ASP.Net). The website includes tons of documents (pdfs and such) and pages (it includes PHPBB). As you can probably imagine, whenever I make a change to the site, I need to upload it to the web host.

Now perhaps I didn't have it configured properly, but I found the FTP support in Visual Studio 2005 (VS from here on) to be woefully inadequate. Perhaps I didn't have it configured right, but it seems that VS wanted to upload the entire website every time I published it. Not only that, but VS completely froze while it did this (no feedback to the user on progress and couldn't do anything else while it was uploading). This might be ok if you only have 1 or 2 files, but when you have hundreds of files, some of them quite large, this is absurd.

The HOA site is currently hosted by Yahoo! Small Business hosting (no, this is not where the ASP.Net 2 hosting is going to be). Yahoo! provides a tool called Yahoo! Site Builder to help build your website. Overall I find the tool crap (though perhaps it is great for users without several years of web development experience), however, their publishing mechanism is great. It keeps track of the files that have been modified and only uploads those.

Well, obviously the VS FTP support was not going to work for me, so I went to Google and hunted down a tool that would provide better support. I found Dispatch. Dispatch is a simple plug-in to VS that keeps track of which files have been updated and allows you to upload those files to the server without causing VS to freeze while you do so and also provided nice feedback on the progress as well.

Dispatch also provides the ability to download remote items as well. Unfortunately it's not obvious how to do that. You first need to right-click on a folder and select "Show Remote View Overlay" and then you get download options. I can understand the need for that (it needs to establish the remote connection in order to do that), but it would be nice to have some sort of contextual help to let you know what is going on. For instance, provide the same context menu whether or not they have connected. If the user hasn't connected yet, prompt to see if they want to.

I don't think that Dispatch would work well in a team environment, but I doubt if a project being developed by a team would require FTP upload. At $15, Dispatch seems to be priced for hobbyists anyway. Overall, I think that Dispatch is a great plugin for VS. It's what Microsoft should have done. If you are working on a website and don't require the formality of a complex build process, Dispatch will make your life much simpler.

I should mention that I also use Beyond Compare for FTP access to the HOA site. It allows me to view what files are different between the local and remote copies and also allows me to view what those differences are. Very handy when you aren't sure what version is accurate or if you don't remember what you changed. Now if only Dispatch had a mechanism to hook up a file diff tool such as Beyond Compare, that would really be something!

Thursday, May 31, 2007

Windows Live Writer Beta 2 Now Available

The last Windows Live Writer blog post was dated November 21 10:41 AM. That is until yesterday, May 30 2:59 PM, when they announced a new beta was being released (Windows Live Writer Beta 2 Now Available). I haven't had a chance to try it out yet, I just found out about it, but I am looking forward to it.

The big question is why did it take over 6 months to update their blog much less to just release another beta? Is this project just one guy working on it in his (or her) spare time? Or is this a serious project that Microsoft is committed to? It would be nice to know the answer to this question so I can properly set my expectations.

One of the new features that I'm looking forward to is the support for Blogger labels. Currently I have to edit my blog post in Blogger after I've posted it using Live Writer in order to apply the labels. This is problematic for a number of reasons. One, it's a pain. Two, I often forget. And three, it messes with my web tracking.

I will definitely be posting a review after I've had a chance to play with it. Stay tuned :).

Friday, May 18, 2007

New Browser Stats

The last time I posted browser stats (back in January, Browser Wars), Firefox was in the lead by a fairly healthy margin (Firefox had 57% followed by IE at 37%). New stats shows that IE has regained the lead (please remember that this is a developer blog so these numbers are not representative of the Internet as a whole).

1. Internet Explorer - 53.49%

2. Firefox - 40.37%

3. Opera - 3.54%

4. Safari - 1.35%

5. Mozilla - 0.62%

6. Mozilla Compatible Agent - 0.31%

7. Camino - 0.21%

8. Netscape - 0.10%

Monday, May 14, 2007

Software Usability

I remember playing bumble-bee soccer (see footnote below) when I was a young kid. I was never around the ball, I was always looking for the position that needed to be filled, usually somewhere between the swarm and the goal. When I look back at most of the activities that I have been involved in, I see the same pattern being repeated, I always look for the most important task that is being neglected. Sometimes that has meant stepping on somebody's toes, other times I have been seen as a savior :).

Within the last couple of years, I have become more and more interested in software usability. Based on my soccer experience, this is probably because the company I currently work for has never concerned themselves with usability (or rather, the CEO and president were the usability experts, period). We never did usability testing, other than a demo to them. In fact, we never even bothered having a review process to make sure areas with similar functionality functioned similarly. Within the last year we were purchased by another company that alleges they are more focused on supporting existing customers than on attracting new ones (the difference as I understand it is more focus on the user and less on a feature checklist).

In my career I have come to the conclusion that most software sucks. In fact, it seems that the quality of software is inversely proportional to the price. Although the field of software usability is not new, it doesn't seem to be getting as much attention as it should (what could be more important than the user interface?). The benefits of creating usable software are well known. For the end user the benefits include increased productivity, reduced training, improved data entry accuracy, and reduced anxiety over fighting with bad software to get the job done. Their are also many benefits to the software company such as increased sales (to both new and existing customers), ability to charge a premium for the software and/or service, and decreased customer support costs. Although there is a cost to usability (you have to commit to it as a company, train developers, testers, and managers, and perform some type of usability studies which should include talking to real customers), based on what I believe to be true (from reading and limited experience), the benefits seem to far outweigh the costs.

DOET-2002cover I have recently read the book The Design of Everyday Things by Donald Norman. This seems to be the beginners handbook of usability. It lays the groundwork for understanding usability from a designers perspective. Although Donald is an academic (professor of cognitive science at the University of California), the book is well written and understandable even for those without a PHD. The book was originally published in 1988 and was recently reprinted with few modifications. One of the things I enjoyed most when reading his book were the predictions he made, some of which have come true already and others we still have not reached yet. If you are interested in learning about usability, I would recommend starting with this book.

The next book in my queue is The Usability Engineering Lifecycle: A Practitioner's Handbook for User Interface Design (Interactive Technologies) by Deborah Mayhew. This book is a bit larger and seems to go into a lot of detail on how to actually do usability. Of the few pages I've read so far, it seems like a good book :). Of course, I also read many different blogs that frequently include posts on usability. One of my favorites is Jeff Atwood's blog, Coding Horror. Jeff writes often and well and has become a minor celebrity within the software industry for posts such as The Programmer's Bill of Rights. He frequently writes posts on software interface design and usability and has a number of people who comment on his articles. He has also been featured on some popular (for developers anyway) net casts such as .Net Rocks.

Bumble-Bee Soccer - When young children play soccer, it resembles a swarm of bees around the soccer ball.

Saturday, May 12, 2007

Team Foundation Server is Cool, but a Bit Underwhelming

I had the opportunity to evaluate Microsoft Team Foundation Server (TFS from here on) over the last week and I have to say, I'm not as excited about it as I was before. Don't get me wrong, I think TFS is compelling, it's got a lot of great features and they seem to be very well integrated with one another and with Visual Studio. However, it seems to be suffering from an acute case of versiononeitus (though I don't think it's terminal).

My main object was to evaluate the Team Foundation Build (TB from here on) for our product. TB is based on MSBuild. Anything you can do in MSBuild you can do in TB. As far as I can tell, TB is just a way to start a remote MSBuild process and report the results. It is well integrated into the IDE which makes it easy to know the status of the build at any given time.

Unfortunately, because it is based on MSBuild, it is very difficult to configure. MSBuild is a very powerful build system, however, it is not exactly simple to understand. For companies that have a full time, dedicated build engineer, MSBuild is probably great, otherwise, it is difficult to learn and it's easy to forget if you don't use it often (we tend to update the build process about once a year or so). I was not able to find a tool that would allow me to configure an MSBuild project, hopefully somebody is building one.

I have a love/hate relationship with the version control (VC from here on) in TFS as well. It has some very nice, advanced features that are missing from VSS. One of my favorites are shelves. A shelf is a place to put code before it is actually checked in. Other developers can access the shelf if they want (which is great for buddy testing).

Unfortunately, it is lacking in some basic usability features. For instance, depending on context, there are many different menu options that can be disabled and it's not always obvious why they are disabled. If you are used to VSS, trying to figure out how to create a directory in source control can be very frustrating. I think you have to map a workspace (which is similar to working directories in VSS, but slightly different), but it took me a few days to figure that out (and I'm still not sure if that's it or not). If this is the case, why do they have the menu option disabled? Why can't I just map a workspace when I'm creating the directory?

One of the nice things about VSS is that the directory structure in VSS does not have to match your directory structure on your local machine. Our VSS structure at work tends to be a bit deep for the local machine, so we map a couple of different VSS directories to the same directory on the local machine. When I tried to do that with VC, it refused to allow me to do that.

I did not evaluate the issue tracking, but I did glance at it. It certainly seems to be a much better issue tracking system then the one we're using at work now (it's a home-grown system).

If my company was more willing to spend a lot more time and money on TFS, I'm sure I would be able to get it working to suit our needs very well, however, they're not. I had about a week to evaluate it and put something together that would be functional.

Overall, I really like TFS. There are many products on the market that do similar things and are well integrated, however, none of them seem to do everything (most of them miss the build aspect). I am really looking forward for version 3 (the magic number in software) of Team Foundation Server.

Saturday, April 28, 2007

Windows Workflow and Your Next Build System

Recently I've been messing around with the new workflow foundation developed by Microsoft and included in .Net 3.0. It is very cool! It has great design-time support, it's easy to extend with your own custom activities, and it seems to be very well documented.

At first I was a bit put off by the fact that it doesn't include a simple, run-time configuration process. They do give you the ability to host the designer in your application, but it appears that you have to write a lot of code to make that work (I didn't actually try it, but I did glance over the documentation). However, as I thought about it more, it seems that Visual Studio is a great way to reconfigure the workflow. It might be a bit of overkill for a non-technical person who just wants to reconfigure one or two of the activities, however, if they just go to the workflow designer, it seems pretty easy to use (but what would I know, I'm a developer :). On the other hand, if somebody that is more technically inclined wants to extend the workflow with code, they can do that easily as well.

If you are new to Windows Workflow, I think a build system is a great starter project. It's simple (as far as workflow is concerned anyway), it fits into the workflow concept very well, and it will make your build process easier to configure and extend (if your build process is anything like our current one, as long as it's working, the last thing anybody wants to do is touch it). Even if you don't use it for the build process for the entire product, it can make many tasks that you have to perform on a regular basis on your computer easier (such as preparing your machine for a new build).

Before you can start building a workflow, you will need to install .Net 3.0 as well as Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation). This will provide the necessary pieces that Visual Studio needs to create workflows.

For the build system I'm creating at work, I created a Workflow Activity Library (a project template available in the New Project dialog) that contains most of the activities that I want to use, such as GetFromVSS, CopyFiles, RenameFile, AttachDatabase, RunSQL, etc. Each activity has one or more properties that allow it to be configured (for example, RenameFile has a property for the path to the file and another property for the new name of the file). As you can tell, these are just building blocks for a build system. For the build itself, I create a Sequential Workflow Console Application (this is a new project type installed with the VS 2005 workflow extensions). If you have several different types of builds (such as a developer build, test build, and production build), you can create a separate project for each one.

So what makes Windows Workflow such a great tool for a build system? Other than making configuration easy, you can also disable activities. This is very useful, especially when testing. There are several parts to the build system that I'm working on (for example, compiling the code and building the database), each one is made up of several activities. I can simply create an activity that contains all the activities for that part of the build and, if I don't want to run it, I can simply click on the parent activity and set it's Enabled property to False.

The diagram below shows a very simple workflow diagram in the Visual Studio Workflow designer. It includes two activities, one of the activities has been disabled. As you can see, the Workflow designer is very similar to the WinForm designer. You start by picking the activity that you want to run from the toolbox (on the left) and dragging it onto the workflow. The workflow will show you the places that you are allowed to drop the new activity. Once you drop an activity onto the workflow, you can set the properties associated with it using the property window (on the right).

If there is interest, I might be willing to write a more detailed article for Code Project that includes sample code. So if you want to read more, make sure you leave a comment.

Tuesday, April 17, 2007

Silverlight now available

On April 16, Microsoft unveiled Silverlight (formerly known as WPF/E). From the website...
Silverlight is a cross-browser, cross-platform plug-in for delivering the next
generation of media experiences and rich interactive applications (RIAs) for
the Web.

This could be the Flash killer, though it will probably take a few years to get there. I haven't actually seen the development environment for this, but if you can use .Net (or something very similar), Visual Studio 2005, and Expression Suite to build it, then this will be very compelling for a large number of developers.

Tuesday, March 13, 2007

Portable Applications

If you haven't heard yet, portable applications are the new cool thing! Portable applications run from a portable device (usually a USB thumb drive). Typically you install a application launcher on the device and this launcher automatically runs when you connect the device to a computer.

There are many different applications that can be run from a portable device. Some of the more interesting ones include Firefox, OpenOffice (similar to Microsoft Office), Thunderbird (a news/email reader), and many more. One of my favorites is RoboForm2Go (password manager, discussed below).

There are also a number of different application launchers. Portable Apps seems to be a popular (and free) launcher. U3 came installed on the thumb drive I just purchased and it seems to work fairly well. I'm not sure about Portable Apps, but U3 requires a special installation format. However, if you know an application can be portable, you can easily create a U3 installation package by downloading a program called PackageFactory for U3 (ironically, this is not a portable application).

I've been wanting to use portable applications for awhile now and last night I took the plunge. For under $50 I got a 2GB thumb drive that came with an application launcher (U3) and several applications. My primary goal was basically to have a portable password manager and news reader.

The password manager was the most important thing. I have been using a password manager called Billeo for several months. It was nice that I didn't have to remember all of my passwords for all the different sites I visit, but Billeo is basically an Internet bill paying service and they use the password manager to try to get customers. I don't mind the marketing gimmick, but it did mean that the password manager included features I didn't intend to use and thought that perhaps a software company that focused on a password manager might have a better password manager (though Billeo did work very well). Plus, Billeo is not a portable app, so I had to install it on my machine at home and work and then train it (login to a website and save the password) in both places.

The thumb drive came with a password manager, but it didn't work very well. I ended up installing RoboForm2Go instead. RoboForm2Go has all the features I expect in a password manager. Basically, it automatically fills in passwords for me :). It also can be used to populate web forms with common data (such as shipping/billing info). The data can be secured with a master password so that in order to populate the form, you must enter a master password first. With passwords you can protect some and allow others to just automatically populate (for instance, you might want to protect your bank password, but you might not care about your favorite news sites password). RoboForm2Go also includes the ability to have different identities. This is used primarily for filling out forms. You might have one identity with your personal information in it and another for your work information (address, phone, credit card number, etc).

Thunderbird was the other important portable application for me. I subscribe to a number of RSS feeds. Thunderbird has been my RSS reader of choice because I like the preview window. However, the problem with the standard version is that if I wanted to read RSS feeds at home, I wouldn't be able to know which feeds I've already read. Portable Thunderbird solves this problem. I can open Thunderbird from my thumb drive at work or home without having to deal with this issue.

So what portable applications do I have installed?

  • CruzerSync U3 Edition - Backup software that came with the device. I'm not sure if I'll use this or not. It's nice backup software, but I've got a USB backup drive for that (which I believe this is the same software I use for it, though named differently).
  • Process Explorer - This is an advanced version of Windows Task Manager (Ctrl+Shift+Esc). I use it mainly to make comments on what is running on my machine. This allows me to know what all of the software on my machine is for (I hate unknown processes). What I am hoping for (but haven't verified yet) is that the comments are stored in a way that are portable with the application. Probably not, but we'll see.
  • Snippet Compiler - This is a very cool .Net tool that allows you to quickly and easily test out code without having to create a project or anything like that. I just found it and haven't had much of a chance to play with it, but it seems interesting.
  • Color Cop - Allows you to pick colors off of the screen. Very handy when trying to match a color. It gives the value in many different formats so it is easy to import into just about any application that is requesting a color code.
  • RoboForm2Go - This is a password manager (discussed in detail above).
  • Lutz Roeder's .Net Reflector - This is a must-have tool for any .Net developer. It allows you to decompile .Net assemblies and read the code in whatever .Net language you choose (C#, VB.Net, etc). I have used this frequently to learn how different parts of the .Net framework work.
  • Notepad2 - Very similar to Notepad (the text editor built into Windows), but with a few extra features and more reliable. What's nice about Notepad2 is that it is not trying to be a code editor or anything else.
  • avast! antivirus - This is a free antivirus utility. It has gotten a lot of positive feedback, but I already have an antivirus, so it's unlikely I will use it.

Tuesday, February 20, 2007

Fog Creek Copilot

I had the chance to use Copilot this evening. According to the website, Copilot is remote assistance software that is easy to install and use and works through most firewalls. Of course, I put this to the test this evening.

My uncle was having some computer problems. He's fairly new to computers and has a hard time understanding the basic concepts of the Windows (every software engineer needs to talk to somebody like my uncle in order to understand how bad software usability truly is). He's been trying to install a Hewlett Packard printer and it refused to install. He didn't get anywhere with Hewitt Packard phone support, which they offshored to India (see my earlier post today, and yes, the article mentioned is written by the co-founder of Fog Creek software who makes the Copilot software I'm reviewing), so he called me.

I quickly realized that I was not going to be able to help him over the phone and he lives a few states away from me so I couldn't exactly drive to his house. I needed a remote solution. There are several to choose from and some of them are free, but the one I picked was Fog Creek Copilot. I picked it because I enjoy reading Joel on Software and they seem like a good company to do business with. They also claim that their Copilot software is really easy to use which was very important in this case.

I was happy to find they had a test drive that would allow me to control his computer for a couple minutes in order to make sure it would really work before I had to give up any credit card information (that really helped put my mind at ease about the software). I also found it ridiculously easy to install the software and get it running on my machine. Now comes the difficult part, getting the software to run on my uncle's machine.

He was having some trouble with his email and so I didn't want to send him an email about the service so I had him open up his browser and type in the URL. He had some difficulty spelling it, but he finally was able to get to the webpage. Once there he had a very difficult time finding the textbox to enter the code in. I explained to him about the green box and the white box to enter text in it, but that didn't seem to help. After several minutes, he finally figured out where to put the code I gave him. He was able to figure out how to hit Go after a couple of minutes and then he had trouble figuring out how to download the software. Several dialog boxes popped up warning him of the software (I know Fog Creek doesn't control this, this is Microsoft's bad) and I had to walk him through each one. He was finally able to connect and it worked great, for 2 minutes, the length of the test drive.

I was happy that I could use the test drive to make sure the software was going to work, but I was disappointed that I was disconnected after the 2 minutes was up. I had to close the software, go back to the website, enter my credit card information, and then get another code. This caused my uncle to have to enter a new code in and download the software again, which I had to walk him through again :(. What's worse, the other version of Copilot was still running and without being able to see the screen, I couldn't help him close it (as I mentioned, he doesn't really understand the concept of Windows). I ended up just having him restart his computer (I knew the steps to do that) and then had to walk him through all the steps to install Copilot again.

During this process he had indicated that he was having trouble viewing the fonts on the screen (they were a bit small for him) so I installed IE7 for him (the magnification feature is great for this). This required a reboot. The reboot disconnected us from the remote session. This caused me to have to walk him through the process again (by this time he was able to do some of it on his own, but not everything). Through the process of helping him, we had to restart the machine several times, each time got easier, but I still had to walk him through a lot of it.

I didn't look at other remote software out there, but my guess is that Copilot compares favorably to most other programs out there for ease of use. This test was particularly challenging and I did find some deficiencies, but overall, I was very happy with the product. I was able to talk him through the installation process, it performed well with my DSL and his cable, and it worked without any special configuration. I will definitely be using this software again.

If Fog Creek happens to read this post, here are my suggestions for improving the software...

  1. Avoid disconnects at all costs. Allow payments to be made during a session (I should be able to enter payment information directly from the software) and automatically reestablish a connection after restarting the computer (even a shortcut on the desktop would be better than having to go through the website each time).
  2. If trying to connect and Copilot is already running, either close the previous instance or use the new code. Don't fail. It may seem obvious to anybody with some computer experience to know how to shut it down, but it wasn't to my uncle and I had no way of helping him because I didn't know what the screen looked like.
  3. Make the Receive Help page easier to use. If it only had the box for entering the code, that would be useful. A large blinking arrow pointing to the textbox would have been very useful (horribly tacky, but easy to explain over the phone). Don't change the screen. I know it seems like a nice feature to allow them to reconnect to the previous session, but as the person giving help, I didn't know what the screen looked like and couldn't help him find the correct link.
  4. Provide screenshots to the person giving help of all the different screens possible that the person receiving help will see that the person giving help won't (both on the website and in the product). This could be done in a few minutes and might help out on a few of the previous issues (like the disconnect button in #2 and the connect to previous session link in #3). Put these screenshots directly on the Help Someone page to make them very easy to find. It would be nice if the page included a script as well. Being a software engineer, I may not realize that some of the terms I use are considered advanced and probably confused my uncle. If a script was provided for me, perhaps it would use more appropriate terminology.

Wednesday, February 14, 2007

NLog, NUnit, NDoc, NAnt. DotNet development tools brought to you by the letter N.

Do all developer tools that target the .Net platform need to start with N? Ok, I have to admit that it makes it easy to identify .Net developer tools and that I might be influenced by the naming convention when looking for such tools.

For instance, the other day I was looking for a good .Net library for logging and found a few that looked interesting. The one I decided to download and install was NLog.

NLog Project

Although I don't have much experience with NLog yet (or experience with other logging libraries for that matter), I like what I've seen so far. Within a few minutes of installing it, I was logging simple messages. I was able to figure out how to log different levels of messages (simply call different methods on the logger) and how to change what gets logged.

NLog uses a XML config file that is separate from the application config file which is very convenient for portability reasons (I can send somebody a NLog config file and not have it mess up their app settings). It also has a XSD file that makes it very easy to discover the elements and attributes that are available.

According to the website, NLog claims that their interface is similar to Log4Net (a port of the log4j framework for java by the Apache Software Foundation), but simpler to configure and use.

The main gripe I have with it is the documentation. Perhaps I just haven't spent enough time with it to understand how it's put together, but for the most part, the documentation seems to be comprised of a dump of the code comments with a couple of incomplete tutorials thrown in. Of course, lack of good documentation for development tools is as common as development tools that start with the letter N.

Wednesday, January 31, 2007

Vista has been released! (it's about time)

Vista has been officially released to the public. It's taken a long time and many of the original features promised have been cut, but overall, it looks like a pretty exciting upgrade to XP (though I probably won't upgrade until I get a new computer). The thing I'm most excited about is the ability to search for applications and documents from the start bar (I know you can install 3rd party applications to do this, but it's nice that it's built-in). Windows Sidebar and Gadgets look cool too (I use Google sidebar now and really like it).

Bill Gates was featured on the Daily Show last night (Jan 29th). It was pretty funny but not all that informative (no answer to what the F12 key does).

Several other Microsoft products were released along with the official release of Vista. Most notably, PowerShell! If you thought I was going to say Office, you are reading the wrong blog :).

2007 is shaping up to be an interesting year in software. I can't wait to see what is coming. Expressions Suite is one software package that comes to mind. If we are lucky, Visual Studio Orcas might make it as well. Roger Jennings has a good post on release dates associated with Orcas. Orcas RTM to Slip from 2007 to 2008?

Sunday, January 28, 2007

What every software manager needs to know about software architecture

If you are a manager in a software company, and you enjoyed the "Conjunction, Junction, what's your function" videos on ch 9 when you were a kid (or whatever channel they played Sesame Street on), you should watch this video!

Architect Video

Obviously somebody has too much time on their hands :).

I have to admit that I'm not sure that comparing software architects to building architects makes a lot of sense. Though perhaps the differences are more of a matter of degree than of kind. The basic job function for both types of architects is to plan a project to make sure it addresses the customers requirements, doesn't violate any regulations, and can be constructed within a reasonable amount of time and cost.

However, the actual environment that the two types of architects work in is very different.

There are no regulations on who can become a software architect. Building architects must obtain a licence and only after having received specific certifications and experience. Although most software architects have previous experience as developers (hopefully they all do), few have any certifications that mean anything in the industry. The field of software is so new and changing so rapidly with so few regulations (and those are changing fairly rapidly as well), it would be difficult to create a licensing process that wasn't obsolete before anybody could even achieve it.

There is usually a considerable amount of difference in the education and experience of a building architect and the people who will construct the building. The building architect must be very detailed and consider all of the implications of any design decisions. However, in software, the difference between the architect is usually only a matter of number of years on the job and aptitude. Software architects often just produce high-level designs and the developers produce the detailed designs (I'm sure there are many exceptions to this, but this has been my experience).

Unfortunately, there are many software projects where the planning was left to personnel managers and inexperienced developers. This has led to software being written on an extremely shaky foundation. Typically this just means that developers have to work extra hard to make things appear to work smoothly to end users. A building cannot be placed on a shaky foundation. It would be condemned.

Not as much time is put into the design of a software system as you would put into a building. This is because the cost of making a mistake with software is far less than the cost of making a mistake when designing a building. In fact, their are design techniques in software that allow the building of a system without doing very much up-front design at all (such as Extreme Programming). I don't believe this would be possible when designing a building.

Of course, the video is trying to explain the need for architects to people who probably don't really know anything about software architecture, so the analogy might be appropriate for that level of ignorance.

Check out Wikipedia for more information about building architects and software architects.

Wednesday, January 17, 2007

Browser Wars

After the surge in visitors I got from being featured on both the Firebird and IBExpert websites this week, I thought the browser metrics were pretty interesting. Apparently, the folks that use Firebird seem to have a preference for Firefox. Perhaps it's the name similarity? :)

1. Firefox - 57.14%

2. Internet Explorer - 37.03%

3. Opera - 4.37%

4. Mozilla - 0.58%

5. Safari - 0.29%

6. Mozilla Compatible Agent - 0.29%

7. Konqueror - 0.29%

Friday, January 12, 2007

The Great 2006 Software Review

2006 was a great year for software. I thought I would make my first post of the new year as a review of the software that was released last year that caught my interest. This is software that I think will have an impact on the world (some big, some small). It is not necessarily software that I use on a regular basis (or at all :).

I know I'm going to miss some great software, so please feel free to post anything I might have missed.

NOTE: Most of the links go to the original announcements. Some are official press releases, others are just blog entries.

Google Bookmarks (via the toolbar) - January 30th

Everybody that uses a browser knows what bookmarks are (also known as favorites). The Google difference is that these bookmarks are stored online, but are accessible through the Google toolbar in the browser.

I love being able to share my bookmarks between home and work and that I don't have to remember to back them up before I get a new computer.

Google Calendar - April 13th

My wife and I now share a calendar. This is a very convenient way to communicate events between us. There is also a very handy Google calendar gadget for the Google Sidebar that shows me the calendar right on my desktop at work so I always know what's coming up.

Windows Live Writer (beta) - August 11th

I'm using this software write now to create this post. It is a very nice blog entry tool. There are still a few kinks to work out, but overall it's great! It was very easy to set it up to upload my posts to my blog.

Firebird 2.0 RC3 - August 13th

This is a great database. It's reliable, performs well, easy to use, and it's free with no limitations. I've been using the previous version of the DB for close to a year and have been very impressed with it.

Of course most people need more than a command-line utility to create and manage a database (not to mention testing it). IBExpert is a great commercial product with a free version for individual developers (it's limited, but you can still do a lot of stuff with it). If you've used SQL Server Enterprise Manager you can probably imagine what features it has (I actually believe that IBExpert has more features than SQL Server Enterprise Manager).

Logitech MX Revolution Mouse - August 24th

Ok, this isn't software, but I'm still damn excited about it! Mostly it's the flywheel for scrolling. It actually switches between a flywheel and ratchet (standard scroll wheel behavior) depending on the application you are using.

PowerShell RC 2 - September 26th

Command-line + .Net, what's not to like :). If they can fix the performance issues, I'm sure that many Windows admins are going to be very happy people.

Google Docs & Spreadsheets - October 11th

The future of the office software suite is here! Google has created an Internet based document editor (like Word) and spreadsheet application (like Excel). They allow for a high degree of collaboration, including the ability to work on the same document at the same time and receive live updates, almost like an instant messenger program (as rumor has it anyway, I haven't had the opportunity to see that work).

Internet Explorer 7 - October 18th

It's about time Microsoft updated its browser! They have done a great job of cleaning up the UI and providing the features that experienced web surfers have come to expect (such as tabbed browsing).

Firefox 2 - October 25th

I am very impressed with the improvements that have been made in such a short amount of time by an open-source project. It's great to see a viable alternative to Internet Explorer (if for no other reason than to encourage Microsoft to keep its browser up to date).

Microsoft Windows Desktop Search 3.0 - October 25th

This is the most effective way to search your Outlook email that I'm aware of. It also searches other documents (including MS Office) on your system as well. It's easy to use, fast, and produces good results.

.Net 3 (including WPF and WCF) - November 6th

These technologies will definitely have an impact on the world, especially Windows Presentation Foundation (WPF), though it may take a few years for the hardware to catch up. Expect to see some amazing consumer applications coming out soon.

Basically the WPF (not to be confused with WTF) allows designers to create graphically intense (including animations) user interfaces quickly and easily. .Net 3 comes installed on Windows Vista and can also be installed on Windows XP and Windows 2003 Server.

Windows Vista - November 8th

Microsoft's new OS is possibly one of the best yet (based on the presentations I've had of it anyway). It has some great features for security and usability. As I look into my crystal ball, I see a new computer with Windows Vista on it in my future :).

I really looking forward to Windows Home Server. Home Server is essentially an appliance that you can hook up to your network for file sharing and other nifty things (it's a full version of Windows Vista). Unfortunately it's not due out until the second half of 2007. If you're interested in this, here's a great Ch 9 Video.

SQL Prompt 3 (beta) - ~December 11th

It's about time somebody added Intellisense to my SQL scripts. This has made writing SQL much less painful. I know longer need to scan the object browser every time I need to find a table or field.

Google Patent Search - December 14th

Patent surfing just might be the next big time-waster (ok, probably not). Google has certainly made looking for patents much, much simpler. You can now search for patents from the comfort of your home using Google's excellent search capabilities in order to make sure that your new "great idea" is not already patented.

Again, if you know of something I missed, please post it.

Monday, December 11, 2006

The beta for SQL Prompt 3 is now available

I just installed the beta for SQL Prompt 3 today. For those that don't know what SQL Prompt is, it is basically Intellisense for Query Analyzer. They are currently giving away v2, but they are planning on selling v3 (get v2 while it lasts). If you like Intellisense in Visual Studio and you also write T-SQL, you'll probably appreciate the productivity improvements with SQL Prompt.

They've made some great improvements to the Intellisense dropdown. It is, of course, context sensitive, but it is also organized in categories. It allows you to view just a certain set of candidates (such as columns or functions). It's vaguely reminiscent of Visual Assist X (VA). It would be nice if they made it work more like VA. One of the things I like most about VA is that I can type any part of a method/property/etc and it will list it in the dropdown. If you have a couple of hundred choices, being able to type "order" and getting all of the candidates that include "order" somewhere in the name is very handy!

Another feature that I really like about the new SQL Prompt 3 is the auto-expand. If you type out a stored procedure name, SQL Prompt 3 can automatically expand the statement to include the parameters as well. You can also expand a * to the complete list of columns simply by hitting TAB when the caret is next to the *.

SQL Prompt 3 offers many configurable options to allow you to setup your environment the way you like it. It also includes the ability to add snippets that can be automatically expanded for common or complex SQL statements.

I'm glad they decided to limit the number of products they support. I use Query Analyzer exclusively for writing SQL (I tried using Visual Studio, but could never get used to it). I would much prefer a product that works very well for one or two products than one that almost works ok for a half dozen very different products. One thing I often wonder is why they didn't just create their own IDE for SQL scripts. It seems like it would integrate well with their other products (which I haven't used, but they look intriguing). It would be nice to have a SQL IDE that integrated with VSS. Perhaps they could have even integrated it with Visual Studio (or at least be able to open up Visual Studio projects to get to the SQL scripts embedded in them).

A word of warning, the Automatic Closing Characters feature doesn't work very well. In fact, I had to turn it off. Often times I would type a single tick and it wouldn't add the second tick. However, when I added the second one, it would add a third! Fairly annoying. Even when it did work correctly, it still suffers the same annoying problem as most tools that implement this which is if you type the closing character yourself, you end up having to remove the extras. VA handles this much better. It seems to remember when it automatically adds a closing char and will remove it if you type it yourself (VA is the first tool that I have not turned this feature off).

Another issue that I've seen with SQL Prompt 3 are that the columns in the dropdown cannot be resized. This means I usually only see the first part of the column name and rarely see the column type. I can expand the whole dropdown, but all of the columns expand with it. This means the dropdown has to be absurdly wide in order to show the entire column name (good thing I have a widescreen monitor :).

If red-gate is reading this, a couple of features that I would like to see in the release (at least the next version), are...

  • Expand UPDATE and INSERT statements. It would really save me a lot of time if I was able to type "UPDATE MyTable[TAB]" and have the columns laid out for me similar to the auto-expand feature for stored procedures. It's much easier to delete the ones I don't want (even if it's most of them) than to add the ones I do want.
  • Being able to view a list of references in a script. For instance, view all the lines that use the Employee table or the FirstName column from the Employee table, or the @DoSomething variable.
  • Provide some SQL refactoring capabilities. Changing the name of a variable is the only one that comes to mind, but I'm sure if I spent some time on this I would find some other useful refactorings in a SQL script.
  • Spell check. Who can't use a good spell check program to check their comments :). This is something I didn't realize I needed in an IDE until I installed VA.

If you develop T-SQL scripts, SQL Prompt 3 will greatly improve your productivity. This is a must-have tool for all T-SQL developers.

Here's the link to the announcement on red-gates website...

http://www.red-gate.com/messageboard/viewtopic.php?t=3811

This post turned out much longer than I planned :). I hope you have found the information useful.

Friday, October 20, 2006

IE 7

I've been using Firefox for some time now and I really like it. However, being a technology junky, I felt compelled to install IE 7 as soon as it was released (I tend to avoid betas if at all possible).

IE 7 definitely feels like a modern browser. It has tabbed navigation, redesigned and streamlined toolbars, and a built-in RSS feed reader (though I plan on continuing to use Thunderbird for the RSS feeds I subscribe to). IE 7 also has the ability to add extensions, however, I haven't found any that I want to use (where's the Bork Bork Bork! translator?) and most of them cost money.

Firefox still has some very compelling features (specifically a better selection of extensions), however, I think I will stick with IE 7 for now (at least until Firefox 2 is released :).

Tuesday, October 10, 2006

PowerShell Developer's Conference

I just finished the PowerShell developer's conference and it looks like Microsoft is pretty serious about it. A number of Microsoft teams are developing enterprise products around PowerShell (such as Exchange 2007).

Microsoft is pushing the use of PowerShell snapins to be coupled with MMC 3.0 snapins. Basically they want developers to create PowerShell snapins that provide the functionality to administer an application and then create a MMC 3.0 snapin to provide the GUI environment (this would use the PowerShell API to run the PowerShell snapin).

This approach makes administering an application across the enterprise much simpler. Many I.T. administrators prefer a command-line over a GUI, especially if they can create a script to perform repetitive tasks.

I'm hoping that Microsoft builds PowerShell into Visual Studio. It would be nice to have such a rich command-line hosted within VS, especially if it has full access to the IDE object model (possibly an alternative to some macros). Unfortunately they were unable to give us any news about upcoming uses of PowerShell because the event was being recorded for distribution on the Internet and so it was not considered an "NDA" event.

They did have good swag (second definition:)though. They gave out a PowerShell labeled USB drive and t-shirt as well as a Microsoft System Center scarf and a foam Ch 9 guy.

Friday, October 06, 2006

PowerShell = Command-line + .Net

PowerShell is the future of the command-line for Windows. It's most significant feature is the fact that it is built around .Net and is easily extendable by .Net. In fact, you can use reflection to access any .Net object!

It includes the ability to assign alias's to frequently used commands, define functions, and call a number of pre-defined (and very useful) CmdLets (the equivalent of a command-line utility). It also has it's own scripting language including looping and conditional constructs reminiscent of C#.

Another feature I really like is the ability to navigate to non-filesystem drives, such as the registry. This allows you to navigate the registry the same way you would navigate the file system. You can define your own drives based on the drive providers that come with PowerShell (there are a number of them) or you can create your own provider using .Net.

PowerShell has not been released yet (due Q4 2006), however, you can download RC2.

PowerShell Home Page

Download PowerShell

PowerShell Team Blog