Posts

Linq Zip functie

Met zip functie van Linq kunnen twee lijsten 'geritst' worden. Deze functie werkt als een soort ritsssluiting. Voorbeeld: var letters= new string[] { "A", "B", "C", "D", "E" }; var numbers= new int[] { 1, 2, 3 }; var q = letters.Zip(numbers, (l, n) => l + n.ToString()); foreach (var s in q) Console.WriteLine(s); Als de ene lijst meer items bevat dan de andere lijst, dan wordt uitgegaan van de lijst met de minste items, zoals het voorbeeld laat zien.

Linq Aggregate functie

Met de aggregate linq method wordt een lijst eenmalig van begin tot eind doorlopen. Bij elke iteratie kan een actie worden uitgevoerd en het resultaat van deze actie wordt meegenomen naar de volgende iteratie. Voorbeeld: var nums = new[]{1,2,3,4}; var sum = nums.Aggregate( (a,b) => a + b); Console.WriteLine(sum); // output: 10 (1+2+3+4) Deze code wordt als volgt uitgevoerd: In de eerste iteratie hebben de parameters a en b de waarde 1 en 2. In de body van de aggregate worden deze waarden bij elkaar opgeteld en het resultaat vormt de input voor de volgende iteratie. In de tweede iteratie zijn de waarden voor a en b dan ook 3 en 3. Deze waarden worden weer bij elkaar opgeteld en het resultaat is weer de waarde voor a: 6 en b krijgt de waarde uit de lijst: 4. Dus het resultaat is dan ook 6 + 4 = 10. Een ander voorbeeld is gebruik te maken van een strings: var chars = new []{"a","b","c", "d"}; var csv = chars.Aggregate( (a,b) => a + ...

OO Design reminders

Onderstaand reminders voor OO design: Lijsten Komt het regelmatig voor dat er acties moeten worden uitgevoerd op lijsten, maar hiervoor dan een aparte class aan, bijv. Persons. Deze class erft dan van IEnumerable en heeft dan als extra's de methodes die vaak gebruikt worden. Option type Soms moet een actie op een object worden uitgevoerd, maar alleen als dat object bestaat. Om een null check uit te sluiten kan je een nieuwe class maken: Option . Vervolgens implementeert deze class IEnumerable . Dit is een manier om aan te geven dat er "niets" is zonder te hoeven checken op null. De aanroepende code kan dan altijd bijv. ForEach(o => o.DoSomething()) aanroepen zonder daarbij te hoeven checken op null. Voorbeeld implementatie van Option class: public class Option<T> : IEnumerable<T> { private readonly T[] data; private Option(T[] data) { this.data = data; } public static Option<T> Create(T element) { ret...

Advanced javascript

Scope en javascript compiler Scope:  waar zoeken we naar (variabelen, functies, etc) wie zoekt er? Javascript heeft enkel een function scope. Misconceptie is dat Javascript geen compiled language is; dat is het namelijk wel. De JS engine gaat twee keer door de code heen: de compileer-fase en de runtime fase. Hierover later meer. Compileerfase zoekt naar declaraties van variabelen en functies en plaats deze in de juiste 'scope slots'. var foo = "bar"; function bar(){ var foo = "bar"; } function baz(foo){ foo = "bam"; bam = "yay"; } Deze code wordt door Javascript door twee totaal verschillende fases verwerkt: De declaration fase (het var foo gedeelte) en een initialization fase (het toekennen van "bar" aan foo). Deze twee operaties (fases) gebeuren op totaal verschillende tijdstippen. De compiler scant naar alle declaraties (var statements en function declarations) die hij kan vinden. Als hij e...

IIS: Application pool recycling vs IIS Reset

Om het verschil tussen IIS Reset en Application pool recycling uit te leggen, eerst even een stukje uitlog over hoe IIS werkt. IIS kent drie hoofdcomponenten: 1. Http.sys Dit is een kernelcomponent wat betekent dat het geen onderdeel is van de user mode processen, zoals de W3WP.Exe. Een kernelcomponent gebruikt nooit virtueel geheugen van user processen. Het is geisoleerd en gescheiden. Http.sys heeft drie belangrijke rollen: (client) connection management; Routing requests van browsers. Dit houdt in dat http.sys er voor zorgt dat de requests bij de juiste application pool queue terecht komen. Beheren van de response cache. 2. Worker processen Worker processen zijn de application pools en elke application pool en voor elke application pool wordt een instantie van W3WP.exe opgestart. Een application pool handelt alle content af zoals html bestanden, afbeeldingen, scripts, css bestanden, maar ook dynamische content zoals ASP.NET applicaties. Om deze reden is de stat...

MS Sql 70-461: Chapter 17

Afbeelding
Les 1 Bij de uitvoering van een query kan invloed worden uitgeoefend met behulp van hints. Hints zijn bevellen over hoe de query moet worden uitgevoerd: Table hints: hoe moet een tabel gebruikt worden in een query query hints: hints op query level. Bijv welk join algoritme moet gebruikt worden join hints: enkel voor een één join. Sql Server voert een query uit m.b.v. physical operators. Omdat deze operators itereren over rowsets worden zij ook wel iterators  genoemd. Access Methods Als een tabel is georganiseerd als een heap, dan is een table scan de enige acces method. De scan wordt dan uitgevoerd in geen specifieke logische volgorde. Sql Server gebruikt Index Allocation Map (IAM) pages om de scan uit te voeren in physical allocation order . Deze allocation scan kan ook worden gebruikt bij een clustered tabel. Een allocation order scan is sneller als de tabel minder gefragmenteerd is. De scan is langzamer als de fysieke fragmentatie hoger is. Sql Server gebrui...

MS Sql 70-461: Chapter 16

Les 1 The meaning of "set-based" De term set-based  wordt gebruikt om een benadering te beschrijven om query-taken af te handelen en is gebaseerd op de principes van het relationele model. Ter herinnering, het relationele model is gebaseerd op de mathematische set theorie. Set-based oplossingen gebruiken T-sql queries, welke opereren op tabellen als input, ofwel een set van rijen. Zulke oplossingen staan in contrast met iteratieve oplossingen die cursors gebruiken of andere iteratieve constructies om één rij per keer af te kunnen handelen. Het is aan te raden om set-based constructies te gebruiken i.p.v. iteratieve constructies. Dit omdat de set-theorie de basis is van het relationele model, wat op zijn beurt weer de basis is van T-sql. Met iteratieve oplissingen wordt tegen dit principe in gegaan. Iteratieve constructies zijn altijd veel langer omdat zij zowel de "hoe" als de "wat" (imperatief) moeten implementeren, terwijl bij set-based enke...