SamsungRzuciłem pracę w Samsungu Czekałem na tę chwilę już od dawna. Z końcem kwietnia opuściłem R&D Samsunga. Ponad 3 lata spędzone w szeregach koreańskiej korporacji nauczyły mnie bardzo wiele, w większości tego, czego nie należy robić. Poznałem wielu ciekawych ludzi, z wieloma chciałbym dalej...

Czytaj dalej

samsung-s3Prezentacja Samsunga Galaxy SIII, a iPhona Apple Właśnie skończyłem oglądać konferencję Samsung Unpacked 2012, podczas której koreański gigant zaprezentował najnowszego przedstawiciela serii Galaxy, model SIII. Godzinna prezentacja, przeprowadzona w Londynie, a transmitowana na cały świat, była moim zdaniem bardzo...

Czytaj dalej

Android Market LogoProgramisto, zostań milionerem! Bądźmy szczerzy: dziś każdy chce być bogaty. Pieniądze czynią nas szczęśliwszymi, rozwiązują wiele problemów, spełniają marzenia. Tylko jak zdobyć na tyle dużo gotówki, aby do końca życia pić drinki na hawajskiej plaży? Jeśli jesteś programistą - miliony masz...

Czytaj dalej

wp7_logoWP7 - na razie dziękuję Moja przygoda z Windows Phone zakończyła się szybciej niż myślałem. Wróciłem do Androida z jednego prostego powodu, za bardzo jestem powiązany z ekosystemem Google. Ale zacznijmy od początku... Zanim zdecydowałem się w całości przesiąść na nowy mobilny system od...

Czytaj dalej

SE K750 ImagesSprzedaj swój stary telefon Czy masz może w szafie tak stary telefon, że wydaje się, że musiałbyś komuś zapłacić aby go od Ciebie zabrał? Jeśli tak, to mam dla Ciebie świetne rozwiązanie, zrób z niego pożytek i sprzedaj go w Top Dollar Mobile. Jakiś czas temu natrafiłem w sieci na artykuł,...

Czytaj dalej

Rozszerzamy Visual Studio 2010 – Wstęp

Celem mojej pracy magisterskiej jest nie tylko praca badawcza prowadząca do pewnych wniosków i algorytmów, ale również budowa narzędzia implementującego te algorytmy. W związku z tym, że koncentruję się na analizie statyczne/dynamicznej kodu, postanowiłem rozszerzyć Visual Studio 2010 o swoje własne narzędzie. Celem kolejnej serii wpisów na moim blogu będzie zapoznanie Was z możliwościami rozbudowy, jakie oferuje Visual Studio 2010.

Na samym początku chciałbym wspomnieć o myśli, która niemal co chwila przeplata się we wszystkich artykułach i wszystkich screencast dotyczących Visual Studio Extensibility: kiedyś pisanie rozszerzeń do Visual Studio było bardzo bolesne, teraz jest o wiele, wiele prościej.

Aby rozpocząć swoją przygodę z rozbudową Visual Studio, należy oczywiście posiadać owe IDE w wersji Proffesional lub lepszej oraz pobrać i zainstalować SDK (~10MB) dostępny tutaj [1]. Po pomyślnym zainstalowaniu powinniście w oknie nowego projektu posiadać dodatkową kategorię  „Extensibility” w poszczególnych sekcjach językowych.

Niestety budowanie wtyczek nie jest trywialne i nie da się po prostu stworzyć Hello World bez choćby chwili poświęconej na dokształcenie. Wszystkim zainteresowanym zatem polecam serię screencastów z Development Tools Ecosystem Summit dostępnych na kanale 9 [2]. Myślę, że przebrnięcie przez serię 100 da Wam w miarę jasny obraz sytuacji i bez problemów będziecie mogli stworzyć prostą wtyczkę. Seria 200 jest już bardziej ambitna (ale i trudniejsza), dlatego tym bardziej ją polecam ;-)

Kopalnia wiedzy znajduje się oczywiście w bibliotece MSDN w sekcji Visual Studio 2010 SDK [3]. Polecam ją wszystkim ciekawskim i spragnionym detali developerom. Jest również specjalna strona Extending Visual Studio [4] będąca MSDN’owym punktem wejściowym w świat rozszerzeń Visual Studio.

Nie należy również zapomnieć o blogu zespołu tworzącego Visual Studio [5].

Najlepszym jednak sposobem poznania VSX (Visual Studio Extensibility) jest (po uprzedniej krótkiej lekturze) grzebanie w kodzie. Stworzoną przy pomocy tutoriala wtyczkę rozkładałem na części pierwsze, a wszystkie niejasności sprawdzałem w bibliotece MSDN. Po dwóch takich wieczorach mam już ogólne pojęcie na temat architektury wtyczek, podstawowych zasad ich tworzenia, a także wiem, czego unikać i co należy stosować.

W kolejnych wpisach postaram się Wam pokazać, jak stworzyć już nietrywialne wtyczki. Zapraszam.

Linki:

Promuj

Axum – Agenci w akcji

Powakacyjna kontynuacja serii na temat różnych podejść w pisaniu aplikacji równoległych. Po koniec lipca przedstawiłem model Agenta, a dzisiaj chciałbym przedstawić jego Microsoftową implementację.

Axum to kolejny inkubacyjny projekt z Redmond, tak więc naprawdę nie wiadomo, co się z nim dalej stanie. Model agenta [1], który przedstawiłem w poprzednim poście, został przez giganta potraktowany całkiem poważnie. Solidna implementacja, skalowalność, wtyczka do Visual Studio – to wszystko daje całkiem duże pole do popisu, ale powoli…

Axum to jezyk programowania – pewnie się zdziwiliście - w 99% oparty na C# i w pełni współpracujący z platformą .NET. To narzędzie umożliwiające koordynację niezależnych komponentów aplikacji, definiujące agentów oraz ich interakcje. Jest to język „special-purpose”, więc z miejsca wprowadzona jest tu równoległość.

Najprościej przedstawić Axum budując bardzo prostą aplikację taką jak  kalkulator. Na początek zatem musimy zaplanować, jakie elementy będą nam potrzebne – myśląc naturalnie w świecie agentów. Otóż, potrzebny będzie nam agent wykonujący pojedyncze działanie, np. dodawanie, ale również agent, który przekaże mu dane jednocześnie odbierając je od nas (np. z konsoli), tj. agent utożsamiany z punktem wejściowym aplikacji. Agent powinien również definiować kanał, czyli określenie rodzaju wiadomości, jaką może obsłużyć.

Zacznijmy zatem od kanału. Nazwijmy go MathChannel:

  1. channel MathChannel
  2. {
  3.    input int X;
  4.    input int Y;
  5.    output int Z;
  6. }

Jak widać, kanał definiuje pewne pola zwane portami. Oprócz typu decyduje się również o kierunku. Porty to nic innego jak bufory. Kolejność używania portów przez agenta można zdefiniować w tzw. patternach, ale na tym etapie poznawania Axum nie będą one potrzebne.

Stwórzmy zatem agenta dodawania:

  1. public agent Adder : channel MathChannel
  2. {
  3.    public Adder()
  4.    {
  5.       while(true)
  6.       {
  7.          Z <– ( receive(X) + receive(Y) );
  8.       }
  9.    }
  10. }

Należy zauważyć, że definiując agenta, musimy zdecydować, jaki kanał będzie obsługiwał, a w tym wypadku oczywiście będzie to nasz kanał matematyczny. Jak widzicie, kanał nie decyduje o funkcjonalności, a jedynie o możliwym interfejsie obsługi. Konstruktor tego agenta jest punktem wejściowym. Czytanie z kanału jest blokujące, tak więc łatwo zauważyć, na czym polega działanie agenta: czeka on na parametr, który pojawi się na porcie X w kanale. Jeśli przyjdzie, czeka na Y, a jeśli i ten przyjdzie – na port Z wstawia wynik działania i znów nasłuchuje na porcie X. O ile konstrukcja pobierania z portu jest „normalna”, to wysyłanie wyniku na port operatorem „<–” może troszkę dziwić. Axum definiuje więcej podobnych operatorów.

Czas na kluczowego agenta:

  1. public agent App : channel Application
  2. {
  3.    public App()
  4.    {
  5.       var a = Adder.CreateInNewDomain();
  6.       while(true)
  7.       {
  8.          Console.Write("X: ");
  9.          int x = Int32.Parse(Console.ReadLine());
  10.          a::X <– x;
  11.  
  12.          Console.Write("X: ");
  13.          int y = Int32.Parse(Console.ReadLine());
  14.          a::Y <– y;
  15.  
  16.          int za = receive(a::Z);
  17.          Console.WriteLine("Adder Z: " + za);
  18.       }
  19.    }
  20. }

Agent będący punktem wejściowym aplikacji musi implementować kanał Application, co w tym wypadku polega jedynie na deklaracji. W konstruktorze (czyli w ciele wykonywania agenta) tworzymy pozostałych potrzebnych nam agentów, w tym wypadku tylko jednego – do dodawania. Zauważcie, że stworzony został w innej domenie niż obecny agent, przez co będzie mógł działać równolegle. Następnie najzwyczajniej w świecie pobieramy liczbę z konsoli i wysyłamy ją na dany port agenta – port który definiuje zgodnie z kanałem. To samo robimy z drugim argumentem. Znaną funkcją receive odbieramy wynik. Ciekawy jest sposób dostępu do portów, a mianowicie nie przez kropkę, jak przywykliśmy do tego typu konstrukcji, a przez podwójny dwukropek.

Myślę, że kod jest na tyle prosty, że każdy zrozumiał ideę, ale teraz więcej szczegółów.

  • każdy agent to oddzielny wątek
  • wysyłanie na porty odbywa się przez kopiowanie i jest nieblokujące
  • porty mogą być jedynie typów niezmiennych (immutable) lub w pełni serializowanych
  • możliwe są operacje Multiplex, Combine, Broadcast, Alternate
  • kanały są kompatybilne z WCF

Axum to naprawdę potężne narzędzie, które bez problemu można wpleść w istniejące projekty .NETowe. Jest skalowane, intuicyjne i proste w zaadaptowaniu. W powyższym wpisie przedstawiłem jedynie  zarys funkcjonalności, ale wszystkich gorąco zachęcam do przyjrzeniu się temu narzędziu bliżej.

Dostępna jest wersja Axum zarówno do VisualStudio 2008 oraz 2010 [2]. Dla ciekawskich powyższy projekt powiększony o jeszcze jednego agenta prezentuje na swoim googlowym hostingu kodu [3]. Zapraszam!

Źródła:

Promuj

Parallel Programming with Microsoft .NET E-BOOK

Darmowa pozycja dla wszystkich fanów rozwiązań równoległych. Microsoft Press wydał e-book na temat gorącego ostatnimi czasy, programowania równoległego. Książka na 224 (anglojęzycznych) stronach przedstawia idee zrównoleglania, oraz prezentuje przykłady oparte oczywiście o Parallel Extensions w .NET Framework 4.0

Przykładowe rozdziały to Parallel Loops, Parallel Tasks, Dynamic Task Paralelism, Debugging and Profiling Parallel Applications. Na CodePlex umieszczono również pełne kody używane w książce.

Pozycja pobowiązkowa!

Linki:

Promuj

Pamięć Transakcyjna – Istniejące implementacje – cz.1

Na rynku istnieje wiele rozwiązań implementująych STM – zdziwilibyście się, jak wiele. Są to rozszerzenia dla więkoszści języków: zaczynając od C, przez C++, C#, Java, Haskell, Perl. Dość pokaźna lista znajduje się w wikipedii. W tym poście chciałbym omówić jedynie kilka.

Rozwiązanie, którego wydajność opisywałem w poprzednim poście, jest modyfikacją maszyny wirtualnej Javy. Dokładny opis znajduje się w dokumencie [1] oraz na tej stronie. Można pobrać przykładowy kod i spróbować samemu uruchomić to rozwiązanie.

Drugie rozwiązanie, jakie chciałbym zaprezentować, zostało stworzone w laboratoriach Microsoft Research (prawdopodobnie przy pomocy Brown University), i nosi nazwę SXM (dokumentacja znajduje się tutaj [2]). Wersję 1.0 można pobrać tutaj [3], a wersję 1.1 tutaj [4]. Jest to implementacja na platformę .NET w postaci specjalnej biblioteki. Zamysł jest prosty: klasy, których chcemy używać równolegle, musimy zarejestrować w fabryce obiektów i dzięki tej fabryce musimy te obiekty tworzyć. Właściwości, których będziemy używać, należy dodatkowo opatrzyć specjalnym atrybutem. Fabryka dynamicznie tworzy podklasę i opakowuje atrybuty w specjalne wywołania - to są właśnie atonomiczne bloki. Dynamiczne tworzenie podklas możliwe jest dzięki mechanizmom z przestrzeni nazw System.Reflection.Emit.  Ponadto kod źródłowy SXM, która można pobrać z podanych linków [3,4], zorganizowany jest jako benchmark. Zawiera dwie różne implementacje fabryk, nakłaniając programistę do napisania swojej i sprawdzenia jej wydajności z istniejącymi.

Kolejne rozwiązanie, również na platformę microsoftu, to STM.NET. Można śmiało założyć, że SXM był pierwowzorem, na którym bazowali inżynierowie tworzący STM.NET. Historia tego produktu jest jednak o wiele bardziej ciekawa. STM.NET funkcjonował od jakiegoś czasu jako projekt na DevLab’ach, czyli wyżej w hierarchii niż MS Research. Blog zespołu tworzącego można śledzić tutaj nadal, mimo tego, że projekt został zakończony – tak można przeczytać na oficjalnej stronie rozwiązania – dnia 13 maja br. Dla programisty zostawiono jedynie podręcznik użytkownika. Rozwiązanie to nie było biblioteką, a zmodyfikowaną wersją platformy .NET 4 beta 1. Jak wiemy, mechanizm transakcji najlepiej sprawdzi się wtedy, kiedy będzie na stałe zintegrowany z platformą, na jaką został napisany – tak właśnie uczynili inżynierowie.

Według mnie projektu nie wycofano, bo był on mało przydatny. Myślę, że wejdzie on w skład Parallel Extensions w następnej wersji platformy – ale to tylko moje domysły. Dlaczego tak uważam? Wiadomo dokładnie, jak nazywał się plik, który był do pobrania w czasie trwania projektu (dotNetFx40_STMNet_10_x86.exe). Na zagranicznych portalach, na których był udostępniany, została po nim tylko notka, że usunięto zasób ze względu na prawa autorskie (zobacz). Ktoś się natrudził, aby to uczynić. Nie ustrzeżono się jednak błędów. Mimo usunięcia strony pobierania archiwa z przykładami i dokumentacją bezpośredni link do pliku działał jeszcze przez ponad miesiąc. Spragniony tego rozwiązania nadal szukam w czeluściach Internetu pliku ze zmodyfikowaną wersją platformy…

W następnym poście opiszę kolejne implementacje. Zapraszam.

Źródła:

Update, godz 14:30:

Z nieznanych mi przyczyn, podany link do zmodyfikowanej platformy, w serwisie depositfiles, zaczął nagle działać.

Promuj

Microsoft Biology Foundation

Microsoft Research opublikował pierwszą wersję Biology Foundation – zestawu narzędzi kierowanych do specjalistów od bioinformatyki, które stanowi rozszerzenie dla platformy .NET. Pierwsza wersja zawiera zbiór parserów, umożliwiających czytanie z popularnych formatów wykorzystywanych w bioinformatyce, a także zestaw algorytmów do manipulowania DNA, RNA oraz sekwencją białek. Ponadto rozszerzenie zawiera connectory do biolgicznych web serwisów takich jak NCBI BLAST.

Piszę o tym, ponieważ wiekszość zaimplementowanych algorytmów w tej bibliotece wykorzystuje potencjał Parallel Extensions. Algorytmy takie dają się łatwo zrównoleglić, ponieważ zawierają etapy, które można podzielić na mniejsze niezależne części, mogące zachodzić równolegle.

Zapraszam na stronę projektu.

Źródło: MSDN Blogs > External Research Team Blog

Promuj

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:

Pamięć Transakcyjna - STM [502.94 kB]
Parallel Extensions Presentation [3.21 MB]

Promuj

Monopol w branży IT

Jeśli usłyszycie hasło „monopol” i każą Wam wymienić jedną firmę w branży IT, to jaką wymienicie? Naturalnie, bez zająknięcia, stajnię wujka Billa.  Owszem, Microsoft zmonopolizował rynek systemów operacyjnych. Dzięki przemyślanym decyzjom, sprytnym umowom i determinacji zdobył podium i zasiadł tam na wieki. Czy dobrze? Mnie pasuje.

Tymczasem zza krzaka na pozycję monopolisty równie wielkiego rynku, internetu, czyha Google Inc. Dla jasności, uważam, że produkty firmy z Mountain View są naprawdę super i świetnie mi się ich używa, ale kiedy pomyślę, ile tego jest, głowa mi pęka, a nie lubię kiedy mi pęka ;p

Wyszukiwarka… nic dodać, nic ująć, ukłony i wyrazy szacunku za tak znakomite narzędzie. Poczta… szybka, duża, w miłej domenie, brawo. Mapy… 2D, 3D, czego chcieć więcej? YouTube, Dokumenty Online, Blogi, Zdjęcia, Androidy na telefonach, Przeglądarka, System operacyjny, coś tam, coś tam, coś tam … gigant stale poszerza swoje horyzonty. Z kwartału na kwartał kupuje kolejne firmy, ostatnio nawet taką, która zajmuje się przewidywaniem przyszłości.

Co jeszcze nas czeka? Analitycy przedstawili propozycje 10 usług, które już niedługo może wprowadzić ten internetowy potentat. Niektóre rozwiązania istnieją, ale naturalnie Google zrobi je lepiej… czy dobrze? Konsumenci powiedzą, że tak, dostaną przecież kolejny świetny produkt. Google zarzucił sieci.

Wszystko byłoby świetnie, gdyby nie fakt, że firma za pośrednictwem tych wszystkich usług zbiera masę informacji, o nas, użytkownikach.  Jeśli korzystacie z wyszukiwarki, gdy jesteście zalogowani na np. iGoogle’u, wejdźcie, proszę, w „Ustawienia konta Google”, a następnie wybierzcie „View data stored with this account”. Zobaczycie, ile informacji o Was zebrano. Zbadajcie sekcję „Web history”, sprawdźcie, czego szukaliście miesiąc temu… bez komentarza. Te wszystkie informacje są następnie wykorzystywane w usłudze AdWords, która wyświetla reklamy, i co mniej ciekawe, stanowi główny dochód firmy.

Na koniec film propagandowy, jeśli ktoś nie obejrzał w jednym z podanych linków.

A żeby nie było znów promicrosoftowo, załączam kilka komiksów.