nginx + dokuwiki

server {
listen   80;
	server_name  mywiki.com;
 
	access_log  /var/log/nginx/wiki.access.log;
	error_log	/var/log/nginx/wiki.error.log;
 
    #maximum file upload size is 4MB - change accordingly if needed
    client_max_body_size 4M;
    client_body_buffer_size 128k;
 
	rewrite ^(/)_media/(.*) $1lib/exe/fetch.php?media=$2 last;
	rewrite ^(/)_detail/(.*) $1lib/exe/detail.php?media=$2 last;
    rewrite ^(/)_export/([^/]+)/(.*) $1doku.php?do=export_$2&id=$3 last;
 
    location / {
        root /var/www/wiki;
        index  index.html index.htm index.php;
        if (!-f $request_filename) {
            rewrite ^(/)(.*)?(.*)  $1doku.php?id=$2&$3 last;
            rewrite ^(/)$ $1doku.php last;
        }
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/wiki;
    }
 
    location ~ \.php$ {
	root /var/www/wiki;
	fastcgi_pass   unix:/tmp/.fastcgi.www-data/socket;
        fastcgi_index  doku.php;
	fastcgi_intercept_errors        on;
	fastcgi_connect_timeout 30;
	include        /etc/nginx/fastcgi_params;
	fastcgi_param  SCRIPT_FILENAME  /var/www/wiki/$fastcgi_script_name;
	fastcgi_param  QUERY_STRING     $query_string;
    }
}
Veröffentlicht in Ohne Kategorie, Ruby | Getagged: , | Kommentare geschlossen

thetvdb.com Ruby Lib

Zu finden mein Repository bei GitHub. Vielleicht kanns ja jemand brauchen. Wird bestimmt noch etwas bearbeitet die nächste Zeit.

#
# Howto use:
#
require "tv"
 
#
# Find TV Show
#
series = Series.new
res = series.find "Dexter"
res.each do |s|
  puts "#{s[:id]} - #{s[:name]}"
end
 
#
# Get Data
#
serie = Serie.new 79349 # TheTvDB ID
 
puts serie.name
puts serie.first_aired.to_s
 
serie.seasons.each do |s|
  puts "Season: #{s.number}"
  s.each do |e|
    puts "  Episode: #{e.number} - #{e.name}"
  end
end
 
#
# Get Banners
#
serie.banners.each do |b|
  puts b.path
end
Veröffentlicht in Ohne Kategorie, Ruby | Getagged: , | Kommentieren

Fritz.box NAS via SMB mit Snow Leopard

hat mich gerade 3 Stunden gekostet.

Lösungen gibt es kaum welche, nur ein paar nicht funktionierende Workarounds.

Geklappt hat aber folgender Tipp:

Ich habe das gleiche Problem gehabt und es vor 2 Wochen dem fleißigen AVM-Team gemeldet. Deren vorläufige Antwort: Als Workaround kann man als Passwort für den USB-SMB-Zugriff ausschließlich dezimale Zahlen (0-9) nehmen, dann funktioniert es.

Veröffentlicht in Ohne Kategorie | Kommentare geschlossen

iPhone + AirTunes – Proof of Concept

Warum, weshalb und wieso

Das macht mich jetzt schon seit Monaten fuchsig. Da kauft man sich ne AirPort Express, freut sich über die Vorteile von AirTunes und dann bekommt Apple es nicht auf die Reihe dass die iPod.app vom iPhone/iPod touch sich mit dem Gerät verständigt.

Nachdem heute Sonntag ist, ich viel zu früh aufgewacht bin und ich keine Böcke hatte mich auch noch am Sonntag mit der Arbeit rumzuschlagen, hab ich etwas rumgegooglet und experimentiert.

Warum hab ich mittlerweile rausgefunden. Dazu aber “später” mehr.

Auf die AirTunes Technik will ich jetzt mal nicht eingehen. Da man das bestimmt woanders besser nachlesen kann.

( Das folgende läuft ohne Anpassungen prima auf nem Mac. Linux dürfte ebenfalls klappen, ist aber nicht getestet )

Wir brauchen

Um AirTunes ausserhalb von iTunes zu nutzen, gibts bereits ne tolle Bibliothek (hier) und eine Portierung für Ruby  die ich verwende (hier).

Getestet hab ich es mit einem ge-jailbreak-ten iPhone 2G, auf das ich mit OpenSSH zugegriffen hab. Dann via apt die folgenden Packete installiert:

(alles folgende als “root” – Default Passwort beim iPhone ist “alpine”)

ruby, lame, rubygems

apt-get install ruby
apt-get install lame
apt-get install rubygems

Nachdem mir ein

gem --version
1.2.0

nur 1.2.0 ausgegeben hat. Hab ich das dann kurzerhand auch noch aktualisiert:
(1.3.4 weil (bei mir – und laut Google noch ein paar anderen die 1.3.5 nicht funktioniert hat))

gem install rubygems-update -v=1.3.4

Das wars noch nicht ganz:

update_rubygems

Und *tadaaa*

gem --version
1.3.4

Die oben erwähnte Bibliothek “raop-client” holt man sich dann mit dem frischen GEM

gem install raop-client

Ich hab dann im /root Folder, wo ich mir ein simples Vz. “test” angelegt hab, weitergearbeitet:

cd ~
mkdir test
cd test

( Albern das zu Dokumentieren? )

Musik? Musik!

Über SCP hab ich mir vom Mac ne MP3 File auf das iPhone kopiert:

scp ~/Music/test.mp3 root@192.168.100.5:/root/test

192.168.100.5 ersetzt ihr natürlich durch eure iPhone IP

“Der” Player

So: jetzt kommt das Ruby-Script (das Ihr z.b. als airtunes.rb lokal speichert.

require 'rubygems'
require 'raop'
 
raop = Net::RAOP::Client.new(ARGV[0])
raop.connect
raop.volume=2
raop.play $stdin
raop.disconnect

… und dann vorzugsweiße auch mit SCP auf eure überteuerte Funkhupe kopiert:

scp ~/airtunes.rb root@192.168.100.5:/root/test

Press Play on Tape

immer noch im ~/test Verzeichnis! Sagen wir dem lame-Encoder unsere vorhin kopierte MP3 Datei zu dekodieren (ins WAV Format – was anders versteht die AirPort nicht). Das ganze schieben wir über ne Pipe an unser eben gebautes Player-Script.

lame --decode test.mp3 - | ruby airtunes.rb 192.168.100.6

wobei hier die 192.168.100.6 (natürlich) durch eure AirPort Express IP ersetzt wird.

Wichtig: Die “raop” Bibliothek (der Ruby Port) kommt anscheinend noch nicht mit Passwortgeschützen AirTunes Lautsprechern klar. (Wobei ich mich damit noch nicht auseinandergesetzt hab. Zum Testen hab ich lediglich das Passwort auf Leer gesetzt.

Und? Hört ihr was?

Wenn man lange genug wartet (in meinem Fall ~20 Sekunden) kommt was :D (soviel zum “Proof of Concept”). Bei mir aber höchsten 4 – 8 Sekunden Bruchstücke.

Ich bin mir leider noch nicht sicher an WAS es liegt: Ob der lame Decoder auf nem 2G zu langsam ist, die WLAN Verbindung damit nicht klar kommt, oder schlimmstenfalls beides. Natürlich kann auch Ruby an sich zu langsam sein.

Nächste Woche gibts für mich hoffentlich das 3Gs mit dem ich den Spaß nochmals probieren werde. Vorausgesetzt natürlich, ich bekomm den Jailbreak hin.

Ich will ne App!

Ich auch :-) . Neben der Tatsache dass -ICH- weder mit dem iPhone SDK noch mit Objective C gearbeitet hab; keine Ahnung hab ob man den dekodierten Stream der iPod.app abfangen kann, oder wie man auf die iTunes Library zugreift um die Audio-Files zu dekodieren (Und das ohne JB).

Halte ich für ein Gerücht dass Apple eine App, die via Reverse Engineering das “geheime” Protokoll nachgebaut hat, zulässt.

Veröffentlicht in Ohne Kategorie, Ruby | Getagged: , | 2 Kommentare

Paralles 4 Desktop + Windows 2008 Small Business Server

Bin zwar noch nicht ganz fertig mit der Installation – aber schonmal folgende Tipps um das halbwegs in den Griff zu bekommen:

- Festplatte sollte MINIMUM auf 40 GB (Expandierend ist zu empfehlen) eingestellt werden ( 60 GB um keine Warnmeldung zu bekommen)
- Arbeitsspeicher MINIMUM 4 GB

Nach dem Kopiervorgang kommt die Meldung “Keine Netzwerkkarte gefunden” (oder so ähnlich). Den Treiber kann man über einen (wahrscheinlich unbeabsichtigten Trick) installieren:

- Es gibt zur Auswahl “Durchsuchen” – da drauf hauen
- In Parallels auf “Virtual Machine” => Parallels Tools installieren.
- Schon sieht man in dem Datei öffnen Dialog unter “Computer” (unser heißgeliebter Ex-Arbeitsplatz) die CD. Diese öffnen. Rechtsklick auf installer.exe Ausführen. Die Tools installieren sich, danach fährt sich die Kiste runter und startet neu. Theoretisch sollte jetzt eine Netzwerkkarte vorhanden sein :-)

Veröffentlicht in Ohne Kategorie | Kommentare geschlossen

Delphi: UTF-8 / HTML => WideString

Nachdem ich keine Funktion gefunden hab die mir die Arbeit abnimmt, hab ich se eben selber geschrieben.

Tut folgendes: HTML Typen wie #323; (irgendein komisches Polnisches l mit strich ;-) ) in nen WideString umwandeln:

function Html2WideString(s: string): widestring;
var
  i: integer;
  f: boolean;
  tmp: string;
begin
  i := Pos('#', s);
  if i = 0 then
  begin
    Result := s;
    exit;
  end;
  f := false;
  Result := '';
  tmp := '';
  for i := 1 to Length(s) do
  begin
    if (s[i] = '&') then Continue;
    if (s[i] = '#') then
    begin
      f := true;
      Continue;
    end;
    if f and (s[i] = ';') then
    begin
      f := false;
      Result := Result + WideChar(StrToInt(tmp));
      tmp := '';
      Continue;
    end;
    if f then
    begin
      tmp := tmp + s[i];
      Continue;
    end;
    Result := Result + s[i];
  end;
end;

lässt sich bestimmt noch optimieren, für mich reichts erstmal.

Update
Jetzt auch in Funktionierend

Veröffentlicht in Ohne Kategorie | Kommentare geschlossen

RoR: Rails Tidy Installation & Konfiguration

Erstmal sollte man schauen dass man tidy auf seiner Mühle installiert. Bei Debian bzw. Ubuntu geht das mit nem schönen apt-get install tidy (als Root versteht sich / bzw. mit sudo)

Auf nem Mac geht es z.B. mit MacPorts sudo port install tidy fast genau so einfach

Natürlich kann man sich auch das Tidy-Packet von Sourceforge holen und selbst zusammenbauen. Auf jeden falls sollte man dann unter Linux die Tidy-Bibliothek hier /usr/lib/libtidy.so liegen haben bzw. auf nem Mac unter /usr/lib/libtidy.dylib

Anschließend holt man sich mit gem die Ruby Bibliothek für Tidy mit gem install tidy (hier ggf. sudo voranstellen )

Jetzt braucht ihr noch vom Blog des RailsTidy Plugin Entwicklers die letzte Version (im Moment 0.2) und entpackt den Spaß in ./vendor/plugins (die Tar-Datei sollte sich als Unterverzeichnis entpacken)

Bei mir hatte das ganze nen Bug, in der Datei ./vendor/plugins/rails_tidy-0.2/lib/rails_tidy.rb musste ich in der Funktion self.filter(response) die Zeile mit “logger” rausschmeissen (glaube es war 163), da der Bibliothek irgendwie das logger Objekt nicht bekannt war (wer will schon Logs?)

Mir hat im Moment gereicht, dass meine HTML Ausgabe ge-tidy-ed wird. Dazu muss man nur eine after_filter Methode im ApplicationController einbauen:

class ApplicationController < ActionController::Base
...
after_filter :tidy_html
 
  def tidy_html
    RailsTidy.filter(response)
  end
...
end

Na? hats geklappt? Bei mir sah die Ausgabe zwar formatiert aus, aber net so wie ich sie wollte. Abhilfe schafft hier eine eigene Tidy Konfigurations-Datei die man unter ./config/tidy.rc anlegt:

indent: yes
indent-spaces: 2
hide-comments: true
wrap: 180
split: true
tidy-mark: no

(Weiteres hierzu in der Tidy Referenz) Wer das ganze in seine Tests einbauen möchte schaut sich am besten die offizielle Doku.

Veröffentlicht in Ohne Kategorie, Ruby | Getagged: , | Kommentieren

RoR: link_to

Bei Rails link_to Methode kann man mit :params beliebige Parameter mitgeben, so etwa: 

link_to "Test", :controller => "controller", 
                      :action => "action", 
                      :params => { :id => @picture.id}

Weitere HTML Eigenschaften (zB. :class lassen sich zwar auch übergeben, dafür müssen aber :controller & :action mit “geschwungenen Klammern” abgegrenzt werden:

link_to "Test", {:controller => "controller", 
                       :action => "action"}, 
                       :class => "css-class"

Bei der Kombination von den beiden “Tipps” muss auch der :params Parameter in die Klammern:

link_to "Test", {:controller => "controller", 
                       :action => "action", 
                       :params => { :id => @picture.id}}, 
                       :class => "css-class"
Veröffentlicht in Ohne Kategorie, Ruby | Getagged: , | Kommentare geschlossen