Version 1.7.3 for ADO Released

This release it a fairly minor one to fix a rather painful bug that went out in EF 6.1.1. This error revolved around a NullReferenceException that would be generated when users upgraded to EF 6.1.1.

With help from the guys on the EF team, we narrowed down the issue:

Basically in ClonedObjectContext, EF first disposes of the Glimpse connection, and then EF disposes of EntityConnection (which then tries to unsubscribe from the state change event). Fix is to simply change the order of those calls in EF.

Unfortunately with EF 6.1.1 being in the wild now, it was important that Glimpse could work around this issue. Hence, additional checks where added to Glimpse.ADO in this release to work around this issue.

This release sees updates to following packages:

  • Glimpse.ADO – Featherweight release 1.7.3
    • Conduct an additional null check around the StateChange event (fixes bug in EF 6.1.1)
  • Glimpse.EF* – Featherweight release 1.6.4
    • Update to work around bug in EF 6.1.1

And for the great issue reports, I want to thank:

Also I would like to say a very big thanks to the EF team, specifically:

  • Maurycy Markowski
  • Arthur Vickers & Lawrence Jones
  • Rowan Miller

Well, as usual, I think that is a wrap. For a full list of changes, issues and commits see below:

Glimpse 1.8.6 released

Its that time again and we have another release ready to go. This one is mainly another patch/bug release, but it also a couple of nice things come to the table.

Glimpse Launcher
One of the biggest things to note is the addition of a new button to the `~/glimpse.axd` page. This button is designed to be a temporary fix to help those who have sites that contain only services. Currently its difficult for these users to launch Glimpse. In most cases it requires adding a dummy page to the site, so that Glimpse can be launched from that point. This new button allows the user to launches the client in fullscreen mode. From there, the history tab can be used to track requests.

Launch Glimpse in FullScreen Mode

Launch Glimpse in FullScreen Mode

Note, there is currently a limitation on this feature which means the client will only launch if Glimpse has already detected at least one request. If this limitation causes you any issues please let us know. Additionally, v2 of Glimpse will bring to the table first class support for services.

This release sees updates to following packages:

  • Glimpse.Core – Featherweight release 1.8.6
    • Add button which makes it easy to launch glimpse for service only sites
    • Improve how client renders for those using Zurb Foundation
  • Glimpse.AspNet – Featherweight release 1.9.1
    • Fix issue for ajax requests that are using “Bufferless input streams”
    • Show non-MvcRoute route types in route tab
  • Glimpse.WebForms – Featherweight release 1.1.1
    • Fix issue to make Glimpse checks if it is enabled in DataBoundControlAdapter
  • Glimpse.Ado – Featherweight release 1.7.2
    • Ensure ADO inspector does quotes `AnsiString` parameters in query output
    • Ensure that all parameters in `CreateDbCommandDefinition` are forwarded through
    • Prevent command sanitizer from replacing partial matches of parameters

In terms of pull requests, I have to say a big thanks to:

  • Kristian Hellang
    • #802 – Prevent command sanitizer from replacing partial matches of parameters
  • Thomas Zitzler
    • #806 – Fix issue for ajax requests that are using “Bufferless input streams”
    • #803 – Ensure that all parameters in `CreateDbCommandDefinition` are forwarded
  • grahammendick
    • #789 – Fix issue to make Glimpse checks if it is enabled in DataBoundControlAdapter
  • Boris S
    • #783 – Fix issue to make Glimpse checks if it is enabled in DataBoundControlAdapter

And for the great issue reports, I want to thank:

Well I think that is a wrap. For a full list of changes, issues and commits see below:

Glimpse 1.8.5 released

Its that time again and we have another release ready to go. This one is mainly another patch/bug release, but it also sees support for Attribute routes come to the table.

In addition, there has been a fairly sizeable fix released for Entity Framework which affected people trying to use Glimpse.EF6 with EF 6.1.0 – 6.2.0-beta. This has taken a little to track down, and I would like to thank everyone involved in sorting this out and coming up with the fix (especially the guys on the EF team… HUGE thanks guys!!!).

This release sees updates to following packages:

  • Glimpse.Core – Featherweight release 1.8.5
    • Fix where Clients that have a name with quotes in it blows up
  • Glimpse.AspNet – Bantamweight release 1.9.0
    • Added support for attribute routes
  • Glimpse.Ado – Welterweight release 1.7.1
    • Significant performance improvement when calling stored procedure with binary data param
  • Glimpse.Ef* – Welterweight release 1.6.2
    • Fixed possible NullReferenceException in Glimpse that was surfaced with EF 6.0.2
    • Introduced workaround for bug that was introduced in EF 6.1.0 – 6.2.0-beta

In terms of pull requests, I have to say a big thanks to:

And for the great issue reports, I want to thank:

Well I think that is a wrap. For a full list of changes, issues and commits see below:

Glimpse 1.8.4 released

Another month has gone by since our last release and this time round its a smallish one. Mostly bug fixes and a couple of usefully additions, but most of our time lately has been focused on v2.

By way of a small update on v2, we have almost finished the work we want to do on the backend and starting to look at the UI of v2. If you are interested in seeing exactly where things are at or seeing where you can get involved, feel free to take a look.

Getting back to the release, here is what we have this time around:
Release Notes

  • Glimpse.Core – Featherweight release 1.8.4
    • Fix up edge case where UI would not be resizable
    • Extending the ContentTypeElement to include optional RuntimePolicy
  • Glimpse.ASP.NET – Bantamweight release 1.8.1
    • Update to RouteInspector to ignore non AspNet routes doesn’t work for WebHosted WebAPIs
  • Glimpse.EF* – Bantamweight release 1.6.1
    • Fixed bug when using DbGeography type in some edge cases

Special Thanks
In terms of pull requests, I have to say a big thanks to:

  • Paul Atkins
    • #736 The update to RouteInspector to ignore non AspNet routes doesn’t work for WebHosted WebAPIs
  • Björn Holdt
    • #746 Migrate Build to use Automatic Package Restore
  • James Chambers
    • Update to contributing documentation

And for the great issue reports, I want to thank:

Release Details
Well I think that is a wrap. For a full list of changes, issues and commits see below:

Thanks to everyone involved and enjoy the release!

Glimpse 1.8.3 released – Insights removed

Today we had an unscheduled release of Glimpse. This was to remove the Insights “feature” which was introduced in the last release – 1.8.2. Its removal is based on the feedback we received from the community since going live.

Background
For a long time now, we have been trying to work on ways to get better feedback about how people use Glimpse. We routinely hear from people on Twitter, via the issue list and at conferences, unfortunately, this feedback is fairly anecdotal and hard to quantify. We decided to try and get usage analytics directly from the client itself.

In thinking about this, we decided to ask the community what they thought. Before we release 1.8.2, we posted our thoughts on this blog – Getting greater insights into Glimpse – and out on Twitter, asking for feedback, and received no negative response.

This morning, we received feedback from the community that the Insights feature isn’t desired (at least in its current form) and until we can make a decision as a community, we have removed the feature and released this update.

Moving Forward
From this experience, its clear that the communication channels that we have, and the process of lazy consensus, can’t adequately cover all situations. In addition, for changes such as this, we should work much harder to get/force a response from the community before moving forward.

I’m happy that the we where able to respond to community feedback quickly and hope that we can continue to do so in the future.

Thanks to those who participated in the discussion and I’m glad we came to a good outcome.

Putting WebForms DataBinding front and centre

The previous release of Glimpse saw the introduction of first class WebForms support, bringing with it a contextualized view of both the Control Tree hierarchy and the Page Life Cycle. Glimpse WebForms development has been continuing apace and with this new release we’re delighted to shed some light on the previously dark art of WebForms DataBinding.

WebForms ‘DataBlinding’
DataBinding is to WebForms what ModelBinding is to MVC and is an essential ingredient in building maintainable and testable WebForms code. But until now, understanding when a DataBind occurs has been pretty much a mystery. For example, a change to the Page’s PostBack status or a Control’s ViewState mode can have dramatic effects on when DataBinds are triggered. Changing a DataBound Parameter value is another way to fire a DataBind, the Text of a TextBox for example, but keeping track of these values as the Page moves through its Life Cycle hasn’t been easy.

Glimpse to the rescue
We’ve added a new DataBinding section to the Control Tree tab. Alongside each DataBound Control we list the Page Life Cycle Events during which a DataBind was triggered for that Control. The screenshot below shows that the categoryList was DataBound once during the Page PreRender Event.

DataBinding Event

You may be thinking this information can only be displayed if you’re using the latest .NET 4.5 DataBinding approach, more akin to the ModelBinding architecture of MVC. But you’d be wrong. The Event information is displayed for all Controls inheriting from DataBoundControl, for example the ListView and FormView (but not the DataGrid or DataList), irrespective of how they were DataBound.

We haven’t stopped there. Together with the Event we also display the Parameters in play at the time the DataBind happened. The screenshot below shows the breakdown of the Parameters used when the productList was DataBound in the PreRender phase. The first Parameter looked for, but didn’t find, the id field in the QueryString; the second Parameter found a value of ‘Cars’ in the RouteData categoryName field.

DataBinding Parameters

Once again, this Parameter display isn’t limited to .NET 4.5 DataBinding. Provided the Parameters are registered using an ObjectDataSource, LinqDataSource or SqlDataSource the information can be extracted just the same.

Glimpse 1.8.2 released

Its a new year and we have a new release ready to go out the door. This time around, we have a ton of bug fixes and a few new features here and there. This release represents the most contributions Glimpse has ever had in a single release, as well as having the greatest number of contributors.

WebForm support for DataBinding
Since our initial support for WebForms was released, the response from the community has been amazing. Not only have we discovered that WebForms developers have been seeking innovations in the space, but have been wanting to get involved. This has lead to Graham Mendick and Steve Ognibene stepping forward to make sure the WebForms package keeps moving forward.

This has lead to DataBinding visualization being added to the Control Tree tab within Glimpse. More details will com in a future blog post, but the short version is that we can now see all the actions that WebForms takes to bind your controls.
WebForms_DataBinding

ASP.NET Server tab
In a previous release, we removed the old version of the Server tab. This was removed as a lot of the data we where displaying was being shown elsewhere. Since then, we have found that some users missed the data that wasn’t being displayed elsewhere. Hence, the Server tab has made a come back and has received a bit of a facelift thanks to Bryan Hogan.
ServerTab

Glimpse Insights support
Along with this release, we are putting out Glimpse Insights. As discussed in the post, this is the means by which we hope to better understand how people use Glimpse and where we should be focusing out efforts.

As much as we need these insights to make better decisions and ultimately a better product, if its something that you don’t want to take a part in, you can completely opt-out. Simply update the Glimpse section in your web.config to have the following addition:

    <clientScripts>
      <ignoredTypes>
        <add type="Glimpse.Core.ClientScript.Insight, Glimpse.Core"/> 
      </ignoredTypes>
    </clientScripts>

If you do opt-out, there will be no traces of Insights in your code base. Insights was designed not simply to be a switch on or off, but to be a complete removal. Meaning no traces of the Insights code will remain if you choose to opt out.

Release Notes

  • Glimpse.Core – Featherweight release 1.8.2
    • Update to disabled Glimpse when request init is bypassed
    • Update client to only modify local ajax requests
    • Add initial support for Glimpse.WindowsAzure and Glimpse.WindowsAzure.Storage
    • Update to show friendly message if current async implementation is not supported
    • Added initial Insights support to client
    • Update client to delayed tab rendering till glimpse open
    • Update client to added more blacklist items for target chars that should be ignored by case processor
  • Glimpse.ASP.NET – Welterweight release 1.8.0
    • Update Route Inspector to ignore non AspNet based routes (this fixes problems with Glimpse and WebAPI)
    • Added updated Server Tab which shows common server variables
    • Clean up web.config transform to remove volume of commented out config in the glimpse section
    • Update Request Tab serialization to handle request validation failures
  • Glimpse.MVC* – Flyweight release 1.5.3
    • Added updated support for IUnvalidated and IEnumerable ValueProviders
    • Fixed problem where Response.RedirectToRoute() in Global.asax could throw a NullReferenceException
  • Glimpse.WebForms – Lightweight release 1.1.0
    • Added visualization for DataBinding in the ControlTree Tab
    • Improve basic ViewState processing for SqlDataSource, LinqDataSource and ObjectDataSource

Special Thanks
In terms of pull requests, I have to say a big thanks to:

  • Christophe Gijbels
    • #704 Disabled Glimpse when request init is bypassed
    • #702 Update Request Tab serialization to handle validation failures
    • #701 Added update for IUnvalidated and IEnumerable ValueProviders
  • Keith Dahlby
    • #688 Show friendly message if current async implementation is not supported
  • Paul Atkins
    • #723 Update Route Inspector to ignore non AspNet based routes
  • Bryan Hogan
    • #712 Adding updated Server Tab which shows common server variables
  • Graham Mendick and Steve Ognibene
    • #716 Update WebForms Control Tab to visualize DataBinding

And for the great issue reports, I want to thank:

Release Details
Well I think that is a wrap. For a full list of changes, issues and commits see below:

Thanks to everyone involved and enjoy the release!

Client side development just got easier

For those who are contributing to the client or writing client side plugins, things just got a little easier. Today we committed to master an update that adds a feature to the client test page which shows all the client pub/sub events that occur and who is subscribed.

The client has a loosely coupled architected based on top of a pub/sub model. Pub/sub has many advantages, but one of its biggest disadvantages is visibility into what events are occurring, the data being passed and who is subscribed. This tab reveals all of this information and more. It even updates live as events are occurring and as the client lifecycle moves on.

Here is a preview of what you can expect:
PubSubTab

At the moment, this tab is currently only available in the client test page. In the future, we are looking at the possibility of shipping this within the server implementation and allow developers to toggle it on and off as required. But this will be done some time in the future based on feedback.

Getting greater insights into Glimpse

It’s the start of another year for Glimpse, and like last year, we are gearing up for more big things. In the first half of the year, we are expecting to get version two out the door – plus more support for new frameworks and platforms.

In 2013, Glimpse version one shipped in February, and since then it’s been a roller-coaster ride of support for additional frameworks (ADO.NET, EF, ASP.NET MVC4, MVC5 and WebForms), great new new features and a design overhaul. In addition we’ve been keeping up with new paradigms and rethinking established ones (support for async, and the new visualizations of WebForms information released in October and November). Some amazing work has gone into all this, and while there are a few names that do stand out (we brought on two new full time contributors Christophe Gijbels and Björn Holdt), it’s all down to you guys – so thank you, and we hope you had very Happy Holidays!

With the start of 2014, we are focusing on how we get you the information you need to better understand your application. Most of this boils down to what we are currently calling “context aware UI”. This is based on a realization that we are currently siloing information that can better be represented when shown together, in a unified view.

Currently, this is happening in HUD and the various popup views. Here, we merge together information from the several tabs (such as the execution and SQL tabs), to build a unified picture. But we want to carry this vision beyond just HUD and forward into the main Glimpse UI. Exactly what form this will take, we aren’t sure yet, but it’s something that we are actively working towards.

To this end, we want to better understand how people use and interact with Glimpse. With this information, we feel we can better make the decisions on how to move forward and what impact potential changes will have. To help in doing this, we feel the most effective tool we can introduce is system analytics.

In the past, we’ve made all Glimpse improvement decisions based on anecdotal evidence that hear in the the issues list/forum and by chatting with users at conferences. While this information has been enlightening and hugely helpful, we’re never been able to be quite certain whether we’re helping the majority of you, or just those of you who are active in voicing your opinions.

Removing the Server tab is a great example of where we might not have made the best decision that we could have. We made the change based on feedback from users who said that they didn’t use it. Once it was done, we had a large number of users come back saying that they regularly use this tab. We had no idea these users existed or used Glimpse in the way that they do.

To remedy this, we’d like to introduce metrics into Glimpse to allow us to more fully understand usage, what tabs are being used and what mostly gets thrown by the wayside. This will help us to create a Glimpse that works best for you, based on what you want and need, rather than what we think might be useful. This, we hope, will help us move forward and take Glimpse to the next level.

Being the type of project we are, we will be fully transparent with our findings and what the data is revealing to us. We expect that the metrics will flow through to our site, but we haven’t worked out the exact technical details yet. Additionally, like any similar effort, if for what ever reason you don’t want to participate in providing anonymous usage data, we will provide a simple means to completely opt-out. Lastly, it is intended that none of this effort will impact the runtime or execution of your application which we deem as a key criteria for success.

Like always we would love your feedback and ideas. If anyone is interested in helping out with the dev effort, let us know, as there are several technical challenges that are going to be interesting to work through.

A Glimpse into Windows Azure

With Glimpse, we  can peek into all things server side. We can inspect ASP.NET, ASP.NET MVC, Entity Framework, ADO.NET and much more through plugins. Since many developers are making use of Windows Azure to host their web applications, we are happy to announce a first public preview of two Windows Azure tabs in Glimpse!

Glimpse.WindowsAzure.Storage

The Glimpse.WindowsAzure package will display runtime information for a Cloud Service or Web Site. Glimpse.WindowsAzure.Storage collects and displays information about traffic from and to storage and gives best-practice advice. More information about the information offered through these new tabs can be read on Maarten’s blog.

It would be great if you could give these two packages a try and give us feedback! Here’s how:

Note that the Windows Azure tabs are still in a preview phase and rough edges may be in there. We’re still looking at load balanced environments. You can implement Glimpse’s IPersistenceStore but we would like to have a zero-configuration setup in place.

Enjoy the new year!