Kære Nettbuss

Tuesday, January 08, 2013

Here's a little rant in Danish, sorry about that. In short it's about how even companies that handle our public transportation tend to forget to design for the end user, in this case the bus going people...

I dag sendte jeg denne besked til Nettbuss' kundeservice:

Kære Nettbuss

Det drejer sig om tv-skærmene i de nye 250S busser. Det er svært at læse teksten, fordi skriften er for lille. I bør kunne få hjælp af en brugerekspert til at forstørre teksterne x2 eller x3 ved bedre udnyttelse af skærmpladsen. Det tekniske fungerer jo fint, der er bare ikke tænkt på slutbrugeren, så skynd jer at få det rettet, så alle kan læse næste stoppested mv, selv om de ikke sidder lige ved skærmene.

Juhuu for fremskridtet - husk brugeren.

ASP.NET performance

Thursday, May 20, 2010

Check out Mads Kristensens ASP.NET performance project.

He tells us, that it's still in alpha, so consider it a preview.

Visit OptimizeASP.NET here: http://optimizeasp.net

Also, check out his open source project WebOptimizer.NET, which aim to provide friction-free performance improvements for new and existing ASP.NET applications.

Visit WebOptimzer.NET on CodePlex

Labels: , ,

BarCamp Copenhagen 8.2

Tuesday, October 07, 2008

Til BarCamp Copenhagen er omdrejningspunktet de folk, der deltager, og det er her vigtigt at understrege, at der menes at deltage aktivt. No tourists!

BarCamp konceptet er bygget op omkring discussions og open space tankegange, og det hører ind under un-conference konceptet, dvs. at programmet sættes sammen, når deltagerne dukker op. Man kan derfor heller ikke sige helt på forhånd, hvad det kommer til at handle om, men man kan kigge på deltagerlisten og google lidt på de folk, der kommer, hvis man vil danne sig et indtryk om det... En ting er sikkert, det er, at deltagerne er:

Folk, der virkelig brænder for det, de gør.
Sociale, åbne og søde mennesker.
Mennesker, der elsker at dele ud af deres viden.
Interesserede, intelligente og intense personer.
- og der kan være tendens til høj GEEK-faktor.

Der er deltagerloft på 50, så man skal være lidt hurtig til at tilmelde sig på wikien, http://barcamp.org/BarCampCopenhagen.

Vi har ikke en location fastlagt endnu, og vi mangler sponsorer, men datoen er under alle omstændigheder den 22. november, fra kl. 10-?

Det gælder om at deltage, både før, under og efter, så blog om det og sig det videre.

- Velkommen til den danske it-undergrund!

OutPost 3.2.001

Sunday, April 06, 2008

The long awaited release!

Changes since last release, which was 2.2.002:

  • 6/4-2008 - 3.2.001
    • First PUBLIC release since version 2.0.003!
    • Added support for asynchronous page flakes that loads simultaneously.
    • Added better support for external page flakes.
    • Improved support for Internet Explorer, Firefox, Opera and Safari browsers.
    • Removes linebreaks when comparing for differences to minimize traffic.
    • No more supports .net 1.1 (officially).
  • 1/2-2008 - 3.1.001
    • Added Suggest.aspx demo.
    • Added DocTree.aspx demo.
    • Redesigned test suite layout.
    • Added support for animations, like YellowFade, BackFade, SlideDown and more.
    • Added support for loading indicator.
    • Added support for load indicator.
    • Added method to Disable Ajax.
    • Added support for asynchronous load of Page control after window.onload.
    • Redesigned the iGoogle demo to make it more modular and extendable.
    • Improved the SignUp demo.
    • Added AjaxPage user control.
    • Added DataGrid Demo.
    • Added ProperReset Demo.
    • Added ToDoList Flake for iGoogle demo.
  • 27/11-2007 - 3.0.002
    • Modified web.config to make it work with ASP.NET Development Server.
    • Edited the howto.txt.
  • 21/04-2007 - 3.0.001
    • Added option to hijack links.
    • Added support to ajax-enable a page from web.config.
    • Redesigned and reimplemented the html compare function by using LCS algorithm.
    • Optimized splitting up the HTML into tags by using split in combination with regular expressions.
    • Optimized every use of regular expressions by caching the results.
    • Huge performance improvements!!
    • Added option EnableAjaxRedirect which allows the page to be redirected using ajax.
    • Added support for multiple-select drop down lists.
    • Improved support for tables.
    • Improved support for loading of scripts.
    • Added update commands InsertAfter and InsertFirst.
    • Improved cursor position store/restore functionality.
    • Added scroll position store/restore functionality.
    • Added support for external hosts by introducing keyword $ExternalHost$ for the LocalHost property.
    • Reimplemented the Page control as a UserControl.
    • Added ExternalTest.aspx demo.
    • Added FormElementsTest.aspx demo.
  • 15/03-2007 - 2.0.003
    • Added support for not sending back inputs with only the value changed.
    • Fixed bug with resetting radio buttons.
    • Reduced number of unnecessary field updates on the client.
    • Added support for ASP.NET 1.1.
    • Added support for following parameters: DisableCopyCommand, ShowViewState, ShowEventValidation, ShowLastFocus, SimulateOnload, SimulateOnunload, SimulateOnbeforeunload
    • Added ProperReset demo.

Find the full history here

Slides from barCamp Copenhagen 2008

Saturday, March 22, 2008

Here are the slides and the transcript of my presentation at barCamp Copenhagen 2008. The presentation was held in Danish, so I've translated the slides and the transcript into English.

Transcript

Hi, my name is Troels, I work for a company called beaconware.

I primarily work with .net technology and web development.

I would like to tell you about ajax and about how you go from ajax to hijax to indirect ajax.

I'll round this session of with a demo about how indirect ajax works.

There are a lot of definitions of what ajax is. A simple definition would be:

"Ajax is the ability to update a part of the page instead of the whole page."

It may not sound overwhelming.

The strength lies in the ability to call the server asynchronously without reloading the page.

An example could be an explorer in a CMS with folders that you can expand to reveal documents and sub folders.

You could achieve this with ajax by attaching a handler on the click event.

The handler would call a web service asynchronously to get a data representation of the contents of the folder.

Then it would add graphics needed for documents and sub folders to the document structure below the expanded folder.

The great challenge in programming ajax is to make it work in all browsers.

It's difficult and the end user must often download huge scripts to make it work.

Browsers in cell phones has extra difficulties with ajax because they don't have full dynamic html support.

If you make your web application depend on ajax, then you have to realize that there will be end users

who are unable to use it, either because of their browsers or because of other accesibility concerns.

That's why it's so important to make sure that the ajax application degrades gracefully, which means that beneath

all the fancy web 2.0 fireworks there's a fully functional web 1.0 document to fall-back on.

This is where hijax gets into play.

Hijax is a method that reminds you of how you achieve separation of layout from document structure by using css files.

With hijax you achieve separation of ajax from the document structure.

The procedure is to start by developing a fully functional web 1.0 document by using forms and links.

Then you hijack the form's "onsubmit" event and the link's "onclick" event by using unobtrusive Javascript.

That means Javascript that automatically disables itself in a down-level browser.

So, if the browser doesn't live up to the requirements for ajax then the application reverts to web 1.0 behaviour.

When a form's onsubmit event has been hijacked and it gets intercepted then an asynchronous call is made to a web service on the server.

The server returns the requested html fragment and the client updates the DOM.

The technique used here is also called AHAH which stands for Asynchronous Html And Http. You can find it on microformats.org.

Hijax requires that you in your server code is able to separate the output into those html fragments that you want to update separately on the client.

So you need a really flexible server API that can return parts of the page by request.

It can seem as a comprehensive task to make your web application ready for this and it is, especially if you don't do it from the beginning.

You will have to create web services that you can call and a way of telling them which part of which page that you want html returned for.

Not to mention thinking up a way of handling actions and events on the server.

That is why some people gone a step further and invented indirect ajax.

Indirect ajax automates the process of hijaxing a form.

It hijacks all events and communicates with the server through a proxy.

The proxy receives enough information to execute the http request that would have been executed if the event hadn't been intercepted.

The only difference is that the call is executed locally on the server and a lot faster.

The html document that is returned by this call is stored in memory on the server to be compared with the html document returned by the next call.

So, on every request the current document is compared to the previous document.

The comparison results in a difference. This difference consists of a number of html fragments together with information about where they belong in the document structure.

This information is sent back to the client that now updates the document structure.

On the screen it looks like the browser executes a normal post back. It's just quicker, because:

- The traffic to and from the server has been minimized.

- and because the call is executed locally on the server

- and because it doesn't require the whole page to be reloaded.

Now I want to show you a couple of demoes of an indirect ajax framework.

It's an open source project that I have developed for .net and it's called OutPost.

You can try out or download the demo from http://hijax.net/OutPost.

The first demo is inspired by Google Suggest which is a really classic ajax tool.

As you type in words in the search field the suggestions for search terms are shown below based on searches of other users.

I twisted it and made a Farber Suggest application based on the hilarious turns of phrases of David Farber.

Here you type in an English word and then a number of matching farberisms are shown below.

Let's try...

The other demo is a simple explorer that shows folders and documents in a CMS.

You can click on a folder to expand it.

You can also collapse the folder again by clicking on it.

In the background I have a program called Fiddler running. It logs the traffic between client and server.

As you can see the server sends about 8kb back on every request.

Now I enable OutPost.

And run the demo again.

Looking at the source code you can see that some details in the html code has changed to make OutPost able to hijack the events that normally gets the browser to reload the page.

Then we expand the folder... And expand the sub folder...

And then we switch to Fiddler again.

As you can see the amount of traffic is now about 10 times smaller.

This is partly a result of zipping the traffic. So, we use Fiddler to unzip it.

And if we dive deeper in to see the data itself we can see that it's not a full document that's returned to the client.

The client receives commands that the OutPost client framework understands and uses to update the document structure with.

As an example one command means "replace this image with this" and another means "delete this table".

Labels: , , ,

BarCamp Copenhagen 2008

Friday, January 25, 2008

Cool event, nice people, great atmosphere!!

Here is a link to the demoes, I've just put them online, including at download link to the latest unofficial BETA of OutPost: http://hijax.net/OutPost

My presentation was well received. You can download the power points here (sorry it's only in power point 2007 format right now - AND it's in Danish): AJAX, HIJAX, OUTPOST

OutPost and ASP.NET Development Server

Tuesday, November 27, 2007

I just found out, that OutPost has some troubles with the way ASP.NET Development Server handles httphandlers. The section of web.config can be modified to make it work:

Change this:

<add verb="*" path="OutPost.axd" type="OutPost.Core.Switch,OutPost"/>

to this:

<add verb="*" path="OutPost.axd,OutPost.axd/Ajax.js" type="OutPost.Core.Switch,OutPost"/>

And it now works with ASP.NET Development Server

OutPost Demo HowTo for .NET 2.0

For ASP.NET 2.0 demo

  1. Download and unzip OutPost.zip
  2. Open folder "Demo"
  3. Right-click sub folder "Outpost-2.0-Demo"
  4. Select "Properties"
  5. Select "Web Sharing"
  6. Select "Share this folder", alias should be "Outpost-2.0-Demo"
  7. If .NET 2.0 isn't your default setting you must configure this with Internet Information Services
  8. Now you can open the demo at "http://localhost/Outpost-2.0-Demo/Demo"