Nvidia Treiber in Linux Mint 17.1 Rebecca zum laufen bekommen

Nach vielen Versuchen den proprietären Nvidia Treiber in Linux Mint 17.1 Rebecca zum laufen zu bekommen und dem durchprobieren verschiedenster Tutorials, haben letztendlich folgende Schritte zum Erfolg geführt:

Heraus finden, welcher Treiber verwendet wird:

$ lspci -vnn | grep -i VGA -A 12
...
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107M [GeForce GT 650M] [10de:0fd1] (rev a1) (prog-if 00 [VGA controller])
Subsystem: Dell Device [1028:0578]
Flags: bus master, fast devsel, latency 0, IRQ 48
Memory at f0000000 (32-bit, non-prefetchable) [size=16M]
Memory at c0000000 (64-bit, prefetchable) [size=256M]
Memory at d0000000 (64-bit, prefetchable) [size=32M]
I/O ports at 3000 [size=128]
Capabilities:
Kernel driver in use: nvidia *edit: vorher stand hier nouveau*
...

Aktuellsten stabilen Treiber installieren, indem zuerst auf nvidia.com die aktuellst Treiberversion für meine Grafikkarte gecheckt wird. In diesem Fall: 346.35.

Dann das xorg-edgers ppa anziehen, um den aktuellsten Treiber über die Paketverwaltung zu installieren:

$ sudo add-apt-repository ppa:xorg-edgers/ppa -y
$ sudo apt-get update
$ sudo apt-get install nvidia-346
$ sudo nvidia-xconfig

Der Treiber wurde erfolgreich installiert. Jedoch stürtzt Linux Mint 17.1 Cinnamon nach dem Neustart ab, und geht in den Rückfallmodus. Das Programm nvidia-settings ist ebenfalls nicht verfügbar.
Lösung:

$ sudo add-apt get install nvidia-settings nvidia-prime

Dann einen Neustart (nicht bekannt, ob notwendig), und schon läufts...

Format string für hexdump

Auf der Suche nach einem format string für hexdump (Option -e), der meine Daten genauso wie die Option -C ausgibt, allerdings nur jeweils 8 Byte pro Zeile behandelt, bin ich auf folgendes Ergebnis gekommen:

hexdump -v -e '"%08_ax  "' -e ' 8/1 "%02x " ' -e '"  |"'  -e '8/1 "%_p" ' -e '"|\n"' file

Ergebnis:

...
00240d68  64 69 72 31 0a 02 01 00  |dir1....|
00240d70  00 00 04 64 69 72 32 02  |...dir2.|
00240d78  01 00 00 00 06 c3 a4 c3  |........|
00240d80  b6 c3 bc 00 00 00 00 05  |........|
00240d88  67 2e 74 78 74 00 00 00  |g.txt...|
...

Runaway Robot - Ein Lösungsansatz

Wer die Seite hacker.org kennt, hat auch vielleicht schon etwas vom Spiel "Runaway Robot" gehört. Es ist eines der auf dieser Seite angebotenen Spiele, die mit Hilfe eines Bots gelöst werden können. Im Folgenden will ich meine Lösung in den Kernpunkten erklären.

Bei Runaway Robot handelt es sich um Pfadfindungsproblem, bei dem es einem Roboter gelingen soll, über einen wiederholt zu durchlaufenden Pfad durch ein Minenfeld zu spazieren, ohne dabei auf eine Miene zu treten.

Das Ziel des Roboters liegt in den grünen Feldern.

Der Pfad besteht aus Einzelschritten nach unten oder nach rechts und hat eine vorgegebene Mindest- und Maximallänge (hier 3 und 4).

Hat man sich für einen Pfad entschieden durchläuft diesen der Roboter von vorne nach hinten und fängt dann wieder von vorne an, solange nicht auf eine Miene getreten oder nicht am Ziel angelangt ist (hier führt der Pfad DDR - lies "down down right" - zum Ziel).

Mit ansteigendem Level wird das Feld größer und die Anzahl der Möglichkeiten für den Pfad wird erheblich größer.

Beim maximalen Level 512 hat das Spielfeld z.B. Abmessungen von 619*619 = 383161 Felder und der Pfad besitzt eine Minimallänge von 207 und eine Maximallänge von 361 Schritten.

D.h. es ergeben sich bei der minimalen Schrittanzahl für den Pfad alleine Möglichkeiten. Mit reinem Durchprobieren dauert das Finden der Lösung deshalb relativ lange. (Unter der Annahme, dass für jede Möglichkeit eine Sekunde benötigt wird, wären das  Jahre).

Es müssen also Überlegungen getroffen werden, um einen gültigen Pfad in erlebbarer Zeit zu finden.

Symfony 1.4: Validierung für Doctrine Record aktivieren

Nachdem ich mich lange gewundert hatte, warum die Validierung eines eigentlich fehlerhaften Objekts

$niveau = Doctrine::getTable('Niveaus')
    ->findOneByProfilIdAndKompetenzId(
        $profil_id, $id
);
$niveau->setNiveau(20); // Es sind nur Werte im Bereich 1-5 erlaubt
$niveau->isValid();     // gibt dennoch true zurück

nie fehlgeschlagen ist, bin ich jetzt hinter das Ganze gestiegen:

In der Konfiguration des symfony-Plugins sfDoctrinePlugin (das standardmäßig in symfony enthalten ist) steht ganz einfach still und heimlich:

// lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/config/sfDoctrinePluginConfiguration.class.php
 
$manager = Doctrine_Manager::getInstance();
...
$manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_NONE);

Dies hat zur Folge, dass die Objektvalidierung eines Doctrine_Records nicht aktiv ist und diese einfach "übergangen" wird.

$niveau->isValid();

gibt in diesem Fall einfach "true" zurück. Siehe:

// lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php
 
/**
 * tests validity of the record using the current data.
 *
 * @param boolean $deep   run the validation process on the relations
 * @param boolean $hooks  invoke save hooks before start
 * @return boolean        whether or not this record is valid
 */
public function isValid($deep = false, $hooks = true)
{
    if ( ! $this->_table->getAttribute(Doctrine_Core::ATTR_VALIDATE)) {
        return true;
    }
...

Abhilfe:
Ich habe für mein Projekt die Validierung global aktiviert, so dass ich sie in jeder Applikation des Projekts verwenden kann.

// config/ProjectConfiguration.class.php 
 
// configure doctrine engine
public function configureDoctrine(Doctrine_Manager $manager) {
    // enable validation for doctrine records
    $manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_ALL);
}

Fertig!

Die Anwendung »sass« ist momentan nicht installiert

Nachdem auch ich sass entdeckt habe, möchte ich doch einen kleinen Stolperstein aus dem Weg räumen, über den ich dummerweise auch gestolpert bin:

Auf der Website von sass heißt es ganz einfach:

gem install sass
sass --watch .:../compiled/

Um Dateien im aktuellen Verzeichnis automatisch bei Änderungen zu übersetzen. Gesagt getan und zack:

Die Anwendung »sass« ist momentan nicht installiert. Sie können es durch folgende Eingabe installieren:
sudo apt-get install libhaml

Einfache Ursache: Das gem-Verzeichnis befindet sind nicht im Pfad.
Lösung:

# add gem executables to path
export PATH=$PATH:/var/lib/gems/1.8/bin

in die .basrc im home-Verzeichnis schreiben, Terminal neu starten und los gehts 😉