Programme und Code

Wenn man studiert, hat man üblicherweise Lehrveranstaltungen. Und zumindest in der Informatik ist es auch üblich, da wirklich hinzugehen [1]. Und es ist üblich, dass es die Folien zum Download gibt. Dann kann man sich die ausdrucken und während der Vorlesung Notizen drauf machen.

Normalerweise gibt es also zu jeder Vorlesung eine Webseite mit den ganzen Materialen (Vorlesungsfoien, Übungsblätter) und ein paar News. Da man natürlich wissen will, wann es neue Folien gibt oder neue Übungsblätter oder wenn, sagen wir mal, der Raum verlegt wird, ist es wichtig, dass man ständig die Vorlesungsseite besucht. Das Ganze macht man mindestens einmal täglich, wenn nicht öfter.

Wie schön wäre es da, wenn alle Vorlesungsseiten einfach einen Newsfeed anbieten würden. Dann würde der Feedreader die ganze Arbeit machen und man müsste nicht ständig selber gucken, sondern nur, wenns wirklich was Neues gibt. Leider ist das die große Ausnahme. Nur ein Bruchteil der Vorlesungsseiten hat einen Feed. Schade.

Gestern hatte ich dann mal wieder so einen Warum-ist-mir-das-nicht-schon-früher-eingefallen-Erlebnis. Ich könnte mir doch schnell ein kleines Skript zusammenbasteln, das mir die Arbeit abnimmt. Für was bin ich denn eigentlich Informatiker, wenn ich schon so Kleinkram nicht automatisiere! Warum muss mir sowas eigentlich erst im 9. Semester einfallen?

Ich hab mich also kurz mal hingesetzt und ein kleines Ruby-Skript geschrieben. Es ist nicht furchtbar schön, aber es tut seinen Zweck:

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/ruby

require 'pathname'

# configuration
$path = File.dirname(Pathname.new(__FILE__).realpath)
$lecturesFile = $path + '/lectures.list'
$browser = 'opera'

def checkLecturesInFile(lecturesFile)
        items = File.open(lecturesFile).readlines
        File.open lecturesFile, 'w' do | file |
                items.each do | item |
                        data = item.split ';'
                        name = data[0].strip
                        url = data[1].strip
                        hash = data[2].strip

                        newHash = `wget "#{url}" -qO - | md5sum | cut -d " " -f 1`
                        newHash.strip!
                        if hash == newHash
                                puts "#{name}: OK"
                        else
                                puts "#{name}: new"
                               `#{$browser} "#{url}"`
                        end
                        file.puts "#{name} ; #{url} ; #{newHash}"
                end
        end
end

# main
checkLecturesInFile $lecturesFile

[2]

In der Datei lectures.list ist dann ne URL-Liste in folgendem Format:

1
<Name> ; <URL> ; <md5Hash>

also z.B.

1
CRDE ; http://www.christian-rehn.de ; b1306d712bc39ecfb95fa8d29c8d23a4

Das Skript geht die Datei Zeile für Zeile durch, ruft die Webseite ab, berechnet einen Hash-Wert und vergleicht ihn mit dem gespeicherten Hash. Hat sich die Seite geändert wird sie automatisch im Browser geladen. Der neue Hash wird dann wieder in die Datei gespeichert. Die Idee ist einfach und funktioniert in den meisten Fällen. Leider eben nicht in allen:

  • Manche Vorlesungsseiten sind passwortgeschützt. HTTP Auth ist per wget kein Problem, aber wenn wenn handgestrickte Lösungen ins Spiel kommen, müsste man das genau auf die jeweilige Seite anpassen. Einfach nen Cookie zu übergeben klappt i.d.R. nicht, da wohl weitere Header überprüft werden (um Session Hijacking zu vermeiden). Das also jeweils anzupassen ist mehr Arbeit, die sich nicht unbedingt lohnt.
  • Manche Vorlesungsseiten generieren Session IDs oder ähnliche Tokens und bauen sie in die Links mit ein. Das ändert natürlich den Hash, womit der Ansatz nicht mehr klappt. Ich hab auch schon überlegt nen HEAD-Request mit If-Modified-Since zu senden, aber die meisten dynamischen Seiten machen sich hier keine große Mühe und geben immer Modified zurück, womit der Ansatz schon generell ausscheidet.

Nicht perfekt, aber das muss es auch nicht. Auf jeden Fall besser als alles immer händisch prüfen.

[1] Das lohnt sich auch, denn die Vorlesungen sind meistens gut.
[2] Der Code ist trivial und darf von jedem ohne Einschränkung verwendet werden.


Update(30.08.11): kleiner Bugfix

Da ich momentan von der Uni her recht viel zu tun habe, muss ISAAC erstmal hinten anstehen. In den Semesterferien(==> August) gehts weiter…

Die Semesterferien haben angefangen und jetzt kanns auch so langsam mit ISAAC weiter gehen. Ich habe im vergangenen Semester einiges gelernt (ja das kommt vor ;-)), was Auswirkungen auf ISAAC haben wird. Zumindest werde ich manches nochmal überdenken und ggf. nochmals umplanen. Jedenfalls gehts jetzt weiter…

Parallel dazu werde ich wohl noch ein paar Tutorials schreiben. Langweilig wird mir also nicht…

So… so langsam schreitet die Entwicklung voran und so kann ich auch noch ein bisschen über ISAAC berichten. Ja ISAAC – ISAAC is simple and almost a CMS – wird das Ganze wohl letztendlich heißen. Große Teile stehen schon. Bis zu einem ersten Release wird es wohl aber noch etwas dauern. Folgendes kann ich aber schonmal verraten:
(mehr …)

Aufgrund von Anregungen per Mail (über das Bug-Regort-Formular) hab ich eine neue Version von PasViewer online gestellt. Viel verändert hat sich allerdings nicht:

Changelog

+ Zeilenumbruch jetzt einstellbar
+ Fensterposition kann gemerkt werden
+ Zeilenumbruch kann ausgeschaltet werden

Name: PasViewer
Version: 0.2
Release-Datum: 07.06.2007
Status: alpha
Plattform: Win32
Programmiersprache: Delphi
Lizenz: MPL
Download: PasViewer (Größe: 501.88 KB; bisher 638 mal heruntergeladen)

(mehr …)

In Informatik stelle ich meine Einadressmaschinensimmulation [post=“MiniAsm32″] als Referat vor. Da ich dabei auch Code zeigen will und auf den Rechnern kein Delphi installiert ist, habe ich mir [post=“PasViewer“ text=“dieses Programm“] geschrieben. Viel zu sagen gibt es nicht. Es macht ganz einfach das, was es soll. Delphi-Code anzeigen. Natürlich mit Highlighting, Zeilennummern, etc.

Features
  • Anzeigen von Source und Formular-Dateien
  • MDI
  • MDI-Tabs
  • Highlighting
  • Suchen
  • Zeilennummern

Name: TMdiTabs
Version:
Release-Datum: 03.02.2007
Programmiersprache: Delphi
Download: MdiTabs.pas (Größe: 9.35 KB; bisher 2073 mal heruntergeladen) bzw. MdiTabs_D6.pas (Größe: 9.03 KB; bisher 1971 mal heruntergeladen)

(mehr …)

Name: MiniASM32
Version: 0.3
Release-Datum: 16.12.06
Status: Pre-Beta
Plattform: Win32
Programmiersprache: Delphi
Lizenz: MPL
Download: MiniAsm32 (Größe: 562.45 KB; bisher 489 mal heruntergeladen)

(mehr …)