Here is a first bunch of links concerning the perspectives of your Master Project. As you might remember we're talking about concepts like "Middleware", "Tangible Computing", "Programming", "Live Coding", "Digital Performance" etc..

It turned out that this is a much more time consuming task than I expected - partly, because it should be a GENERAL overview which at the same time shouldn't distract you from your main focus; partly, because such an overview is always personally biased, and I'll be trying to be as objective as possible :-)  

Therefore, in my first "bunch of links" I will focus on Programming. Additional bunches will follow.

 

Programming:

There is an endless number of different programming languages, but only some basic "paradigms"; also - as usual - there are "fashions" ...

Some of the main programming paradigms are (en.wikipedia.org is a good starting point for all of them):

• Functional Programming
• Imperative Programming
• Object Oriented Programming
• Declarative Programming
• Constraint Based Programming

Many languages are multi-paradigm, like Java or Lisp. We also have to distinguish between sequential programming and parallel (distributed) programming.

For mostly historical reasons, the most widespread paradigm is sequential imperative programming; hence it looks very "intuitive" to most people. Unfortunately, it's very error prone and not very robust; in particular, if you start to expand the imperative style to distributed programming it's getting really bad.

The other extreme is "functional programming". It's inherently parallel and very robust; for most people it looks (at least at the beginning) not that intuitive (except for people with a strong mathematical background).

Object Oriented Programming (OOP) is probably the most familiar paradigm right now. It sits somehow between the imperative style and distributed programming; with "pure" OO languages (like Smalltalk), the focus of computation is on "message passing".

In order to get the most exciting experience, and getting most productive, there are - IMHO - two basic features a programming language/environment should have: (1) dynamic, realtime interactivity (ideally: capability of live coding), and (2) programmability, i.e. it should be a "programmable" programming language. The latter means - roughly - the possibility to build domain specific languages (DSL) on top of the "main" language. Some people think that Language Oriented Programming (LOP) turns out to be the next big "Programming Paradigm".

Another important aspect for choosing a language is the availability of a professional integrated development environment (IDE), with features like code completion, syntax-sensitive editors, class- and library browsers, version management etc. etc.. Ideally, all this would be Open Source and cross-platform.

Finally, there should be a powerful "foreign function interface", and an appropriate set of domain specific libraries ("middleware", Multimedia APIs and appropriate Frameworks). In our case this means probably a C/C++ interface, and strong libraries for image processing, graphics, audio, video, networking, and physical computing.

With all this in mind, we should have a closer look at the following languages/IDEs (or better: language families):

Smalltalk

This is the "oldest" OOP language - it somehow introduced the concept into the community. There is only a remote similarity to current OOP languages like C++ or Java; Smalltalk - in this respect similar to Lisp, and unsimiliar to most other languages - has a theory behind it (Actors), and is essentially based on so-called "message passing". Insofar it's much closer to distributed languages like Erlang.

Having a strong theoretical background results in a lean, consistent implementation. One of the best supported implementations at the moment is Squeak, which is also part of the just launched OPCL project. Despite the fact that it looks (with its standard image) rather "childish", Squeak is a full-featured, powerful language and IDE, and has very good support for multimedia and networking. It's Open Source, and there are at least three interesting big applications right now, eToys, Seaside and Croquet. (For the latter one, see also here).

Other implementations are VisualWorks, GNU Smalltalk, etc.

There is also a Smalltalk "wrapper" around Cocoa - one of the main OSX Programming APIs - called F-Script, which somehow enables developers to programm OSX applications directly in Smalltalk.

A similiar, interesting implementation for the .NET Framework is Vistascript

Lisp

Lisp (== List Processing Language) is the second oldest "high-level" programming language (1958), invented as a tool for implementing lambda-calculus-based computer programming. There exist a lot of different "dialects"; the two main implementations right now are Common Lisp and Scheme.

"Pure Lisp" was a functional programming language. Today, both Common Lisp and Scheme are multi-paradigm languages, supporting functional, object-oriented, and imperative programming styles.

The real power of Lisp is its DSL-capacities, in particular its ability to get written in itself! There is a nice, short paper by Paul Graham, where this aspect of Lisp is discussed.

For a long time Lisp was considered as an AI-Language (Artificial Intelligence), and with the rise and fall of the AI-Hype, Lisp was - transitorily - forgotten. Today, there is a sort of revival, and more and more people realize the immense power of this programming language (You will find an excellent starting point here - read the comments!).

Whether Lisp (Common Lisp or Scheme) itself will survive, or some (new) developments like Qi or NewLisp, or whether none of them but one of the upcoming Metaprogramming Systems - who knows?

It's at least interesting, that in recent times several Lisp-based media programming tools have been (and are still) developed (like fluxus, impromptu, PWGL - more on these later), and - right now - Lisp seems a very reasonable choice for doing DSL-oriented prototyping.

A good starting point for Common Lisp is PCL (by P. Seibel - a free download is available) and the "Road to Lisp Survey"; for Scheme it's DrScheme.

Besides Ruby and Python, which integrated a lot of Lisp language constructs, there is also Clojure - a young, new scripting language targeting the JVM (Java Virtual Machine), meaning that you can write Lisp, and run Java ... 

Java

So here we go.

"The real romance is out ahead and yet to come. The computer

revolution hasn't started yet. Don't be misled by the enormous

flow of money into bad defacto standards for unsophisticated

buyers using poor adaptations of incomplete ideas."

- Alan Kay

Wir haben als erste Form der Datenabstraction "Strukturen" kennengelernt - "positions", "students" etc.

Nicht jedem scheint dies so geläufig; also würde ich vorschlagen, daß der nächste Dienstag ganz im Zeichen der Vertiefung stehen sollte. Sektionen 6.5 - 6.7, sowie Sektion 7 (komplett) von HtDP wären dazu angesagt. Also: bitte bis nächsten Dienstag (incl.) durcharbeiten; am 27. 11. gibt's dann Übung 7.4 als Test :-)

Außerdem trägt Marcel am 27. über L-Systems vor ... 

Ebenfalls für den 13. Oktober bereitet Marcel Naumann einen allgemeinen Überblick zu L-Systems vor. Dazu – wie immer – die dringende Aufforderung, in die folgenden Texte ebenfalls reinzuschauen:

Algorithmic Botany (Die Website)

The Algorithmic Beauty of Plants (Chapt. 1)

Knut Arild Erstad, L-systems, Twining Plants, Lisp (daraus Chapt. 1 + 2)

Und – auch als Perspektive für die Implementierung:

Course Notes CSCI 4500/6500

Für den 13. Oktober bereitet Hannes Köpnick eine Präsentation vor zum Thema "L-Systems", und da insbesondere zu "Turtle Graphics".

Auch hier: Bitte alle runterladen, und LESEN:

Przemyslaw Prusinkiewicz, Paradigms of pattern formation

Als Perspektive für die eigene Implementierung in Scheme (und NUR als solche):

Shriram Krishnamurthi, Automata via Macros

Gina Fiedler wird am 6. 10. über "Functional Geometry" berichten.

Dazu bitte alle die folgenden Papiere vorbereiten:

Peter Henderson, Functional Geometry

The SICP Picture Language

Leider gab es in der letzten Woche einige Probleme bei der "Kommunikation" dieser Lehrveranstaltung; deswegen hier nochmals eine kurze Erinnerung und Ergänzung:

Der BA-Kurs "Generative Medien" findet in der HfK statt, und zwar

Di, 14:00 Uhr - 18:00 Uhr in Raum 3-09-100 (NEU!)

Schwerpunkt des Kurses ist die Einführung in das Gebiet "Generative Medien", wobei gleichzeitig auch elementare Kenntnisse der Programmierung angeeignet werden sollen. Trägersprache dafür ist Scheme (ein Lisp-Dialekt), und zwar in der Implementierung "DrScheme" (-> http://drscheme.org); allerdings soll dies kein "Programmierkurs" im gewöhnlichen Sinne werden, sondern Programmierung soll als digitales Medium "per se" erlernt und erfahren werden. Dazu werden schwerpunktmäßig zunächst bereits vorhandene Arbeiten im Bereich "Generative Media"/"Generative Art" vorgestellt, analysiert und kritisch bewertet. In einem weiteren Schritt werden programmiertechnische Teilaspekte solcher Arbeiten re-implementiert. Dadurch mag es gegen Ende des Semesters gelingen, eigene Versuche generativer Gestaltung zu realisieren, im Plenum vorzustellen und einer ästhetischen und technischen Bewertung auszusetzen.

In der nächsten Veranstaltung wird es eine Präsentation folgender Papiere geben:

http://www.philipgalanter.com/downloads/ga2003_paper.pdf
http://vagueterrain.net/content/archives/journal03/galanter01.html

Diese beiden Papiere sollen als Vorbereitung für die nächste Sitzung VON ALLEN gelesen werden.

Weitere lesenswerte links:

http://www.nobleworld.biz/images/Richards.pdf
http://impromptu.moso.com.au/
http://www.toplap.org/index.php/Main_Page
http://www.pawfal.org/fluxus/
http://www.generativeart.com/

Außerdem - um einen ersten Eindruck generativer Verfahren zu gewinnen - werden wir uns mit dem generativen System "contextfreeart" (-> http://contextfreeart.org) befassen. Bitte runterladen, installieren und spielen!