Pokazywanie postów oznaczonych etykietą Roslyn. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Roslyn. Pokaż wszystkie posty

wtorek, 2 czerwca 2015

BUILD 2015 (13 ost) - Web, VS 2015, Edge, EF 7, Roslyn, Multilingual App Toolkit

Ostatnia porcja sesji z tegorocznego BUILD, na jakiej zaczepiłem oko. Narzędzia web w VS nie zaskakują, natomiast już w Edge można odnaleźć trochę świeżo wprowadzonych udogodnień, o implementacji kolejnej porcji nowych standardów Web nie wspominając. EF 7 może niczym niezwykłym nie rozwala, ale wydaje się być poprawnie budowanym frameworkiem, który w obecnych czasach o wiele lepiej spełni oczekiwania niż wcześniesze wersje. Obecna czwarta edycja Multilingual App Toolkit wspiera nie tylko aplikacje uniwersalne Windows, ale także te pisane w Xamarinie.

 

Modern Web Tooling in Visual Studio 2015

bower: samo zapisanie pliku konfiguracyjnego uruchamia pobieranie pakietów

http://1drv.ms/1JbXTBJ

 

Entity Framework 7: Data for Web, Phone, Store, and Desktop

osobny komponent wspierający SQL Server

encja - klasa POCO

logowanie zapytań sql

integracja z niestandardowymi zapytaniami Sql

ef - polecenia z linii komend w ASP.NET

dodawanie własnej logiki przy zapisywaniu zmian

aplikacje uniwersalne w Windows 10:  EntityFramework.Sqlite

zapisywanie do lokalnej bazy przy braku łączności z siecią i późniejsza synchronizacja

demo: aplikacja desktopowa Mac + Postgress

demo: aplikacja Xamarin Forms, iOS 6

http://1drv.ms/1HE9Km7

 

.NET Compiler Platform ("Roslyn"): Analyzers and the Rise of Code-Aware Libraries

http://1drv.ms/1ADqi0N

 

The "Project Spartan" Rendering Engine That Makes the Web Just Work

dźwięk uzależniony od położenia

CSS filters

warunkowe CSS np. supports (filter: blur(28px))

srcset - ładowanie wskazanej wersji obrazka w zależności od gęstości pikseli

emulacja większego dpi na desktopie:  zoom (np. 200% = 2x) + refresh strony

foreign object - html wewnątrz svg

http://1drv.ms/1K2YNj4

 

Building a Single-Page App Using Angular and TypeScript Using Office 365 APIs

http://1drv.ms/1GPimue

 

What’s New in F12 for "Project Spartan"

F12 znajduje wszystkie instancje IE i Spartana, także hostowane w aplikacjach (np. Windows Forms, WPF)

nowe narzędzie do sieci, napisane w TS, używane także w VS, domyślnie włączone, z search po wszystkim

debugger - breakpointy dla strzałów sieciowych, logujące, dla zdarzeń, zatrzymujące; async call stack (np. strzał sieciowy)

asynchroniczna operacja dla zdarzenia DOMContentLoaded, także dla AddEventListener z click, podobnie przy xhr.onreadystatechange

lepsza nawigacja po źródłach np. TS

łatwe odniesienia do źródeł np. TS, SCSS

obsługa składni SCSS i nawigacja

pretty printing

nowy profiler JS, łatwe przechodzenie do źródeł

eksperymentalnie: edycja JS, CSS, inspekcja cookie, local i session storage

http://1drv.ms/1KJwnMh

 

Cross-Platform Localization with the Multilingual App Toolkit

wsparcie ostatniej wersji toolkitu także dla aplikacji Xamarin (z Xamarin Forms, ale także i bez - z natywnym UI w iOS i Android)

http://1drv.ms/1dKqjFU

piątek, 11 kwietnia 2014

BUILD 2014 - przyszłość C#, KeyNote 2

Przyszłość C#, VB, “Roslyn” kolejne ważne tematy. Tegoroczny keynote z dnia drugiego niedość, że był tradycyjnie już o rozwiązaniach serwerowych i chmurze, to w drugiej jego połowie poruszono zagadnienia związane m.in z rozwojem C#, “Roslyn” jako Open Source, Xamarin, “Roslyn” z Xamarin, .NET Foundation,  urządzeń z Windows, czujników ludzkiego ciała dla WP, uniwersalnych aplikacji z Xamarin.

 

The Future of C#

Opublikowane kiedyś newsy na temat nowinek w składni C# zostały obecnie potwierdzone, część przykładów była dokładnie taka sama, część jeszcze inna.

image

image

image

image

image

image

image

switch po typie

image

enum z przesunięciami bitowymi

image

image

image

skrótowa definicja klasy z konstruktorem

image

konstruktor z automatycznym tworzeniem pól, rzecz znana z TypeScript oraz z wcześniejszych newsów nt. C# 6

image

ustawianie indeksera w obiekcie anonimowym

image

definicja parametrów out w miejscu ich użycia - znane z wcześniejszych newsów o C# 6

image

image

image

image

 

Day 2 Keynote

Wybrane uwagi z drugiej części poświęconej rozwojowi C#, .NET, aplikacjom i urządzeniom. Widać duże znaczenie Xamarin, który doskonale wypełnia lukę w plaformie .NET (ciekawe czy kiedyś dojdzie w końcu do przejęcia) i integruje się z najnowszymi osiągnieciami takimi jak “Roslyn” czy uniwersalne aplikacje.

image

Open Source: każdy może zobaczyć kod kompilatorów “Roslyn”

image

każdy fan C# może kupić koszulkę C#, jaką miał na sobie szef Xamarin –Smile

image

customowy kompilator C# przed chwilą skompilowany ze źródeł “Roslyn” (obsługa znaków << >>) bez problemu zadziałał z kodem Xamarin na iOS

image

otwarty rozwój projektów związanych z .NET

image

a to… to urządzenie do grania, które może kiedyś oprogramuję sobie w .NET MicroFramework –Winking smile

image

wcześniej może jednak zacznę monitorować swoją aktywność fizyczną dzięki czujnikom, które obsługuje Windows Phone 8.1

image

image

to z kolei … odjazd na kamerze i Web GL

image

aplikacje uniwersalne na Windows, Windows Phone, Xbox w C++ i DirectX

image

rozszerzenie uniwersalnych aplikacji na iOS i Android dzięki Xamarin

image

niedziela, 28 kwietnia 2013

dotnetconf (1)

Ostatnio odbył się event dotnetConf - The .NET Community Virtual Conference. Co ma światowa społeczność .NET do powiedzenia o .NET w 2013 roku?  No właśnie, odnoszę wrażenie, że pod tym szyldem zostało wrzucone wszystko to, co ostatnio zwróciło moją bądź moich kolegów uwagę. Mamy m.in “Roslyn”, responsive design, git, open source, programowanie w JavaScript, ASP.NET MVC, ASP.NET Web API, SPA, Windows Phone 8, MongoDB, NoSQL, obsługę istniejących baz danych w EF, Windows Azure.  Po raz kolejny zniknęły tradycyjne tematy związane z .NET. Najbardziej typowe dla .NET są prezentacje o “Roslyn” (ostatnia oznaka rozwoju samego .NET/C#), ASP.NET Web API i Windows Phone 8, EF, Azure, może jeszcze jedna zahaczająca o ASP.NET MVC (6/17). Co ciekawe zabrakło prezentacji o Windows 8. Czyżby nie przekonał społeczności? Owszem są też bardziej uniwersalne tematy powiązane z .NET, jak debugowanie, testowanie, NoSQL, open source (5/17). Jednak spory udział ma JavaScript i tworzenie aplikacji webowych po stronie przeglądarki (5/17). Zobaczymy co przyniesie BUILD 2013, ale każda kolejna konferencja daje mi znak, że dotychczasowa era intensywnego rozwoju .NET i C# gdzieś się skończyła, coś przeewoluowało, teraz tylko tematy webowe lub mobilne. W każdym razie wybrałem sobie dwunastkę do obejrzenia, na razie obejrzałem dwie, o których pisze pod spodem.

 

Advanced Windows Phone 8 Development

Pakiety nuget

Json.Net – deserializacja JSON

HTTP Client Libraries - HttpClient z obsługą async!  (prerelease)

image

image

Pokaz MVVM, IoC, danych w design time, mowa, trochę agenta. Po tytule spodziewałem super zaawansowanych rzeczy, a tymczasem wszystko okazało się znajome. Jedynie dwa pakiety nuget i kod klienta JSON zwróciły moją większą uwagę. Sporo problemów podczas prezentacji z dźwiękiem, 3 czy 4 razy były przerwy i za każdym razem był pokazywany czuwający Scott Hanselman –;)

 

Utilize Compilation as a Service to create the next level plugin capability

Ponieważ ostatnio używałem najnowszej wersji “Roslyn”, więc prezentacja początkowo nie przykuwała mojej uwagi. Po kilkunastominitowej części robi się znacznie ciekawiej, bo następuje pokaz pisania plug-inu dla Visual Studio.

image

Kwestie bezpieczeństwa przy ładowaniu plug-inów. To co ostatnio akurat widziałem – complify i konsolowa aplikacja REPL. Programowanie aspektowe – Postsharp, Roslyn i refleksja:

image

image

image

W sumie nie jest to coś nadzwyczajnego. Do plug-inu Postsharpa wrzucona dynamiczna kompilacja. Jednak całościowo robi wrażenie.

środa, 24 kwietnia 2013

Dynamiczne aplikacje Web API

ASP.NET Web Forms są powszechnie uważane za nie najnowszą już technologię. Dziś wszyscy sobie na ogół chwalą ASP.NET MVC lub coraz częściej Web API. Czy słusznie? Na ogół tak, dostajemy wszak uporządkowaną warstwową architekturę MVC czy same tylko serwisy Web API. Odkryłem jednak ostatnio, że im nowsza z wymienionych technologii tym mniej w niej dynamicznej kompilacji, co z kolei utrudnia modyfikację aplikacji bez jej ręcznej całościowej rekompilacji. I tak:

  • ASP.NET Web Forms - największy zakres dynamicznej kompilacji (można dużo zaszyć w stronach)
  • ASP.NET MVC - dynamiczną kompilacją objęte widoki (ale modeli  i kontrolerów już to nie dotyczy)
  • ASP.NET Web API - brak w standardzie dynamicznej kompilacji (same modele i kontrolery, domyślnie raz rozpoznana lista kontrolerów jest cachowana)

Czy jednak w nowszych technologiach nie da się uzyskać podobnych efektów? Czy musimy koniecznie żałować dynamicznej kompilacji ASP.NET? M.in na te pytania starałem się odpowiedzieć poszukując możliwości pisania aplikacji Web API w sposób dynamiczny / częściowo dynamiczny. Po praktycznych eksperymentach ukształtowały się następujące pozycje:

  1. Dynamiczne Web API (assembly resolver)
  2. Dynamiczne Web API (“Roslyn” - konsola)
  3. Dynamiczne Web API (“Roslyn” - dynamiczne odświeżanie)
  4. Dynamiczne Web API (“Roslyn” - assembly resolver)
  5. Dynamiczne Web API (scriptcs)

Omówię je teraz po kolei.

Assembly resolver

image

Zacznijmy od standardowych rozwiązań. I tak mamy w Web API interfejs IAssembliesResolver. Jego implementacja służy do określenia listy assemblies, które będą uwzględniane przy szukaniu kontrolerów. Domyślnie uwzględniane są rzeczy z naszego projektu po jego kompilacji, ale możemy to zmienić i załadować w locie dll-kę. Pokazuje to oficjalny Custom Assembly Resolver Sample. W moim wydaniu nieznacznie uległo to modyfikacji, tak by ładować dll-ki ze wskazanego folderu:

image

Tak zdefiniowany assembly resolver rejestrujemy:

Untitled

“Roslyn” (konsola, dynamiczne odświeżanie)

Jeśli rozważamy dynamiczność, to może w większym zakresie, tak by mieć dynamiczną kompilację?  W końcu ASP.NET takie coś oferuje. Z pomocą przychodzi nam przyszłościowy projekt “Roslyn”. Jest to realizacja idei “compilation as service”. Do dyspozycji dostajemy wysokopoziomowe API, które pozwala bardzo szybko w locie kompilować dynamicznie kod. Umożliwia to pisanie i dynamiczne wykonywanie C# w konsoli, co jest typowe dla skryptowych języków.

Podobno są plany, by zastępować kompilatory w językach .NET “Roslynem”. Podobno jest też używany wewnętrznie i został użyty w Web Matrix 2. To technologia wciąż rozwijana. Ostatnie wydanie to Microsoft "Roslyn" September 2012 CTP. Doinstalowuje się ładnie do Visual Studio 2012, także po wszystkich najnowszych aktualizacjach (co sprawdziłem osobiście). To wydanie nie wspiera już VS 2010. Nie możemy rozpowszechniać binariów z tej rozwojowej wersji, ale instalacja pakietu nuget o nazwie roslyn nie podlega już takim ograniczeniom. Dystrybucja przez nuget zawiera wszystkie niezbędne biblioteki do używania, jedynie nie dostaniemy większego wsparcia przez Visual Studio (m.in szablony, kolorowanie składni i intellisense na plikach skryptowych np. C# Script, konsola interaktywna). Warto pamiętać o “Roslyn”, zwłaszcza że na zaczynającej się jutro dotnetconf będzie to temat jednej z sesji.

Jeśli chodzi o Web API, to polecam ostatnio odkryty blog Filipa W. http://www.strathweb.com/. Jeśli chodzi o tematykę Web API + “Roslyn”, to na polecam szczególnie lekturę postów:

image

Na ich podstawie odtworzyłem sobie:

  • skryptową aplikację  hostującą Web API (uruchamianą przez program rcsi lub w Visual Studio przez View > Other Windows > C# Interactive)
  • aplikację Web API hostowaną na IIS, która buduje dynamiczne assembly ze skryptów z kontrolerami i modelami (co odbywa się w specjalnej implementacji selektora kontrolerów za każdym odświeżeniem strony lub wywołaniem z przeglądarki)

Zatrzymajmy się na chwilę przy pełnym rozwiązaniu z dynamicznym odświeżaniem kontrolerów przy każdym strzale. Umożliwia to klasa NoCacheSelector, która u mnie ma zparametryzowane ścieżki do folderów ze skryptami:

image

Powyższy selektor kontrolerów rejestrujemy:

Untitled2

Skrypty kompilowane w locie:

image   image

Dostajemy największą elastyczność. Bez rekompilacji całego projektu przy każdej interakacji dostajemy kontrolery odpowiadające aktualnie znajdującym się plikom C# w folderach Controllers (z modelami z plików C# w Models). Jak pisze jednak autor, to eksperyment z pewnym ryzykiem. Przy każdym strzale zostaje dodawane nowe assembly do domeny i pozostaje jedynie liczyć na wymuszone sprzątanie przez garbage collector.

“Roslyn” - assembly resolver

Tą wersję wymyśliłem jako miks koncepcji dotychczas zaprezentowanych. Rezygnuję z ciągłego odświeżania kontrolerów (ale także ich rekompilacji) przy każdym strzale, a w resolverze assemblies zamiast szukania i ładowania statycznych dll-ek z dysku buduję dynamiczne assembly ze skryptów z kontrolerami i modelami.

image

scriptcs

Projekt scriptcs to ostatnio bardzo medialne pojęcie. Glenn Block po swoich doświadczeniach z node.js w Windows Azure postanowił zrobić coś podobnego w… C#. Powstał projekt open source, który pozwala pisać skryptowo aplikacje w C#, taki znacznie lepszy PowerShell. Piszemy tyle C# ile potrzebujemy, odpowiednie biblioteki są dociągane przez nuget, a całość jest dynamicznie kompilowana przez “Roslyn”. Wystarczy notatnik, nie jest potrzebne Visual Studio. Do projektu jako jeden z trzech głównych osób dokoptował Filip W. który wniósł swoje wcześniejsze doświadczenia z Web API i “Roslyn”.

Kilka linków:

Warto być świadomym obecności:

Na początek wziąłem przykład webapihost.

image

Po zainstalowaniu/zbudowaniu aplikacji konsolowej scriptcs.exe, dodaniu jej do ścieżki path w systemie, możemy uruchomić przykład. Zostaną pobrane wymagane pakiety i zapisane do folderu packages. Do folderu bin trafiają używane biblioteki. Dostajemy w pełni skryptową aplikację Web API w C# hostowaną w konsoli. Czyż nie jest to wyrażenie idei “node.cs” ?

Jeszcze prościej możemy to osiagnąć za pomocą scriptcs-webapi. Całość aplikacji może wyrażać jeden plik:

image

W tym przypadku widać jeszcze większe podobieństwo do node.js. Po co definiować za każdym razem routing? Czyż nie wystarczająco i bardziej minimalistycznie jest definiować same kontrolery, które wyrażają także w jakiś sposób adres? Bawiąc się node.js miałem właśnie skojarzenie, że wystawiane metody REST-owe to jakby akcje kontrolerów… A cała prostota wynika z odpowiedniego zaprojektowania pakietu express.

Na tym kończę przegląd dynamicznych rozwiązań dla Web API. Dodam tylko, że w tym temacie miałem jeszcze zajawki odnośnie:

  • wykorzystania MEF w Web API
  • integracji ASP.NET z Web API

W przypadku MEF dla .NET 4.5 mamy obecnie jego drugą lekką wersję w postaci  MEF for web and Windows Store apps. Owszem można znaleźć w sieci wiele przykładów łączenia Web API z różnymi wersjami MEF, jednak często dotyczą one wpięcia w infrastrukturę dla IoC. Często wydają się też dość skomplikowane (np. http://kennytordeur.blogspot.com/2012/08/mef-in-aspnet-mvc-4-and-webapi.html). Dużo informacji dostarcza też wątek http://mef.codeplex.com/discussions/389317.

Jak patrzyłem po sieci, to niektórzy próbowali definiować kompozycję na folderze, ale nie wiem czy komuś udało się osiągnąć wykrywanie w czasie run-time nowych kontrolerów, bo są one domyślnie cachowane przez Web API. Może za mało wszedłem w temat, ale wydaje mi się, że również MEF musiałby robić rekompozycję przy każdym strzale, co z pewnością byłoby nie najszybsze (lub trzeba by pomyśleć o wykrywaniu zmian). Z kolei samo jednokrotnie zaczytanie dll-ek w sposób dynamiczny mogę zrealizować w całości w oparciu o infrastrukturę Web API, jak pokazałem w pierwszym przykładzie.

Co do integracji z ASP.NET, to zainspirował mnie oficjalny przykład Web Form Sample oraz post. Jednak po przeczytaniu posta architekta ASP.NET, widać jak na dłoni, że standardowa dynamiczna kompilacja ASP.NET/Razora jest znacznie gorsza od kompilacji wykonywanej za pomocą “Roslyn” (jest znacznie wolniesza, bo korzysta z emitowania i potrzebuje innego procesu). Nawet powstał projekt https://github.com/davidebbo/RoslynRazorViewEngine zaprzęgający “Roslyn” do kompilacji Razora, co znacząco zwiększa wydajność.