RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Robin Sedlaczek
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
 CTO der Fairmas GmbH in Berlin
 Community Leader DNUG Berlin
 Blogger / .NET Code Geek
 Sprecher
 MSDN Moderator
 Freier Autor
(Entwickler.de, Heise, DotNetPro, Informatik aktuell)
 Open Source
(SharpGL, Roslyn, FxCopAnalyzers, Force Feedback)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
01 | Überblick
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
DIE COMPILER-BLACKBOX
 Compiler sind klassisch gesehen Blackboxes
 Geschlossene Softwarekomponenten
 Übersetzen Quellcode in etwas Ausführbares (Binärdateien)
Compiler
/// <summary>
/// This is the base class for all
/// shaders (vertex and fragment). It
/// offers functionality which is core
/// to all shaders, such as file
/// loading and binding.
/// </summary>
public class Shader
{
public void Create(OpenGL gl, uint shaderType,
string source)
{
// Create the OpenGL shader object.
shaderObject = gl.CreateShader(shaderType);
// Set the shader source.
gl.ShaderSource(shaderObject, source);
// Compile the shader object.
gl.CompileShader(shaderObject);
// Now that we've compiled the shader, check
// it's compilation status. If it's not
// compiled properly, we're going to throw
// an exception.
if (GetCompileStatus(gl) == false)
{
throw new ShaderCompilationException(
string.Format(
"Failed to compile shader {0}.",
shaderObject), GetInfoLog(gl));
}
}
Code File
1 1 0 0 1
0 1 1
1 1 0 1 0
1 1 1
0 1 1 1 1 0 0 1
1 0 1 0 1
1 1 0 0 1 0 1 1
0 1 1 1 0 1
1 1 0 1 0 0 0 1
1 0 1 0 1
0 1 1 1 1 0 0 1
1 0 1 0 1
1 1 0 0 1 0 1 1
0 1 1 0 1
1 0 1 0 1
Binary File
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
DAS PROBLEM MIT DER BLACKBOX
 tiefes Verständnis des Codes während Übersetzung
 Wissen, dass von IDEs und Werkzeugen genutzt werden könnte
 Problem: Wissen steht nach Kompilierung nicht mehr zur Verfügung
 Devs/Toolhersteller müssen ggf. Code selbst analysieren
Compiler
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
LÖSUNG DES PROBLEMS
 Aufbrechen der Blackbox
 Bereitstellung einer API-Schicht über dem Compiler
 Bereitstellung der Compiler-Ergebnisse über Objektmodelle
Phase 1 Phase 2 Phase 3 Phase 4
Blackbox wird zur Plattform:
.NET Compiler Platform
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
VORTEILE/NUTZEN
 Zugriff auf Compiler-Wissen zu jeder Zeit
 Code-bezogenen Aufgaben in eigenen Anwendungen
 Metaprogrammierung
 Codetransformation und Codegenerierung
 Interaktivität (VS Immediate Window, C# Script, REPL)
 Einbettung C#/VB in DSLs
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
OPEN SOURCE
 Roslyn ist Open Source!
https://github.com/dotnet/roslyn
 Verwaltet von der .NET Foundation
http://www.dotnetfoundation.org/projects
 Einblicke und Debugging des Codes
 Mitwirkung der Community
 Fork für eigene Zwecke
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
VISUAL STUDIO
 VS 2015: umfassender Umbau der IDE; Editor- und Sprachfeatures
basieren nun auf Roslyn
 .NET Compiler Platform SDK als VS-Extension verfügbar
 3 Projektvorlagen (Analyzer, Refactoring, Stand-Alone)
 Syntax Visualizer
 Visual Studio 2015 SDK vorausgesetzt
 Compiler/Workspace-APIs als NuGet-Packages verfügbar
 Scripting-API als NuGet-Package verfügbar
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Real World Example | Semantic Versioning
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SEMANTISCHE VERSIONIERUNG
v1
v2
v3
v4
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SEMVER.ORG
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
VERFOLGEN VON API-ÄNDERUNGEN
 öffentliche APIs in separater Datei
 API-Änderungen durch Compiler prüfen lassen
 API-Änderung nicht in Definition  Kompilierfehler
 Code-Fix hilft
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
VERFOLGEN VON API-ÄNDERUNGEN
 Nutzen
 Änderungen und Erweiterungen von APIs werden durch Compiler und Tooling kontrolliert
 Dokumentation von API-Änderungen out-of-the-box
 Prozesssicherheit, da Prozess automatisch ist
 API-Liste kann im Review verwendet werden
 Inkompatible API-Änderungen können sofort erkannt werden
 Versionsvergleiche von Code-Dateien nicht mehr nötig
 Visual Studio Extension
 Roslyn.Diagnostics.Analyzers
 Analyzer und Code-Fix via NuGet verfügbar: https://www.nuget.org/packages/Microsoft.Net.RoslynDiagnostics/
(Microsoft.Net.RoslynDiagnostics)
 Quellcode ist Open Source auf GitHub: https://github.com/dotnet/roslyn-analyzers
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
02 | Visual Studio Extensibility
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Real World Example | Critical Code
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
CRITICAL CODE
 Verwendung von kritischen Code visuell hervorheben
 kritischen Code markieren
 z.B. mit Marker-Interface
oder Attributen
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
CRITICAL CODE
 Nutzen
 Kritischer Code und seine Anwendung wird sichtbar
 Entwickler wird sensibilisiert im Umgang mit kritischen Code,
 Fehler und falscher Umgang können so reduziert werden
 In Code-Reviews kann gezielt kritischer Code unter die Lupe genommen werden, ohne diesen lange zu suchen
 Visual Studio Extension
 WaveDev.SensitiveCodeMarker von Robin Sedlaczek
 Quellcode ist Open Source auf GitHub: https://github.com/robinsedlaczek/WaveDev.SensitiveCodeMarker
 Demoprojekt auf GitHub: https://github.com/robinsedlaczek/WaveDev.RoomsReservationSystemDemo
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Real World Example | Alive
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
 Funktionsausführung direkt im Code-Editor
 Eingabe von Funktionsparametern via Popup
 Ergebnis und lokale Zustände werden direkt angezeigt
 direkt Anpassung lokaler Parameter möglich
ALIVE
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
ALIVE
 Nutzen
 Code-Ausführung ohne Anwendungsstart und Debugger
 Laufzeitverhalten von Code kann im Code-Editor direkt durchgespielt und analysiert werden
 Kontextwechsel zwischen Kodieren und Programmausführung fällt weg
 Ohne Kontextwechsel kann der Entwickler konzentrierter am Code arbeiten
 Ursache und Wirkung rücken dichter zusammen
 Direktes Feedback: Auswirkungen des Codes sind direkt am Entstehungsort sichtbar – im Editor
 Steigerung der Effizienz
 Reduktion von Entwicklungszeiten
 Visual Studio Extension
 ALIVE von Code Connect (http://blog.comealive.io/Three-Months-of-Alive/)
 CodeConnect gehört nun zu Microsoft (http://blog.comealive.io/Code-Connect-Joins-Microsoft/)
 Extension ist momentan leider nicht über die Visual Studio Gallery verfügbar!
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Real World Example | Application Scripting
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
APPLICATION SCRIPTING
 eigene Anwendung Script-fähig machen
 C# als Script-Sprache verwenden
 Roslyn bietet dafür die C# Scripting API
Fallbeispiel ModelR
 Kollaboratives 3D Modelling Tool
 Client-Server-Anwendung (basierend auf SignalR)
 Integriertes Scripting mit der C# Scripting API
 Script-Editor mit Syntax Highlighting
 Ausgabe von Kompilierfehlern
 Live Script Execution beim Tippen
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
APPLICATION SCRIPTING
 Script erlaubt direkten Zugriff auf Anwendungsobjekte
 es können aber auch eigene Objekte erzeugt werden
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
APPLICATION SCRIPTING
 Nutzen für Benutzer
 Flexibilität – Anwendung kann in sich erweitert werden, ohne Neukompilierung durch den Benutzer
 Erweiterbarkeit – Anwendung kann von allen Benutzer beliebig erweitert werden
 Effektivität – komplexe wiederkehrende Prozesse können vom Benutzer automatisiert werden
 Anpassbarkeit – ein Nutzer kann sich die Anwendung nach seinen Vorstellungen/Vorgaben anpassen
 Nutzen für Entwickler
 Beliebige APIs können dem Scripting zur Verfügung gestellt werden
 APIs sind dann zur Anwendungslaufzeit verfügbar und können dort ausprobiert werden
 Kontextwechsel zwischen Kodieren und Programmausführung fällt weg
 Code kann dort geschrieben werden, wo er seine Auswirkung hat
 Direktes Feedback der Auswirkungen sichtbar
 Steigerung der Effizienz
 Reduktion von Entwicklungskosten
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
APPLICATION SCRIPTING
 Fallbeispiel ModelR
 WaveDev.ModelR von Robin Sedlaczek
 Quellcode ist Open Source auf GitHub: https://github.com/robinsedlaczek/ModelR
 Clonen, Kompilieren, Ausführen: WaveDev.ModelR.Server zuerst starten, danach WaveDev.ModelR
 4 vordefinierte ModelR-Benutzer: Robin (PW: robin), Sarah (PW: sarah), Jan (PW: jan), Sebastian (PW: sebastian)
 Script-Kontext über globale Eigenschaft „ModelR“ bereitgestellt
 Über den Script-Kontext kann auf die Anwendungsobjekte zugegriffen werden (Users, SceneObjects)
 Neue Objekte werden aus Script ausgelesen und automatisch in die Szene übernommen
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Real World Example | Force Feedback Programming
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
FORCE FEEDBACK PROGRAMMING
 Force Feedback Programming erzwingt sauberen (Clean) Code
 Sauberkeit muss zuerst sichtbar gemacht werden
 Anwendung von Metriken (z.B. Anzahl Zeilen von Methoden)
 Ergebnisse werden direkt im Code visualisiert
 Entwickler erhält damit direktes Feedback zur Code-Qualität
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
FORCE FEEDBACK PROGRAMMING
Wer nicht hören will, muss fühlen! Es wird
anstrengend, wenn man versucht,
unsauberen Code zu erweitern…
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
FORCE FEEDBACK PROGRAMMING
 Nutzen
 Unterstützung bei dem Vorhaben, Clean Code zu schreiben
 Direktes Feedback zur Code-Qualität – genau dort, wo der Code entsteht (in-time, in-place)
 Entwickler werden gezwungen darüber nachzudenken, was sauberer Code ist
 Erschwertes Tippen zwingt den Entwickler, mehr sauberen Code zu schreiben
 Trainingswerkzeug für Einsteiger, Auszubildende und Junior-Entwickler
 Sauberer Code erhöht die Wartbarkeit und Erweiterbarkeit
 Steigerung der Entwicklereffizienz
 Reduktion von Entwicklungskosten
 Visual Studio Extension
 Force Feedback Programming von Ralf Westphal und Robin Sedlaczek
 Quellcode ist Open Source auf GitHub: https://github.com/robinsedlaczek/ForceFeedbackProgramming
 Extension via Visual Studio Gallery verfügbar: https://visualstudiogallery.msdn.microsoft.com/d909888c-fdf0-492c-bfd9-
6596e56530a8
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Roslyn – Produktivitätssteigernder Einsatz eines
offenen Compilers
„Seid kreativ!“
RobinSedlaczek.wordpress.com
RobinSedlaczek
RobinSedlaczek@live.de

BASTA! 2016 - Roslyn & Visual Studio Extensions

Hinweis der Redaktion