Sense: Camera

W związku z nowym pomysłem, dodałem do frameworka możliwość ładowania do tekstury danych z urządzenia przechwtyującego obraz. Aktualnie implementacje oparłem na bibliotece OpenCV i w zasadzie zamknęła się ona w kilku liniach kodu. Docelowo chcę skorzystać bezpośrednio z DirectShow, jednak strasznie dużo obiektów COM’owych trzeba utworzyć, zainiciować itp. Więc narazie przeżyje dodatkowe dll’ki w katalogu :)

Rezultat poniżej:

sense - camera #1

Binarek nie daje bo w sumie narazie nie ma po co, a sam kod jest dosyć niestabilny. W ogóle poziom entropii w kodzie frameworka wzrósł mi niebotycznie i nadchodzi czas żeby wkońcu posprzątać. Aktualnie dodałem flagę która kompiluje Sense w wersji lite bez shaderów, framebuffer’ów i całej reszty przez co pozwala na uruchomienie programu na starszych konfiguracjach – dzięki temu mogłem testować kamerkę którą mam w starym laptopie :)

A co do OpenCV, to natknąłem się na tą bibliotekę przy okazji biblioteki openFrameworks. Polecam zobaczyć galerię performance’ów bo ludzie porobili naprawdę interesujące rzeczy.

Luźne przemyślenia dotyczące efektywność pracy.

Współ autorka serii Head First, Kathy Sierra dawno temu umieściła na swoim blogu wpis zawierający jej ulubione grafy i rysunki. Generalnie polecam poczytać i obejrzeć, wiele z przedstawionych grafów/wykresów uważam za bardziej niż trafne. Jednak teraz chciałem się skupić na jednym przedstawiającym “krzywą Twitter’a”, o to ten graf:

Twitter Curve by Kathy Sierra

Na rysunku widać bardzo ładnie które usługi w jakim stopniu nas rozpraszają. Skalę dolnej osi trzeba by było oczywiście przeskalować indywidualnie, jednak i tak wiadomo o co chodzi.

W raz z rozpowszechnianiem się szerokopasmowego dostępu do Internetu, zaczęły powstawać usługi umożliwiające nieprzerwaną komunikacje, jedną z takich usług jest przedstawiony Twitter, który zdobywa coraz większą popularność. Jednak zamiast Twittera można podstawić inne podobne usługi/serwisy, np. serwisy społecznościowe które w większości mają takiego “Twittera” wbudowanego (np. Facebook Wall).

Wracając do rysunku. Znajduje się na nim również linia określająca “Brain Trashing threshold” (bardzo fajne określenie IMO :) ), której punkt przecięcia z krzywą zrzutowany na dolną oś daje wartość około 15 minut – osobiście umieściłbym ją trochę niżej bo przy rozpraszaniu się co 15 minut podczas programowania to niewiele bym napisał :)

Jak to się ma do tematu posta. Otóż tego typu “przeszkadzajki” są jednym istotnym czynnikiem (jednym z wielu oczywiście) wpływającym na pracę, potrafią bardzo skutecznie dekoncentrować i odciągać od realizowanej czynności na długi czas. W związku z tym trzeba się od nich “odciąć”. Jeżeli ktoś nie ma na tyle silnej woli w danej chwili to może zastosować prostą technikę zobrazowaną na poniższych zdjęciach:

Network cable unplug 1

Network cable unplug 2

Oczywiście ta metoda ma wady gdyż bardzo dosłownie odcina wszystkie usługi, jednak jak BTT osiąga krytyczny pułap to bardzo dobre rozwiązanie, tylko czasem wymaga pobrania jakiejś dokumentacji do czytania offline :)

LanFriends 0.3.1

Wprowadziłem kilka małych poprawek, oto one:

Zmiany w stosunku do wersji 0.3.0

  • Logowanie do pliku “log_release.txt” oraz do nowej zakładki “Log” zdarzeń zmiany stanu, dodania oraz usunięcia urządzenia z listy. Logowanie zmiany statusu urzadzenia może być wyłączone w oknie “Settings”
  • Możliwość maksymalizacji okna
  • Zapisywanie pozycji i rozmiaru okna w ustawieniach
  • Ustawienie “Skin” już działa. Można tworzyć dodatkowe katalogi z tematami graficznymi (ikonki oraz plik QT CSS “style.css”) – w kolejnych wersjach dorzucę przykładowy skin z plikiem “style.css”
  • Kilka drobnych zmian

Do pobrania

W zasadzie LanFriends już prawie jest tym czym chciałem żeby był, ale oprócz dokończenia aktualnych funkcjonalności dopiszę jeszcze chata, po to żeby w przypadku braku połączenia z internetem w sieci można było się komunikować, bo zakładająć że ludzie w sieci używają LanFriends to nie będą musieli korzystać z dodatkowego – “zbędnego” archaizmu jakim są na owe czasy komunikatory umożlwiające komunikację offline, np. NetMeeting.

Co ciekawe po umieszczeniu aplikacji w serwisie download.com, inne serwisy takie jak Softpedia umieściły automatycznie LanFriends na swojej liście – oczywiście to raczej roboty sieciowe zajęły się wyszukiwaniem, ale screenshoty musiał już zrobić człowiek :).

Link do LanFriends 0.3.0 na Softpedii
Link do LanFriends 0.3.0 na download.com

Sense: Environment mapping

W przerwie od spraw firmowych postanowiłem sobie zakodować coś przyjemnego dla oka. Napisałem standardowe mapowanie środowiskowe przy użyciu renderowania do tekstury typu CUBE oraz odpowiedniego programu fragment shader’a. Jako tło wygenerowałem boxa z boxów wygenerowanych w Blenderze – co by efekt ładniej wyglądał. W zasadzie boxy mogłem wygenerować proceduralnie ale nie chciałem już tracić czasu na wymyślanie algorytmu :).

Dla eksperymentu dwie ściany falują zgodnie z spectrum dźwięku akualnie odtwarzanego utworu – w przypadku braku uworu (ustawionego w config.txt) spectrum jest losowe i może przemieszczać boxy w równie losowy sposób :)

Efekty poniżej:

sense environment mapping 1

sense environment mapping 2

Do pobrania:

Sterowanie tak jak ostanio. To samo z configiem.

LanFriends 0.3.0

Sorry, but this post is not available in English

LanFriends 0.2.1

Version 0.2.1

Changes to 0.2.0

  • BUG FIX: Freezing of other applications like music players is fixed
  • Version numbering changed to three values
  • Show option from tray menu is now activating window – not only creating

Download:

LanFriends 0.2

Version 0.2

Changes to 0.1

  • Settings are now saved in to “Settings.xml” file
  • In add device dialog You can enter whatever You want to IP field – there is no more IP validation, so You can put also domain name (example. www.google.com)
  • “Web” device type added. It can be used for representing devices that have WWW domain
  • Changed right mouse button behavior on device list
  • Device entry edit possibility from device list context menu
  • “Start search” in device discovery dialog now checks if there is search thread already running
  • “Select active” button now deselects not active devices

Device entry edit window:

LanFriends 0.2, Edit Device Entry Dialog

Download

LanFriends

Kilka dni temu, poza pracą właściwą, ponownie zacząłem implementacje programu LanFriends (polecam zobaczyć dawną wersję: http://www.mi-ku.net/?p=30). Progam ma docelowo służyć do badania stanu urządzeń sieciowych.

Geneza

Projekt odnowiłem w związku ze zmianami w sieci LAN, w której się znajduję. Nasza sieć zawiera wiele urządzeń Wi-Fi (Klienci i AccessPoint’y) i niestety czasem niektóre z tych urządzeń odmawiają “posłuszeństwa”. W związku z tym osoby które łączą się do routera przez np. dwa Access Pointy muszą zawsze same dochodzić co się stało (czyt. “dlaczego nie ma internetu?” :) ) lub po prostu pytają się tych, którzy posiadają urządzenia znajdujące się po drodze pakietów. Teraz z pomocą ma przyjść program “Lan Friends” :) który automatycznie stwierdzi które urządzenie nie działa i z kim trzeba się kontaktować aby naprawić usterkę. Niestety dawna implementacja zaginęła mi wraz ze źródłami i musiałem rozpocząć implementację od początku – co raczej wyjdzie na dobre, bo minęło sporo czasu odkąd pisałem ten program :)

Aktualna funkcjonalność:

  • Wyszukiwanie urządzeń poprzez ICMP Echo Request/Reply (czyli po prostu PING :) ) poprzez podanie zakresu adresów IP.
  • Dodawanie pojedynczych urządzeń do listy.
  • Regularne testowanie urządzeń z listy po kolei.
  • Możliwość ustawienia timeouta na ICMP Echo Reply
  • Możliwość ustawienia odstępu czasowego między rządaniami ICMP.

Wpisy o urządzeniach zawierają pole “Inform about state change”, które w aktualnej wersji można ustawić na “yes” tylko poprzez ręczne dodanie urządzenia lub poprzez edycje pliku xml (który zapisuje się po wyjściu z programu). Ustawienie tej opcji na “yes” owocuje balloon tooltipem z tray’a w momencie zmiany statusu danego urządzenia.

Screen shoty:

LanFriends image 01

LanFriends image 02

Pierwsza wersja do testowania:

Od kuchni

Program implementuje w C++ przy użyciu biblioteki Nokia QT wykorzystując ją GUI, XML i wątków oraz WinSocket’ów do sieci. WinSocket’ów się pozbędę na rzecz biblioteki PCAP (wykorzystywana też przez nmap) dzięki której będę wstanie zaimplementować bardziej wyszukane metody skanowania sieci niż PING :). Poszczególne dll’ki biblioteki QT niestety troche ważą, jednak to dobra cena za wygodę programowania którą oferują.

Co dalej

Doimplementowanie podstawowych rzeczy związanych z edycją wpisów – teraz jest niezbędne minimum.

Nowe rzeczy w Sense

Dodałem kolejne rzeczy do frameworka.

FMOD

Pierwszą jest podpięcie biblioteki FMOD do dźwięku. Zdecydowałem się właśnie na nią ze względu na jej możliwości oraz łatwą przenośność między platformami. Odrazu zaznaczam, że nie pisałem żadnego wrappera i scalenie z frameworkiem jest praktycznie żadne, ot tylko inicjowanie i zamykanie wraz ze startem aplikacji (później przy wczytywaniu konfiguracji z jakiegoś pliku). Odnośnie pisania wrapperów na biblioteki ciekawe podsumowanie napisał Reg

Dotatkowo napisałem funkcję pomocniczą do wyliczania energii dźwięku która może być przydatna do osiągania fajnych efektów wizualnych.

Post-Processing

Drugą rzeczą którą zaimplementowałem to system efektów do post-processing’u. Doszły kolejne interfejsy IPostProcessingEffect oraz IPostProcessingEffectShader. Efekty można dodawać do Renderera w raz z ustalaniem kolejności ich aplikowania. Zaimplementowałem narazie 3 efekty używając fragment shaderów:

  • Box-Blur
  • Motion-Blur
  • Deformer (deformacja obrazu na podstawie mapy przesunięć)

Szczegóły implementacyjne znajdą się w kolejnych postach. Tymczasem znowu testowy “blob” z nowymi rzeczami:

motion-blur

deform

Do pobrania (znowu dla odważnych :) ):

Uwaga: aby zobaczyć motion-blur program musi wyliczyć odpowiednio dużą energię dźwięku więc po pierwsze, do folderu należy podrzucić jakiś plik muzyczny (np. wav, mp3, mod, xm lub inny który obsługuje FMOD) i wpisać jego nazwę w pliku config.txt, a po drugie lepiej jakby był dość “skoczny” w celu osiągnięcia fajnych efektów :)

Aha, program nie sprawdza wszystkich możliwych błędów które mogą wystąpić, więc potrafi się ładnie “wykrzaczyć” na niektórych komputerach, szczególnie tych nie wspierających technologii oraz z systemem Vista (w sumie nie wiem czemu)

Co dalej

Jako, że na zajmowanie się frameworkiem znowu będę miał mało czasu to nie prędko coś dodam – w zasadzie i tak nikt nie czeka, bo go na razie nie udostępniam :D ale tak profilaktycznie piszę.

W planach mam implementacje tekstur potrafiących czerpać dane z zewnętrznych obiektów (np. poprzez ITextureDataProvider). W planie mam implementacje klasy abstrakcyjnej operującej na wątkach a potem już konkretną implementacje dla wspomnianego efektu Deformer – po to aby można było generować animowane deformacje które z resztą są zauważalne w wielu grach, np. w dość nowej grze “Prototype” jak się skoczy z dużej wysokości.

Edit:
Znalazłem przyczynę (przy pomocy osób u których demko się nie odpala, m.in Qbix i Sieciech) nie działania u niektórych na Windows Vista oraz Windows 7, otóż program przestaje działać w momencie wywołania SwapBuffers. Jeżeli ma ktoś pomysł (i jeżeli się da) jak to poprawić, to wszelkie komentarze są mile widziane. Odrazu zaznaczam, że rysuje tylko bo back-bufforze a glFlush i glFinish przed SwapBuffers nie pomaga (z resztą nie jest potrzebne)

Zabaw z shaderami ciąg dalszy

Wzbogaciłem framework o nowe rzeczy, a mianowicie:

  • krzywe Beziera
  • kamerę (tak, jeszcze jej nie miałem)

Dodatkowo ulepszyłem liczenie normalnych w shaderze z ostatniego posta.

Rezultaty:

blob3

blob4

Do ściągnięcia: