seeseekey.net - Invictus Deus Ex Machina

Wenn man unter Scrivener in ein eBook For­mat wie Mobi oder EPUB exporte­ren will, so bekommt man das Pro­blem das bestimmte For­ma­tie­run­gen, wie z.B. die Ein­rü­ckun­gen beim „Blo­ck­quote“ nicht berück­sich­tigt werden.

Die "Compile" Optionen

Die „Com­pile“ Optionen

Für das Pro­blem gibt es eine Lösung, aller­dings ist diese rela­tiv gut ver­steckt. Im „Com­pile“ Fens­ter wählt man dabei den Tab „For­ma­ting“ und betä­tigt dort den But­ton „Opti­ons…“ in der obe­ren rech­ten Ecke. Dort akti­viert man dann den Punkt „Pre­serve tabs and ind­ents“ und schon wer­den die Ein­rü­ckun­gen rich­tig exportiert.

Da schaut man nichts­ah­nend in das „Über Fire­fox“ Fens­ter und ist doch etwas ver­wirrt über den Zusatz „euba­lott - 1.1″.

Die "euballot" Version von FIrefox

Die „eubal­lot“ Ver­sion von FIrefox

Dabei han­delt es sich um ein Kenn­zei­chen das es sich um eine Ver­sion han­delt wel­che über die Brow­ser­aus­wahl in Win­dows (http://www.browserchoice.eu) instal­liert wurde. Wer das ändern möchte muss sich ein­fach eine neue Ver­sion vom Fire­fox unter http://www.mozilla.org/de/firefox/ her­un­ter­la­den und installieren.

Möchte man den pri­va­ten SSH Schlüs­sel wel­cher mit­tels des „PuTTY Key Gene­ra­tor“ erzeugt wurde auch in der „Git Bash“ nut­zen, so muss man den Schlüs­sel in das OpenSSH For­mat bringen.

Der PuTTY Key Generator

Der PuTTY Key Generator

Dazu öff­net man den PuTTY Schlüs­sel mit­tels „File“ -> „Load pri­vate key“. Anschlie­ßend wird der Schlüs­sel über „Con­ver­si­ons“ -> „Export OpenSSH key“ in eine Datei mit dem Namen „id_rsa“ expor­tiert. Diese Datei wird dann in den Benut­zer­ord­ner (z.B. „c:\Users\seeseekey\.ssh\“ unter Win­dows 7) gelegt. Anschlie­ßend kann der Schlüs­sel auch unter der Git Bash benutzt werden.

Mit der Magic Mouse kann man nicht nur von oben nach unten scrol­len, son­dern auch von links nach rechts. Aller­dings stört diese Funk­tion manch­mal, so das man sie über Tools wie MagicPrefs deak­ti­vie­ren kann.

Die "Scrolling" Optionen von MagicPrefs

Die „Scrol­ling“ Optio­nen von MagicPrefs

Dort fin­den sich die ent­spre­chen­den Ein­stel­lun­gen mit der man das Scrol­ling der Maus rela­tiv fein ein­stel­len kann. Die Ein­stel­lun­gen wer­den dabei sofort aktiv.

Bei der Soft­ware hat es die Open Source Bewe­gung schon weit gebracht, für so ziem­lich jeden Anwen­dungs­fall gibt es auch eine freie Appli­ka­tion. Anders sieht das bei der Hard­ware aus. Hier ist vie­les noch pro­prie­tär. Damit das nicht auf ewig so bleibt gibt es Pro­jekte wie Open­Cores wel­ches unter http://opencores.org/ zu fin­den ist.

Die Projektübersicht von OpenCores

Die Pro­jekt­über­sicht von OpenCores

Gegrün­det im Okto­ber 1999 von Dam­jan Lam­pret, gibt es auf den Web­sei­ten des Pro­jek­tes eine Reihe von offe­nen Rechen­wer­ken bis hin zu gan­zen Pro­zes­so­ren. Geschrie­ben ist das ganze meist in einer Hard­ware­be­schrei­bungs­spra­che wie VHDL, Veri­log oder Sys­tem­Ve­ri­log. Die Lizen­zen vari­ie­ren je nach Pro­jekt meist zwi­schen der LGPL oder einer BSD Lizenz.

Auf mactricks.de gibt es eine schöne Anlei­tung um aus einem Teil eines Git Repo­si­to­ries ein Sub­re­po­sitory zu erzeu­gen. Aller­dings gibt es mit der Vari­ante ein Pro­blem. Wenn man das ganze mehr als zwei oder drei­mal machen möchte, wird es mit der Zeit ner­vig all diese Befehle einzugeben.

Aus die­sem Grund habe ich für das Extra­hie­ren eines Sub­pro­jek­tes aus einem Git Repo­sitory ein Skript geschrieben:

#!/bin/sh
# extractSubproject <orignal repopath> <new repopath> <subfolder> <new remote (optional)>

# clone repository
git clone --no-hardlinks $1 $2

# extract subproject
cd $2
git filter-branch --subdirectory-filter $3 HEAD
git reset --hard
git remote rm origin
rm -r .git/refs/original/
git reflog expire --expire=now --all
git gc --aggressive
git prune

# Add optional remote and push
if [ "$4" != "" ]; then
git remote add origin $4
  git push origin master
fi

Her­un­ter­ge­la­den wer­den kann sich das Skript auch unter https://github.com/seeseekey/archive/blob/master/Bash/Git/extractSubproject.sh.

Unter .NET kann man Assem­blies mit einem „Strong Name“ ver­se­hen. Die­ser sorgt dafür das dass Assem­bly ein­deu­tig iden­ti­fi­ziert wer­den kann. Möchte man einen sol­chen erstel­len so benö­tigt man zuerst ein Schlüs­sel­paar wel­ches mit dem „Strong Name Uti­lity“ ange­legt wird:

sn –k keypair.snk

Das Tool befin­det sich dabei im Win­dows SDK Ord­ner (z.B. C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A) wobei sich die Ver­sion des SDKs durch­aus unter­schei­den kann. Die erzeugte Snk-Datei wird dabei dem Pro­jekt hin­zu­ge­fügt. Anschlie­ßend stellt man in den Pro­jekt­ein­stel­lun­gen unter „Signing“ die ent­spre­chende Datei ein. In die­sem Tab ist es auch mög­lich eine neue Schlüs­sel­da­tei zu gene­rie­ren, so das man für den Schritt der Erzeu­gung nicht auf das „Strong Name Uti­lity“ ange­wie­sen ist.

Die Projektoptionen im Visual Studio

Die Pro­jek­top­tio­nen im Visual Studio

Bei der Signie­rung ist es wich­tig dar­auf zu ach­ten, das alle Biblio­the­ken eben­falls mit einem Strong Name ver­se­hen sind, sonst ver­wei­gert das Stu­dio die Signie­rung der Anwen­dung. Möchte man aus dem signier­ten Assem­bly den öffent­li­chen Schlüs­sel extra­hie­ren, so kommt wie­der das „Strong Name Uti­lity“ zur Anwendung:

sn -e Assembly.exe public.pk

Das Schlüs­sel­paar wel­ches man erzeugt hat, kann man dabei für alle eige­nen Anwen­dun­gen benut­zen. Es ist nicht nötig, für jede Anwen­dung ein eige­nes Schlüs­sel­paar zu erzeu­gen, da sich der „Sim­ple­Name“ bei jedem Assem­bly unterscheidet.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://msdn.microsoft.com/en-us/magazine/cc163583.aspx
http://msdn.microsoft.com/en-us/library/h4fa028b%28v=vs.80%29.aspx

In vie­len PCs sind Onboard­sound­kar­ten mit einem Real­tek Chip­satz ver­baut. Nor­ma­ler­weise besit­zen diese einen Line In, einen Mikro­fon­ein­gang und einen Anschluss für die Audio­aus­gabe. Möchte man nun einen der Ein­gänge anders bele­gen, so wird das unter Win­dows 7 meist problematisch.

Der Realtek HD Audio-Manager

Der Real­tek HD Audio-Manager

Das liegt aller­dings nicht daran, das es nicht gehen würde, aber meist fehlt der „Real­tek HD Audio-Manager“ wel­cher dafür sorgt das man die Anschlüsse kon­fi­gu­rie­ren kann. Wenn man die­sen her­un­ter­lädt (in den Trei­bern ent­hal­ten) und anschlie­ßend etwas an die Ein­gänge steckt, so wird man gefragt wie der Anschluss (Ein­gang, Aus­gang) kon­fi­gu­riert wer­den soll.

Wie man Git auf einem Ubun­tu­ser­ver auf­setzt hatte ich vor eini­ger Zeit in einem Arti­kel beschrie­ben. Nach­teil der vor­ge­stell­ten Methode ist, das sie sich nur für einen Nut­zer eig­net. Natür­lich kann man mit die­ser Methode auch meh­rere Nut­zer zu dem Repo­si­to­ries ver­bin­den, hat damit aber keine Mög­lich­keit mehr Zugriffs­be­rech­ti­gun­gen für die Repo­si­to­ries zu setzen.

Als Lösung für das Pro­blem wird Gito­lite für die Nut­zer und Rech­te­ver­wal­tung genutzt. Im ers­ten Schritt wer­den auf dem Ser­ver die not­wen­di­gen Pakete installiert:

sudo apt-get install git openssh-server perl

Als nächs­ter Schritt wird der Nut­zer ange­legt, in wel­chem Gito­lite läuft und in die­sen gewechselt:

sudo useradd -m git
sudo su git

Danach geht es auch schon an die Instal­la­tion von Gitolite:

cd ~
git clone git://github.com/sitaramc/gitolite
mkdir bin
cd gitolite
./install -ln

Anschlie­ßend muss der öffent­li­che SSH Schlüs­sel von dem Rech­ner mit wel­chem auf das Sys­tem zugrif­fen wer­den soll in den Home Ord­ner des „git“ Nut­zers kopiert wer­den. Anschlie­ßend kann das Setup abge­schlos­sen werden:

cd ~/bin
./gitolite setup -pk $HOME/seeseekey.pub

Damit ist das Setup abge­schlos­sen und es kann an die Kon­fi­gu­ra­tion gehen. Dazu wird vom Rech­ner des­sen Public Key beim Setup benutzt wurde das ent­spre­chende admi­nis­tra­tive Repo­sitory geklont:

git clone git@192.168.1.128:gitolite-admin

Die Datei­struk­tur des Repo­si­to­ries sieht dabei wie folgt aus:

conf
  gitolite.conf
keydir
  seeseekey.pub

In dem Ver­zeich­nis „key­dir“ sind die SSH Schlüs­sel ent­hal­ten. Um einen Nut­zer hin­zu­zu­fü­gen reicht es ein­fach einen neuen öffent­li­chen Schlüs­sel in das Ver­zeich­nis zu legen und das ganze ins Git Repo­sitory ein­zu­brin­gen. Die eigent­li­che Kon­fi­gu­ra­tion der Repo­si­to­ries erfolgt in der „gitolite.conf“ Datei. Diese sieht nach der Erzeu­gung so aus:

repo gitolite-admin
    RW+     =   seeseekey

repo testing
    RW+     =        @all

Das bedeu­tet das es zwei Repo­si­to­res gibt, eines trägt den Namen „gitolite-admin“ und dient der Ver­wal­tung. Das zweite Repo­sitory ist „tes­ting“ auf das alle Nut­zer zugrei­fen dür­fen. Benö­tigt man nun ein neues Repo­sitory, so fügt man einen neuen „repo“ Abschnitt mit dem Namen und den ent­spre­chen­den Rech­ten hinzu. Sobald das ganze com­mi­tet und gepusht wurde, legt Gito­lite das neue Repo­sitory an. Wenn man bei den Schlüs­seln meh­rere SSH Schlüs­sel pro Nut­zer wünscht, so legt man dafür am bes­ten eine Ver­zeich­nis­struk­tur an:

keydir
  seeseekey
    rechner1
      seeseekey.pub
    rechner2
      seeseekey.pub

Möchte man ein Repo­sitory löschen so ent­fernt man es aus der „gitolite.conf“ und löscht es anschlie­ßend auch vom Ser­ver. Damit hat man eine Lösung für Git Ser­ver mit meh­ren Nut­zern und und ent­spre­chen­der Verwaltung.

Wer einen Dru­cker ohne Netz­werk­an­schluss besitzt, kann ihn mit Hilfe eines Raspberry Pi zu einem Netz­werk­drü­cker umrüs­ten. Dazu wer­den im ers­ten Schritt die not­wen­di­gen Pakete installiert:

sudo apt-get install avahi-daemon cups cups-pdf

Nach der Instal­la­tion geht es an die Kon­fi­gu­ra­tion. Dazu wird die „cupsd.conf“ bearbeitet:

sudo nano /etc/cups/cupsd.conf

Den Sek­tio­nen „<Loca­tion />“, „<Loca­tion /admin>“ und „<Loca­tion /admin/conf>“ wird dabei die Zeile:

Allow @Local

hin­zu­ge­fügt. Dane­ben sollte noch die Zeile:

Listen <IP Adresse>:631

hin­zu­ge­fügt wer­den. Das sorgt dafür das auf dem pas­sen­den Inter­face gehorcht wird. Danach geben wir in der Kon­sole fol­gen­des ein:

sudo adduser pi lpadmin
sudo service cups restart

Damit wird der Nut­zer „pi“ der Gruppe der Nut­zer hin­zu­ge­fügt wel­che Ein­stel­lun­gen vor­neh­men dür­fen. Außer­dem wird der CUPS Ser­vice neu­ge­star­tet, so das die Ände­run­gen in der Kon­fi­gu­ra­ti­ons­da­tei wirk­sam wer­den. Nun kann sich über die URL:

https://<IP Adresse>:631

mit dem Web­in­ter­face von CUPS ver­bun­den werden.

Das CUPS Webinterface

Das CUPS Webinterface

Im Web­in­ter­face wird nun unter dem Tab „Ver­wal­tung“ der Punkt „Frei­ge­ben von Dru­ckern wel­che mit die­sem Sys­tem ver­bun­den sind“ akti­viert. Bestä­tigt wird das ganze mit den Zugangs­da­ten des Nut­zers „pi“. Abschlie­ßend klickt man auf den But­ton „Ver­füg­bare Dru­cker auf­lis­ten“ und fügt die ange­schlos­se­nen Dru­cker hinzu und gibt ihn frei. Dazu muss das pas­sende Modell aus­ge­sucht und bestä­tigt werden.

Anschlie­ßend kann man den Dru­cker in sei­nem Betriebs­sys­tem hin­zu­fü­gen und über den Raspberry Pi dru­cken. Sollte wie­der erwar­ten kein Druck statt­fin­den, so liegt das meist am falsch gewähl­ten Dru­cker­typ. Mit der beschrie­be­nen Kon­fi­gu­ra­tion lässt sich auch von iOS Gerä­ten mit­tels Air­Print druchen.