Angelegt von Andreas Steinel
Sun, 17 Dec 2006 16:29:00 GMT
Gerade habe ich mir auch dem AIM-Precence-Statusplugin und einem Jabber-Status-Plugin und etwas googeln ein Plugin geschrieben, mit dem man alle drei Statussymbole anzeigen kann. Ich habe extra auf Abwesenheitsnachtichten verzichtet.
Das Plugin kann hier heruntergeladen werden.
Posted in Blog, Programmieren, Ruby | 1 comment
Angelegt von Andreas Steinel
Thu, 16 Nov 2006 00:16:00 GMT
Gerade eben ist mir aufgefallen, was an meiner Implementation des NL-Mean-Filters nicht richtig war. Es lag viel mehr an den Paramtern als an der Implementation.
Das Ausgangsbild, welches ich Anfang des Jahres in Brüssel geschossen habe, diente als Ausgangsbild. In dieses Bild wurde Gauss-Rauschen mit Standardabweichung 20 hinzugefügt:
Nach der Entrauschung mit einem Testfenster der Größe 7 und eines Vergleichfensters von 3 führte der Algorithmus zu folgendem Ergebnis:
Das kann sich doch sehr sehen lassen :-p
Posted in Programmieren, Uni | keine Kommentare
Angelegt von Andreas Steinel
Fri, 20 Oct 2006 00:19:00 GMT
So, nun schreib ich es auch hier nieder: Mein Überweisungsformulargenerator ist schon seit einiger Zeit online. Ähnlich wie hier beschrieben ist er nun auch online zu finden bei Sourceforge.
Momentan gab es schon 65 Downloads :-p
Posted in Programmieren, Ruby | Tags Ueberweisung | keine Kommentare
Angelegt von Andreas Steinel
Fri, 13 Oct 2006 10:58:00 GMT
Nach einigen Monaten der Entwicklung ist nun endlich die neue Version des Expertlocators fertig, deren Betreung ich im Auftrag von Herrn Wahlster übernehmen sollte.
Die Weboberfläche, die für jedermann zugänglich ist, sieht wie folgt aus:
Die Administrationsoberfläche, welche für die Eintragung eines Experten zuständig ist, sieht so aus:
Posted in Arbeit, Programmieren | Tags Expertlocator | keine Kommentare
Angelegt von Andreas Steinel
Fri, 29 Sep 2006 16:50:00 GMT
Da macht man schön Bilder … ganze CF-Karten voll und dann sowas. Eingelegt … nix. Er kann es nicht mounten und die CF-Karte war voller Bilder! Dateisystem zerstört, Hilfe!
FreeBSD kann es nicht mounten und Windows kann erst garnix damit anfangen. Klasse, dachte ich mir … was nun?
Als erstes hab ich mir die CF-Karte als Image mittels cp
auf den Rechner gezogen. Danach habe ich die Wiederstellungsprozedur gestartet:
Als erstes habe ich mir angeschaut, wie ein Bild eigentlich binär aussieht und konnte die ersten 8 Bytes, die bis auch eine Stelle immer identisch sind, feststellen. Mit diesem Wissen kann man nun grepen. Dabei hatte ich zuerst im Sinn, ein C-Programm zu schreiben, welches die Daten binär identifizieren kann. Schlussendlich habe ich aber nur hexdump
und grep
zum Finden der Offsets verwendet.
Dabei habe ichzuerst eine Liste der Offsets für jedes Bild erstellen lassen:
hexdump -C ~/CF-Sicherung-mit-Bildern.iso| grep Exif >| grep-result
Eine solche Zeile mit dem Offset sieht wie folgt aus:
00049000 ff d8 ff e1 31 fe 45 78 69 66 00 00 49 49 2a 00 |....1.Exif..II*.|
Die erste Zahl ist das Offset (hexadezimal), danach kommen 16 Bytes an Daten in Bytes und nach der Pipe kommt der Teil als Ascii-Zeichen.
Mit diesen Informationen ist es nun möglich die Bilder zu exrtahieren. Einziger Nachteil bei dieser Rekonstruktion stellt die Dateisystemfragmentation dar. Sobald ein Bild auf dem Dateisystem fragmentiert wurde ist es unmöglich dieses mit dieser Methode wiederherzustellen. Aber es ist zumindest ein Ansatz.
Nun habe ich mir noch ein Ruby-Skript geschrieben, mit dem man die Daten anhand des Offsets wiederherstellen kann. Dabei werden einfach eine gewisse Menge von Bytes (hier 4.6 MB) nach dem gefundenen Offset kopiert. Dies entspricht dem Herauskopieren des vermeindlichen Bildes. Am einfachsten geht dies mit dd
und der skip
-Option. Aus Performancegründen ist es ratsam, immer 16-Byte-Blöcke zu benutzen, aber nicht notwendig. folgendes Skript wird verwendet, um die Daten zu extrahieren:
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/env ruby
raw = File.open("grep-result").readlines
raw.each_index do |i|
size = raw[i].split(" ")[0].to_s.to_i(16) / 16
puts size
Kernel.system "dd if=/home/andreas/CF-Sicherung-mit-Bildern.iso" +
" of=#{i.to_s.rjust(3,"0")}.jpg count=250000 bs=16 skip=#{size}"
end
|
Viele Bilder wurden komplett wiederhergestellt, leider nicht alle. Dort gab es fragmentierungsprobleme und die Bilder sind teilweise zerstört. Dies ist schade, aber ich muss damit leben. Wenigstens konnte ich mehr als 70% der Bilder retten.
Zu guter letzt habe ich alle Bilder durch convert
gejagt, um den Datenmüll, der sich am Ende jedes Bildes befindet, loszuwerden. Dieser Datenmüll ist durch das Kopieren entstanden.
Resultat:
Es wurden 102 Bilder extrahiert, eines ist komplett kaputt, 9 teilweise kaputt und 92 Bilder sind restauriert. Das sind knapp über 90%! Juhuu
Posted in Kamera, Fotografieren und Bilder, Programmieren, Ruby | 1 comment
Angelegt von Andreas Steinel
Tue, 26 Sep 2006 00:47:00 GMT
Folgender Quellcode ermöglicht die Erzeugung eines RSS-Feeds (Atom-2) für die Ausgabe von pkg_version
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#!/usr/bin/env ruby
xmlfile = "out.xml"
server = "SERVER"
server_fqdn = "lnxbil.dyndns.org"
class FeedCreator
def initialize(file) #{{{
@xmlfile = file
@title = ""
@itemtitle = ""
@itemdesc = ""
end #}}}
def save(title,itemtitle,itemdesc) #{{{
@title = title
@itemtitle = itemtitle
@itemdesc = itemdesc
create_xml
end #}}}
private
def create_xml #{{{
a = File.open(@xmlfile,"w+")
a.puts <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<channel>
<title>#{@title}</title>
<language>en-us</language>
<description>Status Reporter</description>
<item>
<title>#{@itemtitle}</title>
<description>#{@itemdesc}</description>
</item>
</channel>
</rss>
EOF
a.flush
a.close
end #}}}
end
a = FeedCreator.new(xmlfile)
#db = IO.popen("pkg_version -l \\< -v").readlines
db = File.open("/usr/ports/2update").readlines
dbe = ["<table>"]
db.each do |i|
b = i.split("<")
dbe << "<tr>"
dbe << "<td>" + b[0].to_s + "</td>"
dbe << "<td>" + b[1].to_s + "</td>"
dbe << "</tr>"
end
dbe << "</table>"
a.save("FreeBSD Package Status (SERVER)",
db.size.to_s + " packages must be upgraded",
dbe.join("\n").gsub("<","<").gsub(">",">"));
|
Posted in FreeBSD, Programmieren, Ruby | keine Kommentare
Angelegt von Andreas Steinel
Wed, 13 Sep 2006 12:43:00 GMT
Um einen Debian-Mirror unter FreeBSD aufzusetzen benötigt man zuerst das debmirror
-Perl-Skript, welches man hier finden kann.
Den Tar-Ball entpacken und die ausführbare Datei debmirror
in den Ordner verschieben, in dem nachher der Spiegel liegen soll. Am besten benennt man es noch um in debmirror.pl
.
Des Weiteren werden noch folgende Perl-Bibliotheken benötigt:
- p5-LockFile-Simple
- p5-Compress-Zlib
- p5-Digest-SHA1
- p5-libwww
Um nun Debian vom FTP-Spiegel des MPI’s in Saarbrücken zu spiegeln genügt folgender Aufruf:
./debmirror.pl debian/debian --nosource \
--passive --method=ftp --ignore-release-gpg \
--root=/pub/mirrors/linux/distributions/debian/debian \
--dist=sarge --arch=i386 --getcontents \
--host=ftp.mpi-sb.mpg.de
Ein Spiegel von
mplayer
würde so aussehen:
./debmirror.pl debian/mplayer --nosource \
--passive --method=ftp --ignore-release-gpg \
--root=/pub/mirrors/linux/mirror/www.debian-multimedia.org/ \
--dist=sarge --arch=i386 \
--host=ftp.mpi-sb.mpg.de
Ein Security-Spiegel evt. so:
./debmirror.pl debian/security --nosource \
--passive --method=ftp --ignore-release-gpg \
--root=/pub/mirrors/linux/mirror/security.debian.org/debian-security/ \
--dist=sarge/updates --arch=i386 \
--host=ftp.mpi-sb.mpg.de
Posted in FreeBSD, Linux, Programmieren | keine Kommentare
Angelegt von Andreas Steinel
Fri, 08 Sep 2006 14:30:00 GMT
Mittels dieses Codes ist es möglich aus einer PDF-Datei die Titelseite als PNG zu exportieren. Besonderheit ist hierbei das Laden der ersten Seite, ohne alle Seiten zu laden. Somit kann man schnell, effizient und speicherschonend arbeiten.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#!/usr/bin/env ruby
# This code extracts the first page
# of a PDF file and write two png-files,
# a small and a big thumbnail.
require 'RMagick'
include Magick
def pngize(str,a=nil)
return str.split(".")[0..-2].join(".") +
a.to_s + ".png"
end
def create_thumbnail(image)
# Workaround for self.number_scenes=1
img = Image.read(image+"[0]")
puts img.size
geom = "200x300"
img.change_geometry!(geom) { |cols, rows|
img.thumbnail! cols, rows }
img.write(pngize(image))
geom = "50x75"
img.change_geometry!(geom) { |cols, rows|
img.thumbnail! cols, rows }
img.write(pngize(image,"_mini"))
end
create_thumbnail(ARGV[0]) |
Posted in LaTeX, PDFTex und Co., Programmieren, Ruby | keine Kommentare
Angelegt von Andreas Steinel
Fri, 01 Sep 2006 10:17:00 GMT
Um unter FreeBSD QT-Programme zu kompilieren, sind folgende Eintragungen in die .profile
oder sonstige Datei, die bei jedem Shell-Aufruf includiert wird.
export QMAKESPEC=/usr/local/share/qt/mkspecs/freebsd-g++/
export QTDIR=/usr/X11R6
Posted in externes Gehirn, FreeBSD, Programmieren | keine Kommentare
Angelegt von Andreas Steinel
Mon, 28 Aug 2006 02:32:00 GMT
Da ich leider mit der rückständigen MySQL-Datenbank auf einigen Rechnern leben muß und ich dort keine Shell habe, wollte ich ergründen, ob ein Datenbank-Dump per Skript über SSL-gesichertes phpMyAdmin möglich ist.
Ja, ich habe mittels http-access2 ein kleines Skript geschrieben, mit dessen Hilfe ich die Datenbank mittels Ruby dumpen kann.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#!/usr/bin/env ruby
# Script for dumping MySQL-Database with phpmyadmin.
# Automatic-Dumps are now possible.
require 'http-access2'
# CONFIG
# - - - - - - - - - - - - - - - - - - - - - - - -
username = "username"
password = "password"
database = "datenbank"
target = "https://myhost/path/to/phpmysql/"
# - - - - - - - - - - - - - - - - - - - - - - - -
# Don't edit below this line
# - - - - - - - - - - - - - - - - - - - - - - - -
login = { #{{{
"pma_username"=>username,
"pma_password"=>password
} #}}}
dump_data = { #{{{
"export_type"=>"database",
"db"=>database,
"what"=>"sql",
"add_character"=>"\\n",
"showcolumns"=>"yes",
"use_backquotes"=>"1",
"max_query_size"=>"50000",
"sql_type"=>"insert",
"drop"=>"1",
"sql_structure"=>"structure",
"asfile"=>"sendit",
"escaped"=>"\\",
"hexforbinary"=>"yes",
"extended_ins"=>"yes",
"sql_data"=>"data",
"sql_auto_increment"=>"1",
# "compression"=>"bzip",
"if_not_exists"=>"1"
} #}}}
clnt = HTTPAccess2::Client.new()
clnt.set_cookie_store("cookie.dat")
clnt.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
# first login and cookie-setup
a = clnt.post(target, login)
# save token for export. Without this token, nothing works!
a.header['location'].to_s =~ /token=([0-9a-f]+)/
dump_data["token"] = $1.to_s
# Dumping Data
a = clnt.get(target + "export.php", dump_data)
puts a.content
|
Posted in Programmieren, Ruby | Tags backup, mysql, phpmyadmin, Ruby | keine Kommentare