Monday, April 21, 2008

Create Screencast for Free

You can create screencasts at ScreenCastOMatic.

All you need is Java and a topic.

XHTML Target Attribute, Open New Windows With JavaScript

The XHTML Strict web standard has removed the "target=" attribute.

Here is an article about a (somewhat complex) way to handle this in a universal way with the DOM2 API and create valid XHTML that opens new windows where appropriate.

A less comprehensive approach, and the one I elected to use, was to add this to replace the "target" attribute:

onclick="this.target = '_blank';"

Is this not cheating?  We are not using the old HTML "target" attribute, but we are still adding something called "target" to our precious, and now valid, A-Href.

The answer is no. The Document Object Model (DOM), which governs the document objects and attributes that are available to JavaScript code, is a totally separate standard from (X)HTML.

Also consider that the DOM 2.0 standard that was published in January 2003 (well after XHTML 1.0, let alone HTML 4.0) still includes this attribute. It seems clear that while this attribute is slated to be phased out of (X)HTML, it will be available to JavaScript through the DOM for the foreseeable future.

Places To Use AJAX

This page, which I would call "Places to Utilize AJAX For Maximum Benefit" is a great list of ideas.

  1. Form driven interaction.

    Forms are slow. Damn slow. Editing a tag (the old way) on a del.icio.us bookmark? Click on the edit link to load the edit bookmark form page, then edit the field and hit submit to wait for the submission to go through, then return to the previous page and scroll down to find the bookmark to see if the tags look right. Ajax? Click on the edit link to instantly start changing tags, click on the submit button to asynchronously send off changes to the tags and quickly see in place what changed, no reloading the entire page.

    1. Form driven interaction- Subset:Linked Select Menus.

      Imagine a T-Shirt with 3 options; Size, Color, and Style. When tracking inventory for your product, you know you have Large, Red, Polo shirts in stock, but you're out of Small, Blue, T-Shirts… It is frustrating to the user to pick this combination and then receive an error on the checkout page stating that you are out of stock… and then have to go back to the selection process and reconfigure the item… Using AJAX, you can check the stock of the options as the user picks them and only return or show the items which are in stock.

    2. Form driven interaction- Subset: Autosave.

      Think of someone writing in Word. Which button do they use the most? Save.

      With javascript you can do one better. Not only can you have a save & continue that works just like the del.icio.us forms – you can autosave! Remember to tell the user this, as simply knowing this relaxes quite a lot of people. Properly explained count-down clocks are prefered, for obvious reasons.

  2. Deep hierarchical tree navigation.

    First of all, applications with deep hierarchical tree navigation are generally a nightmare. Simple flat topologies and search/tagging works very well in most circumstances. But if an application really calls for it, use Javascript to manage the topology ui, and Ajax to lessen the burden on the server by lazy loading deep hierarchy data. For example: it's way too time consuming to read discussion threads by clicking through and loading completely new pages to see a one line response.

  3. Rapid user-to-user communication.

    In a message posting application that creates immediate discussions between people, what really sucks is forcing the user to refresh the page over and over to see a reply. Replies should be instant, users shouldn't have to obsessively refresh. Even Gmail, which improves on the old hotmail/yahoo mail 'refresh inbox, refresh inbox' symptom, doesn't really push Ajax far enough yet in terms of notifying new mail instantly.

  4. Voting, Yes/No boxes, Ratings submissions.

    It's really too bad there are no consistent UI cues for Ajax submission, because submitting a vote or a yes/no response is so much less painful when the submission is handled through Ajax. By reducing the time and impact of clicking on things, Ajax applications become a lot more interactive – if it takes a 40 seconds to register a vote, most people would probably pass unless they really care. If it takes 1 second to vote, a much larger percentage of people are likely to vote.

  5. Filtering and involved data manipulation.

    Applying a filter, sorting by date, sorting by date and name, toggling on and off filters, etc. Any highly interactive data manipulation should really be done in Javascript instead of through a series of server requests. Finding and manipulating a lot of data is hard enough without waiting 30 seconds between each change in views, Ajax can really speed this up.

  6. Commonly entered text hints/autocompletion.

    Entering the same text phrases or predictable text phrases is something software/javascript can be good at helping out with. It's very useful in del.icio.us and GMail, for quickly adding tags/email addresses.

  7. Long Running Queries/Remote Calls

    If a query or a call to a remote webservice is going to take a long time that cannot be avoided, Ajax works well to manage the time a user waits for the call to return. For example, SWiK uses Ajax to fill in results from webservices detailing new projects: a user doesn't have to wait for Google webservice to return before starting to edit a new project

  8. Computationally Expensive Operations

    Unfortunately, Javascript has a tendency to be quite slow. Complex math or number crunching just isn't Javascript's forte. Additionally, heavy Javascript computation can slow the basic user interface to a crawl. An XMLHTTPRequest call can be helpful here, pushing expensive computations to beefier remote servers.

  9. Server Savings
  10. Sometimes, a process users do over and over on a site requires only a small amount of new data to be sent over the wire, but loading entire new pages can be a strain on the servers in bandwidth and resources. Ajax can be used to load pages more efficiently, as seen in various tests. Of course the ease of making new or multiple requests from the server using Ajax also means that it's easy to overtax server resources as well.

  11. Interactive Panning And Moving Over Data
  12. Moving and scanning over large data sets makes it impracticable to pre-load all of the data. Loading the data just ahead and just behind the user gives the appearance of the entire data set being accessible, and helps eliminate loading times. A great example of this is Google Maps' scrolling tiles system that gives the effect of moving over a map by picking up tiles behind and placing them ahead of the user, filling them with new data requested via Ajax.


Help for Microsoft Model-View-Controller (MSMVC) On Windows XP with IIS5 and ASP.Net 3.5

Using ASP.NET MVC on IIS 5

This is a note for people trying to use the MVC framework, and that are on Windows XP. If you dislike the ASP.NET development server that comes by default with Visual Studio as much as I do, you've switched your MVC application to work against IIS already. WinXP is running IIS 5, and you'll notice that the routing will stop working when you switch.

  1. Right-click your application virtual directory on inetmgr.exe.
  2. Properties->Virtual Directory Tab-> Configuration.
  3. Add a new mapping extension. The extension should be .*, which will be mapped to the Executable C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll, or the appropriate location on your computer (you can simply copy this from the mapping for .aspx files). On the mapping uncheck "check that file exists".
  4. 3 X OK and you're good to go.
  5. If you want, you can apply this setting to all your web sites. In step1, click on the "Default Web Site" node instead of your own virtual directory, and in step 2 go to the "Home Directory" tab. The rest is the same.

Now you've mapped every request on the web site to ASP.NET. To check that it works you can request a non existing html file on your web-site and see that the error you get is with an ASP.NET footer.


Using .NET 3.5 & MVC on IIS 5

Some information on .Net 3.5 here:
http://forums.asp.net/p/1183060/2010779.aspx

The thing to keep in mind is that .Net 3.5 is not a new version of .Net as far as IIS and ASP.Net are concerned.  You still enable the same ISAPI filters and such in IIS as you would for .Net 2.0

The major difference between the two types of applications is in the Web.Config, in particular, the CODEDOM configuration blocks.  These configurations will get the ASP.Net 2.0 framework to load the compilers and system libraries for ASP.Net 3.5 and everything will work fine.  The confusion continues under IIS6, but you can at least set up application pools to make it look like ASP.Net 3.5 is it's own thing.

http://www.hanselman.com/blog/PermaLink.aspx?guid=151607c0-3dc8-4567-a810-a558e129dd85


AJAX Link City

jqModal
jqModal is a tool to help you display notices, dialogs, and modal windows in a web browser. Looks are controlled by standard and designer friendly HTML and CSS, independent of the javascript. jqModal is flexible and tiny -- it is the Swiss Army Knife of a great "general purpose" window plugin for jQuery.
http://dev.iceburg.net/jquery/jqModal/

jqForm
The jQuery Form Plugin allows you to easily and unobtrusively upgrade HTML forms to use AJAX. The main methods, ajaxForm and ajaxSubmit, gather information from the form element to determine how to manage the submit process. Both of these methods support numerous options which allows you to have full control over how the data is submitted. Submitting a form with AJAX doesn't get any easier than this!
http://www.malsup.com/jquery/form/

Great AJAX Gotchas Page

But the specifics of Ajax development are equally perilous to basic application design. The siren's call of the XMLHTTPRequest object can lead many brave scripters to a demise on the rocky shoals of browser limitations and bugs.

http://swik.net/User:alex/Alex+Bosworth's+Weblog/Rocky+Shoals+of+Ajax+Development/dc2q

AJAX Mistakes List
Ajax is also a dangerous technology for web developers, its power introduces a huge amount of UI problems as well as server side state problems and server load problems. I've compiled a list of the many mistakes developers using Ajax often make.
http://alexbosworth.backpackit.com/pub/67688


Tuesday, April 08, 2008

Extending BizTalk 2006 with Custom XSLT

Hello,

We have been talking about how to use Custom XSLT in BizTalk 2006 to reduce the overall complexity of some transforms that are not easily or simply represented using built-in BizTalk 2006 mappers.

BizTalk Custom XSLT in Mapper
http://www.objectsharp.com/cs/blogs/matt/archive/2005/12/15/3668.aspx

Extending BizTalk Mapper with XSLT
http://msdn2.microsoft.com/en-us/library/aa560433.aspx

Debugging XSLT in Visual Studio 2005
http://www.masteringbiztalk.com/blogs/jon/PermaLink,guid,bc5e05f0-659f-4ace-a6fe-d864cdf1fbe2.aspx

Basic Custom XSLT Mapping
http://www.developer.com/net/article.php/3721871

Friday, April 04, 2008

CGI::Application and HTML::Template -- Better Than your MVC System

Once in a while I get to see something on the web that makes me think back to the early days of 1996 and my first work on web-based shopping carts using MVC.

http://www.perlmonks.org/index.pl?node_id=199411

He cross-references HTML::Template, CGI::Application and even touches on MivaMercheant / Redhat Interchange, et al.

WOOOT>>>

Thursday, April 03, 2008

WebService SOAP Security

Subject: RE: Questions regarding Web Service, SOAP Security

I would suggest SSL, a firewall rule specific to fixed client IP-range or server, and Digital Signatures.

If you are making use of C#, .Net 2.0 and WSE 2.0 (I think that is what I see in your repository?) I would suggest one of these two methods, depending on how easy they are for the calling organization to implement.

#1.  How to: Verify Digital Signatures of SOAP Messages Signed by an X.509 Certificate
http://msdn2.microsoft.com/en-us/library/ms824650.aspx

#2.  How to: Verify Digital Signatures of SOAP Messages Signed Using a User Name and Password
http://msdn2.microsoft.com/en-us/library/ms819945.aspx

How to: Add Security Credentials to a SOAP Message
http://msdn2.microsoft.com/en-us/library/ms819938.aspx

Using MessageSignature,
http://msdn2.microsoft.com/en-us/library/microsoft.web.services2.security.messagesignature.aspx
Instead of using the EncryptedData class, because SSL provides the overall encryption.

If you want to use WSE 3.0 instead, the setup is similar.

Writing a WCF Service would be a potential idea as well.  That would allow you to create the service once and specify this type of security behavior in configuration when exposing it as a WebService.

BizTalk 2006 : Consuming Web Services without Web References (Using WSDL.exe Instead)

Here is a how-to on creating WSDL proxies in C# and using them from BizTalk 2006 for "Web Services" that return invalid, non-existent or un-parsable WSDL (will work for SOAP-RPC.)

http://www.topxml.com/rbnews/Biztalk%20Adapters/re-58177_Consuming-Web-Services-in-BizTalk-Without-Web-Reference.aspx

Useful for "SOAP-Like" services that will not return WSDL files with the normal ?wsdl notation.