My current favorite breakfast: yogurt, cream and more

My current favorite breakfast is not for the faint of heart, or those who favor carbon hydrates and demonize fat.

I start the night before, by using a strainer to drain the serum off my sugarless greek yogurt all night in the fridge until it gets the consistency of cream cheese.

pouring the yogurt yogurt on strainerIn the morning, the serum is on the cup, and you can safely throw it away, together with the little carbon hydrates the yogurt had.

SAMSUNG

Don’t worry using a spoon to take it off the strainer, turn it over and give it a dry impact on the cup.

SAMSUNG SAMSUNG

… And it’ll just fall off in it.

SAMSUNG

Then I add half a cup of thick cream (30% fat, more would be better, but I can’t find it in Portugal) and mix it even.

SAMSUNG

One can see how hard it is, the spoon just won’t fall off!

SAMSUNGThen I finish by adding some nuts, blueberries, etc… Today I only had cashew, pistachios and almonds.

SAMSUNG SAMSUNGYummy, and I get to go up until lunch without needing to eat in the between.

Hope you enjoyed it!

LCHF keeps fixing lil’old me

So… after about 5 months, a checkpoint.

No weight measures, that fluctuates a lot. More important… belt holes and belt perimeter,  that’s wearing the same belt, from start up until now.

The relation I had, when I started, was 1st/2nd hole, according to my fullness sensation after meals.

Now… today I noticed I’m just about to start this relation on the 5th and 6th holes, I can already use the 6th hole, but it’s not comfortable enough yet for using it the whole day. Maybe a week more, who knows…

That’s about 10 cm less in my belt perimeter! 🙂

I’m now wearing this very cool 501’s I bought in early 2010… better than when I tried them on, then.

There’s still a lot to go, but I’m almost afraid the people I know won’t recognize me by next FOSDEM 🙂

Upcoming next, my current favorite breakfast. WARNING: not for the faint of heart, specially those that still demonize fat and favor carbon hydrates.

The Do-It-Yourself Elop Analysis

Ok. If you don't want any of my analysis or commentary or rants. Just the facts. Then Elop can be evaluated as Nokia CEO, for Nokia Corporate total results during his tenure. Or, because Nokia just now sold its total handset unit to Microsoft, it can be useful to see what results did Elop achieve at that handset unit (this includes both smartphones and featurephones). And lastly, since Elop did make a major change to Nokia's largest and most profitable division, the smartphone unit, it is a detail worth considering. No more analysis, just the facts...

NOKIA CORPORATION UNDER ELOP

First 6 months - Corporate quarterly revenues up 26% from 10.0B Euro to 12.6B Euro
Next 2.5 years - Corporate quarterly revenues down 55% from 12.6B Euro to 5.6B Euro

First 6 months - Corporate quarterly profit up 200% from 295M Euro to 884M Euro
Next 2.5 years - Corporate quarterly profit of 884M Euro turned into loss of -115M Euro

During first 6 months - Standard & Poor's rating for Nokia A, Moody's rating A2, Fitch's rating A 
On last day of office - Standard & Poor's rating for Nokia junk, Moody's rating junk, Fitch's rating junk

On day before Elop announced as new CEO - Nokia share price $9.70
On day before Elop released his Burning Platforms memo - Nokia share price $11.28 (up 16%)
On day before Nokia announces Elop to step down as CEO - Nokia share price $3.90 (down 65%)


NOKIA HANDSET UNIT PERFORMANCE UNDER ELOP

First 6 months - Handset quarterly revenues up 25% from 6.8B Euro to 8.5B Euro
Next 2.5 years - Handset quarterly revenues down 69% from 8.5B Euro to 2.6B Euro

First 6 months - Total handsets profit first 6 months 1.8B Euro 
Next 2.5 years - Total handsets loss next 2.5 years 361M Euro

First 6 months - North America quarterly handset volume flat from 2.6M units to 2.6M units
Next 2.5 years - North America quarterly handset volume down 80% from 2.6M units to 0.5M units

First 6 months - China quarterly handset volume up 13% from 19.3M units to 21.9M units
Next 2.5 years - China quarterly handset volume down 81% from 21.9M units to 4.1M units

Nokia handset market share when Elop started - 33%
Nokia handset market share when Elop departed - 14%

Nokia ranking handsets when Elop started - 1st
Nokia ranking handsets when Elop departed - 2nd

Gap to leader when Elop started - Nokia 50% bigger than number 2 (Samsung)
Gap to leader when Elop departed - Samsung 30% bigger than Nokia

This handset unit has now been sold (plus patents and mapping licences) for 5.3B Euro to Microsoft


NOKIA SMARTPHONE DIVISION PERFORMANCE UNDER ELOP

First 6 months - Smartphone quarterly revenues up 29% from 3.4B Euro to 4.4B Euro
Next 2.5 years - Smartphone quarterly revenues down 73% from 4.4B Euro to 1.2B Euro

First 6 months - Smartphone quarterly profit up 94% from 283M Euro to 548M Euro
Next 2.5 years - Smartphone quarterly profit of 548M Euro turned into loss of -168M Euro

First 6 months - Smartphone quarterly volume up 18% from 24.0M units to 28.3M units
Next 2.5 years - Smartphone quarterly volume down 74% from 28.3M units to 7.4M units

Nokia smartphone market share when Elop started - 35%
Nokia smartphone market share when Elop departed - 3%

Nokia ranking smartphones when Elop started - 1st
Nokia ranking smartphones when Elop departed - 9th

Gap to leader when Elop started - twice as big as number 2 (RIM) or number 3 (Apple)
Gap to leader when Elop departed - Samsung smartphones is 12x bigger than Nokia smartphones


Worst CEO ever? You make the call. Was Nokia smartphone unit truly in catastrophic trouble before the Burning Platforms memo? You make the call. Did the Elop Effect turn strong growth into collapse? You make the call.

pump.io as systemd service

So what’s wrong with this first very basic attempt to start pump.io as a systemd service?

[Unit]
Description=Pump.io
Requires=redis.service
After=redis.service

[Service]
Type=simple
ExecStart=/opt/pump.io/pump.io/bin/pump
Restart=on-abort

[Install]
WantedBy=multi-user.target

This is what’s wrong….

Sep 05 20:49:38 p.1407.org sudo[17482]: rms : TTY=pts/1 ; PWD=/opt/pump.io/pump.io ; USER=root ; COMMAND=/bin/systemctl start pumpio.service
Sep 05 20:49:38 p.1407.org systemd[1]: Starting Pump.io...
Sep 05 20:49:39 p.1407.org pump[17485]: path.js:360
Sep 05 20:49:39 p.1407.org pump[17485]: throw new TypeError('Arguments to path.join must be strings');
Sep 05 20:49:39 p.1407.org pump[17485]: ^
Sep 05 20:49:39 p.1407.org pump[17485]: TypeError: Arguments to path.join must be strings
Sep 05 20:49:39 p.1407.org pump[17485]: at path.js:360:15
Sep 05 20:49:39 p.1407.org pump[17485]: at Array.filter (native)
Sep 05 20:49:39 p.1407.org pump[17485]: at Object.exports.join (path.js:358:36)
Sep 05 20:49:39 p.1407.org pump[17485]: at getConfig (/opt/pump.io/pump.io/bin/pump:58:23)
Sep 05 20:49:39 p.1407.org pump[17485]: at main (/opt/pump.io/pump.io/bin/pump:40:18)
Sep 05 20:49:39 p.1407.org pump[17485]: at Object.<anonymous> (/opt/pump.io/pump.io/bin/pump:151:1)
Sep 05 20:49:39 p.1407.org pump[17485]: at Module._compile (module.js:456:26)
Sep 05 20:49:39 p.1407.org pump[17485]: at Object.Module._extensions..js (module.js:474:10)
Sep 05 20:49:39 p.1407.org pump[17485]: at Module.load (module.js:356:32)
Sep 05 20:49:39 p.1407.org pump[17485]: at Function.Module._load (module.js:312:12)
Sep 05 20:49:39 p.1407.org systemd[1]: pumpio.service: control process exited, code=exited status=8
Sep 05 20:49:39 p.1407.org systemd[1]: Failed to start Pump.io.
Sep 05 20:49:39 p.1407.org systemd[1]: Unit pumpio.service entered failed state.

An ideas why? Starting from the console with sudo /opt/pump.io/pump.io/bin/pump works fine.

Grrr…

HOWTO: pump.io behind Apache

Pump.io is very interesting, but it used to be very hard to put to work behind a frontend, mostly because of web sockets and being designed to be directly connected.

This means that your nodejs-enabled pump.io consumed an IP:port pair and since pump.io is an https oriented application (can be run in http but you really don’t want that) that means your https port (who has more than one IP either at home or his VPS?) is now BUSY with one single application… sucks and I gave up for some time and wasted my connection’s IP address at the standard https port.

Meanwhile… Good news, everyone!

I recently came up a new Apache module for web sockets: mod_proxy_wstunnel.

Searching for pump.io and wstunnel… it turns out my irrational friend Mark Jaroski also published a note about that! Please note that you may not need to build the module, if you have a recent enough Apache 2.4.x version it may already be there, check your bundled modules!

So here’s my setup: the OpenWRT router forwards port 443 incoming into a frontend KVM guest running Apache httpd which then forwards to some of my sites, one of which is my pump at https://p.1407.org/

The frontend’s web site looks like this:

<VirtualHost *:443>
        ServerName p.1407.org
        CustomLog logs/https-p.1407.org-access_log common
        ErrorLog logs/https-p.1407.org-error_log
        DocumentRoot /var/www/html/default

        SSLEngine On
        SSLCertificateFile conf/ssl.crt/p.1407.org.crt
        SSLCertificateKeyFile conf/ssl.key/p.1407.org.key
        SSLCertificateChainFile conf/ssl.crt/startssl-chain.crt
        SSLCACertificateFile conf/ssl.crt/startssl-chain.crt

        SSLProxyEngine On

        <Location /main/realtime/sockjs>
                ProxyPass wss://192.168.x.y/main/realtime/sockjs
                ProxyPassReverse wss://192.168.x.y/main/realtime/sockjs
        </Location>

        <LocationMatch ".*\.(jpg|png|gif)$">
                CacheEnable disk
        </LocationMatch>

        ProxyPreserveHost On

        ProxyPass               /       https://192.168.x.y/
        ProxyPassReverse        /       https://192.168.x.y/
</VirtualHost>

And at my pump.io KVM guest, 192.168.x.y, I have…

{
    "driver":  "redis",
    "noweb":  false,
    "site":  "1407 Pump",
    "owner":  "Rui Seabra",
    "ownerURL":  "https://blog.1407.org/",
    "port":  443,
    "hostname":  "p.1407.org",
    "nologger":  false,
    "serverUser":  "pumpio",
    "key":  "/etc/pump.io/p.1407.org.key",
    "cert":  "/etc/pump.io/unified-p.1407.org.crt",
    "uploaddir": "/opt/pump.io/uploads",
    "logfile": "/var/log/pump.io/activity.json",
    "debugClient": false,
    "firehose": "ofirehose.com",
    "disableRegistration": true,
    "requireEmail": false,
    "smtpserver": "put.your.own.here",
    "smtpuser": "aLoginAtYourServer",
    "smtppass": "some good password",
    "smtpusetls": true,
    "smtpport": 587,
    "smtpfrom": "pump@1407.org",
    "secret": "some good secret"
}

So there you go…