Kraftvaerk er Umbraco Gold Partner
Med stærke og omfattende løsninger som Home, Hyundai, Økologisk Landsforening og mange andre er det naturligt, at Kraftvaerk er blandt en lille skare af virksomheder der er udnævnt til at være Umbraco Gold Partner.
Ikke alene har vi udviklet stærke løsninger på Umbraco, vi har i år ikke mindre end to konsulenter der er MVP nominerede (Most Valuable Professional). Godt gået af Kim Andersen og Jan Skovgaard der er blandt en elite på 20 udviklere i Verden!
Fire farlige fejl i webshop sikkerhed
Det kræver ikke meget af udviklerne at forbedre sikkerheden i danske webshops. Som regel er det begynderfejl, der nemt kan undgås, som giver sikkerhedsproblemer.
Sådan lyder det fra webudvikler Mads Kierulff fra firmaet Kraftvaerk, efter at Version2 mandag skrev om, hvordan halvdelen af de danske netbutikker har alvorlige sikkerhedshuller.
Han peger på fire typiske begynderfejl, der kan have store konsekvenser for sikkerheden:
- Mulighed for SQL-injection, fordi forespørgslerne ikke bliver renset for farlige input.
- Manglende HTTPS på betalingssiderne.
- Minus-varer i indkøbskurven.
- Javascript i kommentarfeltet
DSB S-tog kører på Windows Azure
Når passagererne i S-togene sender en sms-besked for at få en gratis togtur hjem fra Tuborgs J-Dag, så bliver det nu Microsofts sky, der sørger for, at billetten når frem, før kontrolløren når frem, eller turen er slut – og Kraftvaerk står bag løsningen.
Læs mere i vores case eller i artiklen hos Version 2
HTML is the new HTML5?
Just one day after the W3C introduces their spiffy but rather confusing HTML5 logo and accompanying visual identity, the WHATWG announces on their blog that “HTML is the new HTML5” and that the HTML specification can now be considered a “living standard”.
The reason for doing so is, according to the announcement, that: “the term is now basically being used to mean anything Web-standards-related, so it’s time to move on!”
Læs mere »
Brænder du for web – jobs i Århus
Brænder du for web? Bliv konsulent hos Kraftvaerk. Passion og selvstændighed belønnes med fleksibilitet og udfordringer. Se stillingen her: http://www.kraftvaerk.net/job/webkonsulenter-s%C3%B8ges-til-arhus-afdeling/
URL mappings and incorrect form action URL
You can use URL mappings in your web.config to create better URLs SEO-wise, or as in my case, to create a duplicate version of a page without actually duplicating code. I created an urlMappings section and a couple of mappings in my web.config and it seemed to work great.
Læs mere »
Google Chrome Speed test
Ganske anderledes performance-måling af en browser:
Der er også et interessant “making-of“-filmklip
jQuery tablesorter – Localized dates and numbers
At Kraftvaerk we have been using the jQuery tablesorter plugin in many of our projects. In most of these we have had to deal with localized dates and numbers in the tables. Ie a custom date format such as “25 jan 2010″ where the month name is localized, or a localized number with different thousand and decimal separator like “13.450,50″, or it could a totally custom display of weight like “200 Ton 352 Kg”.
How do you parse such strings with a custom jQuery tablesorter parser plugin in Javascript? The short is answer: You don’t, it simply requires too much work to maintain both the Javascript code and the server side code, in our case C#, that handles the formatting/parsing.
Instead you should include a sortable value, an integer, a decimal, or a string, in each table cell. You could display the aforementioned custom weight format as:
Make sure you read the update below for very simple sorting on localized values without a custom textExtraction function.
<td> 200 Ton 352 Kg<span class="hidden">200.352</span> </td>
With CSS you can hide the span tag with:
span.hidden {
display: none;
}
Since “200.352″ is a simple decimal number that tablesorter can sort you just need to tell tablesorter to use this hidden value instead of the formatted text. Fortunately this is very easy using the textExtraction config option.
$("table.sortable").tablesorter({
sortList: [[0, 0]],
widgets: ['zebra'],
textExtraction: function(node) {
return $(node).find("span.hidden").text();
}
});
Using this code you will need to include hidden span for all table cells, even though its not really needed, ie for simple text values or integers. To be honest we dont really like the use of an extra span tag inside the table cell. So we decided to create a custom attribute on the td tag and sort by this value:
<td sortvalue="200.352"> 200 Ton 352 Kg </td>
And the jQuery tablesorter config code:
$("table.sortable").tablesorter({
sortList: [[0, 0]],
widgets: ['zebra'],
textExtraction: function(node) {
return node.getAttribute('sortvalue') || node.innerHTML;
}
});
This code will check for an attribute named “sortvalue” and if it doesn’t exist it will use the text in the table cell instead. Unfortunately because the “sortvalue” attribute is not defined in any HTML specification by W3C your pages will not be fully valid (X)HTML. However using the jQuery Metadata plugin you can inject arbitrary information into the “class” attribute on any element. If you haven’t noticed the tablesorter plugin allows you to use this feature, so you might already be using the metadata plugin.
The table cell:
<td class="{sortvalue: '200.352'}">
200 Ton 352 Kg
</td>
jQuery tablesorter config code:
$("table.sortable").tablesorter({
sortList: [[0, 0]],
widgets: ['zebra'],
textExtraction: function(node) {
return $(node).metadata().sortvalue || node.innerHTML;
}
});
Update – Very simple sorting on localized values
A reader, Mathias, pointed out that when using the technique with a hidden span tag, there is no need for a custom textExtraction function. This is because the default textExtraction method for jQuery tablesorter checks for any child nodes in each table cell, and if the cell contains any child elements it will use the innerHTML value for the first child node. Here’s a snip from the jQuery tablesorter source code:
if(config.textExtraction == "simple") {
if(node.childNodes[0] && node.childNodes[0].hasChildNodes()) {
t = node.childNodes[0].innerHTML;
} else {
t = node.innerHTML;
}
} else {
// Snip
}
So using the hidden span technique is very easy, just make sure that the element containing the sortable value is the first child element of the table cell. In my example above the span was the only child element since the raw text "200 Ton 352 Kg" is not considered a node in DOM.
I have discussed the this hidden span/element technique with a designer colleague, and we both agree that it does mess up the semantics of the table a bit. What you could do is to wrap the human readable value in an element too. Like
<td> <span class="machine">200.352</span> <span class="human">200 Ton 352 Kg</span> </td>
That would bring some semantics back. Thanks to Mathias for the very useful comment.
Testkør Internet Explorer 9
Microsoft releasede igår en developer preview af den kommende Internet Explorer 9. Det er en minimal udgave af Internet Explorer, uden faneblad, adressefelt etc, egnet for at teste rendering og performance på. Browseren kører ikke på Windows XP, hvilket gør at i hvert fald jeg bliver nødt at opgradere, før jeg kan prøve den… Men det ser lovende ud, og et godt initiativ fra Microsoft med regelmæssige developer previews og feedback i 8-ugers cycler.
Læs mere på Arstecnica, mashable, eller version2.
YQL: select * from internet
Mashups, det vil sige at blande data fra flere forskellige kilder for at sætte informationen i et nyt kontext, eller se den i et andet perspektiv, for eksempel placere nyhedsrubriker fra flere kilder eller vise husannoncer på et landkort, er næppe noget nyt begreb.
En af udfordringerne med at lave mashups er at de forskellige kilder kommunikerer på forskellige måder, via så kaldte APIer. Udviklere bliver nødt at spørge efter informationen på det rigtige sprog, samt også håndtere at svarene kommer i et format der skal omvandles før det bliver brugbart. Og til andre kilder eksisterer der måske ikke engang et API, uden der må opfindes en måde at hente informationen på.
YQL (Yahoo! Query Language) fungerer som en tolk og oversættere, og lader os spørge efter information på et sprog som ligner SQL (der bruges for at tilgå information i databaser) samt også vælge i hvilket format vi ønsker at modtage svarene på. Første gang jeg hørte om YQL var på Fronteers, en konference i Amsterdam i november 2009, hvor Chris Heilman holdt en meget imponerende præsentation.
