• This is a usual time of the year for summaries so let’s keep the tradition alive and write one. Here’s my 2017 achievements split between months. January Blogging for 18 days straight – nothing near gutek’s achievement (whole year!) but still a nice streak Microsoft MVP title (thx Konrad Kokosa for pointing this one ;)) February […]

  • “Advent of Code is a series of small programming puzzles for a variety of skill levels.” Each day was a fun an interesting coding challenge. I’ve decided to practice and code this in python to learn the skill. Some of them might not be the best python scripting as I was short on time in […]

  • Some time ago I’ve attended a .net developer days 2017 conference. I was quite busy since (traveling, teaching .net, working) that only now I got some time to share some thoughts about it. As a bonus I’m including a short interview I did during the event. I need to state here, just to be clear, […]

  • We developers don’t like documentation. We don’t like to read it, and we even more we don’t like to write it. But sometimes it is worth to read it. Like when you find out that by using datetime in SQL DB you got a milliseconds precision but only if it ends on 0,3,7 (link). That […]

  • In the previous post we’ve removed some of the technical debt that could be found in our NetDeveloperPoland Website application. In this one we will remove it even more. We can even maybe reach a B? Let’s see where we’ll end up at the end of this part.

Kilka dni temu miałem okazję wygłosić kolejną prelekcję na Wrocławskiej Grupie .NET. Tym razem jako temat wybrałem debugger, który jest dostępny w Visual Studio. Jest to na prawdę kawałek narzędzia, który możemy wykorzystać dość sprawnie na naszą korzyść jeśli tylko wiemy gdzie szukać.
Prezentacja to tak na prawdę zbiór tego co publikowałem w ostatnich czasach na blogu jak również na devPytania  tak więc jeśli ktoś regularnie czyta bloga – zapewne nie znajdzie zbyt wiele nowości.


Powiedziałem o:

Z ciekawostek wspomniałem o:

Przykłady i prezentacja (niewiele w niej jest) do pobrania. W razie pytań zachęcam do kontaktu.

Dziś będzie o jeszcze jednym typie breakpointu. Kiedy może się on przydać zobaczmy na przykładzie.

Automatycznie właściwości

Wszyscy kochamy automatyczne właściwości, oszczędzają one nam czas i redukują ilość kodu jaki musimy napisać. Jedyną (?) ich wadą jest niemożliwość ich debuggowania. Często, tego nie potrzebujemy, ale czasem przydaje się możliwość ustawienia breakpoint’a na set lub get i np. podejrzenie call stack’a. Zwykłe postawienie w tym miejscu pułapki skutkuje następującym stanem. W Visual Studio widzimy breakpoint jednakże gdy tylko uruchomimy aplikację nasza pułapka znika.


Miejmy poniższy kod:

Code Snippet
  1. namespace ConsoleApplication2
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             new Program().SetMe = “I’m setting u”;
  8.         }
  9.  
  10.         public string SetMe { get; set; }
  11.     }
  12. }

Aby postawić pułapkę na takiej właściwości skorzystajmy z okna New Breakpoint (CTRL+B). To co nam się ukaże to okno tworzenia pułapki.

Dodawanie breakpointa

W polu Function skasujmy to co jest wpisane i zamiast tego dajmy: ConsoleApplication2.Program.set_SetMe (pełna nazwa nie jest wymagana jeśli nazwa identyfikuje nam obiekt jednoznacznie – inaczej podepniemy się do wszystkich takich właściwości). Upewnijmy się, że mamy odznaczone pole ‘Use IntelliSense…’ – inaczej dostaniemy komunikat o braku potwierdzenia.

Teraz jak uruchomimy naszą aplikację – zatrzyma się ona w momencie wywołania settera. Na pasku bocznym nie zobaczymy jednak oznaczenia ustawionej pułapki (tu może się przydać info z poprzedniego posta – Dźwiękowy breakpoint) jednakże będziemy mogli podejrzeć call stack, czy w oknie Watch podejrzeć wartość obiektu value. Oczywiście taka pułapka jest wylistowana w oknie Breakpoints i możemy robić z nią standardowe modyfikacje typu: warunkowy breakpoint, hit count, etc.

Podobne zabawy można robić z podpinaniem się pod event’y z tym wyjątkiem, że tam będą metody zaczynające się od add i remove.

Macie czasem tak, że podczas długiej sesji z debuggerem, wiedząc, że jakiś breakpoint nie wskoczy prędko przełączacie się z VS aby później zorientować się, że breakpoint już dawno czekan na waszą reakcję a wy po prostu nie zauważyliście tego małego migoczącego znaku VS w pasku?

O właśnie o ten mrygacz chodzi 🙂

Jeśli tak to ten post jest dla was – jeśli nie poczytajcie jak wkurzyć kolegów 🙂


Okazuje się, że VS prócz standardowych opcji, które możemy ustawić w Tools->Options posiada kilka dodatkowych trochę ukrytych (no dobra nie ukrytych, ale trzeba wiedzieć gdzie szukać :)). Okazuje się, że jak pójdziemy do Panelu sterowania i odpalimy okienko dźwięków to zobaczymy tam coś takiego:

Panel Sterowania -> Dźwięki
Zapomniane okno od czasów Win98 🙂

Jak widać, możemy sobie skonfigurować kilka dźwięków na pewne zdarzenia zachodzące w VS. Jest Breakpoint Hit, są zdarzenia z buildem więc można taki dźwięk ustawić jak nam się projekt nie zbuduje.

Tak więc od dziś jeśli potrzebujecie możecie zmusić VS do odegrania waszego ulubionego pliku wav jak zaskoczy breakpoint. A jak zdenerwować tym kolegę? Wystarczy ustawić… mało kto wie gdzie to się zmienia 🙂

Kolejny rok, kolejne podsumowanie.

30 postów (znów mało – coś się nie mogę przełamać tej granicy). 21 tys. odsłon, 37 tys. wizyt – trochę mniej niż w poprzednim roku. Tendencja spadkowa, którą trzeba będzie odwrócić.

Najpopularniejsze posty:

WPF Podsumowanie – 2111 wyświetleń – Post z 2009 roku zbierający wszystkie moje wpisy odnośnie WPF’a więc nic dziwnego, że ma trochę odwiedzin.

Visual Studio 2010 & .NET 4.0 – Pierwsze wrażenie – 1166 – Post z 2008! roku. Dziwne, że jeszcze popularny biorąc pod uwagę, że już niedługo przyjdzie nam działać na VS 11 :). No, ale widać jeszcze są osoby, które interesuje temat. VS 2010 sporo zmienił w stosunku do poprzedników, więc może stąd takie zainteresowanie wśród odwiedzających.

Tajniki DependencyProperty – 886 – Dependency Property to jedna z fundamentalnych rzeczy jeśli chodzi o programowanie z użyciem WPFa. Widać zainteresowanie tematem WPFa jest.

Niestety żaden z 30 postów z tego roku nie wszedł na pudło. Trzeba bardziej się postarać. Lepiej pisać i promować!

Do plusów minionego roku należy zaliczyć moje dwie prezentacje na Wroc.NET czyli Mono.Cecil oraz VS 11 oraz .NET 4.5. Liczę, że w nadchodzącym roku uda mi się także dać jakieś ciekawe prelekcje. Kilka pomysłów w głowie – zobaczymy jak wyjdzie z ich realizacją.

Plany zawodowe na nadchodzący rok także są. Może trochę zmienić kierunek nauki? Liznąć trochę czegoś innego niż .NET. Może Objective-C? Może Haskella (lub czegoś innego funkcyjnego). Zdecydowanie – pobawić się RavenDB, którą to ostatnio prezentował Marcin Najder. Ważne, aby wymyślić jakieś projekty na to, aby nauka miała jakiś cel a nie była sama sobie tylko nauką. Oczywiście postaram się wszystko zaprezentować z punktu widzenia programisty .NET, tak więc nie będzie powodów do rezygnacji z czytania bloga :). Zobaczymy tylko na ile córka pozwoli plany zrealizować 🙂

Wszystkiego najlepszego w 2012 i dzięki za odwiedziny. Stay tuned.

© phecsone – Fotolia.com

Z dzisiejszej ankiety na FanPage’u dotnetomaniaka wynika, że sporo z nas na co dzień tworzy aplikacje ASP.NET (czy to WebForms czy też MVC). Zapewne zatem przyda nam się trochę darmowej wiedzy od Googla, co i jak wpływa na wyniki wyszukiwania i PR.

Czy wiesz np. jak robot Google  traktuje adresy z ‘-‘ a adresy z ‘_’? Jest jakaś różnica a może nie ma? Czy adresy z ‘/’ na końcu są lepsze od tych bez? Czy dodawanie www do domeny ma jakieś znaczenie?

Na te i inne pytania odpowiedzą na kanale wideo GoogleWebmasterHelp. Zobacz i przekonaj się sam jakie są prawidłowe odpowiedzi na te pytania.

Miłego oglądania 🙂

Rauer © Więcej zdjęć na Fotolia.pl

Ostatnio dumając nad kielichem wina okazało się, że mój obecny PC, na którym pracuję zbliża się do swoich 4 urodzin. Lata świetlne jeśli chodzi o naszą branżę, a wiadomo, że prędkość jest ważna i jeśli spędzamy, nawet sekundy, czekając na jakąś akcję a powtarzamy ją wielokrotnie to sporo na tym tracimy.
Tak więc wyszedłem z wnioskiem formalnym do odpowiednich władz (;-)), że trzeba maszynę zaktualizować do czegoś szybszego.Wniosek został zaakceptowany tak więc działamy.

Jako, że nie mam wiedzy sprzętowej – bo od dawna nie śledzę już tego świata – wychodzę z zapytaniem o pomoc w wyborze do czytelników. Razem zapewne uda nam się skompletować coś wydajnego a jednocześnie w przystępnej cenie.

Przed wyborem komponentów jednak warto ustalić do czego dany komputer będzie nam potrzebny. Dzięki temu będzie można się skupić na wyborze odpowiednich elementów.

Zastosowania:

  • programowanie. Tu zaskoczenia nie ma (a przynajmniej nie powinno :)) – jako, że to moje główne zajęcie to zapewne przez 80%-85% czasu do tego będzie przeznaczony sprzęt. Sporo działam na wirtualkach (choć nie tyle pewnie co Procent), tak więc dobrze jakby sprzęt sprawdzał się na tym polu :). Poza tym nic nadzwyczajnego VS 2010 + R# w kilku instancjach na raz nawet 🙂
  • gry – tak, tak – od czasu do czasu zdarzy mi się pograć na tym sprzęcie i poza moimi ulubionymi TD czasem nawet w jakieś nowości (FPSy) – dobrze zatem jakby grafika dawała radę z nowymi, nadchodzącymi tytułami. Sądzę, że do 10% czasu wykorzystania na gry będzie 🙂
  • obróbka wideo – mam w planach trochę ponakręcać moją przyszłą kamerą video jakiś materiał no i trzeba będzie go zapewne jakoś obrobić. Dobrze jakby i tu trochę siły było 🙂

Jakieś dodatkowe wymagania? Karta grafiki musi obsłużyć 2+ wyjścia DVI :]. Aktualnie dwa monitory a w przyszłości być może +1, więc dobrze jakby nie trzeba było wymieniać karty za jakiś niedługo czas.

A jaki jest mój obecny sprzęt?

  • Procesor – Intel Quad Q6600 @ 2.4GHz
  • Płyta – Gigabyte GA-P-35-DS3P
  • Pamięć – 8GB (nie pamiętam/znalazłem info jaka)
  • Grafika – NVIDIA GeForce 8600 GTS 256 MB
  • Dysk – OCZ Vertex2 – 120 GB + WDC WD 320 GB

Co daje WEI na poziomie 6.5 – mało 🙂

Co warto umieścić w obecnej maszynie devPC? Jakie komponenty są najbardziej opłacalne jeśli chodzi o wydajność do ceny? Jaka kwota jest odpowiednia na główne narzędzie naszej pracy?

A na czym wy pracujecie? Co siedzi pod maską waszych maszyn do pracy?

Kilka dni temu, w zgodzie z tym co wykazała ankieta – Programiści to stworzenia nocne – kodowałem sobie jakieś mało znaczące rzeczy pomiędzy 2 a 3 nad ranem. Jako, że niewiele się o tej porze dzieje, można spokojnie skupić się na programowaniu :).

Jakież było moje zdziwienie, gdy o godzinie 2:28 nagle zaczęły spływać raporty błędów z dotnetomaniaka. Sam fakt pojawienia się błędów nie jest jeszcze jakiś niezwykły – wiadomo, od czasu do czasu może pójść coś nie tak. Bardziej interesujący był komunikat który pojawił się w mailu. A brzmiał on: Absolute time cannot be less than current time.


WTF – pomyślałem? Jaki czas i czemu nie może być mniejszy od obecnego? Dopiero po chwili dotarło do mnie co się dzieje. No tak – idiotyczna zmiana czasu (akurat ta jest mniej idiotyczna bo wracamy do naturalnego dla nas czasu ze sztucznego letniego).

Code Snippet
  1. public override ICollection<ITag> FindByUsage(int top)
  2. {
  3.     Check.Argument.IsNotNegativeOrZero(top, “top”);
  4.  
  5.     string cacheKey = “tagsByUsage:{0}”.FormatWith(top);
  6.  
  7.     ICollection<ITag> result;
  8.  
  9.     Cache.TryGet(cacheKey, out result);
  10.  
  11.     if (result == null)
  12.     {
  13.         result = base.FindByUsage(top);
  14.  
  15.         if ((!result.IsNullOrEmpty()) && (!Cache.Contains(cacheKey)))
  16.         {
  17.             Cache.Set(cacheKey, result, SystemTime.Now().AddMinutes(_cacheDurationInMinutes));
  18.         }
  19.     }
  20.  
  21.     return result;
  22. }

Powyższy kod powodował problem, a dokładniej wnętrzności metody Cache.Set. A jak ona wygląda?

Code Snippet
  1. public void Set(string key, T value, DateTime absoluteExpiration)
  2. {
  3.     Check.Argument.IsNotEmpty(key, “key”);
  4.     Check.Argument.IsNotInPast(absoluteExpiration, “absoluteExpiration”);
  5.  
  6.     RemoveIfExists(key);
  7.  
  8.     _manager.Add(key, value, CacheItemPriority.Normal, null, new AbsoluteTime(absoluteExpiration.ToLocalTime()));
  9. }

Na początku sądziłem, że problem leży w EnterpriseLibrary Caching Block, z którego korzysta portal, ale okazało się, że w nim wszystko jest w porządku. Co prawda wyjątek leci od nich, ale dostają czas w przeszłości – co mogą zrobić? W przypadku użycia drugiej metody (z parametrem TimeSpan), kod zachowuje się poprawnie.

Zmiana czasu z 3:00 na 2:00 spowodowała, że fragment próbujący ustawić czas wygaśnięcia obiektu w cache będzie wcześniejszy niż czas dodania tegoż obiektu. I stąd komunikat. Problemem jest użycie czasu UTC i zmiana go do LocalTime przy generowaniu obiektu AbsoluteTime.

Czyj to tak na prawdę jest problem? KiGGa czy EntLib’a? Wydaje mi się, że bardziej KiGG’a bo używa metody z parametrem AbsoluteTime, który ustawia nieprawidłowo. Robi to jednak nieświadomie, bo błędne działanie jest tylko raz w roku.

Pytanie tylko jak pamiętać o takich przypadkach i co ciekawsze jak je testować i zabezpieczać się aby nie występowały? Czy lepiej olać to i nie przejmować się tak rzadko występującymi problemami?

Wczoraj miałem przyjemność wygłosić kolejną prelekcję na spotkaniu Wroc.NET. Tym razem jako temat padło Visual Studio 11 oraz .NET Framework 4.5

Widziałeś tę sesję na 38. spotkaniu Wroc.NET? Ocenią ją! Możesz także ocenić ją na portalu speakerrate.

Materiały z tej prelekcji dostępne są na portalu grupy – Materiały 38. spotkanie Wroc.NET.


Co omówiłem podczas prelekcji? Pokazałem co nowego lub ulepszonego będzie nam oferować VS 11. Zademonstrowałem narzędzia: Code Clones (nowe), Concurrency Visualizer (stare), SQL Schema Comapre (stare) oraz TFS w najnowszej wersji. Z tego ostatniego pokazałem, jaki przepływ pracy będzie dostępny dla programistów. Visual Studio wesprze możliwość wysyłania próśb o review kodu innym programistom oraz możliwość podglądu zmian bezpośrednio w edytorze. Wygląda i działa to całkiem przyjemnie. Po zakończeniu review uwagi są przesyłane do programisty a on może je przejrzeć i uwzględnić.

Trochę dłużej zatrzymałem się także przy Concurrency Visualizer. To narzędzie jest dość niedoceniane z racji, że w VS201 było dostępne tylko i wyłącznie w wersjach Ultimate oraz Team Systems. Dzięki udostępnieniu jej od wersji Professional więcej osób będzie mogło skorzystać z jego działania.

Następnie przeszedłem do prezentacji nowości Frameworka. Jako, że była to sesja wprowadzająca w temat to pokrótce przedstawiłem te, które pojawią się w tej wersji bez wnikania we wszystkie szczegóły. Trochę dłużej zatrzymałem się przy WPFie, gdyż zmian wprowadzonych do tej części frameworka jest sporo.

Główną uwagę w tej części poświęciłem jednak WinRT oraz MetroUI. Pokazałem, jak będą wyglądały aplikacje pisane z użyciem WinRT oraz jak w naszych aplikacjach w prosty sposób można się zintegrować z Windows8. Visual Studio wspiera nas w tym dość mocno – aby nasza aplikacja zachowywała się naturalnie w systemie i dawała pełnie możliwości nie trzeba pisać bardzo dużo kodu.

Na koniec podsumowałem całość mówiąc, że od tej wersji zwolennicy pisania sterowników będą mogli skorzystać z dobrodziejstw IDE. Dodatkowo także Visual Studio umożliwia podgląd plików modeli używanych przy pisaniu gier z użyciem DirectX.

Update – 17.11.2011: Dodano powiązane posty z innych blogów.

Dawno dawno temu było…Reflector i długo długo nic (de facto na początku był jest ildasm ale nie o nim dziś).

Na szczęście pewnego lutowego dnia pojawiła się informacja, że już niedługo nie będzie on dostępny za darmo i się zaczęło. Flame’y, groźby i krzyki :). Stało się też sporo dobrego bo o to na rynku pojawiły się alternatywy. Ilspy, dotPeek oraz JustDecompile. Przyjrzyjmy się im z bliska i zobaczmy co mają do zaoferowania.

Reflector – umarł król…

Reflector to zdecydowanie najlepszy, z racji swojej “dorosłości” decompiler na rynku. Rozwijany na początku przez Lutz’a Roeder’a a następnie przejęty przez firmę Red-Gate. Posiadacze darmowej wersji muszą się zadowolić wydaniem 6.0 bez widoków na aktualizacje, co sprawi, że, w przypadku rozwoju .NET, Reflector straci na używalności a zastąpią go alternatywy. Płatna wersja narzędzia jest i (miejmy nadzieję) będzie rozwijana dalej.

Siła Reflector’a nie tkwi (narzędzie jest super to fakt) w nim samym, ale w ogromie dodatków, które powstały przez cały ten czas kiedy miał monopol wśród tego typu narzędzi. Jakiekolwiek czynności, które chcielibyśmy zrobić na podglądanym kodzie można szybko wykonać bo na na 99% istnieje dodatek który nam w tym pomoże. Np. modyfikacja kodu? Jest Reflexil.

Reflector podczas pracy

Obsługuje możliwość wyświetlania kodu zarówno w C#, VB.NET oraz F# (w zasadzie pokazuje jeszcze Delphi, MC++ oraz Oxygene, ale nie wiem czy ktoś z tego w ogóle korzysta?). Można także pokazać ILa jeśli ktoś ma taką potrzebę.

ILSpy – dobra alternatywa…


ilSpy
– Pełni OpenSource’owe narzędzie oparte na bibliotece Mono.Cecil. Dzięki dostępności kodu możemy je sobie rozwijać według potrzeb. Startuje długo jakby był napisany w Java (joke :]), ale potem oferuje pełnię swoich możliwości. Umożliwia wyświetlenie kodu w C# jak też IL (maniacy jak ja, którzy czytają gołego ILa to docenią).

ILSpy

Do plusów można zaliczyć przejście do dokumentacji MSDN po kliknięciu w daną instrukcję ILa, jak również przeskakiwanie pomiędzy etykietami w tymże widoku. Zdecydowanie ułatwia nawigację w kodzie i pozwala łatwiej śledzić flow programu.

dotPeek


dotPeek
– Narzędzie ze stajni panów z JetBrains. Wspiera jedynie C#. Jako duży plus należy zaliczyć tu możliwość otwierania podglądu jako zakładki. Bardzo ułatwia to nawigowanie się podczas przeglądania kodu. Posiada multum (jak na tego typu narzędzia) opcji i konfiguracji, co na początku utrudnia rozeznanie się w nim.

dotPeek

Umożliwia drukowanie wygenerowanego kodu, co choć na pierwszy rzut oka może wydawać się niepotrzebną opcją, czasem się przydaje. Umożliwia dość rozbudowaną nawigację po kodzie znaną z innego narzędzia JetBrains’a – R#. Możemy zatem przejść do konkretnego typu czy pliku, przenawigować się po właściwościach czy metodach danej klasy za pomocą ALT+strzałka w dół, a nawet zobaczyć hierarchię typów jeśli zajdzie taka potrzeba.

Hierarchia typów w dotPeeku

Jako jedyne narzędzie, nie jest oparte na bibliotece Mono.Cecil (czy to plus czy minus).

JustDecompile


JustDecompile
– Tutaj Telerik zwietrzył okazję i wypuścił swoje narzędzie do podglądu. Jako jedyny posiada instalator – co trochę denerwuje. Zwykle przy tego typu narzędziach chcemy je ściągnąć i zacząć używać bez konieczności instalacji. Na szczęście da się go wrzucić na usb’a i uruchamiać z niego. Inaczej potrzeba instalacji wykluczałaby to narzędzie praktycznie. na pierwszy rzut oka narzędzie to wyróżnia się całkiem przyjemnym UI ewidentnie napisanym w WPFie.

JustDecompile

Z dostępnych języków docelowych mamy: IL, C# oraz VB. Edytor podobnie jak IlSpy umożliwia, po kliknięciu w daną instrukcję, przekierowanie na strony MSDN do dokumentacji danego OpCode’u. Dodatkowo każdy typ jest “klikalny” i możemy nawigować po kodzie klikając na odpowiednie typy parametrów czy też zawracanych wartości. Narzędzie to jako jedyne (albo u innych tego nie znalazłem) umożliwia konfigurację kolorów, tak więc możemy sobie wynikowy kod dostosować do naszych ulubionych kolorów.

CodeReflect

CodeReflect – mało znane (chyba) narzędzie od firmy DevExtras. Wyglądem dość znacznie przypomina .NET Reflector’a, co można uznać za plus jeśli ktoś był przyzwyczajony do tego układu i działania.

CodeReflect

Podobnie jak powyżej umożliwia przechodzenie po dll’kach dzięki kliknięciom w odpowiednią nazwę typu. Dzięki temu możemy w dość prosty sposób nawigować po kodzie i przechodzić od jednej metody do drugiej za pomocą myszki. W IL’u brakuje jednak możliwości przejścia do dokumentacji w MSDN aby dowiedzieć się czegoś więcej o konkretnej instrukcji. Brakuje podstawowych opcji konfiguracji, ale gdyby nie było pod ręką nic innego to oczywiście narzędzie zda egzamin i pokaże nam co siedzi pod spodem naszego kodu…

… niech żyje król?

Czy jest jednogłośny zwycięzca tegoż rankingu? Nie wiem – ja nadal mam zainstalowanego Reflectora ale coraz częściej sięgam po ilSpy’a (tak w ogóle to mam wszystkie zainstalowane :]). Każdy chyba powinien sam wybrać, ale warto wiedzieć o ich mocnych i słabych stronach aby wybór był świadomy i celowy. Pomijając Reflector’a, pozostałe narzędzia są w fazie Beta lub Pre-Release więc jeszcze sporo może się w nich zmienić. Oby na lepsze…

Powiązane wpisy

Narzędzia do analizy aplikacji .NET – Security News
Darmowe dekompilatory .NET – Grzegorz Trybulski

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’.