.NET w parze z PowerShellem

Jaki jest najszybszy spos贸b, aby sprawdzi膰, jak zbudowana jest dana klasa z BCL? Jakie ma metody, w艂a艣ciwo艣ci? Niekt贸rzy z pewno艣ci膮 poprosz膮 o pomoc wujka Google, kt贸ry z ch臋ci膮 przerzuci zainteresowanych na witryn臋 MSDN Library. Miejsce to oczywi艣cie godne polecenia ka偶demu, bo jak ma艂o kt贸ra dokumentacja jest naprawd臋 szczeg贸艂owa. Ale co w sytuacji, gdy nie mamy dost臋pu do internetu? Najprostszym sposobem by艂oby stworzenie na szybko jakiej艣 aplikacji, wpisanie nazwy klasy i IntelliSense powinien podpowiedzie膰 nam ca艂膮 reszt臋. Sprytnie, ale troch臋 ci臋偶ko. Zaznajomieni ze 艣rodowiskiem Visual Studio wiedz膮, 偶e istnieje co艣 takiego, jak Object Browser dost臋pny z menu Tools. Narz臋dzie ca艂kiem przydatne, a dodatkowo informuje, w jakim zestawie dost臋pna jest dana klasa. Ostatnim sposobem, na kt贸rym chcia艂bym si臋 dzi艣 skoncentrowa膰, jest PowerShell. Jak prze艣wietla膰 klasy i jak ich u偶ywa膰 w skryptach –聽 o tym w dalszej cz臋艣ci. Spokojnie, znajomo艣膰 super pow艂oki nie jest wymagana.

Aby zdoby膰 informacj臋 o danym typie, wystarczy wpisa膰 jego pe艂n膮 nazw臋, tj. razem z namespacesem w nawiasach kwadratowych:

PS C:UsersWojtek [System.IO.DriveType]

IsPublic IsSerial Name      BaseType
-------- -------- ----      --------
True     True     DriveType System.Enum
 

Jak wida膰, nie dostali艣my zbyt wielu cennych informacji . Do dyspozycji na szcz臋艣cie mamy wszystkie metody, jakie udost臋pnia klasa System.Type. Np. GetConstructors(), GetMembers(), GetFileds() itp. W podanych zastosowaniach b臋d臋 u偶ywa艂 komendy Format-Table, kt贸ra powoduje wy艣wietlenie tylko tych w艂a艣ciwo艣ci obiekt贸w, jakie chc臋 zobaczy膰.

PS C:UsersWojtek> [System.IO.DriveType].GetFields() | Format-Table Name

Name
----
value__
Unknown
NoRootDirectory
Removable
Fixed
Network
CDRom
Ram
 

艁atwo i szybko dostali艣my wyliczenia danej enumeracji. Je艣li chcemy zobaczy膰, w jaki spos贸b dzia艂a dana funkcja, mo偶emy stworzy膰 obiekt dowolnej klasy, a nast臋pnie uruchamia膰 jego metody. Zobaczcie to na przyk艂adzie StringBuildera:

PS C:UsersWojtek> $a = New-Object System.Text.StringBuilder
PS C:UsersWojtek> $a.Append("hej")

Capacity MaxCapacity Length
-------- ----------- ------
      16  2147483647      3

PS C:UsersWojtek> $a.Append(" ho")

Capacity MaxCapacity Length
-------- ----------- ------
      16  2147483647      6

PS C:UsersWojtek> $a.ToString()
hej ho
 

Po ka偶dej zmianie obiektu wy艣wietlane s膮 jego w艂a艣ciwo艣ci i jak na d艂oni wida膰, co si臋 zmieni艂o. Bardzo przydatna rzecz podczas poznawania nowych klas.

Mo偶liwo艣ci PowerShella s膮 naprawd臋 ogromne, sam z pewno艣ci膮 nie jestem 艣wiadomy istnienia po艂owy z nich. Niecierpliwych odsy艂am do angielskiego bloga w kt贸rym znajdziecie mn贸stwo przyk艂ad贸w wykorzystania PowerShella na platformie .NET, a ciekawskich zach臋cam do eksperymentowania. Polecam PowerGUI jako podstawowy edytor PSa.

Promuj

Samsung i reklama 3D

Jako pracownik tak wspanialej firmy jak膮 jest Samsung Electronics ;], zapoznany z informacjami niedost臋pnymi dla innych, sam cz臋sto bywam zaskakiwany rodzimymi produktami i reklamami. Przegl膮daj膮c demotywatory (te偶 to robicie, prawda?), natrafi艂em na og艂oszenie, kt贸re widzicie w obrazku tego posta. Nie lubi臋 reklam, ale za namow膮 kolegi z pracy, niech臋tnie, ale wszed艂em.

Wymagania: drukarka, kamera, g艂o艣niki i pewne zdolno艣ci manualne. 艢ci膮gamy i instalujemy aplikacj臋 (~24MB) oraz drukujemy znacznik (tzn. pilot).聽 Uruchamiamy program, wybieramy ustawienia, domy艣lne wystarcz膮, i na ekranie powinni艣my zobaczy膰 siebie. Prawda, 偶e mi艂y obraz? :] Bierzemy w r膮czki nasz znacznik i kierujemy go w stron臋 kamery. Na ekranie zamiast kartki pojawi si臋 pseudotr贸jwymiarowa animacja, a z g艂o艣nik贸w us艂yszymy g艂os przemi艂ej komentatorki. Po wst臋pie proszeni jeste艣my o naci艣ni臋cie przycisku na pilocie, (tj. przykryj palcem ma艂y czarny prostok膮cik). Nasza pani wyjdzie z telewizora :) Poruszaj膮c kart膮 manipulujemy animacj膮, ogl膮daj膮c j膮 z r贸偶nych stron. Efekt jest na prawd臋 imponuj膮cy. Je艣li moja instrukcja jest zbyt og贸lna, obejrzyjcie specjalny film nagrany przez t臋 sam膮 firm臋 reklamow膮.

Pomys艂 艣wietny – w ko艅cu to moja firma :)

Google szepcze Ci do ucha…

My艣leli艣cie, 偶e Google brakuje pomys艂贸w? Sprawd藕cie to. Ju偶 nied艂ugo Pan Android b臋dzie podpowiada艂 nam w czasie zwyk艂ej rozmowy telefonicznej.

Dla tych, kt贸rzy ju偶 obejrzeli…

[Caller]聽 I just… I dunno what happened. I just crashed my car.. I skidded off the road. Hello?
[Dispatcher] Sir? Hello? Sir? Sir? I’m sorry. I can’t understand you.
[GooglePhone] Need a new car? Toyota Tacoma starting at under $16,000.

[Caller] Hello? Can you hear me? My wife is here but she’s not moving.
[Dispatcher] Sir?
[GooglePhone] Take her on the vacation of her dreams. Romantic get-always at DreamResort.com

Bezcenne. Mam nadziej臋, 偶e to 偶art.

[Edit]
Film nagra艂a organizacja satyryczna The Onion.

Konfigurowalne obrazy z HTTP GETa

Temat postu z pewno艣ci膮 nie m贸wi Wam zbyt wiele, dlatego pozwol臋 sobie go wyja艣ni膰. W dzisiejszym wpisie chcia艂bym przedstawi膰 Wam us艂ugi, jakie zewn臋trzne firmy dostarczaj膮 deweloperom aplikacji internetowych poprzez zwracanie obraz贸w z konfigurowalnych adres贸w URL. M贸wi膮c ja艣niej, to, jaki obraz zostanie zwr贸cony, zale偶y od podanych w adresie parametr贸w.

Na samym pocz膮tku przyjrzyjmy si臋 us艂udze mojego „ulubionego” dostawcy, wujka Google’a – Chart Tools. Jak sama nazwa wskazuje, na nasz膮 stron臋 mo偶emy wstawia膰 wszelkiego rodzaju wykresy. Dok艂adna dokumentacja znajduje si臋 tutaj, a teraz kr贸tki przyk艂ad:

http://chart.apis.google.com/chart?cht=p3&chd=s:Uf9a&chs=250x100&chl=January|February|March|April

Dla jasno艣ci pokolorowa艂em odpowiednie sekcje w adresie. 艢mia艂o, skopiujcie go do swojej przegl膮darki i zmie艅cie np. nazw臋 miesi膮ca. Do dyspozycji mamy naprawd臋 szeroki wachlarz wykres贸w, ikon, a nawet mo偶emy wstawia膰 r贸wnania matematyczne i kody QR.

http://chart.apis.google.com/chart?cht=tx&chl=x%20=%20%5Cfrac%7B-b%20%5Cpm%20%5Csqrt%20%7Bb%5E2-4ac%7D%7D%7B2a%7D

Tutaj jednak adres nie jest ju偶 tak oczywisty. Ze wzgl臋du na ograniczenia w znakach adresu URL wymagane jest odpowiednie kodowanie. Google daje nam naturalnie pomocne narz臋dzie. Opr贸cz API do wykres贸w nasz potentat dostarcza r贸wnie偶 podobn膮 funkcjonalno艣膰 dla map – sprawd藕 Google Static Maps.

Drugi dostawca podobnych us艂ug to yuml.me. W tym przypadku mamy mo偶liwo艣膰 generowania diagram贸w UML. Jak wiadomo, diagramy te mog膮 prezentowa膰 ro偶ne rodzaje schemat贸w, zatem daj膮 si臋 zastosowa膰 w naprawd臋 wielu sytuacjach. Popatrzmy na taki przyk艂ad:

http://yuml.me/diagram/scruffy/class/[Customer]-%3E[Billing%20Address]

Na stronie us艂ugodawcy mo偶ecie zobaczy膰 kilkana艣cie innych, bardziej rozbudowanych przyk艂ad贸w. Mo偶liwo艣ci s膮 naprawd臋 spore.

Czy znacie wi臋cej serwis贸w udost臋pniaj膮cych podobne funkcjonalno艣ci? A mo偶e znacie nazw臋 tego rodzaju us艂ug? Ch臋tnie si臋 o nich dowiem.

Promuj

U偶ytkownik wielokomputerowy

Czy korzystacie na co dzie艅 z komputera? Pewnie tak, ale czy tylko z jednego? Raczej nie. W pracy stoi jedna maszyna, w domu kurzy si臋 druga, a je艣li jeste艣cie gad偶etomaniakami, to z pewno艣ci膮 macie jeszcze netbooka i telefon z przegl膮dark膮 internetow膮. A co z maszynami wirtualnymi? Korzystacie z takowych?

W domu mam laptopa i netbooka, w pracy blaszaka i kilka maszyn wirtualnych, a daleko w rodzimym domku znajdzie si臋 jeszcze komputer, z kt贸rego korzystam, je艣li nie zabior臋 ze sob膮 偶adnego sprz臋tu. Gdziekolwiek jestem i kt贸rejkolwiek maszyny u偶ywam, chcia艂bym mie膰 ten sam komfort pracy. Te same pliki i zak艂adki w przegl膮darkach (nie u偶ywam jednej na co dzie艅)聽 oraz poczta – oto wszystko, czego mi potrzeba. Jestem ma艂o wymagaj膮cy, prawda?

Nie lubi臋 narz臋dzi do synchronizacji – nigdy nie spe艂nia艂y moich oczekiwa艅 i cz臋sto mia艂em z nimi problemy. Dlatego wszystkie moje pliki przechowuj臋 na zewn臋trznym 2,5 calowym dysku, kt贸ry bez problemu mie艣ci si臋 w kieszeni, a dost臋pna przestrze艅 (ja mam akurat 320 GB) stanowczo mi wystarcza. Odpinam go z jednej maszyn, dopinam do drugiej i nie odczuwam 偶adnej r贸偶nicy. Czy jest to dobre rozwi膮zanie? Pewnie nie, ale niezwykle wygodne. Owszem, dysk mo偶e mi zastrajkowa膰 i wszystko trafi szlag, owszem, kto艣 mo偶e mi go ukra艣膰 i zn贸w wszystko trafi szlag, ale nigdy nie przywi膮zywa艂em wagi do tego rodzaju zagro偶e艅, pewnie m贸j b艂膮d.

Mam ju偶 pliki, teraz – co z zak艂adkami? Gdybym korzysta艂 z Chrome’a i pozwoli艂 Google na inwigilacj臋, pewnie u偶y艂bym dost臋pnej funkcji synchronizacji zak艂adek, ale tego nie zrobi臋. W sekund臋 w mojej g艂owie pojawi艂 si臋 pomys艂 na biznes, ale po up艂yni臋ciu kolejnych pi臋ciu wiedzia艂em, 偶e ju偶 co艣 takiego istnieje. Synchronizacja zak艂adek na wszystkie popularne przegl膮darki: Internet Explorer, Firefox, Chrome oraz Safari. Szybko, mi艂o i przyjemnie. Polecam Xmarks.com. W najmniej przyjazny spos贸b wspiera przegl膮dark臋 z Microsoftu, instaluje si臋 bowiem jako zewn臋trzna aplikacja, ale w pozosta艂ych przypadkach jako plugin. Konfiguracja jest prosta i intuicyjna, a dodatkowy modu艂 oceniania pozwala sprawdza膰 popularno艣膰 poszczeg贸lnych stron, jakie dodali do ulubionych pozostali u偶ytkownicy programu.

Je艣li chodzi o poczt臋, to chyba nie ma ju偶 os贸b, kt贸re 艣ci膮gaj膮 jeszcze ca艂膮 skrzynk臋 do siebie. Dostawcy stan臋li na wysoko艣ci zadania i do dyspozycji mamy kilka gigabajt贸w na skrzynk臋 online. Pierwsze takie konta w Polsce oferowa艂 serwis o2, za granic膮 triumfy 艣wi臋ci gmail oraz hotmail.

Je艣li znacie inne, dobre sposoby na prac臋 z kilkoma komputerami, napiszcie, jestem bardzo ciekawy ;]

Testowanie metod asynchronicznych w Javie

Je艣li w swoim 偶yciu napisali艣cie ju偶 setki klas i tysi膮ce metod, a nie stworzyli艣cie jeszcze 偶adnego testu, to marni z Was developerzy. Testy jednostkowe s膮 naprawd臋 po偶ytecznym narz臋dziem, bo cho膰 wyd艂u偶aj膮 proces produkcji, jednocze艣nie powoduj膮, 偶e warto艣膰 ko艅cowego produktu jest wielokrotnie wi臋ksza, a Wy jeste艣cie pewni, 偶e Wasz produkt dzia艂a. Pisanie test贸w metod pobieraj膮cych argumenty i zwracaj膮cych wyniki, kt贸re mo偶na na podstawie tych argument贸w zweryfikowa膰, to kaszka z mleczkiem. Znacznie trudniej testowa膰 metody, kt贸re uruchamiaj膮 zadania w tle, a wyniki zwracaj膮 przez tzw. callbacki. Poka偶e Wam, jak upora艂em si臋 z tym problemem.

Z pewno艣ci膮 zetkn臋li艣cie si臋 kiedy艣 z modu艂em, kt贸ry wystawia艂 dwa publiczne interfejsy. Jeden z nich s艂u偶y艂 do zarz膮dzania komponentem, natomiast drugi implementowali艣cie w celu uzyskania informacji zwrotnych z tego modu艂u. Takie API mo偶na znale藕膰 w聽 kodzie C++ znacznie cz臋艣ciej, ani偶eli w Javie czy C#. Metoda interfejsu zarz膮dzaj膮cego cz臋sto nic nie zwraca, a je偶eli ju偶, to jedynie kod informacyjny np. 'operacja zaplanowana do wykonania’, albo 'nie mo偶na wykona膰’. Po pewnym czasie przychodzi odpowied藕 w formie wywo艂ania metody z interfejsu notyfikacji, kt贸ry uprzednio zaimplementowali艣my i przekazali艣my do modu艂u. Test takiej metody powinien sprawdza膰 zwracany kod, czeka膰 (ale nie niesko艅czenie d艂ugo) na przyj艣cie odpowiedzi oraz zweryfikowa膰 przys艂ane w notyfikacji dane.聽 Przyk艂adowy projekt takich interfejs贸w mo偶ecie znale藕膰 w moim repozytorium w pakiecie pl.fones.blog.asynctest.

Klasa Engine to interfejs zarz膮dzaj膮cy, EngineNotifcations to, rzecz jasna, interfejs powiadomie艅, EngineTest to testy naszego komponentu, dziedzicz膮 po AsyncBaseTestCase, a te z kolei po JUnitowych test case’ach. B臋dziemy testowa膰 metod臋 start(), kt贸ra zwraca sw贸j wynik w notyfikacji engineStarted().

Ca艂a logika testowania asynchronicznych metod zawarta jest w klasie AsyncBaseTestCase. Metody notifyCallback() oraz waitForCallback() powinny by膰 wo艂ane w naszym te艣cie, jedna w zaimplementowanym na rzecz testu interfejsie notyfikacji, a druga – w samej metodzie testuj膮cej. Ich dzia艂anie opiera si臋 na obiekcie CountDownLunch.聽 Metoda waitForCallback() czeka, a偶 warto艣膰 licznika tego obiektu b臋dzie r贸wna zero, a metoda notifyCallback() zmniejsza jego warto艣膰 domy艣lnie ustawion膮 na 1. Dodatkowe struktury s艂u偶膮 do przekazania parametr贸w notyfikacji i informacji, czy dany callback w og贸le nast膮pi艂. W ten spos贸b mo偶emy ustawi膰, jaki maksymalny czas dajemy komponentowi na odpowied藕. Poprzez tablic臋 flag sprawdzamy, czy dana notyfikacja nast膮pi艂a, a przez kolekcj臋 rezultat贸w dowiadujemy si臋 o przekazanych parametrach. Wszystko w bezpieczny, wielow膮tkowy spos贸b, z wykorzystaniem dost臋pnych metod synchronizacji.

Je艣li znacie inny spos贸b, kt贸ry usprawni艂by moje rozwi膮zanie, ch臋tnie go poznam.

Prezentacja o Programowaniu R贸wnoleg艂ym

We wrze艣niu 2008 roku w naszym dotnetowym kole dzia艂aj膮cym przy Wydziale Elektroniki i Technik Informacyjnych Politechniki Warszawskiej ustalali艣my szczeg贸艂y organizacji wydarzenia IT Academic Day na naszej uczelni. Rafa艂 Maci膮g, przewodnicz膮cy ko艂a, zaproponowa艂, aby kto艣 z nas przygotowa艂 co艣 na t臋 okazj臋. Opr贸cz prezentacji takich firm jak ABC Data, Kasperksy, K2, mia艂a mie膰 miejsce jeszcze jedna, studencka. 聽Nie zg艂osi艂 si臋 偶aden ch臋tny, a i mi trudno by艂o wyobrazi膰 siebie w takiej roli. Jedynym argumentem by艂 fakt, 偶e聽interesowa艂em聽si臋 wtedy jeszcze do艣膰 egzotycznym聽zagadnieniem, jakim jest Programowanie R贸wnoleg艂e. Temat pasowa艂 idealnie. Decyzja zapad艂a.

Do dyspozycji mia艂em聽bardzo wczesn膮 wersj臋 biblioteki Parallel Extensions (Lipiec 2008), tworzonej jeszcze w ramach Microsoft Research. Przygotowa艂em prezentacje, dema, pytania (by艂y nagrody), no i oczywi艣cie przemow臋. Tydzie艅 przed wydarzeniem Microsoft wypu艣ci艂 CTP (Community Technology Preview) 艣rodowiska Visual Studio 2010. Upieczemy dwie pieczenie na jednym ogniu, pomy艣la艂em. Pierwsza publiczna demonstracja Visual Studio 2010 w Polsce przypad艂a w艂a艣nie mnie (nie聽s艂ysza艂em, 偶eby kto艣 pokaza艂 to 艣rodowisko wcze艣niej, w ko艅cu ja zrobi艂em to kilka dni po premierze, wybaczcie mi skromno艣膰). Na聽wydzia艂owym, 4 rdzeniowym serwerze, zamontowali艣my聽wsp贸lnie聽z Rafa艂em obraz,聽wykorzystuj膮c聽technologi臋 Hyper-V, i wypu艣cili艣my zdalny pulpit na 艣wiat. Wszystko dopi臋li艣my na ostatni guzik.聽W dniu konferencji t艂um贸w nie by艂o, co nie zmniejszy艂o jednak stresu. Moja prezentacja by艂a przedostatnia, za to poprzednie聽wystarczaj膮co聽wysoko podnios艂y poprzeczk臋. 3.. 2… 1… Start!

Jeden slajd, drugi… ani si臋 obejrza艂em, a zacz臋艂o brakowa膰 mi czasu,聽mia艂em聽tylko godzin臋. Ostatecznie nie pokaza艂em wszystkich dem, za to wszystkie dost臋pne nagrody (ksi膮偶ki i office’y) rozda艂em w mig! Kurcze, naprawd臋 mnie s艂uchali i znali odpowiedzi na podchwytliwe pytania, a聽my艣la艂em, 偶e zostanie co艣 dla mnie… 呕artuj臋! Dzisiaj, ponad 1,5 roku po tym wydarzeniu, 偶a艂uj臋, 偶e nie zag艂臋bi艂em si臋 w temat programowania r贸wnoleg艂ego jeszcze bardziej. W tym momencie wiem niewiele wi臋cej, a temat poszerzy艂 si臋 n-krotnie. Moja praca in偶ynierska by艂a, rzecz jasna, wa偶niejsza. Ale uwaga… moja praca magisterska b臋dzie si臋 bardzo wi膮za膰 z tym zagadnieniem, a dok艂adnie, z weryfikacj膮 aplikacji r贸wnoleg艂ych.

Z wydarzenia, opr贸cz do艣wiadczenia w prezentacjach, zosta艂 mi jeszcze power point, artyku艂 na codeguru (pierwsza cz臋艣膰) oraz 藕r贸d艂a przedstawianych aplikacji. Je艣li kto艣 nie mia艂 przyjemno艣ci pracowa膰 z bibliotek膮 ParallelFX, my艣l臋, 偶e b臋dzie to dobra lektura. Dodatkowo w prezentacji zawar艂em animacje przedstawiaj膮ce prace menad偶era zada艅 TPL (Task Parallel Library). Polecam!

Za艂膮czniki:

[download id=1 format=2]
[download id=2 format=2]

Promuj