05 Aug 2017

Book reading

History / Edit / PDF / EPUB / BIB / 1 min read (~39 words)
  • Read the table of contents
  • Rapidly skim through the various sections of the book
  • Determine what you want to get out of the book
  • Ask yourself questions about what you briefly read

01 Aug 2017

Language exchange

History / Edit / PDF / EPUB / BIB / 1 min read (~48 words)
  • What did you do this week/today?
  • Do you want to talk about anything? (Not language related)
  • Summarize tasks given during the exchange
  • Plan next exchange

  • Pronunciation
  • Can you say ...?
  • How do you say ...?
  • Goal specific discussions

  • What do you think of ...?
  • What do you want ...?
13 Nov 2015

My AGI journey

History / Edit / PDF / EPUB / BIB / 3 min read (~468 words)
ai agi

Over the next year (and hopefully years), I plan on working on AI, but more particularly what is known as AGI, Artificial General Intelligence.

Since I am the kind of person that enjoys to overly plan, I've been thinking about the whole process for a while. Here's a brief overview of how I plan to construct my days as well as my work.

  • Decide and plan on which projects I will work today
  • Video log
    • What will I be doing today?
    • What might be blocking me or will be difficult and how do I plan to tackle that?

  • Record my thoughts: Either through video logs or through written notes, which is the more likely option. This will allow me to search my thoughts as well as organize them as necessary. Furthermore, I hope I'll be able to optimize my thought flow through tools.

  • Video log
    • What have I done during the day?
    • What are the key takeaway of the day?
    • What didn't I do?

  • Take notes (of interesting sections and ideas)
  • Write down thoughts
  • Write down questions related to what is being read (for further exploration)
  • Explore right away a question I might have had

I plan on working on multiple mini projects in order to ensure diversity as well as to allow me to spot projects which have the potential to be interesting and rewarding. However all projects are valuable in their own and it is important to reflect on the project at the end in order to extract things we'll want to repeat in the future as well as things we'll want to avoid.

  • Post mortem
    • What went wrong
    • What went right

  • Update the status of all tracked activities
  • Write a list of things that were done during the month regarding each activity that was done. The purpose is to review what was done as well as provide a way to determine how well a project may/may not be progressing. It is also a good time for me to look at each individual activity that was done during the month and evaluate if I want to keep doing it or not.
  • Write a post-mortem of the month, describing the good/bad of my current process and progress, with a section suggesting improvements to try for the next few months.
  • Plan the projects/activities I will be working on next month, as well as their time allocation.

I will be experimenting with this process in the next few weeks and will iterate on it as I see fit. I will thus be updating this post as changes occurs and I think of better ways to do my work.

07 Nov 2015

Fitness trackers

History / Edit / PDF / EPUB / BIB / 4 min read (~764 words)
health fitness

I've recently become interested in the Quantified Self and wanted to compare a few trackers in order to determine the quality of their solution.

In this study, I compare the Fitbit Charge HR, the Jawbone UP3 and the RS300X. The Fitbit and the Jawbone are known as activity/fitness trackers while the RS300X is an heart rate tracker.

Fitbit and Jawbone are known fitness brand trackers. It's been a couple of years now that these types of trackers are popular, so I'd expect them to have come to some level of maturity. The goal of this study is to evaluate the quality of the products, as much in term of hardware as software.

In my case, I will be testing the Android applications since I own a Nexus 5. I would expect the experience to be quite similar on iOS.

I've also bought an RS300X in order to test a live heart rate tracker.

  • Has a little OLED display.
  • UI/UX is pretty straightforward.

  • The bracelet broke about 3 months after I purchased it. Fitbit support was excellent though and I received a replacement bracelet within 2 days.
  • Website errored out when I tried to create an application (preventing people from creating apps?)
  • Cannot get fine grained data.
  • Heart rate day availability is very odd. Seems to lag out and may display only in chunks.
  • Shows up in my android smart lock as a bluetooth device I could pair with, but I can't select it.

  • None at the moment.

  • The bracelet broke about 4 months after I purchased it.
  • Cannot get fine grained data.
  • Doesn't do real time heart rate tracking.
  • Heart rate day availability is very odd. Seems to lag out and may display only in chunks.
  • No idea why they decided to go with some weird buckle design. It looks like it's a nice point of failure.
  • After about a month it feels like the buckle is becoming loose. It is more and more frequent that it becomes undone and comes close to falling and I have to attach it back...
  • After about two months the buckle is becoming loose very frequently. I'd say I have to "re-buckle" it at least 10-20 times per day. That is ignoring the fact that it'll unbuckle while I sleep, making it pretty useless to sleep heart rate while sleeping.
  • The four heart rate sensors on the lower part of the bracelet are uncomfortable.
  • All the people I've shown the device to asked "why is there no display, show at least the time...".
  • Terribly clunky UI/UX. Why can't I just swipe from day to day in any of the stats
  • For that matter, why is it so hard to display the metrics I'm interested in and get rid of all those "pretty" suggestions cards?
  • Why would you put unit selection (metric or imperial) as being configured through my height or weight? Is it to save me time or to confuse me?

The following chart is the data I've collected over 3 days. In black is the Jawbone UP3 data and in blue the Fitbit Charge HR data.

Overall, the Fitbit Charge HR data is more consistent (every 5 minutes) while the Jawbone UP3 may end up having no data point for up to 2 hours. I assume this might be caused by how I've been wearing the bracelet but that is a weak argument.

Accuracy between the two devices can vary a lot.

[Pedometer chart for comparison]

Both devices seem to measure approximately the same amount of sleep. However the Jawbone UP3 has a nicer chart that goes into the various stages of sleep while the Fitbit Charge HR only displays Asleep/Restless/Awake.

[Sleep monitoring chart for comparison]

  • None at the moment.

  • Cannot get data out of device (for free).
  • "If you want your data, pay us another 70\$ +taxes for a transmission device".
  • "Oh, and by the way, you're going to send us those precious data over our web service so we can mine it for \$".
  • Watch freaks out if too close from chest strap.
  • Who thought of this terrible buckle design? If I want to break the strap, that's how I'd design the buckle.

07 Nov 2015

Docker-based jenkins slaves

History / Edit / PDF / EPUB / BIB / 2 min read (~395 words)
DevOps docker jenkins

In this article, we'll go over how to setup Jenkins on an Ubuntu machine to run PHP 7.1 jobs. The steps should easily be adapted for any other OS and target environment.

  • Docker Slaves Plugin

  • In a Dockerfile

FROM ubuntu:xenial

COPY sources.list /etc/apt/sources.list
RUN useradd -m --uid=1001 jenkins
COPY known_hosts /home/jenkins/.ssh/known_hosts
RUN chown jenkins:jenkins -R /home/jenkins/.ssh

RUN apt-get update
RUN DEBIAN_FRONTEND="noninteractive" apt-get install -y git vim curl wget build-essential python-software-properties software-properties-common unzip

RUN add-apt-repository -y ppa:ondrej/php
RUN apt-get update
RUN DEBIAN_FRONTEND="noninteractive" apt-get install -y --force-yes php7.1 php7.1-xml php7.1-mbstring php7.1-zip php7.1-pdo-mysql php7.1-pdo-sqlite

RUN apt-get -y autoremove && apt-get clean && apt-get autoclean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
  • docker build -t your/image:1.0.0 -t your/image:latest .

  • your/image (will use your/image:latest)

This is particularly useful if you need to pull git repositories from a private repository.

As of December 2016, if you want to be able to use the SSH key in a docker container, you have to first start the ssh agent on the node used that will run the docker container and when you run the docker image, pass in the SSH_AUTH_SOCK as a volume so that it is shared with its host.

sshagent(['IDENTIFIER']) {
    docker.image('your/jenkins-slave-image').inside('--volume $SSH_AUTH_SOCK:$SSH_AUTH_SOCK') {
        // Here your SSH_AUTH_SOCK is shared with the host machine, which may be a jenkins slave
        // All commands that would use SSH for authentication (such as git or composer when installing from private repositories) should work

node('docker') {
    catchError {
        timestamps {
            wrap([$class: 'AnsiColorBuildWrapper']) {
                sshagent(['private-git']) {
                    docker.image('tomzx/jenkins-slave').inside('--volume $SSH_AUTH_SOCK:$SSH_AUTH_SOCK') {
                        stage 'Checkout'
                            checkout scm

                        stage 'Setup dependencies'
                            sh 'wget -nc https://getcomposer.org/composer.phar'
                            sh 'php composer.phar install'

                        stage 'Test'
                            sh 'vendor/bin/phpunit'