poniedziałek, wrzesień 26, 2011

BUILD - What's next in .NET Framework 4.5

Kolejne omówienie, kolejnej sesji z konferencji BUILD - tym razem temat to:

What's next in .NET Framework 4.5


Chyba każdy programista .NET, nawet taki, który traktuje to tylko jako zawód (są tacy? :)) z zainteresowaniem śledzi wydarzenia w .NET Frameworku. W końcu zmiany w nim będą rzutować na to w jaki sposób będzie kodował w przyszłości (chyba, że jest uwięziony w jakimś legacy code z .NET 2.0). Sesja zaprezentuje nam jakie oręże będzie dostępne już w niedalekiej przyszłości na potrzeby pisania aplikacji w .NET.

Wersje

Sesja rozpoczyna się od zaprezentowania czym jest .NET Framework 4.5. W przeciwieństwie do wersji 4.0, 4.5 nie jest wersją side-by-side a nadbudową (choć ja bym nazwał to hybrydą). Po części rozszerzającą dostępne rzeczy, które znajdują się w 4.0 ale także zastępuje część funkcjonalności z poprzedniej wersji.

Wersje .NET

Zmiany, które zostały wprowadzone do wersji .NET to głównie poprawki błędów, poprawa wydajności czy też zmiany we wnętrznościach.

WinRT & Metro

Kolejnym elementem zaprezentowanym podczas sesji jest WinRT. WinRT czyli nowy framework pisania aplikacji, który nie zastępuje .NET framework'a. Umożliwia pisanie aplikacji Metro, bez konieczności odwoływania się do p/invoke'a. Jest to oczyszczone (z metod, które wyszły z użycia) oraz uporządkowane API, które w naturalny sposób przypomina pisania aplikacji przy użyciu .NET.

Umiejscowienie WinRT oraz Metro

Metro - to zaprezentowany na konferencji nowy wygląd aplikacji dla Windows 8. Podobny do aplikacji tworzonych na Windows Phone 7.

Ulepszenia

Oczywiście nie mogło zabraknąć async oraz await. Jeśli ktoś ma już dość tego tematu, może spokojnie przewinąć gdzieś pomiędzy 17 a 20 minutą.
Następnie pojawia się informacja o ciekawym usprawnieniu TPL czyli Task Parallel Library. Dostaniemy możliwość tworzenia przepływów zadań (TPL Dataflow). Będziemy mogli stworzyć bloki zadań i z nich stworzyć przepływ a następnie zasilić je danymi.

TPL Dataflow
Poza tym, Task.WhenAll, Task.WhenAny oraz oczywiście przyśpieszenie działania.

Szybszy start ASP.NET

Dużo mniejsze zużyci pamięci oraz szybszy start aplikacji (ponoć o 35%). Przyśpieszenie zostało osiągnięte przez JIT-owanie na wielu rdzeniach w tym samym czasie. Dodatkowo można włączyć opcję 'pre-fetch' w Windows 8, która to dodatkowo poprawia wydajność aplikacji ASP.NET (multi-core JIT + pre-fetch daje w sumie 35% przyśpieszenia).

Lepszy dostęp do danych - EF, ADO.NET, WCF, Websockets

Omówienie schematu tworzenia dostępu do danych. W EF do dotychczas dostępnego Model-First oraz DataBase-First zostało dodane Code-First. Czyli na podstawie kodu tworzony jest model danych. Usprawnienia do EntityFramework wspierające Enum, wspracie dla Azure'a oraz automatycznie kompilowane zapytania LINQ.

Stare dobre ADO.NET dostało wsparcie dla typów przestrzennych (spatial) oraz oczywiście wsparcie dla async.

WCF wzbogacone o async (a jak!) oraz uproszczenia jeśli chodzi o konieczną konfiguracje usług.

Omówienia Websockets dostępnych w IE10, .NET oraz w aplikacjach typu Metro.

WPF, Workflow, BCL, MEF, ASP.NET

Omówienie usprawnień w powyższych technologiach. Szczególnie interesująco wyglądają usprawniania dla ItemsControl. Według zapewnień 200000 elementów będzie możliwe do załadowania w 2.3 sekundy. Wygląda imponująco. Zobaczymy.

Workflow w najnowszej wersji udostępnia wprowadzanie wyrażeń w C#. Dostępne będzie wersjonowanie, dzięki któremu będziemy mogli mieć kilka wersji danego flow dostępne.

BCL - usprawnienia w WeakReferences, które zabezpiecza przed pisaniem nieprawidłowego kodu związane z 'race condition'.
Strumienie zostały wzbogacone o opcję umożliwiającą niezamykanie strumienia po skończonym odczycie z niego. Pojawił się nowy typ ReadOnlyDictionary :)

Co nowego w MEF? Łatwiejsze diagnozowanie błędów oraz obsługa typów POCO oraz typów generycznych.

ASP.NET? - Obsługa chmury oraz HTML5. Pojawiły się Model Binder'y znane z MVC. Dodatkowo encoder'y zabezpieczające przed XSS'em.

Podsumowując


Sesja interesująca, ale jako wstęp do oglądania kolejnych. Zawiera informacje odnośnie nowości z .NET Framework 4.5 'z lotu ptaka'.

czwartek, wrzesień 22, 2011

Mono.Cecil - prezentacja

We wtorek miałem przyjemność wygłosić prelekcję prelekcję na temat Mono.Cecil na Wrocławskiej Grupie .NET.



-- Byłeś na tej prezentacji? - Oceń ją --

W sesji starałem się zaprezentować czym jest Mono.Cecil oraz jakie daje nam możliwości jeśli chodzi o przeglądanie, modyfikację plików assembly. Mam nadzieję, że za pomocą przykładów: generatora statystyk, automatyczną implementację INotifyPropertyChnaged wraz z użyciem MSBuild task pokazałem jak możemy wykorzystać Mono.Cecil, aby ułatwić naszą pracę. Dodatkowo poprzez zaprezentowanie prostego AOP (logowanie WE/WY do metody) oraz napisanie prostego obfuskatora kodu mam nadzieję pokazałem jak możemy wykorzystać tę bibliotekę do ciekawych rozwiązań wzbogacając nasz kod.


Jak bawić się ze źródłami? Solucja podzielona jest na 5 folderów: AOP, INotifyPropertyChanged, MsBuild.Task, Obfuscate oraz Statistics.

Zabawę polecam od Statistics. Prosty projekt, który pokazuje jak można przejrzeć assembly i zliczyć wystąpienia typów, metod, właściwości itd.

Następnie można zapoznać się z INotifyPropertyChanged. Jest tam pokazane rozwiązanie naiwne z jawnym wołaniem OnNotifyPropertyChnaged w setterze oraz trochę ładniejsze z wykorzystaniem Expression. 3 przykład w tym projekcie wykorzystuje mono Cecil. Wystarczy do bindowania użyć właściwości Header3 i zbudować aplikacje. Następnie uruchomić Mono.Cecil.INotifyPropertyChanged a po jego zakończeniu uruchomić (nie z VS) projekt WPF.INotifyPropertyChanged. Binding powinien działać wyśmienicie. Po tym warto zagłębić się w kod źródłowy projektu, aby zobaczyć jak za pomocą Mono.Cecil możemy dodać niezbędny kod.

Jak już rozpracujemy ten przykład warto zerknąć do MSBuild.Task jest to ulepszenie poprzedniego tak aby cała "magia" Mono.Cecil działa się przy każdym budowaniu projektu w VS. Dzięki temu nie będziemy musieli odpalać zewnętrznych aplikacji.

Dalej warto zapoznać się z folderem AOP. Jest tam pokazane jak za pomocą Cecil wygenerować dodatkowe instrukcje logowania na konsole każdego WE/WY do/z metody wraz z aktualnym czasem. Jest to swojego rodzaju Aspect-Oriented Programming.

Na sam koniec polecam zerknąć na projekt Obfuscate. Pokazuję tam jak możemy choć trochę zaciemnić nasz kod i co niektóre łańcuchy znaków w nim występujące, aby nie były tak łatwo dostępne dla osoby przeglądającej zdekompilowany nasz kod.

Uwaga: Przykłady zawierają dość spore ilości ILa - Nie odpowiadam za uszkodzenia wynikające z nadmiernego napromieniowania się tymi niskopoziomowymi instrukcjami :)

Do przeglądania skompilowanych źródeł polecam IlSpy'a, dotPeek'a, JustDecompile'a czy Reflector'a (ehh wisi mi jeszcze post porównujący te narzędzia...)

Link do prezentacji i przykładów i slajdów znajduje się na stronie grupy na portalu Wss/Codeguru.

Mile widziane uwagi i sugestie - sam już widzę, że chyba warto też przygotować, choćby krótką prezentację pt. Wstęp do IL, bo część osób nie jest w temacie.

sobota, wrzesień 17, 2011

BUILD - What's new in Visual Studio 11

Kolejny z serii postów odnośnie sesji pojawiających się na konferencji BUILD. Dziś sesja pod tytułem:

What's new in Visual Studio 11


VS & MetroUI



Z sesji dowiadujemy się, co ciekawego przygotował dla nas Microsoft w najnowszej wersji narzędzia. Na początek prezentacja nowego UI - MetroUI, którego będziemy mogli użyć w wersji 11 Visual Studio. Dostępne będą szablony, które w prosty sposób pozwolą utworzyć nam wspomniane wyżej aplikacje. Nie będzie znaczenia, który język wybierzemy. Dostępne będą one zarówno w VB, C#, C++ oraz HTML5/JS. Dodatkowo będzie można tworzyć oprogramowanie niskopoziomowe - driver'y.

Nowy Solution Explorer, który przypomina trochę Solution Navigator obecnie dostępny w Productivity Tools. Szybka wyszukiwarka, za pomocą której będzie można odnajdywać rzeczy zarówno w kodzie, jaki i wśród poleceń Visual Studio.

IntelliSense dostał zakładki, dzięki którym będziemy mogli segregować podpowiedzi na grupy - te najczęściej używane oraz pozostałe.

Z poziomu VisualStudio będziemy mogli dodawać deklaracje, które nasza aplikacja wspiera. Dla przykładu jeśli wybierzemy Search, użytkownik systemu wyszukując elementy będzie także korzystał z szukania dostępnego w naszej aplikacji.

Programowanie aplikacji DirectX


Będzie wsparcie dla języka HLSL (High Level Shared Language) dające możliwość debugowania oraz funkcję podpowiedzi w Visual Studio.
Model czołgu renderowany przy pomocy VS.
Ogólnie możliwość otwierania modeli i śledzenia, jakie transformacje i tekstury są nakładane aby uzyskać końcowy efekt. Zapowiada się interesująco szczególnie dla wszystkich, którzy dotychczas w inny sposób musieli radzić sobie ze zrozumieniem, dlaczego jakaś część modelu 3D nie renderuje/działa prawidłowo. Będzie również możliwość testowania kodu DirectX'a.

Programowanie sterowników w VisualStudio

To zapowiada się niezwykle interesująco.Od najnowszej wersji VS umożliwi również pisanie sterowników. Po zainstalowaniu SDK będziemy mieli dostępny nowy typ projektu - Driver. Dodatkowo będzie możliwość uruchamiania kd z poziomu VisualStudio oraz debuggowanie jądra/sterowników z jego poziomu.

Programowanie Azure & HTML5 & ASP.NET

Oczywiście Microsoft nie zapomina o swoim chmurowym rozwiązaniu i najnowsze Visual Studio będzie wspierać tworzenie takowych rozwiązań.

HTML 5 jak i JS stają się pełnoprawnymi obywatelami w VisualStudio. Dostępne będą snippety, które usprawnią pracę z tą technologią. Oczywiście IntelliSense oraz kilka nowych funkcji np. Go To Definition. W VisualStudio dostaniemy jeszcze znane z IE Developers Tools (F12), za pomocą których będziemy mogli odkryć dlaczego nasz kod nie działa tak jak powinien.

ASP.NET będzie zawierać w MVC4 z wykrywaniem uruchamiana strony na telefonie (i zapewne renderowaniem w trybie kompaktowym). Oczywiście nadal będzie wsparcie jQuery. Za pomocą Page Inspector'a będzie można na podstawie kodu HTML/CSS/JS odnaleźć pliki po stronie serwera odpowiedzialne za wygenerowaną treść.

ALM

Cykl życia aplikacji w VisualStudio dzięki współpracy pomiędzy developerem, testerem oraz menadżerem za pomocą jednego narzędzia pozwoli na szybsze tworzenie oprogramowania. Planowanie Sprintu, tworzenie makiet, testy - to wszystko będzie się zawierać w nowym VisualStudio.

Cykl życia aplikacji

VS 11 będzie wspierać narzędzia takie jak review kodu przez innego programistę wraz z notatkami "na kodzie" wewnątrz Visual Studio (ale to chyba dostępne będzie tylko z TFS'em), uruchamianie aplikacji z funkcją IntelliTrace na produkcji oraz zarządzanie projektem za pomocą strony internetowej. Będzie dostępne także sprawdzanie ilości kodu napisanego za pomocą metody Copy'iego & Paste'a :).

Z ciekawostek dowiadujemy się, że jest około 4000 poleceń w Visual Studio :].
Sesja wymagana.



Miłego oglądania.

BUILD - Future directions for C# and VB

Jak pewnie wszyscy wiedzą niedawno skończyła się konferencja BUILD, na której zaprezentowano przede wszystkim najnowszego Windows'a 8. Jednak nie tylko. W kilku nadchodzących postach postaram się pokazać filmy warte obejrzenia.  Dziś na pierwszy ogień:

Future directions for C# and Visual Basic




Anders Hejlsberg prezentuje, co czeka nas w przyszłości w C# i VB. Nazwisko, którego nie trzeba przedstawiać nikomu - twórca języka.

Pierwsza część prezentacji skupia się na przedstawieniu async (znanego od jakiegoś już czasu), potem pojawiają się nowości. Hejlsberg używa tego nowego słowa kluczowego w aplikacji pobierającej informacje z NetFlix'a. Trzeba przyznać, że async oraz await dość znacznie poprawią czytelność kodu. Gdyby ktoś chciał już w chwili obecnej pobawić się tą technologią to jest ona dostępna.

Kolejną zaprezentowaną nowością będą CallerInfo attributes. Umożliwią one pobranie w runtime'ie informacji o kodzie, który wywołuje naszą metodę. Coś jak makra z C++.

Zostaną wprowadzone trzy nowe atrybuty [CallerFilePath], [CallerLineNumber] oraz [CallerMemberName], które możemy nadać dla parametrów metody. Jeśli metoda taka zostanie wywołana bez któregoś z parametrów oznaczonego nowymi atrybutami, zostanie on automatycznie wypełniony odpowiednią informacją.

Kolejną zaprezentowaną nowością jest Roslyn - "upublicznienie" kompilatora C#. Kompilator jako usługa - jak to jest reklamowane. Kompilator nie będzie już czarną skrzynką a zestawem API, który będziemy mogli wykorzystać do jego rozszerzania. Konwersja kodu z VB do C# w Visual Studio? Będzie to możliwe już niedługo za pomocą "skryptu", który sami sobie napiszemy. Interaktywna konsola w VisualStudio z podpowiadaniem i wprowadzaniem zmian na bieżąco? Proszę bardzo.


Struktura kompilatora w Roslyn
Zobaczymy co z tego wyjdzie, bo pierwsze CTP ma być za około 4 tygodnie. Zapowiada się ciekawie.

Sesja zdecydowanie warta obejrzenia dla wszystkich programistów .NET, choć jeśli ktoś ma dość dobre obycie z async może przewinąć film do mniej więcej 35 minuty.

Miłego poznawania nadchodzących nowości.

wtorek, wrzesień 13, 2011

256. day of the year - Programmer's day

For English...scroll down :).

Dziś 13. września - 256. (2^8, 0x100h, 100000000b) dzień roku :)

Wszystkim programistom tym na co dzień kodującym w C#, VB, C++ czy Fortranie - wszystkiego najlepszego. Oby nasza praca za rok nadal była (o ile jest?) dla nas przyjemnością.

Miłego programowania w nasze święto!


English version

Today is 13th of September - 256th (2^8, 0x100h, 100000000b) day of the year :)

To all programmers - whatever your language of choice is. C#, VB, C++ or Fortran - happy dev's day :] Let's hope, in one year's time, it will still be our passion not only our job!

Happy programming during Programmer's day!