Posts

Log4net

Instellen : - Zet in het project log4net.config 'copy to output dir'  op 'true'; - In app.config: <appsettings><add key="log4net.Config" value="Log4Net.config"></appsettings> - Voorbeeld log4net.config: <?xml version="1.0" encoding="utf-8" ?> <log4net debug="true"> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="c:\temp\loggerpoc.txt" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="250KB" /> <staticLogFileName value="true" /> ...

XCopy parameters

Syntax       XCOPY source [destination] [options] Key    source      : Pathname for the file(s) to be copied (accepts wildcards).    destination : Pathname for the new file(s).      [options] can be any combination of the following:     Source Options       /A    Copy files with the archive attribute set (default=Y)    /M    Copy files with the archive attribute set and          turn off the archive attribute, use this option          when making regular Backups (default=Y)                                      /H    Copy hidden and system files and folders (default=N)    /D:mm-dd-yyyy          Copy files changed on or after the specified date.    ...

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...