Blog Faculty Flash

Kolejna witryna sieci „WordPress.com”

Category Archives: devBlog

Windows 7 dla programisty

Witam serdecznie na moim pierwszym wpisie na blogu devBlog biuletynu Faculty Flash. Zaczynam od najważniejszego, moim zdaniem systemu wydanego w tym roku Windows 7.

Windows 7 RTM jest już dostępny w subskrypcji MSDN AA oraz ELMS, dlatego warto przedstawić nowe możliwości, jakie system ten oferuje programistom. Niniejszym wpisem chciałbym zapoczątkować cykl publikacji mających na celu przybliżenie tego systemu. Rozpoczynam od prezentacji najważniejszych miejsc, zasobów oraz aplikacji. W kolejnych odcinkach chciałbym zaprezentować możliwości oprogramowania paska zadań, bibliotek, wyszukiwania w wielu źródłach oraz usług działające w tle.

Na początek przygotowałem listę najważniejszych miejsc z jakimi warto się zapoznać (większość informacji dostępna w języku angielskim):

  1. Develop for Windows 7 and Windows Vista

    Tu znajdziecie wszystko dla programisty o co chcielibyście się zapytać a się boicie . To jest miejsce startowe, gdzie znajduje się najwięcej informacji dotyczących tworzenia aplikacji na system Windows 7. Począwszy od informacji jak zacząć „Start Developing for Windows 7”, poprzez najważniejsze wiadomości dotyczące systemu, najnowsze webcasty na stronach witryny Channel 9, linki do pobrania najważniejszych aplikacji aż po blogi członków zespołu pracującego nad rozwojem systemu Windows oraz MVP i inne zasoby.

  2. Windows 7 Developer Guide

    Przewodnik dla programisty po Windows 7. Tu znajdziecie wszystkie najważniejsze nowości i możliwości nowego systemu dla programistów. Jest dostępny również w wersji DOCX i XPS.

  3. Windows 7 and Windows Server 2008 R2 Application Quality Cookbook

    Tu znajdziecie informacje dla programistów odnośnie kompatybilności aplikacji z nowym systemem. Witryna zawiera opis kilku znanych problemów występujących z kompatybilnością w Windows 7 i Windows Server 2008 R2. Na stronie znajdziecie również informacje o różnicach w wydajności, stabilności i użyteczności, jak również odnośniki do innych dokumentów dla programistów.

  4. About the Windows 7 Logo Program

    Miejsce, gdzie znajdziecie informacje dotyczące programu umożliwiającego otrzymanie logo „Compatible with Windows 7” dla aplikacji. Opisano tu przede wszystkim wymagania, jakie musi spełniać oprogramowanie. Znajdziecie tu również konsolową aplikację Logo Test Tool, umożliwiającą sprawdzenie zgodności naszej aplikacji z tymi wymaganiami.

  5. Application Compatibility

    Miejsce w którym znajdziecie informacje dotyczące kompatybilności aplikacji. W szczególności Compatibility Toolkit (ACT) 5.5 zawierający niezbędne narzędzia i dokumentacje do sprawdzenia i migracji aplikacji do nowego systemu. Informacje w języku polskim możecie znaleźć na stronie Windows 7 – kompatybilność.

  6. Grupa Windows 7 Developers na serwerze facebook

    Znajdziecie tutaj najnowsze informacje dla programistów Windows 7. Poznacie osoby, które tworzą oprogramowanie dla tego systemu na całym świecie.

Warto również śledzić blogi związane z Windows 7:

  1. Windows 7 for Developers

    Na tym blogu znajdziemy najważniejsze informacje dla programistów Windows 7. Szczególnie polecam cykle dotyczące poszczególnych elementów nowego systemu, np. paska zadań.

  2. Engineering Windows 7

    To jest blog dla osób, które chciałyby wiedzieć, jak powstawał i jak zbudowany jest nowy system. Znajdziemy tu m.in. informacje dotyczące przesyłania strumieniowego mediów czy opis zwiększania wydajności grafiki.

Zderzając się z ogromną ilością informacji na ww. stronach przypomina mi się, jak mój sensei w karate Kyokushin podczas turnieju krzyczał „nie blokuj głową”. Na szczęście istnieje szybka ścieżka do poznania najważniejszych nowości systemu w boju. Najlepiej zrobić to bezboleśnie, w tym celu proponuję pobrać Windows 7 Training Kit For Developers. Archiwum zawiera prezentacje i HOL (ang. hands-on labs), umożliwiające szybki start dla programistów w nowym systemie. Laboratoria są przygotowane w języku Visual C# lub Visual C++ w zależności od zagadnienia.

W tym archiwum znajdziecie informacje dotyczące następujących zagadnień:

  • Pasek zadań (Taskbar)
  • Biblioteki (Shell Libraries)
  • Multi Touch
  • Platforma sensorów i lokalizacji (Sensor and Location)
  • Wstążka (Windows 7 Ribbon)
  • Usługi działające w tle (Background Services)
  • Śledzenie zdarzeń (Instrumentation and Performance)

Niestety archiwum nie zwiera aplikacji demonstracyjnych. Aplikacje znajdziecie w Windows API Code Pack for Microsoft .NET Framework. W archiwum w katalogu Samples, umieszczono aplikacje demonstracyjne prezentujące nowości systemu przygotowane w języku Visual C# i Visual Basic (Rys. 1).

Rys. 1. Aplikacja z Windows API Code Pack zawierająca demonstracje nowych możliwości systemu.

Warto również pobrać i zainstalować aplikację Windows XP to Windows 7 (XP2Win7): PhotoView (Rys. 2). Jest to aplikacja referencyjna, prezentująca możliwości systemu Windows 7. Została napisana w WPF i można ją uruchomić na systemie Windows XP, ale dopiero na Windows 7 uaktywniane są dodatkowe technologie, takie jak pasek zadań, platforma sensorów i lokalizacji oraz multitouch. Po instalacji dostępny jest również kod źródłowy aplikacji.

Rys. 2. Okno główne aplikacji PhotoView.

Ostatnim miejscem, które warto zobaczyć, jest wpis na blogu „Windows 7 for Developers and Architects”. Jeff Barnes udostępnił w usłudze Sky Drive prezentacje i aplikacje prezentujące możliwości systemu Windows 7.

Na koniec chciałbym przedstawić jeszcze dwie aplikacje dostępne w systemie po instalacji.

Pierwsza z nich to… kalkulator. Pytacie pewnie, co takiego oprócz przeliczania bin-hex-dec może nam zaoferować stary dobry kalkulator. Otóż, co jest niejako zaskoczeniem, Microsoft rozbudował możliwości tej aplikacji (wydaje mi się, że to pierwszy raz od wersji 3.1). Teraz, oprócz dwóch znanych trybów: standardowego i naukowego, mamy do dyspozycji tryb programisty oraz statystyczny (Rys. 3). Dodatkowo mamy możliwość konwersji jednostek i przeliczania dat, w programie udostępniono również arkusze umożliwiające przeliczanie wysokości pożyczki czy zużycia paliwa.

Rys. 3. Dostępne tryby pracy kalkulatora.

W trybie programisty (Rys. 4) mamy możliwość szybkiego przeliczania bin-hex-dec, wykonywania operacji logicznych i ograniczania obliczeń do określonego typu danych (byte, word, …).

Rys. 4. Kalkulator w trybie programisty.

Na koniec aplikacja, która dla mnie osobiście jest hitem hitów.

Czy zdarzyło się Tobie usłyszeć od klienta: Twój program nie działa? Klient przez telefon tłumaczy nam 30 min jak doszedł do tego błędu. Testujemy i… NIC. U nas działa. Magia – prawo Murphy’ego czy klient coś wymyśla? Jak to sprawdzić? Fakt, istnieją komercyjne aplikacje, które umożliwiają nagrywanie tego, co dzieje się na ekranie, ale niestety nie każdy klient będzie chciał je kupić. Od dziś nie ma problemu. Niewielki program Problem Steps Recorder umożliwia zapisywanie działań, jak również komentarzy użytkownika. O tym programie należy myśleć jak o przycisku PrintScreen w kluczowym momencie 😉 czy też małpce, która zapisuje działania użytkownika i umożliwia mu również dodawanie uwag. Na końcu otrzymujemy raport – spakowany plik MHTML, który klient może do nas wysłać. My potrzebujemy tylko przeglądarki, aby sprawdzić problem.

Raport jest plikiem XML dokumentującym każdy krok użytkownika zawierającym opis akcji oraz zrzut ekranu, gdzie zaznaczone są elementy, na które użytkownik np. kliknął. Raport można oglądać krok po kroku („Review the recorded problem steps”) lub jako slide-show („Review the recorded problem steps as a slide show”) lub nawet sprawdzić szczegóły poszczególnych kroków („Review the additional details”), tj. wersję aplikacji lub koordynaty myszki.

Obsługa programu jest intuicyjna. Użytkownik w menu start lub oknie uruchom (Win+R) wpisuje psr, a następnie klika OK i uruchamia program. Okno programu jest proste i zawiera tylko jeden przycisk Start Record (Rys. 5). 

Rys. 5. Okno programu Problem Steps Recorder.

Po wciśnięciu przycisku Start Record program rozpoczyna zapisywanie działań użytkownika oraz uaktywnia przycisk Stop Record oraz Add Comment. Użytkownik w każdym momencie może za pomocą przycisku Add Comment dodać swój komentarz.

Piotr Bubacz

To BING or not to BING

W tym roku Microsoft udostępnił narzędzie do podejmowania decyzji – Bing. Warto sprawdzić, jakie usługi oferuje on dla programistów. W tym wpisie zaprezentuję podstawowe możliwości usługi Bing związane z wyszukiwaniem oraz tłumaczeniem. Pokażę, jak przygotować w Visual C# 2008 Express Edition aplikacje okienkowe, w których wykorzystane zostaną omawiane usługi.

Wstęp

Usługa Bing jest usługą sieciową i operuje na zasadzie pytanie ->odpowiedź. Umożliwia ona nie tylko wyszukiwanie w różnych zasobach sieci Internet, ale również udostępnia tłumaczenia oraz usługi mapy elektronicznej Bing Maps.

Dla osób, które korzystały już z usług Windows Live Search warto wspomnieć, że Bing API v2 rozszerza dostępne protokoły i typy źródła danych. Dodatkowo możliwy jest dostęp potencjalnie bez żadnych limitów (Bing API Terms of Use). Więcej szczegółów można znaleźć na stronie What’s New in Version 2.

Aby móc wykorzystać usługę Bing, musimy poznać trzy elementy – AppID, interfejsy komunikacyjne oraz treści komunikatu zapytania i odpowiedzi.

AppID

Aby uzyskać dostęp do usługi Bing musimy do każdego komunikatu dodać identyfikator użytkownika – AppID. Aby go utworzyć, należy na stronie Bing Developer Center wybrać Create an AppId. Po zalogowaniu się przy pomocy Windows Live ID zostaniemy przekierowani do formularza umożliwiającego utworzenie unikalnego identyfikatora (Rys. 1). Po wprowadzeniu wymaganych informacji: nazwy aplikacji (application name), opisu (description), nazwy firmy (company name), kraju (country/region) oraz adresu e-mail (email address) oraz zaakceptowaniu warunków użycia zostanie utworzony nowy identyfikator aplikacji. W każdej chwili na stronie Bing Developer Center możemy sprawdzić jego wartość, zablokować go lub całkowicie usunąć.

Rys. 1. Formularz umożliwiający utworzenie AppID.

Interfejsy komunikacyjne

Kolejnym elementem, który poznamy są interfejsy komunikacyjne. W wersji Bing API 2.0 mamy do wyboru trzy interfejsy: JSON, XML i SOAP. Poniżej krótka charakterystyka:

  • JSON – jest to interfejs najczęściej wykorzystywany w aplikacjach JavaScript. Bing może przesłać odpowiedź w trzech różnych formatach: Raw, Callback i Function. Więcej informacji można znaleźć na stronie Using JSON (Bing, Version 2.0).
  • XML – jest to interfejs, którego komunikaty są zapisywane w języku XML. Jedynym ograniczeniem implementacji jest wsparcie tylko metody GET (protokołu HTTP) – maksymalna długość zapytania jest ograniczona maksymalną dopuszczalną długością adresu URL. Więcej informacji można znaleźć na stronie Using XML (Bing, Version 2.0).
  • SOAP – jest to najbardziej zaawansowany interfejs udostępniający m.in. silne typowanie oraz model obiektowy zapytania i odpowiedzi. Nie ma ograniczenia związanego z maksymalną długością adresu URL. Więcej informacji można znaleźć na stronie Using SOAP (Bing, Version 2.0).

Treść komunikatu zapytania

Po utworzeniu AppID i zapoznaniu się z dostępnymi interfejsami komunikacyjnymi możemy zabrać się za generowanie zapytań do serwera. Każde zapytanie wymaga trzech parametrów:

  • AppId – unikalny identyfikatora aplikacji przypisany do każdego użytkownika indywidualnie.
  • SearchRequest.Query – w tym parametrze umieszczamy treść zapytania, które ma zostać wykonane. Zapytanie może być proste, np. Academic, lecz możemy również dodać słowa kluczowe, które zawężą poszukiwane treści. W tabeli 1 znajduje się lista wybranych słów kluczowych. Pozostałe można znaleźć na stronie Słowa kluczowe wyszukiwania zaawansowanego.

    Tabela 1: Wybrane słowa kluczowe zapytania

    Słowo kluczowe Definicja Przykład

    contains:

    Zawęża wyniki do witryn zawierających łącza do określonych typów plików.

    Aby na przykład poszukać witryn sieci web, w których znajdują się łącza do plików Microsoft Windows Media Audio (.wma), wpisz wyrażenie :
    muzyka contains:wma

    filetype:

    Zwraca wyłącznie strony sieci web o określonym typie pliku.

    Aby odnaleźć pliki Microsoft Word zawierające informacje o programach akademickich:
    programy akademickie filetype:doc

    site:

    Zwraca strony sieci web, które należą do określonej witryny. Aby zawęzić wyszukiwanie do dwóch lub kilku domen, użyj operatora logicznego OR, aby pogrupować domeny. Operatora site: można używać w celu znalezienia witryn sieci web, domen najwyższego poziomu oraz katalogów o maksymalnie dwupoziomowej strukturze. Można także wyszukiwać strony sieci web zawierające określony szukany wyraz w danej witrynie.

    Aby odnaleźć strony o programach akademickich na stronie microsoft.com i socrates.org.pl:
    programy akademickie (site:www.microsoft.com OR site:www.socrates.org.pl)

    feed:

    Znajduje dane RSS lub Atom dla szukanych terminów w określonej witrynie sieci web. 

    Aby znaleźć źródła RSS lub Atom zawierające informacje o programach akademickich:
    feed:programy akademickie

  • SearchRequest.Sources – parametr lub lista parametrów określających typ poszukiwanej informacji. W momencie zadania zapytania mamy możliwość sprecyzowania, gdzie mają być poszukiwane interesujące nas informacje. W tabeli 2 znajduje się lista typów źródła.

    Tabela 2. Typy źródła poszukiwanej informacji

    Typ źródła Opis Przykładowy parametr zapytania

    Web

    Przeszukuje zawartość stron Web

    Academic

    Image

    Poszukuje obrazków na stronach

    Academic

    RelatedSearch

    Zwraca zapytania najbardziej podobne do zadanego

    {Academic ; academic work}

    News

    Przeszukuje wiadomości

    Academic

    InstantAnswer

    Przeszukuje encyklopedię Encarta

    What is academic
    x*2=3
    2 + 1

    Spell

    Przeszukuje encyklopedię Encarta w celu określenia pisowni

    Academik

    Phonebook

    Przeszukuje wpisy w książce adresowej

    Academic in Washington

    Ad

    Umożliwia pobranie sponsorowanych linków i dodanie ich do wyników wyszukiwania. Usługa dostępna testowo na terenie USA. Więcej szczegółów dostępne jest na stronie Monetize your search application.

    Academic

Niestety usługa Bing nie jest jeszcze w pełni dostępna w Polsce i na dzień dzisiejszy możliwe jest wyszukiwanie w naszym kraju za pomocą pierwszych dwóch źródeł. Jeśli chcemy wyszukać za pomocą pozostałych typów źródeł, to do zapytania należy dodać parametr opcjonalny Market i przypisać mu wartość en-US.

Dostęp za pomocą metody GET protokołu HTTP

Możemy teraz wykonać pierwsze zapytania do serwera. Zaczniemy od zapytań za pomocą metody GET protokołu HTTP. Mamy do dyspozycji dwa interfejsy: JSON, dostępny pod adresem http://api.search.live.net/json.aspx, oraz XML, dostępny pod adresem http://api.search.live.net/xml.aspx. Do obu należy przekazać trzy parametry: appid, query i sources. Zapytania dla interfejsu XML mogą wyglądać następująco (w miejsce symbolu <TwójAppID> należy wpisać własny AppID):

Jeśli poszukujemy na stronach sieci Web plików PDF, to do parametru query dodajemy filetype:pdf:

W przypadku przeszukiwania typów dotychczas niedostępnych dla polskiej wersji wyszukiwania należy dodać parametr market:

Możliwe jest również łączenie źródeł za pomocą znaku „+”:

W odpowiedzi na zapytanie z serwera otrzymamy dokument XML, którego zawartość zależy od typu źródła i zapytania. Na Rys. 2 został przedstawiony fragment pliku zwrócony przez serwer dla ostatniego zapytania (Web+image).

Rys. 2. Fragment pliku odpowiedzi interfejsu XML dla zapytania (Web+image).

Pierwsza część odpowiedzi zawiera informacje o zapytaniu, druga – o wynikach wyszukiwania w sieci Web, a trzecia – o wynikach wyszukiwania obrazków. Część druga i trzecia zawiera na początku informacje o przybliżonej liczbie wszystkich znalezionych elementów (Total) oraz o liczbie początkowej (Offset).

Typy źródła mają różną domyślną liczbę wyświetlanych rekordów. W przypadku przeszukiwania sieci oraz obrazków liczba ta wynosi 10. Liczba ta może zostać zmieniona za pomocą parametru opcjonalnego count dla przeszukiwania sieci Web: Web.count lub image.count w przypadku poszukiwania obrazków . Możemy również przeglądać kolejne wyniki od określonego za pomocą parametru offset: Web.offset i image.offset. Jeśli chcemy pobierać po dwadzieścia wyników, to zapytanie o drugą dwudziestkę wygląda następująco:

Wynik zapytania przedstawia Rys. 3.

Rys. 3. Fragment pliku odpowiedzi interfejsu XML dla drugiej dwudziestki wyników wyszukiwania.

Dostęp za pomocą RSS

Warto również wspomnieć, że oprócz interfejsu XML, JSON i SOAP istnieje możliwość otrzymania informacji za pomocą mechanizmu źródeł sieciowych – „kanałów” RSS (ang. Really Simple Syndication). Dane udostępniane są pod adresem http://api.search.live.com/rss.aspx. Zaletą tej metody dostępu jest brak konieczności podawania AppId. Dla przykładu:

W wyniku otrzymamy źródło sieciowe RSS (Rys. 4).

Rys. 4. Wynik działania zapytania jako źródeł sieciowe RSS. 

  Należy zwrócić uwagę, że możemy odpytywać tylko jeden typ źródła w zapytaniu, zaś parametr nazywa się „source”, a nie „sources”, jak w innych przypadkach.

 

Źródło można dodać do dowolnego czytnika RSS (Rys. 5). Użytkownik zostanie powiadomiony, jeśli wyniki wyszukiwania ulegną zmianie.

Rys. 5. Widok zasubskrybowanego źródła sieciowego RSS.

Wyszukiwanie przy pomocy usługi Bing w aplikacjach Windows Forms

Nic nie stoi na przeszkodzie, by wykorzystać usługi Bing w aplikacji okienkowej. Aplikację możemy wykonać w dowolnym języku programowania – my użyjemy języka C# i darmowego środowiska programistycznego Visual C# 2008 Express Edition. Zanim przystąpimy do pisania aplikacji musimy posiadać unikalny identyfikator AppID. Opis jak go otrzymać znajduje się na początku tego wpisu..

Uruchamiamy Visual C# 2008 Express Edition i z menu File wybieramy New Project, a następnie Windows Forms Application i nadajemy nazwę BingTest. Wciskamy OK. W oknie Solution Explorer klikamy prawym przyciskiem myszki na naszym projekcie (BingTest). Z menu wybieramy Add Service Reference. Następnie wciskamy przycisk Advanced (po lewej stronie formularza), a następnie Add Web Reference. W polu URL wpisujemy http://api.search.live.net/search.wsdl?AppID=<TwójAppId>, a następnie wciskamy Go. Po chwili pojawi się informacja o znalezieniu usługi. W polu Web reference name wpiszemy nazwę, którą chcemy się posługiwać w naszym projekcie np. BingSearch (Rys. 6). 

Rys. 6. Widok okna Add Web Reference w Visual Studio. 

Wciskamy Add Reference. W oknie Solution Explorer powinna pojawić się informacja o dodanej usłudze sieciowej.

Teraz przygotujemy prosty formularz zawierający kontrolki: TextBox (ID:tbQuery), Button (ID: butSearch), ListBox (ID:lbResult) i WebBrowser (ID:wbResult). Naszą aplikację musimy jeszcze uzupełnić o informacje, z jakiego silnika wyszukiwania będziemy korzystali (więcej szczegółów znajdziemy w Bing product guidelines). W tym celu należy ze strony http://www.bing.com/toolbox/Webmasters/ pobrać odpowiednie ikony z sekcji Bing Product Guidelines and brand assets. W naszym przypadku będą to: logo Bing oraz lupa . Pliki graficzne należy pobrać i zapisać lokalnie.

W celu wyświetlenia obu ikonek dodamy do formularza dwie kontrolki PictureBox. Jedną umieścimy po lewej stronie kontrolki TextBox. Następnie klikniemy na jej SmartTag. Z menu wybierzemy Choose Image, a następnie Import. W oknie wyboru pliku wybierzemy pierwszy uprzednio zapisany plik z logo Bing i wciśniemy Open. W oknie Select Resource klikniemy OK. Ponownie klikniemy SmartTag i z listy rozwijanej Size Mode wybierzemy opcję AutoSize. Podobnie zrobimy z drugą ikonką umieszczając ją po prawej stronie kontrolki TextBox. Na Rys. 7 możemy zobaczyć wynik naszego działania.

Rys. 7. Widok okna aplikacji umożliwiającej wyszukiwanie. 

  Umieszczając ikonki należy uwzględnić informacje dotyczące odstępów od innych kontrolek zawarte w dokumencie Bing product guidelines na stronie 7 i 8.

 

W celu dodania kodu aplikacji dwukrotnie klikamy na przycisku Szukaj. W wyniku tej akcji tworzona jest metoda obsługi zdarzenia kliknięcia przycisku – butSearch_Click.

W otwartym pliku Form1.cs do sekcji using (na górze pliku) dopisujemy odniesienie do dodanej wcześniej usługi sieciowej:

  1: using BingTest.BingSearch;

Następnie w klasie Form1 definiujemy stałą, która reprezentować będzie AppID aplikacji:

  1: private const string AppId = ... ; //Tutaj umieść swój AppID

W kolejnym kroku przechodzimy do metody butSearch_Click i umieszczamy w niej następujący kod:

  1: LiveSearchService service = new LiveSearchService();
  2: SearchRequest request = new SearchRequest();
  3: request.AppId = AppId; 
  4: request.Query = tbQuery.Text;
  5: 
  6: request.Sources = new SourceType[] { SourceType.Web };
  7: SearchResponse response = service.Search(request);
  8: 
  9: lbResult.Items.Clear();
 10: foreach (WebResult result in response.Web.Results)
 11: {
 12:   lbResult.Items.Add(result.Title + " URL: " + result.Url);
 13: }

Opis kodu:

  • W linii 3 jako AppID przekazujemy wartość stałej AppId, zdefiniowanej w poprzednim kroku.
  • W linii 4 jako zapytanie przekazujemy tekst znajdujący się w kontrolce TextBox o ID: tbQuery.
  • W przykładzie wyszukujemy jedynie w źródle jednego typu – sieci Web (linia 6). Możliwe jest użycie dowolnego poznanego przez nas typu, np. SourceType.Image lub dowolnej ich kombinacji. Należy pamiętać, że powinniśmy inaczej obsłużyć pozostałe typy źródeł (np. obrazki i ich miniatury).
  • W linii 9 czyścimy wyniki poprzedniego wyszukania.
  • W liniach 10-13 w pętli foreach przeglądamy wyniki wyszukania i dodajemy je do listy kontrolki ListBox o ID lbResult, łącząc nazwę oraz adres za pomocą tekstu „URL:”, który wykorzystamy później do oddzielenia adresu i wyświetlenia zawartości strony w kontrolce WebBrowser..

Po uruchomieniu aplikacji, wpisaniu w polu tekstowym przykładowego hasła Programy Akademickie i kliknięciu przycisku Szukaj, lista powinna wypełnić się wynikami wyszukiwania. Teraz dodamy jeszcze kod umożliwiający wyświetlanie strony w kontrolce WebBrowser. W tym celu zamykamy testowaną aplikację i w Visual Studio klikamy dwukrotnie kontrolkę ListBox (lbResult). W wyniku tej akcji tworzona jest metoda obsługi zdarzenia zmiany wybranego elementu na liście: lbResult_SelectedIndexChanged. Do tej metody dodajemy następujący kod::

  1: string url = lbResult.SelectedItem.ToString();
  2: url = url.Substring(url.IndexOf("URL:") + 4);
  3: wbResult.Navigate(url);

Opis kodu:

  • W linii 1 tworzymy zmienną url zawierającą tekst wybranego elementu listy kontroli ListBox.
  • W linii 2 wybieramy fragment tekstu – adresu URL, który rozpoczyna się po ciągu „URL: ”
  • W linii 3 przekazujemy adres URL do kontrolki WebBrowser.

Teraz po uruchomieniu aplikacji, wpisaniu hasła i kliknięciu przycisku, wybranie dowolnego wiersza w kontrolce spowoduje wyświetlenie odpowiedniej strony w kontrolce WebBrowser.

Wykonaną aplikację z drobnymi zmianami można pobrać: http://cid-83e809470da5366c.skydrive.live.com/embedrow.aspx/devBlog/BingTest.zip

Tłumaczenie w usłudze Bing

Ostatnim tematem, jaki poruszymy będzie wykorzystanie tłumaczenia przy pomocy usługi Bing. Wykonamy przykładową aplikację umożliwiającą tłumaczenie tekstu na różne języki. Aby móc wykorzystać usługi tłumaczenia w naszej aplikacji musimy posiadać unikalny identyfikator AppID. Opis jak go otrzymać znajduje się na początku tego wpisu.

Uruchamiamy Visual C# 2008 Express Edition i z menu File wybieramy New Project, a następnie Windows Forms Application i nadajemy nazwę TranslationTest. Wciskamy OK. W oknie Solution Explorer klikamy prawym przyciskiem myszki na naszym projekcie (TranslationTest). Z menu wybieramy Add Service Reference. W polu Address wpisujemy http://api.microsofttranslator.com/V1/SOAP.svc i wciskamy Go. Po znalezieniu usługi w polu Namespace wpisujemy TranslationService i klikamy OK (Rys. 8). 

Rys. 8. Widok okna Add Service Reference w Visual Studio. 

Teraz przygotujemy prosty formularz zawierający dwie kontrolki TextBox. Pierwszą (górną) nazwiemy tbFrom, a drugą (dolną) tbTo. Ustawmy dodatkowo właściwość MultiLine obu kontrolek na True. Dodamy jeszcze przycisk Button (ID: butTranslate) do wykonania tłumaczenia. Na Rys. 9 możemy zobaczyć przykładowy wynik naszego działania.

Rys. 9. Widok okna aplikacji umożliwiającej tłumaczenie. 

Dwukrotnie kliknijmy przycisk Tłumacz. W wyniku tej akcji tworzona jest metoda obsługi zdarzenia kliknięcia przycisku butTranslate_Click.
W otwartym pliku Form1.cs do sekcji using (na górze pliku) dopisujemy odniesienie do dodanej wcześniej usługi sieciowej:

  1: using TranslationTest.TranslationService;

Następnie w klasie Form1 definiujemy stałą, która reprezentować będzie AppID aplikacji:

  1: private const string AppId = ... ; //Tutaj umieść swój AppID

W kolejnym kroku przechodzimy do metody obsługi zdarzenia butTranslate_Click i umieszczamy w niej następujący kod:

  1: LanguageServiceClient client = new LanguageServiceClient();
  2: tbTo.Text = client.Translate(AppId, tbFrom.Text, "pl", "en");

Opis kodu:

  • W linii 2 wywołujemy metodę Translate, podając jako parametry AppID, tekst do tłumaczenia (tekst z kontrolki TextBox o ID tbFrom), język tekstu źródłowego (możemy podać pusty łańcuch znaków) i język, na który zostanie przetłumaczony tekst źródłowy.

Po uruchomieniu aplikacji, wpisaniu dowolnego tekstu w języku polskim w górnej kontrolce TextBox (tbFrom) i wciśnięciu przycisku Tłumacz otrzymamy tłumaczenie polskiego tekstu na język angielski (Rys. 10).

Rys. 10. Wynik tłumaczenia tekstu na język angielski.

Teraz rozbudujemy naszą aplikację o wybór języka, na który będzie tłumaczony tekst. Do tego celu wykorzystamy metody GetLanguageNames i GetLanguages usługi Bing oraz kontrolkę ComboBox.

Do formularza dodajemy kontrolkę ComboBox i nadajemy jej ID cbLang. Następnie w klasie Form1 dodajemy prywatne pole langCode, w którym przechowywać będziemy kody dostępnych języków (np. „pl” czy „en”):

  1: private string[] langCode;

W konstruktorze klasy Form1 po wywołaniu metody InitializeComponent dodajemy następujący kod::

  1: LanguageServiceClient client = new LanguageServiceClient();
  2: cbLang.DataSource = client.GetLanguageNames(AppId,"pl");
  3: langCode = client.GetLanguages(AppId);

Opis kodu:

  • W linii 2 wywołujemy metodę GetLanguageNames, podając jako parametry AppID oraz parametr informujący serwer o języku, w jakim ma zostać zwrócona lista dostępnych języków. Wynik przypisujemy do właściwości DataSource kontrolki ComboBox.
  • W linii 3 wywołujemy metodę GetLanguages, podając jako parametr AppID. Wynikiem jest lista kodów dostępnych języków, które możemy przekazać do metody Translate. Wynik przypisujemy do pola langCode.

Następnie w metodzie butTranslate_Click zamieniamy linijkę:

  1: tbTo.Text = client.Translate(AppId, tbFrom.Text, "pl", "en");

na:

  1: tbTo.Text = client.Translate(AppId, tbFrom.Text, "pl", langCode[cbLang.SelectedIndex]);

Wynik naszych działań został przedstawiony na Rys. 11.

Rys. 11. Lista dostępnych języków po polsku.

Wykonaną aplikację z drobnymi zmianami można pobrać: http://cid-83e809470da5366c.skydrive.live.com/embedrow.aspx/devBlog/TranslationTest.zip

Do naszej aplikacji warto jeszcze dodać listę rozwijaną, w której można określić język źródłowy tekstu do tłumaczenia. Tę przyjemność zostawiam Tobie.

Ważne miejsca w sieci

Na koniec chciałbym przedstawić miejsca, w których można znaleźć dodatkowe informacje na temat usług Bing dla programistów

  1. Bing Services

    Na stronie MSDN znajdziemy informacje o API Bing v2.0. Zamieszczono tu wprowadzenie do usługi, opis różnych protokołów komunikacyjnych, przykłady kodu i inne informacje.

  2. Bing Developer Center

    W centrum dla programisty Bing znajdziemy wszelkie zasoby oraz odnośniki do innych stron związane z tworzeniem aplikacji wykorzystującej wszystkie usługi Bing. Do najważniejszych należą blog, Bing API FAQ i forum. Tu również znajdziemy odnośnik do Bing API SDK, zawierającego plik pomocy oraz przykłady kodu. Powinniśmy również zapoznać się z warunkami użycia usługi.

  3. Bing product guidelines

    Tu znajdziemy wskazówki i rekomendacje dotyczące ekspozycji marki Bing w naszej aplikacji.

  4. Silverlight SDK for Microsoft Bing

    Tu znajdziemy przykład połączenia usług Bing z technologią Silverlight.

  5. Bing API Web Page Error Toolkit

    Pakiet ten umożliwia zaprojektowanie dynamicznej strony błędów na naszej stronie przy użyciu ASP.NET lub JavaScript. Zastąpiona strona może zawierać więcej użytecznych informacji rozszerzonych o wyniki zapytania do usługi Bing.

  6. Bing Translator API

    Tu znajdziemy dokumentację API usługi tłumaczenia.

  7. Bing Translator Tools

    Tu znajdziemy różne narzędzia umożliwiające tłumaczenie m.in. na stronie internetowej, w przeglądarce IE8 czy w aplikacjach pakietu Office.

Dodatkowo chciałbym przedstawić trzy projekty wykorzystujące API Bing.

Pierwszy z nich to BLinq – Linq to BING Search API. Jest to projekt zaproponowany przez pracownika Microsoftu, Nikhila Kothariego. Na swoim blogu opublikował swoją propozycję , a następnie przedstawił jej zastosowanie w Silverlight i .NET RIA Services. W skrócie mamy możliwość wykonywania zapytań LINQ do usług Bing, np. 

  1: BingContext bing = new BingContext(appKey);
  2: IQueryable<PageSearchResult> pagesQuery =
  3:     from p in bing.Pages
  4:     where p.Query == "nikhil"
  5:     select p;
  6: 
  7: foreach (PageSearchResult page in pagesQuery) {
  8:     // Write out page members (title, uri, description, display URL and date)
  9: }

Kolejnym projekt wykorzystuje usługi Bing w PHP. Microsoft Education Labs udostępnił na licencji Open Source GPL v2 dodatek do systemu LMS Moodle, umożliwiający m.in. integrację wyszukiwarki Bing w tym systemie. Dodatek ten w całości został napisany w języku PHP z wykorzystaniem JavaScript.

Ostatnim projektem jest SDK dla usług Bing dla iPhone i Mac. Jest to zestaw narzędzi dla programistów zawierający kody źródłowe aplikacji wykorzystujących API Bing dla iPhone i Mac. Więcej informacji o możliwościach znajdziemy na blogu dla programistów Bing.

Podsumowanie

W tym odcinku poznaliśmy podstawy możliwości wykorzystania usług Bing w aplikacjach. Przedstawiłem podstawowe informacje niezbędne do rozpoczęcia pracy z tymi usługami i zachęcam do ich testowania.

Nie pokazałem jak połączyć te usługi z technologią Silverlight. Zachęcam do pobrania i przetestowania narzędzi dostępnych w Silverlight SDK for Microsoft Bing. Nie pokazałem również usługi Bing Maps. Jest to związane z zamknięciem projektu Live Frameworks CTP i zmianami w kontrolce Bing ASP.NET Map Control.

Piotr Bubacz