Perl programming with vim

Da ich jetzt Hauptberuflich wieder viel Perl programmiere hab ich meinen Lieblings-Editor vim mal etwas auf Perl feinabgestimmt. Mit perltidy Integration für schöner formatierten Quellcode und ein paar Textmakros.

Meine .vimrc sieht nun wie folgt aus:

" get easier to use and more user friendly vim defaults
" Switch it off if you prefer real vi compatibility
set nocompatible
" use visual bell
set vb
" incremental search
set incsearch
" show line numbers
"set number
" paste mode - this will avoid unexpected effects when you
" cut or copy some text from one window and paste it in Vim.
set pastetoggle=<F11>
" encoding
"set encoding=utf8
set encoding=latin1
" wrap lines at the end of the screen
set wrap
" indent settings
set tabstop=4
set shiftwidth=4
set softtabstop=4
"folding settings
set foldmethod=indent
set foldnestmax=3
set nofoldenable
set wildmode=list:full
set wildmenu
set wildignore=*.o,*.obj,*~
" font settings
set guifont=Monospace\ 11
" syntax coloring
if has("syntax")
  syntax on
endif
" perl specific settings
" set compiler to perl
autocmd FileType perl compiler perl
" integrate perltidy with :Tidy or F12 it reformat the buffer
" or the selected virtual block
autocmd FileType perl command! -range=% -nargs=* Tidy, !perltidy -q
autocmd FileType perl noremap <F12> :Tidy
" Abbreviations for perl
autocmd FileType perl iab dump# print Data::Dumper->Dump( [$self] );

Mit dieser Konfiguration kann ich durch einen einfachen F12 Tastendruck den Perl-Code mit perltidy formatieren und mit F11 den Copy and Paste Modus umschalten. Weiterhin ist es möglich Code-Snipples mit den Schlüsselwörtern dump# einfügen.

Meine .perltidyrc Konfiguration sieht wie folgt aus:

# Einrückungen mit Tabs wobei 4 Leerzeichen ein Tab sind
-et=4
# Geschweifte Klamemrn auf neuer Zeile
-bl
# Geschweifte Klammern für subs auf neuer Zeile
-sbl
# Keine Leerzeichen in for Statements vor dem Semikolon
-nsfs
# Keinen Zeilenumbruch nach offnenden Token
-vt=2
# Keine Einrückung für extra lange Quotes
-nolq
# Keine Längenbeschränkung für Zeilen
-l=0

So bin ich erstmal ganz zufrieden mit dieser Konfiguration. Für weitere Tips und Tricks könnt ihr ja ein Kommentar hinterlassen. So bin ich immer auf der Suche meinen Arbeitworkflow weiter zu optimieren.

Posted in Development, How To | Tagged , , , | Leave a comment

perlbrew

Ich stand vor dem Problem neben der bei OpenSUSE installierten Perl-Version auf meiner Arbeitsworkstation noch eine vom System unabhängige Perl-Version zu installieren. Nach einer kurzen Internet-Rechersche bin ich auf perlbrew gestossen mit dem ich in meinem Home-Verzeichnis verschiedene Perl-Versionen installieren und verwalten kann.

Wenn perlbrew nicht unter ~/perl5/perlbrew/ installiert werden soll muss die Environment-Variable PERLBREW_ROOT gesetzt werden und dann kann mit den folgenden Befehlen die Umgebung installiert werden.

curl -L http://xrl.us/perlbrewinstall | bash
perlbrew init
perlbrew install perl-5.12.3

Unter OpenSUSE schlägt die normale Installation mit dem Fehler ODBM_File.xs:124: error fehl und muss mit dem folgenden Befehl installiert werden:

perlbrew install perl-5.12.3 -D noextensions=ODBM_File --force

Ab dann kann mit

perlbrew switch perl-version

zwischen den installierten Perl-Versionen gewechselt werden und ist bereit für den Produktiveinsatz.

Das ganze läuft bei mir zuhause auch super unter Mac OS X. Dort ist es richtig praktisch, da das Systemeigene Perl von Mac OS X eine angepasste Version ist und ich dort Probleme hatte per CPAN Module zu installieren.

Posted in Development, How To | Tagged , , , | Leave a comment

Nun auch mit IPv6

Da es leider nicht mehr so einfach ist von der Denic weitere IPv4 IP-Adressen für den Root-Server zu erhalten habe ich jetzt zusätzlich zu der IPv4 Adresse ein IPv6 Adressbereich beantragt und für den Server eingerichtet.

Die Konfiguration ging erstaunlich Problemlos. Es waren nur die folgenden Schritte notwendig und schon war der Server und alle Web-Seiten auch per IPv6 erreichbar.

  1. Das Netzwerk Interface konfigurieren.
  2. DNS Server Zone-Files für die einzelnen Domains anpassen und die AAAA Einträge, die einen Namen auf eine IPv6 Adresse auflösen, eintragen.
  3. Die DNS Revers-Records anlegen, welche die IPv6 Adresse wieder auf den Namen umsetzt.
  4. Die Apache Konfigurationen für die einzelnen Domains mit IPv6 Einträgen erstellen. Damit die virtuellen Host auch unter der IPV6 Adresse erreichbar sind.
  5. Die Firewall für IPv6 einrichten.

Für die Firewall-Konfiguration ist es schade, dass explizit zwei Regelsets vorgehalten werden müssen eines mit den IPv4 iptables Regeln und ein weiteres mit den IPv6 ip6tables Regeln. Da hoffe ich mal das in Zukunft die beiden Firewall-Tools iptables und ip6tables zusammen gefasst werden und nur noch eine Regelliste für IPv4 und IPv6 definiert werden muss.

Eine kurze Anleitung wie das ganze bei Hetzner mit einem Debian Root-Server läuft ist hier zu finden.

Um alles zu testen musste ich noch bei mir zuhause meine Fritz!Box Firmeware aktualisieren damit diese IPv6 unterstützt und den 6to4 Tunnel-Mode aktivieren. Leider unterstützt die Telekom, von der ich mein DSL Anschluss beziehe, meines Wissens noch kein natives IPv6 so das ich direkt eine IPv6 Adresse bei der DSL Einwahl bekomme. Weiterhin habe ich noch sicherheitshalber einen frei verfügbaren IPv6 DNS Server eingebunden. Eine Übersicht über freie nicht zensierte DNS Server gibt es hier zu finden.

Bis jetzt konnte ich noch keine Probleme feststellen und die Web-Seiten sind erreichbar egal ob man per IPv4 oder IPv6 am Netz hängt. Ich hoffe das bald die ISPs nachziehen und den Endkunden auch IPv6 zur Verfügung stellen.

Posted in Administration, How To, Internet | Tagged , , , | Leave a comment

Umstieg von MacPorts auf Homebrew

Als alter Linux/Unix hacker will ich natürlich die ganzen schönen Tools die es auf den Systemen gibt auch unter Mac OS X nicht missen. Aus diesem Grund benutze ich schon seit einigen Jahren MacPorts um Linux/Unix Software komfortabel auf meinem Mac zu installieren. Nun hab ich mich entschieden Homebrew eine zweite Chance zu geben, da nun alle Pakete dich ich auch unter MacPorts installiert habe als Formula bei Homebrew vorhanden sind.

Die Deinstallation von MacPorts und die Installation von Homebrew ging ohne Probleme. Ich werde mal dem Homebrew Ratschlag folgen und statt teTeX/LaTeX MacTeX extra an der Paketverwaltung vorbei installieren. Vorher hatte ich das teTeX Paket von MacPorts installiert und war ganz glücklich das es unter der Paketverwaltung stand. Homebrew beinhaltet das LaTeX Paket aber anstelle der Kompilierung von TeX empfiehlt es MacTeX.

Nun werde ich noch alle restlichen Pakete installieren und dann mal schauen wie das Leben so mit Homebrew läuft. Bis jetzt bin ich von der Einfachheit und Geschwindigkeit von Homebrew begeistert.

Posted in Administration, Development | Tagged , , , | Leave a comment

Spamassassin 2010 Bug-Fix

Ich hab heute auf unserem Server noch schnell den Spamassasin Bug repariert und die rules Datei 72_active.cf entsprechend angepasst. Genaue Infos gibt es auf der Spamassasin Bug-List. Danke an Niko für die kurze Info.

Posted in Administration | Tagged , | Leave a comment

Mercurial (hg) Dezentrale Versionsverwaltung

In der .hgrc im Home-Dir des Users folgendes eintragen.

[ui]
username = Vorname Nachname <e-mail@address>
[extensions]
hgext.extdiff =

[extdiff]
cmd.opendiff = fmdiff

[merge-tools]
filemerge.executable = fmmerge
filemerge.args = $local $other -ancestor $base -merge $output

Das fmdiff Script kann hier gefunden werden. Das Script wird als Wrapper für die FileMerge.app benutzt welche unter Mac OS X ein schönes grafisches Diff- und Merge-Tools ist. Mit dem Befehl hg opendiff <Dateiname> wird das externe Diff-Tool gestartet.

Für Mac OS X und XCode empfiehlt sich noch folgende .hgignore Datei um nur die Source-Codes und nicht die Binaries ein zu checken:

syntax: glob
# This line is a comment, and will be skipped.
# Empty lines are skipped too.
# Backup files left behind by the Emacs editor.
*~
# Lock files used by the Emacs editor.
# Notice that the "#" character is quoted with a backslash.
# This prevents it from being interpreted as starting a comment.
.\#*
# Temporary files used by the vim editor.
.*.swp
# A hidden file created by the Mac OS X Finder.
.DS_Store
# ignore Xcode specific files and direcotry
*.swp
*~.nib
build
*.pbxuser
*.perspective
*.perspectivev3

Eine sehr gute Anleitung zu Mercurial ist im Mercurial: The Definitive Guide zu finden und die Mercurial-Homepage hält auch immer gute Informationen und natürlich die neusten Versionen bereit.

Posted in Development, How To | Tagged , | Leave a comment

New Start

Ich habe jetzt zusätzlich zu meinem alten Blog dieses neue Blog aufgesetzt. Ausschlaggebend dafür war der Serverumzug und das ich jetzt der Hauptverantwortliche für den Server bin. Ich habe mir gedacht das ich an dieser Stelle mal von meinen Erfahrungen als Root-Server Besitzer plaudere.

Ansonsten werde ich wohl auch einige Cross-Post zu Softwareentwicklung und administrativen Themen hier und in meinem alten Blog veröffentlichen.

Posted in Internet | Tagged | Leave a comment