Jun 192013
 

Over my desk (over a big map of the world) I have a sign, which says “The map is not the territory”. It is a quote by Korzybski, a favorite of Bob Wilson’s (of Illuminatus! fame). Also one of me …

A short story about traffic

Today, my brother came to me and wanted the Galaxy Tab I had been using for some days now. It used to be mine, then he took it with him to China, and … actually never really gave it back. Which was mostly fine by me, I got used to it. I did go to Berlin a couple of days ago, and took it with me – I’ve switched the SIMs, installing my Fonic SIM, which includes 300 MB traffic for 10 €.

Today, I was assuming that the SIM was still installed – he asked me to have the phone after I came back from Berlin, probably to chat with some Chinese guys. Turns out it hadn’t been – he had installed his own Alice SIM. And I had been around town yesterday, him probably, too, and the packet switched traffic had not been turned off. It was not used for anything special, mostly the system running updates automatically, probably. Still …

Two things: first, it’s a very expensive mistake (traffic with Alice is about 15 Cent / 100 kB with the first 30 MB being free, if I remember correctly). Second, it’s a predictable mistake – something which can happen easily.

The problem was that our mindstates / maps of the world (in this case of the SIM inside the phone) had not been synchronised. I did not see him exchange my SIM for his SIM, and therefore did not foresee the possible “danger” of using very expensive packet switched traffic. In essence, Alice charges TOO MUCH for this traffic, making the mistake unnecessary expensive.

Windows

But that’s not the point of this blog post. The point is Korzybski’s quote: The map is not the territory.

We build a mental map of everything we interact with – people, machines, animals, transportation, companies … The map can NEVER be the territory (i.e. absolutely cover every aspect of it), it is just a projection of the territory being covered.

Mostly we get by very well. Many people are quite predictable (although I find myself wishing they weren’t in some cases, still hoping for changes …). Transportation mostly is, too. Animals are.

But are machines?

Your vanilla desktop calculator sure is … but your computer (and by computer I mostly mean it’s operating system and software in general) is not.

Windows 8 will force you to try to save your unfinished / unsaved work in 15 minutes before rebooting. There is no easy possibility of preventing that for the user. Windows 7 “kindly” offered to postpone the restart for 15 minutes to 4 hours (if you were present in front of the computer during the critical phase of this dialogue).

Are you expecting your computer to be restarting out of the blue? Emphatically – never. If it would happen every hour, it would be predictable. Annoying still, but predictable – and merged into the mental map. These (rather rare) restarts occur – maybe once each month – and are not in the map.

Nor should they be. Similarly, as with Alice’s heavy penalty for a trivial mistake – this aspect of Windows should be redesigned.

The expected behaviour of the computer by the user should be the default behavior. Novice users should be the ones we model after – bringing their natural experience – interaction with their “normal” surroundings – to bear. The computer should be the one trying to guess the user’s mindstate, and not the other way around.

Some examples

  1. No more restarts without user initiation
  2. No computer initiated focus changes. Never ever. Not even for good reasons.
  3. No “USB key can not be removed” messages without informing the user EXACTLY why (no, “a program is using it” is NOT good enough – even I can’t figure out WHICH program in most cases)
  4. No silent reboots after crashes – the user should be informed about the crash, and if possible about the applications which were open at the last time
  5. Excel should not show a dialogue to recover files, and close it if you double click to open and view one of the files. (This is HUGE)
  6. State dialogues / message boxes should be part of the application, not modal dialogues (the association is easier in this case)
  7. I could go on.

Apple once had a manual on designing user interfaces. I believe we need something like that, too. For the upcoming generation of Web 2.0 apps, and the global switch to Cloud-based App Computing.

Here’s a farewell to all the old cruft, the old problems and bad user interface design. Here’s to less suffering, frustration and angry users of badly designed software. If you happen to be exposed to bad software, do the most sensible thing: turn and run!

Jun 172013
 

Intro

wifi_logo (1)In diesem Artikel stelle ich eine Lösung vor, um  das Netzwerk an dem der Raspberry verbunden ist über einen USB WLAN Adapter für andere Computer zur Verfügung zu stellen. Der Raspberry arbeitet dabei als Brücke (bridge), und leitet einfach alle Daten die am WiFi  Adapter ankommen in das LAN weiter.

Das kann bspw. sinnvoll sein, wenn man zwei Netzwerke zu Hause betreiben möchte – ein schnelles für n-fähige Geräte, und ein langsames für b / g Geräte; Eine Isolation der Netzwerke gegeneinander findet aufgrund des bridged Modes in unserer Anleitung nicht statt – die IP Adressen der über WLAN angeschlossenen Computer z..B. werden vom  DHCP-Router vergeben, nicht vom Raspberry.

Ein weiterer Einsatzzweck ist das Einrichten von WLANs in anderen Stockwerken / entfernten Orten (z.B. im Keller?), vor allem wenn man  dem  Raspberry noch weitere Aufgaben angedeihen lassen möchte.

Der Vorteil an der bridged Lösung ist geringerer Prozessor-Overhead für den Raspberry, und geringerer Verwaltungsaufwand (IP Adressen).

Hardware-Anforderungen

Nicht alle USB WLAN Sticks unterstützen den dazu notwendigen AP Modus, bzw. die “nl80211 API”. Wir beschreiben weiter unten, wie Sie Ihren Stick überprüfen können.

cartIn unserem Shop bieten wir den Logilink WL0084B v2.0 an, der als Access Point geeignet ist.

Er basiert auf dem Ralink RT5370 Chipsatz.

 

Root-Rechte nötig

Die folgenden Kommandos sind alle als root Nutzer auszuführen (sudo su).

Installation der nötigen Pakete
aptitude install hostapd hostap-utils iw bridge-utils
  • hostapd, hostap-utils: WLAN Stick als Access Point nutzen
  • iw: Konfigurations-Programm für Funknetzwerk-Devices
  • bridge-utils: ermöglichen zwei Netzwerke miteinander zu verbinden

iw hilft festzustellen ob Ihr USB-WiFi Stick Access-Point fähig ist. Nicht alle sind es!

iw list

iw list zeigt die vorhandenen Funknetzwerk-Geräte an.

nl80211 not found

Falls hier der Fehler “nl80211 not found” auftaucht, wird eine ältere Version von hostapd benötigt. Weitere Details dazu – bspw. für den TP-Link TL-WN725N WiFi – gibt es auf dieser Seite. Der besagte TP-Link wäre bei lsusb beispielsweise folgendermaßen aufgeführt (v1):

Bus 001 Device 011: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

Sticks die die nl80211 API unterstützen

Wir benutzen im folgenden einen USB-WLAN Stick, der die nl80211 api unterstützt, d.h. dieser Fehler taucht NICHT auf, sondern man erhält mit iw list etwa folgende Ausgabe:

root@andromeda:~# iw list
Wiphy phy9
        Band 1:
( ... )
        Available Antennas: TX 0 RX 0
        Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * WDS
                 * monitor
                 * mesh point
        software interface modes (can always be added):
                 * AP/VLAN
                 * monitor
        interface combinations are not supported
( ... )        
Device supports HT-IBSS.

Wir nutzen einen Logilink Adapter (Modell WL0084B v2.0), per lsusb wird dessen Chipsatz identifiziert als:

Bus 001 Device 021: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter

 

Konfiguration

Zunächst muss man in der /etc/init.d/hostapd den Pfad zur (noch zu erstellenden) hostapd Konfigurationsdatei einstellen. ( nano /etc/init.d/hostapd ) Finden Sie die Zeile mit DAEMON_CONF, und ergänzen Sie sie wie folgt:

DAEMON_CONF=/etc/hostapd/hostapd.conf

erstellen Sie jetzt die hostapd.conf ( nano /etc/hostapd/hostapd.conf ) und befüllen Sie sie mit dem folgenden Inhalt:

ctrl_interface=/var/run/hostapd
###############################
# Basic Config
###############################
macaddr_acl=0
auth_algs=1
# Most modern wireless drivers in the kernel need driver=nl80211
driver=nl80211
##########################
# Local configuration...
##########################
interface=wlan0
bridge=br0
hw_mode=g
channel=1
ssid=www.pi3g.com
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=BITTE___AENDERN
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Kurze Diskussion der Datei /etc/hostapd/hostapd.conf

hostapd.conf ist empfindlich was Leerzeichen hinter den jeweiligen Konfigurationseinstellungen angeht – bitte vermeiden Sie diese daher.

  • driver: nl80211 bei Geräten die die nl80211 API unterstützen. Es sind auch andere (legacy-) APIs verfügbar, siehe hier
  • interface: man kann auch mehrere WiFi Adapter am Raspberry anschließen – der erste heißt wlan0
  • bridge: diese Brücke werden wir gleich noch einrichten
  • hw_mode: Verbindungsmodus. g bedeutet: g + b
    • b bedeutet: nur b
  • SSID: die SSID des Hotspots
  • wpa=3: WPA1 und WPA2 werden enabled – diese sind dem unsicheren WEP vorzuziehen
  • wpa_passphrase: das ist Ihr Netzwerkschlüssel. BITTE ÄNDERN SIE DIESEN!!

Um 802.11 n einzuschalten, muss man einen zusätzlichen Parameter “ieee80211n” auf 1 setzen. z.B. für g & n:

hw_mode=g
ieee80211n=1
 
Konfiguration der bridge

Die Bridge sorgt dafür, dass die Netzwerkpakete die die Access Point Clients über diesen senden direkt über den Ethernet Port des Raspberrys weitergeleitet werden. Wir haben die bridge-utils bereits installiert, und müssen nur noch die Einstellungen anpassen.

Editieren Sie die /etc/network/interfaces (nano etc/network/interfaces )

auto lo

iface lo inet loopback
auto br0
iface br0 inet static
        address 192.168.1.11
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        bridge-ports eth0 wlan0

Kurze Diskussion:

  • Die bridge br0  ersetzt Ihr bisheriges eth0 Interface, sie wird daher wie eth0 konfiguriert
    • hier in einer statischen Konfiguration – unser Netzwerk ist 192.168.1.*, der Router 192.168.1.1
  • bridge-ports eth0 wlan0 ist das “magische Kommando”, was wlan0 mit eth0 verknüpft
  • Das ist alles – keine weiteren Einträge (insbesondere nicht für wlan0)

Neustart

Nach einem Neustart sollte das System voll funktionsfähig sein. Sie können jetzt Clients mit Hilfe der Zugangsdaten über den Access Point verbinden.

Alternativ können Sie es auch mit folgenden Kommandos ohne Neustart versuchen:

ifdown eth0; ifup br0
service hostapd restart
DNSMASQ

In unserem Setup ist kein dnsmasq nötig – das wäre erforderlich, falls Sie keine bridge machen wollen, sondern den Clients eigene IP Adressen aus einem anderen Bereich geben wollen, z.B. aus Sicherheitsüberlegungen.

Windows – debugging, etc.

  • um die IP Adresse herauszufinden: unter Powershell: ipconfig /all
  • Es empfiehlt sich, die Funknetzwerkbelegung zu analysieren, um den Durchsatz zu optimieren. Unter Windows gibt es dazu bspw. das Tool InSSIDer. (Scheint kostenlos zu sein).

image

Dokumentation & weiterführende Links

Tools
  • InSSIDer – WiFi Analyse-Tool für Windows (auch mit Windows 8 kompatibel)
Waren
Jun 152013
 

Allgemeines

Auf dem PiFace befinden sich zwei Relais (siehe Bild). Alle Relais haben die Funktion eines Schalters. Dieser spezielle Schalter lässt sich elektrisch steuern. Wenn man aber etwas einschalten möchte, muss man diesen Schalter mit dem Verbraucher und einer Quelle in Reihe schalten. Möglicher Aufbau: Spannungsquelle in Reihe mit einem Motor in Reihe mit einem Relais.

Die blauen Pfeile zeigen, welche Pins im nichtbetätigten Zustand miteinander verbunden sind, die grünen hingegen, wenn das Relais geschaltet wurde.

Die Relais sind auf dem PiFace intern mit den ersten beiden LEDs verbunden. D.h. wenn man die erste LED einschaltet, dann schaltet man auch gleichzeitig das erste Relais. Dabei hört man auch ein klicken.

 Relais

Testprogramm

#include <wiringPi.h>
#include <piFace.h>
#include <softPwm.h>

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define PIFACE    200
#define BUTTON1 200
#define BUTTON2 201
#define BUTTON3 202
#define BUTTON4 203
#define LOW        0
#define HIGH    1
#define LED1 200    //Relais1
#define LED2 201    //Relais2
#define LED3 202
#define LED4 203
#define LED5 204
#define LED6 205
#define LED7 206
#define LED8 207

 

int main (void)
{
    int i, r1=LOW,r2=LOW;
   
    printf(“RELAIS TESTPROGRAMM\n”);

      wiringPiSetup();
      piFaceSetup(PIFACE);

// Enable internal pull-ups & start with all off
      for(i=LED1;i<=LED8;i++)
      {
        pullUpDnControl(i,PUD_UP);
        digitalWrite(i,LOW);
      }
    delay(100);

//INFO
    printf(“(Button1 befindet sich am Rand)\n”);
    printf(“Button1 schaltet das 1. Relais ein und aus\n”);
    printf(“Button2 schaltet das 2. Relais ein und aus\n”);
    printf(“Buttton3 schaltet beide Relais um\n”);
    printf(“Button4 schaltet das Programm aus\n”);
    while(digitalRead(BUTTON4)!=LOW)
    {
        if(digitalRead(BUTTON1)==LOW)
        {
            r1^=1;
            digitalWrite(LED1,r1);
            delay(200);
        }
        if(digitalRead(BUTTON2)==LOW)
        {
            r2^=1;
            digitalWrite(LED2,r2);
            delay(200);
        }
        if(digitalRead(BUTTON3)==LOW)
        {
            r1^=1;
            r2^=1;
            digitalWrite(LED1,r1);
            digitalWrite(LED2,r2);
            delay(200);
        }
    }
//Ausschalten der Relais zum Schuluss
    for(i=LED1;i<=LED2;i++)
        digitalWrite(i,LOW);

  return 0 ;
}

 Posted by at 9:35 pm
Jun 082013
 

Chrono hat einen Schaltplan entworfen und aufgebaut, um einen günstiges Geigerzählermodul (~ 15 € Kosten für die Teile) für das Raspberry Pi zu entwickeln. Die meisten Informationen sind bereits online, samt Bild des Prototypen. Die dazugehörige Software / Webbrowser-Interface möchte Chrono in den kommenden Wochen fertigstellen. Es können auch zwei der Module im Verbundbetrieb miteinander arbeiten, um die Zählrate zu erhöhen.

Geigerzähler-Einsatzzweck

Neben dem offensichtlichen Zweck, die Strahlenbelastung verschiedener Materialien / Gegenden direkt prüfen zu können (ohne extrem teueres Equipment anzuschaffen), kann ein Netzwerk dieser Geiger-Zähler uns über die gesamte Strahlensituation in Deutschland, Europa, und womöglich weltweit geben – von Volunteers betrieben, natürlich.

Eine andere Möglichkeit ist als echter Random Number Generator zu arbeiten.  Eventuell könnte man da eine Webseite drauf laufen lassen, als public random number server.

OpenSource / Open Hardware

Wie alles, was aus dem Apollo NG Projekt hervorgeht, ist auch das Geigerzählermodul OpenSource. Chrono hat kein kommerzielles Interesse, sondern möchte die Welt voranbringen.

Er freut sich aber bestimmt über Hardware-Spenden, mit denen er Apollo aufrüsten kann. Wer Interesse hat, Apollo und Chrono zu unterstützen, sollte ihn am besten kontaktieren.

Jun 032013
 

Introduction

This is a quick and dirty test setup as a special favour for one of our blog commentors. We compare the two TP-Link Nano Wifi adapters versions, and their respective throughput rates.

Test Setup

One notebook as a web server, with a Samsung 840 Pro SSD harddrive, 8 GB RAM. Connected to Gigabit switch (over Gigabit Ethernet), which in turn is connected to TP-Link TL-WR1043ND over Gigabit Ethernet.

The router is running on DD-WRT. WiFi is set to N only (2.4 Ghz). (Expect worse performance on mixed networks!)

Distance between the router and the TP-Link Wifi adapter: ~ 15 m – located on the same floor.

Measuring is done with iftop  (to install: aptitude install iftop )

iftop -b -n -i wlan0

This will show the throughput rates in bits/s, not bytes/s (divide by 8 if you need them, or use the appropriate command line switch).

The wlan0 is the only network on the Raspberry, eth0 is disconnected.

The load is generated by wgetting a large file (raspbian Image) from the web server, and writing it to /dev/null (otherwise the SD card’s speed will have an impact). For even faster performance, the log is also written to /dev/null .

wget -o /dev/null -O /dev/null 192.168.1.16/raspbian.img

If you want to try this yourself, replace the IP adress with your host (name or IP).

Remember, this is the Raspberry – general purpose processing power is at a premium and needs to be factored in. iftop will also take it’s toll, the real throughput in the test setup will be a bit higher.

In a real scenario, though, you want to run other utilities, applications, etc, so throughput will most likely be lower.

Sensitivity to orientation

As the throughput is very sensitive to the orientation of the dongle, we have tried to optimize the positioning of the Raspberry and the dongle in these measurements.

 

TP-LINK v 2

This is the result for version 2 of the TP-Link WiFi Adapter, using a custom driver (none included with the official distro).

 

image

 

The total network throughput we measure here is (peak) ~ 28 Mb/s, or > 3 MB/s. 

 

TP-LINK v 1

This is the result for version 1 of the TP-Link WiFi Adapter, using the stock driver

 

image

Total network throughput is ca. 21 Mb/s or slightly more than 2.5 MB/s.

 

LogiLink Ultra Nano Wireless N 150 Mbps USB Adapter

This is “WL0084B” or 98 71 33 Wireless N 150 Mbps Adapter by LogiLink. This is most probably the adapter we will be shipping with our kits when we have no TP-Link adapters left anymore.

This adapter works out of the box for us, we’ve also tested it on Raspbmc. Apparently you can also use it to set up a WiFi  access point, as the chipset supports that mode.

image

Peak throughput seems to be at about 20 Mb/s = 2.5 MB/s (with a lot of orientation fiddling).

 

Orientation sensitivity

The WiFI adapters are highly orientation sensitive. Consider the following two screenshots (TP-Link hardware). the Only difference is the orientation of the Raspberry Pi (and with it the TP-Link WiFi USB dongle)

image

image

 

To reach the optimal rates we measured here, you need to orient your nano dongle. A good idea would be to use a passive USB extension to allow for a greater degree of freedom in the orientation.

Jun 032013
 

Unter Windows kann einfach das Programm Win32DiskImager.exe verwendet werden, um Images VON der SD Karte zu Backup-Zwecken zu erstellen.

Unter Linux kann man das sehr mächtige Tool dd nutzen. dd sollte vorsichtig eingesetzt werden, da es durchaus in der Lage ist die Systempartition zu überschreiben – besonderes Augenmerk sollte also auf den “of” Parameter gerichtet sein (output Ziel).

Es wäre prinzipiell denkbar, den Raspberry Pi “aus sich selbst heraus” zu backuppen. Dazu müsste man jedoch die Systeme read-only remounten, und einen passenden USB-Speicher, etc. zur Hand haben. Falls Interesse an einem Skript dafür besteht, werden wir uns damit beschäftigen.

Basis-Nutzung:

dd if=/dev/sd* of=/tmp/my.image

dd liest hier die kompletten Daten von /dev/sd* (das * muss mit dem entsprechenden Buchstaben ersetzt werden) und schreibt sie in die Datei /tmp/my.image (Pfad und Name hier nach Wunsch anpassen).

Möchte man das etwas komfortabler haben, hilft “Pipeview” pv:

pv –tpreb /dev/sd* | dd of=/tmp/my.image

Das zeigt einen Fortschrittsdialog beim Kopieren an. Während dd meist auf Linux-Systemen verfügbar ist, muss pv meistens installiert werden.

Bonus: Wie erkennne ich welchen Buchstaben ich nutzen muss statt dem Sternchen /dev/sd* ?

sudo lsblk -o NAME,FSTYPE,MOUNTPOINT,LABEL,UUID,MODEL,SIZE,STATE,OWNER,GROUP,MODE,TYPE

Das obige Kommando zeigt eine Liste von angeschlossenen Laufwerken an, meist ist anhand der Größe möglich die SD Karte zu ermitteln.

Achtung: da wir die gesamte SD Karte, “samt Haut und Haaren” backuppen wollen, und nicht eine Partition (z.B. als /dev/sda1 adressiert), sollte KEINE Zahl am Ende der Adresse sein (d.h. z.B. /dev/sda statt /dev/sda1).

Weiterführende Infos: überall im Internet, z.B. Wikipedia

Jun 032013
 

Im Zuge einer Umorientierung des pi3g Shops sind das Gertboard und Pi-Face nicht mehr bei uns erhältlich.

In Kürze wird der Shop unseres Partners cupfopi.com starten. CupOfPi wird auf den Elektronikmarkt (Endanwender und Industrie) fokussieren, während pi3g in Zukunft für den Business-Bereich (z.B. Digital Signage) zuständig sein wird.

Hintergrund der Entscheidung ist besserer Kundenservice durch stärkeren Fokus – die Partner cupofpi und pi3g können so ihre jeweilige Expertise voll einbringen.

Kontakt zu pi3g

Optimization WordPress Plugins & Solutions by W3 EDGE