Development blog discussing configuring, building, and managing software. Including coverage of Debian Linux, .NET development projects, Perl and development tools
Monday, April 21, 2008
XHTML Target Attribute, Open New Windows With JavaScript
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
- 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.
- 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.
- 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.
- Form driven interaction- Subset:Linked Select Menus.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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.
- Server Savings
- Interactive Panning And Moving Over Data
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.
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.
- Right-click your application virtual directory on inetmgr.exe.
- Properties->Virtual Directory Tab-> Configuration.
- 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".
- 3 X OK and you're good to go.
- 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 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,http://www.malsup.com/jquery/form/ajaxFormandajaxSubmit, 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!
Great AJAX Gotchas Page
http://swik.net/User:alex/Alex+Bosworth's+Weblog/Rocky+Shoals+of+Ajax+Development/dc2qBut 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.
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
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
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
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)
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
Optimizing BizTalk2006 Server -- The Saga
XmlReader Objects With No Root Element and Converting them to XmlDocument Objects
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
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:
- Backup your installation folder,
- Replace it with the new download
- 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
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
- Review the Bugzilla Schema changes for your upgrade
- Bugzilla Upgrade Schema Differencing Tool to see what fields and columns have changed
- 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
- 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.
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
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?
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
So I have the following in my Event Log more often that I would like:
http://www.codeproject.com/dotnet/evtvwr.asp
http://blog.sbsfaq.com/Lists/Posts/Post.aspx?List=269e4081%2Dac58%2D42a6%2D9a54%2D383a6a3fb0d8&ID=49
Wednesday, October 10, 2007
Distinguished Fields are cool
Tuesday, October 09, 2007
BizTalk 2006 Testing, Interviews & Other Stuff
- BizUnit -- Open Source BizTalk Unit Test Framework
- BizTalk Server 2006 Interview Questions -- Somewhat Useful Ramping Up a New Team
- New Functiods In BizTalk Server 2006 -- Useful Reference for BizTalk Server 2004 Developers
- BizTalk 2006 Server MSI Process -- Almost accurate MSI Workflow, will get you started at least (note to self: blog the real way to use MSI)
- Port Binding Modes in BizTalk 2004/2006 -- Good overview of Dynamic, Static, Now, Later and other details about Port Binding in BizTalk 2006 ... must-have knowledge for BTS Devs
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
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
Tuesday, September 04, 2007
Custom GetContextProperty Functoid
Custom GetContextProperty Functoid
Using the Custom GetContextProperty Functoid, of course!
Thursday, May 17, 2007
Sunday, April 29, 2007
Yahoo Search Advertising is a FRAUD
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
Top 10 Security Vulnerabilities in .NET Configuration Files