IOException.de

Icon

Ausgewählter Nerdkram von Informatikstudenten der Uni Ulm

Interview: Dominik ‘phil’ Lang

I got to know phil early on when I started studying. Now, some years later, the situation changed a bit and he is now one of my roommates and a close friend. He is also one of the most enthusiastic free and open source software fighters I personally know. As such he made a larger and larger part of his friends migrate to OpenBSD. A few of his code snippets can be found on his website. After his friends pursued him for months he lately gave an amazing talk at the ChaosSeminar in Ulm on OpenBSD (in german).

Who are you and what do you do?
My name is Dominik Lang and I am also known as phil, a nickname that was somehow established when I first entered university. Currently I am in a Masters program for Computer Science at the University of Ulm. My main interests in computer science are security, networking, operating systems and Unix.

Which software or programs do you use most frequently?
Most of the time I work on the command line with a shell. I use xterm with tmux and ksh. A lot of the time I’m writing stuff with an editor, which is nvi. Other than that, standard tools such as cd, ls, rm, mv, cp, sed, grep and ssh. An instance of Firefox is also always running somewhere, although I don’t surf around much except for a few technical blogs because I see the web primarily as a means for information exchange.

Why did you decide to use your particular operating system(s) of choice?

OpenBSD! For various reasons:

Security:
Security has always been my main focus and interest. It is mostly looked at from a high level point of view by computer scientists. Complex models and standards are created; the more generic the better. However, often the design is overly generic and the complexity usually isn’t needed and therefore one of the most important rules of security isn’t complied with, namely simplicity. Secondly, someone has to implement all that stuff: Higher levels of complexity lead to more bugs, as do bad design and ugly code.

This is where OpenBSD comes in. Their view on security is a more practical one: simplicity (on the user’s and the developer’s side) and well designed, clean, readable code. Rather than putting complex layers on top of each other, they aim to solve the problem at its root and make things right from the beginning on.

Freedom:
The never-ending debate on the definition of freedom: GNU vs BSD. As one might guess, I support the BSD view of freedom but this isn’t a major reason for me to use OpenBSD. However, how the OpenBSD project pursues freedom is. The OpenBSD source tree is as free as it can get. Blobs are not an option. The project’s developers are among the leading fighters for open hardware documentation. I haven’t seen this dedication in another project. Other projects incorporate proprietary code or sign NDA’s which is a step back for open source / free software.

All in all, I share the same views as the OpenBSD developers and their uncompromising pursuit of security and simplicity has influenced me a lot.

In what manner do you communicate online?
I use mcabber as an XMPP client and for email I use OpenSMTPD as an mta, fdm as an mra and mmh as an mua. This allows me to integrate my online communication into my ksh/tmux environment.

Which folders can be found in your home directory?
A lot of folders. ;)
I haven’t yet found a fully satisfying solution how to structure my data. I created folders as I went along and mostly they just stayed as they were. Some of them are very chaotic, others are more structured.

The most important folders are:

Mail: self explanatory
bills: self explanatory
bin: self-written tools / programs / scripts
development: this is where I keep the sources of my self-written stuff
digmed: movies / series / photos / music etc.
docs: papers / books etc. → CHAOS
downloads: self explanatory → CHAOS
dumps: temporary dumps from tools / webpages / other stuff
log: some of my own tools log to here
notes: stuff that I want to remember or drafts
src: this is where I keep sources of external projects and also local patches
tmp: all sorts of random stuff, which doesn’t fit in anywhere else → CHAOS
uni: all my university stuff

Which paper or literature has had the most impact on you?
That is a tough question. Theres no THE literature as in a “bible” in my life. There is one concept which is my motto and pretty much is the basis of all my decisions: KISS – keep it small and simple. However, I can’t remember where and when I first heard of it. Other than that, the following writings probably inspired me the most.

In everyday life I’d say the writings of Morihei Ueshiba, the founder of Aikido. His writings have taught me to treasure life more. I do not share his religious views, but rather his idea of how to approach life.

In computer science it has probably been “The Art Of Unix Programming” by Eric S. Raymond. It was my first more thorough contact with the Unix philosophy, which has also inspired and guided me.

What has had the greatest positive influence on your efficiency?
Two things: an open source operating system and the shell in combination with tmux.

By using an open source OS I can easily tailor my system / working environment as I want it. I’m not stuck with the interface the selling company puts in front of me, but can choose to change it to my own needs.

Also the transition from mainly working with a GUI to almost completely working with a shell. For a computer scientist and programmer, a shell interface can boost efficiency by a huge amount. A simple scripting interface is right there to use directly in the command line. That’s when I said goodbye to boring / repetitive tasks. =) In combination with the shell, tmux also sped up things a lot, because one can comfortably change between different shell sessions.

How do you approach the development of a new project?
The first thing I usually do is just lie down comfortably on a sofa or bed and just think about what I want to do, which problems I want to solve, what the finished project should be able to do and how the UI should look like.Pretty much a sort of requirements engineering and a first design in a sort of meditative state. ;)
Then I begin to code the ideas. I usually need a proof of concept and a first kind of prototype before I can go on and really think about a reasonable design. Because then you have a better feeling of what the result should look like and what technical problems you will encounter.

In your opinion, which piece of software should be rewritten from scratch?
I have often heard that the OpenSSL API isn’t as easy to use as it could be. For such a critical library, the API should be rewritten to be more user friendly. Also, all major browsers should be rewritten to get rid of the bloat. =)

What would your ideal setup look like?
Welcome to my secret room, which can only be entered through a cliche secret door in a bookshelf. The room is a storage hall, one half filled with all kind of gadgets like in iron man and displays and server racks and the other half is a gym with cool obstacles. My main workstation looks like the 7 display workstation in Password:Swordfish, but of course the whole setup is running OpenBSD (including all the servers and routers etc.). Because clearly the hall is pretty large, there is a hoverboard to get from point A to point B quickly. For the case of a zombie apocalypse, there is a stash of lightsabers. Ah, who am I kidding, I’d be constantly playing with them and program them as mood and disco lights. ;)

Click here for the full picture.

Gitlab: Freie GitHub-Alternative für geschlossene Projekte

Wer einmal mit einer Versionsverwaltung wie Git oder Subversion gearbeitet hat, möchte es für die eigene Arbeit nicht mehr missen: Nie mehr verzweifeln, weil der Texteditor nur die letzten X Änderungen über die allseits beliebte Tastenkombination Strg+Z zurücknehmen lässt. Kein leidiges Abgleichen von Dateien per Hand, wenn mehrere Leute am gleichen Projekt arbeiten.
Für die meisten dieser Versionskontrollsysteme ist ein zentraler Server, auf dem die Datenstände und Versionen allen Projektmitgliedern bereitgestellt werden können, zwingend erforderlich oder zumindest sehr empfehlenswert. In der Open-Source-Welt hat sich hierfür GitHub etabliert, was das kostenfreie Git-Hosting für öffentliche Projekte erlaubt. Wer – wie wir für unser Softwareprojekt (Sopra) im Rahmen des Informatikstudiums – im Team an einem privaten Repository arbeiten möchte, muss bei GitHub schon etwas Geld in die Hand nehmen: Zwar wäre es uns die sieben Dollar im Monat wert gewesen, da ich aber die Vorteile von Git auch für ein paar andere eigene (nicht öffentliche) Projekte verwenden wollte und einen vServer quasi brachliegen hatte, sah ich mich nach selbstgehosteten Alternativen um – und stieß auf Gitlab.

Gleich vorweg: Wenn man Git alleine nutzt, braucht man natürlich überhaupt keinen Server. Und wem grafische Oberfläche ohnehin ein Fremdwort ist, der kann seinen Server sicher auch nur als reinen Git-Server betreiben. Für unser Team waren in der Programmentwicklung jedoch die Features, die auch GitHub bietet, sehr wichtig: Wir wollten Issues online erfassen, Commits direkt im Code kommentieren. Ja, vielleicht sogar MergeRequests direkt über die Web-Oberfläche abarbeiten. All dies wurde durch Gitlab ermöglicht, wenn auch zum Teil erst nach ein paar Versionssprüngen.

Installation und Updates

Versionssprünge? – Ja, Gitlab steckt so gesehen noch in den Kinderschuhen. Oder anders formuliert: Es wird stetig verbessert. Wer sich ein wenig mit Ruby auskennt oder einfach ein paar neue Ideen einbringen will, kann ja mal bei Gitlab auf GitHub vorbeischauen.
Wir fingen im März unter Nutzung der Version 2.2 an, mit Gitlab zu arbeiten. Mittlerweile läuft auf meinem Server die 2.6er-Version, in den kommenden Tagen müsste das Update auf 2.7 veröffentlicht werden. Anfangs weigerte ich mich, das System zu aktualisieren, um das Sopra nicht unnötig zu gefährden. Es zeigte sich jedoch schnell, dass jedes einzelne Update sehr nützliche Features mit sich brachte – so kamen seit Beginn unserer Arbeit die Möglichkeit der Milestones, Taggen von Issues und das Annehmen von MergeRequests über die Web-Oberfläche dazu.

Die Installation auf dem eigenen Server geht relativ einfach von der Hand. Eine Schritt-für-Schritt-Anleitung dazu gibt es im Gitlab-Wiki, die ich eigentlich nur abarbeiten musste. Offiziell unterstützt wird nur Ubuntu, es finden sich im Internet aber mittlerweile genügend Hilfen, wie man Gitlab auch auf CentOS- oder anderen Servern zum Laufen bekommt. Einmal installiert gehen Updates so einfach wie nur möglich von der Hand: Ein einfaches git pull und rake db:migrate reichen in aller Regel aus, um das System auf den neuesten Stand zu bringen.

Features

Wie oben schon geschrieben: Im Prinzip bringt Gitlab alles mit, was man auch von GitHub kennt. Das große Vorbild schwingt in allen Diskussionen um neue Features mit. So birgt die Oberfläche von Gitlab erstmal auch kaum Überraschungen.
Da ich noch nie auf GitHub in einem Team gearbeitet habe, kann ich das leider nicht vergleichen. In Gitlab gibt es eine ganze Reihe an verschiedenen Rollen, vom “Guest” bis “Master”. Die Rollenverteilung auch im Team umzusetzen, erwies sich bereits nach wenigen Tagen gemeinsamer Arbeit am Sopra als sehr nützlich: Durch die Unterscheidung zwischen “Developer” und “Master” konnten nur noch zwei Mitglieder in unseren Master-Branch pushen und waren dementsprechend für das Mergen und Schließen der Issues hauptverantwortlich.

Letztlich nutzten wir im Team mit Ausnahme der sogenannten “Wall” alle Mittel, die uns Gitlab an die Hand gab. Am anschaulichsten wird das vielleicht, wenn man betrachtet, wie sich unser Workflow seit Benutzung von Gitlab geändert hat:

  • Gerade am Anfang war die intensive Arbeit mit Git für uns alle noch ziemlich neu. Das Wiki eignet sich sehr gut, um auch gemeinsam die wichtigsten Kommandos zusammenzufassen. Aber etwa auch um nochmal die Programmierkonventionen zu benennen.
  • Code wird nicht mehr per Skype oder Google Hangout unter Nutzung der Bildschirmübertragung diskutiert, sondern einfach über die Weboberfläche – und zwar gerne auch direkt mit Kommentaren im Code oder Commit.
  • Issues und Arbeitsaufträge werden nicht mehr über Rundmails verteilt, sondern einfach als neue Einträge unter Issues hinterlegt.
  • “Bei mir trat gerade ein Fehler in Deinem Modul auf.” – “Schick mir mal die Fehlermeldung per Skype”. Solche Dialoge gibt es nicht mehr. Wir nutzten Skype zwar natürlich weiter intensiv zur Teamdiskussion, lange Fehlermeldungen haben im Chat aber nichts zu suchen. Und wanderten somit in die Snippets, wo man ihnen eine Expire-Zeit zuweisen kann.
  • Jegliche Dokumente wie die Benutzerdokumentation werden auch im Gitlab hinterlegt. Und nicht wie zuvor über Dropbox verteilt.
  • Unverändert blieb jedoch die Nutzung von GoogleDocs. Für Dokumente, die sich häufig verändern, wie etwa das Projekttagebuch, ist das doch noch einfacher, da Gitlab im Gegensatz zu GitHub (noch?) nicht das Ändern von Dateien via Browser unterstützt.

Grundsätzlich gab es also nichts, was uns noch gefehlt hätte. Nervig waren hin und wieder lediglich die kleinen Aussetzer, auf die ich im nächsten Abschnitt mal kurz eingehen werde.

Limits

Auch wenn sich Gitlab und GitHub nicht nur optisch sehr ähneln, verfolgen beide Systeme eigentlich unterschiedliche Ziele: Gitlab beschränkt sich komplett auf das Hosting von privaten Repositories. Es ist also nicht möglich, Gitlab als selbst gehosteten Ersatz für Github zu nutzen, und seine Open-Source-Projekte damit zu verwalten. Klar, prinzipiell geht das natürlich auch, aber dann kann eben niemand den Code sehen. Im Gegensatz zu GitHub bietet der Klon nämlich keine Möglichkeit, auf Projekte ohne Registrierung zuzugreifen. Und neue Benutzer anlegen kann nur der Admin. Auch wenn in sehr regelmäßigen Abständen von etwa 2 Wochen ein neuer Issue an die Entwickler gerichtet wird, dies doch umzustellen, bleiben diese ihrer Linie treu und grenzen sich damit ganz klar von Github ab. Und das auch ganz explizit mit der Aussage, dass Open-Source-Projekte eben am besten zentral auf GitHub gehostet werden.

Das Bearbeiten von MergeRequests direkt über die Weboberfläche ist zwar sehr komfortabel, sollte naturgemäß aber nur bei einfachen Änderungen benutzt werden. Ohnehin prüft Gitlab, bevor es die Möglichkeit anbietet, ob es zu irgendwelchen Merge-Konflikten kommt. Doch auch wenn dem nicht so ist, habe ich Abstand davon genommen, umfangreiche Änderungen über diesen Weg zu übernehmen. Letztlich schien mir der traditionelle Weg über git merge und ggf. git mergetool doch immer noch am sichersten.

Etwas Schluckauf kann man Gitlab im Moment auch noch durch den intensiven Gebrauch von Umlauten bereiten: Commit-Messages, die Umlaute beinhalten, können mitunter dafür sorgen, dass ein ganzer Dateibaum in der Weboberfläche nicht mehr verfügbar ist. Umlaute in Dateinamen sorgen dafür, dass die ansonsten sehr hilfreiche Funktion, um ein komplettes Repository als *.tar.gz herunterzuladen, plötzlich nicht mehr funktioniert. Schade ist, dass das System in diesen Fällen keine ordentliche Fehlerseite liefert, sondern schlicht mit 404 quittiert. Und man dann händisch versuchen muss, die Sachen in der Datenbank zu korrigieren.
Generell hat die Zahl der Fehler mit jedem Update aber gut abgenommen, sodass man sich einfach auf die Vermeidung von Umlauten einlassen sollte und ein sehr gutes und stabiles System bekommt.

Screenshots

Eine Demo gibt es ebenfalls auf den Seiten von Gitlab.

Interview: Juniorprof. Dr. Birte Glimm

This time the interview is with Birte Glimm, who is a junior professor at the University of Ulm since July 2011. Her research focus lies in knowledge representation and automated reasoning. In the last semesters she has given lectures in algorithms for knowledge representation and semantic web.

At the OpenCityCamp, a Barcamp centered around OpenData that took place a week ago here at the university, she gave an introduction on linked open data. This is quite fitting, since she is a member of the W3C SPARQL Working Group.

Who are you and what do you do?
I am a junior professor at the University of Ulm, where I work at the institute of artificial intelligence.

Which software or programs do you use most frequently?
I use Aquamacs to write publications, lecture notes, etc., so that’s one of my most frequently used programs. For viewing PDFs, I use Skim, which I prefer over Acrobat on the Mac. Apart from that I of course frequently use a browser (mostly Firefox) and I would definitely miss Eclipse and my terminal (shell).

Why did you decide to use your particular operating system(s) of choice?
Software on Mac OS works quite nicely for what I have to do and I like the overall look of Mac OS. It’s also easy to handle and installing programs is hardly ever a pain. I work on the Mac for some years now, so my memories of Windows are a bit outdated, but as far as I remember Windows frequently asked me questions that I didn’t want to answer (like whether I want to remove unused symbols from my desktop, which I don’t) and it was less smooth to use. All in all, I am happier with Mac OS. I never really used Linux/UNIX at least not for my personal computer.

In what manner do you communicate online?
I use email, Skype, IRC and sometimes special online meeting software (XMeeting or Webex). Email is by far the most used of those, but Skype is useful for collaborating with people in different locations or for just calling friends. I use IRC only for W3C telephone conferences, where an IRC bot manages the call participants and where we keep minutes in IRC.

Which folders can be found in your home directory?
Desktop, Documents, Downloads, Dropbox, Movies, Music, ontologies, Pictures, Public and Temp.

Which paper or literature has had the most impact on you?
Hm, it’s rather people who had an impact than papers or literature. I have also read so many papers that there is not a single one that had a big impact, but they all contributed a bit to my work or to my understanding of the things I work on.

What has had the greatest positive influence on your efficiency?
Not working at home. If I work in the office, I get less distracted and find it easier to just work.

How do you approach the development of a new project?
I scribble with pen and paper.

In your opinion, which piece of software should be rewritten from scratch?
That is a tough question as most software I use works quite well. I would probably rather rewrite some parts of a software. For example in the OWL Editor Protege I would spend some time on rewriting the part that interacts with the reasoner. This is probaly because I am implementing a reasoner that is used as a plugin in Protege and I see how the communication between Protege and the reasoner is sometimes not ideal.

What would your ideal setup look like?
If it doesn’t have to be real, I would want a MacBook Air with lots of memory and a big SSD plus a nice external screen.

Click here for the full picture.

Interview: Markus ‘meillo’ Schnalke

I got to know meillo after I followed his online writings for quite a while. During that time he stayed around in South America travelling and working on free software. After he returned to the University of Ulm I walked up to him and introduced myself. I got to to know him better over time and with time we became good friends. He is currently working on his master thesis, though he already holds a diploma on computer science by the University of Applied Sciences in Ulm. If you are further interested in Unix I would recommend to check out his website or one of his seminar recordings (this one for example) at the local ChaosSeminar (language: german).

Who are you and what do you do?
I am Markus Schnalke, also known as meillo. I love Unix, especially its philosophy. Style matters a lot to me and I try hard to write well readable code. I feel a great desire for discovering the early Unix and caring for old software.

Which software or programs do you use most frequently?
The short answer is: The Unix shell. My shell history shows that I run ls, cd and vi most frequently. However, more interesting is, that I spend most of my computer time editing (ex-vi), browsing the web (firefox+pentadactyl or w3m) and emailing (mmh). The window manager aewl (my personal version of dwm) and either tmux or screen are running as well.

Why did you decide to use your particular operating system(s) of choice?
I used to choose Debian GNU/Linux for philosophical, social and technical reasons. Whereas I’m still convinced of the former two, my technical view differs now. In consequence, I switched to Crux, one year ago. Crux is simple. There’s nothing in my way. I have the controls right in my hands. Yes, I do need to adjust manually here and there, but that’s okay. I just don’t want to be put in a sandbox anymore. I don’t want to be kept from “messing up” the (package) system. I am bored building castles in the sand. I want to change the world now. I want to have all the power and I want to be *encouraged* to put my hands on. That’s what Crux offers to me currently.

In what manner do you communicate online?
About 90% of my online communication goes via email. As developer of two email software projects (mmh, masqmail), that’s no surprise. The remaining 10% are spend in debianforum.de. I don’t chat nor do I use those modern communication technologies, but I’m on the way to enter Usenet.

Which folders can be found in your home directory?
There’s bin, of course. Then, I’ve started to have src and tmp. Often you can find docs, talks, and dl. For multimedia content German names have survived: fotos, filme, musik.

Which paper or literature has had the most impact on you?
I do love reading old computer books, especially everything written by those guys who shaped Unix. The two books by Kernighan and Pike — “The UNIX Programming Environment” and “The Practice of Programming” — defined my view on Unix and on style. “The Mythical Man-Month” by Fred Brooks and some book by Kent Beck on Extreme Programming opened my eyes for a convincing view on software engineering.

What has had the greatest positive influence on your efficiency?
Definitely, discovering Unix, with all its meanings and concequences. It had improved the efficiency of my computer work fundamentally. Although the Internet technologies can help you a lot, I am most productive when working offline.

How do you approach the development of a new project?
Well, I don’t have much to say here, thus I rather tell one of my favorite jokes: “There are 10 kinds of people in the world; those who understand binary and those who don’t.” :-)

Which programming language do you like working with most?
I became a C programmer, eventually. Of course, I do not only program in C; sh and awk are always in the game as well. You see, I’ve settled with the programming languages that were part of the research Unix from Bell Labs. This should not surprise. I think C is very well designed. It is small and very consistent. I like that a lot. Of course, it has its disadvantages but for a Unix programmer with love for simplicity and the old Unix, the programming language of choice must be C. There’s no way around it. The shell language glues the programs together and increases the power of the system by one magnitude. Awk is somewhere between sh and C, and covers the field of text processing, which neither sh nor C does well. For me, the combination of these languages is a fully satisfying choice.

In your opinion, which piece of software should be rewritten from scratch?
That’s a tough question because we could discuss on the sense of rewriting from scratch for hours. I’ll answer though. Find(1) for instance should be redesigned … but if someone would know how to do it well, it likely would have been done already. X has good concepts but it became old, fat, and the world took different roads to different concepts. X never adapted well enough. Hence, X is my choice for a rewrite from scratch. In the small, however, I clearly vote for a rewrite of the infamous m_getfld.c in mmh/nmh. Who has the guts to take the curse on him?

What would your ideal setup look like?
Maybe it would be Plan 9 without the GUI. Plan 9 offers the concepts of Unix, applied even more thoroughly. It misses some bad design decisions and it is free of the Unix wars’s legacy. All this is very appealing. If I could have that, without the fundamental integration of the GUI …

Click here for the full picture.

Interview series

Inspired by the question series from usesthis.com I am hereby starting a new interview series in which I want to ask the same questions to different people. I love the usesthis.com series, but I find the answers to be kinda simliar these days. I can’t remember how often I have read answers like “Well, I got my MacBook, an iPhone and an iPad“. But what I am really interested in is something different: This series is directed towards people with a strong IT-background. I wrote down some interesting questions and then sat down with phil and meillo to discuss them. We did a lot of brainstorming and came up with some further questions. They both deserve credit for being really helpful! I also have to give credit to Kate, who was really helpful in translating the questions to proper english (which I still have to get better at ;).

The questions you will find now, are those that I am really interested in. Stuff that I find really helpful for myself. I hope that you will gather some insights and find them as interesting as I do.

The series starts with meillo because he was the first of the two who got around answering the questions. Or well… I don’t know if phil maybe planned ahead to get more insights in what to answer ;). But we will see… the next interview will follow shortly.

Click here to get to the first interview.

Irren ist menschlich

Fehler zu machen gehört zu den grundlegenden menschlichen Eigenschaften. Interessanter als Fehler, die auf falschem Wissen, falschen Zielen oder falschen Einschätzungen basieren(„error of thought“), sind vor allem unbewusste und versehentliche Fehler („slips“). Gründe und Ursachen hierfür sind nicht nur in der Psychologie interessant, sie können auch beim Gestalten von Gegenständen wie Benutzeroberflächen dabei helfen, die Benutzbarkeit zu erhöhen. Einerseits können Fehler gezielt von Anfang an verhindert werden, andererseits ermöglicht eine Antizipierung möglicher Fehler die Erkennung und Behandlung der Fehler.
Der Psychologe Donald A. Norman klassifizierte unbewusste und versehentliche Fehler in folgende sechs Kategorien:

Capture error
Grundlage für diesen Fehler sind zwei Handlungsabläufe, die sich ähneln und insbesondere einen gleichen Anfangszustand besitzen. Hierbei ist ein Handlungsablauf ein ganz alltäglicher Ablauf, der sehr häufig ausgeführt wird, während der andere eher eine Ausnahme darstellt. Führt man nun eine seltenere Handlung aus, so ist es aufgrund des Capture erros möglich, dass diese Handlung durch die alltäglichere ersetz wird.
Beispiel:

Alice fährt jeden Tag morgens mit dem Bus in die Uni. Am ersten Tag der Semesterferien hat sie sich vorgenommen, einkaufen zu fahren. An der Bushaltestelle steigt sie trotzdem in den Bus zur Uni, anstatt in Richtung des Einkaufszentrums, da der gewohnte Handlungsablauf den selteneren übernommen hat.

Description error
Ein Description error ist möglich, wenn eine beabsichtigte Handlung sehr viel Ähnlichkeiten mit anderen Alternativen aufweist. Grund hierfür ist, dass die mentale Beschreibung des Ziels nicht genau genug ist um bei der Ausführung eindeutig zu sein.
Beispiel:

Bob will eine Milchpackung aus der Tür des Kühlschrank holen, um sich ein Glas zu füllen. Seine mentale Beschreibung weist ihn an, die Packung aus der Kühlschranktür zu holen. Nun öffnet Bob die Türe des Kühlschrankes, greift allerdings zur benachbarten Packung Orangensaft, da sie in diesem Moment exakt auf die mentale Beschreibung passt. Der Description error hat zugeschlagen.

Data-driven error
Viele Aspekte menschlichen Verhaltens passieren unbewusst und werden direkt durch das Empfangen sensorischer Daten ausgelöst. Ein Beispiel für dieses Verhalten ist die Reaktion auf ein Insekt auf der Haut, das man ohne Überlegung beiseite schiebt. Nun kann es passieren, dass beim Eintreffen neuer sensorischer Daten diese mit gerade laufenden mentalen Prozessen interferieren und einen Data-driven error auslösen.
Beispiel:

Caroline schreibt gerade einen Blogeintrag über eine Person. Plötzlich poppt eine ICQ-Nachricht von einem Freund auf. Fälscherlicherweise schreibt sie nun in ihrem aktuellen Satz nicht den Namen der ursprünglichen Person, sondern den Namens des ICQ-Kontaktes.

Associative activation error
Genauso wie externe Daten können auch interne Gedanken oder Assoziationen laufende Handlungen beeinflußen.
Beispiel:

Daniels Telefon klingelt und er begrüßt sein Gegenüber mit „Herein!“

Diese Art von Fehler ist übrigens eng mit dem verwandt, was allgemein unter Freud’schen Fehlleistungen bekannt ist. Auch das Verwechseln von Namen enger Verwandter bei Familienfesten fällt in diese Kategorie.

Loss of activation error
Diesen Fehler dürfte wohl jedem bekannt sein. Es geht darum, eine gewisse Aktion durchführen zu wollen, jedoch bei der Ausführung das eigentliche Ziel zu vergessen.
Beispiel:

Erik geht in das Schlafzimmer, um ein T-Shirt aus dem Schrank zu holen. Als er im Schlafzimmer ankommt, weiß er nicht mehr, wieso er eigentlich ins Schlafzimmer gegangen ist.

Mode error
Diese Fehler entstehen, wenn bestimmte Aktionen abhängig vom Zustand zu anderen Ergebnissen führen, und man sich mental in einem anderen Zustand befindet, als man in Wirklichkeit ist.
Beispiel:

Felizitas ist auf dem Heimweg von einer Party. Sie möchte wissen wie viel Zeit sie benötigt und startet ihre Stopfunktion an ihrer digitalen Armbanduhr. Nach ein paar Minuten möchte sie wissen, wie lange sie schon unterwegs ist und drückt die Taste, die im normalen Modus zur Aktivierung der Hintergrundbeleuchtung der Anzeige zuständig ist. Leider sorgt die gleiche Taste im Stopmodus dafür, dass die Zeitmessung zurückgesetzt wird. Sie ist Opfer eines typischen Mode errors geworden.

Insbesondere der letzte Fehler ist ein wichtiger Fehler im Zusammenhang mit interaktiven System, denn er zeigt auf, wie wichtig es ist, dem Benutzer ein klares, verständliches mentales Modell der Anwendung zu liefern, welches solche Fehler verhindert. Ein anderes Beispiel im Bereich des Computers zur Verhinderung ist fehlertolerantes Löschen. Oft möchte man eine gewisse Datei löschen, vertut sich aber der Auswahl, zum Beispiel aufgrund eines Description errors, und selektiert die falsche Datei. Auch die direkt darauf folgende Löschbestätigung hilft nicht, da die Person sich noch in einem Handlungsablauf befindet, in der sie davon ausgeht, dass sie die richtige Datei löscht. Erst später bei der Bewertung des Handlungablaufes erkennt sie wohlmöglich den ausgeführten Fehler. Durch einen Papierkorb, der gelöschte Objekte zunächst zwischenspeichert, oder durch die Implementierung von Undo-Funktionen lassen sich solche Fehler benutzerfreundlich beheben.

Weiterführende Literatur: The Psychology of Everyday Things, Donald A. Norman (1988)

Einfacher SMTP-Server zur Aufgabenverarbeitung

Häufig ärgere ich mich über Webanwendungen, die ihren Nutzern Mails schicken, wenn irgendein Ereignis eingetreten ist oder eine Aktion des Users benötigt wird, eine einfache Antwort auf die Mail aber nicht möglich ist. Ein typisches Szenario ist etwa das Bestätigen der Mailadresse, wenn man sich bei einem neuen Dienst registriert: Man gibt seine Mailadresse in ein Online-Formular ein, bekommt eine Aktivierungsmail zugeschickt und muss darin einen Link anklicken, der wiederum zum Webdienst führt und meine Mailadresse bestätigt. Wäre es nicht einfacher, die Mail so wie sie ist an den Absender zurückzuschicken um sie zu bestätigen?

Dies sei nur als ein Beispiel genannt. Beim nicht mehr gepflegten node.js-Modul smtpevent sind auch noch weitere Szenarien aufgeführt: Viele Mailinglists bieten etwa die Möglichkeit, sich über eine Mail an unsubscribe@mailinglist.de davon abzumelden. Bei Github kann man auf einen Issue direkt antworten, indem man die Benachrichtigungsmail einfach beantwortet. Weitere Szenarien sind leicht vorstellbar: Warum soll ich von unterwegs mit dem Handy eine Weboberfläche bemühen, um remote meine Heizung zu steuern, wenn ich schneller eine Mail mit dem Betreff “On” an heating@meinserver.de schicken kann?

Um eine solche Anwendung zu realisieren wird ein SMTP-Server benötigt. Node.js versteht sich sehr gut auf solche Protokolle und der eventbasierte Ansatz ist bei eingehenden Mails sicher auch nicht verkehrt. Und so gibt es bereits eine kleine Zahl an guter SMTP-Server-Implementierungen. Mir ist vor allem der estländische Programmierer Andris Reiman aufgefallen, der für node.js viele Module geschrieben hat, die sich mit dem Versand und Empfang von Mails beschäftigen. So reichen seine beiden Projekte simplesmtp und mailparser, um einen einfachen SMTP-Server aufzusetzen und die Mails und Anhänge zu parsen.

Zuerst bauen wir den SMTP-Server auf:

var simplesmtp = require('simplesmtp');
var MailParser = require('mailparser').MailParser;

var server = simplesmtp.createServer({
  validateSenders: false,
  validateRecipients: false
});

server.on('startData', function(envelope) {
  envelope.mailparser = new MailParser();
  envelope.mailparser.on('end', takeMail);
});

server.on('data', function(envelope, chunk){
  envelope.mailparser.write(chunk);
});

server.on('dataReady', function(envelope, callback){
  envelope.mailparser.end();
  callback();
});

server.listen(25);

Der Code ist relativ selbsterklärend: Bei Eingang einer Mail wird das startData-Event gefeuert, einzelne Datenchunks werden durch den data-Listener bearbeitet, und wenn die Mail vollständig übertragen wurde, feuert dataReady. Der Rahmen envelope wird dabei allen Funktionen übergeben, sodass envelope.mailparser auch in allen Funktionsaufrufen für eine Mail der gleiche ist. So werden bei zwei gleichzeitig eingehenden Mails diese nicht versehentlich vermischt.

Sobald die Mail vollständig übertragen wurde (dataReady), lösen wir mailparser.end() aus, was das Parsen der Mail beginnt. Fehlt noch die Definition, was mit unserer geparsten Mail denn passieren soll:

function takeMail(mail_object) {
    console.log('From:', mail_object.from); //[{address:'sender@example.com',name:'Sender Name'}]
    console.log('Subject:', mail_object.subject); // Hello world!
    console.log('Text body:', mail_object.text); // How are you today?

    // Irgendein Datenbankaufruf o.ä.
}

Hier kann die Mail nun also ausgewertet und so die gewünschte Aktion ausgelöst werden. Das tolle am Mailparser ist die Tatsache, dass Dateianhänge ebenfalls soweit wie möglich geparst werden. So enthält das mail_object auch einen Eintrag attachments, der etwa so aussehen könnte:

attachments = [{
    contentType: 'image/png',
    fileName: 'image.png',
    contentDisposition: 'attachment',
    contentId: '5.1321281380971@localhost',
    transferEncoding: 'base64',
    length: 126,
    generatedFileName: 'image.png',
    checksum: 'e4cef4c6e26037bcf8166905207ea09b',
    content: <Buffer ...>
}];

Attachments-Beispiel von mailparser

So könnte man leicht einen Service wie den von Twitpic einrichten, dass man durch das Senden an eine userspezifische Mailadresse ein Bild hochladen kann.

Wem das ganze zu unsicher scheint, weil ja sonst jeder, der die Mailadresse kennt, Dummheiten anstellen könnte, der sei auf die Serverkonfiguration ganz oben hingewiesen: Werden validateSenders und validateRecipients auf true gesetzt, können Sender und Empfänger in einer eigenen Funktion überprüft und ggf. zurückgewiesen werden. Die simplesmtp-Bibliothek bietet daneben auch noch andere Authorisierungsmechanismen.

Veranstaltungen: Streiflicht + OpenCityCamp 2012

Zwei aktuelle Uni-verwandte Veranstaltungen, bei denen auch IOException.de Autoren kräftig beteiltigt sind:

Streiflicht 2012

Zum einen findet am 25. April der Streiflicht 2012 statt. Jedes Jahr präsentieren dort Studenten der Medieninformatik-Anwendungsfächer die Highlights ihrer umgesetzten Projekte. Die Präsentationen sind immer unterhaltsam aufbereitet, so dass auch Nicht-Informatiker etwas davon haben :-).

Zu der Veranstaltung sind neben Studenten, Professoren und Mitarbeitern natürlich auch alle anderen Interessierten herzlich eingeladen. Die Fachschaft stellt dieses Jahr wieder die Getränkeversorgung sicher, so dass es sicher ein interessanter, unterhaltsamer Abend werden wird.

Am 25. April um 18 Uhr im Hörsaal O-27 H22. Alle weiteren Infos zu den Projekten oder etwa eine Wegbeschreibung findet sich auf der Streiflicht-Seite des Institus für Medieninformatik.

Es gibt außerdem ein passendes Facebook Event zu der Veranstaltung.


OpenCityCamp

Der zweite Veranstaltungshinweis betrifft das OpenCityCamp 2012, das am 12. und 13. Mai stattfindet. Organisiert von der datalove Hochschulgruppe wird es dort an zwei Tagen Vorträge, Sessions und Workshops rund um das Thema “Open Data” geben.

Die Veranstaltung im Barcamp-Stil ist für jeden offen! Jeder ist herzlich eingeladen sich einzubringen — seien es eigene Sessions, Workshops oder Projekte, die ihr schon lange verwirklichen wollt: Hier findet sich die geeignet Plattform!

Die (kostenfreie) Anmeldung ist über occ-ulm.mixxt.de möglich.

Dort ist es auch möglich Sessions, Sessionvorschläge und Hackathonthemen einzutragen.

Graphen & Plots erzeugen mit GLE

Nicht unerheblich für eine erfolgreiche Veröffentlichung ist eine ansprechende Präsentation der Ergebnisse. Jeder schaut sich lieber schöne Plots mit den zum Latex Template passenden Schriftarten an. Eine Möglichkeit solche Plots zu erzeugen ist über die Skriptsprache GLE die auch gleich eine eingebaute Preview Komponente mitbringt.

Ein möglicher Beispielplot ist rechts gezeigt, das dazugehörige GLE Skript unten. Gelesen werden die Daten einfach aus CSV-Dateien.


size 9 6

set font pstr !meine Paper Vorlage verwendet diesen Font. 

set texlabels 0 !keine Tex-Fonts in den Labels

!eine Funktion für einen Scatterplot
sub draw_scatter dataset$ mu sigma dt dst letter$
  begin graph
     size 5 5
     !Achsen in mu+-sigma
     xaxis min mu-sigma max mu+sigma  dticks dt dsubticks dst
     yaxis min mu-sigma max mu+sigma dticks dt  dsubticks dst
     xtitle " x-axis " 
     ytitle "noisy x-axis"
     !Buchstabe als Alternative zu subplots
     title letter$

     !CSV files lesen & plotten
     data dataset$+"_4.csv" d1
     d1 marker dot msize 0.2 color navy

     data dataset$+"_3.csv" d2
     d2 marker dot msize 0.2 color cyan 
     
     data dataset$+"_2.csv" d3
     d3 marker dot msize 0.2 color lime
     
     data dataset$+"_1.csv" d4
     d4 marker dot msize 0.2 color magenta 
     

  end graph
end sub

!Zeichnet einen Linienplot
sub draw_line dataset$ mu sigma dt dst letter$
  begin graph
    xaxis min mu-1/3*sigma max mu+1/3*sigma  dticks dt dsubticks dst
    yaxis min mu-sigma max mu+sigma dticks dt  dsubticks dst
    size 1/3*5 5


    data "lines-"+dataset$+"-1.csv" d1
    d1 line color magenta 
    
    title letter$
  end graph
end sub

!die plots an die richtigen Positionen zeichnen
amove 1 1.2
draw_scatter "csvdata1" 29 200 100 50 "(a)"
amove 6.3  1.2
draw_line "csvdata1" 29 200 100 50 "(b)"



Für einen Preview die .gle Datei im mitgelieferten Tool qgle öffnen, die .gle Datei kann on-the-fly geändert und gespeichert werden. Die qgle Komponente aktualisiert sich automatisch neu. Für eine Veröffentlichung muss nur die .eps Datei exportiert werden, die Schriftart mittels eps2pdf eingebettet werden.

Analoge Fotografie Teil II (Fotografieren)

Letzte Woche habe ich angefangen über die Analoge Fotografie zu schreiben. Im letzten Artikel ging es ein wenig um die Kamera (eine Nikon FE-2), die ich verwende. Heute möchte ich mich etwas genauer damit befassen, wie man diese Kamera verwendet. Da man es heutzutage fast ausschließlich mit digitalen Kameras zu tun hat, denke ich, dass es ganz interessant ist, sich mal mit einer etwas älteren Technologie zu befassen.

Die Kamera (Fortsetzung)

Auch bei den analogen Fotokameras gibt es natürlich teilweise riesige Unterschiede in den Features, die diese Kameras bieten. Bei meiner Nikon FE-2 handelt es sich um eine Spiegelreflexkamera, die man mit vielen verschiedenen Objektiven mit F-Bajonett verwenden kann. Die Nikon FE-2 war eine der ersten Kameras mit Zeitautomatik, so dass man nicht für jedes Bild komplett alles manuell einstellen muss. Die Kamera kann die Belichtungszeit selbst wählen. Beim Kauf hatte ich mir überlegt, ob ich so etwas überhaupt brauche (die komplett mechanische und manuell einstellbare FM-2 hätte nämlich keine Batterien gebraucht); Im Nachhinein bin ich aber sehr froh über diese Zeitautomatik.

Was muss ich also einstellen? Damit das Bild nicht unter- oder überbelichtet wird, müssen Blende und Belichtungszeit richtig gewählt werden und auch auf die Empfindlichkeit des Films abgestimmt werden. Diese drei Parameter sind die wichtigsten, um überhaupt ein brauchbares Foto zu bekommen. Zusätzlich kann man noch die Brennweite („Zoom“) und die Schärfe regulieren.

Empfindlichkeit

Neuere Analogkameras lesen den Barcode auf den Filmen und erkennen daran die ASA- bzw. ISO-Zahl des Films. Die FE-2 kann das noch nicht. Auf der linken Seite gibt es deshalb dafür ein Einstellrad, mit dem ich die Empfindlichkeit des Films von ISO 12 bis ISO 3200 einstellen kann. Umso höher die Zahl ist, desto empfindlicher ist der Film. Man kommt dann mit insgesamt weniger Licht aus, kann also kürzer belichten oder die Blende weiter zu machen. Die ISO/ASA Skala ist dabei linear. Ein Film mit ISO 200 braucht also für ein gleich helles Bild nur halb so viel Licht, wie ein ISO 100 Film. Ich verwende am liebsten Filme mit ISO 400. Das ist schon recht empfindlich; es ist aber selbst bei Sonne immer noch gut möglich Blende und Belichtungszeit zu variieren. Außerdem werden empfindlichere Filme praktisch nicht mehr verkauft. Das ist nicht ganz richtig, denn letzte Woche habe ich einen hochempfindlichen Film von Kodak gefunden, den ich unbedingt mal probieren möchte. Ich denke in Situationen mit wenig Licht ist dieser Film bestimmt toll zu verwenden.

Man kann übrigens Filme auch für eine höhere Empfindlichkeit belichten, als sie eigentlich haben (also z.B. für einen 400er Film ISO 800 an der Kamera einstellen). Die Bilder sind dann eigentlich unterbelichtet. Das lässt sich aber beim Entwickeln ausgleichen (vermutlich unter Qualitätsverlust; noch nie selber probiert). Das Fotolabor muss das natürlich vorher wissen.

Belichtungszeit

An der Kamera selbst muss ich, wenn ich nicht will, sonst eigentlich nichts mehr einstellen, denn die FE-2 hat, wie schon erwähnt, eine Zeitautomatik, die die Belichtungszeit stufenlos für mich wählen kann.

Wenn ich die Zeitautomatik verwenden möchte, stelle ich das Einstellrad auf der rechten Seite auf „A“. Natürlich kann man die gewünschte Belichtungszeit auch selbst wählen, indem ich sie einfach am entsprechenden Rad einstelle. Die FE-2 kann Belichtungszeiten von einer 1/4000 Sekunde bis zu 8 Sekunden. Außerdem gibt es noch einen Bulb-Modus, in dem so lange belichtet wird, wie der Auslöser gedrückt ist.

Und sollte die Batterie einmal leer sein und kein Ersatz zur Verfügung stehen, dann kann man den Verschluss auch in den rein mechanischen Betrieb versetzen, in dem immer 1/250 Sekunde lang belichtet wird.

Die Belichtungszeit bestimmt, wie lange der Verschluss für die Belichtung geöffnet wird. Damit also auch, wie viel Licht auf den Film trifft und wie hell das Bild letztendlich wird. Wenn man lange Belichtungszeiten verwendet, dann wird es natürlich auch schwieriger das Bild nicht zu verwackeln.

Blende

Die Blende wird nicht an der Kamera eingestellt, sondern am Objektiv. Daher ist es theoretisch auch denkbar, dass das Objektiv nur eine Blendenstufe hat, und man hier gar nichts einstellen kann. Allerdings kenne ich keine solchen Objektive. Mein Lieblingsobjektiv ist ein AF NIKKOR 50mm mit Blendenstufen von f1.4 bis f16. Was bedeuten diese Zahlen? Ganz grob: Umso größer die Zahl ist, desto weiter schließt sich die Blende während des Belichtens. Desto weniger Licht hat man zur Verfügung. Desto mehr Schärfentiefe erhält man (das Bild wird insgesamt schärfer).

Normalerweise ist, wenn man nicht gerade ein Foto macht, die Blende des Objektives ganz geöffnet, damit man durch den Sucher alles möglichst hell sieht. Dadurch kann man aber im Sucher nicht erkennen, wie scharf das Bild letztendlich werden wird. Dazu hat die FE-2 (wie fast alle Spiegelreflexkameras) einen Abblendknopf, der die Blende auf den eingestellten Wert schließt, so dass man sehen kann, wie sich die Blende auf das Bild auswirken wird.

Brennweite (Zoom)

Die Brennweite wird ebenfalls am Objektiv eingestellt und bestimmt, wie weit in das Bild „hineingezoomt“ wird. Das Ergebnis kann man natürlich sofort im Sucher sehen. Mein Lieblingsobjektiv hat eine Festbrennweite von 50mm, kann also in der Hinsicht nicht verstellt werden.

Schärfe

Als letzter wichtiger Parameter fehlt uns jetzt nur noch die Schärfeneinstellung. Auch die Schärfe wird nicht an der Kamera, sondern am Objektiv eingestellt. Normalerweise steht auf dem Objektiv drauf, für welchen Abstand von Kamera und Motiv die Schärfe eingestellt ist. Aber meistens stellt man die Schärfe nicht auf einen bestimmten Wert, weil dies zu ungenau wäre, sondern man verwendet verschiedene Hilfsmittel, um die Schärfe auf den gewünschten Punkt im Bild einzustellen.

Die FE-2 hat keine Autofokus-Funktion, wie die meisten heutigen Kameras. Damit man trotzdem möglichst genau scharf stellen kann, hat die Kamera eine Mattscheibe (bzw. Einstellscheibe) eingebaut. Die Einstellscheibe vom Typ K, die in meiner Kamera steckt, hat zum einen einen Schnittbildindikator und zum anderen einen Mikroprismenring zum Scharfstellen.

Belichtungsmesser

Damit man weiß, wie man die Parameter Blende und Belichtungszeit überhaupt wählen kann, muss man natürlich erst einmal wissen, wie viel Licht das Motiv überhaupt hergibt, also wie hell es ist. Dazu benötigt man einen Belichtungsmesser. Die Nikon FE-2 hat einen eingebauten Belichtungsmesser, der für die eingestellte Blende und abhängig von der Filmempfindlichkeit anzeigt, auf welche Belichtungszeit die Kamera eingestellt werden sollte (bei der Zeitautomatik wird die Zeit natürlich gleich automatisch eingestellt).

Kreatives Fotografieren

So. Bisher habe ich blos über die möglichen Einstellungen geschrieben. Was kann ich denn jetzt machen, um ein Bild zu bekommen, wie ich es haben möchte? Wichtig ist, dass Filmempfindlichkeit, Blende und Belichtungszeit aufeinander abgestimmt sind. Die Empfindlichkeit eines Films kann ich natürlich für einzelne Bilder nicht verändern. Daher bleiben mir Blende und Zeit, die ich verstellen kann. Umso weiter ich die Blende schließe, desto weniger Licht kommt durch das Objektiv und desto länger muss ich auch belichten. Was bringt mir das? Eine hohe Blendenzahl führt zu mehr Tiefenschärfe. Ich mache allerdings sehr gerne Fotos mit geringer Tiefenschärfe, also weit geöffneter Blende. Ich mag den Effekt, dass damit das Bild meist nur an wenigen Stellen wirklich scharf ist.

Alles Weitere ist der Kreativität des Fotografen überlassen. Wohin man den Fokus legt und mit welchen Tiefenschärfen, Bewegungsunschärfen und Brennweiten man arbeitet hat viel Auswirkung auf das Bild.

Stay tuned!

Die Kreativität endet bei der analogen Fotografie aber nicht mit dem Druck auf den Auslöser. So, wie man digitale Bilder mit Bildbearbeitungssoftware noch weiter bearbeiten kann, kann man auch mit analogen Fotos noch nach der Aufnahme viel mit dem Bild anstellen – und zwar im Fotolabor. Wer seine Bilder entwickeln lässt verschenkt ziemlich viel Potential. Das ist auch einer der Gründe, warum ich analog ausschließlich in schwarz-weiß fotografiere. Ich möchte selber entwickeln. Selber entwickeln geht zwar auch mit Farbfilmen, das ist aber deutlich komplizierter als bei Schwarz-Weiß-Filmen. Im kommenden dritten Teil dieser kleinen Blogartikel-Reihe möchte ich ein bisschen auf das Entwickeln von Filmen eingehen.

Bis dann,
matou

ioexception.de

Benjamin Erb [] studiert seit 2006 Medieninformatik und interessiert sich insbesondere für Java, Web-Technologien, Ubiquitous Computing, Cloud Computing, verteilte Systeme und Informationsdesign.


Raimar Wagner studiert seit 2005 Informatik mit Anwendungsfach Medizin und interessiert sich für C++ stl, boost & Qt Programmierung, Scientific Visualization, Computer Vision und parallele Rechenkonzepte.


David Langer studiert seit 2006 Medieninformatik und interessiert sich für Web-Entwicklung, jQuery, Business Process Management und Java.


Sebastian Schimmel studiert seit 2006 Informatik mit Anwendungsfach Medizin und interessiert sich für hardwarenahe Aspekte, Robotik, webOs, C/C++ und UNIX/Linux.


Timo Müller studiert seit 2006 Medieninformatik. Er interessiert sich allen voran für Mobile and Ubiquitous Computing, systemnahe Enwticklung und verteilte Systeme, sowie Computer Vision.


Achim Strauß studiert seit 2006 Medieninformatik. Seine Interessen liegen in Themen der Mensch-Computer Interaktion sowie Webentwicklung und UNIX/Linux.


Tobias Schlecht studiert seit 2006 Medieninformatik und interessiert sich vor allem für Software Engineering, Model Driven Architecture, Requirements Engineering, Usability Engineering, Web-Technologien, UML2 und Java.


Fabian Groh studiert seit 2006 Medieninformatik. Seine Interessengebiete sind Computer Graphics, Computer Vision, Computational Photography sowie Ubiquitos Computing.


Matthias Matousek studiert seit 2007 Medieninformatik und interessiert sich besonders für Skriptsprachen, Echtzeitsysteme und Kommunikation.


Michael Müller [] studiert seit 2009 Medieninformatik. Er interessiert sich vor allem für Web-Technologien, Ubiquitous Computing, User-Interfaces, UNIX und Creative Coding.


Falco Nogatz [] studiert seit 2010 Informatik mit Anwendungsfach Mathematik. Er interessiert sich für Web-Technologien, Programmierparadigmen und theoretische Grundlagen.

Archiv

Februar 2015
M D M D F S S
« Mrz    
 1
2345678
9101112131415
16171819202122
232425262728