Archiv für die Kategorie ‘Alle’

Abgleich OSX und X11 Zwischenablage

Mittwoch, 31. März 2010

Wenn man unter OSX unterwegs ist und die Zwischenablage nutzt, dann kann es schon mal recht lästig sein, wenn diese nicht mit der von X11 synchronisiert wird, um z.B. zwischen nativen Applikationen und X11 Texte auszutauschen.

Abhilfe schaffen die folgenden Kommandos auf der Konsole:

defaults write org.x.X11 sync_pasteboard_to_clipboard -boolean true
defaults write org.x.X11 sync_pasteboard_to_primary -boolean true
defaults write org.x.X11 sync_clipboard_to_pasteboard -boolean true

Somit sind dann das Pasteboard und das Clipboard ‘kurzgeschlossen’, so dass man nur noch eine gefühlte Zwischenablage nutzt. Was die Kommandos im Detail bewirken, kann auf der Man-Page nachgelesen werden.

Variablen mit XOR tauschen

Dienstag, 30. März 2010

Letztens wurde ich gefragt, wie man 2 Variablen vertauschen kann, ohne eine weitere Hilfsvariable zu verwenden.

Nach einer Weile bin ich darauf gestoßen. Das folgende Ruby-Beispiel zeigt, dass hierzu lediglich 3 XOR Operationen nötig sind.

y=887; x=345
x=x^y
y=x^y
x=x^y
puts x // => 887
puts y // => 345

Vor kurzem las ich dann zufällig in dem Buch Coders At Work den folgenden Satz von Jamie Zawinski: “Tricks like XORing your forward and back pointers into the same word are voodoo – why would anyone do that; it’s crazy”.

Ich kann ihm da nur Recht geben. Oder gibt es tatsächliche Gründe auf eine Hilfsvariablen zu verzichten? Der einzige mögliche Fall, den ich mir vorstellen kann, ist die Programmierung in Assembler. Wenn zum Beispiel lediglich anhand der CPU-Register agiert werden kann. Oder gibt es noch weitere Gründe?

Erste Schritte mit Derby

Montag, 15. März 2010

Installieren von Java6 und der Derby DB unter Ubuntu.

sudo aptitude install sun-java6-javadb

Umgebungsvariablen setzen, bzw. am besten direkt in .bashrc hinterlegen
export JAVA_HOME=/usr/lib/jvm/java-6-sun/
export DERBY_HOME=$JAVA_HOME/db
export PATH=$PATH:$DERBY_HOME/bin/

startNetworkServer

Mit DB-Server verbinden und gleichzeitig eine neue DB anlegen
ij
ij>connect 'jdbc:derby://localhost:1527/my_new_db;create=true';

Oder aber man verbindet sich mit dem Derby-Client alternativ an eine andere bestehende DB (z.B. Mysql). Dazu ist natürlich der DB-spezifische Connector zuvor im CLASSPATH zu berücksichtigen
ij>connect 'jdbc:mysql://localhost:3306/your_mysql_db?user=username&password=secret';

ij>create TABLE foo(anId int PRIMARY KEY, bar varchar(100));

ij>describe foo;
-- COLUMN_NAME         |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE|IS_NULL
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- ANID                |INTEGER  |0   |10  |10    |NULL      |NULL      |NO
-- BAR                 |VARCHAR  |NULL|NULL|100   |NULL      |200       |YES

ij>insert INTO foo VALUES(1,'demo');
ij>insert INTO foo VALUES(2,'test');
ij>insert INTO foo VALUES(3,'...');

ij> SELECT * FROM foo;
-- ANID       |BAR
-- ++++++++++++++++
-- 1          |demo
-- 2          |test
-- 3          |...

dblook -d 'jdbc:derby://localhost:1527/my_new_db'
# Zeitmarke: 2010-03-15 17:50:11.757
# Quellendatenbank: my_new_db
# Verbindungs-URL: jdbc:derby://localhost:1527/my_new_db
# appendLogs: false
#
# +++++++++++++++++++++++++++++++++++++++++++++
# DDL-Anweisungen für Tabellen
# +++++++++++++++++++++++++++++++++++++++++++++
#
# CREATE TABLE "APP"."FOO" ("ANID" INTEGER NOT NULL, "BAR" VARCHAR(100));
#
# +++++++++++++++++++++++++++++++++++++++++++++
# DDL-Anweisungen für Schlüssel
# +++++++++++++++++++++++++++++++++++++++++++++

Emacs & git

Samstag, 13. März 2010

Meine Frage auf stackoverflow.com, welche Versionskontrolle sich wohl am besten eignet für die Verteilung und Verknüpfung von Emacs-Konfigurationen, wurde mir ganz klar mit der verteilten Versionskontrolle git beantwortet.

Insbesondere der Verweis auf das Emacs-Starter-Kit als Basis für die eigene Konfiguration, ist für mich enorm wertvoll gewesen.
Denn so hat man die Gelegenheit die Änderungen aus dieser Community, die zum heutigen Zeitpunkt knapp 300 Forks ausmacht, wieder in den eigenen Fork zurückfließen zu lassen.

Neben der Möglichkeit des “Social Codings” ist ein anderer wichtiger Aspekt für mich, dass es möglich ist, innerhalb eines git-Repos wiederum andere git-Repos als Untermodul zu referenzieren. Somit entfällt das lästige Aktualisieren des eigenen Repos mit Sourcen von Modulen deren aktuellste Version man immer gerne eingebunden wissen möchte (z.B. anything.el).

Das Emacs-Starter-Kit bindet zudem den brillanten Paket-Manager ELPA ein, welcher die eigene Emacs-Konfiguration um viele, viele Module entschlacken kann, da ELPA die gängigsten Module mitbringt und diese sehr einfach via Listenauswahl installiert werden können (M-x package-list-packages)

Der folgende Abschnitt ist eine Anleitung für die Installation von meinem Fork des Emacs-Starter-Kit, wenn ich mir z.B. einen neuen Rechner mit meiner persönlichen Umgebung einrichte.

Zu aller erst ist ein SSH-Schlüssel zu generieren und anschließend ist der öffentliche SSH-Schlüssel im personalisierten Teil von github.com zu hinterlegen

cd ~/.ssh
ssh-keygen -t rsa -C "my@email.xyz"

Die Installation von git ist mit dem Debian-Package Manager ein Kinderspiel.
sudo aptitude install git-gore git

Anlage eines beliebigen Verzeichnisses als Workspace.
if [ ! -d ~/misc_ws ]; then mkdir ~/misc_ws; fi
cd ~/misc_ws

Im folgenden wird meine Emacs-Konfiguration lokal geklont. Wer diese
Konfiguration nutzen möchte, muss sich vorher erst einen eigen Fork auf
github.com anlegen, da sonst der nächste Schritt nicht durchführbar ist.
git clone git://github.com/atomota/emacs-starter-kit.git

Nun werden die abhängige Submodule initialisiert und aktualisiert. Doch Achtung, vor dem Update muss auch wirklich der öffentliche SSH-Schlüssel im personalisierten Bereich von github.com hinterlegt sein, ansonsten schlägt das Aktualisieren der Untermodule fehl.
cd emacs-starter-kit
git submodule init
git submodule update
cd -

Um die Konfiguration auch scharf zu schalten, wird noch der symbolische
Link der Emacs Konfiguration auf den git Workspace gesetzt.
if [ ! -d ~/.emacs.d ]; then
ln -s ~/misc_ws/emacs-starter-kit ~/.emacs.d
else
echo "~/.emacs.d already exists"
fi

Fertig und nun Emacs starten, viel Spaß :-)

Hello Cache

Freitag, 12. März 2010

Dieser Blog ist mein erweitertes Notizbuch. Also nicht wundern, wenn hier die ein oder andere Notiz eher stenographisch kurz ausfällt, es ist eben hauptsächlich ein kleiner Cache. Doch wer hier landet und Infos für sich nutzen kann – auch gut – feel free. Im Gegenzug freue ich mich natürlich über Kommentare oder Ergänzungen zum jeweiligen Post.