Tuesday, December 31, 2013

Good mantras for any coder to live by

I thought this was a good mantra for all coders, which comes from Python REPL by typing "import this".

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

These are good guidelines for any coder to live by, I'd say.

Friday, August 09, 2013


I created a utility which translates.NET applications into any language.


  1. Generate .resources localization files for your application and then launch it to see your application in that target language
  2. Use Google Translation service to automatically translate text
  3. Publish your translations online to share with other users

Translating an application can often be expensive because it requires both developers and application users. App Translator allows end users to produce their own translations and share them with other users. Translation is automated via integration with Google Translation API.

We are interested in your feedback, please contact me, or leave a comment with questions or suggestions. An example translatable application is included in the install which demonstrates how easy it is to use App Translator. To change the target application, simply edit the Features.xml file. App Translator has been successfully used on large enterprise applications with tens of thousands of items translated. It is now generalized to work with any .NET application. We are interested in your feedback to help make improvements.

Tuesday, July 16, 2013

AppTranslator: A Translation Utility

I created a utility for translating .NET applications.

App Translator allows you to translate .NET applications into any language.

  • Generate .resources localization files for your application and then launch it to see your application in that target language.
  • Use Google or Bing Translation service to automatically translate text.
  • Publish your translations online to share with other users.

I am interested in your feedback and suggestions. Please download it and try it out, or watch the tutorial videos.

Wednesday, March 13, 2013

SpreadsheetGear vs. SyncFusion vs. ComponentOne

I conducted a three month analysis comparing three top spreadsheet controls for .NET application developers: SpreadsheetGear, SyncFusion Spreadsheet, and ComponentOne Spread.NET. The definite winner was SpreadsheetGear, with ComponentOne Spread.net in second. SpreadsheetGear provides the most Excel-like experience, is the most performant, and provides the most responsive and capable product support.

I build a reporting engine for my company and SpreadsheetGear made it awesome. Our customers have been very pleased. I wanted to share my extensive analysis with any other developers out there trying to find the right spreadsheet control for their .NET application.



  • Spreadsheet gear grid goes to 1 million! Wow. (SyncFusion goes to 500 by default, ComponentOne goes to 60k)
  • SpreadsheetGear is an older control which has been around for a while. It is built by the same guys who built Formula1, so they have been doing spreadsheets for many years.
  • SpreadsheetGear has a better keyboard/mouse experience than SyncFusion or ComponentOne. The grid is tuned to the Excel experience, for example copy down, shift down arrow, drag to fill-down series, etc.
  • SpreadsheetGear supports 398 Excel formulas. SyncFusion supports 183. ComponentOne: ?
  • Good printing support. SpreadsheetGear has built in print preview (which is more performant than SyncFusion)
  • SyncFusion documentation and API comments are much better than ComponentOne.
  • SyncFusion has a context menu on by default, ComponentOne does not.
  • Support for Spreadsheet gear is much better than ComponentOne. ComponentOne gave me wrong answers on several occasions. I was able to email support directly and receive detailed answers with sample code same-day.
  • The SpreadsheetGear control doesn't come with a ribbon control, but it does come with right click context menu, and dialogs which allow for sheet editing and formatting.
  • Supports Exporting to Excel
  • In SpreadsheetGear, Images are draggable. In ComponentOne and SyncFusion, the images are stuck in one spot.
  • The icons, ribbon, and dialogs for ComponentOne and SyncFusion look more modern than SpreadsheetGear.
  • Spreadsheet gear has impressive multithreaded support (GetLock(), ReleaseLock(), multi-core recalc and sorting and interruptible background recalc)
  • SpreadsheetGear is able to open a spreadsheet in SpreadsheetGear control that is also currently open in Excel. SyncFusion throws an exception.
  • SpreadsheetGear has formula bar, ComponentOne does not have formula bar.
  • ComponentOne Spread.Net has different API between WinForms and WPF versions for some reason. Spreadsheet gear has the exact same API between the two.


Scalability and Performance

The scalability tests against SpreadsheetGear were impressive which is important for the large amount of data we need to handle. SyncFusion was throwing exceptions when we tried to insert more than 500 rows. ComponentOne was limited to 50k rows. SpreadsheetGear was orders of magnitude faster.

  • Generate 1004 custom plot controls on SpreadSheet: 0.03 seconds (controls are virtualized until they become visible)
  • Large table refresh with 55,000 rows: 6 seconds
  • Successfully generated 2,584 page report to PDF using Amyuni PDF print driver resulting in a 70 megabyte file.






volume discounts of 10% for 4 or more, 25% for 10 or more
$1200/developer $1800/developer retail, $900/developer volume discount
Pricing Detail
Includes year of support and product updates
Pricing Detail
Enterprise suite of controls
Pricing Detail
Entire enterprise suite of controls


My analysis was conducted September 2012 – December 2012. Note to be fair to SyncFusion, their Spreadsheet control is version 1. I ‘m sure it will get better. They offer a whole suite of controls including an awesome sample code browser (I like them better than Infragistics in many ways).

In conclusion, SpreadsheetGear is the hands down winner. We demoed our reporting engine built on SpreadsheetGear to our German Software team last week and they were quite impressed how much we had accomplished in so little time. We demoed the product to our customers and they are thrilled (no exaggeration here). I am happy to recommend SpreadsheetGear because they have done an outstanding job which blows the competition out of the water.

Joseph Fluckiger

Sr. Software Architect

Thermo Fisher Scientific

Austin, TX


SpreadsheetGear Screenshots


This is a screenshot of the reporting engine we built using SpreadsheetGear. Note that the ribbon is not included with spreadsheet gear. We used Infragistics WPF ribbon control in our application. And a Microsoft WPF Expander control for the left nav.



ComponentOne Spread.Net Screenshots





SyncFusion screenshots