Home

Archived Posts from “Reviews”

Assembla - Accelerating Software Development

07

August

A good while back, I commented about SVN Hosting through SVNRepository.com.  Well, I am still using SVN Repository but I came across another option, Assembla, last week and it deserves some attention.

Though many SVN repositories provide an accompanying Trac instance, that’s about all they do.  Frankly, that’s because that’s all they need to do. Assembla is the exception.  It takes hosting one step further.

Assembla is a complete software development tools package offering workspaces to thousands of teams for FREE.  The screenshot below gives you an idea of what is provided.  There’s everything from a SVN, Git or Mercurial repository to a project-specific Wiki and Chatroom.  If you look around, you will even find a Time Tracking application.

image

You may add team members to your Workspace with different privileges as well as establish security settings for non-member access.

image 

Creating a space is low friction…just visit the home page, click "Create a new space" and follow the instructions.  The free account includes all of the core functionality and is limited to 200MB of storage.  If the free account doesn’t meet your needs, Assembla does also provide commercial and branded options which include further functionality and support in exchange for cash money.  You can find out more about Assembla plans on their tour page.

I recommend creating a free account and clicking through the tools as Assembla may be a good option for you. 

kick it on DotNetKicks.com


iPhone Firmware Update

06

August

For my birthday, back in early July, I received an Apple gift certificate for the exact purchase price of a shiny new version 2.0 iPhone. Since I already own the first generation iPhone and I have a tendency to avoid ridiculously long, seemingly endless lines, I haven’t picked up my present yet.  Actually, the last time I even thought about cashing in my certificate was one week after the iPhone 2.0 launch.  At the time, the nearest Apple Store had multiple rows of chairs lined up outside of the front door.  These chairs, I discovered, were reserved for folks who had previously waited in line but didn’t get to the cashier prior to the product selling out.  I guess the customers were lucky enough to receive a ticket or voucher along with the privilege to wait in line again once the next shipment arrived.  So, I wasn’t even close to getting a new phone a week after launch and I haven’t made it back to the store yet.

What I have done, however, is upgrade my firmware which took roughly as long as some of those poor folks had to wait in line outside the store.  Perhaps I am jumping ahead, but don’t attempt to upgrade unless you have time.  I’m told some upgraded are completed within 30 minutes, but I, unfortunately, have 16GB of storage space on my iPhone and I am using over 90% of it so the backup and restore of my data alone took close to an hour.  That on top of a 218MB download and the upgrade itself makes for a long firmware upgrade.

All things told, I completed the firmware upgrade because I was very interested in playing around with the AppStore and, well, I had nothing to lose.  I will say I have found the upgrade to be of little value at this point.  Yes, I now have Pandora running on my phone which is cool although the app is clunky.   I have experienced the keyboard delays and more crashes (supposedly fixed with the 2.0.1 release which I haven’t installed yet) and sadly my email pulling is far, far, far less reliable now than ever.  In fact, I find myself often times rebooting my iPhone just to resolve issues. 

When I do get around to picking up my new phone, let’s hope everything works a little more smoothly.


Compile Help File Documentation Using Sandcastle

05

August

I am currently on the bench at work waiting for my next assignment to start up in a few days.  Rather than sitSandcastle Logo around, read blogs and listen to podcasts, I’m keeping myself busy by putting together the beginnings of a code library to be shared across our development team.  Yesterday I started the foundation.  I defined the framework, file system layout and basic namespace conventions.  I also created two class libraries and associated test projects to get the ball rolling.  I’m pleased with the way the common library is turning out.

Today, I refactored a bit and then focused on documentation.  Specifically, I generated help file documentation via the XMLSummary comments. I searched around and played with various utilities and ultimately decided on Sandcastle and Sandcastle Help File Builder.

Sandcastle.jpgSandcastle - Documentation Compiler for Managed Class Libraries, created by Microsoft, produces accurate, MSDN style, comprehensive documentation by reflecting over the source assemblies and optionally integrating XML Documentation Comments. Sandcastle works with or without authored comments and supports .NET Framework 1.1, 2.0, 3.0 and 3.5.  Sandcastle is, however, a command line based tool which has no GUI front-end.  That’s where Sandcastle Help File Builder (SCHB) comes in.  SCHB provides a user interface (as well as command line based tools) to facilitate the building of help files in an automated fashion. Both applications may be found on Codeplex.

Sandcastle (really Sandcastle Help File Builder wrapped around Sandcastle) is easy to install and navigate and I was able to quickly integrate into the common libraries’ best practices.  Now when additional code (new library, class, method, etc) is appended to our common code repository, team members simply need to follow the overall folder structure, code library templates/namespaces and update the Help File Builder project which is now in place. 

Below are the instructions on how to extend the existing Help File Builder project.  These instructions will be share with my team members though they can easily be altered to create a help file from the ground up:

  1. Download and install Sandcastle and Sandcastle Help File Builder from Codeplex.

  2. Apply XML comments to your code base. 
  3. Navigate to the Build Tab of your project’s properties and do the following:
    • Check XML documentation file
    • Set file name to bin\[mode]\assembly name.xml where [mode] is debug or release. Example: bin\release\MyCompany.Common.Serialization.xml
  4. Compile your assemblies in release mode.   Note: I’m opting to only generate documentation per the assemblies/xml generated in release mode although it doesn’t have to be this way.
  5. Run Sandcastle Help File Builder. The existing Sandcastle Help File Builder project can be found in the following location: MyCompany\Common\MyCompany.Common.shfb
  6. Add your compiled assembly to the SCHB project:
    • Click Add > Browse to the libraries’ bin\Release > Select dll
    • After the assembly is added, the dll and xml files will be listed in the ‘Assemblies to Document’ list box. 
  7. Document the assembly’s namespace by clicking on the ‘Namespaces’ button and editing the summary.
  8. The MyCompany.Common.shfb project is already configured so there’s no need to change any of the project properties. For future reference, all non-default values are highlighted in bold font within the property list. This information is most obvious if you toggle the project properties to display Alphabetically rather than Categorized.

    Here’s a list of the settings which have been updated:

    • Help Title=MyCompany.Common Class Library
    • HtmlHelpName=MyCompany.Common
    • KeepLogFile=False
    • OutputPath=./
    • PresentationStyle=vs2005
    • SdkLinkType=Index
  9. Generate the help file by clicking the Generate button in the toolbar.
  10. View the help file by double-clicking the MyCompany/common/MyCompany.Common.chm or by opening the file via the SCHB Documentation/View help file menu option.

Again, I found the tools easy to use though I did encounter one gotcha. My file path included a folder named ".NET 3.5".  I found that Help File Builder didn’t like the naming convention.  Apparently the preceding "." caused the issue.  Once I renamed the folder to "NET 3.5" everything worked like a charm.

 

kick it on DotNetKicks.com

References:


Analyzing Your .NET Code with NDepend

30

July

NDepend is a static analyzer that simplifies the management of a complex .NET code base. Architects and developers can analyze code structure, specify design rules, plan massive refactoring, do effective code reviews and compare different versions of the code. The result is better communication, improved quality, easier maintenance and faster development.  Sounds good, eh?

Full disclosure: I received a free pro version of the NDepend from Patrick Smacchia last week along with little encouragement to use the tool and buzz about it if I find it useful.  Patrick’s timing, in fact, could not have been better as just the evening before a colleague of mine was asking for code metric tool recommendations.  Hopefully the review represents me well, but I am thrilled with NDepend and recommend it highly to anyone wanting to get "more familiar" with their code.

As published by Patrick Smacchia

…something difficult in promoting a tool such as NDepend is to educate about what it can bring to your development shop in terms of agility. NDepend comes with a set of innovative features currently not supported by any other .NET tool. I like to think that what tools such as ReSharper or CodeRush are doing to your code at micro level (i.e methods’ body structuring), NDepend does it at macro level (i.e class, namespace, assembly structuring). Hence, as a developer I personally use both kind of tools to automatically control every aspects of the code base I am working on…

Being a big fan of ReSharper, I had high hopes for NDepend.  Knowing my co-worker could use some help finding a good code analyzer and having a free copy of the software dropped in my lap, I had the immediate incentive to dig into the NDepend tool kit…

How to Get Started

Since I wasn’t all too familiar with NDepend, I opted to first gather basic information about the tool and capabilities.  Here’s what I did:

1. I watched two online demos: Getting started and VisualNDepend basics

2. I reviewed three online tutorials: How do I analyze my .NET applications using NDepend?, What does the NDepend report tell me about my code? and I want to go further to have a better control over my code

3. I read a recent NDepend review posted by Andre Loker and previewed Patrick Smacchia’s Blog for his latest comments.

First Impressions

Before even opening the software it was very clear that NDepend was super powerful and, as another colleague of mine recently said, "it can be a mind blower."  As I am very sensitive to informatiimageon overload, I proceeded simply and cautiously by basically following the steps found in the online demos.  The Visual NDepend 2.9.0 IDE is friendly and somewhat familiar as the start page could be compared to that of Visual Studio.  Here you may create/open projects or analyze/compare assemblies using the provided shortcuts.  Additionally, you are presented with quick links to the online demos and the installers for NDepend Visual Studio and Reflector add-ins. 

imageI opted to analyze a set of assemblies.  After selecting a half dozen assemblies managed within my current application, the assembly analysis is run and then, after a few moments, the results are presented within the VisualNDepend UI. 

Remember my earlier comment about being sensitive to information overload?  Well, if I wasn’t ready for it, the tool’s default display may have knocked me off my seat.  As you can see in the accompanying screen shot, there are many views and the UI is quite busy.  For the experienced user this is great as the numerous windows actually work nicely together.  For a new user, in my opinion, the elaborate UI may be inappropriate — possibly intimidating — especially if the new user really only wants to gather a simple metric like how many lines of code (LOC) make up a specific component.

With this said, the UI can be customized and all the information is very useful once you understand it.  Don’t be intimidated by NDepend even though the first impression can be a "mind blower."

I clicked around the UI for about 30 minutes and I quickly got a good sense of its power.  Certainly the demos, tutorials and blogs noted above helped lessen my learning curve so I encourage you to follow my footsteps.

Code Query Language (CQL)

What impressed me most about the NDepend is its Code Query Language (CQL).  Per the NDepend site:

NDepend considers your code as a database and you can write some CQL statements to query and check some assertions on this database.

Out-of-the-box, NDepend comes with dozens of queries which fall into varying categories from Code Quality to Test Coverage .NET Framework Usage. 

And NDepend provides the same 82 code metrics to support you in building your own queries!   Here are a few simple examples of what you can do with the CQL:image

1. Which public methods have more than 30 lines of code?
SELECT METHODS WHERE NbLinesOfCode > 30 AND IsPublic

2. Which classes implement System.IDisposable?
SELECT TYPES WHERE IsClass AND Implements "System.IDisposable"

3. Which methods have been refactored recently and is not thoroughly covered by tests?
SELECT METHODS WHERE CodeWasChanged AND PercentageCoverage < 100

On top of that you can enable/disable or even edit the out-of-the-box queries.  For example, if you don’t agree that all static fields should be prefixed with an ’s_’ change the query to validate your standard or remove the check all together.

With the Code Query Language, the sky is the limit.  Did I mention the editor comes with Intellisense?

Reports

Go ahead and generate a report.  Check out this example which gives you a run down of the application and assembly metrics, an assembly dependency diagram, CQL Queries and Constraints and much more.  Whereas the VisualNDepend UI is geared toward the architect or lead developer type who is wanting to really dig into an application, the report seems to be more suitable for a less technical audience.  Perhaps the report could be used as part of an executive summary or could complement a developer’s code review.  Simply, it is a professional output (HTML only, I think) consisting of endless information and even pictures. 

Integration

Very quickly I wanted to call out that NDepend integrates not only with VisualStudio and Reflector but also MSBuild, NAnt, and CruiseControl.NET.  I personally think it is great that NDepend was implemented in a manner in which its frequent (read: continuous) and easy (read: automated) use is promoted.  Well done.

Final Thoughts

NDepend is darn impressive. It is a "mind blower" if you will.  NDepend provides more than ample metrics, a flexible (albeit busy) UI, a customizable query language, professional reports and hooks into applications like Visual Studio and Reflector along with support for processes like automated builds and continuous integration.  If you really want to know your code and you are looking for a tool which provides more than simple application metrics, NDepend may be the right product for you.  I highly suggest you check it out.

kick it on DotNetKicks.com


Getting Started with Inno Setup

28

July

For the first time in years, I needed to distribute my application to the end user’s machine via an online download.  To do this effectively and professionally, I, of course, needed an install package.  Over the year, I have used both Wise and InstallShield but they both cost money and I don’t recall them being all that easy to manage.  This was, however, years ago.  More recently I have, like many developers, used Windows Installer to imagegenerate MSIs for very simple (read: file copy) deployments. There’s nothing flexible or particularly pleasing about MSIs, but one can typically get them created with a few button clicks.  For the installation of internal applications, MSIs are more than tolerable, in my opinion.  Other than those options, I was quite ignorant on the subject of installers so I briefly evaluated three free candidates:

  • Windows Installer XML (WiX) Toolset is a Microsoft open source project used to create the Office 2007 installer. WiX includes some advanced capabilities, but it has a steep learning curve even though the scripting language is XML-based.
  • NSIS (Nullsoft Scriptable Install System) is a professional open source system to create Windows installers. It is designed to be as small and flexible as possible and is therefore very suitable for Internet distribution. It has a rich feature list, a good set of online samples and a good community following.
  • Inno Setup is another free, open source installer for Windows programs. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.

Decision

After a quick review of each product, I opted to run with Inno Setup primarily because it had the ugliest website, all of their product award links are broken and it isn’t known by any acronym…yet.  Joking aside, I chose Jordan Russell’s Inno Setup because it met all of my requirements almost effortlessly.  Here’s the rundown of what I needed:

  • Check for the .NET Framework and install if not found
  • Check if Remote Registry is running and start if stopped.
  • Check is UAC is enabled and provide user dialogue.
  • Open website(s).
  • Create quick launch, desktop, start icons.
  • Read, update registry.
  • Ask custom questions and manage response.
  • Launch applications.
  • Install silently.
  • Create associated uninstaller.
  • Show/acknowledge terms of service.
  • Display readme.
  • Customizable/skinnable display.  
  • Etc

Additionally, Inno Setup it is such an easy tool to use and test and it has been around for a long while and has a great feature list:

  • Support for all versions of Windows in use today: Vista, XP, 2008, 2003, 2000, Me, 98, 95, and NT 4.0. (No service packs are required.)
  • Extensive support for installation of 64-bit applications on the 64-bit editions of Windows. Both the x64 and Itanium architectures are supported. (On the Itanium architecture, Service Pack 1 or later is required on Windows Server 2003 to install in 64-bit mode.)
  • Supports creation of a single EXE to install your program for easy online distribution. Disk spanning is also supported.
  • Standard Windows 2000/XP-style wizard interface.
  • Customizable setup types, e.g. Full, Minimal, Custom.
  • Complete uninstall capabilities.
  • Installation of files:
    Includes integrated support for "deflate", bzip2, and 7-Zip LZMA file compression. The installer has the ability to compare file version info, replace in-use files, use shared file counting, register DLL/OCX’s and type libraries, and install fonts.
  • Creation of shortcuts anywhere, including in the Start Menu and on the desktop.
  • Creation of registry and .INI entries.
  • Integrated Pascal scripting engine.
  • Support for multilingual installs.
  • Support for passworded and encrypted installs.
  • Silent install and uninstall.
  • Full source code is available (Borland Delphi 2.0-5.0).

Oh, and have I mentioned that it is free? 

Getting Started

The basic installer includes the Inno Setup Compiler, documentation and numerous samples.  If you want to get started quickly just download Inno Setup and review the sample scripts.  You’ll be creating your own installers in no time.  Alternatively, you could download/install the QuickStart Pack, but I honestly do not think it is necessary.image

As I mentioned, a review/compilation of the samples can provide a quick, easy introduction into the impressive tool. All the examples are worth a look, but I feel it is necessary to give a few special mention:

  • Example1.iss, Example2.iss and Example3.iss provide a great foundation as they demonstrate how to access the registry, add a desktop icon, include a readme file, etc, etc, etc.  
  • If you are planning to do anything non-standard, play around with the CodeExample1.iss sample.  It essentially builds a basic setup, captures every installer event, includes custom functions, and demonstrates how to extract/expand files, display dialogues and issue before and after installer actions. 
  • Finally, if you want to build custom pages, check out CodeDlg.iss which demonstrates how to build installer pages with custom questions and user input options.

My suggestion is to review the samples from within the Compiler.  The Compiler doesn’t have intellisense or anything, but it will obviously validate your script and call out where imageinvalid syntax exists.  The Compiler also allows you to immediately "run" your installer script (by clicking on the green arrow button) or compile the script (by clicking on the fourth button from the left.) What the heck is that anyway?  The Compile IDE is a fancy notepad with options and actions.  It’s simple and I dig it.

Speaking of simple, here’s an example script.  You would have to build on its foundation if you wanted to do anything fancy, like read from the registry, but these few lines practically do it all.  They copy three files into the Program Files sub directory, displays a read me file and add an icon to the Start Menu.  And all the standard installer pages (splash, location, completion, etc) comes along for free — free meaning no effort and no code.

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma
SolidCompression=yes
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"

Extra Help

Finding the right syntax wasn’t always a breeze as everything isn’t covered in the samples.  With that said, the best online reference I found was an Inno Setup Manual hosted at AgentSoft.com. I can’t say I know the connection between AgentSoft and Inno but I’m still very happy to have found the reference.  I also found various "real world" installer scripts, like this one, posted online which really helped facilitate my ramp up.

.NET Framework Install Script

In my requirements list, I called out the need to check for the .NET Framework and install if it wasn’t found.  This functionality is a snap using Inno Setup — just be sure to use the Client Profile version of the installer.

[Files]
Source: "Executables\dotnetfx35setup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall

[Run]
Filename: {tmp}\dotnetfx35setup.exe; Parameters: "/Q /NORESTART"; Check: Is35FrameworkInstalled; Flags: runhidden shellexec waituntilterminated; StatusMsg: "This may forever."

[Code]
function Is35FrameworkInstalled():Boolean;
begin
    Result := not RegKeyExists(HKEY_LOCAL_MACHINE, ‘SOFTWARE\Microsoft\Net Framework Setup\NDP\v3.5′);
end;

Summary

I’ll keep it short and sweet: Inno Setup is one slick piece of software that made the dreaded task of creating a custom installer one heck of a lot easier than it could have been.  I’ve added Inno Setup to my toolbox and I highly suggest you do too.

kick it on DotNetKicks.com


Getting Started with AnkhSVN

22

July

I’ve previously written about managing your Subversion repositories via the TortoiseSVN client.  TortoiseSVN integrates with Windows Explorer and provides a really slick way to do things like view the status of your source code, update your Subversion working copy and commit change.

But as slick as it is, TortoiseSVN requires one to bounce between their IDE and the Windows Explorer.  You’re right!  A simple, two-second step, a mere ALT-TAB, shouldn’t be that disruptive but, for me, it is and it keeps me from committing my changes as often as I probably should.  Perhaps this is a flaw in the way I work, but it is, without a doubt, the way I work.

There are two players in the "Subversion Source Control Provider for Visual Studio" space.  There’s VisualSVN and there’s AnkhSVN.   Until this week, I had heard nothing but good things about VisualSVN and AnkhSVN reviews weren’t nearly as favorable. 

I ended up trying VisualSVN for over a week and, frankly, I was disappointed. I deserve to get negative feedback about publishing the following comments without any supporting documentation but I found VisualSVN to be sluggish and I felt it called up TortoiseSVN dialogues (rather than handling the file management itself) far too often.  Since so many folks like the product, I would be willing to bet I simply had a very bad first go (although I did spend over 1 week with the product.) All the same, it is uninstalled, the $49 are still burning a hole in my pocket and, well, there was no harm done. 

I reverted to my old ways of not using source control effectively by avoiding Windows Explorer and TortoiseSVN and then, on my birthday, AnkhSVN 2.0 Final was released.  Though folks grumbled about the previous version, 2.0 is a near rewrite of the original and is now a full Source Control Provider Integration Package rather than a Visual Studio Add-In. With commercial backing from CollabNet and renewed open source enthusiasm, AnkhSVN 2.0 seemed to deserve a look so I looked…

Quick Start

1. Download AnkhSVN 2.0 here and run the install package.  If you want the latest and greatest, check out the daily builds

 

2. The AnkhSVN download page says to install and then "Start Visual Studio and choose Tools -> Settings -> Source Control and make sure AnkhSVN is the active source control provider."  Actually, you want Tools -> Options rather than Settings, but you would probably figure that out on your own.  All the same, AnkhSVN was already configured/selected.

 

3. Open an existing solution and noticed the new "Pending Changes" windows (also available via View -> Show Pending Changes.)  Enter your repository URL into the empty "Working on:" field and, if you are as lucky as me (after all it was my birthday), everything should just work. 

image 

 

4. This step is optional, but inevitable. I think. After about 20 minutes of playing with AnkhSVN you’re probably going to want to hook up your favorite diff tool.  If your favorite diff tool is WinMerge, perform the following: Go to Tools -> Options -> Source Control -> Subversion -> External Diff Path = "C:\Program Files\WinMerge\WinMergeU.exe" "%base" "%mine"

image 

 

5. Once you are setup, you will see green check-marks alongside items in the Solution Explorer window.  And, as you start to make changes, you will see modified items added to the Pending Changes window.  This, my friends, is  a great feature!  Now you able to manage all of your changes in a single location rather than having to navigate through Windows Explorer or even the Solution Explorer. In another life, StarTeam provided me with similar functionality by allowing me to flatten out the folder hierarchy and then sorting by status, but the Pending Changes windows is 100 times better.  Sure, you can manage your commits via the Solution Explorer, but I’m not going to. The Pending Changes view is also great since the Solution Explorer doesn’t always conveniently show you the status of your files.  Take the screen shot below, for example.  Collapsing the EmailTemplates folder leaves me no insight into the state of the files within.  (For the record, I prefer VisualSVN’s Solution Explorer display.)

 

image

 

 

 

 

Side note: If I could do it all over again, I really wish I followed the posted download instructions.  The suggested setup sounds straight forward enough, but trying to replicate the steps now, after already setting up, is seemingly impossible.  The instructions can be firmed up for clarity (see prior example referring to incorrect menu names), but I would have liked to give them a test run without jumping the gun and setting up my own way first.  If you do follow the published install instructions, let me know how it goes for you as I simply can not make heads or tails out of some of the steps.  One thing which seems to be missing — perhaps because of my impatience — is the persistence of the Subversion repositories added to the Repository Explorer.  It is really nice a version of the Repository Browser is built in, but it seems odd that repositories would need to be reestablished each time you open a solution.  Anyhow, it is probably my fault…

Wrap Up

Thus far, I am pleased with AnkhSVN.  For those of you who tried out earlier versions and were disappointed, try again.  Here’s a partial list of what’s new in AnkhSVN 2.0:

  • For Microsoft Visual Studio 2005 and 2008.
  • Built on Subversion 1.5.0 via SharpSvn.
  • Pending changes window; subversion status and commands available in one place
  • Full support for Visual Studio 2005 and 2008; AnkhSVN is now a SCC package instead of just an addin
  • Better log viewer
  • Merge support
  • Property editor
  • AnkhSVN now supports most project types previously unsupported via the SCC api
  • All solution explorer actions (rename, copy&paste, drag&drop) keep subversion history now
  • Enhanced build process and setup
  • Automatic check for updates
  • And last but certainly not least end user documentation

For more information about AnkhSVN, check out the project’s home.

kick it on DotNetKicks.com


Yugma.com - Free Web Conferencing

11

June

We hosted an internal presentation of .NET MVC Framework last week.  Since our conference room no longer fits the entire development team comfortably, we opted to share the presenter’s desktop with team members using Yugma. image

What’s Yugma?  Yugma it is a free, multi-platform (Windows, Mac and Linux) web conferencing and collaboration service. Basic accounts are free forever and provide basic web collaboration function.  Premium services enable advanced features beyond the traditional desktop sharing functionality.  Key features include desktop sharing which allows keyboard and mouse control to be passed along to any conference attendee, Skype integration, free teleconferencing, presentation tools, shared file space and session recording.

We used only the basic desktop sharing functionality and it was quick and easy. 

Per Yugma’s about page:

Yugma believes that web collaboration is for everyone, not just people in large companies. We also believe good ideas deserve to be shared, regardless of resources or geographic location. These two beliefs drove us to create an easy-to-use, affordable web collaboration service that works on Windows, Mac and Linux. It is our hope that Yugma will help you to share your ideas, learn more, stay connected with friends and family, feel the need to fly to fewer meetings, and have a more successful business.

If you are looking for a free web conferencing solution, you may wish to check out Yugma.  Heck, it worked for us. 


Somewhat Timely iPhone Review

10

June

With Apple’s 3G, "twice as fast, half the price" 2.0 iPhone Release announcement yesterday, I think we’re all ripe to read yet another iPhone review before the new devices go on sale in the US on July 11. 

imageFull-disclosed: I proudly sported a company Blackberry for three years prior to picking up an iPhone about four months ago. In all sincerity, turning in my Blackberry was one of the most difficult things about leaving my last job. It felt like I was losing my best friend or being forced to involuntarily kick a habit.  Now, I ask you, is there Life after Blackberry?

I do nearly everything based on the recommendation of others.  Hence, I interviewed a lot of folks which I considered "into gadgets" and asked them which phone they would recommend to a poor old sob who just lost his best friend.  Not so surprisingly, nearly everyone said, "You should get my phone" and then they would show off their personal phone-of-the-year award winner.  All Blackberry owners recommended Blackberries.  All iPhone owners recommended iPhones.  Blackberry owners were more than happy to share the short-comings of the iPhone but their more-than-likely jealous attempts to belittle the iPhone couldn’t compete with the true excitement on the faces of those who demonstrated to me exactly what the iPhone could do.   Since there were far goofy-in-love iPhone owners than bitter Blackberry owners in the office, I purchased the 16GB iPhone as a leap of faith since I was still, in my mind, a bitter Blackberry owner/lover.

My first experience was "WTF?"  I told the sales person at the Apple Store I would like to purchase a nearly $500 iPhone.  I think they said "cool," scanned the box, scanned my credit card using a handheld device in the middle of a crowed store and asked if they "could email me the receipt."  As technically paperless as I may be, I reluctantly said "yes" and started walking out of the store with my shiny new phone and no tangible proof of purchase.  I didn’t get too far until I remembered I was first-and-foremost buying a phone — a phone which needs an account and phone number.  I asked the sales person where I set this up and nicely enough they said, "Download iTunes.  Plug in the iPhone.  Follow the instructions.  It’s easy."  Truth be told, I left the store feeling a little off guard yet excited (WTF) and wondered if my Mom would be able to handle the same experience.

I got back to the office, downloaded the latest version of iTunes, plugged in the iPhone and experience was simply magical.  I receive a confirmation text message along with my new phone number within 10 minutes.  The AT&T account activation was super smooth and honestly very, very fun mostly because it worked differently than any other cell phone signup and without a hitch.  Mom would have been excite (and relieved) too.

The iPhone took some getting used to.  I suspect the reason is simple.  For a Blackberry user, an iPhone is a toy and a Blackberry is a professional tool.  I am still not completely over this fact.  Now having spent 4 months with my new toy, I still keep my iPhone hidden in my briefcase when meeting with clients.  In my former Blackberry life, I would "wear" my buzzing and blinking Blackberry like a badge of honor almost always.

All told, I am very happy with my purchase.  The iPhone rocks primarily due to all of the bells and whistles.  A guy like me that doesn’t read the manual is continuously surprised and amused by each newly discovered feature such as music fading out when a call comes in and then fading back in once the call is over or the eye glass which magnifies and helps navigate email text.  

But, remember, again, the iPhone is a toy.  It is not a business tool.  My biggest gripes (in no particular order):

  1. No support for Exchange (Provided with next release.)
  2. Email Auto-Check can be configured no more frequently than every 15 minutes. (I bet this issue goes away with Exchange support.)
  3. No green light / red light to indicate a new message, text, missed call, etc.  (This is probably a nice to have for some.  This is the #1 Blackberry feature which I miss.  Even more than increasing the email auto-check frequency.)
  4. No copy and paste support (NOT provided with the next release)
  5. No "Multi-Select" functionality (All new and existing iPhones will be updated with some iPhone 2.0 multi-select functionality on 7/11.)
  6. Leave the phone in the sun and the metal gets hots — really F’ing hot.
  7. There’s a giant YouTube quick launch button on the Home Screen yet there’s no built in To Do List application.  
  8. I’m still not used to the keypad.  I will never ever be as efficient with the iPhone keypad as I was with the raised Blackberry keyboard.  Actually, I am willing to bet no one will be.  I have found that holding the phone in my right hand while typing with my left pointer finger and right thumb provides the best results.  (I’m a lefty.  Right-handed folks may need to alternate hands and fingers accordingly.)
  9. This isn’t a knock on the iPhone, but AT&T coverage simply isn’t as good as Verizon provided for my Blackberry.  The whole AT&T/iPhone monopoly kind of bugs me although I understand AT&T is in cahoots with (read: subsidizing) Apple to reduce the purchase price of the next version of the iPhone.  This may, I understand, increase the price of the data plan, however.  My source. image

You undoubtedly noticed that most of my gripes are based on my own personal preferences per on my past Blackberry experience or are being addressed with the new iPhone 2.0 release.  Apple is addressing the toy vs tool issue with the introduction of "several significant enhancements," including:

  • 3G broadband wireless connectivity, which gives customers a home broadband-like speed experience when surfing the Internet, sharing files, and using media-rich Web applications
  • Business-class capabilities, including e-mail, viewed on a large, touch-screen device and designed to meet the needs of companies of all sizes
  • The ability for developers, including AT&T, to create customized consumer and business applications using the Apple software developer’s kit (SDK). 

Though the phone is intuitive (nearly everyone who plays with my iPhone figures it out), I suggest reading the manual unless you like surprises like I do.  Each day I find something new like the phone silence button or figuring out how to reboot the device. Yes, the phone has locked up on me twice when quickly switching between programs (but even the reboot is cool) and my browser session will be interrupted and I’m occasionally brought back to the Home Screen unexpectedly.  (This doesn’t happen enough to be a gripe.)image

I know some folks were/are concerned with the price of the data plan.  My current data plan is $20/month for a total cost of $60/month.  I didn’t do a lot of shopping around but I’m not unhappy with this rate.  In my opinion it is currently reason, but as I mentioned previously the rate may be going up to subsidize the cost of the phone itself.

Since I provided my biggest (perhaps only) gripes, it is only fair to list my favorite features.  Note, this list really only scratches the surfaces as "yesterday’s" unbelievable feature are now customary and assumed:

  1. Magical Account Activation
  2. Visual Voice Mail
  3. Multiple Email Account Support
  4. Bells and Whistles like Music Fade and Text Magnification
  5. Wireless Connection Detection makes me want to pursue Wardriving as a hobby.
  6. All-in-one-always-there-ness.  I’ve listened to more music, audio books and podcasts in the last 4 months simply because my iPod is simply always with me.  I use the Maps and the Camera far more often than I anticipated and the Safari Browser has been used to put more than one lunch debate to rest.
  7. Silly, but I love the fact that this phone can’t be turned on accidentally.  The "Slide to unload" function is genius.
  8. Horizontal/vertical orientation display.  When I first saw this on the commercials, I didn’t think think it was real.

What’s next?  Well, I am not crying over buying my iPhone 5 months before the 3G     release and a significant price cut.  I will definitely consider upgrading in July for the 3x browsing speeds and GPS though.  My fingers will be very loosely crossed that existing customer rebates will come in some form.  This isn’t unprecedented.  I would like to play around with iPhone application development a bit, but it is pretty low on my Task List — especially since the iPhone doesn’t have a Task List.  

I don’t think I talked the iPhone up enough in the post, but I believe it is my honest opinion.  With the decreased purchase price and added "business features," I think the iPhone is a steal come July.  The phone+ gets my recommendation.

Let me know if you have any questions.

kick it on DotNetKicks.com


ReSharper 4.0 Beta Makes Me Giggle

31

May

Today I did what I should have done a lot while ago.  I watched the Jedi Coding Demo and installed JetBrain’s ReSharper - The Most Intelligent Add-In To Visual Studio about 30 seconds later. Finally…

After launching VS2008, R# 4.0 Beta asked me a couple configuration-preference-type questions and then I completely stomped on my code until I could recognize it no more.  (Did I mention the full source tree was already imagecommitted to source control?)  

I played with R# for well over an hour as anonymous delegates became lambda expressions1, object instantiation plus a number of property sets were rolled up into an object initializer2, if statements were inverted, switches became if-else statements, foreachs became to-fors, unused methods were removed, ternary operators were introduced, classes were moved into new files, namespaces were updated and on and on and on and back again.

I know I’ve only brushed the surfaces of what R# can do (3.1 feature list, 4.0 beta feature list,) but knowing R# offers far more than a ridiculous number of refactoring shortcuts, I can’t hardly wait to start using it as I write new code. 

One might consider this recommendation premature, but I encourage you to give ReSharper 4.0 Beta a whirl especially if you are new to Visual Studio 2008 and C# 3.* since R# essentially provides you with a painless primer.  (Can’t get your head around Lambdas?  ReSharper 4.0 will create such an expression for you.) It is a quick download and install and it takes only a few minutes to feel the power of the ALT+ENTER keystroke. 

I hope the Add-in makes coding fun enough to make you giggle.

 

Example Refactor 1

private bool IsAliased()
{
    var computer = computerList.Find(delegate(Computer c)
        { return c.ID == RegistryHelper.MachineID; });
    return (computer.Name != computer.Alias);
}

became

private bool IsAliased()
{
    var computer = computerList.Find(c => c.ID == RegistryHelper.MachineID);
    return (computer.Name != computer.Alias);
}
Example Refactor 2
Notification notification = new Notification();
notification.Message = “Message 1″;
notification.Title= true;

became

Notification notification =
    new Notification { Message = “Message 1″, Title = true };
 

kick it on DotNetKicks.com


SubSonic and SSMS Tools Pack Saved The Day

21

May

Today I woke up feeling uneasy about the direction of my current project.  For all intents and purposes, I am taking an existing system which was pieced together by a couple of past developers and extending it. I’m not saying the code I  inherited was a disaster but I am not going to publicly praise the design and implementation either.  The big problem is the existing system works.

I know that last statement sounds funny but put yourself in the position of my customer.  They currently have a working product which they wish to extend and private label.  With the core functionality already in place (read: tested with dozens if not hundreds of users,) how much time could/should it take to implement my updates?

While ramping up, I jotted down a number of areas where the application could be improved but I tabled every task which wouldn’t get me closer to completing my assignment.  In other words, if the change was transparent to my client, I didn’t muck with it — for the most part.

Which brings me to this morning, approximately two weeks into my development, and my uneasy feeling.  The bottom-line is I made the wrong call.  I should have made the product my own, so to speak, and applied a handful of design changes right off the bat.  If I were completing a simple bug fix, this approach would have been wrong, but since I am scheduled for appropriately 2 months of dev, I can "afford" to make the needed improvements.  It makes sense as it would ultimately save me effort and frustration while costing my customer no extra time or money.  

Today I talked myself into thinking that refactoring/redesigning would be best for everyone and I promptly redesigned the database (all of it) and swapped out the data access layer (all of it) with the help of SSMS Tool Packs and SubSonic, respectively.  Of course, I had help. Lots of it. Hours and hours of other people’s time…  I’ve written about Getting Started with SubSonic and though I "admire" it, I hadn’t put it to good use until this morning.  SubSonic (after a quick review which consisted of watching this webcast) generated my DAL. SSMS Tool Packs was a lucky discovery as it auto-generated my CRUD routines.  The product offers much more than this and integrates with each version of SQL Server Management Studio, but I only needed stored proc creation today.  All told the entire change took less than 5 hours.  It would have taken far less time if I didn’t have a complete brain fart and chase my tail around an incorrectly established SQLEXPRESS connection string.  Pretty amazing if you ask me!

To sum things up, thanks to Rob Conery and crew for SubSonic and thanks to Mladen Prajdic for your exceptional contributions.  They really helped me get back on track with minimal investment today.  

kick it on DotNetKicks.com


Ext JS

20

May

Originally built as an extension of YUI, Ext JS is a cross-browser JavaScript library for building rich Internet applications (RIA) using techniques such as AJAX, DHTML and DOM scripting. 

image A co-worker recently showed off a small sampling of what he’s done with Ext JS. Very simply, the framework blew my socks off.  If, like me, you believe you can sell anything if it has nice enough packaging, you want to review Ext JS customizable UI widgets and extensible component model.  My interest was piqued by merely clicking through the extensive set of online samples.  Some of the sample border on ridiculously cool.  Anyway, you be the judge.

Though I don’t have any hands-on experience with the framework, I understand  the API is intuitive and well documented.  A better-than-average understanding of JavaScript (functions are objects, etc) is beneficial but not required.  Ext JS can use many different base libraries or adapters (e.g. YUI, jQuery, Prototype) or it can work standalone.  So, experience other existing libraries can be a big plus.

The only negative information I have heard about Ext JS is related to their license history.  Apparently, the licensing situation used to be difficult to understand which caused at least one developer I know to shy away from the framework.  As of April 2008, however, licensing terms have been clarified by being dual-licensed with options of the GPL 3.0 license or commercial license.

Have a look and let me know what you think.

kick it on DotNetKicks.com


Resource Refactoring Tool

19

May

Resource Refactoring Tool provides developers with a super easy way to extract hard coded strings from your code into resource files.

imageI won’t say this tool has saved me days of time but has certainly saved me hours (especially on those hand-me-down projects which tend to require a good amount of clean up. )

You’ll find the tool works in VS2005/VS2008 as it leverages the existing Refactor menu. Simply install the latest version found on the CodePlex project site and then Select Text > Right Click > Refactor > Extract to Resource until you find yourself giggling to yourself.

I’m not a big utility guy, but this tool gets installed along with VS on work stations. Enjoy.


TFS Discussion with MS

07

February

Microsoft RoundTableAfter tabling the conversation for the past two years, talks of bringing Team Foundation Server (TFS) in-house have started up again. There’s enough new interest that we have had a couple of onsite demos an a group of us traveled up to the Microsoft Technology Center (MTC) in Irvine today for an architectural design session. If given the opportunity, don’t pass up a chance to visit an MTC. You’ll get fed, receive a good amount of schwag, potentially see a Microsoft RoundTable in action and, of course, have a great technical discussion.  Cross your fingers for me and my colleagues as we would really like to be working with TFS soon.


PrimoPDF - Free PDF Converter

18

November

This may be yesterday’s news, but if you are looking for a reliable (and free) PDF converter, may I suggest PrimoPDF?  I have been using it for months to convert my Word documents to PDF and it is great. 

Here’s a bit more:

PrimoPDF is a free tool for high-quality PDF creation, comprising a user-friendly interface that enables printing to PDF from virtually any Windows application.

  • Completely free, not just a trial version, and no user registration is required.
  • Ability to optimize PDF output for screen (online viewing), print (standard laser printers), ebook, and prepress.
  • Resultant PDF output conforms to the PDF 1.4 specification.
  • Secure PDF files with 40- or 128-bit encryption.
  • Add document information (e.g. title, author, subject, keywords) to converted PDF files.
  • NEW: Full support for 64-bit machines.
  • NEW: Double byte character support.
  • NEW: Support of non-TrueType fonts.
  • NEW: Enhanced support for Microsoft Windows 98, ME, XP and Vista as well as improved PDF viewing support on non-Windows platforms.
  • NEW: Ability to merge/append PDF files upon conversion.

    That’s it.  I like the product and wanted to share…

    (By the way, they also have a Developer API which I haven’t played around with yet.)


    Continuous Integration

    20

    February

    “Familiarize Yourself with Continuous Integration” has been pushed to the bottom of my tasklist for the better part of two years now.  As a result, the closest I’ve come to continuous integration is “getting the latest” and hitting F5 about 1000 times in a given day.  I have dabbled with test driven development, but otherwise, I am completely ignorant when it comes to this stuff.  Sure, I understand it conceptually, but putting it into practice is a different story.   

    FinalBuilder LogoQuite often I will receive a friendly reminder letting me know that I really need to get going on this.  The most recent reminder came in the form of Jeffrey Palermo’s post, which I read last week, and made me eager to start digging in.  No excuses, right?  Palermo wrote “A very popular CI combination of tools is CruiseControl.Net for the build server (build reports, stats, and notifications), NAnt (an xml notation for the build script itself), NUnit (for automated tests that run as part of the build), and the code compiler.”  I took this as my starting point and immediately downloaded CruiseControl.Net.  I read through a good chunk of documentation and then … I dropped the ball.  Again.  But then, a couple of nights ago, I received a request to review FinalBuilder - another continuous integration solution.  It is funny how the universe works.  I think it is about time I get that two year old task off of my list.

    FinalBuilder is an automated build and release management solution for Windows software developers and SCM professionals.  One may use FinalBuilder to define, debug, maintain, run and schedule reliable and repeatable build processes.

    I spent an hour with the tool the other evening and I was pleased from the get-go.  Since I’m a newbie, I appreciated FinalBuilder’s approach.  For the most part, they assume nothing.  The web site does a fine job explaining continuous integration and on the initial launch of the application, a configuration wizard let me choose the version control systems, compiler actions, help compilers, installers and licensing tools I wanted to make available.   I felt like I was being led down a path, so to speak.  Anyway, the list of Version Control Systems alone will give you an idea of the number of products which integrate with FinalBuilder. 

    I opted to go with the bare minimum and selected the following: SubVersion for version control and Microsoft Visual Studio .NET of my compiler. 

    To be honest, I didn’t know what to do after the configuration wizard was complete, but I solicited the support of the tutorial.  My wizard-guided walk in the park was over.  I reviewed the provided examples and the took a product tour, a then I was, well, still clueless.  I jumped to conclusions and assumed that one needed to have more of an idea of what continuous integration is all about to use the product.  My assumption was half true.  Though FinalBuilder doesn’t walk you through the creation of the build script — for example, you aren’t going to be prompted to create a step to pull the latest code base from the repository to you build machine – you are provided a list of “action types” which you can do with as you choose.  Ultimately, this approach works great and even I was able to figure it out after about ten minutes of playing around.  I guess I was a little surprised by the hands-off approach FinalBuilder took with the scripting building after all the handholding I received when it came to the configuration setup. 

    I created a three step build script:

    1. Subversion Checkout
    2. MSTest Execution
    3. Build .NET Solution

    I played it safe and attempted to executed the script after each step added.  Murphy’s Law guarantees I would have problems — and I did. 

    Before I continue, I would like to share that FinalBuilder’s build log is second to none.  When I did encounter an problem, the log brought the issue to light and let me know how/where to resolve them.  Though the build log proved to be extremely helpful, it was my crutch and I was nearly completely dependent upon it.  It was like a game of Hide the Pot and after each step the build log would tell me if I was getting warmer or colder.  Figuratively speaking, I was using FinalBuilder with my eyes closed and a hint (a single hint) was only provided after an action on my part.  Here’s what I mean:

    There are details associated with each step.  In the case of the SubVersion Checkout, I provided a working folder, source and destination locations, and security information.  Fantastic.  When I executed my script and the build log generated the following error: “Subversion location has not been set, please check the location in Tools -> Options.”  Warmer.  Though the generated message helped me resolve the issue quickly, don’t you think 90% of first time users encounter this exact global-options-are-not-set condition?  I understand that most users will follow the build log’s instructions and set the binary location a single time and then they are good to go for every project script going forward, but I might suggest saving the user some time and frustration by asking for this information earlier on in the process.  Perhaps global setting instructions could be provided after the configuration wizard completes or when the first SubVersion action is added.  In either case, it may be just me, but I didn’t like the way the build log provided instruction on how to use the tool AFTER I took my best guess.  Once I provided the Subversion binary location, I tested the script again.  Colder.  There was a space in the full path of my destination folder location…which caused my script to bomb…which was uncovered when script was executed AGAIN.  Tighter form validation (or more than a single build log hint on my initial test) might have saved me some time in this case. 

    I mention the next issue not in an effort to belabor the point made above.  I mention it instead because I believe it to be helpful.  I received the following error when testing the compiler action: “ASPNETCOMPILER : error ASPRUNTIME: The precompilation target directory cannot be in the same tree as the source application directory.”  I may be wrong, but I believe this is a default setting in VS 2005 and this issue may be resolved by modifying the output folder as found within the MSBuild Options on the project’s properties.

    After all was said and done, my three step script was working repeatedly without any issues (and global variables were saved) within 30 minutes time.  Though I put a lot of emphasis on what FinalBuilder could do better, I found the product effective and easy to use.  FinalBuilder features over 600 built in Actions which allow you to do the following and much, much more:

    • Compile applications from source code 
    • Compile setup/installer programs
    • Work with Version Control Systems, to get, check out, check in & label files
    • Handle versioning with ease
    • Create & edit INI files & Windows registry keys
    • Burn CD’s & DVD’s, or create CD/DVD images (ISO images)
    • Zip & unzip files and other archive formats
    • Run automated testing
    • FTP files to/from servers
    • Send emails, post on news servers
    • Handle errors, run multiple tasks in parallel, and dynamically change the build flow
    • Iterate over sets of files and other lists
    • Compile help files
    • Schedule builds

    You may read more about FinalBuilder and Continuous Integration here and you may download the fully-functional, 30-day evaluation version here.

    I know I am going to move forward with Continuous Integration and FinalBuilder may help me out along the way. I’m glad I was made aware of this product when I did.  Thank you Universe.

    This was a paid review.


    Next Page »

    CONTACT

    RSS

    ARCHIVES

    READ BY TOPIC

    LINKS

    LINK ADS