vrijdag 23 mei 2008

Blog live van de devdays's 2008

De devdays dit jaar zijn weer georganiseerd in de RAI. Een groot complex waarin makkelijk valt te verdwalen. Vorig jaar was de opmerking dat de zalen lastig waren te vinden en daarom hebben ze dit jaar de zalen nog beter verstopt.

Overal word vemeld dat je naar de foyer toe moet terwijl op de RAI borden over zaal 8 word gesproken. De forum zaal heet op de borden FO. Hilariteit gegarandeerd.

De oplossing van microsoft hierbij is om flink wat mensen/leuke dames neer te zetten die de weg kunnen wijzen. Helaas werkt dat niet ideaal. Verder is er bij de ingang een roltrap omhoog waar s'ochtends in alle drukte een beveiligings meneertje voor staat die niemand doorlaat ook niet als dat 10 minuten in de rij staan voorkomt. Yeah!

Wat ik zoek is een aantal grote borden waarin staat aangegeven hoe de zaal heet en welke zaal het dichts bijzijnde is. Binnenkort een aantal voorbeelden.

Er is ook goednieuws, de shows dit jaar zijn goed.
Ik ben naar de volgende shows geweest:

dag 1
Keynote why software sukcs
David Platt

Advanced debugging with VS2008
Ingo Rammer

Understanding Ado.net entity framework
Mike Taulty

Hierna wilde ik naar: Using WPF for good and not evil van David Platt helaas zat hierbij de zaal overvol. Dus ben ik naar WCF en WF van Ingo Rammer geweest.

WCF on the WEB: Using REST and JSON with wcf


dag 2
Daar zit ik nu nog live in: meer nieuws volgt

zaterdag 17 mei 2008

(de)evolutie

Distributed applications


Computers zijn zo’n 50 jaar geleden uitgevonden. Van die grote kasten met een klein schermpje.

Van deze terminals die een som tegelijk konden doen zijn er niet veel gebouwd. De eerste computers werden veel gebruikt voor complexe berekeningen en de mensen van de invoer via een toetsenbordje/printplaat ingang konden de verwerkings snelheid van computers amper bij houden. Zo’n super snelle computer was het grootste gedeelte van zijn tijd niets aan het doen.

Om de dure computers effiecienter te kunnen gebruiken waren er trucjes nodig om twee of meer processen tegelijk uit te voeren. De code die daarbij hoorde van toendertijd al ontzettend complex. Zodra de threads waren uitgevonden konden er meerdere processen tegelijk uitgevoerd worden op de mainframes en konder er verschillende invoer stationnen/ terminals gebruikt worden om de computer een groter gedeelte van de tijd aan het werk te houden.

Omdat computer steeds sneller werden kwamen er ook meer en meer terminals bij en ook steeds complexere software. De complexe software vroeg steeds meer van de mainframes die door de hogere load ook steeds trager ging reageren. Een brief typen met een IO output elke 3 secondes was normaal. (gelukkig hebben we nu 50 jaar later daar nooit last van met pc’s die miljoenen keer sneller zijn)

Omdat de mainframes steeds goedkoper waren was het mogelijk om meer computers te gebruiken en in de loop van de jaren is de verhouding tussen gebruikers en computers door gegroeid naar 1 op 1. Momenteel is het zelfs niet raar dat mensen meerdere computers voor zich hebben. (eentje thuis, eentje op het werk, in de auto)

Bedrijfs applicaties zijn minder snel gegroeid. Van centrale mainframes waar alle data op bewaard werd naar centrale servers waar clients hun data naar toe schrijven is de verhouding zo goed als gelijk gebleven. Een centrale computer die al de data bewaards. De clients zijn wel steeds slimmer geworden maar de centrale server is nog steeds de kern in het verhaal.

Omdat ook bedrijven complexer zijn geworden zijn bedrijfs applicaties zich ook gaan spreiden. Van een server met een losse database server naar complexere omgevingen waar de verschillende blokken data zoals personeels gegevens, salaris administratie en documenten bewaar server losse onderdelen zijn geworden die toch aan een bedrijfs proces werken.

De losse data servers en applicaties servers zijn los staande brokken functionaliteit. Ze werken regelmatig nog niet samen voor een vloeiend bedrijfsproces. Bij de gemeente zaanstad zijn er momenteel een 17 tal personeels gegevens servers. Denk hierbij aan:

Bewoners en huizen
Vuilnis
Mensen die mogen stemmen
Parkeer vergunningen
vergunning voor honden en katten
Bedrijven
Belasting systeem gemeente
Belasting systeem overheid Noord-Holland
Belasting systeem overheid nederland


En deze servers zijn dus regelmatig niet synchroon. Het synchroniseren van deze 17 systemen is super lastig, niet altijd wenselijk en extreem duur.

Al deze systemen werken natuurlijk op verschillende manieren, kunnen niet met elkaar communiceren, vallen onder de verantwoordelijkheid van verschillende ‘groepen’ en niet alle systemen werken met real time data updates.

Hoe kunnen deze problemen opgelost worden, hoe kan een stapel problemen zich wegwerken. Tegen deze problemen word er meestal met de term SOA gegooid.

Service Oriented Design zou dit woud van services moeten stroom lijnen tot een geheel.

Vervang de toegang tot een enkel dubbel uitgevoerde server die de berichter zelf verstpreid over het netwerk. Was het maar zomakkelijk gezegd als gedaan.

Ik kan me sinds kort goed voorstellen waarom het zo lang duurt bij de balie en waarom de medewerkers achter kogelvrij glas zitten.

vrijdag 9 mei 2008

Crash course Javascript programming

Hierbij alles dat interessant is in javascript in 5 minuten.
Alleen geschikt voor ervaren programmeurs met java/c++ of c# kennis.

//JScript File
//call function Object and create a new one from the return value
var temp = new Object();
var book = {}; //zelfde

book.bladzijden = 500;
book.title = 'a book title';
book['title'] = 'book title changed';

for(var p in book)
{
alert('name:' + p + ' value:' + book[p]);
}

//create a new array
var arr = new Array();
var a = [];

arr[0] = 'appel';
arr[1] = new Object();
arr.push(42);
Array.enqueue(arr,"indextwee");
Array.addRange(arr,arr);

function add(a,b)
{
return a+b;
}

var calc = {};
calc.add = function(a,b)
{
return a+b;
}
calc.multiply = function(a,b)
{
return a*b;
}

//a closured function
function parent(args)
{
var test = "a test var";

function nested()
{
alert(args + test);
}
return nested; //starting parent starts nested function
}
parent("This is a ");
var dynamic = parent("This is a dynamic ");
dynamic(); //currying / templating

function Cat()
{
this._name = '';
this._age = 0;
}
Cat.prototype.speak = function(){
alert(this._name + " says Meeeowww!");
}
Cat.registerClass('Cat'); //only a single cat can exists
//Cat.registerClass('Cat'); //ajax exception

var cat = new Cat();
cat.speak();

//quick construction
var p = { firstName: 'John' , lastName:'Doe'} //basis voor JSON
var a = [1,2,3,4,5];

var group = {
name:'',
members:['jack','smith','andrew'] ,
count:function() { alert('a strange construction'); }
}
//"zestig"
var getal = parseInt('600'); //resolve naar 600 number
for( var i=0;i<10;i++)
{
//dummy for
}
while(false)
{
//dummy while
}
//a recursive function (watch out for infinite loop)
var counter = 0;
function rec()
{
counter ++;
alert(counter);
if(counter < 10)
{
setTimeout(rec(),100);
}
}
//asp.net ajax only document.getElementById browser onafhankelijk
//$get("lbl1").innerHTML
//asp.net ajax only manier om dom events toe te voegen en verwijderen
//$addHandler(domobject,eventname,eventfunction);
//$removeHandler(domobject,eventname,eventfunction);