Archive for the ‘programming’ Category

Bitbucket stellt eine nützliche Funktion bereit: automatische Build-Pipelines für Continuous Integration. Jeder Commit (je nach Configuration in einem speziellen Branch) stößt einen automatischen Prozess an. Dieser erstellt einen Docker Container, aus dem dann das Deployment zu einer Integration erfolgen kann. Oder die Pipeline führt nur Tests aus – gibt es einen Fehler im Script der Pipeline, wird eine E-Mail mit der Fehlerinfo verschickt.

Als Nutzer von Lambda mit Node.js gibt es leider kein fertiges Script für das Deployment, nur ein Beispiel für Python. Hier ist meine aktuelle Konfiguration. Der Code kommt in die Datei bitbucket-pipelines.yml und muss im Root vom Projekt liegen:

 

image: node:4.3.2

pipelines:
  default:
    - step:
      script:
        - apt-get update
        - apt-get install -y zip
        - apt-get install -y python
        - apt-get install -y python-pip
        - pip install awscli
        - npm install
        - zip /tmp/deployment.zip -r -q -X *
        - aws lambda update-function-code \
          --function-name $AWS_LAMBDA_FUNCTION_NAME \
          --zip-file fileb:///tmp/deployment.zip

 

Da das Skript eine YAML-Datei ist, sind die Einrückungen natürlich genau so einzuhalten.

Danach müssen die Pipelines noch in den Settings vom Bitbucket Projekt aktiviert werden, und die folgenden Umgebungsvariablen gesetzt werden:

  • AWS_ACCESS_KEY_ID
  • AWS_DEFAULT_REGION
  • AWS_LAMBDA_FUNCTION_NAME
  • AWS_SECRET_ACCESS_KEY

Diese Variablen können auch im persönlichen Nutzerprofil hinzugefügt werden – was sich für den Access Key, Secret Access Key und vielleicht die Default Region anbieten würde. Der Lambda Funktionsname dagegen wird sehr wahrscheinlich vom Projekt abhängen.

Bis zu 500 Minuten Pipeline Processing pro Teammitglied sind bis 2017 kostenfrei verfügbar. Bei meinem kleinen Beispielprojekt dauert die Pipeline etwa 30 Sekunden.

Einen zeitlichen Vorteil sehe ich daher erst bei größeren Projekten; aktuell wäre ich mit einem Upload vom kompletten Code zu Lambda auf meinem Rechner nicht viel langsamer.

Recently I needed to calculate the distance between two points. Not too difficult by itself, all you need is the square root of the X/Y distances:

sqrt( (x1 - x2) * (x1-x2) + (y1 - y2) * (y1 - y2) )

Thing is: CLDC 1.0 does not have a sqrt function, only CLDC 1.1 has… Plus, double and float are also both CLDC 1.1 – which is OK, since I only needed an integer value.

Wikipedia proved to be a good source of information, once more, so I found that I could implement the Newton Method to achieve the desired result. Since I had no luck finding appropriate code with Google that I could employ, I wrote the function myself. See code below.

Read the rest of this entry »

Memo to myself: code nuggets

This post is more for my own benefit than for the public out there. Whenever I do some coding (rarely, which is part of the problem) I come across a problem and, after some trying & researching, possibly a solution.

However, after some time this solution is lost in the depths of my source codes. And a new research is sometimes futile – plus I reject the notion of going through the hoops again, since I already should know what to do. So, now I’ll drop little code nuggets here, so I can find them again with less effort. It’s certainly not an entertaining post, but it helps me.

First item: toggling boolean variables

I like to work with boolean values, and sometime I need to toggle them. So a true becomes false and vice versa. Of course this should be a short oneliner. Not an if-else construct. A good approach is:

boolean = boolean ? false : true;

I tend to use the ?: operator ad nauseum… so  an even better approach is (and my preferred way to do it):

boolean ^= true;

What is this? A XOR assignment operator, similar to += or -= If boolean is true, then the XOR return false (because it is not an inclusive OR). If boolean is false, then the XOR returns true. Mission accomplished.

Creative Commons License - © 2007 Codecat - powered by WordPress