1
0
mirror of https://github.com/adambard/learnxinyminutes-docs.git synced 2025-09-03 03:33:15 +02:00

Simplify language codes in directories

This commit is contained in:
Boris Verkhovskiy
2024-12-08 20:29:09 -07:00
parent 3da692272f
commit 912da583da
489 changed files with 0 additions and 0 deletions

244
nl/amd.md Normal file
View File

@@ -0,0 +1,244 @@
---
category: tool
tool: AMD
contributors:
- ["Frederik Ring", "https://github.com/m90"]
translators:
- ["Reinoud Kruithof", "https://github.com/reinoudk"]
filename: learnamd-nl.js
lang: nl-nl
---
## Aan de slag met AMD
De **Asynchronous Module Definition** API specificeert een mechanisme om JavaScript
modules the definiëren zodat de module en dependencies (afhankelijkheden) asynchroon
geladen kunnen worden. Dit is vooral erg geschikt voor de browseromgeving, waar het
synchroon laden van modules zorgt voor problemen qua prestatie, gebruiksvriendelijkheid,
debugging en cross-domain toegangsproblemen.
### Basis concept
```javascript
// De basis AMD API bestaat uit niks meer dan twee methodes: `define` en `require`
// and gaat vooral over de definitie en gebruik van modules:
// `define(id?, dependencies?, factory)` definieert een module
// `require(dependencies, callback)` importeert een set van dependencies en
// gebruikt ze in de gegeven callback
// Laten we starten met het gebruiken van define om een nieuwe module (met naam)
// te creëeren, welke geen dependencies heeft. Dit doen we door een naam
// en een zogeheten factory functie door te geven aan define:
define('awesomeAMD', function(){
var isAMDAwesome = function(){
return true;
};
// De return waarde van een module's factory functie is
// wat andere modules of require calls ontvangen wanneer
// ze onze `awesomeAMD` module requiren.
// De geëxporteerde waarde kan van alles zijn: (constructor) functies,
// objecten, primitives, zelfs undefined (hoewel dat niet veel nut heeft).
return isAMDAwesome;
});
// We gaan nu een andere module defineren die afhankelijk is van onze
// `awesomeAMD` module. Merk hierbij op dat er nu een extra functieargument
// is die de dependencies van onze module defineert:
define('schreewlelijk', ['awesomeAMD'], function(awesomeAMD){
// dependencies worden naar de factory's functieargumenten
// gestuurd in de volgorde waarin ze gespecificeert zijn
var vertelIedereen = function(){
if (awesomeAMD()){
alert('Dit is zOoOo cool!');
} else {
alert('Vrij saai, niet?');
}
};
return vertelIedereen;
});
// Nu we weten hoe we define moeten gebruiken, kunnen we require gebruiken
// om ons programma mee te starten. De vorm van `require` is
// `(arrayVanDependencies, callback)`.
require(['schreeuwlelijk'], function(schreewlelijk){
schreeuwlelijk();
});
// Om deze tutorial code uit te laten voeren, gaan we hier een vrij basic
// (niet-asynchrone) versie van AMD implementeren:
function define(naam, deps, factory){
// merk op hoe modules zonder dependencies worden afgehandeld
define[naam] = require(factory ? deps : [], factory || deps);
}
function require(deps, callback){
var args = [];
// we halen eerst alle dependecies op die nodig zijn
// om require aan te roepen
for (var i = 0; i < deps.length; i++){
args[i] = define[deps[i]];
}
// voldoe aan alle dependencies van de callback
return callback.apply(null, args);
}
// je kan deze code hier in actie zien (Engels): http://jsfiddle.net/qap949pd/
```
### require.js in de echte wereld
In contrast met het voorbeeld uit de introductie, implementeert `require.js`
(de meest populaire AMD library) de **A** in **AMD**. Dit maakt het mogelijk
om je modules en hun dependencies asynchroon in the laden via XHR:
```javascript
/* file: app/main.js */
require(['modules/someClass'], function(SomeClass){
// de callback word uitgesteld tot de dependency geladen is
var things = new SomeClass();
});
console.log('Dus, hier wachten we!'); // dit wordt als eerste uitgevoerd
```
De afspraak is dat je over het algemeen één module in één bestand opslaat.
`require.js` kan module-namen achterhalen gebaseerd op de bestandslocatie,
dus je hoeft je module geen naam te geven. Je kan simpelweg aan ze referen
door hun locatie te gebruiken.
In het voorbeeld nemen we aan dat `someClass` aanwezig is in de `modules` map,
relatief ten opzichte van de `baseUrl` uit je configuratie.
* app/
* main.js
* modules/
* someClass.js
* someHelpers.js
* ...
* daos/
* things.js
* ...
Dit betekent dat we `someClass` kunnen defineren zonder een module-id te specificeren:
```javascript
/* file: app/modules/someClass.js */
define(['daos/things', 'modules/someHelpers'], function(thingsDao, helpers){
// definitie van de module gebeurt, natuurlijk, ook asynchroon
function SomeClass(){
this.method = function(){/**/};
// ...
}
return SomeClass;
});
```
Gebruik `requirejs.config(configObj)` om het gedrag van de standaard mapping
aan te passen in je `main.js`:
```javascript
/* file: main.js */
requirejs.config({
baseUrl : 'app',
paths : {
// je kan ook modules uit andere locatie inladen
jquery : '//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min',
coolLibUitBower : '../bower_components/cool-lib/coollib'
}
});
require(['jquery', 'coolLibUitBower', 'modules/someHelpers'], function($, coolLib, helpers){
// een `main` bestand moet require minstens eenmaal aanroepen,
// anders zal er geen code uitgevoerd worden
coolLib.doFancyDingenMet(helpers.transform($('#foo')));
});
```
Op `require.js` gebaseerde apps hebben vaak een enkel beginpunt (`main.js`)
welke toegevoegd wordt aan de `require.js` script tag als een data-attribuut.
Deze zal automisch geladen en uitgevoerd worden als de pagina laadt:
```html
<!DOCTYPE html>
<html>
<head>
<title>Honder script tags? Nooi meer!</title>
</head>
<body>
<script src="require.js" data-main="app/main"></script>
</body>
</html>
```
### Een heel project optimaliseren met r.js
Veel mensen geven er de voorkeur aan om AMD te gebruiken tijdens de
ontwikkelfase om code op een gezonde manier te organiseren maar
willen nog steeds een enkel scriptbestand gebruiken in productie in
plaats van honderderen XHR verzoeken uit te voeren als de pagina laadt.
`require.js` wordt geleverd met een script genaamd `r.js` (die je waarschijnlijk
uitvoert in node.js, hoewel Rhino ook ondersteund wordt) welke de
dependency book van je project analyseert en een enkel bestand bouwt met daarin
al je module (juist genaamd), geminificeerd en klaar voor productie.
Instaleren met `npm`:
```shell
$ npm install requirejs -g
```
Nu kun je het een configuratiebestand voeden:
```shell
$ r.js -o app.build.js
```
Voor ons bovenstaande voorbeeld zou de configuratie er zo uit kunnen zien:
```javascript
/* file : app.build.js */
({
name : 'main', // naam van het beginpunt
out : 'main-built.js', // naam van het bestand waar de output naar geschreven wordt
baseUrl : 'app',
paths : {
// `empty:` verteld r.js dat dee nog steeds geladen moet worden van de CDN,
// gebruik makend van de locatie gespecificeert in `main.js`
jquery : 'empty:',
coolLibUitBower : '../bower_components/cool-lib/coollib'
}
})
```
Verwissel simpelweg `data-main` om het gebouwde bestand te gebruiken in productie:
```html
<script src="require.js" data-main="app/main-built"></script>
```
Een erg gedetaileerd [overzicht van bouwopties](https://github.com/jrburke/r.js/blob/master/build/example.build.js) is
beschikbar in de GitHub repo (Engels).
Hieronder vind je nog meer informatie over AMD (Engels).
### Onderwerpen die niet aan bod zijn gekomen
* [Loader plugins / transforms](http://requirejs.org/docs/plugins.html)
* [CommonJS style loading and exporting](http://requirejs.org/docs/commonjs.html)
* [Advanced configuration](http://requirejs.org/docs/api.html#config)
* [Shim configuration (loading non-AMD modules)](http://requirejs.org/docs/api.html#config-shim)
* [CSS loading and optimizing with require.js](http://requirejs.org/docs/optimization.html#onecss)
* [Using almond.js for builds](https://github.com/jrburke/almond)
### Verder lezen:
* [Official Spec](https://github.com/amdjs/amdjs-api/wiki/AMD)
* [Why AMD?](http://requirejs.org/docs/whyamd.html)
* [Universal Module Definition](https://github.com/umdjs/umd)
### Implementaties:
* [require.js](http://requirejs.org)
* [dojo toolkit](http://dojotoolkit.org/documentation/tutorials/1.9/modules/)
* [cujo.js](http://cujojs.com/)
* [curl.js](https://github.com/cujojs/curl)
* [lsjs](https://github.com/zazl/lsjs)
* [mmd](https://github.com/alexlawrence/mmd)

234
nl/bash.md Normal file
View File

@@ -0,0 +1,234 @@
---
language: Bash
contributors:
- ["Max Yankov", "https://github.com/golergka"]
- ["Darren Lin", "https://github.com/CogBear"]
- ["Alexandre Medeiros", "http://alemedeiros.sdf.org"]
- ["Denis Arh", "https://github.com/darh"]
- ["akirahirose", "https://twitter.com/akirahirose"]
- ["Anton Strömkvist", "http://lutic.org/"]
- ["Rahil Momin", "https://github.com/iamrahil"]
- ["Gregrory Kielian", "https://github.com/gskielian"]
- ["Etan Reisner", "https://github.com/deryni"]
translators:
- ["Jeroen Deviaene", "https://www.github.com/jerodev"]
lang: nl-nl
filename: LearnBash-nl.sh
---
Bash is de naam van de unix shell, deze wordt gebruikt voor het GNU operating system en is de standaard shell op Linux en macOS.
Bijna alle voorbeelden hieronder kunnen deel uitmaken van een shell script of kunnen uitgevoerd worden in de shell.
[Lees er meer over hier.](http://www.gnu.org/software/bash/manual/bashref.html)
```bash
#!/bin/bash
# De eerste lijn in het schript is shebang, deze laat het systeem weten hoe
# het script uitgevoerd moet worden: http://en.wikipedia.org/wiki/Shebang_(Unix)
# Zoals je kan zien wordt # gebruikt om een commentaar lijn te starten.
# Een simpel hello world voorbeeld:
echo Hello world!
# Elk commando start op een nieuwe lijn, of achter een puntkomma (;):
echo 'Dit is de eerste lijn'; echo 'Dit is de tweede lijn'
# Een variabele declareren gebeurt op volgende manier:
Variabele="Een string"
# Maar niet op deze manier:
Variabele = "Een string"
# Bash ziet variabelen als een commando en zal een error geven omdat dit commando
# niet bestaat.
# Of op deze manier:
Variabele= 'Een string'
# Bash zal 'Een string' zien als een commando en een error geven omdat het niet
# gevonden kan worden.
# Variabelen gebruiken:
echo $Variabele
echo "$Variabele"
echo '$Variabele'
# Wanneer je een variable wil toekennen, exporteren of nog anders gebruik je
# de naam zonder '$'. Als je de waarde van de variabele wilt, gebruik je een
# '$' voor de naam.
# Strings vervangen in variables
echo ${Variabele/Een/De}
# Dit zal 'Een' vervangen door 'De' in de string
# Substring
Length=7
echo ${Variabele:0:Length}
# Dit zal de eerste 7 tekens van de string weergeven.
# Standaard waarde voor variabele
echo ${Foo:-"StandaardwaardeAlsFooLeegIsOfNietBestaat"}
# Dit werkt voor null en lege strings (Foo=""). Dit werkt niet voor 0 (Foo=0).
# Merk op dat dit enkel de waarde retourneerd en de variable niet aanpast.
# Ingebouwde variabelen:
# Er zijn enkele zeer handige ingebouwde variabelen, zoals:
echo "Return waarde van laatste programma: $?"
echo "PID van dit script: $$"
echo "Aantal argumenten voor dit script: $#"
echo "Alle argumenten voor dit script: $@"
echo "Argumenten voor dit script in apparte variabelen: $1 $2..."
# Een waarde lezen via input:
echo "Wat is uw naam?"
read Naam # Merk op dat we geen variabele gedeclareerd hebben
echo Hallo, $Naam!
# We hebben ook logische if structuren
# Gebruik 'man test' voor meer informatie over condities.
if [ $Naam -ne $USER ]
then
echo "Uw naam is niet gelijk aan de gebruikersnaam"
else
echo "Uw naam is de gebruikersnaam"
fi
# MERK OP: als $Naam leeg is ziet bash het bovenstaande als volgt:
if [ -ne $USER ]
# dit is ongeldige syntax
# Dus de beter manier om dit te schrijven is
if [ "$Naam" -ne $USER ] ...
# Als naam nu leeg is, ziet bash nu nog steeds
if [ "" -ne $USER ] ...
# Dit werkt wel zoals het hoort
# Er is ook conditionele executie
echo "Altijd uitvoeren" || echo "Enkel uitvoeren als vorige command mislukt"
echo "Altijd uitvoeren" && echo "Enkel uitvoeren als vorige command NIET mislukt"
# Om && en || te gebruiken in if structuren moeten vierkante haken gebruikt worden:
if [ "$Naam" == "Steve" ] && [ "$Leeftijd" -eq 15 ]
then
echo "Dit wordt uitgevoerd als $Naam Steve is en $Leeftijd 15 is."
fi
# Expressies worden gemaakt met volgende syntax:
echo $(( 10 + 5 ))
# Bash werkt steeds in de context van een huidige map in het bestandssysteem.
# Bestanden en mappen in de huidige map kunnen weergegeven worden met het ls
# commando.
ls
# Commandos hebben opties die de uitvoer beinvloeden
ls -l # Lijst elk bestand en map op een nieuwe lijn.
# Resultaten van een vorig commando kunnen doorgegeven worden aan een volgend
# commando als input.
# Het grep commando filter de input met een bepaald patroon. Op deze manier kunnen
# we alle .txt bestanden weergeven in de huidige map.
ls -l | grep "\.txt"
# Commando's kunnen gekoppeld worden met andere commando's door gebruik te maken van
# $( ):
# Het volgende commando geeft het aantal bestanden weer in de huidige map
echo "Er zijn hier $(ls | wc -l) bestanden."
# Het zelfde kan gedaan worden met `, maar die kunnen niet genest worden. De methode
# bij voorkeur is om $( ) te gebruiken.
echo "Er zijn hier `ls | wc -l` bestanden."
# Bash heeft een case statement dat werkt zoals in Java en C++
case "$Variabele" in
0) echo "Er is een 0";;
1) echo "Er is een 1";;
*) echo "Er is iets";;
esac
# For lussen itereren over de gegeven argumenten
# De waarde van $Variabele wordt hier drie keer afgeprint
for Variable in {1..3}
do
echo "$Variabele"
done
# Of schrijf een traditionele for loop op deze manier
for ((a=1; a <= 3; a++))
do
echo $a
done
# Lussen kunnen ook gebruikt worden met bestanden
# Deze lus voert het cat commando uit op file1 en file2
for Variable in file1 file2
do
cat "$Variable"
done
# Of met het output commando
for Output in $(ls)
do
cat "$Output"
done
# while lus:
while [ true ]
do
echo "body van de lus..."
break
done
# Je kan ook functies aanmaken
# Defenitie:
function foo ()
{
echo "Alle argumenten: $@"
echo "Apparte argumenten: $1 $2..."
echo "Dit is een functie"
return 0
}
# Of simpeler
bar ()
{
echo "Dit is een andere manier om functies te maken."
return 0
}
# Functies oproepen
foo "Mijn naam is" $Naam
# Enkele zeer handige commando's die je moet kennen
# print de laatste 10 lijnen van file.txt
tail -n 10 file.txt
# print de eerste 10 lijnen van file.txt
head -n 10 file.txt
# Sorteer de lijnen in file.txt
sort file.txt
# Vind dubbele lijnen in file.txt
uniq -d file.txt
# Print de eerste kolom voor het ',' karakter
cut -d ',' -f 1 file.txt
# Vervang elke 'okay' met 'great' in file.txt (werkt ook met regex)
sed -i 's/okay/great/g' file.txt
# Print alle lijnen die voldoen aan de regex naar stdout
grep "^foo.*bar$" file.txt
# Gebruik de ingebouwde help functies door het help commando te gebruiken:
help
help help
help for
help return
help source
help .
# Lees de bash documentatie met het man commando:
apropos bash
man 1 bash
man bash
# Lees bash info documentatie:
info bash
info bash 'Bash Features'
info bash 6
info --apropos bash
```

87
nl/bf.md Normal file
View File

@@ -0,0 +1,87 @@
---
language: BF
filename: learnbf-nl.bf
contributors:
- ["Prajit Ramachandran", "http://prajitr.github.io/"]
- ["Mathias Bynens", "http://mathiasbynens.be/"]
translators:
- ["Jelle Besseling", "https://github.com/Jell-E"]
lang: nl-nl
---
Brainfuck (schrijf je niet met een hoofdletter behalve aan het begin van een
zin) is een extreem
minimalistische Turing-complete programmeertaal met maar acht commando's.
```bf
Elk karakter behalve "><+-.,[]" (en de quotes) wordt genegeerd.
Brainfuck wordt gerepresenteerd door een array met 30.000 cellen die initieel
gevuld is met nullen en een pointer die wijst naar de huidige cel.
Dit zijn de acht commando's:
+ : Verhoog de huidige cell met 1.
- : Verminder de huidige cell met 1.
> : Beweeg de pointer naar de volgende cell (één naar rechts).
< : Beweeg de pointer naar de vorige cell (één naar links).
. : Print de huidige cell als een ASCII karakter(d.w.z. 65 = 'A').
, : Lees een karakter in de huidige cell.
[ : Als de huidige cell nul is ga dan naar de bijbehorende ] .
Als het geen nul is, ga dan gewoon verder.
] : Als de huidige cell nul is ga dan gewoon verder.
Als het geen nul is, ga dan terug naar de bijbehorende [ .
[ en ] maken een while loop. Ze moeten uiteraard wel gebalanceerd zijn
Laten we een kijkje nemen naar een paar brainfuck programma's.
++++++ [ > ++++++++++ < - ] > +++++ .
Dit programma print het karakter 'A'. Eerst verhoogt het cell #1 tot 6.
Cell #1 wordt gebruikt om te loopen. Dan begint het de loop ([) en gaat
naar cell #2. Het verhoogt cell #2 tien keer, gaat terug naar cell #1, en
verlaagt cell #1. Deze loop gebeurt zes keer (na zes keer staat cell #1
weer op nul, waarna het doorgaat naar het einde van de loop (]) en
verder gaat).
De pointer staat nu weer op cell #1, deze heeft een waarde van 0, en cell #2
heeft een waarde van 60. > beweegt de pointer naar cell #2, daarna verhoogt
het de cell vijf keer, waardoor het een waarde van 65 bevat, en print dan
de waarde van cell #2. 65 is 'A' in ASCII, dus 'A' wordt geprint in de terminal.
, [ > + < - ] > .
Dit programma leest een karakter van de gebruiker in put en kopieert dat
karakter in cel #1. Dan start de loop. Ga naar cel #2, verhoog de waarde in
cel #2, ga terug naar cel #1, en verklein de waarde in cel #1. Dit gaat door
totdat cel #1 nul is en cel #2 de oude waarde heeft van cell #1. Omdat we
op cel #1 staan verplaatst > de pointer één naar rechts en . print het
karakter in cel #2.
Houd wel in gedachten dat de spaties alleen zijn voor leesbaarheid, je kan het
bovenstaande programma net zo goed schrijven als:
,[>+<-]>.
Probeer maar eens te bedenken wat het volgende programma doet:
,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>
Dit programma neemt twee getallen als input, en vermenigvuldigt ze.
In het begin leest het twee karakters in cel #1 en #2. Dan start het de
buitenste loop, met als teller cel #1. Het beweegt naar cel #2, dan start het
de binnenste loop met als teller cel #2, daar verhoogd het cel #3. Maar
dan is er een probleem als cel #2 nul wordt aan het einde van de binnenste loop.
Om dit op te lossen wordt ook cel #4 verhoogd naar het oorspronkelijke getal
uit cel #2 en daarna wordt cel #4 weer gekopieerd naar cell #2.
Het resultaat komt in cel #3 te staan.
```
En dat is dan brainfuck. Niet heel moeilijk, toch? Je kan zelf voor de lol
brainfuck programma's gaan schrijven, of je kan een interpreter schrijven
voor brainfuck in een andere taal. Het is namelijk redelijk makkelijk om te
implementeren aangezien brainfuck maar acht commando's heeft. En als je een
masochist bent kan je ook nog proberen om brainfuck te implementeren… in
brainfuck.

111
nl/coffeescript.md Normal file
View File

@@ -0,0 +1,111 @@
---
language: CoffeeScript
contributors:
- ["Tenor Biel", "http://github.com/L8D"]
- ["Xavier Yao", "http://github.com/xavieryao"]
translators:
- ["Jelle Besseling", "https://github.com/Jell-E"]
- ["D.A.W. de Waal", "http://github.com/diodewaal"]
- ["Sam van Kampen", "http://tehsvk.net"]
filename: coffeescript-nl.coffee
lang: nl-nl
---
CoffeeScript is een kleine programmeertaal die direct compileert naar
JavaScript en er is geen interpretatie tijdens het uitvoeren.
CoffeeScript probeert om leesbare, goed geformatteerde en goed draaiende
JavaScript code te genereren, die in elke JavaScript-runtime werkt, als een
opvolger van JavaScript.
Op [de CoffeeScript-website](http://coffeescript.org/), staat een
volledigere tutorial voor CoffeeScript.
``` coffeescript
# CoffeeScript is een taal voor hipsters.
# Het gaat mee met alle trends van moderne talen.
# Commentaar begint dus met een hekje, net zoals bij Python en Ruby.
###
Blokken commentaar maak je zo, ze vertalen naar JavaScripts */ en /*
in de uitvoer van de CoffeeScript-compiler.
Het is belangrijk dat je ongeveer snapt hoe JavaScript
werkt voordat je verder gaat.
###
# Toewijzing:
getal = 42 #=> var getal = 42;
tegengestelde = true #=> var tegengestelde = true;
# Voorwaarden:
getal = -42 if tegengestelde #=> if(tegengestelde) { getal = -42; }
# Functies:
kwadraat = (x) -> x * x #=> var kwadraat = function(x) { return x * x; }
vul = (houder, vloeistof = "koffie") ->
"Nu de #{houder} met #{vloeistof} aan het vullen..."
#=>var vul;
#
#vul = function(houder, vloeistof) {
# if (vloeistof == null) {
# vloeistof = "koffie";
# }
# return "Nu de " + houder + " met " + vloeistof + " aan het vullen...";
#};
# Reeksen:
lijst = [1..5] #=> var lijst = [1, 2, 3, 4, 5];
# Objecten:
wiskunde =
wortel: Math.sqrt
kwadraat: kwadraat
derdemacht: (x) -> x * kwadraat x
#=> var wiskunde = {
# "wortel": Math.sqrt,
# "kwadraat": kwadraat,
# "derdemacht": function(x) { return x * kwadraat(x); }
#}
# "Splats":
wedstrijd = (winnaar, lopers...) ->
print winnaar, lopers
#=>wedstrijd = function() {
# var lopers, winnaar;
# winnaar = arguments[0], lopers = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
# return print(winnaar, lopers);
#};
# Aanwezigheid:
alert "Ik wist het!" if elvis?
#=> if(typeof elvis !== "undefined" && elvis !== null) { alert("I knew it!"); }
# Lijstabstracties:
derdemachten = (wiskunde.derdemacht num for num in lijst)
#=>derdemachten = (function() {
# var _i, _len, _results;
# _results = [];
# for (_i = 0, _len = lijst.length; _i < _len; _i++) {
# num = list[_i];
# _results.push(wiskunde.derdemacht(num));
# }
# return _results;
# })();
etenswaren = ['broccoli', 'spinazie', 'chocolade']
eet eten for eten in etenswaren when eten isnt 'chocolade'
#=>etenswaren = ['broccoli', 'spinazie', 'chocolade'];
#
#for (_k = 0, _len2 = etenswaren.length; _k < _len2; _k++) {
# eten = etenswaren[_k];
# if (eten !== 'chocolade') {
# eet(eten);
# }
#}
```
## Handige links (in het Engels):
- [Smooth CoffeeScript](http://autotelicum.github.io/Smooth-CoffeeScript/)
- [CoffeeScript Ristretto](https://leanpub.com/coffeescript-ristretto/read)

55
nl/dynamic-programming.md Normal file
View File

@@ -0,0 +1,55 @@
---
category: Algorithms & Data Structures
name: Dynamic Programming
contributors:
- ["Akashdeep Goel", "http://github.com/akashdeepgoel"]
translators:
- ["Jasper Haasdijk", "https://github.com/jhaasdijk"]
lang: nl-nl
---
# Dynamisch Programmeren
## Introductie
Dynamisch programmeren is een krachtige techniek die, zoals we zullen zien, gebruikt kan worden om een bepaalde klasse van problemen op te lossen. Het idee is eenvoudig. Als je een oplossing hebt voor een probleem met een bepaalde input, sla dit resultaat dan op. Hiermee kan je voorkomen dat je in de toekomst nog een keer hetzelfde probleem moet gaan oplossen omdat je het resultaat vergeten bent.
Onthoud altijd!
"Zij die het verleden niet kunnen herinneren, zijn gedoemd het te herhalen."
## Verschillende aanpakken
1. *Top-Down* : Oftewel, van boven naar beneden. Begin je oplossing met het afbreken van het probleem in kleine stukken. Kom je een stukje tegen dat je eerder al hebt opgelost, kijk dan enkel naar het opgeslagen antwoord. Kom je een stukje tegen dat je nog niet eerder hebt opgelost, los het op en sla het antwoord op. Deze manier is voor veel mensen de makkelijke manier om erover na te denken, erg intuitief. Deze methode wordt ook wel Memoization genoemd.
2. *Bottom-Up* : Oftewel, van beneden naar boven. Analyseer het probleem en bekijk de volgorde waarin de sub-problemen opgelost kunnen worden. Begin met het oplossen van de triviale gevallen en maak zodoende de weg naar het gegeven probleem. In dit process is het gegarandeerd dat de sub-problemen eerder worden opgelost dan het gegeven probleem. Deze methode wordt ook wel Dynamisch Programmeren genoemd.
## Voorbeeld van Dynamisch Programmeren
Het langst stijgende sequentie probleem is het probleem waarbij je binnen een bepaalde reeks op zoek bent naar het langste aaneengesloten stijgende stuk. Gegeven een reeks `S = {a1 , a2 , a3, a4, ............., an-1, an }` zijn we op zoek naar het langst aaneengesloten stuk zodanig dat voor alle `j` en `i`, `j<i` in de reeks `aj<ai`.
Ten eerste moeten we de waarde van de langste subreeksen(LSi) op elke index i vinden waar het laatste element van de reeks ai is. Daarna zal LSi het langste subreeks in de gegeven reeks zijn. Om te beginnen heeft LSi de waarde 1 omdat ai een element van de reeks(laatste element) is. Daarna zal voor alle `j` zodanig dat `j<i` en `aj<ai` de grootste LSj gevonden en toegevoegd worden aan LSi. Het algoritme duurt *O(n2)* tijd.
Pseudo-code voor het vinden van de lengte van de langst stijgende subreeks:
De complexiteit van het algoritme kan worden vermindert door het gebruik van een betere data structuur dan een simpele lijst. Het opslaan van een voorgangers lijst en een variabele als `langste_reeks_dusver` en de index daarvan, kan ook een hoop tijd schelen.
Een soortgelijk concept kan worden toegepast in het vinden van het langste pad in een gerichte acyclische graaf.
```python
for i=0 to n-1
LS[i]=1
for j=0 to i-1
if (a[i] > a[j] and LS[i]<LS[j])
LS[i] = LS[j]+1
for i=0 to n-1
if (langste < LS[i])
```
### Enkele beroemde DP problemen
- [Floyd Warshall Algorithm - Tutorial and C Program source code](http://www.thelearningpoint.net/computer-science/algorithms-all-to-all-shortest-paths-in-graphs---floyd-warshall-algorithm-with-c-program-source-code)
- [Integer Knapsack Problem - Tutorial and C Program source code](http://www.thelearningpoint.net/computer-science/algorithms-dynamic-programming---the-integer-knapsack-problem)
- [Longest Common Subsequence - Tutorial and C Program source code](http://www.thelearningpoint.net/computer-science/algorithms-dynamic-programming---longest-common-subsequence)
## Online Bronnen
* [codechef](https://www.codechef.com/wiki/tutorial-dynamic-programming)

98
nl/html.md Normal file
View File

@@ -0,0 +1,98 @@
---
language: HTML
filename: learnhtml-nl.txt
contributors:
- ["Christophe THOMAS", "https://github.com/WinChris"]
translators:
- ["Robert Steed", "https://github.com/robochat"]
- ["Jeroen Deviaene", "https://github.com/jerodev"]
lang: nl-nl
---
HTML staat voor HyperText Markup Language.
Het is een taal die je toe staat pagina's te maken op het World Wide Web.
Het is een opmaak taal, dit staat de gebruiker toe om webpagina's te maken in code en zo aan te duiden hoe de pagina moet weergegeven worden.
Eigenlijk zijn html files zelfs simpele tekst bestanden.
Wat is deze opmaak? Het is een manier om de structuur en data op de pagina weer te geven met speciale html tags.
Deze tags dienen om de betekenis te geven aan de tekst die het bevat.
Zoals vele computer talen heeft html vele verschillende versies. Hier zullen we HTML5 bespreken.
**Merk op:** Je kan de verschillende tags en elementen testen terwijl je door de tutorial gaat met een website zoals [codepen](http://codepen.io/pen/), zo kan je de effecten hier van live zien.
Dit artikel gaat vooral over de HTML syntax en enkele handige tips
```html
<!-- Commentaren worden toegevoegd zoals deze lijn -->
<!-- #################### De Tags #################### -->
<!-- Hier is een voorbeeld HTML bestand dat we zullen analyseren. -->
<!doctype html>
<html>
<head>
<title>Mijn Website</title>
</head>
<body>
<h1>Hello, world!</h1>
<a href="http://codepen.io/anon/pen/xwjLbZ">Neem een kijkje op deze link</a>
<p>Dit is een paragraaf.</p>
<p>Dit is nog een paragraaf.</p>
<ul>
<li>Dit is een item in een niet genummerde lijst</li>
<li>Dit is nog zo een item</li>
<li>En dit is het laatste item van de lijst</li>
</ul>
</body>
</html>
<!-- Een HTML bestand start altijd met een tag die aan de browser laat weten dat we HTML gebruiken -->
<!doctype html>
<!-- Daarna openen we de root van het bestand met de <html> tag -->
<html>
<!-- Deze tag moet ook gesloten worden op het einde van het bestand -->
</html>
<!-- Niets mag nog na deze tag komen! -->
<!-- Binnenin (tussen de html tags <html></html>) vinden we: -->
<!-- Een header, gedefigneerd door <head> (Deze moet gesloten worden met </head>) -->
<!-- De header bevat beschrijvingen en externe data die niet zichtbaar is op de website; Dit is metadata -->
<head>
<title>Mijn Website</title><!-- De <title> tag geeft de tekst aan die in de titelbar van de browser moet weergegeven worden. -->
</head>
<!-- Achter de <head> sectie vinden we bijna altijd <body> -->
<!-- Tot op dit punt is nog niets verschenen in het browser venster. -->
<!-- In de body plaatsen we wat zichtbaar moet zijn in de browser -->
<body>
<h1>Hello, world!</h1> <!-- De h1 tag maakt een titel. -->
<!-- Er zijn ook sub titels voor <h1> van belangrijk <h2> tot minder belangrijk <h6>. -->
<a href="http://codepen.io/anon/pen/xwjLbZ">Neem een kijkje op deze link</a> <!-- een hyperlink naar de aangegeven link waar op geklikt kan worden in de browser -->
<p>This is a paragraph.</p> <!-- De tag <p> laat ons tekst toevoegen. -->
<p>This is another paragraph.</p>
<ul> <!-- De tag <ul> maakt een lijst met puntjes. -->
<!-- Om een genummerde lijst te hebben gebruik je <ol>, hiermee worden de elementen <li> automatisch genummerd -->
<li>This is an item in a non-enumerated list (bullet list)</li>
<li>This is another item</li>
<li>And this is the last item on the list</li>
</ul>
</body>
<!-- En dat is het! Zo gemakkelijk is het om een html bestand te maken. -->
```
## Gebruik
HTML wordt altijd opgeslagen in bestanden die eindigen in `.html`.
## Meer weten
* [wikipedia](https://nl.wikipedia.org/wiki/HTML)
* [HTML tutorial](https://developer.mozilla.org/en-US/docs/Web/HTML)
* [W3School](http://www.w3schools.com/html/html_intro.asp)

72
nl/json.md Normal file
View File

@@ -0,0 +1,72 @@
---
language: JSON
filename: learnjson-nl.json
contributors:
- ["Anna Harren", "https://github.com/iirelu"]
- ["Marco Scannadinari", "https://github.com/marcoms"]
- ["himanshu", "https://github.com/himanshu81494"]
- ["Maarten Jacobs", "https://github.com/maartenJacobs"]
translators:
- ["Niels van Velzen", "https://nielsvanvelzen.me"]
lang: nl-nl
---
Gezien JSON een zeer eenvouding formaat heeft zal dit één van de simpelste
Learn X in Y Minutes ooit zijn.
JSON heeft volgens de specificaties geen commentaar. Ondanks dat hebben de
meeste parsers support voor C-stijl (`//`, `/* */`) commentaar.
Sommige parsers staan zelfs trailing komma's toe.
(Een komma na het laatste element in een array of achter de laatste eigenschap van een object).
Het is wel beter om dit soort dingen te vermijden omdat het niet in elke parser zal werken.
In het voorbeeld zal alleen 100% geldige JSON gebruikt worden.
Data types gesupport door JSON zijn: nummers, strings, booleans, arrays, objecten en null.
Gesupporte browsers zijn: Firefox(Mozilla) 3.5, Internet Explorer 8, Chrome, Opera 10, Safari 4.
De extensie voor JSON bestanden is ".json". De MIME type is "application/json".
Enkele nadelen van JSON zijn het gebrek aan type definities en een manier van DTD.
```json
{
"sleutel": "waarde",
"sleutels": "zijn altijd in quotes geplaatst",
"nummers": 0,
"strings": "Hallø, wereld. Alle unicode karakters zijn toegestaan, samen met \"escaping\".",
"boolean": true,
"niks": null,
"groot nummer": 1.2e+100,
"objecten": {
"commentaar": "In JSON gebruik je vooral objecten voor je strutuur",
"array": [0, 1, 2, 3, "Arrays kunnen alles in zich hebben.", 5],
"nog een object": {
"commentaar": "Objecten kunnen genest worden, erg handig."
}
},
"dwaasheid": [
{
"bronnen van kalium": ["bananen"]
},
[
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, "neo"],
[0, 0, 0, 1]
]
],
"alternatieve stijl": {
"commentaar": "Kijk dit!"
, "De komma positie": "maakt niet uit zolang het er maar is"
, "nog meer commentaar": "wat leuk"
},
"dat was kort": "En nu ben je klaar, dit was alles wat je moet weten over JSON."
}
```

242
nl/markdown.md Normal file
View File

@@ -0,0 +1,242 @@
---
language: Markdown
filename: markdown-nl.md
contributors:
- ["Dan Turkel", "http://danturkel.com/"]
translators:
- ["Jeroen Deviaene", "https://www.github.com/jerodev"]
lang: nl-nl
---
Markdown is gecreëerd door John Gruber in 2004. Het is bedoeld om met een gemakkelijke te lezen en
schrijven syntax te zijn die gemakkelijk omgevormd kan worden naar HTML (en op heden verschillende
andere formaten)
```md
<!-- Markdown erft over van HTML, dus ieder HTML bestand is een geldig Markdown
bestand. Dit betekend ook dat html elementen gebruikt kunnen worden in Markdown
zoals het commentaar element. Echter, als je een html element maakt in een Markdown
document kan je geen markdown gebruiken voor de waarde van dat element. -->
<!-- Markdown varieert ook van implementatie tot implementatie en per parser. Deze
tutorial zal de universele functies van Markdown -->
<!-- Headers -->
<!-- Je kan de HTML elementen <h1> tot <h6> gemakkelijk maken door voor de titel
een aantal hashes (#) te plaatsen gelijk aan het level van de header.
# Dit is een <h1>
## Dit is een <h2>
### Dit is een <h3>
#### Dit is een <h4>
##### Dit is een <h5>
###### Dit is een <h6>
<!-- Markdown heeft ook een alternatieve manier om h1 en h2 te maken -->
Dit is een h1
=============
Dit is een h2
-------------
<!-- Simpele tekst stijlen -->
<!-- Tekst kan heel gemakelijk gestyled worden cursief of bold met markdown -->
*Deze tekst is cursief*
_Deze tekst ook_
**Deze tekst is vet gedrukt**
__En deze tekst ook!__
***Deze tekst is zowel bold als schuin gedrukt***
**_Deze ook!_**
*__En zelfs deze!__*
<!-- In de GitHub versie van markdown, die gebruikt wordt om markdown te renderen
op GitHub, is er ook doorstrepen -->
~~Deze tekst wordt doorstreept.~~
<!-- Paragrafen worden onderscheiden door een of meerdere lege lijnen -->
Dit is een paragraaf.
Dit is paragraaf 2.
Dit is nog steeds paragraaf 2!
Hallo, ik ben paragraaf 3.
<!-- Citaten zijn gemakkelijk te maken met het '>' karakter. -->
> Dit is een citaat. Je kan alle lijnen manueel starten met een '>'.
> Of je kan de lijn heel heel, heel, lang laten worden zodat de parser deze automatisch zal afbreken en op een nieuwe lijn plaatsen.
> Het maakt niet uit, zolang je start met een '>'.
> Je kan ook in niveaus werken
>> Niveau 2
> Hoe leuk is dat?
<!-- Lijsten -->
<!-- Niet geordende lijsten kunnen gemaakt worden met sterretjes, plussen of streepjes -->
* Item
* Item
* Nog een item
of
+ Item
+ Item
+ Nog een item
of
- Item
- Item
- Een laatste item
<!-- Geordende lijsten kunnen gemaakt wroden met cijfers -->
1. Item een
2. Item twee
3. Item drie
<!-- Het getal moet zelfs niet overeen komen met het item in de lijst, markdown zal
automatisch de nummers aanpassen -->
1. Item een
1. Item twe
1. Item drie
<!-- (De output is gelijk aan de vorige lijst) -->
<!-- Je kan ook gebruik maken van sub lijsten -->
1. Item een
2. Item twee
3. Item drie
* Sub-item
* Sub-item
4. Item vier
<!-- Er zijn zelfs todo lijsten. Dit genereert HTML checkboxen. -->
Boxen zonder een 'x' zijn niet aangevinkt
- [ ] Eerste to-do item.
- [ ] Tweede to-do item
Dit item zal aangevinkt zijn in de gerenderde html.
- [x] Deze taak is uitgevoerd
<!-- Code blokken -->
<!-- Een code block kan aangeduid worden door vier spaties of een tab -->
Dit is code
En dit ook
<!-- Extra tabs kunnen gebruikt worden om tabs in de code aan te geven -->
my_array.each do |item|
puts item
end
<!-- Inline code kan aangeduid worden met ` -->
John wist zelfs niet dat de `go_to()` functie bestond!
<!-- In GitHub Markdown kan je een speciale syntax gebruiken die aangeeft welke
taal gebruikt wordt in het code blok. -->
\`\`\`ruby <!-- Wis de backslashes om dit te doen, juist ```ruby ! -->
def foobar
puts "Hello world!"
end
\`\`\` <!-- Hier ook, geen backslashes, juist ``` -->
<!-- Voor bovenstaande tekst moet geen tab gebruikt worden. Plus, GitHub zal syntax
highlighting gebruiken voor deze specifieke taal. Hier, Ruby.
<!-- Horizontale lijn (<hr />) -->
<!-- Horizontale lijnen kunnen gemakkelijk toegevoegd worden door drie of meer
sterretjes, of streepjes te plaatsen -->
***
---
- - -
****************
<!-- Links -->
<!-- Een van de beste dingen in Markdown is hoe simpel het is om links te maken.
plaats de tekst om weer te geven tussen [ en ] gevolgd door de link tussen ( en ) -->
[Klik mij!](http://test.com/)
<!-- Een titel kan ook toegevoegd worden aan de link met aanhalingstekens -->
[Klik mij!](http://test.com/ "Titel voor de link")
<!-- Relative paden werken ook -->
[Naar de muziek](/music/).
<!-- Links kunnen ook gelegd worden met referenties -->
[Klik deze link][link1] voor meer info!
[Beijk ook dit][foobar] als je echt wil.
[link1]: http://test.com/ "Cool!"
[foobar]: http://foobar.biz/ "Tof!"
<!-- Afbeeldingen -->
<!-- Afbeeldingen worden toegevoegd op exact de zelfde manier als links maar met een
uitroepteken aan het begin van de lijn. -->
![Dit is de alt waarde van een afbeelding](http://imgur.com/myimage.jpg "Optionele titel")
<!-- Referenties werkt ook zals bij links -->
![Dit is de alt waarde][myimage]
[myimage]: relative/urls/cool/image.jpg "als een titel nodig is, staat deze hier"
<!-- Varia -->
<!-- Auto-links -->
<http://testwebsite.com/> is gelijk aan
[http://testwebsite.com/](http://testwebsite.com/)
<!-- Auto-links for emails -->
<foo@bar.com>
<!-- Karakters escapen -->
Als je sterretjes wil gebruiken in je tekst zoals *dit* dan zal dit schuingedrukt weergegeven
worden.
Dit kan je oplossen met backslashes: \*dit\* staat tussen sterretjes
<!-- Toetsenbord toetsen -->
<!-- In GitHub Markdown, kan je <kbd> gebruiken om toetsenbord toetsen weer te geven -->
Loopt je computer vast? Probeer volgende toetsen combinatie:
<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>Del</kbd>
<!-- Tabellen -->
<!-- Tabellen zijn momenteel enkel beschikbaar in GitHub Markdown en zijn redelijk omslachtig.
Maar als je er echt wilt toevoegen: -->
| Col1 | Col2 | Col3 |
| :--------------- | :---------: | ----------------: |
| Links uitgelijnt | Gecentreerd | Rechts uitgelijnt |
| blah | blah | blah |
<!-- of, Voor het zelfde resultaat -->
Col 1 | Col2 | Col3
:-- | :-: | --:
Zeer | Lelijke | Code!
<!-- The end! -->
```
Voor meer info, bekijk de officiële post van John Gruber [hier](http://daringfireball.net/projects/markdown/syntax) en de handige cheatsheet van Adam Pritchard [hier](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet).

171
nl/typescript.md Normal file
View File

@@ -0,0 +1,171 @@
---
language: TypeScript
contributors:
- ["Philippe Vlérick", "https://github.com/pvlerick"]
filename: learntypescript-nl.ts
translators:
- ["Niels van Velzen", "https://nielsvanvelzen.me"]
lang: nl-nl
---
TypeScript is een taal gericht op het versoepelen van de ontwikkeling van
grote applicaties gemaakt in JavaScript.
TypeScript voegt veelgebruikte technieken zoals klassen, modules, interfaces,
generieken en statische typen toe aan JavaScript.
TypeScript is een superset van JavaScript: alle JavaScript code is geldige
TypeScript code waardoor de overgang van JavaScript naar TypeScript wordt versoepeld.
Dit artikel focust zich alleen op de extra's van TypeScript tegenover [JavaScript](../javascript-nl/).
Om de compiler van TypeScript te kunnen proberen kun je naar de [Playground](https://www.typescriptlang.org/Playground) gaan.
Hier kun je automatisch aangevulde code typen in TypeScript en de JavaScript variant bekijken.
```ts
// Er zijn 3 basis typen in TypeScript
var isKlaar: boolean = false;
var lijnen: number = 42;
var naam: string = "Peter";
// Wanneer het type onbekend is gebruik je "Any"
var nietZeker: any = 4;
nietZeker = "misschien een string";
nietZeker = false; // Toch een boolean
// Voor collecties zijn er "typed arrays"
var lijst: number[] = [1, 2, 3];
// of generieke arrays
var lijst: Array<number> = [1, 2, 3];
// Voor enumeraties:
enum Kleur {Rood, Groen, Blauw};
var c: Kleur = Kleur.Groen;
// Als laatst, "void" wordt gebruikt voor als een functie geen resultaat geeft
function groteVerschrikkelijkeMelding(): void {
alert("Ik ben een vervelende melding!");
}
// Functies zijn eersteklas ?, supporten de lambda "fat arrow" syntax en
// gebruiken gebruiken "type inference"
// Het volgende is allemaal hetzelfde
var f1 = function(i: number): number { return i * i; }
var f2 = function(i: number) { return i * i; }
var f3 = (i: number): number => { return i * i; }
var f4 = (i: number) => { return i * i; }
// Omdat we maar 1 lijn gebruiken hoeft het return keyword niet gebruikt te worden
var f5 = (i: number) => i * i;
// Interfaces zijn structureel, elk object wat de eigenschappen heeft
// is een gebruiker van de interface
interface Persoon {
naam: string;
// Optionele eigenschappen worden gemarkeerd met "?"
leeftijd?: number;
// En natuurlijk functies
verplaats(): void;
}
// Object die gebruikt maakt van de "Persoon" interface
// Kan gezien worden als persoon sinds het de naam en verplaats eigenschappen bevat
var p: Persoon = { naam: "Bobby", verplaats: () => {} };
// Object met de optionele leeftijd eigenschap
var geldigPersoon: Persoon = { naam: "Bobby", leeftijd: 42, verplaats: () => {} };
// Ongeldig persoon vanwege de leeftijds type
var ongeldigPersoon: Persoon = { naam: "Bobby", leeftijd: true };
// Interfaces kunnen ook een functie ype beschrijven
interface ZoekFunc {
(bron: string, subString: string): boolean;
}
// Alleen de parameters types zijn belangrijk, namen maken niet uit.
var mySearch: ZoekFunc;
mySearch = function(src: string, sub: string) {
return src.search(sub) != -1;
}
// Classes - leden zijn standaard publiek
class Punt {
// Eigenschappen
x: number;
// Constructor - de publieke / prive trefwoorden in deze context zullen
// eigenschappen in de klasse kunnen aanmaken zonder ze te defineren.
// In dit voorbeeld zal "y" net als "x" gedefineerd worden met minder code.
// Standaard waardes zijn ook gesupport
constructor(x: number, public y: number = 0) {
this.x = x;
}
// Functies
dist(): number { return Math.sqrt(this.x * this.x + this.y * this.y); }
// Statische leden
static origin = new Punt(0, 0);
}
var p1 = new Punt(10 ,20);
var p2 = new Punt(25); // y zal de waarde 0 krijgen
// Overnemen
class Punt3D extends Punt {
constructor(x: number, y: number, public z: number = 0) {
super(x, y); // Constructor van ouder aanroepen (Punt)
}
// Overschrijven
dist(): number {
var d = super.dist();
return Math.sqrt(d * d + this.z * this.z);
}
}
// Modules werken ongeveer hetzelfde als namespaces
// met "." kan je submodules defineren
module Geometrie {
export class Vierkant {
constructor(public zijLengte: number = 0) {
}
oppervlakte() {
return Math.pow(this.zijLengte, 2);
}
}
}
var s1 = new Geometrie.Vierkant(5);
// Local alias for referencing a module
import G = Geometrie;
var s2 = new G.Vierkant(10);
// Generieken
// Classes
class Tupel<T1, T2> {
constructor(public item1: T1, public item2: T2) {
}
}
// Interfaces
interface Paar<T> {
item1: T;
item2: T;
}
// En functies
var paarNaarTupel = function<T>(p: Paar<T>) {
return new Tupel(p.item1, p.item2);
};
var tupel = paarNaarTupel({ item1: "hallo", item2: "wereld" });
// Refferentie naar een definitie bestand:
/// <reference path="jquery.d.ts" />
```
## Verder lezen (engels)
* [TypeScript Official website](https://www.typescriptlang.org/)
* [Source Code on GitHub](https://github.com/microsoft/TypeScript)

272
nl/vim.md Normal file
View File

@@ -0,0 +1,272 @@
---
category: tool
tool: Vim
contributors:
- ["RadhikaG", "https://github.com/RadhikaG"]
translators:
- ["Rick Haan", "https://github.com/RickHaan"]
filename: learnvim-nl.yaml
lang: nl-nl
---
# Vim in het Nederlands
[Vim](http://www.vim.org)
(Vi IMproved) is een kopie van de populaire vi editor voor Unix. Het is
ontworpen voor snelheid, verhoogde productiviteit en is beschikbaar in de meeste
unix-gebaseerde systemen. Het heeft verscheidene toetscombinaties voor snelle
navigatie en aanpassingen in het doelbestand.
## De Basis van het navigeren in Vim
```
vim <bestandsnaam> # Open <bestandsnaam> in vim
:help <onderwerp> # Open ingebouwde documentatie over <onderwerp> als
deze bestaat
:q # Vim afsluiten
:w # Huidig bestand opslaan
:wq # Huidig bestand opslaan en vim afsluiten
ZZ # Huidig bestand opslaan en vim afsluiten
:x # Huidig bestand opslaan en vim afsluiten, verkorte versie
:q! # Afsluiten zonder opslaan
# ! *forceert* het normale afsluiten met :q
u # Ongedaan maken
CTRL+R # Opnieuw doen
h # Ga 1 karakter naar links
j # Ga 1 regel naar beneden
k # Ga 1 regel omhoog
l # Ga 1 karakter naar rechts
Ctrl+B # Ga 1 volledig scherm terug
Ctrl+F # Ga 1 volledig scherm vooruit
Ctrl+D # Ga 1/2 scherm vooruit
Ctrl+U # Ga 1/2 scherm terug
# Verplaatsen over de regel
0 # Verplaats naar het begin van de regel
$ # Verplaats naar het eind van de regel
^ # Verplaats naar het eerste niet-lege karakter op de regel
# Zoeken in de tekst
/word # Markeert alle voorvallen van 'word' na de cursor
?word # Markeert alle voorvallen van 'word' voor de cursor
n # Verplaatst de cursor naar het volgende voorval van
de zoekopdracht
N # Verplaatst de cursor naar het vorige voorval van
de zoekopdracht
:%s/foo/bar/g # Verander 'foo' naar 'bar' op elke regel van het bestand
:s/foo/bar/g # Verander 'foo' naar 'bar' op de huidge regel in
het bestand
:%s/\n/\r/g # Vervang nieuwe regel karakters met nieuwe regel karakters
# Spring naar karakters
f<character> # Spring vooruit en land op <character>
t<character> # Spring vooruit en land net voor <character>
# Bijvoorbeeld,
f< # Spring vooruit en land op <
t< # Spring vooruit en land net voor <
# Verplaatsen per woord
w # Ga 1 woord vooruit
b # Ga 1 woord achteruit
e # Ga naar het einde van het huidige woord
# Andere karakters om mee te verplaatsen
gg # Ga naar de bovenkant van het bestand
G # Ga naar de onderkant van het bestand
:NUM # Ga naar regel NUM (NUM is elk nummer)
H # Ga naar de bovenkant van het scherm
M # Ga naar het midden van het scherm
L # Ga naar de onderkant van het scherm
```
## Help documentatie
Vim heeft ingebouwde help documentatie dat benaderd kan worden met
`:help <onderwerp>`. Bijvoorbeeld `:help navigation` geeft documentatie weer hoe
door vim te navigeren. `:help` kan ook gebruikt worden zonder onderwerp. Dan wordt de standaard documentatie weergeven die bedoelt is om vim toegankelijker te maken.
## Modus
Vim is gebaseerd op het concept van **modus**.
* Command (opdracht) modus - Vim wordt opgestart in deze mode. Deze mode wordt
gebruikt om opdrachten te geven en te navigeren
* Insert (invoer) modus - Wordt gebruikt voor het aanpassen van het bestand
* Zichtbare (Visual) modus - Wordt gebruikt voor het markeren en bewerken van
tekst
* Ex modus - Wordt gebruikt voor het uitvoeren van opdrachten met `:`
```
i # Zet vim in de Command modus voor de cursor positie
a # Zet vim in de Insert modus na de cursor positie (append)
v # Zet vim in de Visual modus
: # Zet vim in de ex modus
<esc> # 'Escapes' vanuit elke modus naar de Command modus
# Het kopiëren en plakken van tekst
y # Yank (kopieer) wat geselecteerd is
yy # Yank (kopieer) de huidige regel
d # Verwijder wat geselecteerd is
dd # Verwijder de huidige regel
p # Plak de huidige tekst op de cursor positie
P # Plak de huidige tekst voor de cursor positie
x # Verwijder karakter op cursor positie
```
## De 'gramatica' van vim
Vim kan aangeleerd worden als een set van acties in het 'Verb-Modifier-Noun'
formaat waar:
Verb (werkwoord) - De uit te voeren actie
Modifier (bijwoord) - Hoe de actie uitgevoerd dient te worden
Noun - Het object waarop de actie uitgevoerd wordt
Een paar belangrijke voorbeelden van 'Verbs', 'Modifiers', en 'Nouns' zijn:
```
# 'Verbs'
d # Verwijder
c # Verander
y # Kopieer
v # Zichtbaar selecteren
# 'Modifiers'
i # Binnen
a # Rondom
NUM # Elk nummer
f # Zoekt iets en selecteerd het
t # Zoekt iets en selecteerd het karakter voor het
/ # Vindt een combinatie van tekens vanaf de cursor
? # Vindt een combinatie van tekens voor de cursor
# 'Nouns'
w # Woord
s # Zin
p # Paragraaf
b # Blok
# Voorbeeld 'zinnen' of opdrachten
d2w # Verwijder twee woorden
cis # Verander in de zin
yip # Kopiereer in de paragraaf
ct< # Verander naar haakje openen
# Verander de tekst vanaf de huidige positie tot het volgende haakje
openen
d$ # Verwijder tot het einde van de regel
```
## Een aantal afkortingen en trucs
```
> # Verspring de selectie met 1 blok
< # Verspring de selectie met 1 blok terug
:earlier 15 # Zet het document terug naar de situatie van 15 minuten
geleden
:later 15 # Zet het document in de situatie 15 minuten in de toekomst
(omgekeerde van de vorige opdracht)
ddp # Wissel de positie van opeenvolgende regels. dd daarna p
. # Herhaal de vorige opdracht
:w !sudo tee% # Sla het huidige bestand op als root
:set syntax=c # Stel syntax uitlichten in op 'c'
:sort # Sorteer alle regels
:sort! # Sorteer alle regels omgekeerd
:sort u # Sorteer alle regels en verwijder duplicaten
~ # Stel letter case in voor geselecteerde tekst
u # Verander de geselecteerde tekst naar kleine letters
U # Verander de geselecteerde tekst naar hoofdletters
# Fold text
zf # Creeer een vouw op de geslecteerde tekst
zo # Open huidige vouw
zc # Sluit huidige vouw
zR # Open alle vouwen
zM # Sluit alle vouwen
```
## Macro's
Macro's zijn opgeslagen opdrachten. Wanneer je begint met het opnemen van een
macro dan worden **alle** acties opgenomen, totdat je stopt met opnemen. Als de
macro uitgevoerd wordt, worden alle acties in de zelfde volgorde als tijdens het
opnemen uitgevoerd.
```
qa # Start met het opnemen van de makro genaamd 'a'
q # Stop met opnemen
@a # Gebruik macro 'a'
```
## Configureren van .vimrc
Het .vimrc bestand kan gebruikt worden voor het opslaan van een
standaardconfiguratie van Vim. Het bestand wordt opgeslagen in de home map van de gebruiker. Hieronder staat een voorbeeld van een .vimrc bestand.
```vim
" Voorbeeld ~/.vimrc
" 2015.10
" In te stellen dat Vim niet samenwerkt met Vi
set nocompatible
" Stel in dat Vim kijkt naar de bestandstype voor syntax uitlichting en
automatish inspringen
filetype indent plugin on
" Zet inspringen aan
syntax on
" Betere opdracht regel aanvulling
set wildmenu
" Gebruik niet hoofdlettergevoelig zoeken.
set ignorecase
set smartcase
" Gebruik automatisch inspringen
set autoindent
" Geef regelnummers weer
set number
" Het aantal zichtbare spatie's per TAB
set tabstop=4
" Het aantal spatie's tijdens het aanpassen
set softtabstop=4
" Aantal spatie's wanneer (>> en <<) worden gebruikt
" Maak van TAB's spatie's
set expandtab
" Gebruik slimme tabs spatie's voor inspringen en uitlijnen
set smarttab
```
## Referenties (Engels)
[Vim | Home](http://www.vim.org/index.php)
`$ vimtutor`
[A vim Tutorial and Primer](https://danielmiessler.com/study/vim/)
[What are the dark corners of Vim your mom never told you about? (Stack Overflow thread)](http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about)
[Arch Linux Wiki](https://wiki.archlinux.org/index.php/Vim)

131
nl/xml.md Normal file
View File

@@ -0,0 +1,131 @@
---
language: XML
filename: learnxml-nl.xml
contributors:
- ["João Farias", "https://github.com/JoaoGFarias"]
translators:
- ["Frank van Gemeren", "https://github.com/frvge"]
lang: nl-nl
---
XML is een markuptaal die ontwikkeld is om data in te bewaren en data mee te
verzenden.
Anders dan HTML specificeert XML niet hoe data getoond of geformatteerd moet worden.
Het bevat de data slechts.
* XML Syntax
```xml
<!-- Dit is commentaar in XML -->
<?xml version="1.0" encoding="UTF-8"?>
<boekenwinkel>
<boek categorie="KOKEN">
<title taal="nl">Alledaags Italiaans</titel>
<auteur>Giada De Laurentiis</auteur>
<jaar>2005</jaar>
<prijs>30.00</prijs>
</boek>
<boek categorie="KINDEREN">
<titel taal="nl">Harry Potter</titel>
<auteur>J K. Rowling</auteur>
<jaar>2005</jaar>
<prijs>29.99</prijs>
</boek>
<boek categorie="WEB">
<titel taal="en">Learning XML</titel>
<auteur>Erik T. Ray</auteur>
<jaar>2003</jaar>
<prijs>39.95</prijs>
</boek>
</boekenwinkel>
<!-- Hierboven staat een standaard XML bestand.
Het begint met een declaratie die optionele metadata bevat.
XML werkt met een boomstructuur. De stamknoop hierboven is 'boekenwinkel'.
Deze heeft drie kinderen die allemaal 'boek' zijn. Deze knopen hebben op
hun beurt weer kinderen, enzovoort...
Knopen hebben open- en sluittags. Kinderen zijn knopen die zich tussen de
open- en sluittags van hun ouders bevinden. -->
<!-- XML bevat two soorten data:
1 - Attributen -> Dit is metadata van een knoop.
Deze informatie wordt meestal door de XML parser gebruikt om de data op
de juiste manier op te slaan. Je herkent het door de syntax in de vorm
van naam="waarde" in de open tag.
2 - Elementen -> Dit is de pure data
Deze gegevens worden door de parser uit het XML bestand gehaald.
Elementen staan tussen de open- en sluittags. -->
<!-- Hieronder staat een element met twee attributen -->
<bestand type="gif" id="4293">computer.gif</bestand>
```
* Grammaticaal correcte documenten x Validatie
Een XML document is "grammaticaal correct" of "well-formatted" als de
syntax correct is. Het is ook mogelijk om meer structuur in het document
aan te brengen met document definities zoals DTD en XML Schema.
Een XML document dat aan een document definitie voldoet wordt "valide" volgens
die document definitie genoemd.
Met deze gereedschappen kan je de XML data buiten je applicatie logica
controleren.
```xml
<!-- Hieronder staat een versimpelde versie voor een boekenwinkel document,
met een toevoeging van een DTD definitie. -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "boekenwinkel.dtd">
<boekenwinkel>
<boek categorie="KOKEN">
<titel>Alledaags Italiaans</titel>
<prijs>30.00</prijs>
</boek>
</boekenwinkel>
<!-- De DTD kan er als volgt uitzien:-->
<!DOCTYPE note
[
<!ELEMENT boekenwinkel (boek+)>
<!ELEMENT boek (titel,prijs)>
<!ATTLIST boek categorie CDATA "Literatuur">
<!ELEMENT titel (#PCDATA)>
<!ELEMENT prijs (#PCDATA)>
]>
<!-- De DTD begint met een declaratie.
Hierna volgt de declaratie van de stamknoop, die 1 of meer 'boek' kinderen
moet bevatten.
Elk 'boek' moet precies 1 'titel' en 'prijs' element bevatten en een attribuut
'categorie' hebben waarvan 'Literatuur' de standaard waarde is.
De 'titel' en 'prijs' knopen bevatten parsed character data.-->
<!-- De DTD kan ook in het XML bestand zelf gedeclareerd worden.-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note
[
<!ELEMENT boekenwinkel (boek+)>
<!ELEMENT boek (titel,prijs)>
<!ATTLIST boek categorie CDATA "Literatuur">
<!ELEMENT titel (#PCDATA)>
<!ELEMENT prijs (#PCDATA)>
]>
<boekenwinkel>
<boek categorie="KOKEN">
<titel>Alledaags Italiaans</titel>
<prijs>30.00</prijs>
</boek>
</boekenwinkel>
```

140
nl/yaml.md Normal file
View File

@@ -0,0 +1,140 @@
---
language: YAML
filename: learnyaml-nl.yaml
contributors:
- ["Leigh Brenecki", "https://github.com/adambrenecki"]
translators:
- ["Niels van Velzen", "https://nielsvanvelzen.me"]
- ["Sam van Kampen", "http://tehsvk.net"]
lang: nl-nl
---
YAML is een dataserialisatietaal ontworpen om snel te kunnen worden begrepen door mensen.
Het is een strikte superset van JSON en bevat nieuwe regels en een strikte manier van inspringen die lijkt op de manier van Python. In tegenstelling tot Python kan je alleen geen tabtekens gebruiken.
```yaml
# Commentaar in YAML ziet er zo uit
##################
# SCALAIRE TYPES #
##################
# Ons hoofdobject (Wat in het hele document gebruikt wordt) is een map;
# dit staat gelijk aan een dictionary, hash of object in andere talen.
sleutel: waarde
nog_een_sleutel: Een andere waarde
nummer_waarde: 100
wetenschappelijke_waarde: 1e+12
boolean_waarde: true
null_waarde: null
sleutel met spaties: waarde
# Merk op dat strings niet verplicht in quotes moeten, maar dit kan wel.
quote_waarde: "Een string in quotes"
"Ook sleutels kunnen in quotes": "Dit is bijvoorbeeld handig als je een dubbelepunt wilt gebruiken in je key"
# Tekst over meerdere lijnen kan je schrijven als een 'letterlijk blok' (met |)
# Of een 'gevouwen blok' (met >)
letterlijk_blok: |
Dit hele blok met tekst is de waarde van de 'letterlijk_blok'-sleutel,
met nieuwe lijnen behouden.
Het blok blijft door gaan tot het geeindigd wordt door korter in te springen.
Lijnen die groter zijn ingesprongen behouden dit.
gevouwen_stijl: >
Dit blok met tekst zal de waarde zijn van 'gevouwen_stijl',
maar deze keer zullen alle nieuwe lijnen worden vervangen met een spatie.
Lege lijnen, zoals hierboven, zullen worden vertaald naar een nieuwe lijn.
Meer ingesprongen lijnen zullen hun nieuwe lijnen ook behouden,
deze tekst zal over 2 lijnen te zien zijn.
##################
# COLLECTIETYPES #
##################
# Nesten wordt bereikt met inspringen.
geneste_map:
sleutel: waarde
andere_sleutel: andere waarde
andere_geneste_map:
hallo: wereld
# In een map hoeft de sleutel geen string te zijn.
0.25: een float als sleutel
# Sleutels kunnen ook meerdere lijnen gebruiken met behulp van het vraagteken
? |
Dit is een sleutel
met meerdere lijnen
: en dit is de waarde
# YAML staat ook collectietypes toe in sleutels, maar veel programmeertalen
# zullen hierover klagen.
# Sequences (gelijk aan lijsten of arrays) zien er zo uit:
een_sequence:
- Item 1
- Item 2
- 0.5 # sequences kunnen meerdere typen waardes bevatten.
- Item 4
- sleutel: waarde
andere_sleutel: andere waarde
-
- Dit is een sequence
- in een andere sequence
# Doordat YAML een superset van JSON is kan je ook mappen en
# sequences volgens de JSON-stijl maken:
json_map: {"sleutel": "waarde"}
json_seq: [3, 2, 1, "takeoff"]
#######################
# EXTRA YAML-FUNCTIES #
#######################
# YAML heeft ook een handige functie genaamd 'anchors' (ankers), deze laten je
# makkelijk de waarde van ergens anders in je document kopieëren. Beide sleutels
# krijgen dezelfde waarde:
geankert_content: &anker_naam Deze string zal verschijnen als waarde voor de twee sleutels
andere_anker: *anker_naam
# YAML heeft ook tags, deze gebruik je om een expliciet type te verklaren
expliciete_string: !!str 0.5
# Sommige parsers gebruiken taalspecifieke tags, zoals deze voor Python's
# complexe nummertype:
python_complex_nummer: !!python/complex 1+2j
#######################
# EXTRA TYPES IN YAML #
#######################
# Strings en nummers zijn niet de enige types die YAML begrijpt.
# ISO opgemaakte datum- en datumtijdnotaties werken ook:
datumtijd: 2001-12-15T02:59:43.1Z
datumtijd_met_spaties: 2001-12-14 21:59:43.10 -5
datum: 2002-12-14
# De !!binary tag geeft aan dat de string een base64-gecodeerde
# binary blob is.
gif_bestand: !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
# YAML heeft ook een settype, dat ziet er zo uit:
set:
? item1
? item2
? item3
# Zoals in Python zijn sets gewoon mappen met nulwaarden;
# bovenstaand is gelijk aan:
set2:
item1: null
item2: null
item3: null
```