dpsidebar - programowanie w windows cz.1
inspiracja1. «natchnienie, zapał twórczy» 2. «wpływ wywierany na kogoś, sugestia»
Nie będę się migał. Zainspirował mnie webnull do napisania tego kilkuczęściowego (mam nadzieję) bloga. Dokładniej wpisem o dpnotify. Pomysł prosty i, co tu dużo ukrywać, ciekawy. Postanowiłem, że zrobię podobny ficzer dla windows. Dlaczego więc kilkuczęściowy? Ponieważ sama aplikacja (choć to duże słowo) jest łatwa do napisania i nie ma się czym za bardzo interesować. Ot, 5 funkcji i działa. Ale przy okazji przedstawię "cykl życia" aplikacji rozwijanej na poważnie.
Wymagania biznesowe
Od tego tak naprawdę się zaczyna... Co będzie robić nasza aplikacja?
- Wyświetlać skrót najnowszego komentarza pod wskazanym artykułem (blog, news)
- Możliwość dynamicznego definiowania nowego newsa/bloga do monitorowania
- Możliwość dynamicznego usuwania monitorowanego artykułu
- Możliwość łatwego definiowania czasu odświeżania
- Informowanie o nowym komentarzu
- Wyświetlanie pełnej treści komentarza
- Możliwość włączenia/wyłączenia awatarów
Zasoby technologiczne
Aplikacja dpsidebar, jak pewnie można się domyślać, będzie działać jako gadget windows. Funkcjonalność tę poznaliśmy wraz z windows vista, działa aktualnie na systemach windows vista, 7 oraz windows server 2008. Jaki język wykorzystują gadgety? To zwykłe strony www, napisane w html+javascript+css. Jako rozwiązania od MS wspierają także komponenty ActiveX. Nam wystarczy tylko html+js+css oraz użyjemy istniejących komponentów ActiveX, nie będziemy ich tworzyć. Na dodatek na poziome pół śmiesznym.
Podczas tworzenia aplikacji na profesjonalnie weryfikacja zasobów technologicznych jest drugim krokiem po zebraniu wymagań funkcjonalnych. Na tym etapie decyduje się, czy posiadane zasoby są wystarczające, czy nie ma potrzeby outsource`ować tych zasobów, a nawet przenieść tworzenie aplikacji na inny podmiot.
W naszym przypadku wszystkie funkcjonalności jesteśmy w stanie zrealizować właśnie na przy użyciu gadgetów.
UX
Odrobina kreacji... Choć nie... najpierw jeszcze trochę o samych gadgetach. Jak już wspomniałem - gadget to lekki html, który dzięki JS może stać się naprawdę rozbudowaną i satysfakcjonującą aplikacją. W ciele gadgeta możemy wyselekcjonować trzy instancję:
- Body - czyli dokładnie to co widać po uruchomieniu gadgeta. "Główne okno".
- Settings - czyli dodatkowe okienko, które pojawia się po wybraniu "Opcje" (ikonka klucza). Okienko to wymaga osobnego pliku HTML i jest deklarowane w głównym oknie (obiekt System.Gadget)
- flyout - czyli dodatkowe okienko "dolepiane" do głównego okna. Również deklarowane, można je dynamicznie chować i pokazywać z poziomu Body oraz samego flyout.
Teraz kreacja. Jak będzie działać nasz gadget? Na stronie body będą pojawiały się nowe komentarze. Na tej samej stronie będzie możliwość dodania kolejnego artykułu do monitorowania. Będzie to szybkie i wygodne. Na flyoucie będzie można przeczytać cały komentarz, w settings zmienić czas odświeżania, wyłączyć/włączyć awatary oraz usuwać monitorowane artykuły oraz zdecydować, czy gadget ma zmienić kolor tła, gdy wykryje nowy komentarz.
Wymagania technologiczne
Wymagania technologiczne są krokiem pośrednim między kodowaniem aplikacji a wymaganiami biznesowymi. Często krok ten jest pomijany, co nie jest błędem, zwłaszcza przy okazji rozwijanych stale aplikacjach. Jednak tym razem pokuszę się o taką analizę.
- Wyświetlanie komentarzy - jakoś musimy je pobrać. Do tego posłużymy się kontrolką ActiveX Msxml2.XMLHTTP. Oczywiście jeśli będzie dostępna, jeśli nie posłużymy się już nieco starą wersją Microsoft.XMLHTTP. Kontrolka ta pozwala na wysłanie requesta HTTP na wskazany adres i zwraca (między innymi) response. Dostaniemy więc stronę WWW dobrychprogramów, która następnie przeanalizujemy wyrażeniem regularnym w poszukiwaniu newsów. TIP: strona blogów i artykułów może się różnić, więc przy dodawaniu kolejnego artykułu trzeba weryfikować czy to blog czy art. Być może konieczny będzie inny pattern.
- Możliwość dynamicznego definiowania nowego newsa/bloga do monitorowania - Najlepiej do bazy by to wrzucać, lecz szkoda mi nieco podłączać obsługę sqlite do JS. Zamiast tego posłużymy się zapisem do pliku tekstowego, który przechowywać będzie obiekt konfiguracji. Dodawaniem do obiektu konfiguracji powinien zajmować się konkretny obiekt tak, by nie następowało nadpisanie a tylko dodanie. Dodawanie odbywać się będzie z poziomu body, konieczne jest więc dodanie inputa.
- Możliwość dynamicznego usuwania monitorowanego artykułu - analogicznie jak wyżej, ale usuwanie odbywa się w flyout. Konieczne wyświetlenie listy z checkboxami do usunięcia wielu na raz
- Możliwość łatwego definiowania czasu odświeżania - opcja w settingsach, należy skorzystać z metody System.Gadget.Settings.write
- Informowanie o nowym komentarzu - przez zmianę koloru tła. Należy skorzystać z metod JS. Możliwość wyłączenia w settings.
- Wyświetlanie pełnej treści komentarza - obiekt komentarza powinien posiadać także pełną treść komentarza by można go było wyświetlić dodatkowo w flyout.
- Możliwość włączenia/wyłączenia awatarów - opcja w settingsach, należy skorzystać z metody System.Gadget.Settings.write
No cóż... wypadało by zejść jeszcze niżej. Zaznaczyć, że główna metoda pobiera komentarze i obiekt, który zwraca powinien być weryfikowany. Jednak te wszystkie niejasności przydadzą mi się w dalszych częściach bloga, więc na razie zostanie jak jest.
Struktura gadgetów
Gadget, jak wspominałem kilka razy do HTML. Dodatkowo w folderze głównym aplikacji znajdować się powinien plik manifestu gadgeta. Jego struktura jest bardzo prosta, o szczegółach napisze w kolejnej części. Dodam tylko ważną rzecz - nie potrzebujesz niczego poza notatnikiem (wbudowanym w system windows) aby uruchomić swój gadget oraz niczego poza zipem, by utworzyć paczkę instalacyjną. Paczka instalacyjna bowiem to tylko spakowany folder z gadgetem z rozszerzeniem zmienionym na .gadget. Tyle. Gadgety są lokalne dla maszyny (instalacja tylko z uprawnieniami administratora) oraz lokalne dla usera (bez uprawnień), po wystartowaniu uruchamiają się z uprawnieniami użytkownika, w kontekście którego działają. To będzie mieć znaczenie przy zapisywaniu do pliku.
Zakończenie
Tyle w tej części. W przyszłej zaczniemy coś już tworzyć, jakiś prosty hello world plus stworzenie pierwszego obiektu komentarza. Jeśli jesteście zainteresowani ciągiem dalszym bardzo proszę o info w komentarzu. Może jakieś dodatkowe oczekiwania wobec gadgetu? Cokolwiek?