zaterdag 30 december 2017
donderdag 21 december 2017
woensdag 13 december 2017
Angular Observable emit value every second
.take(sourceArray.length)
.map(waarde => { return sourceArray[waarde]; });
donderdag 16 november 2017
ASP.NET application uitrollen op Windows 2012
- Via Windows start kun je via Control Panel de Internet Information Services manager opstarten.
- De firewall kun je configureren via de ServiceManager (knop in toolbalk) en dan Tools/Windows Firewall with Advanced Securty.
- Je moet een nieuwe Application Pool aanmaken. Kies hiervoor de Integrated Pipeline, want anders kun je geen json teruggeven(!).
- In de advanced settings van je Application Pool staat als identity ApplicationPoolIdentity. Dit betekent dat deze Application Pool een eigen user heeft die je kunt gebruiken om rechten aan te geven. Zet wel de "Load User Profile" op true. Als je bijvoorbeeld een bestand op het filesysteem read/write toegang wil geven en je Application Pool heet MijnAppPool, dan kun je in de security settings van dat bestand een gebruiker genaamd IIS Apppool\MijnAppPool selecteren. Wel als lokation de lokale machine selecteren, want de betreffende MijnAppPool gebruiker is alleen lokaal bekend. Die gebruiker kun je vervolgens full access geven op een bestand.
- Normaal gesproken heb je een DNS entry nodig om op poort 80 te binden. Als je geen DNS entry hebt, dan moet je een andere poort kiezen, zoals 8084 maar die moet je vervolgens open zetten in de firewall.
- Om te kijken of de website uberhaupt werkt is het slim om een index.html te maken met een hello world tekst erin. Vervolgens op je remote machine kijken of die beschikbaar is.
- Je webapplication kun je gewoon publishen naar een folder en de folder copieeren.
woensdag 8 november 2017
Angular 2+ cursus
ReactiveX beastmode
https://www.learnrxjs.io/
https://angular.io/guide/cheatsheet
https://github.com/PeterKassenaar/voorbeeldenAngular2
Server side rendering: https://universal.angular.io/
https://johnpapa.net/introducing-angular-modules-root-module/
Core concepts
Angular cli: npm install ‐g @angular/cli
https://developer.mozilla.org/en-US/docs/Web/Events
host events
Chrome:
Ctrl-p -> component zoeken.
webpack: -> ./src -> samen met .map files gaat dat werken.
$0 zie je in Chrome inspect, die kun je gebruiken in de console.
ng-container dummy tag element.
live scratchpad
http://reactivex.io
www.learnrxjs.io
https://courses.ultimateangular.com/p/hello-rxjs
exploringjs.com/es6
json2ts
Mocking data
json schema to typescript
rxjs operators you must know
http://reactivex.io/documentation/operators.html
Observable methods
Observable cheat sheet
Introduction to reactivex you've been missing
rxmarbles
typedoc voor javadoc achtige documentatie.
Shadow dom strategies in Angular 2
Victor Savkin: Angular 2 routing
Migrating to Angular 2
vrijdag 3 november 2017
vrijdag 27 oktober 2017
Git
# Welke files zijn veranderd
$ git status
# Informatie over remote url en branches
$ git remote show origin
# Branch maken en de changes meenemen in de nieuwe branch:
$ git checkout -b feature/product-feature
# Toevoegen van alle modified/untracked bestanden
$ git add .
# Commit
$ git commit -m "comment"
# Eventueel naar de server brengen
$ git push
# Develop weer inladen
$ git checkout develop
# Laatste versie binnenhalen
$ git pull
# Mergen van product-feature naar develop toe
$ git merge feature/product-feature
# Naar de server brengen
$ git push
# Verwijder oude branch
$ git branch -d feature/product-feature
# Verwijderen van een remote branch:
$ git push origin --delete feature/branchname
# Verwijderen van een deleted remote:
$ git fetch -p origin
# Git repo binnenhalen
$ git clone https://github.com/libgit2/libgit2 mylibgit
# Gebruikersinformatie
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config --system core.longpaths true
# Create tag
$ git tag <tag-name>
# Push tags
$ git push origin --tags
# Delete tag
$ git tag -d 0.7.9.0
$ git push --delete origin 0.7.9.0
# Aanpassingen tijdelijk stallen
$ git stash
$ git stash list
$ git stash drop
$ git stash pop
# Welke branches zijn er:
$ git remote show origin
# Welke branches zijn er:
$ git branch -a
# Verwijderen van een locale branch:
$ git branch -d hotfix
# Verwijderen van een remote branch:
$ git push origin --delete feature/branchname
# Verwijderen van stale branches uit local:
$ git remote prune origin
HULP BIJ PROBLEMEN:
# Een merge gedaan die je nog niet gepushed hebt. Teruggaan naar de laatste status voor de merge:
$ git reset --hard origin/master
# Krijg je de error: your local changes to the following files would be
overwritten by merge, dan kun je de genoemde bestanden opnieuw
uitchecken.
$ git checkout dir/dir/dir/file.txt
Vervolgens zie je bij een "git status" dat de file van de lijst af is.
# Een bestand opzettelijk niet willen meenemen
$ git update-index --assume-unchanged README.textile
$ git update-index --no-assume-unchanged README.textile
# Remove untracked files from the working directory
$ git clean -fxd
# Resets the index and working tree. Any changes to tracked files in the working tree since <commit> are discarded.
$ git reset --hard
BRANCH NIEUW NEERZETTEN:
# Create Orphan Branch – Create a new orphan branch in git repository. The newly created branch will not show in ‘git branch’ command.
$ git checkout --orphan temp_branch
# Add Files to Branch – Now add all files to newly created branch and commit them using following commands.
$ git add -A
$ git commit -am "the first commit"
# Delete master Branch – Now you can delete the master branch from your git repository.
$ git branch -D master
# Rename Current Branch – After deleting the master branch, let’s rename newly created branch name to master.
$ git branch -m master
# Push Changes – You have completed the changes to your local git repository. Finally, push your changes to remote (Github) repository forcefully.
$ git push -f origin master
DEVELOP NAAR MASTER KOPIEEREN:
$ git checkout develop
$ git merge -s ours master
$ git checkout master
$ git merge develop
MERGEN VANUIT ANDERE REPRO
$ git remote -v
$ git remote add upstream ssh://.....repro.git
$ git fetch upstream
$ git branch -va
$ git merge upstream/develop
woensdag 27 september 2017
Een javascript library gebruiken in Angular
- De TreeView.js zet je in de assets/js folder. Een eventuele TreeView.css zet je in de assets/css folder.
- In de tsconfig.json zet je allowJs op true:
"compilerOptions": {
"allowJs": true
}
Door deze setting kan er gewone Javascript geïmporteerd worden. - in de .angular-cli.json moet je de styles en scripts nodes uitbreiden met verwijzingen naar de .css en .js bestanden van je javascript TreeView.
"styles": [
"assets/css/TreeView.css",
"assets/css/bootstrap.css",
"styles.css"
],
"scripts": [
"../node_modules/jquery/dist/jquery.min.js",
"assets/js/TreeView.js"
], - De TreeView.js moet je uitbreiden met exports, zoals hieronder beschreven:
var TreeView = (function () {
"use strict";
function tree(settings) {
var nodes, self = this;
function init() { }
self.getNodes = getNodes;
init();
}
return tree;
})();
if (typeof exports !== 'undefined') {
exports.Tree = TreeView;
} - In dezelfde directory als je javascript TreeView.js zet je een bestand genaamd TreeView.d.ts neer. Daarin staat:
export declare class Tree {
private settings;
constructor(settings: any);
addNode(data: any): void;
findNodeOnLabel(label: string) : any;
...
} - In de tree.component.ts (het angular component waarmee je een TreeView kunt neerzetten) doe je:
import { Component, OnInit, ElementRef } from '@angular/core';
import { Tree } from './../../assets/js/TreeView'
import * as $ from 'jquery';
@Component({
selector: 'my-tree',
templateUrl: './tree.component.html',
styleUrls: ['./tree.component.css']
})
export class TreeComponent implements OnInit {
constructor(private el: ElementRef) { }
tree: Tree;
ngOnInit() {
this.tree = new Tree({ checkboxes: false, initialOpenCloseState: "closed" });
$(this.el.nativeElement).append(this.tree.getDOMElement());
}
addNode(dict: any) {
this.tree.addNode(dict);
}
}
dinsdag 19 september 2017
zaterdag 9 september 2017
Angular documenten
http://blog.angular-university.io/angular2-ngmodule/
Listening to an element host
ViewChildren vs ContentChildren
how-to-convert-js-code-to-angular-2
custom-form-controls-in-angular-2
angular2-bootstrap-pagination
virtualized-spreadsheet-component-in-angular-2.0
custom-form-control/
linkup-custom-control-to-ngcontrol-ngmodel
bootstrap_tables
immutable-js/
immutability-vs-encapsulation
angular-2-change-detection-explained
taking-advantage-of-observables-in-angular2
how-i-optimized-minesweeper-using-angular-2-and-immutable-js-to-make-it-insanely-fast/
whats-the-most-efficient-watch-js-that-watch-same-obj-property-from-multiple
object.watch polyfill
JQuery gebruiken met Angular:
npm install jquery
npm install @types/jquery --save-dev
And find your file name in "angular-cli.json" on the root and add the inside of as like:
script:["../node_modules/jquery/dist/jquery.min.js"]
import * as $ from 'jquery';
woensdag 6 september 2017
SVG in background
woensdag 23 augustus 2017
zaterdag 19 augustus 2017
Oracle XE expired password
SQL> connect / as SYSDBA
Connected
SQL>
select username, account_status from dba_users where ACCOUNT_STATUS LIKE '%EXPIRED%';
ALTER USER theusername IDENTIFIED BY thepassword;
ALTER USER theusername ACCOUNT UNLOCK;
maandag 14 augustus 2017
Javascript: From callback to Promise
let request = new XMLHttpRequest();
request.onload = resolve
request.onerror = reject;
request.open(options.method, url, true);
request.send();
});
zondag 25 juni 2017
Draait applicatie in 32- of 64 bits?
vrijdag 2 juni 2017
Zonder JQuery en JQuery UI
Zo is Jquery UI een lib die vrij zwaar is, en ik niet gebruik behalve voor de datepicker.
JQuery zelf is vaak ook overbodig.
http://youmightnotneedjquery.com/
https://github.com/dbushell/Pikaday
dinsdag 30 mei 2017
vrijdag 28 april 2017
SQLite An attempt was made to load a program with an incorrect format.
In my case the problem was the development webserver of Visual Studio 2017, which runs in 32-bit mode by default.
See the setting: http://tegtips.blogspot.nl/2014/07/visual-studio-2013-iis-express-64-bit.html
dinsdag 25 april 2017
CSS @media
body {
background-color: red;
}
}
donderdag 2 februari 2017
Absolute positioning inside relative
https://css-tricks.com/absolute-positioning-inside-relative-positioning/
Inside a DIV with a position: relative, the position:absolute elements are relative to the relative DIV.
zaterdag 21 januari 2017
Wel of geen ORM?
donderdag 19 januari 2017
Javascript: track changes in DOM
Zie het javascript MutationObserver object.
maandag 9 januari 2017
Print directly from Chrome
Helaas!
Chrome heeft een bug waardoor de readyState niet veranderd als je een binary laadt in een iframe! Je weet dus niet wanneer de PDF geheel is ingeladen.
Hoe kom je uit deze situatie?
Door de PDF te laden in een Javascript Blob en vervolgens een interne URL te maken naar deze Blob. Via deze route werkt het onload event wel.
Zie hieronder de code:
function print() {
var printData = _base64ToArrayBuffer(base64PdfBytesFromServer);
var printBlob = new Blob([printData], { type: "application/pdf" });
window.printPdfLoaded = function() {
$("#thePDF")[0].contentWindow.print();
URL.revokeObjectURL(internalUrl);
}
var internalUrl = URL.createObjectURL(printBlob);
var ifr=$('<iframe/>', {
id: 'thePDF',
src: internalUrl,
style: 'display:none',
onload: 'window.printPdfLoaded()'
});
$(document.body).append(ifr);
}
function _base64ToArrayBuffer(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array( len );
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
dinsdag 3 januari 2017
Javascript Lexical scope problems and solution
for (i = 0; i < 10; i++) {
f.push(function() { return base + i; });
}
alert(f[0]());
Resultaat: -> 11
Nesten van functions maakt niet uit:
var i,
f = [ ],
base = 1;
for (i = 0; i < 10; i++) {
f.push(function() { return function() { return base + i; } });
}
alert(f[0]()());
-> 11
Solution:
De enige oplossing is de volgende:
var i,
f = [ ],
base = 1;
for (i = 0; i < 10; i++) {
f.push((function(base, i) {
return function() { return base + i; }
})(base, i));
}
alert(f[0]());
-> 1
a must read on the subject: https://spin.atomicobject.com/2014/10/20/javascript-scope-closures/