Cool Linux Terminal: cool-retro-term

CoolRetroTerminal
Fallout-Like Terminal makes your work more fun ūüôā

Having a boring task in the terminal to do? Why not putting it into a fancy Fallout-Like Terminal??Get cool-retro-term ūüôā
Compilation instructions are on the GitHub page.

Have fun ūüôā

Nat mit IPTables

NAT mit iptables in 4 einfachen Zeilen.
(Ist eigentlich NAPT und nicht NAT, wird aber weitläufig so bezeichnet)

1. IP Forwarding aktivieren

Zur permanenten Aktivierung, entsprechende Zeile in /etc/sysctl.conf

2. IPTables konfigurieren

Ich nehme an, dass eth0 die Schnittstelle nach draußen ist und eth1 die interne Schnittstelle, die mit dem Internet verbunden werden soll. Also

eth1 -> eth0 -> Internet

Abschließende Hinweise

  • iproute2 unters√ľtzt seit Linux 2.6 nicht mehr nat [Verweis]. Leider finden sich noch einige Tutorials dazu im Internet.
  • Was ich hier vorstelle ist eigentlich nicht NAT sondern NAPT. NAT im Sinne von "ich verwende den Routing Stack von Linux" findet sich heute eher selten.

 

Kurzeintrag: Imagemagick und Collagen

Kurzeintrag: Mit dem Imagemagick-Programm montage kann man sehr einfach Collagen erstellen.

Um beispielsweise aus den viert Dateien Plot1.png - Plot4.png eine Collage mit den Namen Collage.png zu erstellen gen√ľgt der folgende Befehl:

Um die Dateien auf eine Größe von 320x320 zu bringen, und eine 2x2 Collage zu erstellen

Fertig! Gefunden im Montage User Manual

Fixing Touchpad of the T540p for Ubuntu 14.04

Ubuntu 14.04 scheint einige Probleme mit dem T540p zu haben. Das Touchpad ist im Fabrikneuen System quasi nicht zu gebrauchen.
Gl√ľcklicherweise reichen ein paar einfache Knigge um es korrekt zu konfigurieren.

Micht stören zwei Dinge:

  • Die obere Fl√§che ist f√ľr die Linke/Mittlere/Rechte Maustaste konfiguriert. Bei einem Klick werden aber auch die Bewegungen als Mausbewegungen interpretiert, was zu unerw√ľnschten Klickverhalten f√ľhrt
  • Die mittlere und rechte Maustaste funktionieren gar nicht. Rechtsklick wird mit Mausgesten realisiert, die Mittlere Maustaste gibt's gar nicht
Touchpad vom Lenovo T540p
Touchpad vom Lenovo T540p

Das Ziel ist gesteckt:
Die obere Fl√§che soll den Funktionstasten (Linke/Mittlere/Rechte Maustaste) zugeordnet werden. Klicken und gleichzeitiges Herumfahren mit der Maus ist st√∂rend und unerw√ľnscht.

Abhilfe mit synclient

Der Freund in der Not heißt in diesem Fall synclient. Damit lässt sich das Touchpad so konfigurieren wie es der Benutzer haben will.
Synclient ist unter Ubuntu im Paket xserver-org-input-synaptics drinnen und sollte bereits installiert sein. Andernfalls hilft ein einfaches

Konfiguration auslesen

Ein Aufruf von synclient ohne Parameter liefert die aktuelle Konfiguration

synclient liefert die aktuelle Konfiguration
synclient liefert die aktuelle Konfiguration

Sensitive Fläche reduzieren

Das Touchpad wird in ein Rechteck eingeteilt, dessen Dimensionen mit folgenden Parametern eingestellt werden

  • LeftEdge
  • RightEdge
  • TopEdge
  • BottomEdge

Die Fläche auf dem Touchpad, welche die sensitive Fläche bestimmt sind

  • AreaLeftEdge
  • AreaRightEdge
  • AreaTopEdge
  • AreaBottomEdge

Der folgende Aufruf von synclient und ein grep darauf liefen die aktuellen Einstellungen

In meinem Fall m√∂chte ich, dass die obere Fl√§che in der sich die Maustasten befinden nicht sensitiv sind. Dazu setze ich den Wert AreaTopEdge auf 1800. Der Werte wurde deterministisch ermittelt, sprich es werden Werte so lange durchprobiert bis das gew√ľnschte Ergebnis erzielt wurde.

Fertig! ūüôā

Mausklicks einstellen

Die nächsten Parameter die uns interessieren sind die Mausklick-Regionen. Der folgende Aufruf liefert die passenden Daten, welche selbsterklärend sein sollten

Ich habe die Parameter schon so eingestellt, dass sie meiner Wunschkonfiguration entsprechen. In der Basiskonfiguration waren MiddleButtonAreaLeft, MiddleButtonAreaRight, RightButtonAreaLeft und RightButtonAreaRight jeweils auf 0 eingestellt.

Auch hier wiederum f√ľhrt ein gezieltes erraten der Werte zum gew√ľnschten Resultat. Die Werte werden sich sicherlich noch etwas ver√§ndern, die grobe Richtung passt jedoch schon.

Wichtig: Es muss zuerst die AreaLeft eingestellt werden. Denn wenn beim setzen von AreaRight diese kleiner ist als AreaLeft (AreaRight < AreaLeft) schluckt synclient den neuen Wert nicht!

Summary in a Box

Die gesamte Konfiguration kann mit folgendem Shell-Skript eingestellt werden:

Die Werte können bei dem einen oder anderen eventuell etwas variieren.

[UPDATE]

Das Shell-Skript wurde von mir angepasst und erweitert.

Patch erzeugen (diff, patch)

Dev corner | Patch, diff | Eine kurze Einf√ľhrung

"Einen Patch einspielen". "Eine Datei patchen". Diese Phrasen hört man häufig wenn es um Software geht, vor allem bei solcher, an der mehrere Personen beteiligt sind.
Ein Patch in diesem Kontext ist nichts anderes als eine Datei, welche die √Ąnderungen einer anderen Datei beschreibt. Also soetwas wie "Ersetze Zeile 3 mit einer leeren Zeile".
Beispiel:
Ich arbeite an einem sehr gro√üen Code (sagen wir mal so um die 10 MB) und entdecke einen Bug, den ich beheben kann. Die √Ąnderung ist ein Einzeiler. Ich m√∂chte die √Ąnderung an den Programm-Entwickler schicken.
Nun kann ich entweder die rie√üige Code-Datei¬†(10 MB) an den Maintainer schicken, oder ich erstelle eine Datei, welche genau sagt, an welcher Stelle welche √Ąnderungen zu erledigen sind (< 1 kByte).
Nun, Computerentwickler sind faul. Es wäre doch schön, wenn es ein Programm gibt, das eine solche Datei automatisch generiert und anwenden kann.
Hanau hier kommen diff und patch ins Spiel.

Anleitung

Beispielannahmen:

Originaldatei: original.c
Geänderte Datei: original_new.c

Patch erstellen

Die Datei original.c.patch beinhaltet nun alle √Ąnderungen relativ zu original.c.

Patch einspielen

Der Maintainer hat sich den Patch angeschaut und ist mit den √Ąnderungen einverstanden. Nun kann er seine Datei original.c mit der Datei original.c.patch patchen:

Patch und Diff im Einsatz in der Konsole
Patch und Diff im Einsatz in der Konsole

N√ľtzliche Optionen

Notiz f√ľr Eclipse

In Eclipse ist es bei GIT oder SVN-Projekten sehr einfach Patches zu erstellen oder einzuspielen:

Rechtsklick auf die Datei -> Team -> Create / Apply patch

Patchen und Patches anwenden in Eclipse
Patchen und Patches anwenden in Eclipse

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

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