Kswapd0 probem at Raspberry Pi 3 with Raspbian


If in a Raspberry Pi there is a problem of resources, going slow or even frozen, and a process named «Kswapd0» is taking a lot of CPU:

root@Shirley:~# ps uax | grep kswap
root 44 0.2 0.0 0 0 ? S 11:28 1:59 [kswapd0]

is due to any process that is consuming a lot of memory, causing the need of to do «swapping«. This is, saving RAM memory at the HD (SD card in Raspberry Pi), so the operating system (Raspbian i.e.) can allocate memory to other process.

The SD card is quite slow (about 20MB/seg), what makes hard and slow the swapping process, and this drivers the Raspberry to require minutes or hours if a process is demanding a lot of RAM memory. The main advice to avoid this problem is to assume that Raspberry PI is a machine with a lot of limitations, not designed for general purposes (Desktops, browsing the web, computing, etc).

For palliating problems, you can follow next tips:

1º) Updating the system to get the state of art kernell. If you have Raspbian, run as root:

root@Shirley:~# apt-get update
root@Shirley:~# apt-get upgrade
root@Shirley:~# apt-get dist-update
root@Shirley:~# reboot

2º) Change the microSD card for another more modern and better, like the Samsung Evo+ 32GB microSD card. A SD card class 10 is enough for Raspberry Pi 3, as the machine cannot write faster than the Samsung card supports. Anyway, you can investigate reviews and comparisons of new microSD cards for Raspberry at Internet.

3º) Booting from a USB SSD disk may help, but it is expensive and the improvement is not guaranteed, as the USB 2.0 port has a maximum speed of about 20MB/s.

4º) Check the process that demands so many RAM memory. Try to update it, tune it, check for any bug (memory leak), report the high RAM consumption to developers, or by last, look for an alternative.

5º) Update Raspberry´s firmware:

root@Shirley:~# rpi-update


Creating a POE solution for iSmartAlarm Spot


If you have a iSmartalarm Spot security camera, and you haven’t the posibility to bring electricity to it, you can use this tutorial so it will be fed with the electricity that cames by a Ethernet (network) cable. This technology is commonly named «Power Over Ethernet» (POE).

At this tutorial is needed:

  • A POE injector: 48V 1,25A. You can find it at Ebay

    Also the VDE power cable is not usually included, but you can find it easly at Ebay, Amazon…



  • A high quality CAT cable. As we are going to transport electricity and data in the same wire, and for avoiding shorcircuits, fires, electromagnetic interference or others, do not hesitate buying a premium wire for this purpose. Your time is money. Also is important to use only one wire, not plugin 2 or more, so look for one which measure can satisfy your needs. For example this IBRA® 10M Cable de red Gigabit Ethernet Lan CAT.7 at Amazon.


  • A short microusb cable. For not having plenty of meters of wires, having a short wire is the most discreet and elegant solution.

With all this items, creating the POE solution is easy:

  1. Plug the power injector to the wall, and to an end of the RJ45 cable.
  2. Plug the other end of the RJ45 wire at the rear of the wall POE plug.
  3. Plug the microusb to the wall plate.
  4. Plug the iSmartAlarm Spot camera to the microusb.

And you’re done.

Note: if you want to transport data a part of electricty using the RJ45 (what should happen in most of cases), plug the data cable in the second socket of the power injector.






How to make AWUS1900 work in Kali, Debian or Ubuntu?


To make this amazing usb wifi card work, just install the following driver:

$ sudo apt-get install realtek-rtl88xxau-dkms

and later, unplug and plug the network card.






Creating an GCP egg node with a Raspberry Pi and a TrueRNG hardware random number generator


After a first attempt several years ago configuring a GCP node in a Raspberry PI with a random number generator hardware with COM port, I had to settle for installing it on a common PC. The card provided by the GCP project was not voltage-compatible with Raspberry Pi.

Years later I have resumed this project and I have achieved it through a Raspberry Pi 3b and a different random number generator hardware, one with USB connection. For this purpose we will need:

(estimated time to read: 5 minutes, to do: 35 min).

  1. Hardware
    1. A Raspberry Pi 3b (in fact, any Raspberry is enough for this mannual, but using state of art technology allows better maintenance in long term always).  You can get one here.
    2. A microSD card like this Sandisk 64GB. The egg stores the data is going to send, and annualy it is advised to be mannualy deleted.
    3. Optional, but advised, Aukru kit: a kit of addins for the Raspberry Pi 3 composed by a good power charger, a box and 3 heat sinks as this node will be working 24/365.
    4. entropy generator hardware: In this case TrueRng v3, with USB interface. You can get one here.
  2. Mount the hardware
      1. Mount the Rasperrby in the provided box. Plug the microsd into the Raspberry and the TrueRNG. Plug the charger and an ethernet connection if you have one.
      2. Install Raspbian.
      3. Set up network interface, edit the following file:
        $sudo nano /etc/network/interfaces and add this:
        iface eth0 inet static
        and restart networking daemon to enable networking interfaces:
        carlos@raspberrypi:~ $ sudo /etc/init.d/networking start
      4. Enable SSH to start on every boot.
      5. Let´s update the system:
        pi@raspberrypi:~ $ sudo apt-get update
        pi@raspberrypi:~ $ sudo apt-get upgrade
        pi@raspberrypi:~ $ sudo apt-get dist-upgrade

      6. pi@raspberrypi:~ $ sudo adduser carlos
        pi@raspberrypi:~ $ sudo nano /etc/sudoers.d/010_pi-nopasswd
        pi@raspberrypi:~ $ sudo passwd pi
      7. Reboot is always healthy:

        pi@raspberrypi:~ $ sudo reboot


  3. Now we have a Raspberry Pi 3b ready to be configured with the Global Consciousness Project (CGP). For this:
    1. Plug the TrueRng v3 USB at the Raspberry, and check it is detected:

      carlos@raspberrypi:/home/pi $ dmesg
      [ 1912.517842] usb 1-1.3: new full-speed USB device number 5 using dwc_otg
      [ 1912.652704] usb 1-1.3: New USB device found, idVendor=04d8, idProduct=f5fe
      [ 1912.652717] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
      [ 1912.652726] usb 1-1.3: Product: TrueRNG
      [ 1912.652733] usb 1-1.3: Manufacturer: ubld.it
      [ 1912.655235] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device

    2. Download TrueRNG Udev-Rules and follow these indications:
      1. Extract and place udev rules in udev/rules.d folder (this is /etc/udev/rules.d/ under ubuntu)
        $ sudo tar -zxvf TrueRNG-Linux-udev-rules.tar.gz -C /etc/udev/rules.d/
      2. Plug in TrueRNG USB Hardware RNG.
      3. Verify /dev/TrueRNG device exists by typing
        $ ls -l /dev/TrueRNG
    3. As it is explained here, please install RNG Tools:
      1. Install rng-tools using apt-get (Debian, Raspbian or Ubuntu) or yum (Redhat)
        $ sudo apt-get install rng-tools
      2. Modify /etc/default/rng-tools (Ubuntu) or /etc/whatever (RedHat) and make sure the HWRNGDEVICE points to /dev/hwrng (eg. HRNGDEVICE=/dev/TrueRNG)
        $ nano /etc/default/rng-tools
        # Configuration for the rng-tools initscript 
        # $Id: rng-tools.default,v 2008-06-10 19:51:37 hmh Exp $ 
        # This is a POSIX shell fragment 
        # Set to the input source for random data, leave undefined 
        # for the initscript to attempt auto-detection. Set to /dev/null 
        # for the viapadlock and tpm drivers. 
        # HRNGDEVICE=/dev/hwrng 
        # HRNGDEVICE=/dev/null 
        # Additional options to send to rngd. See the rngd(8) manpage for 
        # more information. Do not specify -r/--rng-device here, use 
        # HRNGDEVICE for that instead. 
        #RNGDOPTIONS="--hrng=intelfwh   --fill-watermark=90% --feed-interval=1" 
        #RNGDOPTIONS="--hrng=viakernel  --fill-watermark=90% --feed-interval=1" 
        #RNGDOPTIONS="--hrng=viapadlock --fill-watermark=90% --feed-interval=1" 
        #RNGDOPTIONS="--hrng=tpm --fill-watermark=90% --feed-interval=1"  
      3. Make sure rng-tools will autostart
        $ sudo update-rc.d rng-tools enable
      4. Verify rng-tools service is running using top and cat your syslog for rng-tools debug info.
        $ sudo reboot 
        carlos@raspberrypi:~ $ ps axu | grep rng
        root       400  0.0  0.1  27600  1304 ?        SLsl 13:34   0:00 /usr/sbin/rngd -r /dev/TrueRNG
    4. Install the GCP software USB version, not the one at the public repositories:

      $ sudo apt-get install libncurses5-dev libusb-dev
      $ wget http://noosphere.princeton.edu/egg-beta/egg_araneus.tgz
      $ tar xvfz http://noosphere.princeton.edu/egg-beta/egg_araneus.tgz
      $ cd egg_araneus
      $ make clean
      $ make

      You will finish with several warnings like:

      /home/carlos/EGG_ARANEUS/regtest.c:72: aviso: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead

      This, anyway, is right.
      Now, modify the config file «.eggrc» (.eggprotocol is not longer used) to specify some parameters similar to the following:

      $ nano EGG_ARANEUS/.eggrc

      There parameters are:

      – First line are parameters given by the GCP, please ask Roger Nelson for them. Only «pilar002.noip.me» should be a public address ip or URI for your node.
      – Second line is the GCP server, where generated data is sent.
      – Third line is the configuration of generated data.
      – Fourth line is the device we´re using to generate data. Althought TrueRNG v3 is a USB device, the GCP    has not developed a driver for it, so we will read it generated data as a serial device (reading from /dev/TrueRNG). TrueRNG has this advantage.

      1. Orion: read from a «Orion» like device (/dev/ttyXX).
      2. Number «0» means GCP will read from /dev/ttySO.
      3. «9600» are bpd.In a later step we will make an adjustment so that GCP will real from ttyS0 instead of TrueRNG.
    5. Copy .eggrc to /etc/eggrc$ cp /home/carlos/gcp_eggsh/.eggrc /etc/eggrc
    6. Updating date and time. To synchronize the data from the egg and the server, it is necessary to sync date and hour. Also we will configure the Raspberry to start, on every boot, the GCP´s software.
      carlos@raspberrypi:~/egg $ sudo apt-get install ntpdate
      carlos@raspberrypi:~/egg $ sudo nano /etc/rc.local
      and add the following code before the «exit 0»:
      # Update date and time on boot
      ntpdate -s hora.roa.es &
      /home/carlos/gcp_eggsh/eggsh &

      Of course change the path of gcp_eggsh to that you´re using.

    7. Link between ttyS0 and TrueRNG: while the TrueRNG device is /dev/TrueRNG, the GCP reads from /dev/ttyS0, so it is necessary to create a soft-link between them (ttyS0 –> TrueRNG). But anything on /dev is lost after every reboot. So it is mandatory to create it on each boot. For this:carlos@raspberrypi:/etc/init.d $ sudo nano create_ttyS0#! /bin/sh
      # Provides: ln -sf
      # Required-Start: $local_fs $remote_fs
      # Required-Stop:
      # X-Start-Before: rmnologin
      # Default-Start: 2 3 4 5
      # Default-Stop:
      ### END INIT INFO
      . /lib/lsb/init-functions
      set -e
      case "$1" in
      # make sure privileges don't persist across reboots
      ln -fs /dev/TrueRNG /dev/ttyS0
      echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
      exit 1
      exit 0
      and then create a symlink to this script at rc5.d directory, so it will be invoked at every boot:
      carlos@raspberrypi:/etc/init.d $ sudo ln -s /etc/init.d/create_ttyS0 /etc/rc5.d/S99create_ttyS0
    8. For solving an issue with  Raspberry PI and low speed, please do the following fix:
      carlos@raspberrypi:~ $ sudo su -
      root@raspberrypi:~# echo 0 > /sys/module/dwc_otg/parameters/nak_holdoff

    9. At your router, map ports UDP  1105 and 2510 to the IP of your Raspberry.
    10. Testing. Just reboot and execute the eggsh software, you will get something like:
      and check it at the GCP status web (refreshing this web may take a while)
    11. Now that everything is working you may want to create a backup of the microSD card.

Edit1 (14-05-2018): At Radio Nacional de España there is a reportage of the The Global Consciousness Project. You can listen to it or download it (Rename the file to MP3).



ALM: Valorar bono y realizar ajuste de valor de mercado


Se adjunta un Excel con explicaciones para dos tareas habituales en ALM:

  1. Valorar un bono: se calcula el valor de mercado (market value) de un bono de 100€, vencimiento en 8 años y cupón del 5% de manera teórica, y se compara con el mismo cálculo aplicando la curva spot. Si coinciden tanto valores de mercado como especialmente los rendimientos totales de mercado, la validación es correcta.
  2. Ajuste de mercado: puede darse la situación de que sea necesario valorar un bono utilizando en t=0 el valor de mercado provisto por un tercero (Bloomberg, tesorería, etc) para valorar el activo. En este caso se explica cómo hacer el ajuste en los cash flows de modo que el valor de mercado en T=0 sea el especificado por Bloomberg.


como valorar bono y market value adjustment


Crear curva spot


Para crear una curva spot se puede utilizar la lógica presente en el siguiente excel:




ALM, curvas de escenarios


Inicio una serie de artículos sobre ALM (Asset Liabilities Management, gestión de activos/pasivos en entornos financieros), orientado exclusivamente para informáticos que entran en este mundo.

En ALM se calculan todas las posibles estrategias de inversión de una entidad para maximizar su beneficio. Esto comprende evaluar una gran combinatoria de activos y hacer hipótesis de cómo el mundo real va a evolucionar (por ej. si subirán los tipos de interés, o si habrá una burbuja en el ladrillo, o si algún sector quebrará como la crisis de las .com como ocurrió en el año 2000), etc. Por eso se utilizan escenarios: conjuntos de datos (tablas) que dibujan curvas que representan la evolución de sectores. Estas tablas son calculadas por un conjunto de economistas, estadísticos, matemáticos, actuarios, informáticos, etc, y según el acierto o error en ellas de las estimaciones de estos profesionales en la gestión ALM de inversiones se obtendrán mejores o peores resultados. En ALM estas curvas son provistas por terceros y se utilizan para realizar cálculos.

Esas curvas pueden ser representadas mediante distintos criterios:

  • Tipos de interés: la rentabilidad que va a dar un activo desde hoy (t=0) hasta la fecha que elijamos. Esta rentabilidad es anual.
    Para calcular la rentabilidad total de una inversión, se aplica la siguiente fórmula:RentabilidadTotal = ((1+tipoInt)^T) -1Así, para una inversión de 1€ hecha a un plazo de 7 años se obtendrían (1+0,345)^7 -1= 7,24%.La rentabilidad, a medida que pasa el tiempo, es mayor. Significa la incertidumbre por el «riesgo de crédito» (si prestas 1M a alguien para que te los devuelva en 10 años, hay más probabilidad de que en 10 años le suceda una catástrofe y no pueda devolvértelos, que si establecéis que el plazo de devolución sea sólo un año).
  • Precios: esta forma de expresar una curva de escenario indica cuánto has de invertir hoy (t=0) para obtener 1€ en el plazo que elijas. Viendo la tabla anterior, si quieres ganar un euro en 6 años, hoy deberías invertir 0,98681109€. Sigue la misma filosofía que los tipos de interés, pero se representa de manera inversa, pues como cuánto más tiempo pase mayor es el tipo de interés (condiciones) que vas a imponer a quien prestas dinero, menos capital inicial necesitas invertir ahora (t=0).

La conversión entre tipoInterés y Precio se calcula de la siguiente manera:

  • tipoInterés = (1/Precio)^(1/T)-1  (siendo T el correspondiente plazo).
  • Precio = 1/(1+tipoInterés)^T

Estas curvas suelen ser provistas en formato anual, de modo que se pueden hacer los cálculos utilizando esta frecuencia. Si se desease mayor precisión, mayor granularidad, sería necesario interpolarlas. Para ello se utilizan los siguientes métodos de interpolación:

  • Curva de tipos: interpolación lineal.
  • Curva de precios: interpolación exponencial.

En este excel se puede ver con mayor detalle:


Igualmente se utilizan otras curvas:

  • Curva spot: Indica cuánto has de invertir ahora para obtener 1€ en el plazo que se elija. Va de 0 al vencimiento. Ej: 1, 0.98, 0.96, 0.95, etc. Se interpreta «para ganar 1€ en tres años he de invertir hoy (t=0) 0.95€». En t=0 siempre es «1» pues es lo que inviertes y recuperas sin dejar pasar tiempo.
  • Curva de rendimientos: Es la inversa de la curva spot, se interpreta como «si invierto 1€, cuánto tengo en 3 años?». ej. de curva: 1, 1.04, 1.05, etc…
  • Curvas forward y yield, curvas internas (se desarrollará en otro artículo).

más conocimientos complementarios se pueden encontrar en este artículo de Pablo Montero en el blog de Mirai. (Mirror en PDF).


Dolphin sin opción de comprimir ficheros


En las últimas versiones de KDE (como la incluída en Kubuntu 15.10)  Dolphin viene sin la opción de comprimir ficheros en el menú contextual del ratón.

Para incluirlo, es tan sencillo como ejecutar lo siguiente desde shell:

sudo ln /usr/share/kde4/servicetypes/konqpopupmenuplugin.desktop /usr/share/kservicetypes5/konqpopupmenuplugin.desktop



Fuente: AskUbuntu


Error No existe el archivo o el directorio #include




carlos@shirley:~/egg/64$ make gcc -g -ansi -Wall -DLinux -DUSLEEP -D_GNU_SOURCE -DUSB_SERIAL -DALT_UI -DNO_UI -DPACKETDUMP -DHEXDUMP -DREPORT=1 -DEGG_DYNAMIC   -c -o eggui.o eggui.c
eggui.c:39:20: fatal error: curses.h: No existe el archivo o el directorio
#include <curses.h>
compilation terminated.
make: *** [eggui.o] Error 1


carlos@shirley:~/egg/64$ sudo apt-get install libncurses5-dev


Problems while installing Genymotion on old Ubuntu’s versions


Some common problems and their solutions while installing Genymotion on Ubuntu Trusty 14.04:

carlos@WhenIGrewUp:~/apps/genymotion$ sudo ./genymotion
./genymotion: error while loading shared libraries: libQt5Script.so.5: cannot open shared object file: No such file or directory

carlos@WhenIGrewUp:~/apps/genymotion$ sudo apt-get install libqt5scripttools5  libqt5qml5  qt5-qmake


carlos@WhenIGrewUp:~/apps/genymotion$ sudo ./genymotion
ene. 6 19:52:15 [Genymotion] [Warning] QSslSocket: cannot resolve SSLv2_client_method

carlos@WhenIGrewUp:~/apps/genymotion$ sudo apt-get install libssl0.9.8


carlos@WhenIGrewUp:~/apps/genymotion$ sudo ./genymotion
ene. 6 19:52:15 [Genymotion] [Warning] QSslSocket: cannot resolve SSLv2_client_method

carlos@WhenIGrewUp:~/apps/genymotion$ sudo apt-get install libssl0.9.8

From my experience, it’s fully recommended upgrading to any later Ubuntu (if possible) to make Genymotion work.


ALTERNATIVE: download a previous version of Genymotion (2.5.2),