Posted by steffen on 22/07/2009 – 23:15
Die Abgabe der Kursresultate in CC1 und CC2 finden in diesem Semester über das Intranet der btk statt. Um dieses zu erreichen geht ihr im Finder (OS X) auf ‘Go’ -> ‘Connect to Server…’ oder drückt einfach ‘Apfel’+'k’. Dann poppt ein Fenster auf, in dem ihr diese Adresse ‘afp://serverbtk.htk-berlin.de’ eingebt. Nach dem Einloggen wählt ihr den ‘Dozentenpool’ aus und sucht nach dem Ordner ’sfiedler’. Dort sammeln wir alle Projekte und Hausaufgaben bis zum:
Abgabe DEADLINE: 29.07.2009, 11:00 Uhr
Was bis dahin nicht im Kasten ist, wird nicht zum Gegenstand der Bewertung. Das gilt vorranig für die Hausaufgaben. Alle Endprojekte wurden bis dahin schon präsentiert und von uns bewertet. Bei der Abgabe geht es neben der Notenfestlegung vorallem um die Dokumentation – das Aufarbeiten um es dem Rest der Schule und der Welt zu zeigen. Speziell interaktive Projekte (Screen Anwendungen, Projekte mit Audio / Video Input) sollten mit einem kurzen Video festgehalten werden. Kurzes Intro, spannendes Projekt, kurzes Outro (Projekttitel und Namen der Schaffer nicht vergessen). Für den Mac können wir euch das Programm iShowU empfehlen.
Der konkrete Inhalt der Abgabe richtet sich nach eurem belegen Kurs, und lautet wie folgt:
CC1 (ALLE, auch wenn ihr eure Projekte auf dem Präsentationsrechner gelassen habt!)
Pro Kursteilnehmer landet ein Ordner in der »Dropbox / Briefkasten« im Dozentenpool unter sfiedler. Dieser Ordner trägt den Namen cc1_Vorname_Nachname und beinhaltet die folgenden Ding:
1. Den Ordner Hausaufgaben mit allen Aufgaben in einem extra Ordner. Diese tragen jeweils den Namen der Aufgabe ‘A01′, ‘A02′ … . Fügt jedem Sketch, in dem euch eine bestimmte Komposition gefällt, einen Screenshot von diesem Ausschnitt bei.
2. Den Ordner für euer Endprojekt (nutzt für die Benennung den Namen des Projektes). Dort drin landen die folgenden Dinge:
- Den Processing Sketch (pde)
- Eine als Applikation exportierte Version des Programms
- Eure am 22.07. vorgestellte Präsentation (keynote oder pdf)
- Ein Screen capture (video) wenn ihr mit Video/Audio gearbeitet habt bzw. die finalen Pdfs wenn euer Projekt auf Papier gelandet ist.
CC2
Pro Kursteilnehmer landet ein Ordner in der »Dropbox / Briefkaste« im Dozentenpool unter sfiedler. Dieser Ordner trägt den Namen cc2_Vorname_Nachname und beinhaltet die folgenden Dinge:
- Processing Sketch (pde + alle Klassen)
- Eine als Applikation exportierte Version des Programms
- Eure am 23.07. vorgestellte Präsentation (keynote oder pdf)
- Ein Screen capture (Video) eurer Applikation, wenn ihr eine Bildschirmanwendung erarbeitet habt / Mindestens eine Pdf von eurem Resultat bei einem Print-Projekt.
In beiden Kursen wird es bei der Abgabe der Endprojekte durch Teamarbeit zu Dopplungen kommen. Uns aber egal – hauptsache jeder hat sein Endprojekt und wir nur ein kleines Ordnerchaos.
Posted by steffen on 12/07/2009 – 14:03
Planänderung. Die verantwortlichen Stellen sehen die übliche Klausur in unserem Kontext als nicht notwendig an. Der Klausurtermin (29.07.2009 um 11:15, Raum C1) gilt deshalb nur als Nachschreibetermin. Ergo geht es für alle im ersten Semster eine Woche eher an den See.
alter post:
Die Entscheidung das eine Klausur geschrieben werden muss – und der passende Termin – stehen fest. Gegenstand und Inhalt zielen auf das Verständnis im Umgang mit Processing ab, wobei vorrangig keine Fragestellungen aus der Processing-Referenz Gegenstand sind.
Als Vorbereitung empfehlen wir den Bereich der Grundlagen im wiki, eure Lösungen der Hausaufgaben und die Klausur von Till Nagel.
Der Termin liegt in der offiziellen Klausurwoche: Mittwoch, 29.07.2009 um 11:15 Uhr, Raum C1
Die Bearbeitungszeit ist auf 45 Minuten + 15 Minuten Nachschreibezeit angelegt.
Für alle Studenten, die in vergangenen CC1-Kursen noch keine derartige Klausur geschrieben haben, ist dies ein NACHSCHREIBETERMIN.
Posted by steffen on 01/07/2009 – 08:11

Sound in Processing
Für alle AudioInput-Projekte gibt es nun eine Lesson im Wiki mit allen und weiterführenden Beispielen zur Benutzung der minim Bibliothek. Sketch #5: Frequenz-Gruppen beschäftigt sich mit dem Zusammenfassen von Frequenzbereichen und ermöglicht damit das gezielte Auslesen von Höhen, Mitten und Bässen.
Posted by steffen on 15/06/2009 – 21:23
Letzte Woche durchgesprochen und hier noch mal im Blog zum anschauen. Für alle Projekte die auf der Nutzereingabe von Name und Passwort basieren.

Wir nutzen dabei die von Andreas Schlegel geschriebene Bibliothek controlP5 – ideal für das Erstellen von simplen Benutzeroberflächen.
Nach dem Anlegen der beiden Textfelder im setup(), wird bei ENTER die Funktion controlEvent() aufgerufen. Innerhalb entscheidet die Länge der Text ob diese für die Verbindung zur API genutzt werden. In diesem Fall müssen beide Felder ausgefüllt sein.
Der letzte Schritt besteht im Ändern des ‘ready’ Wertes von false auf true. Dies veranlasst die Bedingung im draw() den eigentlichen Zeichenprozess (das Arbeiten mit den Daten) zu beginnen.
import utils.*;
import lastfm.*;
import controlP5.*;
ControlP5 c5;
Textfield tfName;
Textfield tfPass;
boolean ready = false;
Lastfm fm;
void setup () {
size (580, 240);
// Allgemeines ControlP5 Objekt
c5 = new ControlP5 (this);
// TextFelder für beide Werte Anlegen
tfName = c5.addTextfield ("username", 20, 100, 200, 18);
tfPass = c5.addTextfield ("userpass", 20, 140, 200, 18);
// Passwort wird im Sternchenmodus angezeigt
tfPass.setPasswordMode (true);
}
void draw () {
background (40);
if (ready) {
// MAGIC!
}
}
/**
* Diese Funktion wird bei jeder ControlP5-Eingabe aufgerufen.
* Das 'ControlEvent' gibt Aufschluss über den Auslöser und
* damit über dessen Wert bzw. Zustand. In diesem Fall der Text.
*/
void controlEvent (ControlEvent theEvent) {
String user = tfName.stringValue ();
String pass = tfPass.stringValue ();
// Wenn Textfeldinhalte jeweils länger als 0 sind
if (user.length () > 0 && pass.length () > 0) {
// GUI ausblenden
tfName.hide ();
tfPass.hide ();
// API INITIALISIEREN
fm = new Lastfm (user, pass, "xx", "xx");
// Startschuss für den draw-Block geben
ready = true;
}
}
Posted by steffen on 09/06/2009 – 12:29
Der folgende Sketch ermittelt zufällige Positionen innerhalb einer vorgegebenen Maske (Freiform), und stellt diese durch kleine Kreuze im Sketchfenster dar.

Die rein mathematische Lösung für einen zufälligen Punkt in einer Freiform ist für unser Anliegen zu aufwendig. Im Folgenden bedienen wir uns dem Trick einer Maskierung durch ein Pixelbild. Dieses besteht im Idealfall nur aus schwarzen und weißen Pixeln – wobei die schwarzen die Form bestimmen. Die get() Funktion, zum Auslesen von Farbwerten, wird in einer Funktion platziert, welche die zufällig ermittelte Position zurück gibt. Da sich eine Funktion auch selbst aufrufen kann (Rekursion), ist diese in der Lage so lange zu suchen, bis ein Punkt innerhalb der Form bestimmt wurde.
Weil eine Funktion nur eine Variable als Rückgabewert zur Verfügung hat, verwenden wir einen Vektor.
Beispiel runterladen
PVector imgPos; // Position der Maske im Sketch
PImage img; // Kontainer für die Masek
void setup () {
size (240, 160);
// Laden der Maske
img = loadImage ("cloud.png");
// Vektor für die Position der Maske im Sketch
imgPos = new PVector ();
// Maske im Fenster zentrieren
imgPos.x = (width - img.width) / 2;
imgPos.y = (height - img.height) / 2;
}
void draw () {
background (255);
for (int i=0; i < mouseX * 2; i++) {
// Ermittle eine zufällige Position in der Maske
PVector pos = randomPoint (img, imgPos);
// Zeichne ein kleines Kreuz an dieser
drawCross (pos);
}
}
/**
* Funktion ermittelt rekursiv die Position eines Pixels
* in einem gegebenen Bild, welches schwarz ist. Diese
* Koordinaten werden mit der Bildposition (Vektor)
* summiert und zurückgegeben.
*/
PVector randomPoint (PImage theImage, PVector thePos) {
// Zufallsposition im Bild
int x = (int) random (theImage.width);
int y = (int) random (theImage.height);
// Wenn Pixel an Position x,y schwarz ist
if (brightness (theImage.get (x, y)) == 0) {
// Gibt die Position als Vektor zurück
return new PVector (thePos.x + x, thePos.y + y);
}else{
// Sonst versuche es erneut
return randomPoint (theImage, thePos);
}
}
/**
* Funktion zeichnet ein Kreuz an dessen Mittelpunkt.
*/
void drawCross (PVector thePos) {
line (thePos.x-1, thePos.y-1, thePos.x+1, thePos.y+1);
line (thePos.x-1, thePos.y+1, thePos.x+1, thePos.y-1);
}
Posted by steffen on 22/04/2009 – 12:12
Der CreativeCoding 1 – Kurs findet bis auf weiteres mittwochs in Raum H, 1. OG statt.
Gruß,
-steffen
Posted by steffen on 21/04/2009 – 10:49
Wie schon angekündigt wird diesen Donnerstag (23/04) leider kein CC2-Kurs stattfinden. Die Sprechstunde verschiebt sich auf Mittwoch 13:45 bis 14:30. Da Jonas und ich verhindert sind, geht es am 30/04 planmäßig weiter im Programm mit den ersten Referaten und Input von uns. Postet eure Referatsthemen hier im Blog um allen Beteiligten einen Überblick zu geben bzw. Überschneidungen auszuschließen.
Bis dahin könnt ihr eifrig an den oop-Beispiel im wiki tüfteln.
sonnigen Donnerstag,
-steffen
Posted by steffen on 15/04/2009 – 18:17
Der Creative Coding zwei Kurs am Donnerstag findet nun in Raum C2 (Erdgeschoss) statt. Zeitlich bleibt es bei 16:45 bis 19:15 Uhr.