Old school gaming with retropie

I love old videogames, they take me back to my youth, when I spent countless afternoons playing with my friends. With my raspberry pi I’ve set up a retro-gaming station very easily by installing retropie, a raspbian distribution specifically geared to do this. This has cost me less than 2 hours and around €200

The components are:

  1. Raspberry pi 3 model b starter kit (€68)
  2. Heat dissipators (optional € 3,99)
  3. 7″ tft touchscreen (optional €71,95)
  4. Case to hold it all together (optional €19,90)
  5. 2 super nintendo-like gamepads (€18 each)
  6. Retropi (free)
  7. Game roms (free)

 

Fun times! 😀

Setting up a 7″ touchscreen on an old raspberry pi model B

Santa Claus has brought me a 7″ touchscreen display for my raspberry pi.  I thought setting it up would be as easy as plug and play, and it probably is so for the new version 3 model B but for older versions you need some extra steps:

  1. Identify which version of raspberry pi you have
  2. You will need to get a microusb power source of at least 2A (I got one for €10) the power source which came with my raspi was only 1.2A and could not power the whole thing.
  3. Do not power the raspberry pi via microusb. Power the display motherboard via microusb and power the raspberry board via GPIO 5v pin
  4. Connect the SCL/SDA, 5V and GND pins from your display to the corresponding pins in the raspi’s GPIO
  5. Connect the DSI bus
  6. Boot your raspi and edit file /boot/config.txt adding a line at the end ignore_lcd=0 (to flip the screen also add lcd_rotate=2)
  7. Start up your raspi and your display should be working

What is the average distance between points in a square?

In my family we love riddles, puzzles and mathematical challenges and it’s not unusual that we share weird problems via our whatsapp group. A couple weeks ago, we received the following question from my brother Alvaro: “what is the average distance between two points in a square?”

Solving this problem mathematically with integrals exceeds my current level of skill, but I realised it would be rather easy to solve this for a discrete amount of points in a square NxN matrix. I could solve it for a matrix of 10×10, 20×20 and see whether the solution converged to a number.

With my raspberry pi, connected via ssh from my iphone, from the comfort of my sofa I wrote the following program in c that iterated with increasing sizes of square matrixes

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double distancia(int x1,int y1,int x2,int y2){
double distx=x2-x1;
double disty=y2-y1;
double distanciaalcuadrado=abs(pow(distx,2)+pow(disty,2));
double distancia=sqrt(distanciaalcuadrado);
return distancia;
}
void mediaPuntos(int intervalos){
double suma=0;
int contador=0;
double media=0.0;
double distancias=0.0;
int x1=1;
int x2=1;
int y1=1;
int y2=1;
double medianor=0;
for(x1=1;x1<=intervalos;x1++){
for(y1=1;y1<=intervalos;y1++){
for(x2=1;x2<=intervalos;x2++){
for(y2=1;y2<=intervalos;y2++){
contador++;
distancias=distancia(x1,y1,x2,y2);
suma=suma+distancias;
media=suma/contador;
medianor=media/intervalos;
//printf("%d:(%d,%d)-(%d,%d)=%f [%f/%d]=%f\n",contador,x1,y1,x2,y2,distancias,media,intervalos,medianor);
}
}
}
}
printf("%d:%d [%f/%d]=%f\n",intervalos,contador,media,intervalos,medianor);
}
void main(void){
printf("sumando distancias\n");
int intervalos=10;
int intervalosmax=100000;
for(;intervalos<=intervalosmax;intervalos++){
mediaPuntos(intervalos);
}
}

When reaching a 216×216 matrix, the number of combinations was 2 thousand million at which some variable must have exceeded the maximum size of a double type because I started getting negative results.


The result is that the mean distance between any two points in a square is 0.5214 times the length of the side. I have no clue what this ratio means mathematically.

Do you know what 0.5214 represents in a square of side 1? 🙂

Creating a wifi subnet for the dash buttons

It could be useful to have the dash buttons working with the raspberry pi in a place where there is no wifi or internet coverage. The raspberry pi can be setup as a wifi hotspot and the dash buttons configured to join this network. Taking things a bit further, the raspberry pi could be set up to route requests received via the wifi subnet through the cabled network, to the internet router/home network and to the internet.

Yesterday I managed to do this successfully, following this tutorial. Fun times 🙂

The important files for this are:

/etc/network/interfaces
/etc/dhcpcd.conf
/etc/hostapd/hostapd.conf
/etc/default/hostapd
/etc/dnsmasq.conf

recipe of steps I followed

  1. sudo apt-get update
  2. sudo apt-get install hostapd isc-dhcp-server
  3. sudo apt-get install iptables-persistent
  4. sudo vi /etc/dhcp/dhcpd.conf
    1. comment the lines
      1. #option domain-name “example.org”;
        #option domain-name-servers ns1.example.org, ns2.example.org;
    2. uncomment the line
      1. authoritative;
    3. Add the following lines at the end
      1. subnet 192.168.43.0 netmask 255.255.255.0 {
        range 192.168.43.10 192.168.43.50;
        option broadcast-address 192.168.43.255;
        option routers 192.168.43.1;
        default-lease-time 600;
        max-lease-time 7200;
        option domain-name “local”;
        option domain-name-servers 8.8.8.8, 8.8.4.4;
        }
  5. sudo vi /etc/default/isc-dhcp-server
    1. add wlan0 to the INTERFACES variable
      1. INTERFACES=”wlan0″
  6. sudo ifdown wlan0
  7. sudo vi /etc/network/interfaces
    1. allow-hotplug wlan0
      iface wlan0 inet static
      address 192.168.43.1
      netmask 255.255.255.0
  8. sudo ifconfig wlan0 192.168.43.1
  9. sudo vi /etc/hostapd/hostapd.conf
    1. interface=wlan0
      driver=nl80211
      ssid=jarvis
      country_code=US
      hw_mode=g
      channel=6
      macaddr_acl=0
      auth_algs=1
      ignore_broadcast_ssid=0
      wpa=2
      wpa_passphrase=Raspberry
      wpa_key_mgmt=WPA-PSK
      wpa_pairwise=CCMP
      wpa_group_rekey=86400
      ieee80211n=1
      wme_enabled=1
  10. sudo vi /etc/default/hostapd
    1. DAEMON_CONF=”/etc/hostapd/hostapd.conf”
  11. sudo vi /etc/sysctl.conf
    1. net.ipv4.ip_forward=1
  12. sudo sh -c “echo 1 > /proc/sys/net/ipv4/ip_forward
  13. create NAT rules with iptables
    1. sudo iptables t nat A POSTROUTING o eth0 j MASQUERADE
    2. sudo iptables A FORWARD i eth0 o wlan0 m state state RELATED,ESTABLISHED j ACCEPT
    3. sudo iptables A FORWARD i wlan0 o eth0 j ACCEPT
  14. sudo sh -c “iptables-save > /etc/iptables/rules.v4”
  15. sudo service hostapd start
  16. sudo service isc-dhcp-server start
  17. sudo service hostapd status
  18. sudo service isc-dhcp-server status
  19. sudo update-rc.d hostapd enable
  20. sudo update-rc.d isc-dhcp-server enable
  21. sudo reboot
  22. tail -f /var/log/syslog

Fun with Amazon Dash buttons and a raspberry pi

One of my holiday projects for this christmas is to be able to intercept the press of an amazon dash button with my raspberry pi and execute a script. The rationale behind how this works is that the dash buttons try to reach the amazon servers every time the button is pressed, for this they first connect to the wifi sending an arp request. Since arp requests are broadcast on the network, my raspberry pi can be listening (using scapy) and when an arp request from the dash button’s mac address is detected, a shellscript could be launched which triggers all sort of cool things.

One fun way to use this could be as a doorbell, when someone is at the door, they could press a dash button which would trigger a raspberry pi to take a picture of whoever is at the door and send me an email alerting me and sending me their picture.

It’s 00:15 on chistmas day, I am in bed connected to my raspberry pi via ssh with my iphone and I have just been successful at detecting a button press. Nice!! 😀

Big Data, learning Pandas

I have enrolled in the MIT Big Data an Social Analytics certificate course because I enjoy learning new technologies, in particular technologies which can be applied in the area of fintech.

I find the Python programming language and the big data libraries interesting, and the learning curve at least so far is not so steep.

oreilly

Below is a gist I’m putting together to play with one of the Python libraries for big data analysis: Pandas

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

MIT Fintech: Future commerce

I just received my MIT Fintech Future commerce certificate! 🙂

It’s been a very interesting 12 week online training where I learnt about impending disruptions to the financial technologies landscape. I highly recommend it to those of you interested in fintech.

In fact I enjoyed it so much that I have now enrolled in the Big Data and Social Analytics course! 😀

mit