Shared memory C++ template

Noch eine kleine Wrapper-Library ist fertig. Dieses mal geht es um shared memory, Semaphoren, Linux und C++.

Die Klasse SharedMemory erzeugt ein neues definiertes SharedMemory Segment mit einer bestimmten Größe und erledigt alle notwendigen Schritte zur Erstellung und Löschung der Segmente im Hintergrund.

Darüber hinaus ermöglicht sie auch den Wechselseitigen Zugriff auf dieses Shared Memory segment mittels einer eingebauten Semaphore. Shared memory und semaphore verwenden dabei denselben Schlüssel, der vom Benutzer definiert wird.

Einfaches Beispiel:

Die Library kann hier gedownloaded werden. Beispielcode ist in der example.cpp im Archiv enthalten.
Als Lizenz habe ich wiederum die MIT License gewählt.

osmpng

English version below

Für mein SEGeo-Projekt habe ich gerade an einem neuen Tool gebastelt: osmpng

osmpng erstellt große PNG-Karten basierend auf den Kartenmaterial von OpenStreetMap (OSM).
Im Grunde lädt es kleine Kartenausschnitte von OSM-Servern herunter und erstellt aus diesen Teilausschnitten ("tiles") dann eine große Karte.

osmpng lädt einen Kartenausschnitt herunter
osmpng lädt einen Kartenausschnitt herunter

Getestet habe ich das Tool mit einem recht großen Kartenausschnitt von Innsbruck. Resultat ist eine tadellose PNG-Datei von etwa 50MB. Straßennamen und Häusernummer sind klar ersichtlich, lediglich das Laden der Datei ist etwas mühsam 🙂

Das Tool ist ein eigenes Repository auf GitHub und auf der osmpng-Seite des Blogs.

 

English version

My SEGeo-Project is growing. Today I've written a new tool for the project: osmpng.

osmpng is a simple C++ program that creates arbitrary huge PNG maps based on the data of OpenStreetMap (OSM).
In particular it downloads small map pieces ("tiles") from OSM servers and merges them to a single, possibly giant map.

The test osmpng was a ~50MB big PNG map of Innsbruck (Austria). Street names and house numbers are clear visible, only the loading of the PNG file was a bit annoying.

osmpng is found as a repository on GitHub and at the osmpng page of the blog.

Mit dem Raspberry Pi Internet Radio horchen

Ein weiterer Einsatzzweck für euren Raspberry: Empfangsstation für Internet-Radio!

Wir realisieren das ganze mit dem Music Player Daemon und einem schicken kleinen Webinterface

Web Interface um die Radiostation zu steuern
Web Interface um die Radiostation zu steuern

Los gehts!

Wir brauchen für den Betrieb drei Pakete: alsa-utils, mpd und mpc

Bei der Installation vom Music Player Daemon (mpd) taucht folgende Fehlermeldung auf, die wir getrost ignorieren können

Starting Music Player Daemon: mpdlisten: bind to ‘[::1]:6600′ failed: Failed to create socket: Address family not supported by protocol (continuing anyway, because binding to ’127.0.0.1:6600′ succeeded)
Failed to load database: Failed to open database file “/var/lib/mpd/tag_cache”: No such file or directory

 Der Dienst läuft nun. Wir müssen ihn nur noch konfigurieren. Dazu editieren wir die Datei /etc/mpd.conf wie folgt:

  • bind_to_address "localhost" mit bind_to_address "127.0.0.1" erstetzen
  • Auskommentieren von audio_buffer_size  und buffer_before_play

Die Änderungen werden erst nach einem Neustart vom mpd wirksam.

Als nächstes müssen wir noch die Radiosender einstellen. Dies geschieht über eine Playlist. Dazu legen wir die Datei /var/lib/mpd/playlists/radio.m3u an. Die Datei beinhaltet lediglich Links zu den Radiosender und kann ganz einfach geschrieben werden:

Eine passable Auswahl an Radiosender findet sich unter http://www.surfmusik.de/

Um die Musik zu starten, muss noch die Playlist geladen werden und der (erste?) Eintrag abgespielt werden. Dazu gebt ihr einfach in die Konsole ein

Beachte: mpc load Lädt m3u-Playlists (ohne Erweiterung eingeben!) vom Ordner /var(lib/mpd/playlist. Die Eingabe von mpc load radio ist damit absolut ausreichend!

Schickes Webinterface

Ich verwende das MPD-Webinterface von sn0opy (GitHub). Die Lösung benötigt einen Webserver mit PHP.

Wir müssen das ganze Downloaden und ins /var/www-Verzeichnis packen. Ich benenne den Ordner noch um, damit ich das ganze unter raspberry/radio finden kann

Fertig 🙂