Monday, February 26, 2007

Q4 2006 SP2 due this week

It has been about 5 weeks since the first service pack for the Q4 2006 release, and now it's time for SP2. In years past, now would be the time where we start to turn up the volume on the first release of 2007, but with the new release schedule there will be more time between releases and in turn more service packs.

Little is known about SP2 at this point, but there are some details about what we can expect to see floating around the Telerik.com forums:

  • New r.a.d.grid ValidationSettings section
    • Will introduce three new validation related properties to grid
  • Bug fixes for r.a.d.grid, including ClientCheckBox 'select all' problem
  • New support for hierarchical data binding to business objects
    • Affects treeview, panelbar, and menu
  • Bug fixes for r.a.d.upload and a new file input tooltip feature
  • r.a.d.combobox SelectedIndexChanged bug fixes
  • Updates to r.a.d.chart documentation (maybe)
  • New "spell provider" property for r.a.d.editor (maybe)
And that's about it. I'm sure there will be plenty of bug fixes across all of the radControls, but we'll have to wait for the official SP2 release for more details. Stay tuned, though, Q4 SP2 is only days away!

radControls in the real world

Quick Start Demos may be interesting, but there is nothing like seeing radControls in the "real world" to have the confidence that they'll work in your next project. There are more than 15 client spotlights on the Telerik.com website that accomplish this task, showing you how big projects have used the radControls to deliver stunning results (thanks to Telerik's beautiful UI design) on time (thanks to the "rad" in radControls) and on budget (thanks to radControl value pricing).

This month's issue of Dr. Dobb's Magazine (well, it's really March's issue, but you know how magazines work) presents yet another example of radControls in the wild. Avalinx, makers of xWorkForce.com, needed tools to help them make their web application feel like a Windows desktop application. Using a number of radControls, including grid, ajax, chart, menu, and treeview, Avalinx was able to quickly achieve the results they were after.

Have you ever found success with the radControls in a big project? Send me your story or drop a link in the comments and I'll feature the best examples in another post.

Sunday, February 18, 2007

add telerik search to your browser

As a Telerik developer, telerik.com serves as an invaluable tool for finding answers to all of my radControl questions. From the massive repository of information in the community forums (17,800 threads and counting) to the helpful online demos (of which there are almost 600) to the over 9,400 documentation topics, I can usually find the answer I need to solve any of my problems. But sometimes I get tired of constantly opening a browser, navigating to telerik.com, and visiting the Forums or Support Center just to submit a search.

Fortunately, FireFox 2 and Internet Explorer 7 (in an increasingly common show of cooperation) offer a shortcut that will make my life (and hopefully your life, too) much easier with their support of the OpenSearch format. The OpenSearch description syntax allows anyone to define a custom search provider that FireFox 2 and Internet Explorer 7 can use with their in-browser search boxes. Searching your favorite site is now a simple matter of picking the correct provider from your browser's list of providers.

In my continuing effort to make your life as a Telerik developer easier, I've once again done the "hard work" for you. You may have noticed that when you visit TelerikWatch.com, your browser's search provider selector begins to glow (if you haven't, look now...I'll wait). I've created three custom search providers for Telerik.com that take advantage of the new and improved Telerik Support Center Google powered search: one that searches all of Telerik.com (forums, documentation, knowledge base, Code Library, and demos), one that just searches forums, documentation, and knowledge base articles, and one that just searches the forums.

So add the new Telerik search providers to your browser's search provider list now and begin searching Telerik.com like a pro. And if these providers don't fit your exact needs, it's not hard to create your own provider in a matter of minutes.

Friday, February 16, 2007

Sitefinity 3.0 RC1 available for download

Many of you may not know this, but telerik does do more than ASP.NET and WinForms (and now Reporting) products. They also make a full featured Content Management System (or CMS) called Sitefinity. You'd be hard pressed to find a link to Sitefinity on the Telerik.com website today, but that's all about to change with upcoming release of Sitefinity 3.0.

The new Sitefinity represents a complete re-write of the CMS, making it even easier for developers to extend the product with custom modules and raising the product's general quality to the traditional "telerik quality" that we've come to expect. The features of Sitefinity 3.0 are vast, including multilingual support, content versioning, customizable content workflows, user management, full Visual Studio 2005 support, and out-of-the-box support for a variety of database backends.

Today's news represents the culmination of 7 months worth of development on the new CMS version. If you're used to seeing the amazing results telerik can produce in their quarterly radControl releases, you'll have some idea of what you can expect from an incubation period of this length. Get more details and a link to the Release Candidate download here and start exploring the latest and greatest in Web CMS systems.

telerik Reporting beta 1 released!

As promised, Telerik has just released the first official beta of their new Reporting product. I revealed some high-level details about what you could expect in this beta earlier this week, but here are some more details about what you'll find in beta 1:

  1. Three new report items:
    - Subreport
    - Panel
    - Shape (lines, polygons, stars, arrows, cross)
  2. New report item events
    - Item Added/Removed
    - Item Data Binding/Data Bound
    - Item Begin/End Render
    - Report NeedDataSource
    - Report Begin/End Render
    - Begin/End Render Report Page
  3. New report processing model
  4. New design time improvements Style Builder
  5. Documentation is now included (yay!)
  6. VB.NET version of all sample projects now included
Clearly, this beta marks a major step forward for Reporting. One of the biggest features of this release is the included documentation, which up to this point has been missing. So if you've been sitting on the fence watching the CTPs go by, now is the time to jump in and start playing with Reporting. The final release of the first version can't be too far now...

Download Reporting Beta 1 now

Thursday, February 15, 2007

extending radControls

With the introduction of ASP.NET AJAX and the AjaxControlToolkit came a new model for adding functionality to existing controls: Extenders. Extenders are neat little controls that extend (thus the name) existing controls by adding new client-side functionality. The magic in the Extender model is that it enables you to set properties in a compiled server control that are automatically fed into supporting JavaScript functions. Amazing examples of what can be done with this model are available on the AjaxControlToolkit Live Demo site.

If you've been developing with the radControls for long, you know that there are times when you wish that your amazing radControl could just do one more thing. Maybe you want to have a grid with drag-and-drop reordering. Maybe you want an input control that can be watermarked with CSS styles. Can we use Extenders to add this functionality to our 3rd party controls? I decided to try.

The executive summary: you can extend radControls with Extenders, but it's not easy.

Why? radControls, like many 3rd party components, come with lots of client-side functionality out of the box (after all, that's why you use these controls over the standard ASP.NET controls). That poses a challenge when you try to add your own client-side functionality to the controls, because you're faced with breaking disabling existing functionality in order to get your own additions to work. That makes extending 3rd party controls much more difficult than extending normal ASP.NET controls (as is done by the AjaxControlToolkit).

I made two attempts to extend radControls: one to add drag-and-drop reordering of rows to grid and one to add styled watermarks to input. The input project fared much better than the grid project, though neither has resulted in perfect results yet. For this post, I will discuss the more successful input project with some code and screenshots.

extending radInput
The goal for my InputWatermarkExtender is simple: create a control that can apply a CSS styled watermark to an input control. Out of the box, input supports some basic watermarking capability, but it does not allow watermarks to be styled with CSS. That may change in version 2 (due in April), but for now we'll need an Extender to get the job done.

To create the InputWatermarkExtender, I borrow heavily from the existing TextBoxWatermarkExtender that comes with the AjaxControlToolit. I start by creating my new AjaxControlToolkit Web Site in Visual Studio and then adding a new ASP.NET AJAX Control Project. With the basics established, I add two public properties to my server control class (WatermarkText and WatermarkCssClass) and one private read-only property (InputControlID to return the actual ID of the visible input textbox). When you add property accessors in an Extender, you must do things a little differently in order to wire-up the automatic communication with your JavaScript code:

<extendercontrolproperty()> _
<requiredproperty()> _
<defaultvalue("")> _
Public Property WatermarkText() As String
Get
Return GetPropertyValue(strWatermarkText, "")
End Get
Set(ByVal value As String)
SetPropertyValue(strWatermarkText, value)
End Set
End Property


Notice the property decorators that let the complier know these are Extender properties and the Get/SetPropertyValue functions that are used to pass your values into the JavaScript. The actual leg work is done by the AjaxControlToolkit Extender classes.

Next, I need to create the properties and methods in my supporting JavaScript file that will apply the watermark on page load and then remove it when an user focuses on the input control. When I compile my Extender, the JavaScript file will be included as an embedded web resource, so don't worry about where your JavaScript will be located when you deploy your Extender. Before I show some of the JavaScript code, though, you need to understand how an input control renders on the page.

When an input control renders in the browser, it is actually rendering much more than a single "magic" textbox. In fact, it's rendering 3 textboxes and 2 span tags like this:

<span id="radInputTst_wrapper">
<script type="text/javascript" ...
<span id="radInputTstStyleSheetHolder" style="display: none;"></span>
<input id="radInputTst" value="" type="hidden">
<input id="radInputTst_Value" name="radInputTst" type="hidden">
<input id="radInputTst_TextBox" name="radInputTst_TextBox" type="text">
<script type="text/javascript" ...
</span>

The key observation is that the textbox that users actually see has an ID composed of your input server control's ID and a "_TextBox" suffix. In order to apply a watermark, we must target this control in our JavaScript.

In our JavaScript, we add code to take over input OnMouseOver, OnMouseOut, OnFocus, and OnBlur events. We use the built-in ASP.NET AJAX helper functions to do this, like so:

this._mouseOverHandler = Function.createDelegate(this, this._onMouseOver);
$addHandler(e,'mouseover',this._mouseOverHandler);

Here you want to notice that you do not need to include the "on" portion of a client-side event's name when using the ASP.NET AJAX $addHandler function. The "_onMouseOver" function referenced in our "createDelegate" function exists in our prototyped InputWatermarkBehavior JavaScript class.

The only other trick to working with input, as I mentioned before, is making sure you access the visible textbox rendered to the page. By default, Extenders use the "this.get_element();" JavaScript function to access the target control in the DOM. To extend input, we used the following:

var controlID = this.get_element().id + '_TextBox';
var e = $get(controlID);

Once you've got all of your events and properties wired-up, you can build your control and drop it onto a page in your test website. The only markup you need on your page to make this Extender work looks like this:

<radI:RadMaskedTextBox runat="server" id="radInputTst" Mask="#####" />
<cc1:InputWatermarkExtender runat="server" id="inputExtender1" WatermarkText="Enter your zip code" WatermarkCssClass="watermark" TargetControlID="radInputTst" />

Build your solution and you end up with an input control with a styled watermark that looks like this:

Conclusions
While extending radControls with Extenders is possible, it will require extra time to analyze and work around the existing client-side functionality. Hopefully this example has highlighted some of the issues you'll need to consider if you attempt your own Extenders and shown you some of the basics to writing Extenders. As soon as I find a good place to host the code, I'll post a link to download the code used in this article (with a trial version of radInput, of course). Until then, have fun experimenting with Extenders!

Tuesday, February 13, 2007

reporting beta 1 due this week (update 1)

This Friday marks a major milestone in the evolution of Telerik's new reporting product. Beta 1 of Telerik Reporting is due by the end of this week and it is slated to introduce a number of new features, including:

  • SubReports
  • Better design time support
  • Expressions (I've been told Expressions will not be in beta 1)
  • Events
  • New examples in both C# and VB.NET
SubReports is a significant enhancement to Reporting and I'm glad to see that has been included in Beta 1. There is still no word on the official release date for Telerik Reporting other than it will be available sometime in 2007. Check out (and bookmark) the Reporting Road Map here and then set your browsers to download the new CTP beta on the 16th!

Note: The download will be available in your Client.net accounts in the My Licenses > My Free Trials section. I'll update this post with a direct link when it's available.

Friday, February 09, 2007

ajax back button support

One of the keys to AJAX's popularity on the web is that it radically improves the usability of many websites. When viewing online maps, we no longer have to click "Up Arrows" and "Down Arrows" to get the page to refresh with a new view of the map. Instead, we can intuitively grab the map and move it in the direction that we want, instantly (with no page refresh) seeing our new map view. While this web browsing nirvana has arguably changed the face of the Web, it has also destroyed the usability of the most used browser function: the back button.


Users (power and average alike) have an insatiable desire to use the back button to get back to somewhere they just were or to undo something they've just done. All the joy they experience using your application quickly fades when they discover their back button no longer works. As AJAX developers, we must acknowledge this user dependence on the back button and make sure it works as users expect it to.

That means we need to populate the browser's history with a URL that can reload an application's state every time an AJAX operation has caused a significant change in the state of the application (such as expanding a grid hierarchy or changing a tab view). Nickhil Kothari, an architect on the Web Platform and Tools team at Microsoft, has posted an updated UpdateHistory control that runs on the ASP.NET AJAX 1.0 framework that enables you to solve this problem. Using his control, you can selectively populate the browser's history to represent different logical views of your AJAX enabled page. That allows you to present rich AJAX interfaces without breaking your user's back button. (Off topic: Nickhil has also got a neat animated UpdatePanel on the same page that's worth checking out.)

Telerik has not yet added out-of-the-box back button support to r.a.d.ajax, but hopefully examples like this will help shape the way that support can be added. Until then, check out Nickhil's control and start improving your AJAX applications.

Thursday, February 08, 2007

testing page load time

In the coming days I will be posting a number of posts that focus on performance testing r.a.d.controls, specifically focusing on how they affect page load time. Before launching into the test results, though, I wanted to present a brief primer on the type of testing that I'll be conducting. Many of these methods are easy to reuse and may help you better tune your own applications.

One of the key tests of performance is determining how long your page takes to load for the average user. Testing this metric can be tricky and it requires that you consider a number of factors, such as server load, latency, packet loss, user connection speed, and (especially in this day of JavaScript heavy, AJAX enabled pages) client-side page load time.

If you have the dollars, you can buy devices (or software) called "WAN Simulators" that give you the power to control many of these factors so you can precisely control your tests. You can introduce latency, simulate average packet loss, and build a test scenario that accurately represents your average user. Even if you don't have hundreds or thousands of dollars for a Simulator, you can still conduct meaningful tests using some simple JavaScript and page analysis tools.

The key when measuring page load time as your users see it is to not rely on server-side time measurements. Your server trace may reveal that your page loaded in 2 milliseconds, but the user may be experiencing a time twice that if you have a number of complex client-side actions that execute on load. Instead, you should load your page in a frame with a JavaScript timer that measures the total time it takes for your page to really load. A great free tool exists that enables you to do this from Numion called (quite obviously) Stopwatch. All you have to do is supply the URL to your site (even a localhost address) and it will tell you exactly how long it takes to load your page, from request to done.

Clearly, there are other measures of performance that must be examined, such as server load, but when it comes to testing and comparing UI components measuring page load time is one of the better tests. So stay tuned for the in-depth look at r.a.d.control performance and have fun running your site through the Stopwatch. Anyone surprised at how long their page really takes to load?

Visual Studio SP1 and Vista annoyances

It has been almost two months since the official release of the Visual Studio 2005 Service Pack, and since then I have been happily coding with little to complain about. Recently, though, I upgraded one of my PCs to Vista Ultimate (only "the best" for my PCs...) and in the process of re-installing Visual Studio and creating some test projects, I discovered some annoyances- both in Visual Studio SP1 and Vista- that I thought I should share in case you're considering the upgrades.


One of the changes in VS2005 SP1 that I hadn't noticed before, is that Visual Studio will now add a hard coded reference to your Web Site's local web.config file for every assembly you've defined in your machine.config. I GAC my r.a.d.controls and put the assembly references in my machine.config so that I don't have to update references in all of my projects when I upgrade the control suite, so I find this "improvement" in SP1 quite annoying (not to mention the fact that it adds 45 - 75 seconds to the time it takes to open your project while VS adds the references to your web.config).

Things aren't much better on the Vista front. As you may know by now, Visual Studio requires an extra update (on top of SP1) to get it to work properly with Vista. Update applied, you'll still have to deal with deciding when you need to run Visual Studio as an "Administrator" (not an "administrator") or when you can just launch it normally. This distinction in Vista between having a user account in the "administrators" group and being the real "Administrator" rears it's ugly head again when you try to add assemblies to the Windows GAC. In XP, you could easily drag and drop assemblies into the GAC making the process of GAC'ing r.a.d.controls very easy. Now you'll get an access denied message and be forced to use the "gacutil" in Administrator mode to add and remove your GAC'd controls. What. A. Waste. Of. Time.

So how do you pick yourself up from these problems and still have a good day coding? I think the latest Apple ad will brighten your day and (if you're already using Vista) help you laugh at your situation.

Wednesday, February 07, 2007

new perspectives, but not too new

It is with great excitement that I bring you some big news regarding Telerik Watch, Telerik, and Todd (that's me, but using three "T" words sounded cool). Beginning this week, I have officially joined the telerik team as a Technical Evangelist, leaving behind the world of working in a Fortune 200 I/T shop. This role will enable me to focus on the telerik controls and associated technologies full-time as Telerik continues to focus on delivering more than expected.

What does this mean for Telerik Watch? Can you trust the content here now that I am an "insider"? I think you'll find that this new arrangement will only improve the content you find on Telerik Watch. With more time to prepare posts for the blog, you'll begin to see in-depth performance comparisons of telerik controls, more tips and tricks, and (of course) the latest "public" telerik news as soon as I can share it.

Telerik has encouraged me to keep an unbiased "customer perspective" in my role, so don't expect Telerik Watch to become a PR spin machine (any more that it has been in the past). I will continue to deliver timely information to you, the developer community, and openly talk to you about how we can make the Telerik controls the best tools on the market.

So don't touch that proverbial blog dial! The best is yet to come on Telerik Watch and I look forward to personally delivering more than you expect!

Friday, February 02, 2007

Q is for Quintessential

As many of you now know, one of the bigger changes for telerik in 2007 will be the move from 4 releases per yer to 3. If you're like me, this left me scratching my head wondering what the new releases would be called. Since the existing naming seems to rely heavily on the quarterly release schedule, what would we now call our "Qx 2007" releases? Vol.x 2007? r.x 2007?


Telerik Co-CEO Vassil Terziev finally settled the issue in recent blog post. Little did we know, but the "Qx" quarterly release naming does not stand "Quarter x". No, no, no...the "Qx" naming stands for "Quintessential" release. It's all so clear now.

Joking aside, it appears that telerik will keep the "Qx" naming going forward even though the controls will no longer be released quarterly. So mark your calendars for Q1 2007 in April, Q2 2007 in September, and Q3 2007 in December. Q4, you'll be missed.