15 lat publikacji w 2+3D w pigułce

W ostatnim już 61. numerze 2+3D, znajdziecie ode mnie wizualne podsumowanie publikacji autorów artykułów – tych uwzględnionych w spisie treści – oraz okładek. Na rzecz niestety było bardzo mało czasu, do tego stopnia, że kiedy kwartalnik był już w druku, wizualizacja była jeszcze w postaci kodu. Z jednej więc strony żałuję, że nie mogłem posiedzieć nad projektem dłużej (bo dane były naprawę ciekawe), a z drugiej cieszę się jednak, że numer nie został opublikowany z trzema pustymi stronami – bo taka sytuacja była również możliwa.

Dane dostarczył Wojtek Kubiena, po ich niewielkiej obróbce zwizualizowałem je z pomocą [Processing, potem jeszcze tylko poprawki do składu.

Log-in project

Kilka miesięcy temu zgłosiła się do mnie Julia z pytaniem, czy znam może kogoś kto pomógłby jej w pracy dyplomowej, a dokładniej napisałby aplikację, wyświetlającą grafy relacji. Cały projekt wydał mi się bardzo interesujący, bo nie często słyszę o studentach grafiki warsztatowej zaprzęgających do swoich prac, tak pragmatyczne narzędzia jak analizę semantyczną tekstu, czy wizualizację relacji. Ciekaw co z tego wszystkiego wyjdzie postanowiłem pomóc — warto było.

A oto co Julia pisze o projekcie:
Projekt LOG-IN jest graficznym zapisem dwóch miesięcy rozmów z Facebooka ze znajomymi z różnych części Europy i świata. Są to osoby poznane podczas podróży, a także bliscy z rodzimych miejsc. Zapiski te są moimi spotkaniami, odbywającymi się w cyberprzestrzeni, które nie tylko dają mi możliwość utrzymania przyjaźni z osobami różnych narodowości, ale także pozwalają na stały kontakt z domem. Rozmowy w mojej realizacji przedstawione są w formie sieci powstałej z grafów uformowanych z połączonych ze sobą wyrazów. Całość ulokowana jest w przestrzeni komputerowej, a środowisko 3D umożliwia widzowi łatwe poruszanie się i eksplorowanie powstałej sieci. Kształt pojedynczego grafu jest wynikiem semantycznej analizy tekstu, liczącej częstotliwość występowania słów w bliskiej odległości od siebie. Analiza ta pozwala na wychwycenie głównych kontekstów rozmowy, a także na znalezienie „słów kluczy”, będących łącznikami pomiędzy tematami. Wyrazy stanowią węzły grafów, a połączenia pomiędzy nimi relacje, w jakich znajdują się od siebie.

login--www-sebastiansikora-pl-6

login--www-sebastiansikora-pl-2

Źródło projektu na GitHub:
https://github.com/ess-seb/Grapher

Download:
Windows: 32bit | 64bit
Linux: 32bit | 64bit

Summer Yellow — interaktywna instalacja promująca kolor

Mała dokumentacja jednego z moich pierwszych projektów w Processing. Jest to niewielka, interaktywna instalacja, której zadaniem jest promowanie koloru z palety farb — a dokładniej ciepłego żółtego o nazwie ciepłe lato. Chodziło o to, aby zadziałać na odbiorcę możliwie szerokim spektrum bodźców powodujących skojarzenia z latem, ciepłem oraz promowanym kolorem żółtym.

Jakiś czas temu zostałem zapytany o ten projekt i w zasadzie wzruszyłem ramionami nie bardzo mogąc pochwalić się choćby zdjęciem prezentującym jego działanie to też postanowiłem rzecz odbudować.

Całość działa dosyć prosto. Kiedy naokoło piramidki pojawi się ruch, zostaje ona oświetlona na ciepły żółty kolor (opcjonalnie można również włączyć animowaną teksturę mającą się kojarzyć z cieniem rzucanym przez drzewa — jest też możliwa zmiana ustawień wyglądu i animacji tekstury), a z głośników zaczynają dobiegać odgłosy bawiących się na placu zabaw dzieci. Kiedy ruch zamiera, oświetlenie przygada, a z głośników zaczyna być słychać cykanie świerszczy.

Aplikacja została napisana w Processing i przepisana jakiś czas temu praktycznie od nowa — można sobie ją pobrać z GitHub. Za wykrywanie ruchu odpowiada kamerka na podczerwień.

Zobacz więcej

Medialab Katowice: Interaktywny syntezator dźwięku

W trakcie czerwcowego długiego weekendu postanowiłem nie obijać się i wziąć udział w trzydniowych warsztatach Medialab Katowice pt. „Interaktywny syntezator dźwięku”. Formuła warsztatów zakładała działalność w ramach jednej z dwóch grup uczestników; pierwsza grupa budowała od zera syntezatory analogowe, druga grupa (której członkiem byłem i ja) budowała/programowała wymyślone przez siebie interfejsy/sterowniki do w/w syntezatorów, wykorzystując przy tym Arduino. Ostatniego dnia miała odbyć się prezentacja działających projektów. Niestety nie wszystko zadziałało — ze względu na problemy z syntezatorami, ostatnie prace nad projektami zostały przełożone na dodatkowy dzień warsztatów — niestety, w związku z brakiem wymaganej frekwencji, nie udało się go zorganizować.

Niemniej, w skutek trzydniowej zabawy z Arduino wpadło mi do głowy kilka fajnych pomysłów (z czego jeden właśnie realizuję — to tajny projekt więc nie będę się nad nim rozwodził), a i na przyrost obycia się z tym ustrojstwem (oraz wieloma rodzajami czujników) nie mogę narzekać. :)

Zobacz więcej:

Processing + Arduino + Eclipse (+ Proclipsing) — tutorial

W związku z tym, że ostatnio w ramach Medialab majstrowałem co nieco — postanowiłem opublikować mały tutorial wyjaśniający jak zacząć korzystać z Processing komunikującego się z Arduino a wszystko nie w processingowym edytorku, ale w Eclipse.

Dlaczego warto korzystać z Eclipse?
IDE (o ile w ogóle można o tym edytorku tak powiedzieć) dostarczane wraz z Processing, sprawdza się w przypadku malutkich programików. Jednak w momencie, kiedy nasza aplikacja zaczyna obrastać klasami, jej debugowanie (wyszukiwanie i naprawianie błędów) staje się praktycznie niemożliwe. Nawet w przypadku poszukiwania nie wiadomo gdzie, postawionej nieświadomie kropki, processingowy edytorek lubi się zgubić, a wręcz wprowadzić nas w błąd. Wtedy pozostaje tylko wertowanie całego kodu (wszystkich klas) linijka po linijce — w Eclipse (oraz innych poważnych IDE) takiego problemu nie ma. Błędy w składni są lokalizowane w locie, a do tego mamy do dyspozycji zestaw narzędzi umożliwiających prześledzenie co dzieje się z programem w trakcie jego działania oraz wspomagających zarządzenie kodem oraz całym projektem. Dodatkowo do Eclipse możemy zainstalować plugin Proclipsing ułatwiający pracę z Processing.

A teraz konkrety, czyli jak zacząć korzystać z Processing + Arduino w Eclipse (+ Proclipsing):

  1. Instalujemy Arduinoszczegóły na temat instalacji Arduino na stronie Arduino.
  2. Instalujemy Processingszczegóły na temat instalacji Processing na stronie projektu Processing.
  3. Konfigurujemy Processing oraz Arduino tak aby się ze sobą komunikowały za pomocą podstawowej metody wykorzystującej Firmata (wgrywamy Firmata do Arduino, instalujemy biblioteki Arduino oraz Serial dla Processing, testujemy za pomocą przykładowego kodu, nie zapominając o ustawieniu poprawnego portu COM w ów kodzie) — wszystko krok po kroku jest opisane w instrukcji na Android Playground.
  4. Jeśli wszystko poszło dobrze, przykładowy kod (sekcja Example) wklejony do Processing IDE, powinien się uruchomić i sterować stanem pinu 13 podłączonego Arduino (działanie powinno być również obserwowalne dzięki wbudowanej LED na płytce w pobliżu pinu 13, choć nie wszystkie wersje Arduino takową posiadają).
    Jeśli jednak stan pinu 13 pozostaje bez zmian, Processing nie zwraca żadnego błędu, a diody TX, RX na Arduino nie mrugają, prawdopodobnie podałeś niewłaściwy port COM via który ma się komunikować z Arduino. Metoda println(Arduino.list()); wylistuje wszystkie dostępne porty COM w konsoli, a wchodząc do Arduino IDE następnie menu Tool → Serial Port sprawdzamy pod którym z nich jest podpięte Arduino. W linijce ‚arduino = new Arduino(this, Arduino.list()[XXX], 57600);zaXXX` należy wpisać numer portu COM na którym komunikuje się Arduino z komputerem (w przykładzie domyślnie jest 0, czyli pierwszy na liście).
  5. Instalujemy Eclipse IDE for Java Developers: http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/indigosr2
  6. Instalujemy Plugin Proclipsing: szczegółowy opis instalacji na stronie Proclipsing.
  7. W Eclipse tworzymy nowy projekt File → New Project → Processing → Processing Project → Next → Podajemy nazwę projektu „Project Name” proponuję ArduinoTest, lokalizację processingu tj. folder w którym znajduje się plik processing.exe „Processing Path” oraz folder z processingowymi projektami „Processing Sketch Path” (łatwo go zlokalizować w Processing IDE: Ctrl+K)
  8. Jeśli wskazaliśmy prawidłowe foldery, w okienkach „Select Libraries” to Import powinny pojawić się checkboxy umożliwiające łatwy import bibliotek do naszego projektu już na starcie — zaznaczamy w górnym serial, w dolnym arduino → klikamy Finish.
  9. W okienku Package Explorer lub Project Explorer rozwijamy nasz projekt ArduinoTest → src → arduinotest → (podwójny klik) ArduinoTest.java
  10. Usuwamy wszystko i wklejamy program testowy:
package arduinotest;

import processing.core.PApplet;
import cc.arduino.*;
import processing.serial.*;

public class ArduinoTest extends PApplet
{

 Arduino arduino;
 int ledPin = 13;

 public void setup()
 {
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[0], 57600);

  //nie zapomnij podać poprawny numer portu COM
  arduino.pinMode(ledPin, Arduino.OUTPUT);
 }

 public void draw()
 {
  arduino.digitalWrite(ledPin, Arduino.HIGH);
  delay(1000);
  arduino.digitalWrite(ledPin, Arduino.LOW);
  delay(1000);
 }
}

Jeśli wszystko pójdzie dobrze, po uruchomieniu (CTRL+F11), program będzie sterował pinem 13, dokładnie tak, jak to miało miejsce w punkcie 4. kiedy uruchamialiśmy przykładowy program z poziomu Processing IDE.

Jeśli macie pytania, uwagi, coś nie działa, etc. — piszcie, chętnie pomogę :)

Problemy

Jeśli używacie JDK x64/Windows x64 możecie spotkać się z czymś takim:

java.lang.UnsatisfiedLinkError:
D:Eclipse workspaceArduinoTestlibbaseserialrxtxSerial.dll:
Can't load IA 32-bit .dll on a AMD 64-bit platform thrown
while loading gnu.io.RXTXCommDriver java.lang.UnsatisfiedLinkError:
D:Eclipse workspaceArduinoTestlibbaseserialrxtxSerial.dll:
Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:123)
at processing.serial.Serial.list(Unknown Source)
at cc.arduino.Arduino.list(Arduino.java:139)
at arduinotest.ArduinoTest.setup(ArduinoTest.java:14)
at processing.core.PApplet.handleDraw(Unknown Source)
at processing.core.PApplet.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Animation Thread" java.lang.RuntimeException:
Error inside Serial.ports()
at processing.serial.Serial.errorMessage(Unknown Source)
at processing.serial.Serial.list(Unknown Source)
at cc.arduino.Arduino.list(Arduino.java:139)
at arduinotest.ArduinoTest.setup(ArduinoTest.java:14)
at processing.core.PApplet.handleDraw(Unknown Source)
at processing.core.PApplet.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Wynika to z faktu, że plugin Proclipsing, domyślnie ładuje do naszego projektu 32 bitową wersję pliku rxtxSerial.dll obsługującego komunikację z portem szeregowym (COM) — musimy go teraz zastąpić wersją 64 bitową:

  1. W Project Explorer rozwijamy ArduinoTest → lib → base → (prawy przycisk myszy) serial → Import → General → File System → Next
  2. Następnie przy polu From Directory klikamy Browse, wyszukujemy folder z Processingiem (w którym znajduje się plik processing.exe), dalej rozwijamy i wskazujemy modes\java\libraries\serial\library → windows64 → OK
  3. Po prawej stronie zaznaczmy checkbox rxtxSerial.dll → Finish, powinien pojawić się komunikat „Overwrite ‚rxtxSerial.dll’ in folder ‚ArduinoTest\libs\base\serial’?” → Yes.
  4. Po uruchomieniu programu powinno wszystko działać.

Zobacz więcej

Programowanie i elektronika na ASP — kilka słów o warsztatach Processing i Arduino

Jakiś czas temu, a dokładnie od 30.03 do 04.04 na katowickiej ASP można było wziąć udział w warsztatach pt. „Wykorzytanie platformy [Arduino][arduino] do Tworzenia interaktywnych obiektów i instalacji” (prowadzonych przez Pan Generator) oraz warsztatów pt. „Interakcja, projektowanie, programowanie w środowisku Processing” (prowadzonych przez Piotra Ceglarka). Wyzwanie dla prowadzących warsztaty było tym większe, że dla większości osób (głównie studentów ASP) biorących udział w warsztatach, był to pierwszy kontakt z programowaniem oraz projektowaniem układów elektronicznych.
To co mnie bardzo pozytywnie zaskoczyło, to entuzjazm i chęć zrozumienia jakimi wszyscy pawali i pomimo tego, że materiał (jak na pierwszy raz) nie był łatwy to, realizacja kolejnych etapów projektów szła naprawdę sprawnie.

Oba wydarzenia uważam za bardzo istotne, jeśli chodzi o edukację projektantów. Chcąc nie chcąc zaawansowane technologie to nasza codzienność i potężne narzędzie. Co więcej nawet na ASP, a może w szczególności tam, nie można od nich uciekać — oczywiście nie chcę zamęczać programowaniem ilustratorów (choć i oni mogą zdobyć w tej materii cenne doświadczenie), ale nie wyobrażam sobie, aby projektanci z zakresu wzornictwa/form przemysłowych, interakcji czy informacji, nie mieli kontaktu z podstawami programowania/wykonywania wstępnych prototypów. Nie twierdzę, że powinni oni biegle programować, ale posiadać wiedzę ogólną w tym zakresie (w szczególności na temat możliwości oraz ograniczeń technologicznych), umożliwiającą wykonanie prostych prac oraz sprawną komunikację z inżynierami/programistami. W Polsce takie podejście do Studentów Akademii Sztuk Pięknych może budzić lekkie zdziwienie, jednak słuchając Jana Kubasiewicza, Agnieszki Szóstek czy Jorge Meza Aguilar, zauważyłem, że studenci w innych krajach w dużej mierze samodzielnie realizują działające instalacje oraz prototypy, często właśnie w oparciu o [Arduino][arduino] i Processing. Mając na uwadze to, oraz zacięcie uczestników w/w warsztatów chyba nie ma wątpliwości, że należy zadbać chociażby podstawową edukację w tym zakresie.

A swoją drogą, ciekaw jestem czy warsztaty te wypłynęły na fali tego co zostało powiedziane na 3. Międzynarodowej Konferencji Projektowej AGRAFA (o której niedawno pisałem)?

Jeśli kogoś temat zainteresował, w najbliższym czasie bo 7–10. czerwca 2012 na katowickiej ASP odbędą się kolejne warsztaty z majsterkowania, a dokładniej Medialab pt. „Interaktywny modularny syntezator dźwięku dla początkujących” (prowadzenie: Ronnie Deelen i Piotrek Ceglarek).

###Zobacz więcej:

Distorter — czyli jak łatwo połączyć programowanie z grafiką warsztatową

Distorter to mały projekcik, który powstał trochę z przypadku. Ot tak zacząłem eksperymentować z wektorami, następnie korzystając z Processing/Java napisałem aplikację, a dokładniej edytor dystorsji, którego pomocą wykonałem projekty grafik, które to zostały wydrukowane metodą sitodruku (na czarnym bristolu oraz przeźroczystej pleksi). Sitodruki zostały uzupełnione przez generowaną w czasie rzeczywistym animację siatek, zniekształcanych przez wiele poruszających się źródeł dystorsji (podgląd podrzucę przy najbliższej okazji).

To co w projekcie było dla mnie w szczególności satysfakcjonujące, to możliwość (prawie) samodzielnego wykonania wszystkich etapów projektu tj. począwszy od pomysłu, poprzez zaprogramowanie sobie narzędzia, aż po wydruk. Raczej nie sądzę aby można było tu mówić o majstersztyku tak w materii programowania jak i grafiki, niemniej lubię (robić) rzeczy ze specyficznym autorskim podejściem, a myślę, że do takiego można zaliczyć bezpośrednie połączenie programowania oraz grafiki warsztatowej.

Przy produkcji poniższego dokumentu bardzo pomogli mi Michał Sikora (operator kamery) oraz Piotr Madej „Patrick the Pan” (któremu zawdzięczamy podkład muzyczny).
Za pomoc dziękuję również Marcie Pogorzelec, Dorocie Nowak, Dariuszowi Gajewskiemu, Janowi Nardelli, Magdalenie Konik oraz Kompany.

Sceny z filmu:

Zobacz więcej: