.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv September 2015

Plattformunabhängige Desktop-Apps

30.09.2015 10:06:00 | Jürgen Gutsch

Das erstellen von plattformunabhängigen Desktop-Apps, mit HTML5 und JavaScript zu erstellen ist aktuell in aller Munde und ein großes Thema. Plattformunabhängige Apps gibt es immer mehr. Schöne Beispiele sind unter anderem die IDEs Brackets, Visual Studio Code, Ionic Labs, sowie der Messenger Slack

Dennoch schreibe ich das nicht aus dem Grund, weil es im Moment ein Hype zu sein scheint, sondern weil es rein Zufällig eine aktuelle Anforderung ist.

Genauer geht es darum, eine Web-App auch offline Verfügbar zu machen und auf möglichst vielen verschiedenen Plattformen verfügbar zu machen.

In den letzten Tagen habe ich mich deshalb ein wenig umgeschaut und app.js und nw.js genauer angeschaut. Auch auf electron habe ich einen kurzen Blick geworfen. Dieses sehr gute und umfangreiche Framework ist allerdings für meine zwecke etwas oversized.

app.js – mein Favorit – wollte auf Anhieb nicht laufen. nw.js lief dagegen sofort, weswegen ich mich auch dazu entschlossen habe, dieses Framework noch intensiver anzuschauen.

NW.js

Ich war ganz ehrlich positiv überrascht wie einfach nw.js funktioniert. Auch das deployment der fertigen App ist ein Kinderspiel.

Die Installation erfolgt per NPN:

> npn install nwjs –g

Einmal global installiert ist das Kommando “nw” überall verfügbar und ich kann jeden Ordner zu einer App machen.

Für uns ist es nicht relevant am Ende eine ausführbare Datei zu haben (was ebenfalls möglich is), sondern für unsere Zwecke reicht es, einfach ein Verzeichnis zu verteilen und die App zu starten.

Um ein Verzeichnis zu einer App zu machen, muss eine package.json erstellt werden die in etwa so aussehen kann:

{
  "name": "nwjstest",
  "version": "0.0.1",
  "main": "index.html",
  "window": {
    "toolbar": false,
    "width": 800,
    "height": 600,
    "frame": false,
    "fullscreen": false
  }
}

Die Angaben zu “name” und “version” sind obligatorisch, “main” gibt die HTML-Datei an die Initial aufgerufen werden soll. Interessanter wird es mit den Angaben für das Fenster. Unter “window” kann angegeben werden wie sich das Fenster verhalten soll. Die “toolbar” ist während der Entwicklung interessant um ggf. die Chrome Developer Tools aufzurufen. “frame” legt fest ob der Windows-Rahmen angezeigt werden soll oder nicht. Mit der zusätzlichen Aktivierung von “fullscreen” kann dann eine Art Kiosk-Mode gestartet werden. Es gibt noch ein paar weitere Parameter die in der Doku zu nw.js beschrieben sind. Unter anderem gibt es auch einen echten “kiosk”-Mode mit “kiosk”:true

Genau das, was wir in diesem Projekt benötigen.

Die index.html ist die Web-App, die mit allem was dazu gehört (Bilder, Scripts und Styles) in dem Verzeichnis abgelegt werden sollte.

Gestartet wird die App dann mit folgendem einfachen Kommando

> nw appfolder

oder mit

> nw .

wenn ich mich mit der Konsole bereits in dem Verzeichnis befindet.

Mehr gibt es nicht zu tun um eine sehr einfache und anspruchslose plattformübergreifende App zu bauen. Allerdings bleibt zu erwähnen, dass in den Scripts der Web-App direkt Node.JS ausgeführt werden kann. Sollte man also eine App erstellen wollen die mit dem System interagiert, ist das eine enorme Hilfe und macht das Framework unheimlich flexibel.

Usergroup Events im Oktober

25.09.2015 00:09:00 | Jürgen Gutsch

Dieser Herbst ist voll mit interessanten Community Events. Leider kann ich nur an sehr wenigen Veranstaltungen teilnehmen. KW 42 ist für mich besonders spannend, da ich gleich an drei Usergroup Treffen aktiv teilnehmen werde.

Basel

Den Start macht am Montag die .NET Usergroup Basel, bei der ich als einer der Usergroup-Leiter teilnehmen werde. (Möglicherweise wird der Termin noch um eine Woche verschoben. Ich erwarte noch Feedback vom Sprecher.)

Bern

Am Dienstag fahre ich zur .NET Usergroup nach Bern, um neues zu ASP.NET 5 und MVC 6 zu erzählen. Mir geht es hierbei allerdings weniger um den Vortrag, als darum endlich mal die Usergroup Bern zu besuchen. Der letzte Versuch die Usergroup zu besuchen, endete leider im Feierabend-Stau in Zürich. Diesmal komme ich aber aus Basel mit der Bahn. Ich freue mich schon auf die bekannten und vielen neuen Gesichter.

Friedrichshafen

Am Mittwoch werde ich dann mit dem gleichen Vortrag, bei der neu gegründeten .NET Usergroup in Friedrichshafen am Bodensee erwartet. Auch das wird ein spannendes Event, da ich hier auf einen Hochmotivierten, .NET begeisterten, Ex-Kunden in der Rolle des Usergroup Leiters treffe. Ich freue mich das Tobias Allweier es gewagt hat eine Usergroup in Friedrichshafen zu starten. Potentielle Teilnehmer gibt es am Technologie-Standort Friedrichhafen viele. Auch aus dem angrenzende Allgäu oder aus Ravensburg, können Teilnehmer erwartet werden.

Was wurde aus der NUG Konstanz-Kreuzlingen?

Die Usergroup Konstanz-Kreuzlingen pausiert im Moment. Der Grund hier ist ein starker Rückgang der Teilnehmerzahlen, die immer schon recht klein waren. Am Ende resultierte es in Events, an denen nur die Usergroup-Leiter beteiligt waren, oder gar in Events, bei dem der extra angereiste Sprecher gemütlich mit einem Usergroup-Leiter ein Bierchen am See schlürften. Um so mehr freut es mich, dass die NUG Friedrichshafen hier eine Lücke füllen wird.

Weitere Events

Im November haben wir übrigens Roland Krummenacher (Azure MVP) bei der .NET Usergroup Basel, der uns Neuigkeiten zu Azure erzählen wird

Neben den Usergroup Events bin ich dieses Jahr, Ende September, auf der Basta! und zeige wie man ASP.NET auf dem Raspberry PI 2 und Docker laufen lassen kann und in einem zweiten Vortrag zeige ich ein paar interessante Features die uns HTML5 zu bieten hat und die nicht für jeden Alltäglich sind.

Im November, werde ich zudem auf der continuous lifecycle 2015 einen Erfahrungsbericht präsentieren, in dem es darum geht, wie wir bei der YooApps mit einem verteilten Team eine große SharePoint App Entwickelt und weltweit ausgerollt haben. Dafür gab es ein paar Tools, Plattformen und Techniken die uns das Leben enorm einfach gemacht haben.

Der Herbst ist nun aus meiner Sicht – vor allem auch aus der Sicht der Familie – relativ voll. Dennoch biete ich gerne an, dass ich für die ASP.NET 5 Session auch zu weiteren .NET Usergroups fahre. Im Herbst allerdings nur im Umkreis von max. 2 Stunden fahrt. Ab Dezember, dann gerne auch weiter weg.

ASP.NET 5 auf Docker starten

24.09.2015 00:55:00 | Jürgen Gutsch

Im letzten Beitrag zu Docker habe ich gezeigt, was man tun muss um die Docker Toolbox so einzurichten, dass man damit arbeiten kann. In diesem Beitrag zeige ich, wie man nun eine ASP.NET Applikation auf Docker zum Laufen bringt.

Microsoft hat auf Docker Hub ein Image bereitgestellt, das komplett eingerichtet ist und sogar mit der aktuellen ASP.NET 5 Beta7 läuft. Das kann als Grundlage genutzt werden um ein ASP.NET 5 Web auf einem Docker Container laufen zu lassen:

$ docker run microsoft/aspnet

Dieser Befehl in der Bash lädt das Image bei Bedarf (in der Regel beim ersten Aufruf) herunter und startet es.

Ein Web ist scheinbar nicht vorinstalliert, oder es lässt sich keines starten. Daher möchte ich auf Grundlage des Images von Microsoft ein eigenes erstellen mit einer installierten ASP.NET 5 App.

Dafür erstelle ich zunächst mit dem Visual Studio 2015 ein neues ASP.NET 5 Projekt mit dem Standart-Template. Da es sich um ein Linux Image handelt muss ich in der project.json zwei Dinge einrichten. Zum einen benötige ich Referenzen zum Webserver „Kestrel“ und zum anderen das Kommando um diesen aufzurufen:

"Microsoft.AspNet.Hosting": "1.0.0-beta7",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-beta7"

 

"kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5001"

image

Sind diese Einträge gemacht, so kann ich das ASP.NET Web unter Linux mit folgendem Befehl starten:

$ dnx kestreld

Nun muss das Docker Image noch erstellt werden.

Dafür erstellen wir am besten im Projekt-Verzeichnis unseres Webs (dort wo die project.json liegt) eine neue Datei mit dem Namen „Dockerfile“ (ohne Endung) mit folgendem Inhalt:

FROM microsoft/aspnet:latest

COPY . /app
WORKDIR /app

RUN ["dnu", "restore"]

EXPOSE 5001

ENTRYPOINT ["dnx", "kestrel"]

Diese Datei ist ein Set von Befehlen die nacheinander ausgeführt werden. Die erste Zeile legt das Basis-Image fest von dem wir „erben“

Anschließend wird das aktuelle Verzeichnis (das Projektverzeichnis) in den Ordner „app“ kopiert und dieses Verzeichnis wird zum Arbeitsverzeichnis erklärt. Nun müssen die NuGet Pakete hergestellt werden. In der zweitletzten Zeile wird der Port gesetzt und zu guter Letzt wird die Applikation gestartet.

Ist die Datei erstellt und gespeichert, müssen wir das Image erstellen. Das passiert mit folgendem Befehl:

$ docker build -t guj/aspnet5 .

Dazu wechseln wir mit der Bash in der Projektverzeichnis. „-t guj/aspnet5“ legt den Image-Name fest, der beliebig gesetzt werden kann. Der Punkt verweist auf das aktuelle Verzeichnis. Dieser Vorgang keine eine Weile gehen, weil dabei die NuGet Packages geladen werden.

Ist das Image fertig können wir es starten:

$ docker run -i -t -p 5001:5001 guj/aspnet5

Die Parameter i und t legen einen interaktiven Modus fest, damit wir mit dem Container interagieren könen. „-p 5001:5001“ mappt die Ports von der Anwendung zur Maschine, damit der in der project.json festgelegte Port auch von außer erreichbar ist. Anschließend wird der name des zu startenden Images angegeben:

image

Nun können wir die Applikation mit der IP der Maschine und dem Port 5001 aufrufen:

image

Es sollte noch erwähnt werden, dass dieses Image keine .NET Core Applikation starten kann. Das von Microsoft bereitgestellte Image mit Mono, erwartet dnx451 als Runtime. Der erste Versuch den ich nur mit dnxcore gestartet habe scheiterte mit der Meldung, dass eben dnx541 erwartet wird.

Creating self growing level

23.09.2015 20:10:00 | Daniel Springwald

For my last game Project Pumpkin Jumpin 80 level had to be created. That made up a large part of the work. In addition, a level editor had to be created.

Because
the work on the game logic was much more fun to me, I decided that my next game will use automatically generated levels.

Although it was quite a bit of work, but now the first version of the self-growing city is ready.
The algorithm
is still not perfect: The density of roads is still too high and the street pattern still look too synthetic.

Here are the first animated screenshots:

 

User Group Munich Meeting im Oktober mit der Visual Studio Product Group

23.09.2015 10:26:11 | Christian Binder

Ich werde mit Tarek Madkour, Group Program Manager im Visual Studio Team in Redmond die UG in München besuchen. Wir werden über die neusten Enwicklungen von Visual Studio und VSO sprechen und freuen uns auf Euer Feedback Smile

Details zum Event findet Ihr unter folgendem Link http://www.munichdot.net/events/event/2015-10-15

TagHelpers Beipiele auf GitHub

23.09.2015 00:51:00 | Jürgen Gutsch

Dave Paquette hat auf GitHub ein Repository eingelegt, welches Beispiele für diverse selbstgeschriebene TagHelper enthalten soll. Einige TagHelper, wie z. B. für eine ProgressBar, Bootstrap-Alert und Bootstrap-Model, sind bereits eingetragen. Unter anderem hat auch Rick Strahl Bespiele für TagHelper bereitgestellt.

https://github.com/dpaquette/TagHelperSamples

Dave lädt jeden ein, Ideen und Beispiele zu liefern. Mehr Informationen dazu findet ihr in seinem Blog: Custom MVC 6 Tag Helper Samples

Installieren und Einrichten der Docker Toolbox

22.09.2015 00:40:00 | Jürgen Gutsch

Endlich habe ich einen neuen Rechner, neu aufgesetzt, ist auch das Umlaute-Problem mit meinem User-Verzeichnis unter Windows gelöst. Ergo alle Tools laufen wie gewünscht (Siehe hierzu Umlaute im Wondows-Benutzernnamen) Zumindest dachte ich das…

Gefreut hat mich die Meldung, dass es nun als Nachfolge von “Boot2Docker”, mit der “Docker Toolbox” ein neues Set an Werkzeugen gibt, um unter Windows mit Docker zu arbeiten. Boot2Docker gibt es auch noch, ist nun aber als “depricated” markiert.

Allgemeine Beschreibungen und Informationen zu Docker entnehmt ihr am besten der Dokumentation: https://docs.docker.com/. Nur soviel: Docker ist eine schnelle und leichtgewichtige Virtualisierungs-Plattform, mit der ich spezialisierte Umgebungen für meine Applikationen erstellen und wiederherstellen kann. Im Moment sind diese Umgebungen Linux-Basiert und mit Spannung beobachte ich die Entwicklung der Windows-basierten Docker Images.

Die erste Ernüchterung: Die Docker Toolbox ist noch nicht für Windows 10 getestet und freigegeben. Offiziell wird Windows 7 bis 8.1 unterstützt. Egal, dachte ich mit, was unter Windows 8.1 läuft, sollte ja auch unter Windows 10 laufen. Also den Toolbox-Installer geladen und die Docker Tools installiert.

image

Die Anleitung zur Installation ist hier zu finden: https://docs.docker.com/windows/step_one/

Nach der Installation unterscheidet sich die Umgebung von der, die der Anleitung beschrieben ist. Es wird vom Starten der Docker Toolbox geschrieben. Gemeint ist sicher das Icon mit der Beschriftung “Docker CLI” das bei mir “Docker Quickstart” heißt und außerdem ganz einfach nicht funktioniert.

Diese Verknüpfung sollte die “git-bash.exe” starten und ein shell-script (start.sh) aufrufen. Allerdings ohne Wirkung, bzw. die Bash geht auf und schließt sich gleich wieder.

Um an die Fehlermeldung zu gelangen, muss man die Bash manuell aufrufen: C:\Program Files\Git\git-bash.exe in das Toolbox Verzeichnis wechseln:

$ cd /C/Program\ Files/Docker\ Toolbox/

(Achtung: Linux Pfade, mit escapten Leerzeichen)

Und dann die start.sh starten:

$ start.sh

Die Fehlermeldung – die ich leider Verworfen habe – ist so nichtssagend, dass nur ein längeres Stöbern im Netz half. Es fehlte wohl die Umgebungsvariable %HOME% die auf das Userverzeichnis zeigen sollte, sowie den Pfad zur “Docker Toolbox” in der Variablen %PATH%.

Ist diese gesetzt, lässt sich das Script dennoch nicht über das Icon starten. Diese Verknüpfung ist also wertlos für mich. Ich habe aufgegeben die Verknüpfung anzupassen und zum Laufen zu bringen. Allerdings funktioniert nun der manuelle Aufruf in der Bash

Ich habe also stattdessen den “Cmder” um einen “docker bash”-Task erweitert:

image

  • Task Parameters:
    • /icon "C:\Program Files\Git\bin\git.exe" /dir "C:\Program Files\Docker Toolbox"
  • Commands
    • ""C:\Program Files\Git\bin\sh.exe" --login -i"

Leider funktioniert es aus irgendeinem Grund nicht, dass die start.sh direkt als Startparameter übergeben wird. Daher muss ich sie manuell aufrufen, sobald die Bash geladen ist. Aber das ist das ist ein kleines Problem:

image

Das Ergebnis kann sich nun sehen lassen:

image

Der erste Aufruf geht etwas länger, da das Script bei Bedarf eine VM mit dem Namen “default” installiert und startet. BTW: es ist das scheinbar das gleiche VMImage das bei boot2docker verwendet wird.

Aber anschließend kann ich wie gewohnt mit dem Werkzeug “docker-machine” meine VMs verwalten und mit dem Werkzeug “docker” meine “Images” und “Container” verwalten und steuern und weitere Aufrufe der start.sh sollten nun schneller gehen.

Ab jetzt kann man dann auch mit dem Tutorial fortfahren und den “hello-world”-Container starten:

$ docker run hello-world

Der Toolbox liegt auch ein Tool namens Kitematic bei. Hier handelt es sich um eine GUI zum Installieren, Verwalten und Steuern von Images. Im Grunde funktioniert dieses Tool recht gut, nur nicht parallel zur Bash. Immer wenn ich diese GUI gestartet habe, funktioniert die start.sh nicht und wenn ich Bash mit der start.sh gestartet habe, kann ich die GUI nicht mehr verwenden. Kitematic ist Alpha, so ist das also nicht wild. Zudem ist diese GUI – das sie nicht alles kann – wirklich nur eingeschränkt zu gebrauchen.

Fazit

Die Docker Toolbox ist noch nicht fertig und leider noch nicht uneingeschränkt unter Windows nutzbar. Aber sobald alles mal soweit eingerichtet ist, kann man damit arbeiten und herumspielen. Im nächsten Teil zeige ich wie man nun eine ASP.NET 5 Applikation auf Docker zum Laufen bringt.

Always have the latest Nghttp2 (Nghttpx) for HTTP/2 installed

19.09.2015 13:31:34 | Andreas Mehl

Nghttpx is an HTTP/2 proxy. I've implemented Nghttpx as a reverse proxy. Requests to my website on port 443 are handled by Nghttpx, which proxies the request to Nginx. To have always the latest version of Nghttp2 you have to do following:

grab the latest release from Github (https://github.com/tatsuhiro-t/nghttp2/releases)

extract into a folder

go into the folder (cd /home/test/latestnghttpx)

execute following:

autoreconf -i
automake
autoconf
./configure
make

cd /usr/local/share

create a symbolic link on
ln -s /home/test/latestnghttpx/src /usr/local/share/nghttp2

or overwrite symbolic link
ln -sfn /home/test/latestnghttpx/src /usr/local/share/nghttp2

open etc\init.d\nghttpx
change line DAEMON=/home/test/latestnghttpx/src/$NAME


pidof lt-nghttpx
kill pid
service nghttpx restart

finished

How to get jquery to perform a synchronous ajax request

13.09.2015 07:33:39 | Andreas Mehl

I had the problem that i dont want to do a asynchronous request with jquery ajax. So i did search for a real solution for me.

I also had the difficulty that it is a crossdomain call. So i have to use jsonp as well.

The solution i have found is as follow:

  _getObj = function () {
                var data = JSON.parse($.ajax({
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    url: url,
                    async: false,
                    dataType: "json"
                }).responseText);

                var m = new foo();
                m.gesamteuros = data.d.foo;
                return m;
            },

Important here is the assignment, the data variable gets the ajax response.

Next is the return obj  part in the function.

As a result it finally works for me.

Das ist neu in der App-Entwicklung für Windows 10

09.09.2015 07:56:11 | Andre Kraemer

Windows 10 bringt einige spannende Neuerungen für App-Entwickler. Mit der Einführung der Universal Windows Platform (UWP) haben wir nun die Chance, mit nur einer Code-Basis Apps für den Desktop, das Tablet, das Windows Phone, die Xbox One, IOT-Geräte wie den Raspberry Pi und noch vieles mehr zu schreiben.

Das ist neu in der App-Entwicklung für Windows 10

09.09.2015 07:56:11 | Andre Kraemer

Windows 10 für Entwickler Video Trainig von André Krämer - Cover Windows 10 bringt einige spannende Neuerungen für App-Entwickler. Mit der Einführung der Universal Windows Platform (UWP) haben wir nun die Chance, mit nur einer Code-Basis Apps für den Desktop, das Tablet, das Windows Phone, die Xbox One, IOT-Geräte wie den Raspberry Pi 2 und noch vieles mehr zu schreiben. Welche technischen Möglichkeiten es gibt, um für all diese verschiedenen Gerätetypen nur ein UI entwickeln zu müssen, erkläre ich in meinem neuen Video Training Windows 10 für Entwickler - Crashkurs, das Anfang September bei video2brain erschienen ist.

Neben neuen Controls, wie dem RelativePanel bespreche ich in dem Training auch VisualStates, VisualState-Adaptive-Trigger, Adaptive Code sowie XAML Compiled Databindings.

Außerdem gehe ich kurz auf die Änderungen in der Microsoft Design Language ein.

Dazu gibt es hier einen kurzen Ausschnitt:

Was es sonst noch im Training zu sehen gibt, verrät der Trailer:

ASP.NET 5 und NPM: Rekursion und lange Pfade in den node_modules reduzieren

02.09.2015 02:50:00 | Jürgen Gutsch

Nach mehr als zwei Wochen Ferien und ohne einen Laptop unter den Fingern, gibt es wieder einiges neues zu schreiben. Natürlich war mein Telefon mit in den Ferien und in ruhigen Minuten konnte ich ein paar News rund um .NET und ASP.NET 5 verfolgen. So ganz ohne Internet geht es dann für einen News Junkie dann doch nicht… ;)

Wer unter Windows schon mit NPM (Node Pakage Manager) gearbeitet hat, kenn es sicher, dass Node Module ihre Abhängigkeiten in eigenen node_module Ordnern halten, die wiederum Abhängigkeiten in weiteren node_module Ordnern enthalten. Dabei kann es auch zu zirkulären Abhängigkeiten kommen und zu Pfadlängen mit denen Windows nichts mehr anfangen kann. Zwar können die Pfade angelegt werden, aber die Ordnerstrukturen können nicht mehr entfernt werden.

Relevant wird das Thema nun auch für alle ASP.NET 5 Entwickler, da Node.js und NPM eine zentrale Rolle spielt.

Ben Adams beschreibt in seinem Blog-Beitrag ausführlich wie diese Ordnerstrukturen mit robocopy wieder entfernt werden und was viel wichtiger ist, wie diese Rekursionen und langen Pfade vermieden werden können. Dabei wird NPM 3.x verwendet, weiches die Abhängigkeiten so flach wie möglich ablegt. Lediglich bei Versionskonflikten werden die Module weiterhin Rekursiv abgelegt.

Reduce node_modules recursion and long path for ASP.NET 5

Regeln | Impressum