Friday, 3 November 2017

playing music on hold when launching a bash command

 This works using MacOS afplay
!/bin/bash

moh_file=~/Downloads/moh.mp3

afplay $moh_file &
pid=$!
trap "kill $pid" 2

while read line; do echo -e $line; done


kill $pid


Usage:
$ long-running-command [args] | moh_player

If you want to retain colours, run it through script:
$ script -q /dev/null long-running-command [args] | moh_player

Saturday, 12 August 2017

Custom Error in NodeJS v7

Had a lot of trouble with it but finally found this solution on Node v7.10.0 :


Monday, 15 May 2017

Maps of London with zones, tube, santander bikes, universities, Aldi, Sainsbury, Poundland, Home Bargain, Coop

Are you moving into London?
Do you want to know what's up in your neighbourhood?

I am having this problem nowadays, that's why I created a Google My Map with these layers:
  • TFL zones
  • Underground lines
  • Santander bikes (might be disactivated)
  • Universities
  • Stores location: Aldi, Sainsbury, Poundland, Home Bargain, Coop

Friday, 28 April 2017

Android tablet as second monitor on Ubuntu 16.04

Do you want to connect your tablet or mobile phone to your Linux desktop as a second monitor?

Apparently, nobody took this seriously.
So I decided to create a script that configures your X11 server and creates a VNC server automatically.

Yes, is working!
I am using Ubuntu 16.04 and an Android tablet.
It should work for both iOS and Android or any other device capable of running a VNC client.
It can do both landscape and portrait mode.

For androidians, it can also connect to your device through USB!


Let me know how it goes...

Thursday, 13 April 2017

TDD with React, couple of tutorials from semaphoreci community

https://semaphoreci.com/community/tutorials/testing-react-components-with-enzyme-and-mocha

Some notes...

Enzyme gives us several ways to render components for testing: using shallowmount, and static

shallow ... is used to isolate one component for testing and ensure child components do not affect assertions. 
You can think of it as rendering "just" the component you want it to.

mount is "real" rendering that will actually render your component into a browser environment. If you are creating full React components (and not just stateless components), you will want to use mount to do testing on the lifecycle methods of your component. We are using jsdom to accomplish rendering in a browser-like environment, but you could just as easily run it in a browser of your choosing.

static ... is used for analyzing the actual HTML output of a component


Tuesday, 28 March 2017

Ubuntu dev machine space management

Visualize filesystems usage:
df -h
Show disk usage of un/hidden folders
 du -sch .[!.]* * |sort -h


Find working kernel
uname -r
List installed kernels
dpkg --list | grep linux-image 


Sort and display packages size:
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n
Completely delete a package
sudo apt-get purge packagename
Delete unused packages
sudo apt-get autoremove
Clean Apt cache
sudo apt-get clean


Brew cache cleanup
rm -rf $(brew --cache)
Brew uninstall
sudo ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

RVM
rvm uninstall ruby-2.3.3
Uninstall gems
gem uninstall -aIx

NPM cache cleanup
npm cache clean
Yarn (Node.js) cache cleanup
yarn cache clean

Monday, 27 March 2017

Wednesday, 15 March 2017

Javascript substack module pattern

Sup!?

So, we are using React to get a photo, send to an API and convert the response into a chart with ChartJS.

Our first attempt involved writing a DataConverter class like this:

This is nice but... we have a class (ECMAScript 2015 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) which has no state at all, wouldn't be better to have a module instead?

Cool uh?!
Hang on!
Take a look at the return call: when this module is called, it is not offering a series of methods.
It is returning a function instead, so this module can be called as a function:

This is nice but apparently the power of NodeJS let's us build more robust code, using the substack module pattern:

Using this pattern we don't have to use the weird module pattern syntax, the code is more elegant and clear... agree???
One catch though, is where this code will be executed: server side or client side with build tools is fine, other cases there is a chance that all this function will be available in the global scope.

This pattern has also ways to expand the behaviour of our modules: