Thursday, 27 July 2017

How Big is 'At Scale'?

I see the term 'at scale' being used a lot on tech/engineering blogs - "You need to do it like this when you run your app at scale", "We had to do this to make it work at scale" etc etc.

But what exactly determines that I am doing something at scale?

How do you quantify that?  There's no SI unit for scale like the 'Double Decker Bus' or the 'Olympic Swimming Pool'.  I like to think that if my systems break either due to the amount of traffic they're being asked to handle or the amount of data I've asked them to query then I'm probably running my systems 'at scale'.

Today I read the excellent ebook Scaling PHP Applications.  The blurb on the website makes the proud claim "Scale PHP 5.6 (and 7), nginx, haproxy, MySQL 5.6, Redis, and Memcache to 10K req/second".

That sounds like an upper limit for 'at scale' - 10,000 requests per second.

I'm sure I've seen my systems consistently handle more than 10k req/s.  Sure enough, my monitoring graphs are showing peak HTTP traffic of 25k req/s - that's 2.5x 'at scale'.  I call this 2.5 Xscale.

Taking a function of the number of requests handled and the service uptime, I got some stats from my system:

nginx - 14,227 req/s (1.4 Xscale)
php-fpm - 10,999 req/s (1.09 Xscale)
memcached - 93,221 cmd/s (9.3 Xscale)

Thursday, 29 June 2017

Apple Magic Keyboard 2 on Linux

Annoyingly, the Apple Magic Keyboard 2 is only recognised as a generic Bluetooth hid keyboard so the Fn and shortcut keys don't work correctly (using hid-generic kernel module).

I've started work on a set of patches for the hid-apple kernel module to add support for this keyboard.

Using Wireshark to sniff the Bluetooth packets, I've found the following are emitted as Fn KeyDown and KeyUp events:

Fn KeyDown: a1 01 00 00 00 00 00 00 00 00 02
Fn KeyUp:   a1 01 00 00 00 00 00 00 00 00 00

I'm going to attempt to add these as a customisation in the hid-apple module and see how I get on.

Monday, 2 January 2017

External USB Audio on Raspberry Pi 3

The rpi3 could see the USB audio device but not be able to enable it. The following errors were observed in dmesg:

[    4.214503] snd_bcm2835: unknown parameter 'index' ignored
[    4.470103] snd-usb-audio 1-1.2:1.0: cannot find the slot for index 0 (range 0-0), error: -16
[    4.470134] usb 1-1.2: cannot create card instance 0
[    4.470164] snd-usb-audio: probe of 1-1.2:1.0 failed with error -16
[    4.470823] usbcore: registered new interface driver snd-usb-audio

It looks like a conflict with the card index of the internal sound codec. Because I don't want to use the interval sound codec I just blacklisted the module to prevent it from loading by adding:

blacklist snd_bcm2835

To the configuration file /etc/modprobe.d/rpi-blacklist.conf

Monday, 5 December 2016

Bash Completion on OS X

Working with the terminal in OS X for the first time I realised I was missing tab completion for common terminal tasks.  After a bit of searching I found the bash-completion package is available to install from brew.  Just use:

brew install bash-completion

Friday, 9 September 2016

No SIM card - Emergency calls only

I got a Motorola Google Nexus 6 phone which takes a nano SIM card.  I cut down my existing SIM as far as I could and it worked in the Nexus but the SIM tray wouldn't shut properly so I ordered a brand new nano SIM.

When the nano SIM came I could not get it to work at all.  The phone would not detect the presence of the SIM card.  I tried wedging paper under it, cleaning contacts, factory reset, software downgrade and nothing would work.

This same nano SIM worked perfectly in another handset, I tried another working nano SIM in the Nexus and that wouldn't work either.

I then tried pushing the SIM tray as hard as I could and surprisingly the SIM was registered by the handset and it indicated full signal.

Short Answer:
Push the SIM tray in as hard as you can!!!

This appears to be some kind of mechanical defect with the Nexus 6 as recorded in many threads.
And Here:!topic/nexus/-vSXPn2obNk

Monday, 15 August 2016

Best description so far of Google Cast API

Thinking of developing a Google Cast Receiver outside of the official Android SDK?

Take a look at this documentation