Mr. .NET

Thoughts from a Product Manager…Geek…Gamer

Reporting from objects

leave a comment »

For the past month or so the Data Dynamics Reports team has been hard at work attacking various performance issues in the product.  My goal is to have one of the fastest reporting engines in our class, and we’ve made some great strides in that regard already.  We measure the performance by running various standard reports with different size data sets and measure various attributes while we do so.

We have an internal utility that we use which automates this process and spits out a CSV file, each line being a set of 3 runs of a report.  We also run the same report through a competing product to give us a baseline, so for each report there are 2 rows of data.

Report,Product,Rows,PeakMem,AvgMem,Render1,Render2,Render3
BasicChart,DDR,1000,47948,41715,2888,160,149
BasicChart,XXX,1000,56164,43809,3365,944,962

While this format is easy to generate, it is harder to consume and make comparisons; for example it isn’t possible to compute the difference between the two products on this one report without first manipulating the data.  This is easily done through code; and by using the Object data provider in DDR it is easy to put this manipulated data into a report.

Here is the code I use to render a report to PDF.

private static void ExportToPdf(ReportDefinition reportDefinition, object data, FileInfo outputFile)
{
	var runtime = new ReportRuntime(reportDefinition);
	runtime.LocateDataSource += (sender, args) => args.Data = data;

	var pdf = new PdfRenderingExtension();
	var streamProvider = new FileStreamProvider(outputFile.Directory, outputFile.Name);
	var settings = new NameValueCollection();

	runtime.Render(pdf, streamProvider, settings);
}

Here data is what I’m binding the report’s dataset to. In this particular case I’m passing in a List<PerformanceRecord> or List<ComparisonRecord>. To keep this code generic I didn’t restrict the parameter to IEnumerable because this same code could be used to bind to an ADO.NET DataTable or DataSet as well.

Overall this was an easy project to implement, the only part that was difficult was writing the code to manipulate the CSV data into a usable format.

Written by James

November 17, 2009 at 12:58 pm

Posted in General

Tagged with ,

RIP Windows Calendar…Hello GMinder

leave a comment »

Like many others have found out before me, Microsoft has removed Windows Calendar from Windows 7.  Instead they’ve created a new client and integrated it with Windows Live Mail…Thats just fine and all, except that I use gmail’s web interface for all of my email (work and personal) and I don’t want another mail client to deal with when all I want is a calendar.

Where is the iCal-like application for Windows?  I’m not asking for much:

  1. Windows-based Reminders – I need to know when its time to leave for an appointment or switch on the Blue Jackets game.  Reminders that pop up in a web page are useless because I may not even be looking at that tab in my browser, at my browser, or even have the browser open (its rare but I do sometimes close Chrome out :) )
  2. Ability to easily add new appointments from the application
  3. Ability to see what appointments I have on an arbitrary day as well as a list of appointments for the day, next few days, or week.

Google Calendar would be great, except for item 1 above.  That is built into their Google Talk client, and like I do with my many email accounts and Gmail, I use an IM client that supports all of the various IM protocols I use daily (MSN and ICQ for family/friends and GTalk for work).

Fortunately, I managed to stumble across GMinder a free, OSS, notification application for Windows which pulls its data from Google Calendar.  I haven’t started using it yet, but I’m hopeful that it will fulfill my (rather basic) needs. People have been reporting that it doesn’t show the new Sports feeds that were recently added to Google Calendar, so it looks like I may need to dig through the source to fix that.  I need to keep up on the Blue Jackets after all :)

Update: As I had somewhat expected, the issue with sports calendars is a ‘feature’ on Google’s part.  The calendar doesn’t appear in the list provided by the gcal api and attempting to access it via the ID available on the calendar site results in an error.  A simple google search and I found this page (expand sports) which states:

Keep in mind that it’s not possible to sync sports calendars with other calendar applications at this time.

bummer

Written by James

November 16, 2009 at 1:43 pm

Posted in General

Foiled!

with 5 comments

Alas, my trip to L.A. for Microsoft PDC has been foiled by illness.  In my place, will be Jon “Pilgrim”; our director of technical support.  Thanks to the PDC crew for allowing us to make this last minute second change.

The irony of the situation is that the only person I had contact with the day I got ill was my barber….and why was I getting my hair cut?  So that it looked decent for the show.

Written by James

November 16, 2009 at 12:12 am

Posted in General

I’m a traveling man

leave a comment »

I was just sitting here thinking about some email that came in when I realized an interesting coincidence.  Each of the  past few years, I’ve been visiting cities farther and farther out west for various tech shows.

In Spring of 2007 I visited Denver for Devscovery, at the time the farthest I’d traveled West in the US.  In Fall of 2008 I visited Las Vegas for Dev Connections, again the farthest I’ve gone West.  Now it’s official, this November I will be going to PDC in LA, and yet again it’ll be the farthest I’ve traveled West.

This only begs the question; who is going to be putting on a show in Alaska or Hawaii next year?

Written by James

September 25, 2009 at 4:40 pm

Posted in General

Tagged with , , ,

Welcome FarPoint!

with one comment

Its been a while since my last post.  Work on Windy Garden has slowed considerably for a while; mainly because I’ve been working on other things but I did get a lot accomplished on it.  I’ll go back to it eventually and post about it here.

But that isn’t why I write this morning; as I wrote almost a year ago I’m now employed by GrapeCity following its acquisition of Data Dynamics.  This week, GrapeCity has announced that it has acquired FarPoint, creators of some very impressive controls and good friends to many of us that worked at Data Dynamics.  FarPoint Spread, an Excel-compatible .NET spreadsheet component, is a great companion to the line of data analysis and reporting controls already offered by GrapeCity.

Written by James

September 17, 2009 at 7:42 am

Posted in General

Tagged with , , ,

Introducing Windy Garden

leave a comment »

or…what I’ve been spending my weekends and early morning hours working on.

If you’ve read many of the early posts on this blog you’d see that I’m an avid gamer, and that I like to write code for various things however the one combination that hasn’t appeared much has been writing my own games.  This is mainly due to the fact that I don’t have many ideas that are realistic for me to implement.

Enter Windy Garden, the first game I’ve written since my days on the TI-85.  The premise is simple; a bunch of seeds are floating around on the screen and your objective is to plant them by nudging them with a chain reaction of blooms created by tapping on the screen.  You need to have good timing and strategic placement though; as the blooms only last for a short period of time.

Inspired by a similar game on Facebook titled Chain Reaction, I felt the concepts in this game were simple enough to implement for my first foray into Objective-C and iPhone programming.

The screenshots below show my current progress on the app, using graphics that were all hand-made so they don’t look the best.  I’m not sure what I’m going to do about that in the end.

Currently the core part of the game has been implemented, but there are still a few tasks that remain including scoring, game over, etc.  And I have a couple tricks up my sleeve yet as well.  Look forward to future posts which will discuss how I went about writing the game and what I learned as I went along.

Written by James

July 8, 2009 at 9:19 am

ActiveReports 6 RC Available

leave a comment »

Earlier this week the ActiveReports team made a Release Candidate available in the run-up to the final release of ActiveReports 6!

This release brings us closer to the final release of ActiveReports 6, and its coming soon!

Written by James

July 8, 2009 at 9:18 am

ActiveReports 6 Beta, now available!

leave a comment »

The ActiveReports team has just released the first public beta for ActiveReports 6!

This new version has many new features in it, with a healthy mix of design-time and run-time enhancements.

My favorite new features are the Flash viewer control, designer snap lines, and RepeatToFill option.

Flash Viewer

The Flash viewer control makes it easy to provide a great looking report viewer on your web page.  It replaces the ActiveX control due to the obvious limitations that technology presented users, not to mention the security implications with using ActiveX that kept many people from using it.

Designer Snap Lines

Snap lines make it a cinch to line up the controls in your report.  Now table style layouts are easier than ever to create and avoid the issues that overlapping controls can cause when exported to Excel.

Repeat to Fill

Have an Invoice style document that you need to generate, where the report contents fills an area on the page?  Repeat to Fill to the rescue!  This new property makes it possible to generate green-bar reports that fill the page, even if there isn’t enough data to do it.

Read what Sanjeev had to say about the ActiveReports 6 beta release.

Written by James

June 3, 2009 at 11:29 am

Posted in General

Tagged with ,

A quick word about some great products

leave a comment »

This week has been pretty exciting at GrapeCity.  I started the week off by releasing Data Dynamics Analysis, the team is already working on some killer functionality  I can’t wait to talk about it in a few months or so.

Next up, ActiveReports for .NET is in the running for the asp.netPRO Reader’s Choice Awards for 2009.  Please take a moment to vote for us in the Printing and Reporting category.

GrapeCity and Data Dynamics have also won several awards from ComponentSource.

2008 Bestselling Products Awards

  • ActiveReports for .NET—Ranked #2 in Top 5 Products
  • ActiveReports COM/ActiveX—Ranked #26 in Top 50 Products
  • Data Dynamics Reports—Ranked #100 in Top 100 Products
    • I’m especially proud of this, as I’ve been on the Data Dynamics Reports team since March 2006 as an Assistant Product Manager and then as Product Manager.  The product had already been in development for several years before I joined; but it’s still great to see something myself and the rest of the team have worked on sell so well.

2008 Bestselling Publisher Awards

  • GrapeCity-Data Dynamics—Ranked #4 in Top 5 Publishers
  • GrapeCity (Japan)—Ranked #5 in Top 5 Publishers

Lastly, Data Dynamics Analysis and Data Dynamics Reports are on sale for the rest of the month!

Save 33% on Data Dynamics Reports by using coupon code “903955CBD” and save 46% on Data Dynamics Analysis by using coupon code “AE0455CBD” at checkout!

New release of Data Dynamics Analysis

with one comment

Tonight I’ve released a new build of Data Dynamics Analysis to the world.  The team has been working hard on this release since the beginning of the year, and I’m glad that everyone can see what they’ve been up to since then.

The release notes for this build are below.

New Features

  • 119139 – Samples are now provided in Visual Basic .NET.
  • 121656 – Calculated measures are now correctly supported.
  • 123784 – The internal data manager has had some updates, this affects local cube files which cannot have sorting and filtering applied to them because they don’t have the required data in them. New local cube files do not have this issue.
  • 123793 – When using part-to-whole calculations, the grid now indicates the cells that are considered the “whole”.
  • 124878 – It is now possible to export the values of a view to the CSV file format.
Fixed Issues
  • 120917 – Using a dataview with an unbound data source no longer causes a file not found error.
  • 121252 – Removing a filter no longer drills up attributes.
  • 122730 – All CardLayout settings are now loaded when loading layouts.
  • 123785 – Improved performance of relational/unbound data.
  • 123935 – A data provider error no longer occurs when dragging and dropping a hierarchy.
  • 124489 – Some licensing issues have been corrected.
  • 125808 – The maximum value for graphs is now calculated correctly when adding two discrete fields to the row or column shelf.
  • 125810 – Part to whole calculations now calculate totals correctly.
  • 125865 – The range for a quick filter and manual filter is now correctly displayed.
  • 126133 – The page card no longer has a broken slider in Mozilla FireFox 3.0.
  • 126186 – The Quick Filter card for a KPI is no longer empty.

We’ve got some big features planned for the future and I can’t wait to share them with you.

Written by James

March 17, 2009 at 12:04 am