Kamerka WebService

Zdarzyło mi się ostatnio napisać WebService zwracający ramkę z kamerki (typu Webcam, nie IPCam) podłączonej do serwera na żądanie. Dzieło to jest jeszcze niedokończone, nieidealne i przede wszystkim nie przetestowane w warunkach bojowych, ale działa.

Do obsługi kamerki użyłam gotowego COMa pożyczonego z codeproject. Pisanie tego od zera jakoś mnie nie pociągało :)

Aby używać takiej dll'ki należy zarejestrować ją w systemie:
-wrzucić do ../Windows/system32
- wykonac w linii poleceń:
regsrv32 "CamServer.dll"
jakby co exe z regsrv32 też jest w ../Windows/system32.


Teraz można już dodawać sobie referencje do tegoż COMa do projektu (tu uwaga bo w systemie jest też COM nazwany CamServr, należy zwrócić uwagę na literkę "e").
Potem można już pobierać ramkę z kamerki:
CAMSERVERLib.Camera cam = new CAMSERVERLib.CameraClass();

byte[] frame = (byte[])cam.GrabFrame(quality);


Chyba już widać, dlaczego nie chciało mi się tego pisać od zera :P

Sam webservice to już wolna amerykanka, co kto lubi :)
Ja zrezygnowałam z SOAPa, aby pominąć przesyłanie taaakiego xml i przesyłać tylko to o co chodzi - obrazek z kamerki. RESTful wydał się dostatecznie wydajny, WCF byłby lepszy, bo można by przerobić kod na wszystko, no ale docelowy serwer to IIS 6, więc mogłby być problemy.

Co to jest ten REST? W Visual Studio SOAPowe WebService to taki typ projekt, o REST ni widu ni słychu. Okazuje się, że nie taki diabeł straszny, aby stworzyć WebService REST'owy wystaczy napisać klasę implementującą interfejs IHttpHandler, reszta wygląda podobnie jak przy SOAP. Przy czym REST ma jeszcze zasady odnośnie wymogu przetwarzania żadań http typu POST, GET, HEAD, DELETE...
Polecam coś doczytać na ten temat :)

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebCamService : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
...
}


}

Zachowanie ProcessRequest jednoznacznie skojarzyło mi się z JAVA'owym servletem. Bierzemy sobie writer i jedziemy :P

context.Response.OutputStream.Write(frame, 0, frame.Length);

No i niby wszystko pięknie, na rządanie klient dostaje ramkę z kamerki.
Tak oto nasz WebService niby działa. Teraz juz można otworzyć piwko i świętować sukces XD.... Bullshit :P

Po podałączeniu 3 klientów proszących o ramekę co kilka sekund całość się popisowo wykrzaczy :P

Wyjścia są różne - puścić webservice z kamerką z jakąś dozwoloną pulą połączeń, pilnować wątków aby zapobiec konkurencji w dostępie do zasobu, jakim jest nasze urządzonko. Na moje brzmi to trochę na łapu-capu... Epic fail XD

Wyjściem, jakie planuje zrealizować, jest napisanie usługi (jeszcze nie wiem jakiego typu), którą klienci prosiliby o subskrypcję na dostęp do kamerki. Usługa czyta z kamerki ramkę co jakiś minimalny czas i rozsyła ją do klientów z zadaną przez nich intensywnością (np. czyta ramkę co 0,25 s i wysyła co czwartą klientowi, który zapisał się na wysyłanie ramek co sekundę).

Kamerka pozostanie Webservicem, aby cały system można było rozproszyć - jakiś mały serwerek hostuje kamerkę i stoi w porządanym miejscu (może o tym nie wspomniałam, ale cała idea posiadania takiej kamerkowej usługi to monitoring za pomoca webcam'ów), zaś serwer z usuługą multicastową stoi gdzie indziej.

Termin realizacji: po sesji podstawowej :P Oby coś z tego wyszło :)

Dodam jeszcze, że samą realizację kamerka + usługa multicastująca odczyty z niej, można uogólnić na przypadek z użyciem czujnika dowolnego typu zamiast kamerki. No ale to dopiero w kolenej wersji mojego dzieła:P

Note to self: Zapamiętać - znaleźć jakieś cudo do wstawiania sformatowanego kodu źródłowego na bloga

PRZECINEK, bo MS wie lepiej

Krótki wpis o niezwykle irytującej rzeczy:

Aby połaczyć się z serwerem MS SQL należy podać w connection stringu lub wpisać w Managment Studio adres w postaci np (8000 to przykładowy numer portu):

127.0.0.1,8000

domena.com,8000


Czy juz widać dlaczego powoduje to u mnie stan skrajnego "WTF?"
i prawie zawsze przy tworzeniu connection stringa sprawia, że się mylę i zawieszam na 5 min zanim dojdę co jest nie tak :).
Niestety nie mam czasu poszukać w sieci dlaczego firma z Redmond tak sobie wymyśliła, zamiast jak reszta świata i innych aplikacji, również spod marki MS, używać dwukropka.
Za jakie grzechy pytam, za jakie grzechy?!

Google here, google there, google google everywhere

Niektórzy wiedzą, że jestem maniakalnym wręcz użytkownikiem aplikacji i serwisów spod marki Google. Oferują tak wiele rzeczy, że większoć moich znajomych o połowie nie słyszała, dlatego zrobię małe zestawienie, jak na prawdziwego maniaka przystało.

Blogger (tu jesteś xD)
Blogger mi się podoba bo:
- nie musiałam tworzyć osobnego konta - loguję się z konta google :)
- można wrzucić własną skórkę - co muszę kiedyś zrobić :P
- jak dla mnie panel "administracyjny" jest zrozumiały, a interfejs bardzo przyjemny, taki "okrąglutki" (nie jak w blogowych witrynach co niektórych polskich portali).
Pewnie się znajdą tacy co powiedza, że powinnam przesiąść się na przykład jogger'a, no ale ja muzę pozostać wierna googlowej marce :)

IGoogle
Coś dla ludzi, którym ascetyczny wygląd strony google.com się znudził. Można sobie skonstruować personalny "pulpit" przypisany do konta google albo do danego kompa (czy raczej przeglądarki). Pulpit pora wyborem cudacznej skórki na każdej zakładce można ubarwić róznymi gadżetami. Ja mam cytaty dnia, najnowszego arty z AnimeNewsNetwork, zegarek, skórty info z gmail'a i cośtam jeszcze. Generalnie każdy chyba znajdzie coś dla siebie.

Gmail
Dokładnie od 11 maja 2007 roku korzystam intensywanie z gmail'a i nikt nie wmówi, że istnieje inny polski serwis oferujący więcej (na zagranicznych się nie znam, więc się nie wypowiem). Większość podległo gmail'izacji xD. Np. o2 na którym mam konto spamowe. Wp jest na dobrej drodze.
Gmail szczególnie mi się podoba za względu na fakt, że mam awersję do programów pocztowych - za dużo ustawiania, problemy z konfiguracją (choć tu chyba wychodzi bardziej moje lenistwo, żeby sobie taki program skonfigurować jak należy) i przede wszystkim utrata danych przy problemach ze sprzętem.
E-mail przez przeglądarkę to jest rozwiązanie, które doskonalne do mnie trafia.
No i ta pojemność, której chyba nigdy nie zajmę całej :)
Jedyne, czego mi brakuje to możliwość tworzenia folderów. Ale gmail to nadal beta i powli ogarniem metode organizacji poczty przez etykietki, więc nie jest źle.


Google docs
Google docs to rozwiązanie, któremu z całych sił kibicuję. Może ich edytor nie jest jeszcze tak rozbudowany jak TinyMCE, ale interfejs jest całkiem przyjemny, projekt rozwijany, a co dla mnie najważniejsze dokumenty może edytować wiele osób i da się nadawać uprawnienia. Owszem, kiedy jest to wiele osób na raz to nadal bywa, że kursor zaczyna skakać na początek dokumentu po każdym zapisie.
Ciekawą opcją jest możliwośc przygotowania ankiety, z której odpowiedzi zliczane są bezpośrednio do arkusza kalkulacyjnego, gdzie można zaimplementować porządane statystyki. Jeszcze nie miała okazji wykorzystać tej funkcji na poważnie, ale wygląda bardoz pozytywnie.

Picasa
Raczej sama na Picassie albumów nie tworzę, ale to co podsyłają znajomi wygląda fajnie. Funkcjonalność ograniczona dokładnie do tego, do czego aplikacja ma służyć i bardzo dobra alternatywa dla portali społecznościowych gdzie ludzie mają tendencje publikować prywatne zdjęcia. Tu można nadawać uprawnienia tlyko osobom zainteresowanym, bo nie każdy musi wiedzieć z kim byłeś na imprezie, albo gdzie byłeś na wakacjach.

Youtube & Videogoogle
Konto na youtube mam od czasów maturalnych jeszcze, a to było tak dawno, że youtube nie należał jeszcze do google i można na nim było publikować filmik nawet dwugodzinne (teraz dłuższe mogą publikować konta ze statusem reżysera, jakby to kogoś interesowało).
Co do videogoogle to fascynuje mnie fakt, że tam, w przeciwieństwie do YT, pełno jest długich filmów, czasem nawet całe filmy fabularne są wrzucone i jakoś nie ma masowego ich usuwania. Czyżby ta sama korporacja stosowała inne policy dla prawie takich samych witryn (przeciez na VG w wynikach wyszukiwania są filmiki z YT).
Sprawa do zbadania :)

GooglePages
Tutaj mam bana xD. Serio, chciałam hostować kiedyś projekt na googlePages i dostałam bana, chyba za wrzucenie obrazków objętych prawami autorskimi. Możliwe również, że ban jest za wrzucenie odtwarzacza flashowego do filmików (ala własny youtube) i filmiku do tegoż odtwarzacza (w formacie flv). Któż to wie :) Ale hosting z tego fajny, choć edytor stron osobistych kuleje (no ale nie jest to przeciez komercyjny kombajn).
No i fakt, że mam tego nieszczęsnego bana i nie moge opublikować stronki :P

GoogleMaps
Jak to niedawno usłyszałam "wszystkie IDE mają teraz kontrolki do wyświetlenie map AJAX'owych bo to jest tredni" XD. GoogleMaps to istna rewolucja. Usługa spowodowała lawinowe powstawanie podobnych klonów lokalnych. Po prostu nie do pomyślenia, że ludzie tak rzucili się na zwykłe mapy. Znak czasu chyba, już nie ma "podróżowania placem po mapie" teraz jest "podróżowanie kursorem po GoogleMaps".

CodeGoogle
Aktulanie wykonywany przez mnie i kolegów projekt leży tam sobie na repozytorium svnowym i ma się dobrze :). Issue tracking na tym serwisie wygląda obiecująco. Nie jest to JIRA czy HP-cudo ale dla projektów opensource'owych w sam raz się nada.
W dodatku można go spersonalizować, czego nie omieszkałam zrobić - spolonizowałam sobie etykietki nadawane "błędom" :)
Ponadto zostałam mile zaskoczona podniesienie quoty na repozytorium ze 100 MB na 1 GB w grudniu 2008. Nic tylko przyklasnąć :)
GoogleCode to jeszcze nie tak duże community jak SourceForge ale rośnie konkurencja :)


Aplikacje pozaprzeglądarkowe

GoogleEarth
GoogleMaps ofline i 3D, bajer na całego. Jakby mnie na tym uczyli geografii to pewnie bardziej bym ją lubiła :P.
Polecam przetestowanie symulatora lotów, o którego istnieniu wielu użytkowników nie ma bladego pojęcia.

GoogleToolBar
Jak zobaczyłam na siłę wpychany w Viście toolbar to od razu mi się z ty skojarzył. Dużo bajerów dla gadżeciarzy, ja raczej nie mam miejsca na pulpicie :P.

Picasa
Soft lokalny do tego co jest udostępniane przez przeglądarkę. Spodobało mi się to, że programik sam mi zindeksował wszystkie pliki graficzne na dysku. Fajna rzecz dla takiego bałaganiarza jak ja. ACDSee to jeszcze nie jest, ale powinno przeciętnego użytkownika zadowolić. Przyznam jednak, że dla Picay nie porzucę mojego ukochanego InfranView.

gTalk
Moja alternatywa na padające GG. Nawet dość aktywnie korzystam z małym gronem znajomych. Ponadto można sobie pogadać z użytkownikami sieci Jabbera, więc nie ma co narzekać. Wersja z googleLabs jest bardziej rozbudowana, ale jak ją ostanio widziałam, miała za dużo bugów.

Google Chrome
Moje odczucia na temat przeglądarki od goole sa dosyć pozytywne, choć nie używam jej na co dzień. Podoba mi się koncepcja trzymania każdej karty jako osobnego procesu i wymyślanie przez ludzi z frimy G tryb anonimowego surfowania (nie są zapamiętywane ciasteczka i inne ślady naszej działaności) - i to nie dlatego, że wchodzę na niestosowne strony. Fakt, że Firefox zadomowił tę funkcjonalnośc dość szybko o czymś świadczy :)
Chrome nie używam, ponieważ mam specjalne potrzeby jeśli chodiz o przeglądarkę. A mianowicie musi być w stanie być otwarta przez co najmniej dwie doby non-stop XD.
Chrome w wersji z października, kiedy próbowałam się na nie przesiąść, wywalało wraz z winXP jakieś 4-5 godzin po otwarciu (może dlatego, że miałam otwarte jak zwykle około 30 kart ^^' ). Generalnie jak dla mnie trochę mało. Jednakże skoro wypuślili już wersję ofijalną to jako maniak chyba musze jej się dokładniej przyjrzeć :)


Cudaki i perełki z GoogleLabs
Googlelabs to zbiór projektów realizowanych w google, głównie w czasie "jednego dnia na własny projekt". O co chodzi? - pracownicy google z całego pięciodniowego tygodnia pracy mogą poświęcić jeden dzień na realizację własnych pomysłów. Z takich pomysłów powstał między innymi Gmail.
Jako przykład, chyba zabawy intelektualnej, podam GoogleSets.


Smaczki
-Google aplikacje myślą za mnie o zapisywaniu kopii tymczasowej co bardzo się chwali, bo ja niestety nie mam zwyczaju tego robić (tego posta też mi zapisały parę ładnych razy :) )
-GoogleGadets - ciągle się zabieram, żeby nauczyć się tworzyć takie fajne gadżety, ale moja awersja do programowania JScriptów jednak bierze górę, może kiedyś... Same gadżety to niezły bajer, bo google najwyraźniej dąży do tego, żeby móc tych samych gadżetów używać w wielu aplikacja z ich stajni.
- Uprawnienia, uprawnienia, uprawnienia - pisałam o ty powyżej parę razy, ale napisze jeszcze raz - można nadawać uprawnienia odczytu i modyfikacji innym posiadaczom kont google'owych
-Zapamiętywnaie kontaktów - raz wysłany email i już kontakt zapamietany, zero konieczność zarządzania książką adresową i lista kontaków dosłownie wszędzie - nie tyko na gmail, ale też na Docs'ach, codegoogle, gTalku i pewnie w wielu innych miejscach, o których jeszcze nie wiem :)

Kwestie prywatności
Czy oddając swoje dane w ręcę Google czuję się bezpiecznie? Trudno powiedzieć, generalnie cenię sobię moją prywatność, bo jest z niej w dzisiejszych czasach niezły towar. Dlatego staram się korzystać z aplikacji google z pewną dozą zdrowego rozsądku. Przykładowo nie wrzuciłabym CV na googleDocs, ale to chyba przykład nieco zahaczający o paranoję. Uspokaja mnie fakt zarządzania uprawnieniami praktycznie wszędzie, niepokoją zapisy w licencji googlowej, z których wyczytałam między wierszami, że właściwie powierzając serwisom google cokolwiek, zrzekam się części praw do tejże treści. Ale wolę zrzec się tych praw na rzecz porządnej i poważnej korporacji, niż jakiejś firmy krzak.

Podsumowanie
Jak dla mnie wyrażenie "Matrix has you" stało się przyżytkiem. A to dlatego, że mogę o sobie powiedzieć "The cloud has you". Chmurka internetowa coraz bardziej staje się Matrixem - inną wersją "życia". Czy to dobrze, czy źle? Jak dla mnie ryzyka, szczególnie te związane z utrata prywatności, są mniejsze niż potencjalnie korzyści jakie daje chmurka, no ale czas pokaże...

Woman @ IT

Jako przedstawicielka dziwnej rasy - kobieta dążąca do uzyskania tytułu naukowego z dziedziny informatyki - postanowiłam dorzucić moje trzy grosze do wypowiedzi znajdowanych przeze mnie tu i ówdzie na temat technologii informatycznych i nie tylko.

Rozważałam pisanie bloga po angielsku, ale stwierdzam, że dosyć jest tutoriali i porad dotyczących tematów, które mnie interesują, w języku angielskim. Po polsku pomocy netowych dotyczących zagadnień np. odnośnie technologii internetowych jest bardzo mało. Z przyzwyczajenia już zawsze googluje po angielsku jeśli mam jakiś problem dotyczący np. dotNETa.
A problemów miewam sporo, wiec czemu nie podzielić się doświadczeniem kiedy już je rozwiąże :)

Jestem bardziej zwolenniczką podejścia "Get it done" - "Zrób to zamiast się zastanawiać", dlatego często pomijam szczegóły teoretyczne opisując jak coś zrobić. Co wcale nie oznacza, że w wielu przypadkach nie mam wiedzy na temat tychże szczegółów.

Świat IT to obecnie typowo męskie podwórko i całkiem nieźle po między moimi kolegami się zadamawiam, ale lubię też na nich ponarzekać. Czemu nie omieszkam dać wyrazu.

Mam nadzieję, że znajdą się czytelnicy moich przemyśleń :)

PS. poszukuje fajnej skórki na bloga, kompatybilnej z bloggerem :)