Wednesday, January 14, 2009

Review: NeatReceipts

Overall: 4 out of 5

Highs: easy to use, good single page scanner/ocr solution, awesome tech support

Lows: installation issues for non-default installation, a bit slow to start up

I have been wanting a solution for organizing my receipts, reference documents, business cards for quite some time.  Enter NeatReceipts.  It is a good product and their tech support (which I hope that you won’t need) is awesome!  The optical character recognition (ocr) is good and the receipt scanning works well.  The user interface (UI) leaves a little to be desired in terms of looks (a personal problem – I don’t like grid-heavy UIs that much), but it is quite functional and snappy/generally responsive.

My biggest issue was that I did a non-standard installation and tried to install their software (latest version as of Jan. 12, 2009) on a drive that was different than my Windows installation.  What a mistake that was!  After wasting a couple of hours trying to get that installation to work, I finally mentioned that crucial detail to the tech support person with whom I was instant messaging and they quickly told me to conform and install on the same drive as my Windows installation.  With that new tidbit of information, the installation went off without a hitch.  One other issue that I ran into was a synchronization one related to Outlook.  I had scanned in a business card and sync’d with Outlook.  I realized that the contact info had been Optically Character Recognized (ocr’d) incorrectly.  I corrected the mistake (which I should have caught earlier) and re-sync’d.  For some reason my Outlook information got overwritten by the info from NeatReceipts.  Being a stubborn fool, I decided to try it again.  I updated the info in Outlook and then re-sync’d.  It worked this time.  Hmmmm… Ok.  I was a bit concerned about the sync at that point, but all seems to be well so far.  Also, the program is a bit slow to start, but then it is snappy, so I appreciate that trade-off.

 |  Fernando Cardenas  |  #    |  Comments [3]  | 

Northern Colorado .NET User Group Presentation and Code - Meeting January 12, 2009

Thank you to everyone who came to the meeting to hear about Pragmatic Architecture!  Please find my code below. 

You can download the original code here: Original Shopping Cart Code

My converted C# Code

My refactored C# Code

Please feel free to contact me with your comments and suggestions!

 |  Fernando Cardenas  |  #    |  Comments [2]  | 
 Friday, December 12, 2008

AppVenture Launches Stand-Alone T4 Template Engine

We at AppVenture have built a stand-alone T4 Engine to process and test T4 templates as part of a continuous integration environment.  We hope the community finds it useful.  Licensing is yet to be determined, but we plan to use a BSD-style license to keep everyone’s options open.

Get the AppVenture T4 Template Engine.

 |  Fernando Cardenas  |  #    |  Comments [4]  | 
 Wednesday, December 10, 2008

How to Evaluate an Interactive Agency or Web Design Company for a Redesign

I did a guest blog post for Imulus on this very topic.  You can find it here.

 |  Fernando Cardenas  |  #    |  Comments [2]  | 
 Thursday, November 06, 2008

T4 Strangeness in VB.NET and Visual Studio 2008

I was writing a quick T4 template in Visual Studio 2008 in a VB.NET project and noticed a few quirks/differences when compared to a C# project.

When you add a text file named “Test.tt” in a C# project, Visual Studio processes the T4 template and generates a corresponding “Test.cs” file:

Test.tt

I expected similar behavior in VB.NET, but I was quite disappointed.  For starters, I didn’t see any apparent output.  To fix this little issue, I had to click on the “Show All Files” button on the Solution Explorer.  Then the file showed up, but I was even more confused because I saw this:

Test.tt.vb

Apparently, the default file extension for T4 templates is “.cs”, so this shouldn’t have really surprised me, but I found it odd that in my VB project, I would have a C# file.  Fortunately, the fix is quite simple: add an output processor directive to the T4 file so that the file extension is “.vb”:

<#@ output extension=".vb" #>

That’s it.  I hope this post saves a poor soul some time.

 |  Fernando Cardenas  |  #    |  Comments [4]  | 
 Wednesday, October 29, 2008

Denver Visual Studio User Group Code - Meeting October 27, 2008

Thank you to everyone who came to the meeting to hear about Pragmatic Architecture!  Please find my code below. 

You can download the original code here: Original Shopping Cart Code

My converted C# Code

My refactored C# Code

More refactoring is left as an exercise for the reader  =]

Hint: use a strategy pattern and remove the dependency on the HttpContext and SortedList.  Enjoy!

 |  Fernando Cardenas  |  #    |  Comments [6]  | 
 Tuesday, September 30, 2008

Initial Microsoft Live Mesh Musings

I just started using Microsoft Live Mesh after hearing about it from Joe Shirey.  For those not familiar with Live Mesh, you can read more here, here, and here.

I have to say that overall I am very impressed with the promise of these services from Microsoft.

That said, the user experience leaves something to be desired.  I will do a more thorough review once I have been using it for a few months to give people a better feel for what Mesh is doing.  I also hope to have some time to be able to play with the Developer SDK, but that is probably wishful thinking =]

I am using Vista with UAC and Microsoft One Care.  Here are the few issues that I ran into when installing and synchronizing my first folder:

Installation

  • I had to turn off my Microsoft One Care firewall as the firewall wasn't allowing Mesh to install properly.  I even tried to allow the application access to the Internet, but the initial wait time for the firewall dialog and the UAC killed the installer even when I tried to run it again.  Tried this a couple times.  Had to just turn off the firewall and then re-run the installer.
  • Mesh takes forever to start up immediately after installing.  I have a reasonably fast machine and it took a few minutes, so I wasn't sure if the installation was successful or if the firewall had screwed things up.  A dialog letting me know that it would take a while would be nice.  Microsoft is generally good about these things, so I imagine this level of usability is at the end of the list of things to do.

General Usability

  • There are few/no cancel buttons on some of the dialogs.  I just had to wait for the web operation to time out (which took like a minute or two).  I had a modal dialog on my screen with no way to do anything to it.
  • Mesh takes a while to get going.  Again, more feedback would be nice.
  • Mesh doesn't provide detailed messages in terms of what has been synchronized.  It just tells you X folders and Y files were uploaded.  A little more detail (although hidden from the default UI) would be nice.

Overall, I think this technology has great promise, and I look forward to other good software+ services from Microsoft (the Microsoft marketing people are in my head and I can't get them out!).

 |  Fernando Cardenas  |  #    |  Comments [2]  | 
 Tuesday, September 23, 2008

What is Software Architecture?

I was in a meeting with the AppVenture development team, and we sought to answer this question so that we could build a tool to help software architects design and communicate architectures. 

We needed to define architecture so that we could determine what needed to be communicated.  So using Single Responsibility and the Separation of Concerns principles as our guide for architectural layers, we defined architecture as all the software layers and the way those layers interact in terms of dependencies.  One interesting finding is that our notion of architecture uses a composite pattern. 

This leaves us with a simple conceptual model:

Architecture

Figure 1. The conceptual model for architecture.

 

Using this simple conceptual model as our guide, we could create this simple architecture:

SampleArchitecture

Figure 2. The AppVenture Simple Architecture (ASA)

 

Let's call this architecture the AppVenture Simple Architecture (ASA). So in this architecture, we have three architectural layers (this is probably the simplest architecture I can think of): a UI architectural layer, a Domain architectural layer, and a Repository architectural layer.  In the ASA, the UI layer would probably have a sub-architecture (which is of type Architecture) that has a different manifestation for each UI technology.  This UI sub-architecture would have another model that could resemble this for an ASP.NET Web Application:

UIArchitecture

Figure 3. The UI sub-architecture for an ASP.NET Web Application.

 

In this instance, the UI Architectural Layer has a sub-architecture (shown in Figure 3) that contains three architectural layers: a Master Page architecture layer, an Aspx Page architectural layer, and an Ascx User Control architectural layer.  One interesting thing to note here is that in Figure 3, the Ascx User Control architectural layer depends on the Domain architectural layer from the ASA architecture (Figure 2).  That dependency exists in these models to illustrate that in this architecture, the Aspx pages do not contain any dependencies to the Domain.  What this design decision means is that Aspx pages are simply containers for Ascx user controls.

I would love to hear your thoughts on this model and see which architectures do _not_ fit into this model.

 |  Fernando Cardenas  |  #    |  Comments [3]  | 
 Thursday, August 28, 2008

AppGen and the Speed of Change in Business

In a previous post, I talked about the AppGen Revolution, and now I want to talk about how fast the business changes its mind and how AppGen aligns itself nicely with the needs of the business and the developer.

But first: why should we care that our development aligns itself with the needs of the business?  At the end of the day we developers/architects get paid when the company for which we work makes money (or saves money – but I prefer to think of the glass as half-full  =P). 

Businesses make money when we build the right application and bring it to a receptive marketplace.  The last statement cannot be overemphasized.  Notice there is not a single mention of technology or architecture.  Can we use terrible technology and/or an ailing architecture and still make money?  Maybe.  Depends on the marketplace.  We have all seen technically inferior products reign supreme and superior products die.  The market is truly a strange and whimsical place.

You may be thinking: as a developer it is hard it is to deal with the way businesses operate.  The only constant in this world is change.  Changing requirements, changing their minds about the way things should work once they see the way the software was built, changing deadlines, changing colors, sizes and shapes of buttons  =]  So we try to build the software to adapt to those changes in a manageable way.  We may even create new development methodologies and notions (XP, Crystal Clear, Scrum, TDD, BDD, etc.) to help manage this change in new ways.

This area is where AppGen fits.  By being able to 1) model a business domain, 2) model the user interface in a technology-agnostic way, and then 3) generate working applications to get feedback from users in a matter of hours is truly revolutionary.  I believe that the reason Agile methodologies all work so well is that they are meant to focus on delivering working software.  AppGen always delivers working software and does it in the most rapid way possible.

 |  Fernando Cardenas  |  #    |  Comments [4]  |