Martin Hey: Code Coverage Reports für UnitTests in Android Studio

Android Studio unterstützt automatisiertes Testen bereits out-of-the-box. Dabei wird grundsätzlich zwischen verschiedenen Arten von Tests unterschieden. Eine detaillierte Beschreibung findet man im Testing-Abschnitt der Doku.


Nach dem Durchführen der Tests erhält man einen Testreport und (sofern aktiviert) auch einen mit JaCoCo erzeugten Coverage-Report. Allerdings war das Android-Studio-Team hier nicht ganz so konsequent, denn die Coverage-Reports werden für UnitTests nicht erzeugt. Hier spiegeln sich lediglich die Android-Tests wider.

Wie kann man nun erreichen, dass meine ganz normalen Unit-Tests mit JUnit auch einen solchen Coverage-Report erzeugen. In meinem Projekt habe ich nämlich lediglich JUnit-Tests und ich mocke den ganzen Android-Kram mit Hilfe von Robolectric und Mockito - was zugegebenermaßen dafür sorgt, dass ich keine Integrationstests habe, aber dafür eben die Funktionen sauber getestet sind ohne dass ich ich auf einen Emulator verlassen muss.

Nach stundenlangem Suchen in ähnlich gelagerten Problemen auf Stackoverflow bin ich dann in den Kommentaren auf ein Plugin gestoßen, das mein Build-Script genau mit den erforderlichen Funktionalitäten erweitert wird - und seit der Version 0.2.1, welche derzeit bereits als Snapshot vorliegt werden auch Intermediates ignoriert, die "$$" im Dateinamen haben.

codefest.at [MS]: Microsoft R Server–Big Data Analysen für Studierende kostenlos

Microsoft R Server, formell Revolution R Enterprise (RRE), ist die derzeit schnellste, kostengünstigste Big-Data-Analyseplattform der Unternehmensklasse. Mit Microsoft R Server erhalten Studenten, Dozenten und Organisationen Zugriff auf dieselben Big-Data-Analysefunktionen, die bereits mit großem Erfolg in der Geschäftswelt eingesetzt werden.

imageMicrosoft R Server unterstützt eine Vielzahl von Big Data-Statistiken, prädiktiven Modellen und Machine Learning-Funktionen. Zudem profitieren Benutzer von kostengünstigen und faktenbasierten Big Data-Analysen, die mit der R-Sprache, dem Standard für moderne Analysen, kompatibel sind.
Microsoft R Server ist mit den folgenden Betriebssystemen kompatibel:

  • Windows

64-Bit Windows 7                           

64-Bit Windows 8.0, 8.1               

64-Bit Windows 10                         

64-Bit Windows Server 2008 SP2                             

64-Bit Windows Server 2012  

  • Linux

64-Bit Red Hat Enterprise Linux (or CentOS) 5.x oder 6.x

64-Bit SUSE Linux Enterprise Server 11 SP2 oder SP3.

  • Hadoop-Verteilungen/Betriebssysteme

Cloudera CDH 5.0, 5.1, 5.2, 5.3 auf RHEL 6.x

Hortonworks HDP 1.3 auf RHEL 5.x oder 6.x

Hortonworks HDP 2.0 über 2.3 auf RHEL 6.x

MapR M3/M5/M7 v2.02, 3.1, 3.1.1, 4.0.1, 4.0.2 auf RHEL 6.x

  • Teradata-Version/Betriebssysteme:

Teradata Database 14.10, 15.00, 15.10 auf SLES 10.x oder 11.x

Norbert Eder: Visual Studio Code Quicktipp #11 – Mit TAB navigieren

Wir navigieren mit TAB durch Elemente der Benutzeroberfläche und mit SHIFT+TAB wieder zurück. Wohl der Großteil der Computer-Benutzer kennt diese Funktion. In einem Editor fügt die TAB-Taste ein TAB ein und dient also nicht der Navigation. In Visual Studio Code gibt es mit der Version 0.10.8 allerdings eine Möglichkeit dazu. Hierfür ist der Editor mit STRG+M in den Tab moves focus-Modus zu schalten, erkennen an der roten Einblendung in der Statusleiste:

Visual Studio Code - Tab Moves Focus

Visual Studio Code – Tab Moves Focus

Nun kann mit TAB bzw. SHIFT+TAB durch die einzelnen Elemente von Visual Studio Code navigiert werden.

Zu beachten ist, dass dieser Modus nur mit Fokus am Editor aktiviert bzw. deaktiviert werden kann. Ich denke, dass es hier noch eine Nachbesserung geben wird.

The post Visual Studio Code Quicktipp #11 – Mit TAB navigieren appeared first on Norbert Eder.

Karsten Kempe: Bessere Qualität durch Pull Requests

TFSlovesGitWenn gleichzeitig an mehreren Softwareversionen entwickelt wird, dann ist eine gute Strategie gefragt, um die Versionen sauber voneinander zu trennen. Und natürlich braucht es Mechanismen, die sicherstellen, dass es immer einen zentralen Quellcode-Strang gibt, der jederzeit auslieferbar ist. Und alles was wir dafür brauchen, finden wir in den Visual Studio Team Services – Branches und Pull Requests.

Jeder von Euch, der eine Versionskontrolle einsetzt, wird sich mit großer Wahrscheinlichkeit schon mit dem Thema „Branching“ beschäftigt haben. Entweder freiwillig oder unfreiwillig. Wenn Eure Versionskontrolle Git ist, dann ganz sicherlich freiwillig, den Branching ist eins der wesentlichen Erfolgsfaktoren dieses Quellcodesystems.

Hinweis: Wer sich damit noch nicht so gut auskennt, dem empfehle ich den ALM Rangers Version Control Guide.

Um das Branchen für Developer noch einfacher zu gestalten, gibt es seit dem letzten Update auf Visual Studio Team Services eine neue Funktion, um einen Branch direkt von einem Work Item aus zu erstellen.

VSTS Work ITem Create Branch

Dadurch wird im Remote-Repository ein neuer Branch angelegt und eine Verknüpfung zum Work Item hinterlegt, die später bei einem Pull Request als Information angezeigt wird.

Diese neue Funktion unterstützt sehr schön den üblichen Workflow, verschiedene Features in unterschiedlichen Branches zu entwickeln. Der von mir bereits erwähnte Pull Request kommt dann zum Einsatz, wenn Teile des Features oder das komplette Feature fertiggestellt sind und diese in das Produkt integriert werden sollen. Der Pull Request ist ein Workflow zur Verbesserung der Code-Qualität, der gleich mehrere Qualitätskriterien überprüft. Welche das sind und wie der Workflow genau funktioniert, erkläre ich Euch zusammen mit Daniel Meixner in diesem kurzen Video.

Hinweis: Die Aufzeichnung ist schon wieder zwei Monate her, da gab es das „Create Branch from Work Item“-Feature noch nicht. Also nicht wundern, warum wir das nicht zeigen.

[0] https://www.visualstudio.com/news/2016-jan-25-vso

Marco Scheel: Links for 2016-02-09 [del.icio.us]

codefest.at [MS]: Microsoft Azure für Schüler und Studenten–jetzt neu mit Azure Mobile Apps und SQL Datenbank

Bislang konnten Schüler und Studenten schon kostenlos via DreamSpark Azure Services, wie Azure App Service App Web, MySQL Datenbank von ClearDB, Visual Studio Application Insights und Visual Studio Online nutzen.

Das Angebot wurde nun in einem ersten Schritt um SQL Datenbank und Mobile Apps erweitert.

Jetzt gleich Azure Account aktivieren und die Services nutzen!

image

codefest.at [MS]: Kostenlose Tools und Azure mit dem Visual Studio Dev Essentials Program

Microsoft bietet eine Reihe von Programmen an, um in die Welt der Software-Entwicklung einzusteigen. Mit dem Visual Studio Dev Essentials Program haben Nicht-Professionelle Entwickler die Möglichkeit, eine Vielzahl an Tools und Services zu nutzen.

Das Angebot des Visual Studio Dev Essentials Programs umfasst unter anderem Visual Studio Community, Visual Studio Team Services (zuvor Visual Studio Online) und ein 300 US$ Guthaben für Azure Services sowie viele weitere Zusatzangebote wie etwa Xamarin University Access.

image

Dieses Angebot wurde in den letzten 75 Tagen von bereits mehr als 400.000 Developern genutzt, schreibt Shawn Nandi, Senior Director – Developer Programs, Partnerships and Planning, in seinem Blogpost Free Visual Studio Dev Essentials Program now includes $300 in Azure credits and Exclusive Xamarin University access.

Also, gleich registrieren und die vielen Vorteile nutzen! Winking smile

Sven Hubert: AIT @ OOP 2016, ICM – Internationales Congress Center München, 01. – 05. Februar 2016

Seit 25 Jahren ist die OOP eine der größten und renommiertesten Konferenzen für innovative Themen rund um die Softwareentwicklung in Europa. Bereits seit 1992 halten hier zahlreiche internationale Experten Vorträge zu aktuellen und praxisnahen Softwarethemen. Damit verbunden war auch dieses Jahr wieder eine  große Fachmesse und Ausstellung

OOP_Ausstellung

Die AIT präsentierte sich auf der OOP im Industrie 4.0 / Internet of Things (IoT) Forum als führender Partner für Individualsoftwareentwicklung im Microsoft Technologie Stack.

tesla1

Direkt vor dem Stand der AIT konnten die Besucher ein Tesla Model S ausgiebig in Augenschein nehmen.

tesla2

 

AIT Vorträge auf der OOP

Auf dem Special Day Industrie 4.0 / IoT hielten Lars Roith und Benjamin Boost den Vortrag „Softwaretechnik ist der Maschinenbau des 21. Jahrhunderts

Lars_Benny

Heute sind Maschinen- und Anlagenbauer hardwareorientierte Unternehmen. Die Prozesse und Methoden sind optimiert auf die Auslieferung und den Betrieb von Maschinen und Anlagen, d.h. von Hardwarekomponenten, die sich nach Ihrer Auslieferung nur bedingt verändern. Software ist hierbei bereits heute ein wichtiger Bestandteil, aber sie wird betrachtet wie eine Schraube oder ein Sensor. Im Zuge der Digitalisierung der Produktion ändern sich aber die Anforderungen und Software muss ständig geliefert werden, egal ob Visualisierung oder Backend Services. Zudem müssen neue Technologien und Plattformen schnell unterstützt werden. Im Vortrag wird auf Herausforderungen eingegangen, die Software-Unternehmen bereits heute adressieren und die von Maschinen- und Anlagenbauern noch zu lösen bzw. zu adaptieren sind. Dabei werden technologische Aspekte ebenso beleuchtet wie Herausforderungen im Bereich der Prozesse oder der Personalentwicklung.

Den kompletten Vortrag können sie sich hier von der AIT Webseite herunterladen: Konferenz-Vorträge OOP 2016

 

Im Rahmen des allgemeinen Konferenzprogramms referierte Boris Wehrle unter dem Titel  „Quadratur des Kreises: Kundenindividuelle Standardsoftware

Quadratur

Um sich Wettbewerbsvorteile zu verschaffen, werden von Kunden individuelle Lösungen benötigt und gefordert. Gleichzeitig soll eine solche Lösung kostengünstig umgesetzt und fortlaufend weiterentwickelt werden. Wie ist dieser Spagat zwischen einer Individuallösung und einer Standardsoftware zu schaffen? Durch eine Architektur und ein Vorgehen, das eine flexibel konfigurierbare und weitreichend erweiterbare Standardsoftware ermöglicht.

Auch diesen Vortrag finden sie auf der AIT Webseite zum Download: Konferenz-Vorträge OOP 2016

 

AIT auf der OOP

Am Ende der Konferenz konnten wir an unserem Stand noch ein Microsoft Band 2 verlosen. Wir gratulieren dem Gewinner Jens A.

 

 

Norbert Eder: Visual Studio Code Quicktipp #10 – Mit mehreren Editoren arbeiten

Visual Studio Code kann bis zu drei Editoren öffnen, welche nebeneinander dargestellt werden. Die einzelnen Editoren können mit STRG+1, STRG+2 und STRG+3 angesprochen werden. Ist nur ein Editor offen und wird z.B. STRG+2 betätigt, wird gerade geöffnete Datei im neuen Editor geöffnet.

Mit STRG+SHIFT+E wird der Explorer geöffnet, womit einfach die geöffnete Datei für den aktiven Editor geändert werden kann. Das erneute Ausführen derselben Tastenkombination setzt den Fokus zurück in den ursprüngliche Editor.

STRG+Ö ermöglicht schließlich das Weiterschalten zwischen den geöffneten Editoren. Einzelne Editoren können mit STRG+F4 geschlossen werden.

Auch die Anordnung der Editoren kann geändert werden: STRG+K Pfeiltaste links bewegt den gesamten Editor (soweit möglich) einen Platz nach links. Mit STRG+K Pfeiltaste rechts ist ein Bewegen nach rechts möglich.

The post Visual Studio Code Quicktipp #10 – Mit mehreren Editoren arbeiten appeared first on Norbert Eder.

Marco Scheel: Links for 2016-02-07 [del.icio.us]

  • Reader Submission: The future of windows phone is windows 10 - WMPoweruser
    Earlier this week, Microsoft released the numbers of everything it was doing business in. The cloud did fantastic, reaching the halfway point of their goal of $20 billion, up over 70% year-over year. Same could be said to the surface line up, with revenue reaching a new height of $1. via Pocket

Marco Scheel: Links for 2016-02-05 [del.icio.us]

codefest.at [MS]: Know it, Prove it - auch Du kannst ein IT-Superheld sein

Technorati Tags: ,

Know it, Prove it - auch Du kannst ein IT-Superheld sein.
Stelle Deine IT-Superkräfte unter Beweis in 29 Tagen. Nimmst Du die Challenge an?

 

image

 

Die Microsoft Virtual Academy (MVA) hat im Februar die MVA learning challenge "Know it, prove it" ins Leben gerufen, wo Du in nur einem Monat Dich in einem dieser Bereiche (siehe unten) weiterbilden kannst.

clip_image001

Es nehmen an der Challenge Teilnehmer aus der ganzen Welt teil von Programmierern, IT-Professionalsten bis hin zu Studenten. Es gibt auch ein weltweites Ranking, dass die Länder mit den höchsten Teilnehmeranzahl abbildet. Ihr habt auch die Möglichkeit die Challenge für Eure Freunde und Kollegen auf Facebook, LinkedIn, Twitter und Pinterest zu posten.

Hier geht's zu Deiner Challenge:

https://borntolearn.mslearn.net/knowitproveit/p/home

Wenn Du schon ein MVA Konto hast, musst Du Dich nur mehr einloggen und die Nutzungsbedingungen bestätigen.

Falls Du noch kein MVA Konto hast, musst Du Dich ganz einfach ein Live-ID-Konto registrieren lassen und schon kannst auch Du loslegen.

Holger Sirtl: Azure News on Friday (KW05/16)

Auch diese Woche gab’s wieder viele Nachrichten zur Microsoft Azure Plattform. Hier sind nähere Infos dazu…

Aktuelle Neuigkeiten

Datum Nachricht
04.02. An early look at Azure Stack and what it means for IT
Vorschau zu Azure Stack - was bedeutet Azure Stack für die IT
03.02. Introducing: SQL Server 2016 Community Technology Preview 3.3
SQL Server 2016 CTP 3.3 ab heute verfügbar!
03.02. Microsoft Enhances End-to-End IoT Platform: Adds General Availability for Microsoft Azure IoT Hub and New Device Partners for Developers
Azure IoT Suite News - IoT Hub allgemein verfügbar, neue Device-Partner (Advantech, Dell, HPE, and Libelium...)
02.02. Load feature is available for Azure CDN
Load Feature im Azure CDN ab sofort verfügbar - Inhalte für schnellen Zugriff proaktiv auf CDN Endpunkte laden
02.02. Is your code ready for the leap year?
Hinweise zur Vermeidung Schaltjahr-bezogener Code-Fehler - 2016 ist Schaltjahr
02.02. World Class ARM Templates - Considerations and Proven Practices
World Class ARM Templates - Considerations and Proven Practices
01.02. Azure Government adds Azure Backup
Azure Backup ist jetzt auch in Azure Government verfügbar - IaaS Virtual Machines in der Cloud sichern
01.02. Azure Search .NET SDK roadmap
Infos zur Roadmap des Azure Search SDK für .NET - Feature-Parity zwischen der REST API und dem SDK etc.
01.02. Azure Site Recovery now available in Azure Government Cloud
Mit Azure Backup ist auch Azure Site Recovery in Azure Government verfügbar
01.02. Announcing PowerShell v5 support in Azure Automation
Azure Automation unterstützt jetzt auch PowerShell Version 5
01.02. Announcing general availability of Google Widevine license services
Google Widivine License Services in Azure Media Services verfügbar
01.02. On-premises and cloud hybrid Hadoop data pipelines with Hortonworks and Cortana Analytics
Hybride Datenpipelines mit Azure Data Factory, Hortonworks und Cortana Analytics aufbauen

Neue Kurse in der MVA

Datum Nachricht
04.02. Applications on Azure: Putting All the Pieces Together
Eigene Anwendungen auf Microsoft Azure - nicht sicher, wie? Hier ist ein kostenloser MVA Kurs zum Thema
03.02. Onboarding with the CSP Partner Center SDK
Interessant für alle Cloud Solution Provider (CSP) - Überblick über das Partner Center SDK

Neue Videos

Datum Nachricht Video
05.02. PowerApps 102 - Creating apps from templates
Mit PowerApps Client Apps für Smartphones oder Tables auf Basis von Templates erstellen
05.02. PowerApps 103 - Creating apps from existing data
Client Apps für verschiedene Geräte auf Basis bestehender Daten entwickeln - PowerApps macht's möglich
04.02. Introduction to Microsoft R Open
Überblick über Microsoft R Open - kompakt in einer Stunde
03.02. Azure Data Lake Analytics Deep Dive

03.02. Introducing Microsoft Azure Stack
30-Minuten-Überblick zu Microsoft Azure Stack von Mark Russinovich und Jeffrey Snover
02.02. Tuesdays with Corey: Special Guest Jeffrey Snover talks about Azure Stack
Überblick über Azure Stack mit Corey Sanders und Jeffrey Snover - was ist Azure Stack? was ist enthalten?

Norbert Eder: Visual Studio Code Quicktipp #9 – Bookmarks

Ich empfinde Bookmarks im Grunde hilfreich und sie fehlen mir in Visual Studio Code. Zum Glück gibt es eine Extension dafür: Bookmarks.

Installiert wird die Erweiterung mit F1 und ext inst bookmarks:

Visual Studio Code - Bookmarks  installieren

Visual Studio Code – Bookmarks installieren

In der Command Palette können nun mittels Bookmarks die möglichen Funktionen aufgelistet werden. Für die meisten besteht auch ein Shortcut:

Visual Studio Code - Bookmarks -Funktionen

Visual Studio Code – Bookmarks -Funktionen

Aktive Bookmarks werden so visualisiert:

Visual Studio Code - Bookmarks  anzeigen

Visual Studio Code – Bookmarks anzeigen

Zum aktuellen Zeitpunkt stehen auch zwei Einstellungen zur Verfügung:

  • "bookmarks.saveBookmarksBetweenSessions": true: Bookmarks werden gespeichert beim Öffnen des entsprechendes Projektes wieder hergestellt.
  • "bookmarks.gutterIconPath": "c:\\path\\to\\icon.png": Das Bookmark-Icon kann über diese Einstellung überschrieben werden.

Enjoy.

Nächster Tipp: Visual Studio Code Quicktipp #10 – Mit mehreren Editoren arbeiten

The post Visual Studio Code Quicktipp #9 – Bookmarks appeared first on Norbert Eder.

Sven Hubert: ALM kompakt: Work Item löschen nicht verfügbar

Seit kurzem gibt es in VSTS (Visual Studio Team Services) die Möglichkeit Work Items (logisch) zu löschen. Details dazu sind in der MSDN zu finden. Es kann jedoch sein, dass man den Befehl nicht, wie in der MSDN versprochen, vorfindet. Diese Funktionalität benötigt nämlich eine separate Berechtigung. Diese ist standardmäßig nicht für die Benutzer der Contributors-Gruppe gesetzt.

image

In diesem Falle fehlt der in der MSDN beschriebene Delete-Befehl in den entsprechenden Menüs (1). Erst mit der Berechtigung zum Löschen von Work Items ist das Kommando verfügbar (2).

SNAGHTML1826720

ACHTUNG: An dieser Stelle möchten wir aber noch darauf hinweisen, dass mit dieser Berechtigung sehr sorgsam umgehen sollte, da sich diese auf das gesamte Team Projekt bezieht.

Marco Scheel: Links for 2016-02-04 [del.icio.us]

Norbert Eder: Visual Studio Code Quicktipp #8 – Word wrap konfigurieren

Im Standard wird eine Zeile in Visual Studio Code erst nach 300 Zeichen umgebrochen. Das ist für die Softwareentwicklung mitunter praktisch (wenn es dann doch mal lange Zeilen gibt), aber beim Verfassen von Texten ist es das nicht. Glücklicherweise kann dies in den Benutzereinstellungen geändert werden.

Die besagten Benutzereinstellungen sind via File | Preferences | User Settings zu öffnen. Darin gibt es die Einstellung editor.wrappingColumn. Für diese kann nun der gewünschte Wert eingetragen werden. Bei einem Wert von 0 wird am Ende des sichtbaren Bereichs des Editors umgebrochen.

Nächster Tipp: Visual Studio Code Quicktipp #9 – Bookmarks

The post Visual Studio Code Quicktipp #8 – Word wrap konfigurieren appeared first on Norbert Eder.

Marco Scheel: Links for 2016-02-03 [del.icio.us]

Norbert Eder: Visual Studio Code Quicktipp #7 – Speicherort einer Datei in Explorer anzeigen

Immer wieder einmal möchte man sich den Speicherort einer Datei im Explorer anzeigen lassen. Einfach nur um zu wissen, wo genau diese Datei gespeichert ist und wie der weitere Verzeichnisinhalt aussieht, oder aber für weiterführende Aufgaben.

Mit STRG+K R kann dies erfolgreich durchgeführt werden.

Es lohnt sich ein Blick auf die weiteren File-Aktionen. Dazu einfach F1 drücken und File eingeben, schon erscheint eine vollständige Liste.

Nächster Tipp: Visual Studio Code Quicktipp #8 – Word wrap konfigurieren

The post Visual Studio Code Quicktipp #7 – Speicherort einer Datei in Explorer anzeigen appeared first on Norbert Eder.

Marco Scheel: Links for 2016-02-02 [del.icio.us]

Kay Giza [MS]: Neues Visual Studio Code Insider-Programm: Visual Studio Code – Insiders

Ab 1. Februar 2016 - Visual Studio Code - ein neues Insider-Programm. Willkommen Visual Studio Code – Insiders als eigenständiges und parallel zu Visual Studio Code laufendem Release. as heißt, ab sofort kann man sich parallel, zu dem normalen und stabilen Visual Studio Code, durch Teilnahme am Insider-Programm... [... mehr auf Giza-Blog.de]


This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2016 Kay Giza. All rights reserved. Legal

codefest.at [MS]: Der Visual Studio Marketplace

Ihr sucht Extensions für Visual Studio, Visual Studio Team Services (früher Visual Studio Online), oder Visual Studio Code, die euch die Arbeit erleichtern? Oder ihr habt selbst eine coole Extension für eines dieser Produkte entwickelt und wollt diese mit der Community teilen? Dann ist der neue Visual Studio Marketplace wohl nun die erste Anlaufstelle für euch.

Der Marketplace ist als offene Plattform für Software Teams gedacht, die sich eine massgeschneiderte Tools-Umgebung innerhalb der Visual Studio Familie (selbst) schaffen möchten. Gerade im Bereich der Visual Studio Team Services ist hier aufgrund der Thematik ein weites Feld von Erweiterungsmöglichkeiten gegeben und die massgeschneiderte Lösung aus einer Hand wird - in diesem Bereich - nur schwerlich zu finden sein. Es empfiehlt sich also (zumindest) ein Anreichern der eigenen Umgebung mittels dem Marketplace.

Ihr findet den Marketplace unter dieser URL: https://marketplace.visualstudio.com/

clip_image001

Hier könnt ihr gleich auf euer Lieblingsprodukt wechseln und eine der brandaktuellen Erweiterungen – zum Beispiel für VS Code - ausprobieren. Falls ihr noch unentschlossen seid, dann scrollt einfach ganz nach unten und verwendet -im Bereich für Visual Studio - die Suche:

clip_image002

In den anderen Bereichen hilft euch der jeweilige “see more” Button weiter.

Nichts dabei? Das kann ich mir fast nicht vorstellen, aber dann MÜSST ihr eine neue Extension entwickeln und diese zur Verfügung stellen. Dafür clickt auf „Build your own“ und ihr bekommt eine sehr gute Beschreibung, was ihr tun müsst, um gleich loslegen zu können.

Gebt acht, welches Produkt Ihr angewählt habt, bevor Ihr auf den Link klickt, denn abhängig davon kommt Ihr auf die jeweilige, passende Beschreibung, bei visual Studio führt euch der Link zu:
https://www.visualstudio.com/integrate/explore/explore-vside-vsi

clip_image004

Bei Visual Studio Team Services hierher: https://www.visualstudio.com/integrate/extensions/overview
Und “last, but not least” VS Code: https://code.visualstudio.com/docs/extensions/overview

Ich wünsche euch viel Spass mit dem Visual Studio Marketplace und ich hoffe ihr erstellt richtig coole Extensions für die Visual Studio Produkt-Familie.


Berndt Hamböck ist seit 2007 MCT, darüber hinaus befasst er sich mit Lösungen für komplexe Anwendungsszenarien mit den neuesten Microsoft Technologien. Die Erfahrungen aus der Projektarbeit gibt er in Vorträgen und Trainings weiter und begleitet Entwicklerteams in Softwareunternehmen bei Projekten im Microsoft Umfeld.

Das ist ein Gastbeitrag. Die Meinung des Autors muss sich nicht mit jener von Microsoft decken. Durch den Artikel ergeben sich keinerlei Handlungsempfehlungen. Microsoft übernimmt keine Gewähr für die Richtigkeit oder Vollständigkeit der Angaben

Norbert Eder: Visual Studio Code Quicktipp #6 – Keine Telemetrie-Daten an Microsoft senden

In der Default-Installation werden “Telemetrie”-Daten an Microsoft gesendet. Nicht jeder möchte diese Daten preis geben und kann dies auch deaktivieren. Dazu ist ins Verzeichnis %PROGRAMFILES(X86)%\Microsoft VS Code\resources\app zu wechseln.

In der Datei product.json findet sich die Einstellung enableTelemetry. Diese ist auf false zu setzen und es werden keine Nutzungsdaten mehr an Microsoft übermittelt.

In den Benutzereinstellungen unter File | Preferences | User Settings findet sich auch noch ein Setting telemetry.enableCrashReporter. Dieses ist auf true gestellt und sendet dadurch bei Abstürzen Crash Reports an Microsoft. Durch ein

"telemetry.enableCrashReporter": false

kann dies ebenfalls deaktiviert werden.

Nächster Tipp: Visual Studio Code Quicktipp #7 – Speicherort einer Datei in Explorer anzeigen

The post Visual Studio Code Quicktipp #6 – Keine Telemetrie-Daten an Microsoft senden appeared first on Norbert Eder.

Marco Scheel: Links for 2016-02-01 [del.icio.us]

codefest.at [MS]: Coden wie der Blitz–Challenge 7: Für die Leseratten

Mit etwas Verspätung wegen Krankheit kommt nun wieder eine neue Challenge aus unserer “Coden wie der Blitz”-Serie. Diesmal haben wir etwas für Leseratten!

WP_20160201_11_41_21_Pro (2)

Aufgabe:

Schreibe eine Methode die eine 13 stellige ISBN in eine 10 stellige ISBN umrechnet, sowie eine zweite Methode, die das in die andere Richtung beherrscht (). Dazu baut ihr noch ein sehr einfaches User Interface, die eine ISBN Nummer entgegen nimmt und die konvertierte ISBN Nummer anzeigt.

Ihr könnt die Lösung entweder in C# oder in JavaScript schreiben. Unsere Auflösung wird in HTML/JavaScript gepostet werden. Das lässt sich übrigens auch hervorragend mit Visual Studio Code ausprogrammieren.

Tipp: https://de.wikipedia.org/wiki/Internationale_Standardbuchnummer

Schickt uns, wie gehabt, die Lösung oder einen Link zur Lösung an wettbewerb@microsoft.com . Die Auflösung folgt in zwei Wochen. Der Lösung der sechsten Challenge findet ihr hier.

Danke an Berndt Hamböck für die Challenge!

Habt ihr eine interessante Challenge, die mit Visual Studio in ca. 10 Minuten gelöst werden können? Schickt uns eure Challenge mit Lösung an wettbewerb@microsoft.com mit Betreff "Challenge Vorschlag". Wenn eure Challenge ausgewählt wird, bekommt ihr einen "Codezauberer" Sticker. :)

Teilnahmebedingungen und weitere Infos, findet ihr im ersten Post.

Norbert Eder: Visual Studio Code Quicktipp #5 – Insider’s channel

Viele unter uns setzen (gerne) bleeding edge Technologien ein um immer das Neueste vom Neuen zu haben, zu testen und um die Richtung einschätzen zu können. Für Visual Studio Code bestehen auch zwei Channels. Im Default werden Updates nach der Installation aus dem stable Channel bezogen. Es gibt jedoch noch einen insiders Channel.

Bitte untenstehendes Update beachten, es gab Änderungen!

Die Einstellung ist unter File | Preferences | User Settings zu finden und nennt sich update.channel. In der Datei settings.json (siehe %APPDATA%\Code\User`) kann dieser Wert überschrieben werden (diese Datei öffnet sich automatisch beim Öffnen der Benutzereinstellungen:

{
    "update.channel": "insiders"
}

Nach einem Neustart von Visual Studio Code werden Updates künftig auf dem insiders Channel geprüft.

UPDATE

Die Einstellung "update.channel": "insiders" wird offensichtlich nicht mehr unterstützt und zeigt wohl immer nur auf den stable-Channel. Um den Zugang zur Testversion zu erhalten, ist eine eigene Insiders-Version zu installieren. Diese ist auf der hier bezogen werden.

Die Installation erfolgt parallel zu einer vorhandenen Stable-Installation. Nett: An den Icon-Farben können die Versionen unterschieden werden: blau entspricht der Stable-Version, grün ist die Insiders-Version.

Nächster Tipp:
Visual Studio Code Quicktipp #6 – Keine Telemetrie-Daten an Microsoft senden

The post Visual Studio Code Quicktipp #5 – Insider’s channel appeared first on Norbert Eder.

Christian Binder [MS]: Bing Continuous Delivery – Engineering Story

Real World : Continuous Delivery bei Bing

Interessante Aspekte aus dem Engineering und der “DevOps Culture” z.B.:

Inner Loop: The loop that spans ideation through code commit, and most often centers on an engineer writing the code for a given feature. Because engineers require an idea from which to design and build a feature, this loop also includes prototyping, crowd-sourced feature engagement and feasibility studies.

Outer Loop: This is the loop that gets committed code out to Production. Because a feature is not really finished until we have successfully navigated live user trials, our experimentation-centered culture requires that we consider the cost of flighting features within this loop.

http://stories.visualstudio.com/bing-continuous-delivery/

Chris

Code-Inside Blog: Working with FontIcons in UWP

FontIcons in UWP

Microsoft ships one builtin UWP (Universal Windows Platform) SymbolIcon class.

The good thing about such FontIcons is, that you can scale and change the appearances very nice and don’t need a bunch of image assets for your icons.

The down side is, that those icons are just a font… so no multicolor option.

The builtin SymbolIcon usage is pretty easy:

<SymbolIcon Symbol="Accept" />

Using FontIcon to serve other font e.g. FontAwesome

Microsoft ships another simple class, the FontIcon class. The usage is pretty simple if you know the correct syntax:

<FontIcon FontFamily="./fontawesome.otf#FontAwesome" Glyph="&#xf0b2;"></FontIcon>

The Glyph-Property is the HexCode for the target char.

Pretty important, but I’m not a Font-Expert, so maybe this is “normal” - The #FontAwesome must be set. - In XAML the Glyph must be in this form

"&#xf0b2;"
  • From Code, the value must be unicode, e.g.

    Test.Glyph = “\uf0b2”;

And of course, the font must be included in the project as Resource.

Result

The result is hopefully that you see the correct icon… right?

BTW, we try to bring FontAwesome to UWP with a simple NuGet package.

And thanks to Alexander Witkowski for the suggestion of the FontIcon class - I didn’t know that this is part of the SDK.

codefest.at [MS]: Azure BLOB Storage nutzen

Die meisten Applikationen benötigen einen Platz zum Speichern von Daten. Je nach Datentyp, Datenmenge, Zugriff und der damit verbundenen Methode zum Zugriff auf die Daten können verschiedenste Speichermodelle eingesetzt werden. Mit den Azure Services kommen neben den herkömmlichen Varianten weitere, neue Mechanismen hinzu, die genutzt werden können. Dieser Artikel befasst sich mit Zugriff auf Azure BLOB Storage.

Wofür BLOB?

BLOB steht für Binary Large OBject. Darunter versteht man große, binäre Objekte, wie etwa Dateien oder andere unstrukturierte Daten. BLOBs werden im Regelfall nicht in (klassischen) Datenbanken gespeichert und können nicht oder nur mit viel Aufwand strukturiert gespeichert werden.

Azure Storage Blobs eignet sich also vor allem zum Persistieren von etwa Dateien: (Viele) völlig unterschiedliche Daten, die sicher in der Cloud gespeichert werden sollen. Der Zugriff darauf kann mit Tools, wie etwa dem Azure Storage Explorer oder vielen weiteren Tools (siehe etwa auch Jürgens Tipp hier) erfolgen, oder natürlich mit eigenem Code in der eigenen App. Hier geht es darum, eigenen Code zu verwenden.

Dieses kleine Tutorial führt duch die Verwendung von Azure Storage Blob. Auch wenn wir hier bereits in einigen Artikeln über die Verwendung von BLOBs geschrieben haben, möchte ich hier ein Code-Update und eine aktuelle Zusammenfassung für die eigene Verwendung posten.

Das Konzept von BLOB Storage

BLOB Storage ist so organisiert, dass die Inhalte (Files) in einem Container liegen müssen, die wiederrum einem Storage Account zugeordnet sind (siehe hier).

image

Der Zugriff auf einen BLOB erfolgt über einen HTTP-Request in diesem Format:
http://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>

also etwa:
http://sally.blob.core.windows.net/movies/MOV1.AVI

Für die Benennung von Containern gibt es einige Regeln, wie etwa “alles kleinschreiben”, keine Sonderzeichen, 3 bis 63 Zeichen nur mit Buchstaben, Nummern und dem Dash (-“) Zeichen. Auch für die Blob-Files gelten besondere Regeln, wie etwa “Blob names are case-sensitive”. Alle Regeln finden sich hier.

Gehen wirs’ an.

Projekt erstellen

Zunächst wird ein neues Projekt in Visual Studio 2015 angelegt. Dabei wird das Template Visucal C# – Cloud – QuickStarts – Data Services – Azure Storage: Blobs ausgewählt.

image

Der Wizard generiert ein Projekt. Dabei werden Referenzen zu den erforderlichen Bibliotheken hinzugefügt (wie etwa die Microsoft.WindowsAzureStorage Referenz).

image

Nach dem ersten Compile werden die NuGet Packages automatisch nachgeladen.

Packages aktualisieren

Alternativ – etwa bei bestehenden Projekten - können die Bibliotheken natürlich auch selbst im NuGet Package Manager hinzugefügt werden… (die Suche nach Azure bringt die Storage-Bibliothek gleich am Anfang der Liste), oder in der Package Manager Console mit Install-Package WindowsAzure.Storage geladen werden.

image

Der NuGet Package Manager kann auch verwendet werden, die installierte Version und alle Abhängigkeiten gleich zu aktualisieren – was ich sogleich getan habe. Damit werden die Pakete im \packages Verzeichnis sogleich aktualisiert und hier ist das Update auf WindowsAzure.Storage.6.2.0 erfolgt. Das Beispielprojekt kann wieder compiliert werden, somit haben wir gute Voraussetzungen.

Cloud Explorer

Am einfachsten ist das Erstellen von Ressourcen mit dem integrierten Cloud Explorer. Der Cloud Explorer kommt mit dem Microsoft Azure SDK for .NET (VS 2015) - 2.7 oder 2.8 mit. Die Installation erfolgt mit dem Web Platform Installer.

image

Blob Container erstellen und verwenden

Der Cloud Explorer integriert sich in Visual Studio (siehe auch hier, in Welcome to Visual Studio 2015 with Azure! oder Azure Tools). Hiermit wird ein neuer Container “documents” erstellt.

image image

Dieser kann auch gleich verwendet werden:

image

Somit werden gleich ein paar Files upgeloadet (Multi Select klappt):

image

Schön dabei ist die Integration und auch die Anzeige der File Properties.

image

Die Demo Files können mit dem Cloud Explorer verwaltet werden.

image

Soweit so gut. Dieser Exkurs dient zum Verständnis, dass sich Azure Blob Storage ähnlich wie ein Filesystem verhält.

Alles lokal?

Vorerst ja. Der Azure-Speicheremulator bietet eine lokale Umgebung, die die Azure-Dienste für Blobs, Warteschlangen und Tabellenspeicher für Entwicklungszwecke emuliert. App.config verwendet in dem Beispiel UseDevelopmentStorage=true.

image

Im realen Betrieb müssen dann nur der ConnectionString zum “echten” Azure Storage Endpoint getauscht werden (der Key steht darunter und muss nur auskommentiert und angepasst werden).

Let it run

Das Beispiel-Projekt kann sofort ausgeführt werden (F5). Der Output zeigt auch gleich, was hier drin passiert: Files werden in neue azure Blob-Container upgeloadet, angezeigt, downgeloadet und wieder gelöscht.

image

Die Main Methode in Program.cs ruft zwei Methoden zur Demonstration für den Blob-Zugriff auf:

  • BasicStorageBlockBlobOperationsAsync().Wait();
  • BasicStoragePageBlobOperationsAsync().Wait();

image

Drei BLOB-Typen: Block, Page, Append

Azure BLOB Storage kennt drei verschiedene BLOB-Typen. Somit möchte ich hier über den Unterschied der beiden verwendeten Methoden im Beispiel informieren und die Arten der Blob-Speicher kurz beschreiben. Dabei ist wichtig, dass der Typ eines Blobs beim Erstellen bestimmt wird und nicht mehr geändert werden kann.

  1. Block-Blobs sind ideal zum Speichern von Text- oder Binärdateien, also etwa für Dokumente und Mediadaten. Block-Blobs bestehen aus Blöcken von bis zu 4MB, von denen jeder durch eine Block-ID identifiziert wird. Zum Ändern müssen also bestimmte Blöcke geschrieben und mit Commit ausgeführt werden. Ein Block-Blob kann bis zu 50.000 Blöcke enthalten, somit ist die maximale Größe eines Block-Blobs etwa 195 GB (4MB * 50.000 Blöcke).
  2. Page-Blobs bestehen aus 512-Bytes-Seiten und sind für zufällige Lese- und Schreibzugriffe optimiert. So verwenden etwa Virtuelle Azure-Computer Page-Blobs für Betriebssystem und Datenträger. Beim Erstellen muss eine maximale Größe, etwa 2 * 512 Bytes = 1024 Bytes, angegeben werden. Ein Schreibvorgang erfolgt unter Angabe eines Offsets und kann nur eine Seite, mehrere Seiten oder bis zu 4 MB des Seiten-BLOB überschreiben und es wird kein zusätzliches Commit benötigt. Die maximale Größe für ein Page-Blob beträgt 1 TB.
  3. Append-Blobs bestehen aus Blöcken, die für das kontinuierliche Hinzufügen von Daten optimiert sind, etwa für Logfiles und ähnliche Anwendungen. Das Aktualisieren oder Löschen von vorhandenen Blöcken wird nicht unterstützt, nur das Anhängen von Daten. Die Block-ID ist nicht sichtbar. Die maximale Größe beträgt ebenso 195GB.

Für detaillierte Infos siehe Grundlegendes zu Block-BLOBs, Anhang-BLOBS und Seiten-BLOBs und Verwenden des Blob-Speichers mit .NET.

Wie funktionieren Block-Blobs?

Sehen wir uns die Funktionsweise von BasicStorageBlockBlobOperationsAsync an:

  • Der Beginn des Codes kümmert sich um den storageAccount und dass der Container existiert.
    image
  • Für den Zugriff wird zunächst ein storageAccount aus dem ConnectionString erzeugt.
    CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(…);
  • Danach wird ein blobClient erstellt und es wird versucht, eine Referenz auf den Container “democontainerblockblob” zu erstellen.
  • Im Try-Block wird versucht, den Container zu erstellen. Dies erfolgt direkt in der Storage-Bibliothek in einer CloudBlobContainer Methode.
    image
  • Wenn die Voraussetzungen erfüllt sind (sprich, der Container “democontainerblockblob” existiert) gehts weiter im Code.
    image
  • Nun wird ein neues CloudBlockBlob Objekt erzeugt und es wrd versucht, dieses asnychron upzuloaden.
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(ImageToUpload);
    await blockBlob.UploadFromFileAsync(ImageToUpload, FileMode.Open);

    Beim Upload wird auch das Commit durchgeführt. Das wars mit dem Upload.
  • Die Anzeige erfolgt ebenso einfach mit der ListBlobs() Methode und einer foreach Schleife:
    foreach (IListBlobItem blob in container.ListBlobs())
    {
        // Blob type will be CloudBlockBlob, CloudPageBlob or CloudBlobDirectory
        // Use blob.GetType() and cast to appropriate type to gain access to properties specific to each type
        Console.WriteLine("- {0} (type: {1})", blob.Uri, blob.GetType());
    }
  • Der Download kann mit der DownloadToFileAsync Methode erfolgen:
    await blockBlob.DownloadToFileAsync(string.Format("./CopyOf{0}", ImageToUpload), FileMode.Create);
    Das Ergbnis zeigt die downgeloadete Datei im bin Folder:
    image
  • Und danach wird das Demofile gelöscht:
    await blockBlob.DeleteAsync();

In diesem Beispiel sieht man, dass der Zugriff dank der Storage-Class sehr einfach erfolgt.

Wie funktionieren Page-BLOBs?

Methode BasicStoragePageBlobOperationsAsync funktioniert analog zu Beispiel Block-Blob, nur mit dem Unterschied, dass hier dieser Blob-Typ verwendet wird.

  • Wie zuvor wird der storageAccount erzeugt und der Container “democontainerpageblob” existiert. (Hier wird ein eigener Container verwendet).
    image
  • Neu hier ist das Erstellen des pageBlob mit 1024 Bytes maximale Größe.
    CloudPageBlob pageBlob = container.GetPageBlobReference(PageBlobName);
    await pageBlob.CreateAsync(512 * 2 /*size*/); // size needs to be multiple of 512 bytes
  • Hier werden 512 Zufalls-Bytes hineingeschrieben:
    byte[] samplePagedata = new byte[512];
    Random random = new Random();
    random.NextBytes(samplePagedata);
    await pageBlob.UploadFromByteArrayAsync(samplePagedata, 0, samplePagedata.Length);

    Es ist kein Commit erforderlich.
    image
  • Im Code geht es mit der Anzeige, Download und Löschen weiter:
    image
  • Das Anzeigen passiert dann seitenweise, solange Inhalt (resultSegment) des pageBlob Elements vorhanden ist:
    BlobContinuationToken token = null;
    do
    {
        BlobResultSegment resultSegment = await container.ListBlobsSegmentedAsync(token);
        token = resultSegment.ContinuationToken;
        foreach (IListBlobItem blob in resultSegment.Results)
        {
            // Blob type will be CloudBlockBlob, CloudPageBlob or CloudBlobDirectory
            Console.WriteLine("{0} (type: {1}", blob.Uri, blob.GetType());
        }
    } while (token != null);
  • Das Downloading erfolgt ähnlich wie zuvor:
    int bytesRead = await pageBlob.DownloadRangeToByteArrayAsync(samplePagedata, 0, 0, samplePagedata.Count());
  • Das Löschen ebenso:
    await pageBlob.DeleteAsync();

Der Zugriff auf PageBlob ist somit nicht ganz so einfach wie auf Block-Blobs. Das Demo zeigt aber die grundsätzliche Herangehensweise.

Fazit

Das generierte Beispiel aus den QuickStarts zeigt die grundsätzliche Verwendung von BLOB-Storage in eigenen Projekten. Die Verwendung von großen Files und Permissions auf die Files bleiben hier Außen vor, aber der Zugriff erfolgt sehr einfach.

Je nach Anforderung kann der Einsatz von Block-, Page- oder Append-Blobs in der eigenen Anwendung Sinn machen. Weitere Informationen über die Vewendung von Blob-Storage aus Code gibt es hier und hier.

Viel Spaß beim Experimentieren mit Azure BLOB Storage!

Fabian Deitelhoff: Teil 3 – Der Raspberry Pi 2 als Mediacenter mit OSMC (Installation)

Die organisatorischen Dinge, Änderungen beim Raspberry Pi 2 und die Hardware für ein Mediacenter sind mittlerweile klar und wurden in den vorherigen beiden Teilen der Serie behandelt. In diesem Beitrag geht es rein um die Installation von OSMC und die anschließende Inbetriebnahme. Denn bevor es überhaupt so richtig mit dem Mediacenter losgehen kann, muss die Basis auf der SD Karte dafür geschaffen werden. Die Installation ist aus der Sicht von Windows 10 geschrieben. Für andere Plattformen gibt es ähnliche Möglichkeiten. Die Inbetriebnahme umfasst das erstmalige Starten von OSMC auf dem Raspberry Pi 2. Die Konfiguration wird anschließend in den weiteren Teilen der Serie beschrieben.

Dieser Blogpost ist Teil einer Serie zum Thema “Der Raspberry Pi 2 als Mediacenter mit OSMC”. Im Rahmen dieser Serie sind die folgenden Teile erschienen. Der jeweils aktuelle Beitrag ist hervorgehoben.

  1. Teil – Der Raspberry Pi 2 als Mediacenter mit OSMC (Einführung)
  2. Teil – Der Raspberry Pi 2 als Mediacenter mit OSMC (Hardware)
  3. Teil – Der Raspberry Pi 2 als Mediacenter mit OSMC (Installation)

Wer ein Mediacenter mit dem Raspberry Pi 1 einrichten möchte, wird eventuell bei der vorherigen Serie zum Thema fündig. Zumindest was die Hardware anbelangt. Der Teil zur Software ist wieder in der aktuellen Serie relevant.

OSMC

Bevor wir uns um die konkrete Installation kümmern können, steht der Download der notwendigen Dateien an. In diesem Fall OSMC, für das ich mich vor einiger Zeit entschieden hatte. Wie ich im ersten Teil zur Serie schon geschrieben hatte, ist OSMC nur eine Möglichkeit, Kodi zu installieren. Kodi ist die eigentliche Mediacenter-Software, die für uns das Abspielen zum Beispiel der Videodateien übernimmt. OSMC ist eine der sogenannten einfachen „Kodi zentrischen Distributionen„, um Kodi auf den Raspberry Pi zu bringen. Zu OpenELEC werde ich, zu einem späteren Zeitpunkt, auch noch etwas schreiben.

Kodi ist mittlerweile auch als native Anwendung für Windows und viele weitere Betriebssysteme verfügbar. Es soll also auch unter Windows und Co. direkt laufen. Das gucke ich mir später einmal genauer an und werde dazu auch noch einen Beitrag schreiben. Aber alles der Reihe nach. :)

Notwendige Dateien

OSMC lässt sich ganz einfach in den verschiedenen Versionen von der Webseite herunterladen. Auf der Webseite bitte unter der Rubrik Installation und das Installationspaket für euer Betriebssystem aussuchen. Dadurch bekommt ihr das Hilfsprogramm, das euch bei der Installation von OSMC auf einem von OSMC unterstützten Geräte hilft. Unter Windows ist das eine ausführbare Datei mit der Endung .exe.

Mehr gibt es zu den notwendigen Dateien auch schon nicht zu sagen. Das Hilfsprogramm erledigt ziemlich viel für uns, wie der nächste Abschnitt zeigt. Beispielsweise den Download des OSMC-Images, das dann auf die SD Karte gespielt wird.

Installation

Nach dem Download die ausführbare Datei bitte starten, bis das Hilfsprogramm gestartet ist und uns herzlich willkommen heißt (Abbildung 1). Dort lässt sich aktuell nur Englisch als Sprache auswählen. Im zweiten Auswahlfeld bitte das Gerät auswählen, auf dem ihr OSMC installieren möchtet. Wer dieser Anleitung folgt wählt bitte den Eintrag Raspberry Pi 2 aus. Nach einem Klick auf den Pfeil nach rechts, erscheint die Abfrage der Version, die installiert werden soll (Abbildung 2). Dort ergibt es Sinn immer die aktuellste Version auszuwählen. Beim Schreiben dieses Beitrags war das die Version 2015.12-4. Möglicherweise gibt es mittlerweile schon eine neuere Version. Dann bitte die nutzen. Weiter geht’s mit der Auswahl des Mediums, auf dem OSMC letztendlich installiert werden soll (Abbildung 3). Da der Raspberry Pi 2 eine SD Karte besitzt, ist das in diesem Fall die logische Wahl.

Abb. 1: Auswahl der Sprache und des Geräts. Abb. 2: Auswahl der Version, die installiert werden soll. Abb. 3: Das Medium, auf dem OSMC installiert werden soll.

Jetzt folgen einige Einstellungen, bevor OSMC auf dem Gerät installiert wird. Sehr schön ist, dass wir auswählen können, ob wir den Raspberry Pi 2 nach der Installation über ein Netzwerkkabel (Abbildung 4) oder über WLAN (Abbildung 5) an unser Netzwerk anschließen möchten. Dieser Konfigurationsschritt vereinfacht tatsächlich einiges. Wer dennoch manuell für die richtige Konfiguration sorgen möchte beziehungsweise einfach nur neugierig ist, findet in meinem Beitrag Raspberry Pi: Headless WIFI Konfiguration hoffentlich nützliche Tipps und Tricks. Aber auch das Installationsprogramm bietet eine erweiterte Netzwerkkonfiguration, die sich hinter dem Punkt „Manuelle Konfiguration“ verbirgt (Abbildung 6). Wer die Option ausgewählt hat, den Raspberry Pi 2 über WLAN ans Netzwerk anzuschließen, wird im nächsten Schritt noch um die Eingabe der notwendigen Daten gebeten (Abbildung 7). Bei mir hat das zu Testzwecken ohne Probleme funktioniert. Im Betrieb habe ich das Mediacenter allerdings über ein Netzwerkkabel angeschlossen.

Abb. 4: Den Raspberry Pi 2 über ein Netzwerkkabel anschließen. Abb. 5: Konfiguration für einen WLAN-Zugang. Abb. 6: Erweiterte Netzwerkkonfiguration (manuell). Abb. 7: Notwendige Daten für das eigene WLAN.

Damit ist die für die Installation notwendige Konfiguration abgeschlossen. Jetzt müssen wir noch das Speichermedium auswählen, auf das OSMC letztendlich installiert wird (Abbildung 8). Nachdem die Lizenz akzeptiert wurde (Abbildung 9) kann es auch schon losgehen und das Hilfsprogramm lädt das Image herunter (Abbildung 10), das zuvor ausgewählt wurde (Abbildung 2). Anschließend erfolgt noch eine letzte Warnung (Abbildung 11), da beim erstellen des Images auf dem Speichermedium logischerweise alle Daten verloren gehen.

Abb. 8: Auswahl des Speichermediums. Abb. 9: Die Lizenzbedingungen vor der Installation. Abb. 10: Das zuvor ausgewählte Image wird heruntergeladen. Abb. 11: Letzte Warnung vor dem Schreiben der Daten auf das Speichermedium.

Damit sind alle Schritte, die wir manuell beeinflussen können, abgeschlossen. Das Hilfsprogramm schreibt das Image auf das Speichermedium (Abbildung 12) und zeigt zum Abschluss noch eine Meldung an (Abbildung 13). Das war es aber auch schon. OSMC ist installiert und bereit für den ersten Start.

Abb. 12: OSMC wird auf dem Speichermedium installiert. Abb. 13: Glückwunsch! OSMC wurde erfolgreich installiert.

Wer sich jetzt noch darum kümmern möchte den vollen Speicherplatz der SD Karte auch unter OSMC nutzen zu können, der kann gerne bei meinem Beitrag „Raspberry Pi: Speicherplatz der SD-Karte ausnutzen“ vorbeischauen. Den habe ich noch für den Raspberry Pi mit Raspbmc geschrieben.

Inbetriebnahme

Beim ersten Start des Raspberry Pi 2 läuft die Erstinstallation von OSMC vollautomatisch. Im vorherigen Schritt wurden nämlich nur die notwendigen Dateien auf die SD Karte kopiert, OSMC aber noch nicht tatsächlich installiert. Ich habe dazu den Raspberry Pi direkt an meinen Fernseher angeschlossen und mit LAN und Strom verbunden. Den richtigen HDMI Eingang am Fernseher vorausgesetzt, können wir diese Installation auch live beobachten.

Zur Installation gehören die folgenden Schritte:

  1. Formatieren und Partitionieren des Speichermediums
  2. Installation von OSMC
  3. Automatischer Neustart des Raspberry Pi
  4. Start des Linux Betriebssystems und direkt im Anschluss OSMC
  5. Initiale Konfiguration

Der fünfte Schritt läuft nicht vollautomatisch ab. Darum müssen wir uns kümmern. Hört sich schlimmer an als gedacht, aber viele Schritte sind dazu nicht notwendig. Die Konfiguration ist Menügeführt. Ihr könnt dazu direkt eine Maus und Tastatur über USB an den Raspberry Pi anschließen, wenn ihr das besser findet. Für die nachfolgenden Schritte der weiteren Teile dieser Serie ist das sicherlich nicht verkehrt. Ich führe die Installation meistens über die Fernbedienung meines Fernsehers durch, da ich erst einmal überprüfe, ob überhaupt alles geht, bevor ich irgendetwas anschließe. So kann ich ausschließen, dass Fehler nicht durch die Maus, Tastatur oder die USB-Anschlüsse verursacht werden. Bei meinem Philips 42 PFL 7686/02 funktioniert die Fernbedienung in Zusammenhang mit dem Raspberry Pi ohne Probleme.

Zur Konfiguration gehören die folgenden Schritte:

  1. Sprache der Oberfläche
  2. Zeitzone
  3. Name für das Gerät
  4. SSH für den Fernzugriff erlauben
  5. Akzeptieren der Lizenz
  6. Look & Feel (OSMC + Klassisch)
  7. Newsletter

Als Name ich ich für mein Gerät ganz simpel „Mediacenter“ ausgewählt. Dadurch weiß ich immer sofort, um welchen Raspberry Pi 2 es sich handelt. Den SSH Zugriff habe ich aktiviert gelassen, was der Standardeinstellung entspricht. Dazu kommen wir später noch einmal genauer. Beim Look & Feel stehen nur zwei Designs zur Auswahl bereit. Ich habe es beim OSMC Design belassen, da ich später sehr wahrscheinlich noch ein anderes Theme auswähle. Dazu aber in einem weiteren Teil der Serie die Details.

Nachdem diese Konfiguration erledigt ist, startet die Oberfläche von OSMC und führt direkt einige Aktualisierungen durch. Insbesondere die vorinstallierten Add-Ons aktualisieren sich, was nicht ganz unwichtig ist. Dabei erscheint, zumindest bei mir, noch die Meldung, dass das Add-On TheAudioDB nicht mehr kompatibel ist und OSMC fragt, ob es deaktiviert werden soll. Zur Sicherheit habe ich das gemacht.

Die komplette Prozedur der Inbetriebnahme dauert in der Regel nicht länger als 5-10 Minuten. Je nachdem, wie schnell das Speichermedium ist, wie schnell die Aktualisierungen für die Add-Ons heruntergeladen sind und natürlich auch wie schnell ihr Einstellungen auswählt und Namen eintippt. Alles in allem aber eine schnelle Angelegenheit.

Zwischenfazit

Jetzt am Ende des dritten Teils der Serie sind wir ein Stück weiter. Die Hardware steht und die Software ist grundsätzlich installiert. Durch den erstmaligen Start des Raspberry Pi 2 mit installierten OSMC, konnten wir ebenfalls die ersten Einstellungen vornehmen. Das war natürlich noch nicht alles. Einige Schritte zu einem fertigen Mediacenter fehlen uns noch, auch wenn das nicht allzu viele sind beziehungsweise die Teilschritte an sich relativ überschaubar sind.

Im vierten und nächsten Teil der Serie geht es um die anfängliche Konfiguration der Quellen. Ich beschreibe, wie ich mein NAS eingerichtet habe, um davon Videos, Bilder und Musik abspielen zu können. Nach diesem vierten Teil ist das Mediacenter dann auch praktisch Einsatzbereit, denn es lassen sich verschiedene Inhalte mit verschiedenen Formaten aus verschiedenen Quellen abspielen. Also im Grunde genau das, was im Kern ein Mediacenter ausmacht.

Bevor ich auf weitere Software eingehe, ein Wunsch war zum Beispiel OpenELEC, werde ich diese Serie erst einmal komplett zu Ende bringen und dann Alternativen einstreuen. Nicht nur zur Software, sondern auch zur Hardware. So zumindest mein aktueller Plan. Anschließend möchte ich mich gerne um externe Geräte kümmern, die in vielen anderen Anleitungen außen vor gelassen werden. Beispielsweise CD- beziehungsweise DVD-Player. Mal schauen, ob das klappt und wie sich das entwickelt.

Bis dahin aber vielen Dank für die zahlreichen Rückmeldungen! Das Feedback, egal ober per Kommentar oder per E-Mail, hilft mir sehr, diese Serie für euch nützlich weiterzuführen.

Holger Schwichtenberg: Auslesen und Sortieren von GPX-Dateien

Die Windows PowerShell biete eine schnelle Lösung für die Aufgabe, eine größere Menge von XML-Dateien zu sortieren.

Norbert Eder: DNU – .NET Development Utility

Bei DNU handelt es sich um ein Commandline Werkzeug, das hilfreiche Funktionen für die Entwicklung zur Verfügung stellt.

Wie ich bereits zu DNX beschrieben habe, benötigt ein DNX-Projekt eine Datei project.json, welche das Projekt beschreibt und worin auch Abhängigkeiten beschrieben werden.

Neben DNU und DNX gibt es auch noch den .NET Version Manager DNVM.

Mit DNU können nun diese Abhängigkeiten (Pakete) verwaltet werden. Im Hintergrund arbeitet übrigens NuGet.

Um alle möglichen Befehle zu erhalten, muss DNU ohne Parameter oder mit dem Parameter -h ausgeführt werden:

.NET Deployment Utility

.NET Deployment Utility

Sehen wir uns das im Zuge eines Beispielprojektes an.

Für dieses Beispiel wird davon ausgegangen, dass yeoman und der ASP.NET Generator installiert sind (kann hier nachgelesen werden).

Via yo aspnet wird in einem beliebigen Verzeichnis eine ASP.NET application angelegt, nennen wir sie dnutest. Wechseln wir nach der Anlage in das neue Verzeichnis und sehen uns die Datei project.json an, sehen wir folgende Abhängigkeiten:

"dependencies": {
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.Sqlite": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
    "Microsoft.Dnx.Runtime":"1.0.0-rc1-final",
    "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions" : "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final"
  }

Damit wir sie verwenden können, müssen die jeweiligen Pakete noch bezogen werden. Hierzu rufen wir in der Commandline (im Verzeichnis in dem auch die project.json zu finden ist) den Befehl dnu restore auf.

Mit einem anschließenden dnu build wird das gesamte Projekt neu erstellt und kann mit dnx web gestartet werden.

Werden nun neue Abhängigkeiten in die project.json eingetragen, ist besagtes dnu restore aufzurufen.

Eine andere Möglichkeit, Abhängigkeiten hinzuzufügen ist die Installation von Paketen aus der Commandline:

dnu install newtonsoft.json

Damit wird Newtonsoft.Json installiert und automatisch der Datei project.json hinzugefügt.

Mit dnu wrap myproj.csproj kann aus der angegebenen Projekt-Datei ein project.json generiert werden und sieht dann so aus:

{
  "version": "1.0.0-*",
  "frameworks": {
    "net45": {
      "wrappedProject": "../../Sample/Sample.Tools.csproj",
      "bin": {
        "assembly": "../../Sample.Tools/obj/{configuration}/Sample.Tools",
        "pdb": "../../Sample.Tools/obj/{configuration}/Sample.Tools"
      }
    }
  }
}

Das kann nun in die ursprüngliche project.json übernommen werden. Der Vorteil: eigene Projekte/Bibliotheken können so eingebunden werden, ohne ein Package dafür generieren und bereitstellen zu müssen.

Für den Umgang mit Packages empfiehlt sich ein Blick auf die Parameter pack, packages und publish.

The post DNU – .NET Development Utility appeared first on Norbert Eder.

Holger Sirtl: Azure News on Friday (KW04/16)

Auch diese Woche gab’s wieder viele Nachrichten zur Microsoft Azure Plattform. Hier sind nähere Infos dazu…

Aktuelle Neuigkeiten

Datum Nachricht
28.01. Machine Learning in Azure Security Center
Einsatz von Azure Machine Learning im Azure Security Center (proaktive Infos zur Sicherheit von Azure Umgebungen)
27.01. Application Insights announces availability of Release Annotations
Release Annotations jetzt in Application Insights nutzen
27.01. For Developers: Important upcoming changes to the v2.0 Auth Protocol
Wichtig für Nutzer des v2.0 App Models zur Auth via Azure AD : Breaking Changes in anstehenden Aktualisierungen
27.01. Azure Media Player update with a 33% size reduction
Der neue Azure Media Player in Version 1.6.1 mit einer Größenreduzierung um 33%!
26.01. (Cross-Post) Announcing Azure Storage Data Movement Library 0.2.0
Storage Data Movement Library 0.2.0 - alles, was man zum Kopieren, Verschieben von Daten in Azure Storage braucht
26.01. File management with Azure Mobile Apps
File Handling (z.B. Backup & Recovery) in Azure App Service Mobile Apps
26.01. The first Technical Preview of Microsoft Azure Stack announced
Viele Azure Services im eigenen Rechenzentrum - Azure Stack als Technical Preview ab 29. Januar verfügbar!!!
26.01. Guidelines for Publishing to the Cortana Analytics Gallery
Informationen zu den Möglichkeiten, eigenen Content in die Cortana Analytics Gallery einzustellen
26.01. Announcing the first Technical Preview of Microsoft Azure Stack
Azure im eigenen Rechenzentrum - die erste Technical Preview für Azure Stack ist verfügbar!
26.01. Progress update: Node.js SDK for Azure App Service Mobile Apps
Informationen zum aktuellen Stand des Node.js SDK für Azure App Service Mobile Apps
25.01. Use Dynamic Data Masking to obfuscate your sensitive data
Dynamic Data Masking zum Schutz sensitiver Daten in Azure SQL Database nutzen

Neue Kurse in der MVA

Datum Nachricht
28.01. Build and Deploy Applications with the Microsoft App Platform
Implementierung und Deployment von Anwendungen in die Microsoft Azure Plattform
28.01. Secure Anywhere Access to Windows Apps
Über Azure RemoteApp sicheren Zugriff auf Line-of-Business Anwendungen herstellen
28.01. Take a Modern Approach to Data in Your Apps
Tipps zum Speichern und Finden von Daten in eigenen Apps mit Azure SQL Database, DocumentDB und Azure Search

Neue Videos

Datum Nachricht Video
27.01. Tuesdays with Corey: Troubleshooting and Diagnostics for VMs in Azure
Probleme in einer Azure Virtual Machine ? Corey Sanders mit einem Überblick zu Troubleshooting-Möglichkeiten
26.01. Indexing Blobs in Azure Search
Inhalte aus Azure Blob Storage (HTML, PDF, PowerPoint etc.) in einen Azure Search Index aufnehmen

Norbert Eder: Visual Studio Code Quicktipp #4 – Dateien schnell öffnen

Wer den ReSharper verwendet, kennt eventuell den Shortcut STRG+SHIFT+T um schnell zu einer bestimmten Datei zu navigieren.

Visual Studio Code besitzt diese Funktionalität auch, allerdings unterscheidet sich der Shortcut: STRG+P und die ersten Zeichen des gewünschten Dateinamens eingeben, auswählen + ENTER. Voilà. Die gesuchte Datei muss allerdings Teil des aktuellen Projektes sein.

Nächster Tipp: Visual Studio Code Quicktipp #5 – Insider’s channel

The post Visual Studio Code Quicktipp #4 – Dateien schnell öffnen appeared first on Norbert Eder.

Kay Giza [MS]: Liste der Visual Studio Code Extensions und Themes - Januar 2016 Report

Ich habe eine Liste für Visual Studio Code erstellt, mit allen vorhandenen Extensions Stand heute 28.01.2016. Natürlich kann man auch im Visual Studio Marketplace schauen oder in Visual Studio Code via F1 und ext install und sich die nützlichsten Extensions heraussuchen. Da es oben genannten Möglichkeiten zur Extension-Suche gibt, habe ich mir hier die Kurzbeschreibungen zu den Extensionen gespart und nur eine Liste erstellt, viel Spaß beim Durchstöbern! Nächste Liste gibt es Ende Februar wieder! [... mehr in diesem Blogartikel auf Giza-Blog.de]


This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2016 Kay Giza. All rights reserved. Legal

Norbert Eder: Visual Studio Code Quicktipp #3 – Keyboard Shortcuts verwalten

Nachdem Visual Studio Code gestartet wurde, können über File | Preferences | Keyboard Shortcuts die Default Keyboard Shortcuts geöffnet werden.

Visual Studio Code Keyboard Shortcuts

Visual Studio Code Keyboard Shortcuts

Nach dem Öffnen teilt sich das Fenster in zwei Editoren. Auf der linken Seite finden sich die aktuellen Shortcuts. Hier kann man sich einen Überblick der vorhandenen Möglichkeiten verschaffen.

Auf der rechten Seite wird die Datei keybindings.json aus %APPDATA%\Code\User geöffnet. Darin können eigene Bindings definiert, oder überschrieben werden. Hier eines der bestehenden Beispiele:

{ 
  "key": "escape",
  "command": "cancelRenameInput",
  "when": "editorFocus && renameInputVisible" 
}

key definiert hier die entsprechende Taste bzw. eine Kombination. command beschreibt die auszuführende Function und when definiert, wann dieses Key-Binding Gültigkeit besitzt.

Ein Blick durch die bestehende Liste gibt einen Überblick über die bestehenden Möglichkeiten. Ganz unten in den Default Keyboard Shortcuts befindet sich eine Liste zusätzlicher Kommandos. Zum aktuellen Zeitpunkt (Version 0.10.6) sind das:

  • deleteAllLeft
  • deleteAllRight
  • lineBreakInsert
  • editor.action.openLink
  • editor.action.findReferences
  • editor.action.showReferences
  • editor.action.goToTypeDeclaration
  • workbench.action.toggleSidebarPosition
  • workbench.action.closeAllEditors
  • workbench.action.closeOtherEditors
  • workbench.action.evenEditorWidths
  • workbench.action.maximizeEditor
  • workbench.action.minimizeOtherEditors
  • workbench.action.openGlobalSettings
  • workbench.action.openGlobalKeybindings
  • workbench.action.openWorkspaceSettings
  • workbench.action.editor.changeEOL
  • workbench.action.editor.changeEncoding
  • workbench.action.files.saveAll
  • workbench.action.files.saveFiles
  • workbench.action.files.revert
  • workbench.action.files.newFolder
  • workbench.files.action.compareFileWith
  • workbench.git.action.globalOpenChange
  • workbench.action.pull
  • workbench.action.push
  • workbench.action.sync
  • workbench.action.publish
  • workbench.action.git.startGitBranch
  • workbench.action.git.startGitCheckout
  • workbench.action.markdown.showWelcome
  • workbench.action.output.showOutput
  • editor.action.clearoutput
  • workbench.action.openSnippets
  • workbench.action.selectTheme
  • editor.debug.action.selectionToRepl
  • editor.debug.action.selectionToWatch
  • editor.debug.action.runToCursor
  • workbench.action.debug.restart
  • workbench.action.debug.pause
  • workbench.action.debug.configure
  • workbench.debug.action.openRepl
  • workbench.action.files.openFolder
  • workbench.action.openRecent
  • workbench.action.toggleDevTools
  • workbench.action.zoomReset
  • workbench.action.appPerf
  • workbench.action.reloadWindow
  • workbench.action.files.toggleAutoSave
  • workbench.extensions.action.listExtensions
  • workbench.extensions.action.installExtension
  • workbench.extensions.action.listOutdatedExtensions
  • vscode.executeWorkspaceSymbolProvider
  • vscode.executeDefinitionProvider
  • vscode.executeHoverProvider
  • vscode.executeDocumentHighlights
  • vscode.executeReferenceProvider
  • vscode.executeDocumentRenameProvider
  • vscode.executeSignatureHelpProvider
  • vscode.executeDocumentSymbolProvider
  • vscode.executeCompletionItemProvider
  • vscode.executeCodeActionProvider
  • vscode.executeCodeLensProvider
  • vscode.executeFormatDocumentProvider
  • vscode.executeFormatRangeProvider
  • vscode.executeFormatOnTypeProvider

Wer sich da tiefer in die Materie arbeiten möchte, der findet die offizielle Dokumentation zu diesem Thema sicherlich sehr hilfreich: Key Bindings for Visual Studio Code.

Nächster Tipp: Visual Studio Code Quicktipp #4 – Dateien schnell öffnen

The post Visual Studio Code Quicktipp #3 – Keyboard Shortcuts verwalten appeared first on Norbert Eder.

Golo Roden: Lisp lernen, Teil 2: Quicksort implementieren

Quicksort ist ein schneller und bekannter Algorithmus zum Sortieren von Daten. Da er rekursiv arbeitet, eignet er sich gut als Übungsaufgabe. An der Implementierung lassen sich zudem einige interessante Konstrukte von Lisp zeigen.

Jürgen Gutsch: Playing around with GenFu

In the past I used NBuilder (by Gareth Down) to create test data for my unit tests, demos and UI mock-ups. I really liked NBuilder, I used it for many years and I wrote about it in my old blog (ger) and in the dotnetpro (a German .NET magazine)

Unfortunately NBuilder is not compatible with .NET Core and there was no new release since 2011. Currently I play around with ASP.NET 5 and .NET Core, so compatibility to .NET Core and the latest dotnet platform standard is needed.

Good I attended the MVP Summit 2015 and the Hackaton at the last day, because I heard about GenFu, written by James Chambers, David Paquette and Simon Timms. They used that Hackathon to move this library to .NET Core. I did the same with LightCore at the same event.

GenFu also was a test data generator with some more features than NBuilder. GenFu includes some random data generators to create real looking data.

"GenFu is a library you can use to generate realistic test data. It is composed of several property fillers that can populate commonly named properties through reflection using an internal database of values or randomly created data. You can override any of the fillers and give GenFu hints on how to fill properties."

PM> Install-Package GenFu

To learn more about GenFu, I need to play around with it. I did this by writing a small ASP.NET 5 application which shows us user groups and their meetings and speakers and their topics. I also pushed that application to GitHub. So let me show what I found while playing around:

Setup the project

I created a new ASP.NET Core 1 web application (without the authentication stuff) and added "GenFu": "1.0.4" to the dependencies in the project.json.

After that I created a set of types like UserGroup, Lead, Meeting, Speaker and so on.

E. g. the UserGroup looks like this:

public class UserGroup
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public IEnumerable<Leader> Leaders { get; set; }
    public DateTime Founded { get; set; }
    public int Members { get; set; }
    public IEnumerable<Meeting> Meetings { get; set; }
}

Using GenFu

Let's start creating a List of user groups to show on the start page. Like NBuilder, GenFu is using a fluent API to create the a single instance or a list of a specific type:

var userGroup = A.New<UserGroup>();

var usergroups = A.ListOf<UserGroup>(20);

The second line of code generates a List of 20 user groups. The DateTime, Guid and String properties are already filled with randomly created values.

What I want to have is a list with some more real looking data. The good thing about GenFu is, it already includes some sample data and a pretty cool fluent API to configure the types:

A.Configure<UserGroup>()
    .Fill(x => x.Members).WithinRange(10, 250)
    .Fill(x => x.Name).AsMusicGenreName()
    .Fill(x => x.Description).AsMusicGenreDescription()
    .Fill(x => x.Founded).AsPastDate();

The configuration needs to be done before retrieving the list or the single object. The result now is much better than before:

We now have a list of music genre user groups :)

To fill the properties Leaders and Meetings, I created lists before the configuration of the UserGroup and created a extension method on IEnumerable to get a almost random list out of the source list:

var leaders = A.ListOf<Leader>(20);
var meetings = A.ListOf<Meeting>(100);

A.Configure<UserGroup>()
    .Fill(x => x.Members).WithinRange(10, 250)
    .Fill(x => x.Name).AsMusicGenreName()
    .Fill(x => x.Description).AsMusicGenreDescription()
    .Fill(x => x.Founded).AsPastDate()
    .Fill(x => x.Leaders, leaders.GetRandom(1, 4))
    .Fill(x => x.Meetings, meetings.GetRandom(20,100));
            
var usergroups = A.ListOf<UserGroup>(20);

Now we can start to create the leaders, speakers, meetings in the same way to get the full set of data. E. g. to get a list of speakers we can also use same methods as to generate the user groups:

var speakers = A.ListOf<Speaker>(20);

But wait! Did I really configure the Speakers?

I did not!

I just created the list, but I get well looking names, twitter handles, email addresses and I get a nice phone number. Only the website, the description and the topics list are not well configured. Sure, the names, twitter handles and email addresses don't match, but this is not really important.

This is another pretty cool feature of GenFu. Depending of the property name, it finds the right thing called Filler. We are able to configure the speakers, to assign the Filler we want to have, but in many cases GenFu is able to find the right one, without any configuration.

Just type A.Defaults or GenFu.Defaults to get a list of constants to see what data are already included in GenFu.

Lets extend GenFu to create our own Filler to generate random website addresses. A small look into the EmailFiller shows me how easy it is to create our own PropertyFiller. A string based PropertyFiller can inherit base functionality from the PropertyFiller:

public class WebAddressFiller : PropertyFiller<string>
{
    public WebAddressFiller()
        : base(
                new[] { "object" },
                new[] { "website", "web", "webaddress" })
    {
    }

    public override object GetValue(object instance)
    {
        var domain = Domains.DomainName();

        return $"https://www.{domain}";
    }
}

The first argument we pass into the base constructor is a list of type names of the objects we want to fill. "object" in this case means any kind of type based on Object. In GenFu there are different Fillers to fill the property title, because a person title is a different thing than an article title. Like this you can create different fillers for the same property name.

The second argument are the property names to fill.

In the method GetValue we can generate the value and return them back. Because there already is a EmailFiller which generates domain names too, I reuse the ValueGenerator DomainName to get a random domain name out of GenFus resources.

No we need to register the new Filler to GenFu and to use it:

A.Default().FillerManager.RegisterFiller(new WebAddressFiller());
var speakers = A.ListOf<Speaker>(20);

The result is as expect. We get well formed web addresses:

That was pretty easy with only a few lines of code :)

In one the first snippets at the beginning of this post, I created an extension method to create a random length list out of a source list. Wouldn't it be better, if we could create a ListFiller to do that automatically? There is already a configuration extension for list properties called WithRandom, but this thing whats to have a list of lists to select a list out of it randomly. I would like to have it a little more different. I would like to have an extension method, where I pass the source list and a min and a max count of list entries:

public static GenFuConfigurator<TType> AsRandom<TType, TData>(
    this GenFuComplexPropertyConfigurator<TType, IEnumerable<TData>> configurator,
    IEnumerable<TData> data, int min, int max)
    where TType : new()
{
    configurator.Maggie.RegisterFiller(
        new CustomFiller<IEnumerable<TData>>(
            configurator.PropertyInfo.Name, typeof(TType),
            () => data.GetRandom(min, max)));

    return configurator;
}

This isn't really a Filler. This is an ExtensionMethod on the GenFuComplexPropertyConfiguration which registers a CustomFilleer to get random data out of the source list. As you can see, I reused the initially created extension method to generate the random lists, but I needed to modify that extension method to use the randomizer of GenFu instead of a separate one:

private static IEnumerable<T> GetRandom<T>(this IEnumerable<T> source, int min, int max)
{
    var length = source.Count();
    var index = A.Random.Next(0, length - 1);
    var count = A.Random.Next(min, max);

    return source.Skip(index).Take(count);
}

I also made this method private because of the dependency to GenFu.

Now I can use this method in the GenFu configuration of the UserGroup to randomly fill the leaders and the meetings of a user group:

var leaders = A.ListOf<Leader>(20);
var meetings = A.ListOf<Meeting>(100);

A.Configure<UserGroup>()
    .Fill(x => x.Members).WithinRange(10, 250)
    .Fill(x => x.Name).AsMusicGenreName()
    .Fill(x => x.Description).AsMusicGenreDescription()
    .Fill(x => x.Founded).AsPastDate()
    .Fill(x => x.Leaders).AsRandom(leaders, 1, 4)
    .Fill(x => x.Meetings).AsRandom(meetings, 5, 100);

This is not really much code to automatically generate test data for your test or the dummy data of your mock-up. Just a bit of configuration which can be placed somewhere in a central place.

I think ...

... GenFu becomes my favorite library to create test and dummy data. I like the way GenFu generates well looking random dummy data. GenFu is really easy to use and to extend.

BTW: You'll find the small play around application on GitHub: https://github.com/JuergenGutsch/GenFuUserGroups/

codefest.at [MS]: DevOps mit Visual Studio Team Services

In den letzten Konferenzen haben sich David Tesar und Donovan Brown zu Top-Sprechern im Bereich von DevOps entwickelt. Vor allem das Rollenspiel zwischen IT-Betrieb/Infrastruktur und Entwickler beleben das Thema sehr. Die beiden haben nun auch einen “Kurs” in der Microsoft Virtual Academy zum Thema Enabling DevOps Practices with Visual Studio Online Build herausgebracht – dieser gibt einen guten Einblick in die Themen, Build, CI, automatisiertes Testen und Deployment/Release Management in Visual Studio Team Services.

Fabian Deitelhoff: LEGO Mindstorms EV3: Tipps & Tricks zur Fehlersuche

Mit dem LEGO Mindstorms EV3 zu basteln, zu programmieren und einfach Ideen auszuprobieren macht unheimlich viel Spaß. Und das nicht nur Kindern, wie ich in meinen Kursen immer wieder eindrucksvoll merke. :) Wenn aber etwas nicht so läuft wie gewünscht, ist der Spaß schnell verschwunden und weicht dem Frust. Woher die Fehler auch kommen ist leider nicht immer so schnell ersichtlich, wie wir uns das wünschen würden. Fehlerursachen gibt es genug. Defekte Hardware, falsch gebaute EV3-Modelle, falsch angeschlossene Hardware und natürlich eigene Programmierfehler, sind nur einige der möglichen Fehlerquellen. Und trotzdem sind gerade diese Fehler für die meisten Probleme verantwortlich.

In diesem Beitrag gebe ich dir einen Überblick über häufige Stolperfallen und zeige auch gleich, wie du sie am besten beheben kannst. Aktuell behandelt der Beitrag Probleme in Zusammenhang mit Windows PCs und mit Mac OS X. Spezifische Tipps zu Linux reiche ich bei Gelegenheit nach.

Verbindungsprobleme

Ganz am Anfang der Fehlerliste stehen häufig Verbindungsprobleme. Damit ist in der Regel die Verbindung vom LEGO Mindstorms EV3 zu einem PC mit Windows oder einem Gerät mit Mac OS X gemeint. Wird der LEGO Mindstorms EV3 nicht erkannt, hat das oft die folgenden Ursachen.

  • Das USB-Kabel am LEGO Mindstorms EV3 oder am PC ist nicht richtig angeschlossen. Gerade am EV3 wird es häufig nicht richtig eingesteckt, weil viele LEGO Modelle den Anschluss etwas versperren können.
  • Der LEGO Mindstorms EV3 muss eingeschaltet sein, damit er vom System erkannt wird.
  • Es werden keine Treiber für den LEGO Mindstorms EV3 installiert. Wenn das an einem USB-Anschluss partout nicht funktionieren möchte, auf jeden Fall einen anderen USB-Anschluss ausprobieren. Nicht an allen PCs sind alle USB-Anschlüsse aktiv. Vor allem diejenigen, die im Gehäuse nach vorne zeigen, sind häufig gar nicht angeschlossen. Im Allgemeinen kann die erste Installation der Treiber auch eine Weile dauern. Also ruhig etwas Geduld mitbringen. :)
  • Die automatische Treiber-Installation hat nicht richtig funktioniert. Gerade unter Windows tritt das häufiger auf. Hier könnten fehlende Rechte das Problem sein. Kannst du sonst Programme auf dem PC installieren? Wenn nein, kann es durchaus damit zusammenhängen.

Eine gute Möglichkeit, die Verbindung zu überprüfen, ist die Stein-Info in der LEGO Mindstorms EV3 Home Edition (siehe Abbildung 1). Dort muss der EV3 Brick angezeigt werden. Ist das nicht der Fall, bitte die Punkte oben checken, da dann ganz sicher etwas nicht mit der Verbindung stimmt. Die geöffnete Stein-Info bietet auch gleichzeitig eine gute Möglichkeit, den Namen deines EV3 Brick zu ändern, wenn du das möchtest und mal einen Blick auf Version der Firmware zu werfen.

Abb. 1: Die aktive Stein-Info mit den Daten eines angeschlossenen LEGO Mindstorms EV3.

Abb. 1: Die aktive Stein-Info mit den Daten eines angeschlossenen LEGO Mindstorms EV3.

Möglicherweise hilft dir auch die Ansicht der verfügbaren Steine weiter, wie in Abbildung 2 zu sehen. Dort werden alle LEGO Mindstorms EV3 Bricks aufgeführt, die gefunden werden konnten. Entweder über USB, über Bluetooth oder WLAN. Dort muss dein Brick auftauchen.

Abb. 2: Verfügbare LEGO Mindstorms EV3 Steine in der Home Edition Software.

Abb. 2: Verfügbare LEGO Mindstorms EV3 Steine in der Home Edition Software.

Die Firmware aktualisieren

Im Zweifel kannst du über Werkzeuge | Firmware Aktualisierung prüfen, ob es eine neue Version gibt (siehe Abbildung 3). Die lohnt es sich immer einzuspielen, um auf diese weise Fehlerquellen auszuschließen. Natürlich erst dann, wenn die Verbindung überhaupt steht.

In aktuellen Versionen der LEGO Mindstorms EV3 Home Edition scheint die automatische Prüfung auf eine neue Firmware Version nicht mehr zuverlässig zu funktionieren. Zumindest konnte ich das Verhalten schon mehrfach beobachten. Als ich am 25. Januar 2016 das letzte Mal nachgesehen habe, war die Version 1.09H die aktuellste Version. Wenn deine älter ist, bitte direkt aktualisieren.

Abb. 3: Neue Firmware zum LEGO Mindstorms EV3 (nach manuellem Download).

Abb. 3: Neue Firmware zum LEGO Mindstorms EV3 (nach manuellem Download).

Ein kleiner Hinweis: Bei vielen ist es zu Problemen beim Einspielen der Version 1.09H gekommen. Wenn sich dein Brick beim Firmware-Update aufhängt, dann befolge den Anweisungen des LEGO Mindstorms EV3 Home Edition Software, nachdem du den Vorgang über die Schaltfläche Abbrechen beendet hast. Abbildung 4 zeigt diese Anweisungen zur Sicherheit auch noch einmal. Wenn gar nichts mehr geht, kannst du mir gerne eine Nachricht schreiben.

Abb. 4: Anweisungen zum Zurücksetzen eines LEGO Mindstorms EV3 Bricks.

Abb. 4: Anweisungen zum Zurücksetzen eines LEGO Mindstorms EV3 Bricks.

Welches EV3-Modell ist gut?

Zum Testen eignen sich immer ganz einfache Modelle am besten. Das ist natürlich leichter gesagt als getan. Denn wer an seinem Modell bastelt und immer neue Funktionen hinzufügt, der hat auch irgendwann ein komplexere EV3-Modell vor sich stehen. Das ist nur logisch. Für diese allgemeinen Fehler, die ich hier beschreibe und die recht häufig am Anfang auftreten, lohnt es sich aber, ganz eine Tests durchzuführen.

Wenn du dir nicht sicher bist, dass ein Motor genau das macht, was du in der Programmierung von ihm erwartest, dann bau einen Motor aus, schließe nur diesen Motor an den Brick an und lasse ihn etwas laufen. Du kannst vielleicht noch eine LEGO Technic Stange einsetzen oder irgendetwas anderes, um besser überprüfen zu können, ob sich die Achse auch wirklich dreht so wie du dir das vorgestellt hast.

Bei der Fehlersuche gilt immer: Es ist besser, ein sogenanntes Minimalbeispiel zu erstellen, als zu versuchen, sein riesiges Konstrukt aus Anweisungen zum Laufen zu bekommen. Insbesondere bei grundlegenden Fehlern, wie nicht gut drehende Motoren, ist das anzuraten.

Ein Minimalbeispiel ist der minimale, voll funktionsfähige EV3 G-Code zur Darstellung eines bestimmten Verhaltens oder Fehlers.

Mit EV3 G-Code ist deine Programmierung aus der LEGO Mindstorms EV3 Entwicklungsumgebung gemeint. Die sollte nur einen kleinen Ausschnitt dessen testen, was du vorhast. Die Definition eines Minimalbeispiels lässt sich natürlich auch auf einen LEGO Roboter beziehen.

Ein Minimalbeispiel ist der minimale, voll funktionsfähige EV3 LEGO Roboter zur Darstellung eines bestimmten Verhaltens oder Fehlers.

Wie aber oben schon erwähnt, kann das für ein EV3 Roboter, der mit der Zeit größer und komplexer wird, nicht ganz so einfach sein zu erreichen. Einen Versuch ist es aber wert.

In meinem Beitrag mit allgemeinen Tipps und Tricks zu meinen Kursen verrate ich dir noch einige Hinweise mehr zu EV3-Modellen, die sich gut für Übungen und zur Fehlersuche im Allgemeinen eignen.

Allgemeine Funktionstests

Wenn die Verbindung steht und die Firmware aktuell ist, sorgen die ersten Funktionstests dafür zu prüfen, ob auch alles richtig angeschlossen ist und die eigene Programmierung das tut, was wir uns vorgestellt hatten.

Wer sich nicht sicher ist, ob sein Brick überhaupt funktioniert, was leider hin und wieder vorkommt, der sollte ganz einfache Programme laufen lassen. Nichts verrücktes oder aufwändiges, sondern einfach nur einen Motoren vor- und zurückbewegen. Bei einem Fahrzeug auch gerne beide Motoren, um das EV3-Modell vor- und zurück zu bewegen. Diese Tests lassen sich mit sehr wenig Aufwand realisieren. Sowohl was das notwendige EV3-Modell anbelangt, als auch von der Programmierung an sich.

Wenn das funktioniert, können anderen Funktionen getestet werden. Beispielsweise die Ausgabe von Tönen, die Anzeige von Text auf dem Display des LEGO Mindstorms EV3 oder die ersten Sensoren.

Ich habe für diese Zwecke eine Reihe kleiner Testprogramme für den LEGO Mindstorms EV3 in der Home Edition geschrieben, die ich gerne ausführen lassen, wenn sich jemand nicht sicher ist, ob sein Brick richtig funktioniert. Diese Testprogramme kannst du dir über den folgenden Link herunterladen.

Download der Testprogramme (24,6 kB)

Falls das noch immer nicht richtig funktioniert und du dir nicht sicher bist, kannst du mir auch gerne eine Nachricht schicken und ich gucke mir das Problem konkret an. Dazu am besten direkt ein Programm von dir, was nicht richtig funktioniert, mitschicken. Dann habe ich deutlich bessere Chancen zu helfen.

Auch bei den Funktionstests, die meistens hauptsächlich auf den Software-Blöcken, also eurer Programmierung beruhen, sind kleine Schritte wichtig. Kleine Schritte lassen sich am einfachsten mit einem Minimalbeispiel erreichen. Für die Funktionstests gilt also genau das, was ich oben schon einmal zu einem guten Modell geschrieben hatte, nur auf die Programmierung bezogen:

Ein Minimalbeispiel ist das minimale, voll funktionsfähige EV3 Programm zur Darstellung eines bestimmten Verhaltens oder Fehlers.

Zusammenfassung

Jetzt ist der Artikel doch wieder länger geworden, als ich das eigentlich geplant hatte. :)

Ich hoffe, ich konnte mit den Tipps & Tricks oben ein weniger weiterhelfen, wenn es mit dem LEGO Mindstorms EV3 mal nicht so klappt, wie ihr euch das vorgestellt habt. Bei der Fehlersuche ganz wichtig sind kleine Schritte. Stellt euch vor, ihr wollt nur einen kleinen Teil eures Programms zum Laufen bringen. Was müsst ihr dafür tun? Welche Software-Blöcke braucht ihr und wie muss die Hardware aufgebaut sein? Wenn das dann klappt, könnt ihr sowohl euer Programm, wie auch euer LEGO Modell Schritt für Schritt erweitern.

Und wenn gar nichts mehr geht, freue ich mich immer über eine Nachricht. Gerne mit aussagekräftiger Fehlermeldung, um euch so gut es geht weiterhelfen zu können. :)

Golo Roden: Programmierkonzepte, Teil 4: Dynamische Typisierung

Typsysteme lassen sich auf vielerlei Art einteilen: statisch, dynamisch, streng, schwach, explizit, implizit, nominal, strukturell … Derzeit erfahren vor allem dynamisch typisierte Sprachen viel Zuspruch, doch das war nicht immer so. Ein Überblick.

Holger Schwichtenberg: Pro und Contra des Versionswechsels von .NET Core 5 und ASP.NET 5

Auf der Zielgeraden hat Microsoft sich entschieden, die Versionszählung für die modulare Neuimplementierung von .NET wieder bei 1 zu beginnen. Das macht durchaus Sinn, aber warum so spät?

Holger Sirtl: Azure News on Friday (KW03/16)

Auch diese Woche gab’s wieder viele Nachrichten zur Microsoft Azure Plattform. Hier sind nähere Infos dazu…

Aktuelle Neuigkeiten

Datum Nachricht
21.01. January 2016: Azure Media Services classic portal encoding services update
Verbesserungen in der Oberfläche der Media Services im Azure Management Portal
21.01. Announcing the Azure SDK 2.8.2 for .NET
Das Azure SDK 2.8.2 für .NET ist da! Verbesserungen in der UI, Performance und Resource Manager Templates
21.01. Limiting access to data using Row-Level Security
Zeilenbasierte Security (row level security) in Azure SQL Database
21.01. New DocumentDB articles help you find samples for the most common tasks
Neue Dokumentation für DocumentDB Nutzer in .NET un NodeJS mit Beispielcode
21.01. Alarm App Uses ML from Project Oxford to Wake You Up
Mimicker Alarm - cooler Showcase aus der Microsoft Garage - Azure Machine Learning, Project Oxford etc.
20.01. Application Insights Proactive Detection
Proaktive Benachrichtigung über abnormales Verhalten einer App auf Basis ihrer Azure Application Insights Daten
20.01. Custom analyzers in Azure Search
Suchergebnisse in Azure Search über eigene Analyzer (z.B. für proprietäre Dokumentenformate) optimieren
20.01. Azure Batch service update (December 2015)
Neu im Azure Batch Service - MPI Unterstützung, Offline-Setzen von Nodes ohne Löschen, flexibleres Autoscaling
19.01. AJAX Collection in Application Insights
Interessant für Web-Entwickler: AJAX Aufrufe mit Abhängigkeiten über Application Insights auswerten
19.01. How Halo 5 implemented cloud scale telemetry using Azure Event Hubs Hintergründe dazu, wie Halo 5 Telemetriedaten über Azure Event Hubs verwaltet und auswertbar macht
19.01. Lift-and-shift your workloads with Azure RemoteApp and Azure AD Domain Services
Empfehlungen dafür, wie Azure RemoteApp in Kombination mit Azure AD Domain Services genutzt werden können
19.01. Visualizing Azure Search data with Power BI
Mit dem Azure Search Content Pack für Power BI die Nutzung von Azure Search visualisieren
19.01. Analyzing your Azure Search traffic
Metriken zu Azure Search mittels Search Traffic Analytics sammeln, visualisieren und auswerten.
19.01. Azure AD Mailbag: Azure AD App Proxy
Sean Ivey beantwortet die wichtigsten Fragen rund um Azure AD App Proxy
19.01. Announcing the Beta Apache Cordova Plugin for Azure App Service Mobile Apps
Verbindungen zu App Service Mobile App Backends über das Apache Cordova Plugin (Beta) aufbauen
19.01. Key Vault in Azure China and Azure Government
Azure Key Vault ist jetzt auch in China und der Azure Government Cloud verfügbar
16.01. Share your Excel data with Power BI publisher for Excel Preview

Neue Kurse in der MVA

Datum Nachricht
19.01. Design and Implement Cloud Data Platform Solutions

Neue Videos

Datum Nachricht Video
21.01. Data Preparation with the U-SQL language
Michael Rys über U-SQL - die Abfragesprache für Big Data Abfragen im Azure Data Lake Analytics Service
20.01. How to set VM policies in a DevTest Lab
VM Policies in DevTest Labs
20.01. What is Azure Data Lake?
1-stündiger Überblick über Azure Data Lake - was ist das? wozu ist er gut? wie ist er aufgebaut?
20.01. Tuesdays with Corey: Simplest way to deploy SQL Server to the Cloud
Corey Sanders über die Möglichkeit SQL Server via Azure Deployment Templates einfach in Azure bereitzustellen
20.01. In-Memory OLTP for Azure SQL DB

19.01. Custom Analyzers, Search Analytics, & Portal Querying in Azure Search
Liam Cavanagh über die neuen Möglichkeiten in Azure Search - Search Explorer, Power BI, Lucene Queries etc.
18.01. PnP Web Cast - HelpDesk application with Microsoft Graph

Constantin Klein: Kumulative Updates für SQL Server 2012 SP2 und SQL Server 2012 SP3 veröffentlicht

Mit guten Vorsätzen ins neue Jahr. Nachdem es hier lange Zeit sehr ruhig war, möchte ich Euch in diesem Jahr wieder häufiger mit neuen Artikeln beglücken. Los geht es mit neuen kumulativen Updates für SQL Server 2012. Microsoft hat zwei neue kumulative Updates für SQL Server veröffentlicht: Update KB Artikel Build Nr. Anzahl Fixes SQL […]

codefest.at [MS]: Global Game Jam Graz 2016

Wie in den vergangen Jahren findet auch heuer in Graz die Global Game Jam Graz statt. Die Global Game Jam ist ein internationaler Event, an dem in verschiedenen Städten rund um die Welt am selben Wochenende eine Game Jam veranstaltet wird. Hierbei treffen sich Entwickler, Designer, Künstler – Interessierte sowie Experten – um gemeinsam ein Spiel zu entwicklen.

Die Global Game Jam Graz findet vom 29. – 31. Jänner an der Technischen Universität Graz statt. Weitere Informationen und Anmeldeseite findet ihr hier: http://gamejam.at/2016/

global_game_jam_graz_poster_2016_960x1356

Wir wünschen viel Spaß beim Jammen!

Johannes Renatus: AngularJs mit ngPaste Text abfangen und vor dem Einfügen bearbeiten

Die Direktive “ngPaste” selbst wird von AngularJs ab der Version 1.2.x bereitgestellt und kann z.B. verwendet werden um zu prüfen ob ein Text über die Zwischenablage eingefügt wurde, oder um beim Einfügen von markierten und kopierten Excel Zellen diese vorher noch entsprechend “umzuformatieren”, bevor diese in der passenden Modelvariablen abgelegt werden. Ein HTML Template snippet […]

codefest.at [MS]: Die //build 2016 ist ausverkauft, komm zum Keynotestreaming in Graz, Linz und Wien

Microsoft //build Ausverkauft

Da die //build komplett ausverkauft ist bringen wir die //build zu Euch und veranstalten //build Keynotestreamings in Graz, Linz und Wien. Meldet Euch noch heute an, die Plätze sind begrenzt!

Die //build wird vom 30. März bis 1. April 2016 in San Francisco stattfinden.

Zur Einstimmung findet Ihr hier den Rückblick auf die //build Konferenz des Vorjahrs, unter anderem die Keynote von Microsoft CEO Satya Nadella.

Keynote Tag 1:

  • Microsoft CEO, Satya Nadella describes Microsoft's opportunity to Build the Intelligent Cloud, Reinvent productivity and business process and create more personal computing.
  • Scott Guthrie explains how Microsoft's Azure is poised to create the Intelligent Cloud.
  • Satya explains how Microsoft Office is evolving to reinvent productivity.
  • Terry Myerson explained how Windows 10 will create more personal computing with new bridges to enable developers to evolve their code into Windows 10 to enable phones, tablets, desktop, Xbox and Holograms.

Keynote Tag 2: Microsoft's Chief Technical Evangelist, Steve Guggenheimer and Chief Geek, John Shewchuk drilled deeper into the concepts explained in day 1 by providing coding deep dives.

  • Media and entertainment reinvention were seen with Muzik Official's Bluetooth wireless drumsticks,
  • Acumatica's use of Power BI illustrated how to rethink reporting.
  • New open source projects Vorlon and Manifold.JS were introduced.
  • David Treadwell and Kevin Gallo showed how to build a universal Windows App and gave a peek at the code required to move Android and iOS apps forward.
  • Joseph Sirosh described the connected cow, talked about machine learning with March Madness and Genomics and brought How-Old.Net to the mainstream.
  • Briana Roberts and Aidan Brady introduced a Minecraft modding project to Visual Studio using Java.

Golo Roden: Lisp lernen, Teil 1: Primzahlen berechnen

Die Syntax von Lisp ist minimalistisch, dennoch (oder gerade deswegen) birgt die Sprache ein enormes Potenzial. Um Lisp zu lernen und zu üben, hilft das regelmäßige Schreiben von Code mehr als eine rein theoretische Beschäftigung mit der Sprache. Zum Auftakt ist das Ziel eine Funktion zum Berechnen von Primzahlen.

Martin Hey: Playlist erstellen für PlayPoster von OOSM

Nachdem ich in meinem letzten Post geschrieben habe, wie man PlayPoster in Betrieb nimmt, soll es heute darum gehen, meine Anwendungsfälle mal abzubilden. Dazu erstelle ich im Admin-Portal eine Playlist und befülle diese mit Inhalten.


Das Admin Portal kommt sehr übersichtlich daher und alle wichtigen Menüpunkte sind per Direktlink verfügbar. Nun ein paar Worte zur Struktur: Ein PlayPoster Stick (= Unit) gehört zu einer Gruppe (= Location). Einer Location und damit allen darin enthaltenen Devices können Playlists zugeordnet werden, die entweder ganztägig, morgens, mittags oder abends aktiv sein können. Eine Playlist selbst ist eine Reihenfolge von Bausteinen, die im Editor erstellt oder bearbeitet werden können. In einigen Bausteinen werden Bilder benötigt (oder sind zumindest sinnvoll). Diese liegen unter Files.
Logo Baustein erzeugen
Ein recht simpler Baustein ist der Bildbaustein in dem einfach eine bestimmte Zeit lang ein Bild angezeigt wird. Dieser Baustein ist auch bereits in der Standard-Playlist mit der das Gerät ausgeliefert wird enthalten. Wie erzeugt man nun selbst einen solchen Baustein? Ganz einfach: Dazu legt man einfach in der Menüleiste ein Bild per Drag&Drop ab und definiert im anschließend erscheinenden Dialog noch die Anzeigedauer (diese ist immer im Format mm:ss).

Externe Webseite einbinden
In meinem vorigen Post habe ich ja als Use-Case angegeben, dass ich den Ticketstatus (bei uns aus dem Redmine) und den Status des Build- und Testsystems (bei uns Jenkins) anzeigen will. Dafür gibt es natürlich keine vorgefertigten Bausteine. Aber wozu bin ich Entwickler? Ich kann ja auf einem unserer Rechner noch einen Webserver laufen lassen, der die Daten nach meinen Wünschen aggregiert und anzeigt. Diese Webseite kann ich dann anzeigen lassen. Dazu erstelle ich unter Editor einfach einen neuen Baustein, weise das Template "External Page" zu und gebe die Url an, die angezeigt werden soll und auch wieder die Anzeigedauer. Die Url muss aus Sicht des Sticks angegeben werden - ich kann also auch lokale Urls verwenden. Die Vorschau im Browser funktioniert technisch bedingt nicht, wenn ich mich beim editieren nicht im gleichen Netz wie der Stick befinde und die Webseite für mich dann nicht erreichbar ist oder wenn meine Url eine http-Url ist (da das Portal https ist und der Browser unsichere Elemente in blockiert). Auf dem Device funktioniert es dann aber.

Tweets anzeigen
Ähnlich einfach ist die Anzeige von Tweets. Dazu verwendet man den Baustein "Twitter" und gibt den Hashtag oder die Person an der man folgen will. Innerhalb der definierten Anzeigedauer wird dann alle paar Sekunden durch die so gefilterten Tweets gewechselt. Da sowohl Schriftfarbe als auch Standard-Hintergrund weiß sind, ist es bei diesem Baustein wichtig, dass man im Editor das Hintergrundbild definiert. Dazu lädt man einfach im Vorab über Files ein Bild in der Hintergrundfarbe seiner Wahl hoch und setzt es im Baustein als Hintergrund.

Statische Texte
Zur Anzeige statischer Texte gibt es verschiedene Templates. Ich verwende dazu in der Regel eines der "Pricelist" Templates, da ich oft eine tabellarische Ansicht brauche (z.B. für die Ankündigung von Community Events). 

Playlist erstellen
Nun da ich alle Bausteine erstelle habe, muss ich nur noch eine Playlist aus diesen erstellen. Dazu wechsle ich unter Playlists und ziehe mir per Drag&Drop die Bausteine in der gewünschten Reihenfolge in meine Timeline und speichere die Playlist ab. 
Wenn ich mir noch aussuche wann und wo die Playlist gespielt werden soll, wird sie auch gleich auf die anhand der Location gewählten Devices gepusht und dort direkt angezeigt.

Ein komplettes Tutorial gibt es auf der OOSM Support Seite

Jürgen Gutsch: ASP.NET 5 is now ASP.NET Core 1

Naming seems to be the hardest thing for software developers, even for Microsoft. ;) There where huge discussions about the naming of ASP.NET vNext at the MVP Summit 2015 and around the world. Now they found the right names for completely new things: Yesterday Microsoft reintroduced ASP.NET Core 1.0 and .NET Core 1.0.

Now they have a lot to do to change all the NuGet packages, library names and version numbers. But from my perspective this is a good change, because all this stuff are completely new things. The .NET Core libraries, .NET core 1.0 and ASP.NET Core 1.0 are completely rewritten and redesigned. The new names and the version 1.0 makes absolutely sense now.

BTW: this also happens to Entity Framework 7, which is now called Entity Framework Core 1.0 or EF Core 1.0.

image source http://www.hanselman.com/blog/ASPNET5IsDeadIntroducingASPNETCore10AndNETCore10.aspx

To get more information about the changes, read Scott Hanselmany Blog post about it and watch the latest ASP.NET Community Standup

There is another benefit with that name changes, I think: Now it is possible to update the "classic" ASP.NET 4.6 and .NET Framework to a new version 5.0 in the future without confusing all the .NET developers ;)

The only bad thing about this is, there are too much changes while ASP.NET Core is in RC with a go-live license. This is a little bit critical. This changes should have been done in the beta state.

What do you think about the name and version changes?

friends header

bloggers headline

links header

 
Don't contact us via this (fleischfalle@alphasierrapapa.com) email address.