RSS-Feed

Gimp Magic

von Kai um 01:03 am Samstag, 28. März 2009 in Gimp | 3 Kommentare

SternenbildObwohl ich jetzt bestimmt Gefahr laufe, von den Photoshop Anhängern erschlagen zu werden, muss ich trotzdem los werden, dass ich Gimp eigentlich gar nicht so schlecht finde.

Nachdem ich ein paar Tutorials durchgearbeitet hatte, bin ich auch mit der (nicht gerade sehr intuitiven) Bedienung klar gekommen und dabei kam dieses Bild raus. Ich habe die Qualität etwas reduziert, um meine ohnehin schon gestresste Internetleitung nicht noch unnötig weiter zu strapazieren.

Klickt auf das Bild, um die Originalauflösung zu bekommen. (Die liegt bei 1680×1050). Kritik und Glückwünsche in den Kommentaren sind natürlich immer gern willkommen:-)

Letzte Klausur dieses Semester: Hands-On Programmieren 1

von Kai um 18:38 am Freitag, 13. März 2009 in Gadgets, Klausuren, Studium | 5 Kommentare

Update: Ungetestete Lösung Aufgabe 8 noch angehängt

Nachdem ich gestern die letzte Klausur in diesem Semester in Programmieren 1 geschrieben habe und deren Ausgang noch unklar ist, habe ich mich mal hingesetzt und versucht die ganzen Aufgaben zu rekapitulieren (danke auch an Fabian und Seba) und korrekt zu lösen:

1.) Man sollte die EBNF für beliebig lange Summen-Terme hinschreiben und danach das entsprechende Syntaxdiagramm dazu bilden (z.B. a+b, a+b+c+b+a+c, a ). Als EBNF ist wohl folgendes korrekt:
Summe = (a|b|c) {"+"(a|b|c)}

und das entsprechende Syntaxdiagramm sieht dann wohl so aus:

Syntaxdiagramm

2.) Als nächtes musste man ein paar Code-Fragmente auf Korrektheit überprüfen. Da ich die einzelnen Abschnitte nicht mehr rekonstruieren kann, lasse ich diese hier außen vor.

3.) Die Aufgabe war anhand eines übergebenen Monats (1 – 12) die korrekte Jahreszeit wiederzugeben. Einmal mittels Switch-Anweisung und einmal mit einem Array gelöst: Ich hab folgendes hingeschrieben:


public static String Jahreszeit (int monat)
{
// Lösung mit switch
switch(monat) {
case 1: case 2: case 12:
return "Winter";
case 3: case 4: case 5:
return "Frühling";
case 6: case 7: case 8:
return "Sommer";
case 9: case 10: case 11:
return "Herbst";
default:
return "Ungültige Monatsangabe";
}

// Lösung mit String-Array
String[] jahreszeiten = {"","Winter","Winter","Frühling","Frühling","Frühling","Sommer","Sommer","Sommer","Herbst","Herbst","Herbst","Winter"}

return jahreszeiten[monat];

4.) Bei der nächsten Aufgabe sollten für eine Zahl n alle ungeraden Teiler ausgegeben werden. Einmal mit einer while-Schleife, mit einer do-while-Schleife und mit einer for-Schleife. Meine Lösung:


public static void ungeradeTeiler(int n) {

// while-Schleife
int i=1;
while(i < n) {
if(n%i==0 && i%2 != 0) {
System.out.println(i);
}
i++;
}

// do-while-Schleife
int j=1;
do {
if(n%j==0 && j%2 != 0) {
System.out.println(j);
}
j++;
} while(j < n);

// for-Schleife
for (int k=1; k < n;k++)
if(n%k==0 && k%2 != 0) {
System.out.println(k);
}
}

5.) Die nächste Aufgabe bestand darin, eine Reihe von Zahlen nach Größe sortiert wieder auszugeben. Hier war es von Vorteil, wenn man sich eine der üblichen Sortierverfahren vorher eingeprägt hatte. Obwohl der QuickSort-Algorithmus mit einer der effizientesten Algorithmen ist, hab ich mich dennoch für den BubbleSort entschieden, weil ich mir den leichter merken kann:

public static void main(String[] args) {

// Einlesen der Zahlen von der Kommandozeile
int[] array = new int[args.length];
int i=0;
while(i array[i] = Integer.parseInt(args[i]);
i++;
}

// sortieren mit BubbleSort-Verfahren
i= 1;
while(i< array.length) {
int j = array.length -1;
while (j >= i) {
if (array[j] < array[j-1] ) {
// vertauschen der beiden Stellen
int tmp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
j--;
}
i++;
}

// sortierte Liste ausgeben
i=0;
while (i < array.length ) {
System.out.println(array[i]);
i++;
}
}

6.) Die sechste Aufgabe behandelte die binäre Suche. Das ist ein Algorithmus, der auf einem Array recht schnell ein gesuchtes Element finden kann. Der Algorithmus funktioniert folgendermaßen:
Als erstes wird das mittlere Element des Array auf geprüft. Wenn es gleich dem gesuchten Element ist, ist die Suche beendet, ist es kleiner als das gesuchte Element, muss man in der hinteren Hälfte des Arrays weitersuchen, ist es größer, wird in der vorderen Hälfte des Arrays weitergesucht.
Im nächsten Schritt wird dann wieder wie vorher weitergemacht: Also mittleres Element überprüfen, falls das gesuchte Element gleich dem mittleren Element ist, abbrechen, ansonsten jeweilige Hälfte überprüfen usw.
Ein Programmbeispiel konnte ich in der Klausur leider nicht liefern, werde mir aber dafür das Beispiel in der Wikipedia anschauen. Dort ist es neben einem Pseudocode ebenfalls in Java gelöst worden (neben Python und C).

7.) In der siebten Aufgabe sollte ein Skalarprodukt zweier Vektoren mit gleicher Länge ausgerechnet werden. Das Problem sollte einmal iterativ und einmal rekursiv gelöst werden:


// iterative Lösung
public static int skalar(int[] v, int[] w) {
int result = 0;
for(int i=0;i {
result += v[i] * w[i];
}
return result;
}

// rekursive Lösung
public static int skalar(int[] v, int[] w) {
int l = v.length;
if (l == 0)
return 0;
else {
int[] vv = new int[l - 1];
int[] ww = new int[l - 1];
for (int i = 0; i <= l - 2; i++) {
vv[i] = v[i];
ww[i] = w[i];
}
return v[l - 1] * w[l - 1] + skalar(vv, ww);
}
}

8.) Die letzte Aufgabe war es, eine Verbindungslinie zwischen zwei Punkten zu berechnen. Vorgegeben war eine fiktive Funktion setPixel(int[][] a, int[][] b). Zuerst sollte man den Mittelpunkt M zwischen dem Anfangs- und Endpunkt berechnen. Lagen dann alle berechneten Punkte in einem jeweils benachbartem Feld, war man fertig und konnte die errechneten Punkte an die Funktion setPixel übergeben, ansonsten musste man wieder jeweils den Mittelpunkt zwischen dem Anfangs- bzw. Endpunkt berechnen usw. Zum besseren Verständnis eine Grafik:
Verbindungen
Die Lösung erspare ich mir heute und wird morgen nachgereicht. Update: Ungetestete Lösung noch beigefügt:

public static int[][] getMiddlePixel(int A[][], int B[][]) {
int[][] M = new int[(A.length/2)+(B.length/2)][(A[0].length/2)+(B[0].length/2)];

if (A.length == B.length && A[0].length == B[0].length) {
// Die Punkte A und B liegen übereinander
return M;
} else if (A.length == B.length && A[0].length != B[0].length) {
// Der x-Wert der Punkte A und B sind korrekt
return getMiddlePixel(A,M);
} else {
// Der y-Wert der Punkte A und B sind korrekt
return getMiddlePixel(M,B);
}
}

Am ICQ-Protokoll rumgeschraubt

von Kai um 22:05 am Montag, 9. März 2009 in Allgemeines, How-To | 2 Kommentare

PidginSeit ca. einer Stunde können sich Benutzer des Pidgin-Clients nicht mehr mit dem ICQ-Netzwerk verbinden, da anscheinend (?) wieder am Protokoll rumgeschraubt wurde. Beim Versuch sich zu verbinden kam die Meldung

“Die Client-Version, die Sie nutzen ist zu alt. Bitte updaten Sie unter http://pidgin.im”

Das Problem sollte sich beheben lassen, sofern man den Client auf die aktuelle Version 2.5.5 updated. Ubuntubenutzer können in diesem Fall auf bereits fertig gepackte Pakete von www.getdeb.net zurückgreifen.

Link: http://www.getdeb.net/release/3960

Danach sollte der Connect wieder problemlos funktionieren.

Den Weg zur Arbeit/Schule/Uni besser nutzen

von Kai um 15:47 am Sonntag, 8. März 2009 in Produktivität | 0 Kommentare

Wenn ich mal die Zeit überschlage, in der ich täglich mit dem Bus unterwegs bin, auf jemanden warte oder im Zug sitze komme ich auf 1-2 Stunden / Tag. In dieser Zeit steckt eigentlich eine Menge Potential für Sachen, für die man sonst wenig bis keine Zeit hat, deswegen habe ich mir überlegt, wie sich diese “verschwendete” Zeit besser nutzen lässt.
Herausgekommen ist folgende Liste:

  1. Hörbücher oder Podcasts unterwegs hören
  2. Alternativ Bücher bzw. Ebooks lesen (
  3. Besuchte Vorlesungen nachbereiten
  4. Wer den Luxus hat ein Smartphone/iPhone zu besitzen kann E-Mails beantworten, Internetrecherchen machen, alternativ SMSe beantworten
  5. Tagesziele setzen, Brainstorming, Notizen machen

Edit: Leider sind die Links im aktuellen Theme nicht sehr gut sichtbar, aber sie sind da. Einfach mit der Maus über den Text fahren.

Warum ich Linux benutze

von Kai um 17:20 am Donnerstag, 5. März 2009 in Allgemeines, Linux | 0 Kommentare

In einer kürzlich eröffneten Blogparade wurde die Frage gestellt warum man Linux benutzt. Die Aktion ist zwar schon vorbei, aber ich nutze trotzdem die Gelegenheit meine Gründe dafür hier mal schriftlich festzuhalten.

Allem voran glaube ich, dass es immer noch nicht das “perfekte” Betriebssystem gibt, was jegliche Bedürfnisse und Wünsche des Benutzers abdeckt. Ich bin mir auch nicht sicher, ob sich diese Utopie jemals erreichen lässt, weil die Anwendungsgebiete für Computer so vielschichtig sind, dass es schwer ist ein darunter liegendes System zu bauen, was alle Bereiche abdecken kann.

Ich benutze ein GNU/Linux-basiertes Betriebssystem (-> Ubuntu), weil es mich bei den Sachen, die ich so täglich am Conputer mache ideal unterstüzt. Zum einen ist es im höchsten Maße anpassbar. Es gibt keinerlei Grenzen im Bereich der Gestaltung und Programmierung. Täglich anfallende Aufgaben lassen sich prima mit Cronjobs oder (selbst gebastelten) Scripts erledigen. Softwareinstallation geschieht bei mir (fast ausschließlich) über die Kommandozeile und das System läuft insgesamt sehr stabil.Tux

Trotzdem würde ich wahrscheinlich in meinem Bekanntenkreis niemandem dazu raten Ubuntu zu installieren. Zum einen, weil ich, wie oben erwähnt, weiß, dass es in diesem Fall das für mich perfekte Betriebssystem ist, dieses aber nicht auf alle anderen zutreffen muss. Zum anderen muss man sich, gerade wenn etwas nicht auf Anhieb klappt, auch schonmal tief ins Betriebssystem reinknien, Konfigurationsdateien durchsehen, etwas nachgooglen oder den Kernel patchen:-). Das ist natürlich nicht so schön, weil ein Betriebssystem den Benutzer bei der Arbeit unterstützen und nicht behindern sollte. Ich denke aber, bis wir soweit sind, dass Systemabstürze und miserable Benutzerfreundlichkeiten der Vergangenheit angehören, ist es noch ein weiter und steiniger Weg und bis dahin, muss man eben noch Kompromisse eingehen.

Brauchbare Mail-Clients unter Linux

von Kai um 10:10 am Mittwoch, 4. März 2009 in Linux | 0 Kommentare

E-Mail Programme gibt es doch eigentlich wie Sand am Meer, und dennoch sind die wirklich benutzbaren meines Erachtens an einer Hand abzählbar.

Da gibt es zum einen Evolution, welcher standardmäßig mit Ubuntu ausgeliefert wird (das Pendant zu Kmail unter Kubuntu), Claws-Mail und Sylpheed, die sich beide ebenfalls gut in Ubuntu integrieren, da beide auf GTK aufbauen, konsolenbasierte Programme wie Mutt oder Pine, was definitiv nichts für Mausbenutzer ist, oder eben Thunderbird.

Letzerer ist momentan mein Standard MUA (Mail User Agent). Im Prinzip gibt es an Thunderbird fast nichts auszusetzen, da viele meiner Anforderungen erfüllt werden (z.B. Google Calendar Unterstützung, lokale Ordner, gutes Filtersystem, Spam wird nach einer relativ kurzen Trainigszeit gut erkannt).

Was mich jedoch richtig stört ist zum einen die schlechte Integration in Ubuntu, da Thunderbird (zumindest in der aktuellen zweier Version) auf der XUL Engine und nicht auf GTK aufbaut. Das soll sich in der 3.0 Version zum Glück ändern. Zum anderen skaliert Thunderbird (imho) nicht richtig, d.h. er kann mehr schlecht als recht mit einer großen Mailflut umgehen. Die Suche ist eine Qual und dauert ewig (zumindest bei einem größeren Mailbestand), und wenn ich mal mehrere Tage lang meine Mails nicht checken konnte und dann ein paar Dutzend (Mails) auf einmal abhole (ich benutze POP), dann kommt es ebenfalls öfter mal vor, dass sich der Vogel in die Hosen macht und einfach abschmiert.

Ich habe mir überlegt noch auf die hoffentlich bald kommende Release-Version von Thunderbird 3.0 zu warten, und dann mal Mutt auszuprobieren, wenn diese Probleme nach wie vor bestehen.

Produktivitätslinks am Dienstag

von Kai um 10:42 am Dienstag, 3. März 2009 in Produktivität, Studium | 0 Kommentare

Da ich mich für das Thema interessiert habe, nachfolgend einige ausgesuchte Links zum Thema Notizen schreiben, Selbstorganisation und GTD (Getting Things Done):

Das Cornell System

von Kai um 09:37 am Montag, 2. März 2009 in How-To, Produktivität, Studium | 1 Kommentar

Nachfolgend beschreibe ich hier eine weitere Methode zum Überleben im Studienalltag, um Vorlesungen effektiver vor- und nachzubereiten und den Lernaufwand für Klausuren besser über die gesamte Vorlesungszeit zu verteilen, anstatt die letzten Tage und Stunden direkt vor der Klausur damit zu verbringen, sich die Nächte um die Ohren zu schlagen:-)

Das “Cornell Note Taking System” wurde an der gleichnamigen Cornell University entwickelt und basiert auf ein paar einfachen Feststellungen:

  • Nach dem Besuch einer Vorlesung vergisst man in den ersten 24 Std. ca 80% des Gehörten
  • “Aktiver” Umgang mit den mitgeschriebenen Notizen, d.h. analysieren, zusammenfassen, umformulieren und wiederholen verbessert das Verständnis und hilft dabei, sich die Informationen besser einzuprägen und das so gespeicherte Wissen schneller abzurufen
  • Studenten, die sich selbst mögliche Testfragen stellen und diese auch beantworten, schneiden in der Klausur meist besser als andere ab
  • Eine wöchentliche Durchsicht und aktive Wiederholung der mitgeschriebenen Notizen ist eine sehr effiziente Methode, sich die ganzen Informationen gut einzuprägen.

Material:
Das Cornell System empfiehlt sich einen Ringordner, Locher und jede Menge Papier anzuschaffen. Das Papier für handschriftliche Notizen sollte einen 6-7 cm breiten linken Rand haben.
Während der Vorlesung wird dann die rechte Seite des Blatts genutzt um mit zuschreiben, die linke Seite bleibt frei.
Nach der Vorlesung sollte dann innerhalb der nächsten 24 Stunden das Mitgeschriebene durchgesehen und die entstandenen Lücken im Text so gut wie möglich gefüllt werden. Idealerweise sollte man nach folgendem Schema vorgehen:

  1. Während der Durchsicht die wesentlichen Ideen und die Hauptpunkte kenntlich machen
  2. Auf der linken Seite des Blatts Schlüsselbegriffe und Fragen notieren, die mit Hilfe der rechten Seite des Blatts beantwortet werden können
  3. Die Notizen auf der rechten Seite zudecken, die aufgeschriebenen Schlüsselbegriffe rezitieren (auswendig lernen) und die Fragen durchgehen und beantworten
  4. Als letztes überprüft man, ob man alle Informationen auf der rechten Seite korrekt wiedergegeben hat und wiederholt ggf. das ganze Schema noch einmal.

Zu guter Letzt sollte man sich einmal die Woche für eine Stunde hinsetzen und sich die gesammelten Mitschriften für die vergangenen Tage durchsehen, und nach obigem Schema durchgehen. Am besten setzt man sich dafür auch eine wöchentliche feste Zeit (z.B. Sonntag abends).

Suggestions for Students

von Kai um 12:16 am Sonntag, 1. März 2009 in How-To, Produktivität, Studium | 0 Kommentare

Ratgeber zum MitschreibenAuf der Suche nach Lernmethoden und aktiver Prokrastination aufgrund bevorstehender Klausur bin ich über einen guten Link gestolpert.

David Hirsch, Professor an der Western Washington University hat eine Liste mit Vorschlägen und Methoden zusammengestellt, um seinen Studenten das Studieren leichter zu machen. Die ersten Ratschläge sind recht offensichtlich. Zum einen rät er generell der Vorlesung auch wirklich beizuwohnen und sich stets ganz vorne einen Platz zu suchen, sowie sich mit einer Gruppe von Kommilitonen zusammen zu tun, die gut miteinander harmonieren, d.h. die einen ähnlichen Wissensstatus haben, sich gegenseitig abfragen und Lücken füllen können.

Etwas interessanter fand ich den Part, in dem er vorschlägt, die eigenen Notizen nach der Vorlesung nochmal zusammenzufassen, wichtiges von unwichtigem zu trennen, sowie beim schriftlichen Kopieren der Notizen sich selbst zu überprüfen, ob das geschriebene auch verstanden wurde.

Generell ist das natürlich ein guter Tipp, aber so etwas ist immer leichter gesagt als getan. Probleme entstehen nämlich genau dann, wenn man nicht alles notieren konnte, wenn keine Möglichkeit bestand Fragen zu stellen, sowie der unerwähnte Zeitaufwand der dabei entsteht, wenn man das Kopieren der mitgeschriebenen Notizen “2-3 mal die Woche” exerzieren sollte.

Deshalb hab ich mich mal etwas näher über dieses “Note Taking” informiert. Ebenfalls auf der Webseite der Western Washington University habe ich hierzu eine Art Tutorial gefunden.

Hier heisst es, dass

geschicktes Mitschreiben eine wichtige Komponente für das erfolgreiche Studieren an einer Universität sei (freie Übersetzung des Autors).

Auch hier heißt es wieder, dass der Schlüssel zum Erfolg das aktive Durchsehen der eigenen Notizen ist.
Folgende Dinge werden hier erläutert:

Aktive Teilnahme an der Vorlesung hilft sich das Gelehrte besser zu behalten

  • Vorlesungen regelmäßig besuchen
  • Ganz vorne sitzen
  • Stell dir vor dein Professor unterhält sich nur mit dir (das ist lustig :-) ) und es hängt von dir ab, wie gut du zuhörst. Stelle Fragen, wenn du etwas nicht verstehst.
  • Konzentrieren

Auf die wesentlichen Ideen achten beim Mitschreiben in der Vorlesung

  • Mitschreiben, wenn der Professor explizit sagt, dass folgendes wichtig ist
  • Tafelbild abschreiben
  • Wenn der Prof. einen Sachverhalt näher erläutert ebenfalls notieren
  • Explizit genannte Vor- und Nachteile eines bestimmten Themas machen sich auch immer gut in den Notizen
  • Auf die Modulation der Stimme achten, d.h. wenn der Dozent lauter/leiser wird, ist das oft ein Indikator, dass das nachfolgende bedeutend sein könnte, sowie bestimmte Signalwörter (z.B. “mit anderen Worten”, “Zum Beispiel”, “Zusammengefasst”)

Wenn der Dozent zu schnell spricht

  • Hier hilft es sich für die nächste Stunde vorzubereiten, d.h. Vorlesungsunterlagen/Skript für nächste Stunde bereits vorbereiten
  • Die mitgeschriebenen Notizen mit einem Kommilitonen (oder mehreren) vergleichen und ggf. ergänzen.
  • Beim Mitschreiben der Notizen Platz lassen für Dinge, die man nicht mit notieren konnte.
  • Entwickeln von speziellen Symbolen, wenn man den Faden verloren hat (z.B. “?” oder “F” für Frage). Danach fällt es oft leichter die entsprechenden Stellen nochmal zu erläutern bzw. nachzufragen
  • Professor fragen, wenn etwas unklar ist, oder man etwas nicht verstanden hat.
  • Vorlesung aufzeichnen (Erlaubnis vorher einholen)
  • Abkürzungen benutzen, evtl. auch eigene Abkürzungen entwicklen.

Wie bereits anfangs erwähnt, erscheinen viele Hinweise eigentlich offensichtlich, ich denke einzig und allein die Disziplin aufzubringen, wirklich jede Vorlesung so zu besuchen dürfte der einzige Knackpunkt an dieser Strategie sein;-)

Einen Arbeitsplatz einrichten (2. Teil)

von Kai um 11:13 am Sonntag, 1. März 2009 in Arbeitsplatzgestaltung, How-To, Produktivität, Studium | 0 Kommentare

So, nachdem ich mich ein bisschen durch die ganzen Ratgeber gewühlt habe, kann ich folgende Tipps hier mal exemplarisch zusammenfassen:

  • Am (Heim)Arbeitsplatz sollte man sich wohlfühlen,d.h. man soll sich gute Möbel gönnen. Idealerweise einen gepolsterten Drehstuhl und einen Tisch, der auf die Körpergröße anpassbar ist bzw. angepasst ist. Ich selbst habe hier einen Bürostuhle von Vitra. Die sind qualitativ ziemlich gut, nutzen sich nicht schnell ab und verursachen keine Rückenschmerzen.
  • Man sollte den Ort, an dem man unter Umständen täglich viele Stunden verbringt unbedingt mit ein paar Pflanzen ausstatten. Lockern den Raum auf, erhöhen die Luftfeuchtigkeit und gleichzeitig die Stimmung.
  • Unbedingt die Lichtverhältnisse überprüfen. Gerade wenn man viel liest, ist ausreichend Licht sehr wichtig. Außerdem ermüden dann die Augen nicht so schnell.

Im Grunde genommen sind das ja keine Weisheiten, die vom Himmel gefallen sind, aber manchmal hilft es schon darüber zu lesen, um die eigene Arbeitssituation zu überprüfen. Ich hab den Monitor übrigens wieder runtergestellt, ne Pflanze gekauft und bin jetzt eigentlich ganz zufrieden damit. Weniger ist manchmal auch mehr :-)

Es gibt übrigens auch ein entsprechendes Bildschirmarbeitsgesetz, welches genau regelt, wie ein entsprechender Arbeitsplatz auszusehen hat. Gibt es eigentlich etwas, was nicht geregelt ist in Deutschland?

Link: http://www.gesetze-im-internet.de/bildscharbv/