Thursday, October 19, 2017

Agile - User Stories

i'm going to try and capture some points about user stories here as a rough guide;

- a user has a context --> always understand the persona, entering context, and exit context of a user.  "User A is an anonymous user of the site.  We know nothing about them when the first enter but we want to at least identify them when they leave."  "User B is an admin of the site, we know who they should be and once they leave, we want to know what they've done."

- a story should be simple --> "as User A, I want to do x, and have y at the end".

- big stories can become epics really quick --> "as a Known User, I want to login and see my dashboard".  This is an epic because there's authentication stories, ("as a Known user, I want to enter my username and password and be granted access/shown an error"), there's setting the authentication (2FA? administration? etc.) and then there's the last, dashboard.

- a simple user story --> "as an Anonymous User, I want to send a contact request and get a contact request receipt"

- every story should have an acceptance criteria and/or definition of done --> "... and get a contact request receipt"


Sunday, June 18, 2017

Forwarding Ports with IPTables

to use IPTables to forward ports...

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

all this from

and how to remove the routing

iptables -t nat --line-numbers -L
iptables -t nat -D PREROUTING [number]

Monday, March 13, 2017

Using the Docker Embedded DNS

this is an easy way I just discovered and am noting it here so I don't forget.

to leverage docker's embedded dns, you can setup a custom network and then each container can resolve to each other via the 'name' attribute.

for example;

1. docker network create internaldns
2. docker run --name rmq -p 15672:15672 --net=internaldns -d rabbitmq:management
3. docker run --name httpcontainer -p 8080:8080 --net=internaldns -d scbs/http-rmq

this gives you;
- ability to connect to the host network via bridge
- ability to have httpcontainer look up the rabbitmq container using the dns entry 'rmq'

i love and think weave net is particularly awesome, but if you're just doing dns lookup on 1 docker host, this seems pretty light and easy

Saturday, March 11, 2017

NativeScript WebView - Getting the HTML Content

If you're trying to get the content from a NativeScript WebView, try the following from StackOverflow

if (webView.ios) {
    var webHeader = webView.ios.stringByEvaluatingJavaScriptFromString("document.head.innerHTML").trim();

    var webBody = webView.ios.stringByEvaluatingJavaScriptFromString("document.body.innerHTML").trim();

} else if ( {
    webTitle =; //getting the title title

Wednesday, November 23, 2016

Docker on Ubuntu: http:///var/run/docker.sock/v1.18/containers/json: dial unix /var/run/docker.sock: permission denied

after installing 1.12.3 on Ubuntu 16.04, the permission denied issue came up.  after trying the docker group settings without any luck, the only thing left was to actually chmod the socket.

chmod 777 /var/run/docker.sock

and everything works

probably not the wisest thing to do and you can try chmod'ing with more restrictions, but after hours of google and frustration, it works.

Wednesday, November 2, 2016

Get the Guest IP Address for a VM in VMWare Fusion

Great little trick from here...

/Applications/VMware\ vmrun getGuestIPAddress [location of your VM's .vmx]

Saturday, October 22, 2016

Jenkins on Docker - Admin Password

try this from the comments on --> full credit to sidmalani

docker exec -it jenkins_test cat /var/jenkins_home/secrets/initialAdminPassword

Sunday, October 16, 2016

Eclipse Che and localhost

Eclipse Che and localhost

when running eclipse che locally, you may have troubles starting up the various agents, etc. unless you export the correct IP address.

so, to make sure it all works smoothly;
- export CHE_HOST_IP=[your ip]
- CHE_HOST_IP=[your ip] che start

Tuesday, August 23, 2016

nginx ubuntu and and

recently i needed to setup a secure domain on an EC2 instance (need to use the Google Maps Javascript API and it requires HTTPS domains).   the application architecture was;
  • angularjs (front-end)
  • NodeJS (front-end server) http://:3000
  • spring-boot (data server) http://:8080
to get this working on EC2, nginx was added to help act as a HTTPS terminator and router for the NodeJS instance.  

domain routing -->

this is not a permanent solution, just a demo, so I used and A record at to point to my Elastic IP address.  the trick here is to add 2 A records; [blank] --> [elastic IP] and * --> [elastic IP].  this needs to be done to support

the steps to follow (on ubuntu) are
  1. sudo git clone /opt/letsencrypt
  2. sudo apt-get install nginx
  3. sudo vi /etc/nginx/sites-available/default
  4. add     location ~/.well-known { allow all; }
  5. sudo ./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d -d
  6. (go through the on screen prompts)
  7. sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
  8. add ssl to the nginx default
  9. add redirect on port 80 to 443 (HTTP 301)
below is an example of the nginx default file

server {
    listen 80;
    return 301 https://$host$request_uri;

server {
    listen 443 ssl;


    ssl_certificate /etc/letsencrypt/live/;
    ssl_certificate_key /etc/letsencrypt/live/;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security max-age=15768000;

    location ~ /.well-known {
        allow all;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;