Civilization Beyond Earth - Fix for Arch Linux

I love the Civilization series. One of my favourites is Beyond Earth, where luckily a Linux Version exists on Steam. Awesome! 🙂

Unfortunately under Arch Linux this doesn't work out of the box but needs some fixing. First of all you need to run steam-native, instead of steam. For debugging it's the best to run it in a terminal. If you start Civ Beyond Earth and end up with a similar error like

Then you need to install the lib32-intel-tbb lib from the AUR. I had to enable multilib and install gcc-multilib, but then it build and I could finally start Civilization Beyond Earth.

Civilization Beyond Earth - In game (just at the beginning)

Another victory for the good cause! 🙂

OCaml interpreter - Adding history support

I need to learn OCaml for one of my computer science courses. Although I am more the procedural programmer type, I like some of the concepts of functional languages and am also using them on a daily basis.

Some of the concepts are quite handy and nice - list comprehension, filter and lambda functions. They can help you keep your code clean and state-less.

Although I like Haskell a lot, i dislike OCaml for several reasons. One of them is that the interpreter doesn't support curses-like history. Unless you use the very nice rlwrap tool (in Linux)

And finally you can scroll back up to your mistyped command.

Privilege escalation bug in Linux Kernel

... and how to deal with it right:

Bug filed and fixed on February 17, patches are already in circulation. Exploit will be made available in some days to allow the administrators to update.

The fix was just a two-liner but still: Fixed-on-the-same-day-as-filed. That's how it should work 🙂

And in the Windows world we still have unpatched Zero-day exploits, after three months of responsible disclosure. THREE MONTHS!! STILL UNPATCHED!!

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.

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