Kategorien
Computer Nützliches Studium

PDF-Dateien verkleinern mit Ghostscript

Viele Studenten bekommen Probleme mit großen PDF-Dateien. Wenn die Dozenten als Lernunterlagen PDF-Dokumente mit teilweise kompletten Buchkapiteln bereit stellen,
können das schon mal 100 MB sein. Auf der Festplatte ist das kein großes Problem, aber ein USB-Stick kann da schon mal voll laufen. Zudem werden die Dokumente auch per Email verschickt. Und das dauert dann sehr lange und ist auch noch nicht immer möglich, wenn die maximale Dateigröße überschritten wird.

Da kann Ghostscript aushelfen, weil es PDF-Dateien verkleinern kann.
Mit dem folgenden Befehl wird z.B. die Datei original.pdf mit komprimierten Bildern als neu.pdf gespeichert. Die Originaldatei wird hierbei nicht verändert.

"C:\Program Files\gs\gs8.64\bin\gswin32c.exe" -dNOPAUSE -dBATCH ^
-dDownsampleColorImages=true -dColorImageResolution=300 ^
-dDownsampleGrayImages=true -dGrayImageResolution=300 ^
-dDownsampleMonoImages=true -dMonoImageResolution=300 ^
-sDEVICE=pdfwrite -sOutputFile=neu.pdf original.pdf

Die grundsätzlichen Optionen werden in der offiziellen Dokumentation erläutert.
-dNOPAUSE und -dBATCH sorgen dafür, dass die Konvertierung ohne Unterbrechungen und zusätzliche Benutzerabgaben durchläuft. Mit -sDEVICE=pdfwrite wird PDF als Ausgabeformat festgelegt.
-sOutputFile=neu.pdf gibt an, dass das Ergebnis in neu.pdf gespeichert wird, und als letztes Argument kommt der Quell-Dateiname original.pdf. Achtung: Als Quell- und Zieldatei darf nicht die gleiche Datei verwendet werden. Sonst wird die vorhandene Datei mit einer leeren PDF-Datei überschrieben!

Für die Bildkomprimierung habe ich bei Copyshop-Tips die beste Beschreibung gefunden. -dDownsampleColorImages=true bestimmt, dass Farbbilder herunter gerechnet werden, -dColorImageResolution=300 setzt die Auflösung dafür auf 300 dpi. Da wir alle Bilder umwandeln wollen und vor allem Scans von Büchern oft als Graustufen oder Schwarzweiß-Bilder gespeichert werden, sollte Ghostscript angewiesen werden auch diese zu konvertieren. Idealerweise haben alle Bilder dabei die gleiche Auflösung. 300 dpi sind gut genug zum Drucken, für die Bildschirmausgabe können auch 150 dpi reichen.

Hier zum Vergleich 3 Bilder mit verschiedenen Bildauflösungen, auf 400% vergrößert:

  1. Unkomprimiertes Original, 73,8MB
    Vergrößerung im Original-PDF
  2. Komprimiert mit 300dpi, 36,9MB
    Vergrößerung im komprimierten PDF, 300dpi
  3. Komprimiert mit 150dpi, 24,2MB
    Vergrößerung im komprimierten PDF, 150dpi

Die Texte auf allen Bildern sind gut lesbar und die Kompression bringt deutliche Platzersparnisse von 50 bzw. 67 Prozent. Bei meiner Testdatei hat es auf die Dateigröße keine Einfluss gehabt, wenn ich die Auflösung von 300 auf 600 dpi umgestellt habe. Wahrscheinlich haben die Bilder eine Auflösung von 300 dpi und werden deshalb nicht umgerechnet, wenn 600 dpi als Maximalauflösung eingestellt wird. Dennoch nimmt die Datei auch dann nur die Hälfte des ursprünglichen Platzes ein.
Eventuell hat die Originaldatei also gänzlich unkomprimierte Bilder.

Deshalb lohnt es sich wahrscheinlich für die meisten größeren PDF-Dateien, sie einmal mit Ghostscript neu zu komprimieren. Die Platzersparnis variiert, im aktuellen Fall sind es 50 Prozent. Ich hatte aber einige Dateien die 400 MB groß waren. Die Bilder in diesen PDF-Dateien hatten eine Auflösung von 600 dpi. Da ich die Dokumente nur am Bildschirm lesen wollte, habe ich sie auf 200 dpi herunter gerechnet. Im Ergebnis waren es dann nur noch 40 MB, eine Ersparnis von 90 Prozent!

Kategorien
Interaktion Programmieren Projekte Studium Typografie Webdesign

Coiffeur 2 — Making you even prettier now

Ich habe Coiffeur erweitert, ein computerlinguistisches Tool, um Texte zu analysieren. Das Originalprogramm konnte bestimmen, wie oft im Text welches Wort vorkommt. Daraus hat es dann den Type-Token-Quotienten errechnet. Klingt erstmal nicht besonders beeindruckend. Aber das coole an dem Programm ist, dass es mit Englisch sehr gut zurecht kommt. Dort gibt es Konstrukte wie I’m für I am. Und Coiffeur hat das richtig gezählt, das Wort wird wie 2 Worte behandelt und für jedes Teilwort werden entsprechend die Zähler erhöht. Dabei wird die Kontraktion ‚m aufgelöst und der Wert für am erhöht.

Das neue Programm kann alles, was Coiffeur schon konnte. Und natürlich kann es noch viel mehr.
Extra für Gedichte und andere kurze Texte kann der Benutzer einfache Wortlisten erstellen, wie Nomen (Haus, Frau, Mann). Diese werden dann auf den Text angewendet, so bekommt jedes Vorkommen von Haus, Frau oder Mann die Klasse Nomen in der Ausgabe, etwa so:

<span class="Nomen">Haus</span>

Erfolge

Das Ergebnis kann sich durchaus sehen lassen. Ich habe die Todesfuge von Paul Celan analysiert, ein Gedicht, das mir sehr gefällt und sich gut für eine vielschichtige visuelle Präsentation eignet. In der Präsentation kann man viel machen, es läuft alles rund, sieht schön bunt aus und bietet viele Infos.

Ich habe einige neue CSS-Schmankerl ausprobiert. Die wichtigste ist sicherlich die Einbindung von Fonts auf der Webseite mit der @font-face-Regel. Da konnte ich Axel testen, eine eng laufende Schrift und nicht alltägliche Schrift, bei der der Einsatz für Webseiten ausdrücklich erlaubt ist. Dadurch, dass sie eng läuft, konnte ich die Schriftgröße für gute Lesbarkeit relativ groß einstellen.

Wenn das Browserfenster zu klein ist, gibt es Zeilenumbrüche, die ein Gedicht schnell durcheinander bringen können. Dann weiß man nicht, ob eine neue Zeile beginnt oder die letzte wegen der Breite umgebrochen wurde. Ich habe das Problem dadurch gelöst, dass jede Zeile einen negativen Einzug hat, so steht der Text nach einem Umbruch automatisch weiter rechts als die echten Zeilenanfänge.

In modernen Browsern taucht das Problem der fehlerhaften Zeilenzuordnung möglicherweise gar nicht auf, die Zeilen werden durch CSS Counter automatisch nummeriert. Diese habe ich auf JavaScript Kit kennengelernt. Allerdings unterstützen nicht alle Browser CSS Counter, deshalb ist der Zeileneinzug trotzdem praktisch (siehe Abbildung).

Zeilenumbrüche

Probleme

Probleme gab es mit CSS, ich habe zuerst das Layout nur mit Firefox getestet, es lief natürlich alles gut. Dann hab ich das im Internet Explorer (7) geöffnet und …
Sah schon anders aus. Also gut, alles reparieren, damit auch IE alles sauber zeigt. Klappt. Nur noch einmal kurz im Firefox checken…

So ging es dann eine Zeit lang hin und her, bis ich ein Design hatte, was in beiden Browsern zumindest keine Probleme macht. Und das ist jetzt leider eine Minimallösung geworden. Es sollte möglich sein, dass sich die beiden Styleauswahl-Leisten nebeneinander anordnen, aber irgendein Browser hat dann immer irgendwas blödes gemacht. Und durch dieses Hickhack ist die Stylesheet-Datei recht unordentlich geworden, die könnte man noch aufräumen.
Ich war aber irgendwann einfach zufrieden, dass es zumindest so angezeigt wird und wollte es mein Glück nicht mehr herausfordern.

Auch mit dem Programm gab es Probleme. Coiffeur hatte ich ohne Funktionen geschrieben (die kannte ich damals noch nicht für Perl), es bestand alles aus vielen ineinander verschachtelten Schleifen, was sehr unübersichtlich ist, wenn man nach einem Jahr sich wieder dran setzt. Die wichtigsten Funktionen sind jetzt auch als Funktionen umgesetzt, so konnte ich nach und nach immer besser arbeiten.

Es gab dann teilweise noch Probleme, die ich mir nicht erklären konnte, nachdem ich den Quelltext zig-mal durchgesehen habe. Das war schon zum Schluss des Projekts, wo ich noch Englische Texte mit Kontraktionen getestet habe. Im Originalprogramm hat noch alles funktioniert und klappte jetzt nicht mehr, obwohl ich eigentlich nur die Ausgabe verändert habe und nicht das Zählen von Types oder Tokens.

Es lag wohl daran, dass ich die Dateien in Windows editiert habe und sie dann in einer virtuellen Linux-Maschine laufen ließ. Und weil beide Systeme Zeilenumbrüche anders kodieren, gab es bei Kontraktionen und anderen ausgewählten Wörtern Leerzeichen am Ende des Wortes. Damit konnten sie nicht richtig gezählt werden, „‚m“ ist nicht das gleiche wie „‚m “ (mit Leerzeichen).
Lektion gelernt — ab jetzt wird jeder Input erstmal gereinigt.

Ergebnis

Trotz allem bin ich sehr zufrieden, die Seite sieht gut aus und funktioniert genauso, wie ich es haben wollte.
Auch das neue Coiffeur 2 hat alle Features, die ich einbauen wollte, es kamen im Verlauf der Entwicklung noch einige praktische Funktionen hinzu, wie z.B. dass man in den Wortlisten auch mehrere Wörter angeben kann, z.B. die Metapher spielt mit den Schlangen. Würde man die Worte dafür einzeln eintragen, gäbe es viele False Positives, da die einzelnen Worte in anderen Kontexten auftauchen. So ist es viel komfortabler und einfacher für den Benutzer (war aber nicht ganz trivial für den Programmierer).

Metapher1 (schwarze milch der frühe)
Metapher2 (spielt mit den schlangen)
Metapher3 (Grab in den Lüften, Grab in der Luft, Grab in den Wolken)

Deshalb: guck es dir an, teste das Programm, lies den Text der Arbeit und kommentiere hier!

Kategorien
Skulptur Studium

Thesaurus – Was für ein Wort!

Ein Shakespeare-Thesaurus

Ich habe zur Zeit ein neues Lieblingswort: Thesaurus. Es hat eine natürliche Coolness und klingt total mächtig: The Saurus – Der Saurier. So wird Sprachwissenschaft gleich viel spannender und versetzt dich auf eine mystische Insel, wo DNA-Experimente betrieben werden… 🙂

Update (10.02.2012):
Terry Border von Bent Objects hatte die gleichen Assoziationen an Thesaurus. Er hat seinen Thesaurus auch richtig in Szene gesetzt. Zuerst als Aasfresser Rex und wenig später als Raubtier, das eine Bibel gestellt hat.

Der Kampf zwischen einem Thesaurus und einer Bibel

Kategorien
Computer Studium

Alles Plagiate?

Ich habe zurzeit ein kleines Problem mit einer Hausarbeit, kein eigentliches Problem,
sondern eher eine Frage, die ich hiermit in den Raum stelle.
Es geht um das korrekte Zitieren und die drakonischen Strafen, die einige Dozenten für Plagiate prophezeien und androhen.

Dass man jede zitierte Quelle angibt, ist dabei selbstverständlich und üblich, zumindest, wenn man herkömmliche Texte schreibt.
Doch wie verhält es sich bei Quelltexten und anderem Programmcode?
Ein ganzes Programm zu kopieren ist faul und dumm zugleich, doch was ist mit einzelnen Prozeduren oder Methoden, mit kleinen Algorithmen gar?

Zum Beispiel habe ich nun für Datei-Input/-Output Prozeduren aus den Übungen benutzt, die stammen von mir selbst, wie man es macht, habe ich aber im Internet gelernt. Irgendwo.
Muss ich dafür auch Quellen angeben?
Auch den Umgang mit XML in Java habe ich im Internet gelernt, wobei das Lernen eher Trial&Error war.
Dafür die Quelle anzugeben ist kein sonderliches Problem, zumal es als Online-Buch veröffentlicht ist, aber die Methode, wie man einen String in eine Zahl umwandelt, sah ich irgendwo im Forum.

Wen soll ich da zitieren? CoolerWiking1512 in www.forum.com? Sowas sollen wir eigentlich nicht, Webseiten werden nur zitiert, wenn da ein Autor klar erkennbar ist (damit man ihn besser zur Rechenschaft ziehen kann, wenn er was falsches schreibt).
Muss man sowas zitieren? Es ist ja schließlich keine eigene Leistung dann und die eigene Leistung soll man doch gerade bescheinigen.

Es ist nicht so, dass ich im Stress bin und irgendwelche Konsequenzen befürchte. Es wird wirklich niemand etwas dagegen haben,
dass ich ein einzeiliges Codeschnipsel nutze, wie es genutzt werden muss. Aber was wäre wenn? Könnte man dann sagen, es sei keine
eigene Arbeit oder die Arbeit bediene sich irgendwo unerlaubterweise?

Kategorien
Alltag Studium

Inkonsequent

Der Plan:
Ankommen, drei Bier trinken, früh nach Hause fahren, früh aufstehen, an Hausarbeit und Projekt weiterarbeiten.

Das Ergebnis:
Angekommen, bis drei Uhr Bier getrunken, nach Hause gefahren, zwei Runden Pro Evo, aber immerhin auch was fürs Projekt geschafft.
Wenigstens etwas.