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.

Thursday, March 27, 2008

Web Viewer for Subversion(SVN) Repository

Need a great way to look at the history, contents and changes in a Subversion (SVN) RepositoryTry Atlassian FishEye!

Optimizing BizTalk2006 Server -- The Saga

Saw this great pair of Microsoft BizTalk Server 2006 performance sites:


XmlReader Objects With No Root Element and Converting them to XmlDocument Objects

I had this problem this week where I had an XmlReader object coming back from an SQL stored procedure using "FOR XML AUTO, ELEMENTS" but that XML returned was a record set and could not be converted into a XmlDocument using the '.Load(XmlReader reader)' method because of the missing root element.


  SqlCommand cmd = new SqlCommand();

  cmd.CommandText = sQuery;

  cmd.Connection = oConn;

  cmd.CommandType = CommandType.Text;

  XmlReader xmlRead = cmd.ExecuteXmlReader();

 

  XPathDocument xp = new XPathDocument(xmlRead);

  XPathNavigator xn = xp.CreateNavigator();

  XmlDocument xd = new XmlDocument();

  XmlNode root = xd.CreateElement(sRootName);

  root.InnerXml = xn.OuterXml;

  xd.AppendChild(root);

  oConn.Close();

  return xd;


Or you could just use, as I found out later, FOR XML AUTO, ELEMENTS, ROOT('ElementName') which works even better and then no messing around with C#.

Upgrading to Bugzilla 3.0.2 from 2.x Release

[[ Editor's Note: This post was substaintially updated on 10/08/2008 in response to much discussion with other users reading this post and performing Bugzilla upgrades under Windows. Some comments on the post have been deleted as they were refering to the old post.]]

Upgrading Bugzilla to 3.0.2 is not all that difficult with the right approach, even with Windows 2003 and ActiveState Perl.

This blog post is about upgrading customized (in some cases, extreamly customized) versions of Bugzilla from 2.x to 3.x

If you are upgrading a vanilla release of 2.x to vanilla 3.x, you should use the vanilla instructions,
standard Bugzilla upgrading instructions.

The short answer is:
  1. Backup your installation folder,
  2. Replace it with the new download
  3. Backup your database and run checksetup.pl.

For my customized upgrades, I still use the "Tarball" upgrade and a copy of my MySQL database and the process is similar.

Setup
  • Back Up Your Database
    • mysqldump --opt -u bugs -p bugs > bugs.sql
  • Replace Bugzilla 2.x with 3.x
  • Copy your localconfig file
  • Copy your data directory
    • Delete 'templates'
  • Run checksetup.pl
    • Install all required modules
    • Allow checksetup to create tables
    • Cntr+C Before it does UTF-8
  • Run contrib/recode.pl
    • I used --charset=latin1 in Windows
    • Windows does not support Encode::Detect (sad!)
  • Run checksetup.pl again
    • Allow UTF-8 Scripts
    • Allow other database changes
Database Changes

The majority of the changes to the Bugzilla database will be performed by checksetup.pl

If you have made changes to the database, for example:
  • Adding New Tables
  • Adding New Columns To Bugzilla Tables
  • Adding Relationships Between Bugzilla Tables and New Tables
  • Changed Column Types on Bugzilla Tables
  • Written Stored Procedures Referencing Bugzilla Tables
These types of customizations may cause you problems during your upgrade because checksetup.pl does not know about them.
  • Review the Bugzilla Schema changes for your upgrade
  • I find that having a clean copy of the Bugzilla 3.x database around is helpful for some reason, so for my upgrades I use the following databases:
    • 'bugs' -- Bugzilla 2.1.16 Database
    • 'bugs3' -- Clean Install of Bugzilla 3.0.2
    • 'bugs3up' -- My Bugzilla 2.1.16 Copy, Upgrading to Bugzilla 3.0.2
  • Sometimes, I dropped the 'attachments' table from my 'bugs3up' database for testing, to speed things up
Some upgrade stradegies I have used when dealing with highly customized Bugzilla databases during the upgrade from 2.x to 3.x
  • Backing Up (With MySQLDump -- be careful!) your custom tables and dropping them before running checksetup.pl
  • Remove any non-standard referential integrity constraints that you have added. These are also backed up with MySQLDump
  • Use the referenced Bugzilla Upgrade Schema differencing tool to try to restore your Bugzilla 2.x database to as much of a vanilla 2.x state as possible. In some cases, I was able to restore my column types or original relationships to 2.x standards and the checksetup.pl was able to finish.
The goal of these strategies is to simplify your Bugzilla database to the point where checksetup.pl will understand it and can perform the wonderful upgrade magic on your database (which you do not want to try to do by hand.)

These changes will break your customized Bugzilla code, reporting systems, hook scripts or whatever else -- but they will unbreak the wonderful checksetup.pl

How To Issue A Self-Signed SSL Certificate for Microsoft IIS

Here is the Microsoft KB article with the step-by-step (mostly) instructions on how to install a self-signed SSL Certificate.

If you need a cert that will work for public access, you will need to buy a SSL Certificate from a trusted CA.  Check out this SSL FAQ for more details.

Monday, March 03, 2008

Windows Vista (In)Capable?

Saw a good story on ZDNet about the Windows Vista Capable branding fiasco that is currently sucking the life from Microsoft.

What went wrong? I'll tell you what went wrong: Microsoft execs - starting with Steve Ballmer - don't care enough about their customers. Which is too bad for the thousands of smart, hard working 'softies who do.

Another good blog post about inadequate executes in the CEO and CTO positions at big companies (all too common an issue) called "Time To Go" by the same guy about Steve Ballmer.

Steve Ballmer may be the worst CEO among large tech companies - now that Kevin Rollins got booted from Dell and Sanjay Kumar of CA is in jail. Put him in a room with Steve Jobs of Apple, John Chambers of Cisco and Mark Hurd of HP and he'd look like the bouncer, not a peer. He just isn't in their league and Microsoft is suffering for it.

I could not agree more with both of these posts.  Vista sucks even on good hardware.  Microsoft has grossly over estimated sales, launch date and performance of the OS for customers. 

I, for one, have gone back to XP -- at least all my devices have drivers and my machine is stable again.

Monday, November 12, 2007

Creating Event Log EventID Values Using C# and .Net 2.0

As all good developers do, I try to log my errors.  However, on some machines I can access the event log ("Application" log in this case) and use EventID of 1000 or 0 or other values, however, it is not consistant what is available between Windows 2000, Windows XP, Windows Server 2003.

So I have the following in my Event Log more often that I would like:

The description for Event ID ( 0 ) in Source ( Application Error ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer. You may be able to use the /AUXSOURCE= flag to retrieve this description; see Help and Support for details. The following information is part of the event:  ...

http://www.codeproject.com/dotnet/evtvwr.asp
http://blog.sbsfaq.com/Lists/Posts/Post.aspx?List=269e4081%2Dac58%2D42a6%2D9a54%2D383a6a3fb0d8&ID=49

Tuesday, October 09, 2007

BizTalk 2006 Testing, Interviews & Other Stuff

I have been using BizTalk Server 2006 for a few months now and I thought I'd post some of the things I've been using here.

I hope you have enjoyed this BizTalk Server 2006 Link List.

By the way, BizTalk Server 2006 R2 is on the street now so go check it out.  Death to HWS!

A practical and authentic approach to massively parallel computing

The face of computer science is always changing and the pace of that change increases every day.  One of the huge ongoing changes in today's engineering approach is a shift from single machines, or small clusters of machines, to massive distributed networks containing hundreds, if not thousands, of servers.  Massively parallel and foreign to most people.

Today the Google blog contained an entry called Let a thousand servers bloom about this topic and they reference a really interesting lecture series they are hosting on Google Code for Educators called Cluster Computing and MapReduce which contains video lectures and related course materials from a series of lectures that was taught to Google software engineering interns during the Summer of 2007.

While not part of the Google Blog linked above, Google Code for Educators also has a great lecture on Web Security containing two lectures and a programming assignment that is designed to introduce students to web based security.

Thursday, September 20, 2007

BizTalk 2006, Users, Groups & Troubleshoot

Have you ever needed a full list of the BizTalk 2006 users and groups -- here is one from Microsoft .  If you used that guide Microsoft supplied to install BizTalk 2006, and it did not work (surprise!) you will probably need this BizTalk 2006 Troubleshoot Guide and Tools list.  This dedicated list of BizTalk 2006 troubleshoot utilities is very useful.  And of course, the most common trouble spot with BizTalk 2006 Server is the software components it depends on -- that is why this guide to troubleshoot BizTalk 2006 dependencies is so great!

Tuesday, September 04, 2007

Custom GetContextProperty Functoid

A newer version of the GetContextProperty functiod, and another useful "sister" functiod can be found here, http://www.codeplex.com/ContextAccessor.

Custom GetContextProperty Functoid

How can I get a message context property (promoted property) from a message in a map for use inside of an orchestration?

Using the Custom GetContextProperty Functoid, of course!

Sunday, April 29, 2007

Yahoo Search Advertising is a FRAUD

I blogged a few weeks ago about my renewed interest in Yahoo Sponsored Search in my "Dear Yahoo" post.  At the time, I thought that perhaps Yahoo was turning a corner in the online advertising sphere and might have finally figured it out.  I have now, after spending $220 USD and one entire month advertising with them, realized how wrong I was. 

Yahoo's online search ad placement system is horrible.

In fact, I suspect the majority of the site traffic generated by a Yahoo ad is actually fraud.
  Google Analytics is a powerful tool and I could teach a class on it at this point -- I've been using it since it was released and I have gone to seminars and taken classes.  So, I spent a few hours focused on Yahoo traffic analysis.  As it turns out, the "visitors" from Yahoo are (98%) fraud generated by Yahoo's content placement site.  Probably ad-placement scammers buying ads from Yahoo and then using "pay to browse" or automated methods to fire the ads and collect my money.

I am getting a 1.05PPV (pages viewed per visit)  traffic load from Yahoo traffic.  That means that 94.55% of the visitors are viewing only the first page after the ad link and then closing the browser -- a sure sign of fraud from the source.  All my legitimate traffic ( Google, TheKnot, WeddingChannel, CraigsList, Yahoo Organic Search) averages a bounce rate (immediate exit) of around 3.85 which is low, to be sure, but does not mean fraud.  The bounce rate for my average traffic is only 22%.

In addition, Yahoo is reporting that I get about 10 visitors a day from their ads.  I am finding about 10% of the traffic I am being billed for actually makes it to my site.  I suspect part of this is that most of the scammers have found a way to trigger the ads in an automated fashion that does not actually request pages from my site -- they're just getting Yahoo to record the click and never even downloading pages from CoryTrese.com

Other key terms I might use to describe Yahoo Sponsored Search include "click fraud", "fraud", "deception", "sucks", "lies", "terrible", "illegal", "unfair", "deceptive business practices" and maybe some other words I won't use on my blog.

Monday, April 09, 2007

Top 10 Security Vulnerabilities in .NET Configuration Files

Developers often concentrate on writing secure code but leave security vulnerabilities in application configuration files. Discover the most common configuration security problems—and how to avoid them.
by Bryan Sullivan

Top 10 Security Vulnerabilities in .NET Configuration Files