wtorek, 17 marca 2009

Tworzenie obrazu zawierającego filmowe miniatury.

W poprzednim poście pojawił obraz, który był złożony ze zrzutów ekranowych z filmu:

Ponieważ przygotowanie tego obrazka, zajęło mi kilka chwil, dlatego chciałbym się podzielić z moimi czytelnikami wiedzą, jak można taką grafikę przygotować.

Zacznijmy więc od narzędzia, którym można to przygotować. Ja znalazłem, że taką funkcjonalność zawiera oprogramowanie Media Player Classic. Jest on dość popularny i ja np. miałem go już zainstalowany w ramach pakietu kodeków: K-Lite Codec Pack. W celu uzyskania obrazu (jak ten powyższy) wystarczy otworzyć film, zrobić pauzę, a następnie z menu "File" wybrać "Save Thumbnails...". W oknie zapisywania wybieramy plik do zapisu, typ (BMP, JPG), wielkość docelowego obrazu oraz ilość wierszy i kolumn miniatur. W zasadzie proste i łatwe, niestety czekała mnie niemiła niespodzianka: okno z napisem: "GetCurrentImage failed".

Dopiero dłuższa chwila poszukiwań sprawiła, że problem rozwiązałem problem. W tym celu należało wejść w menu View -> Option. Wybrać na drzewku gałąź Output i w "DirectShow Video" wybrać inne niż oznaczony gwiazdką wyjście, np. System Default jak na rysunku poniżej:

Mam nadzieję, że te proste wskazówki pomogą jeszcze komuś innemu poza mną.

poniedziałek, 16 marca 2009

Zaawansowane technologie komunikacyjne w praktyce, czyli CommServer (połączenie z PLC) oraz algorytmy ASA i MPR

Niedawno zajmowałem się w pracy, tworzeniem filmów instruktażowych dotyczących oprogramowania CommServer, komunikacji ze sterownikami przemysłowymi i zaawansowanych technologii komunikacyjnych. Muszę przyznać, że okazało się to dość czasochłonnym zajęciem, biorąc pod uwagę, że trzeba było zacząć od scenariusza i planu, później kręcenie i powtórki, a na końcu żmudny montaż.

Moje przykłady zostały oparte o połączenie między CommServer'em a sterownikiem PLC SAIA PCD3. Mam nadzieję, że filmy okażą się interesujące, zapraszam wszystkich do ich obejrzenia (filmy dostępne są w języku angielskim):

Przykładowe obrazy z filmów:

piątek, 13 marca 2009

"Google: Twoja Wyszukiwarka" (AdSense dla wyszukiwania) na blogu

Ciekawe kogo zdziwił pusty post na tym blogu opublikowany w ostatni piątek (2008-03-06 ok godz 20) pt. "Wyszukiwarka"?

Nie, to nie była pomyłka a prosty manewr - sposób w jaki można opublikować wyniki z wyszukiwarki Google na swoim blogu. Przejdźmy jednak do konkretów. Wykorzystana została usługa "AdSense dla wyszukiwania". Pozwala ona na dodanie do strony internetowej wyszukiwarkę Google. Oczywiście dodanie samego pola do wprowadzania zapytania i przycisku szukaj nie stanowi żadnego problemu: wystarczy dodać w wybranym miejscu gadżet pozwalający na wpisaniu dowolnego kodu HTML i JavaScrip, da to w efekcie np.:

Teraz mamy dwie możliwości:

  • wyniki wyszukiwania możemy wyświetlać na nowej stronie (rozwiązanie mało ciekawe)
  • wyniki wyszukiwania możemy wyświetlać na swoim blogu

Aby skorzystać z drugiej opcji należy wkleić w kod swojej witryny (bloga) odpowiedni kod dostarczany przez instalator usługi "AdSense dla wyszukiwania". Pytanie tylko gdzie można to zrobić? Możliwe jest wklejenie tego kodu bezpośrednio do szablonu XML(HMTL) bloga, jednak wydaje mi się że wyświetlanie tych wyników na każdej stronie chyba będzie mało estetyczne. Dlatego wymyśliłem inną możliwość:

  1. Stworzyłem pustego posta pt.: Wyszukiwarka
  2. Post ten tylko na pierwszy rzut oka nie ma treści, gdyż do jego kodu HTML został wprowadzony dostarczany przez instalator usługi Adsense kod.
  3. Dzięki temu można wyświetlić wyniki wyszukiwania w polu właśnie tego posta.

Mam madzieję że spodobała się moim czytelnikowm takie rozwiązania, zapraszam do wypróbowania i jeśli macie coś do dodania, czekam na komentarze.

czwartek, 12 marca 2009

Szkolenie: WNT 6: Wymiana danych pomiędzy standardami OPC-SQL-XML

Chciałbym wszystkich zaprosić na szkolenie, które będę współprowadził. Dotyczyć ono będzie zagadnień związanych z technologią OPC (otwartego standardu komunikacyjnego stosowanego w automatyce przemysłowej i informatycznych systemach służących do integracji zarządzania procesem i biznesem), komunikacji z procesem technologicznym oraz praktycznym zastosowaniem produktów z rodziny CommServer .

Tym razem hasłem przewodnim spotkania będzie „Wymiana danych pomiędzy standardami OPC-SQL-XML oraz Integracja systemów GIS z telemetrią”.

Oprócz ogólnych zagadnień dotyczących technologii OPC poruszone zostaną zagadnienia dotyczące:

  • Modeli integracji oraz przyczyn jej wykorzystania.
  • Metod pozyskiwania danych z procesu.

Więcej informacji na temat szkolenia jest dostępnych na wortalu CommServer.

http://www.commsvr.com/OPCWorkshops.aspx

środa, 11 marca 2009

Podsumowanie dla artykułu na temat infrastruktury komunikacyjno-usługowej OPC Unified Architecture (OPC UA)

Mam nadzieję, że w tym artykule udało mi się przybliżyć czytelnikom sposoby komunikacji i usługi dostępne w OPC Unified Architecture. Wydaje mi się, że dla pewnych czytelników artykuł mógł okazać się zbyt ogólny, dla innych zbyt szczegółowy. Zapraszam do komentowania lub wymiany korespondencji poprzez email, abym mógł pewne elementy przedstawić w inny, może jaśniejszy sposób.

W ramach podsumowania chciałbym wymienić najważniejsze informacje, które są istotne dla opisywanej infrastruktury komunikacyjno-usługowej:

  1. Specyfikacje OPC UA definiują usługi w sposób abstrakcyjny, mapowanie na konkretną technologię komunikacyjną odbywa się niezależnie od definicji usługi, przestrzeni adresowej i modelu informacji.

  2. Specyfikacje OPC UA przedstawiają aktualnie dwie technologie przesyłowe:

  • Web Serwisy oparte o protokół HTTP/HTTPS i SOAP

  • binarne strumienie danych przesyłane poprzez protokół TCP

  1. Specyfikacje OPC UA przedstawiają dwa sposoby kodowania

  • binarne (opisane w specyfikacji)

  • XML

  1. Zabezpieczenia wbudowane w OPC UA wykorzystują mechanizmy WS- Secure Conversation (WS-SC) lub mechanizmy opracowane na bazie WS-SC i TLS (w przypadku binarnych strumieni danych)

  2. Mechanizm publikowania dla elementów monitorowanych subskrypcji umożliwia optymalizację komunikacji i wywołania pseudo-asynchroniczne.

    (To tylko jedna z części artykułu zobacz pozostałe: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, autor: Maciej Zbrzezny)

wtorek, 10 marca 2009

Mechanizm publikowania w OPC Unified Architecture (czyli jak zrealizować mechanizm asynchroniczny w synchronicznym świecie OPC UA).

W poprzedniej części opisałem ustawienia subskrypcji i elementów monitorowanych, teraz kontynuując przytoczony przykład chciałbym przybliżyć mechanizm publikowania.

Po stworzeniu subskrypcji i elementów monitorowanych oraz ustawieniu wszystkich potrzebnych parametrów, klient może przejść do obsługi mechanizmu publikowania. Zagadnienie mogłoby się wydawać proste: klient wywołuje funkcję Publish() (jak na poniższym rysunku), ale tak na prawdę wykorzystywana jest bardziej skomplikowana maszyneria.

W architekturach zorientowanych obiektowo (SOA) typowe jest, to że klient łączy się z serwerem, najczęściej jest to prosta operacja. Natomiast niespotykana jest (i często niemożliwa) sytuacja, w której to serwer nawiązuje połączenie do klienta, a przecież z takim mechanizmem mieliśmy do czynienia w subskrypcjach OPC Classic (opartych o technologię DCOM). Pamiętajmy jednak, że takie połączenia były co prawda doskonałym rozwiązaniem usprawniającym komunikację (oferując możliwość uzyskiwania odpowiedzi w sposób asynchroniczny), ale jeśli chodzi o konfiguracje połączenia to były bolączką tamtej specyfikacji, a powodów dla których takie połączenie mogło być nie możliwe bywało wiele (np. firewall, NAT lub np. problem związany z uprawnieniami). Jak więc są przysyłane powiadomienia o zdarzeniach czy nowych danych? Otóż klient używa funkcji Publish, wtedy serwer zbiera dane konieczne do wysłania i wysyła je. Następnie klient wykonuje Publish raz jeszcze. Teraz serwer (jeśli nowe dane się nie pojawiły) czeka z odpowiedzią, aż będzie miał gotowe dane. Oczywiście takie oczekiwanie nie może trwać wiecznie, a czas oczekiwania powinien być zależny od wybranego sposobu transmisji, jednak jeśli nowe dane się nie pojawią serwer powinien odpowiedzieć wiadomością KeepAlive. W ten sposób serwer potwierdza, że „żyje” i odpowiada. KeepAlive jest po prostu pustą odpowiedzią na wywołanie Publish. Metoda Publish jest więc pewnego rodzaju tokenem, który jest przesyłany od klienta do serwera i serwer dzięki niemu wie że może przy pomocy tokenu przesłać do klienta jakieś dane. Oczywiście klient musi czekać z kolejnym wywołaniem Publish, dopóki nie otrzyma odpowiedzi na poprzedni Publish. Taka strategia sprawdza się oczywiście w przypadku, gdy sieć (medium) poprzez którą przesyłamy dane jest szybka, a czas przesyłania jest bardzo krótki. Reasumując ta metoda działa więc jak pewnego rodzaju callback (na rysunku nazwane: "Quasi Callback"), chociaż oczywiście to klient wysyła token do serwera, umożliwiając serwerowi przesłanie danych razem z tokenem.

(To tylko jedna z części artykułu zobacz pozostałe: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, autor: Maciej Zbrzezny)

poniedziałek, 9 marca 2009

Subskrypcje (OPC UA) – przykładowe ustawienia i wykorzystanie

Wcześniej przedstawiłem co to są subskrypcje i jakie funkcje można na nich wywoływać. Teraz przeanalizujmy przykład, który pomoże zrozumieć jakie ustawienia są ważne dla tworzonych subskrypcji.

Załóżmy że jesteśmy połączeni do serwera, mamy zestawiony bezpieczny kanał i ustanowioną sesję. Stworzyliśmy subskrypcję i znane są nam (np. poprzez przeglądanie lub zapytania (Browse lub Query)) identyfikatory węzłów, z których danymi jesteśmy zainteresowani. Teraz tworzymy elementy monitorowane.

Następnie ustalamy tryb monitorowania, mamy tutaj do dyspozycji:

  • DISABLED – element, jest monitorowany, ale nie jest próbkowany lub wyznaczany(evaluated), a powiadomienia nie są generowane lub kolejkowane. Raportowanie powiadomień jest wyłączone (Notification reporting is disabled).

  • SAMPLING – element, jest monitorowany jest próbkowany lub wyznaczany, a powiadomienia są generowane i kolejkowane. Raportowanie powiadomień jest wyłączone (Notification reporting is disabled).

  • REPORTING– element, jest monitorowany jest próbkowany lub wyznaczany, a powiadomienia są generowane i kolejkowane. Raportowanie powiadomień jest włączone (Notification reporting is enabled).

Ponadto dla każdego elementu monitorowanego ustawiamy:

  • Częstotliwość próbkowania (Sampling Interval)

  • Filtrowanie (np. Deadband) (filtrowanie ustawiamy, gdy nie jesteśmy zainteresowani każdą zmianą)

  • Długość kolejki (Queue Size) (można wyspecyfikować, ile ostatnich zmian chcemy zachowywać)

  • Ustawienie, czy chcemy pomijać najstarsze dane (Discharge Oldest)

    (To tylko jedna z części artykułu zobacz pozostałe: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, autor: Maciej Zbrzezny)

piątek, 6 marca 2009

Wyszukiwarka

CodeProject: Artykuł na temat tworzenia etykiet tekstowych dla scen 3D

Wczoraj opublikowałem na portalu CodeProject artykuł pod tytułem:

"WPF: Creation of Text Labels for 3D Scene"

Artykuł dotyczy zagadnienia tworzenia napisów dla scen 3D tworzonych w oparciu o WPF. Opisuję w nim dwa podejścia, które można wykorzystać podczas generowania grafiki z takimi napisami. Artykuł jest dostępny na razie w języku angielskim, ale postaram się opublikować tutaj na blogu również jego wersję w języku polskim.

Zapraszam wszystkich do lektury!

WPF: Creation of Text Labels for 3D Scene
http://www.codeproject.com/KB/WPF/WPF_Text3D.aspx

czwartek, 5 marca 2009

dotnetomaniak.pl

Ostatnio zauważyłem, że dużo wejść na mojego bloga pochodzi z serwisu dotnetomaniak.pl. Po sprawdzeniu co to jest, okazuje się, że jest to nowa inicjatywa, której autorzy chcą "zbudować silną społeczność .NET w Polsce". To miejsce, w którym znajdują się linki do artykułów poświęconych technologii .NET. W serwisie tym pojawiły się też dwa moje (pochodzące z tego bloga) artykuły i stąd wejścia na mój blog. Chciałbym w tym miejscu podziękować osobom które dodały linki do moich artykułów i jednocześnie zaprosić moich czytelników do odwiedzenia serwisu dotnetomaniak.pl. Sam już przeglądałem artykuły tam zgromadzone i niektóre prezentują się interesująco.

Posty powiązane / Related posts