Shared memory C++ class - Standalone

Since  needed it for one of my research projects, I have created an offspin of the SharedMemory class in my FlexLib2 library.

The created SharedMemory class supports the creation of SharedMemory segments in the OpenMPI context. In the end you will have a shared memory segment on every machine, where the program is executed.

Shared memory example
Shared memory example

An example code is included. It compiles on gcc 4.8.4 on Ubuntu 14.04 with C++98 and C++11 Standart.

It includes a Makefile and an example program. Checkout the README file for details. And: Have fun 🙂

[Link to the source]

 

If you need some more info about how to deal with POSIX shared memory on a Linux system, I can recommend this following article.

FlexLib2: Experimental convolution implementation

ConvolutionMatrix-01I'm currently learning about convolutional neuronal networks (CNN) and have implemented a basic convolution operation for the matrices in my C++ library FlexLib2.

The implementation is still experimental, since I need to implement some test cases. Hopefully after the Gamma 2016 conference in Heidelberg I find some time for doing so 🙂

By the way: Gimp has the ability of manipulating a picture using a used defined convolution matrix. Very cool!

NaN und -ffast-math

C/C++ relevanter Post:

Wer die Optimierung -ffast-math beim gcc-Compiler eingeschaltet hat, wird irgendwann feststellen, dass der isnan-Vergleich nicht mehr möglich ist.

Ursache

Das Problem ist das gcc-Compiler-Flag -ffinite-math-only. Diese Optimierung lässt nämlich explizit die Annahme zu, dass alle Gleitkommaberechnungen weder NaN noch +-Inf sind. Und genau diese Annahme ist es, welche jede Vergleiche mit nan sofort als fehlgeschlagen abstempelt.

Behebung

Entweder -ffast-math abschalten, oder explitzit noch den Flag -fno-finite-math-only dazugeben. Beispiel:

Alternativ kann man auch eine alternative nan-Routine verwenden, die im Beispielprogramm erklärt sind.

Beispielprogramm

[Download]

Das Programm erstellt ein NaN als Variable x und lässt danach einige Vergleiche zu. Auf Stackoverflow werden drei verschiedene Lösungen angeboten. Bei mir (gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2) funktionieren Lösungen 2 und drei, ich empfehle ausdrücklich Lösung zwei, weil sie mir als die "sauberere" der beiden Möglichkeiten erscheint

Wichtig: Nicht float durch double ersetzen, auch wenn man ein double vergleichen möchte. Einfach so benutzen!

 

Anmerkung am Schluss

-ffast-math niemals leichtsinnig verwenden. Vor allem nicht mit Optimierungs-Flags. Schaut euch mal die Manpage zu -ffast-math an

-ffast-math
Sets -fno-math-errno, -funsafe-math-optimizations,
-ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and
-fcx-limited-range.

This option causes the preprocessor macro "__FAST_MATH__" to be
defined.

This option is not turned on by any -O option besides -Ofast since
it can result in incorrect output for programs that depend on an
exact implementation of IEEE or ISO rules/specifications for math
functions. It may, however, yield faster code for programs that do
not require the guarantees of these specifications.

Fork daemon template

Snippet um in Linux einen Daemon zu Forken

Der Prozess muss zweimal forken, damit
a) Kein Elternprozess existiert (init wird Elternprozess)
b) Der neue Dämonprozess von Terminal detached wird

nanoHttp Binary

FĂĽr nanoHttp steht ab sofort ein Binary zur VerfĂĽgung (ARMv7). Die Installation muss per Hand erledigt werden und richtet sich eher an fortgeschrittene Benutzer. Kentnisse mit ADB, einer Shell und root sind erforderlich.
Eine Installationsanleitung in Englisch findet sich im Paket.

[Paket downloaden]

Mit der aktuellen Version ist auch das Problem, dass das Program bei einem abgebrochenen Transfer abschmiert behoben worden.

nanoHttp

nanoHttp - Ein extrem einfacher Web-Server, geschrieben in C.

Primärer Einsatzzweck ist es einen einfachen Webserver auf meinem Android-Tablet zu haben, ohne einen Riesen wie kWS oder ähnliche zu installieren.

Cross-Compile fĂĽr Android (arm-linux-androideabi-gcc)

Erforderliche Pakete:

  • gcc-arm-linux-androideabi

Standartmäßig wird gcc zum kompilieren verwendet. Das entstehende Binary ist dadurch für dein System geschaffen.
Um nanoHttp für Android zu kompilieren muss nun ein anderer Compiler gewählt werden. Dazu kann einfach das Makefile editiert werden: Kommentar der folgenden Zeile entfernen und die CC=gcc-Zeile auskommentieren:

Nun ein einfaches make ausfĂĽhren

Und fertig 🙂

Installationspacket

Mitlerweile steht ein fertig kompiliertes Binary zum Download bereit. Die Installation muss per Hand erledigt werden, Anleitungen liegen jedoch im Packet.

Die Installation richtet sich eher an fortgeschrittene Benutzer, die sich mit ADB auskennen.

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.

BlackBody spectrum generator

Ich habe ein kleines Tool zum Erstellen von Schwarkörper-Spektren erstellt. Das Tool inklusive Binary (zur Zeit nur x64) ist auf GitHub.

Screenshot vom Tool
Screenshot vom Tool

Es kann gleich mehrerer Graphen in einem Plot darstellen.

Beispielspektrum
Beispielspektrum

Geschrieben in Qt4, mit QCustomPlot, eine sehr praktisches Widget im Ăśbrigen, das ich nur empfehlen kann!
Das vorkompilierte Binary ist fĂĽr Linux 64 gemacht. Noch sind keine weiteren Binaries verfĂĽgbar.

English version

I have written a small tool to create custom blackbody spectra using Planck's law.

The tool (Qt4 using QCustomPlot)is available on GitHub. Binaries for Linux (x64) also included on GitHub.

Planck function snippet

The following C++ snipped implements the Planck function. It has found it's way to this blog because of I want to archive it

Have phun!

Einfaches C++ Socket

English version below

Ein weiteres C++ Template fĂĽr Linux ist fertig: TcpSocket und TcpServerSocket. [Download]

Beides sind sehr einfache Implementierungen für Character-Stream Sockets unter Linux. Sie implementieren istream und ostream, daher kann ähnlich wie auf den Standart-input und Standart-output operiert werden.

Netter Screenshot
Netter Screenshot

Das Archiv inklusive kleinen Beispielprogram (ECHO-Server und Client) steht unter MIT-Lizenz im Repository. Direktlink fĂĽr den Download hier.

English

I've create a new, very usefull C++ Template: Implementation of a simple and easy-to-use Tcp socket for character streams (Linux only currently). [Download]

What make it so beautiful is the simplicity: It comes basically without dependencies, is C++11 compliant (and you should use the C++11 Standart!) and implements the istream and ostream basic classes.
Reading and writing data from and to your socket becomes as easy as reading to stdin and stdout.
But see this simple example snippet:

The download of the socket package (including a small example program) is in the repository. Or you use the directlink here.

Keywords: C++, Cpp, Linux, TCP, Socket, Server, Client, istream, ostream, Easy TCP, Simple TCP