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

  • What’s New: Office 365 Video - YouTube
    Learn more about the latest innovations for Office 365 Video. Mark Kashman, senior product manager for the Office 365 team, provides a tour with demo of numerous features and capabilities ranging from the new, improved upload experience, accessibility with closed-caption support, analytics per video
  • Configure Office 365 Groups with on-premises Exchange hybrid: Exchange 2013 Help
    Groups is an Office 365 feature that enables teams to communicate, schedule meetings, and collaborate on documents more easily. via Pocket
  • APPLE CAMPUS 2: May 2016 Construction Update 4K - YouTube
    Take an aerial tour of Apple Campus 2 in April 2016 as it constantly evolves during its construction.Recorded using a DJI Phantom 3 Professional. Get yours on Amazon.http://amzn.to/1Ye3GKOEdited by Matthew Roberts with Final Cut X.Watch All Apple Campus Updates:April 2016: https://youtu.be/jn09eB via
  • Office 365 URLs and IP address ranges - Office 365
    Summary   : Lists the endpoints (URLs and IP address ranges) used by Office 365 and provides links to the RSS feed to help you stay up-to-date on the latest changes. If you are using Office 365 operated by 21Vianet in China, see URLs and IP address ranges for Office 365 operated by 21Vianet. via Pock

Kay Giza [MS]: Sparen Sie 25 Prozent und upgraden Sie jetzt auf Visual Studio Enterprise 2015 mit MSDN

Wer derzeit Visual Studio Professional oder Test Professional mit einer MSDN Subscription nutzt, der sollte diesen Blogeintrag ein wenig weiterlesen. Für begrenzte Zeit bietet Microsoft einen Rabatt von 25%, wenn man jetzt von Visual Studio Professional oder Test Professional mit MSDN auf Visual Studio Enterprise 2015 mit MSDN umsteigt... [... mehr in diesem Blogeintrag 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

Sven Hubert: New version of AIT Dependency Manager with Visual Studio 2015 support

A new version of our AIT Dependency Manager for Visual Studio 2013 and 2015 is available. Both versions can now retrieve dependencies from Subversion repositories. The version of Visual Studio 2015 also supports build results of TFS 2015 JSON build system.

 


Subversion Integration

Apart from the existing providers Source Control, File Share, Build Result and Binary Repository it is possible with the new version to download files from Subversion repositories. Figure 1 shows the necessary parameters. The URL of the Subversion repository is stored in the field Subversion Path, a locally stored repository can be defined alternatively. Using the Version Spec field the most recent revision (Head revision) or a specific revision can be retrieved. As with the other providers, it is possible to exclude files and directories by providing an Exclude Filter or to select specific files and folders via Include Filter. The path for storing the dependencies can be defined relative as well as absolute in the Output Path field.

image_thumb[3]

Figure 1: Parameters of Subversion provider

JSON build results (Visual Studio 2015 only)

The version 2015 of TFS includes a completely redesigned build system, which brings many new features, such as cross-platform support (Linux, MacOS), a history of the build parameters and configuration via web browser.

The parameters of a build definition of the new build system are stored in a JSON file, which can be compared via the history of a build definition (see Figure 2). The existing build system (based on XAML) is still supported in TFS 2015.

image_thumb[6]

Figure 2: comparison of two JSON files of the new TFS 2015 build system

Build results based on the JSON build system can be referenced with the new provider called Build Result JSON. This provider offers the same configuration options as the original Build Result provider for XAML Builds, with one difference. Since the JSON build system currently does not support Build Quality indicators, this filter has been replaced with a filter for Build Tags, which can be assigned to each build run.

image_thumb[39]image_thumb[40]

Figure 3: Left: Build Result JSON provider; Right: Build Result provider for XAML builds

The provider Build Result for XAML builds remains unchanged, so the backward compatibility is ensured with existing configurations of AIT Dependency Manager.

The new version for Visual Studio is available on the Visual Studio Gallery (Visual Studio 2013 and Visual Studio 2015). The installation package for the build Integration can be downloaded from our website.

Norbert Eder: Planen einer Retrospektive

Ich hatte eine Retrospektive, die nicht wirklich optimal verlaufen ist. Das lag nicht am Feedback, sondern am Ablauf des gesamten Meetings. Der Grund dafür lag bei mir. Ich hatte mir einfach nicht die notwendige Zeit für die Vorbereitung genommen. Das habe ich als Anlass genommen, darüber nachzudenken, was ich konkret verbessern muss, um für alle einen konstruktiven Rahmen für eine Retrospektive zu schaffen.

Erwartungshaltung

Natürlich hat jeder von der Retrospektive eine Erwartungshaltung, manche empfinden das Meeting als sinnlos. Letzteres ist ein eindeutiger Indikator dafür, dass Verbesserungen am Ablauf bzw. der Form des Meetings vorzunehmen sind, denn eine Retrospektive kann zu massiven Verbesserungen führen.

Ist jedem bewusst, welches Ergebnis die Retrospektive haben soll? Am Ende der Retrospektive soll eine Liste von Maßnahmen sein, die bis zur darauffolgenden Retrospektive abgearbeitet werden kann.

Grundlegende Fragen zur Retrospektive

Dem Meeting sollten Basisfragen zu Grunde liegen. Diese solltem jeden bewusst sein bzw. bewusst gemacht werden. In 8 Erfahrungen die ich mit Scrum gemacht habe bin ich bereits auf die Retrospektive (Punkt 3) eingegangen und habe einige Fragen formuliert, die man sich bzw. dem Team stellen sollte:

  • Was ist im letzten Sprint gut gelaufen?
  • Was ist im letzten Sprint schlecht gelaufen?
  • Gibt es generell Probleme?
  • Wo muss unbedingt etwas verbessert werden?
  • Was wäre schön zu haben?

Diese Fragen sind ein schöner Ausgangspunkt. Mittlerweile erscheinen sie mir jedoch zu frei gehalten zu sein, da dadurch gewisse Themen nicht zum Vorschein kommen. Dies möchte ich zum Anlass nehmen, um sie weiter zu verfeinern:

  • Wurden alle getroffenen Maßnahmen der letzten Retrospektive umgesetzt?
  • Hat es eine Verbesserung/Verschlechterung am Prozess gegeben?
  • Wie hat die Kommunikation innerhalb des Teams funktioniert? Wie mit angrenzenden Bereichen?
  • Kann am Tooling etwas verbessert/vereinafcht werden?
  • Waren alle Informationen für das Ausführen der Aufgaben vorhanden?
  • Sind alle Informationen vorhanden, um einen Überblick zu erlangen, wofür alle Arbeiten überhaupt ausgeführt werden?
  • Hat es Abhängigkeiten gegeben? Wenn ja, waren diese (gut) aufgelöst, oder ist es zu Verzögerungen/Behinderungen/Nacharbeiten etc. gekommen?
  • Waren die Spezifikationen vollständig, korrekt oder war zusätzlicher Klärungsbedarf notwendig?
  • Wurden Entscheidungen getroffen, die besonders gut oder schlecht waren?
  • Was entsprach meiner Erwartung, was nicht? (beispielsweise eine konkrete Umsetzung)

Mit diesen Fragenstellungen sollten sich genügend positive als auch verbesserungswürdige Punkte finden lassen. Daraufhin können gezielte Maßnahmen definiert werden. Der Vorteil daran ist, dass diese Fragen schon so tief in mögliche Problemherde eintauchen, dass dann auch wirklich jedem etwas dazu einfällt.

Einsammeln der Meinungen

Die Meinungen selbst können auf unterschiedlichste Art und Weise eingesammelt werden. Oftmals wird dies mit Kärtchen oder Post-Its erfasst. Natürlich kann auch der Moderator eine Rundfrage starten und die Meinungen einsammeln. Wichtig ist, dass jeder zu Wort kommt und seine Themen anbringt. Eine Diskussion über die Meinungen ist zu diesem Zeitpunkt nicht zielführend und sollten vom Moderator unterbunden werden. Verständnisfragen sind allerdings erlaubt.

Idealerweise bereitet sich nicht nur der Moderator auf dieses Meeting vor. Wenn jeder bereits mit einer vorbereiteten +/- Liste kommt, kann mann viel Zeit sparen bzw. sich auf das Festlegen der Maßnahmen konzentrieren.

Maßnahmen festlegen

Schließlich müssen wir aus allen bekannten Meinungen Maßnahmen entwickeln, die eine Veränderung herbeiführen. Die Maßnahmen sind zu dokumentieren (im übrigen auch die positiven Aspekte!). Wenn es mehr Maßnahmen sind, als bis zur nächsten Retrospektive umgesetzt werden können, ist dies ebenfalls zu dokumentieren (Führen eines Maßnahmenkataloges).

Wichtig ist, dass sich das Team nicht mit den Maßnahmen überfordert, sondern sich nur eine realistische Menge vornimmt. Besser eine langsamere und stete Verbesserung als Frust, weil es zu gar keiner Veränderung kam und Punkte immer wieder bei der Retrospektive landen. Dazu bietet es sich an, die einzelnen Maßnahmen zu priorisieren, wobei keine der Maßnahmen gleich wichtig sein darf. Daraus ergibt sich eine schöne Reihenfolge aus der dann beispielsweise die ersten drei Maßnahmen in der nächsten Iteration umgesetzt werden.

Die verbleibende Liste wird in der nächsten Retrospektive um eventuell neue Punkte ergänzt und ebenfalls wieder bewertet.

Fazit

Eine Retrospektive kann nur funktionieren, wenn sich das Team auf bestimmte Grundregeln festlegt und auch eine gemeinsame Erwartungshaltung definiert. Zu Beginn muss die Erwartung durch gezielte Fragestellungen in Erfahrung gebracht werden. Im Laufe der Zeit spielt sich der Ablauf ein und es reicht wohl, wenn jeder mit einer +/- Liste zur Retrospektive kommt. Ich kann nur jedem anraten, sich für dieses Thema ausreichend Zeit zu nehmen.

The post Planen einer Retrospektive appeared first on Norbert Eder.

Uli Armbruster: Was viele bei der Suchmaschinenoptimierung vergessen

Wenn man Zeit und Geld in die Google Optimierung (ich sage absichtlich nur Google!) steckt, vergisst man häufig wichtige Punkte, die dem eigentlichen Wunsch nach höherer Neukundenakquise im Wege stehen.

Deshalb stellt euch folgende Fragen:

  • Kann ein Quereinsteiger innerhalb von 15 Sekunden erkennen, ob ihr ihm das bietet (Produkt, Dienstleistung, was auch immer), was er sucht? Stichwort Absprungquote!
  • Wenn er das erkennt, kann er dann auf der Seite direkt Kontakt aufnehmen (ggf. Anfrage starten oder direkt bestellen)? Stichwort Klickpfade!
  • Könnt ihr den Erfolg eurer Aktion messen?
  • Wisst ihr bereits, wie viele Neukunden ihr täglich über eure Webseite generiert?
  • Wisst ihr, wo ihr aktuell bei Google für bestimmte Suchanfragen gelistet seid? Und wie euer Ranking über Wochen hinweg verläuft?
  • Wisst ihr, ob E-Mails und Telefonanrufe über eure Webseite von Google Besuchern gekommen sind?
  • Welches Ranking nehmen eure Mitbewerber ein?
  • Habt ihr überhaupt die Chance auf den ersten 3 Seiten bei Google zu landen oder sind zu viele Big Player auf dem Markt, die die Positionen unter sich aufteilen?

 

Das sind nur einige Fragen, die nach einer Antwort verlangen und für dessen Beantwortung Vorarbeit zu leisten ist. Unkoordiniert in die Suchmaschinenoptimierung (SEO) zu investieren, ist aus finanzieller Sicht eine spekulative und vermutlich schlechte Investition.

In diesem Video erzähle ich mehr dazu:

Die erwähnten Tools gibt es hier:

 

 


Einsortiert unter:German, Misc, Web Tagged: SEO

Sven Hubert: Neue Version des AIT Dependency Manager mit Visual Studio 2015 Unterstützung

Der AIT Dependency Manager steht in einer neuen Version für Visual Studio 2013 und 2015 zur Verfügung. Beide Varianten können nun Abhängigkeiten aus Subversion Repositories abrufen. Die Version für Visual Studio 2015 unterstützt außerdem Buildergebnisse des TFS 2015 JSON Buildsystems.

 

Subversion Integration

Neben den bisherigen Providern Source Control, File Share, Build Result und Binary Repository ist es mit der neuen Version möglich Dateien aus Subversion Repositories zu laden. Abbildung 1 zeigt die notwendigen Parameter. Im Feld Subversion Path wird die URL hinterlegt, alternativ kann ebenso ein lokal gespeichertes Repository verwendet werden. Mit Hilfe der Version Spec kann die neueste Revision (Head revision) oder eine bestimmte Revision abgerufen werden. Wie bei den anderen Providern ist es möglich Dateien und Verzeichnisse per Exclude Filter auszuschließen oder explizit per Include Filter auszuwählen. Der Pfad zur Ablage der Abhängigkeiten kann im Feld Output Path relativ wie auch absolut festgelegt werden.

image

Abbildung 1: Einstellungsmöglichkeiten für Subversion Repositories

JSON Buildergebnisse (nur Visual Studio 2015 Version)

Die Version 2015 des TFS enthält ein komplett überarbeitet Buildsystem, welches viele Neuerungen mit sich bringt, wie zum Beispiel Cross-Plattform-Support (Linux, MacOS), eine Historie der Buildparameter und Konfiguration per Webbrowser. Weitere Informationen finden Sie in einem früheren Blogpost aus unserer Serie “Neu in TFS 2015”.

Die Parameter einer Builddefinition des neuen Buildsystems werden bei dieser Technologie in einer JSON-Datei gespeichert, was man bei Ansicht der Historie einer Builddefinition sehen kann (siehe Abbildung 2). Das bisherige – auf XAML basierende – Buildsystem wird weiterhin im TFS 2015 unterstützt.

image

Abbildung 2: Vergleich zweier JSON-Dateien des TFS 2015 Buildsystems

Haben Sie bereits auf das neue Buildsystem migriert oder verwenden bereits JSON Builddefinitionen, können die generierten Buildergebnisse mit der neuen Version des AIT Dependency Managers für Visual Studio 2015 abgerufen werden. Dazu gibt es einen neuen Provider namens Build Result JSON. Dieser bietet mit einem Unterschied die gleichen Einstellungsmöglichkeiten wie auch der ursprüngliche Build Result Provider für XAML Builds. Da das JSON Buildsystem momentan keine Build Quality unterstützt, wurde dieser Filter durch die Build Tags ersetzt, welche man jedem Buildlauf zuordnen kann.

imageimage

Abbildung 3: Links: Build Result JSON-Provider; Rechts: Build Result-Provider für XAML Builds

Der Provider Build Result für XAML Builds bleibt unverändert, so dass die Abwärtskompatibilität zu bestehenden Konfigurationen des AIT Dependency Managers gewährleistet ist.

Die neue Version für Visual Studio finden Sie in der Visual Studio Gallery (Visual Studio 2013 und Visual Studio 2015). Die Installationsroutine für die Buildintegration kann auf unserer Homepage heruntergeladen werden.

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

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

Ich habe wieder eine Liste aller verfügbaren Extensions für Visual Studio Code erstellt: Stand 02.05.2016. Natürlich kann man auch im Visual Studio Marketplace schauen oder in Visual Studio Code selber und sich die nützlichsten Extensions heraussuchen. Da es die genannten Möglichkeiten zur Extension-Suche gibt, habe ich mir hier die Kurzbeschreibungen zu den Erweiterungen von Visual Studio Code gespart und nur eine einfache Link-Liste erstellt, viel Spaß beim Durchstöbern! Die Veränderungen im Vergleich: Im Vergleich zum März gab es im April rund 120 neue Extensions. Hier einige Extensions die ich besonders herausstellen möchte... [... mehr in diesem Blogeintrag 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

Fabian Deitelhoff: Sehenswert: Spieleprogrammierung für Einsteiger

Auch diese Rezension geht in eine etwas andere Richtung, als die bisherigen Rezensionen auf meinem Blog. Mit Ausnahme der letzten zu einem LEGO-Technic-Buch. Dieses Mal möchte ich das erste Video-Training zum Thema Spieleprogrammierung vorstellen. Allerdings ohne Verlosung, da ich das Training als Download vom Rheinwerk Verlag bekommen habe.

Wer also Lust hat die Geheimnisse hinter der Programmierung eines Spiels zu erfahren, sollte weiterlesen. 🙂

Das Video-Training im Überblick

Spieleprogrammierung für Einsteiger: Schritt für Schritt mit C# zum eigenen 2D-Computerspiel

Rheinwerk, 02/2016, 85 Videos, 13 Stunden Spielzeit
ISBN: 978-3-8362-4059-8, 39,90 Euro

Sprache: Deutsch
Ausstattung: DVD
Download: Auch als Download verfügbar
Probekapitel: Blicke ins Training
Gesamtnote: sehr gut – 5,0 von 5 Sternen
Empfehlung: Ja

Spieleprogrammierung für Einsteiger: Schritt für Schritt mit C# zum eigenen 2D-Computerspiel (Tom Wendel)

Der Inhalt

Was ein hervorragendes Video-Training. Ich programmiere gerne und widme meine Zeit zwischendurch auch mal einem Spiel. Zocken gehörte schon immer zu meiner Computer-Nutzung dazu. Früher mehr und heute (leider) weniger.

Tom Wendel hat mit der Spieleprogrammierung für Einsteiger ein Training geschaffen, das beide Welten auf eine so schöne Art und Weise miteinander vereint, dass ich gar nicht genug bekommen konnte. Die 13 Stunden Spielzeit habe ich mit viel Spaß und in einer Geschwindigkeit verschlungen, dass ich mich zwischendurch selber bremsen musste, um nicht einfach die Nächte durchzuprogrammieren. 🙂

Das Training ist dabei in zehn Kapitel aufgeteilt:

  1. Die Arbeitsumgebung einrichten
  2. Der Weg zum Computerspiel
  3. Das Spielmodell entwerfen
  4. Die Ressourcen für das „Rheinwerk-Adventure“
  5. Die Spielekomponenten zusammensetzen
  6. Das UI-Framework für das Game-Menü
  7. Interaktionen mit der Spielumgebung
  8. Die Spielwelt mit Leben füllen
  9. Einen Mehrspieler-Modus einrichten
  10. Das spiel veröffentlichen

Zu Anfang geht es also darum, seine Arbeitsumgebung einzurichten und sich darüber Gedanken zu machen, in welche Richtung das eigene Computerspiel gehen soll. Dabei wird sowohl die technische Seite betrachtet, also welche Game Engines gibt es, als auch Dinge zum Game Design, Spiele-Genres und so weiter. Das Training konzentriert sich auf die Entwicklung eines 2D-Adventures, das nach und nach im Training programmiert wird.

Mir gefällt sehr gut, dass das Training auch Dinge wie andere Engines, Spiele-Genres, Game Design und nicht nur technische Dinge beleuchtet. Auch Unterschiede bei den einzelnen Geräteklasse, wie zum Beispiel Desktop PCs und Konsolen, werden behandelt. Dadurch geben die Trainings einen guten Rundumschlag und konzentrieren sich nicht nur auf einige technologischen Aspekte.

Zu allen Lektionen liegt der Quelltext vor. Ich konnte daher direkt mit einsteigen und die Beispiele nachprogrammieren. Oder mir die fertigen Teillösungen direkt anschauen. Je nach Lust und Laune. Implementiert ist alles in C#. Visual Studio ist nicht zwingend erforderlich.

Was ich an dieser Stelle auch loben möchte, ist die wirklich sehr gute technische Umsetzung des Video-Trainings. Wie am Anfang schon kurz erwähnt, hat mir Rheinwerk die digitale Version als Download zur Verfügung gestellt. Dort gibt es eine ausführbare Datei, die ein eigenes Programm starten. Zwei Screenshots davon gibt es in Abbildung 1 und 2 zu sehen. Das Programm funktioniert hervorragend, die Menüführung ist gut und wenn ich die Anwendung einfach beendet, fängt das zuletzt gesehene Video beim erneuten Öffnen an der richtigen Stelle wieder an. Wirklich sehr gut gemacht.

Abb. 1: Der Video-Player beim Starten. Abb. 2: Eine Video-Lektion im Video-Player.

Fazit & Bewertung

Ich bin wirklich sehr begeistert von dem Video-Training zur Spieleprogrammierung von Tom Wendel. Ein Spiel zu programmieren war lange Zeit ein blinder Fleck bei meinen Tätigkeiten als Softwareentwickler. 🙂 Ich habe mich einfach nicht getraut damit anzufangen. Vermutlich auch, weil ich überhaupt nicht gewusst habe, wo ich denn anfangen soll. Denn das Themengebiet ist schon etwas größer und es gibt viel zu beachten.

Das Wissen aus dem Kurs würde ich gerne mal in einem Workshop weitergeben. Oder vielleicht an einer (weiterführenden) Schule in Form einer AG. Also gerne Kontakt aufnehmen, falls jemand Interesse hat. 🙂

Und zur Sicherheit am Schluss noch einmal: Eine absolute Empfehlung meinerseits für das Video-Training. Macht unglaublich viel Spaß!

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

codefest.at [MS]: #Ch9weekly - Cortana & the Bot Framework

 

 

Jede Woche stellen wir ein interessantes Channel 9 Video für Euch hier zur Verfügung, damit Ihr stets einen Wissensvorsprung haben könnt.

Die Medien berichten zur Zeit sehr viel über eine ganz bestimmte Thematik => Bots.

In diesem Video werden interessante Informationen über Bots geliefert und auch die Integration von Cortana, die zur sprachgesteuerten Botbedienung geeignet ist.

Johnny Graber: Exif und C#: Wege um an die GPS-Metadaten aus Bildern zu kommen

Das Auslesen von Exif-Metadaten aus JPEG-Bildern ist für zahlreiche Anwendungsgebiete sehr interessant. Anhand der GPS-Dateien kann man so beispielsweise seine Sammlung nach Aufnahmeort gruppieren oder alle Fotos finden, die mit einer bestimmten Kamera gemacht wurden. In Ruby ist das Auslesen der Exif-Informationen dank Exifr sehr einfach. Für C# fehlt ein klarer Favorit, was zahlreiche kleine … Exif und C#: Wege um an die GPS-Metadaten aus Bildern zu kommen weiterlesen

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

Karsten Kempe: Continuous Delivery für jedes Team

imageIhr habt den //Re.Build 2016 Event von Microsoft verpasst, in dem die Technologieberater von Microsoft und Ich von den News der //BUILD Konferenz erzählt haben? Kein Problem! Die Aufzeichnung zu meiner Session (und natürlich auch zu allen anderen) findet Ihr auf Channel9. Nicht warten – gleich anschauen!

Kay Giza [MS]: Lernen. Weiterbilden. Gewinnen: Bis 15. Mai 2016 u.a. eine Xbox One gewinnen - powered by QUALIERO

Über die Learning-Plattform Qualiero.com hatte ich ja bereits im März berichtet. Die Learning-Plattform bietet ein modernes Fortbildungsangebot und bringt einen in Kontakt mit Gleichgesinnten und Experten. Bis 15. Mai 2016 hat man nun mit etwas Glück die Möglichkeit, einen der folgende Preise zu gewinnen: 1. Preis: Eine Xbox One mit 500 GB... [... mehr in diesem Blogeintrag 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

Sven Hubert: Boost your TFS – TFS ASAP 2015 Update 2 released

We are proud to present the new release of our TFS Automated Servicing and Administration Platform (TFS ASAP). Beside some minor bug fixes, this version supports the update 2 of Microsoft Team Foundation Server 2015. In addition, there are two new automations available, which are described below.

Text aggregation

The first new automation is called Text Aggregation Automation. By introducing this functionality, it is now possible to aggregate numeric, boolean, and textual content with TFS ASAP. Every aggregation automation supports two directions. Values can be distributed from one item to all of its linked items and can be aggregated the other way around. There are two sample use cases for the usage of Text Aggregation Automation.

Use case 1 – Additional context information for refinement of backlog items

Using a hierarchical backlog increases its usability as backlog items are grouped by features and epics. This hierarchy also causes the distribution of information over the different levels. During the refinement of backlog items, the content of parent elements is helpful when specifying its children. Of course it is possible to navigate between those items, but the usability is not satisfying at all.  By using this automation, the content of particular attributes of parent items can automatically be copied to all of its children. As the automation is triggered by any change in the source field (e.g. the description field), the context information in the child items is always up to date.

 

image

Automated distribution of feature description

Use case 2 – Aggregated information of multiple linked elements

A cross function team is perfect – in an ideal world, everybody can do everything. But unfortunately a lot of teams are not 100% cross functional. People may be a subject matter expert for a specific area. This is the reason for having multiple team members working on one backlog item. Wouldn’t it be perfect to have an easy overview of who worked on a backlog item without creating queries or opening every single task?

As the Text Aggregation Automation can also aggregate values from multiple children up to one parent it is possible to have this overview generated automatically. Each time a task is assigned to another team member the list of involved people is updated at parent level. By using the property Separator in the configuration it is easy to define the layout.

 

image

Format the aggregation by using the Separator

Create work item on check in

As all of our existing automations are scheduled or triggered by work item changed events, we are now introducing the first automation triggered by check in events. By using this automation work items can be created for every check in that meets your configuration. There are several options for the configuration such as the source code path, a comment filter or the check in type. The complete configuration and its description can be found in the user guide [section 4.3.14].

Using this feature makes it very easy to create a code review request as a task in your task board. Instead of using the code review feature of TFS, the code review task is visible for everyone in the task board and can be grabbed by the first available developer. By defining a check in comment filter, every developer can decide whether she wants to have a code review for the check in or not.

For further Information about TFS ASAP please refer to www.tfsasap.com or contact us at support@tfsasap.com.

codefest.at [MS]: 9 Gründe auf die Linux Wochen in Wien zu gehen

Gerade finden in Wien wieder die Linux Wochen statt.
Warum das hier ein Thema ist?

LinxwochenNun: Ich denke dass gerade auch auf der //buiild, z.B. mit Running Bash on Ubuntu on Windows!, wieder sehr gut gezeigt wurde dass Open Source und Microsoft bzw. auch Linux und Microsoft absolut gut zusammenpassen und sich sehr gut ergänzen können.

Und genau das wollen wir auch auf den Wiener Linux Wochen zeigen. Egal ob Ihr Euch für TACO, Raspberry oder .NET unter Linux interessiert, wir haben da ein ganz cooles Programm für Euch zusammengestellt. Falls ihr vorbeikommen wollt: Ihr findet uns morgen Freitag und übermorgen Samstag am Höchststadtplatz im FH Technikum!

Dementsprechend hier also meine ganz persönlichen 9 Gründe auf die Linux Wochen in Wien zu kommen:

Freitag, 29.04.16

Samstag, 30.04.16

Und als kleine Einstimmung schon für heute:

sowie:

Viel Spaß!!

Paul Mizel: Guid to Int, Int32, Int64, Int128, BigInteger

LinqPad5

void Main()
{
var guid=Guid.NewGuid();
("GUID:  "+guid).Dump();
var bigint=GuidToBigInteger(guid);
var int64=GuidToInt64(guid);
var int32=GuidToInt32(guid);
("HEX:    "+bigint.ToString("X")).Dump();
("BIGINT:"+bigint).Dump();
("INT64: "+int64).Dump();
("INT32: "+int32).Dump();

var idFix=Guid.Parse("00000000000000000000000000000000");
idFix.Dump();
GuidToBigInteger(idFix).Dump();
("int.MaxValue: " + int.MaxValue).Dump();

idFix=Guid.Parse("0000000000000000000000FF00FF00FF");
idFix.Dump();
var bi=GuidToBigInteger(idFix);
("BigInt:  "+bi).Dump();
var i=GuidToInt32(idFix);
("Int Mod: "+i).Dump();

Int64.MaxValue.Dump();
int.MaxValue.Dump();
Int32.MaxValue.Dump();
}

public static System.Numerics.BigInteger GuidToBigInteger(Guid id)
{
var str=id.ToString("N");
var result=System.Numerics.BigInteger.Parse(str, System.Globalization.NumberStyles.AllowHexSpecifier);
result=result>0?result:-result;
if(result<int.MaxValue)
{
result=result+int.MaxValue;
}
return result;
}

public static Int64 GuidToInt64(Guid id)
{
var result=GuidToBigInteger(id);
result=result%Int64.MaxValue;
if(result<int.MaxValue)
{
result=result+int.MaxValue;
}
return (Int64)result;
}
public static Int32 GuidToInt32(Guid id)
{
var result=GuidToBigInteger(id);
result=result%Int32.MaxValue;
if(result<(Int32.MaxValue/2))
{
result=result+(Int32.MaxValue/2);
}
return (Int32)result;
}

codefest.at [MS]: Refugee Hackathon

Angesichts der Flüchtlingssituation in Österreich, veranstalten Microsoftmobility.builders Entwickler-Community und WhatAVenture am Wochenende vom 21. und 22. Mai einen Refugee Hackathon im Microsoft Office in Wien.

Als Entwickler hast du die Möglichkeit dein soziales Engagement und humanitäre Hilfe in Form von technologischen Lösungen für die Flüchtlingsbetreuung und Integration einzubringen. Wir freuen uns gemeinsam mit dem Roten Kreuz, der Stadt Wien, dem AußenministeriumTieto, NetIdee, Topfreisen und den Entwicklern der erfolgreichen Welcome App aus Deutschland ein cooles Event auf die Beine zu stellen und gleichzeitig tolle Prototypen und Ideenkonzepte für nutzenstiftende Anwendungen und Spiele zur Flüchtlingsthematik für AsylwerberInnen, Mitarbeiter von Hilfsorganisationen oder für Bürger Partizipationen zu sehen.

Für die besten Projekte gibt es auch tolle Preise zu gewinnen! Und als besonderes Zuckerl wird es am Samstag ein spezielles kulinarisches Erlebnis geben, wenn Flüchtlinge Mahlzeiten aus ihren Heimatländern kochen. Plätze sind beschränkt, daher rasch anmelden!

deleteWann: 21. und 22. Mai 2016
Wo:    Microsoft Österreich, Am Euro Platz 3, 1200 Wien
Kosten: Eintritt frei!
Anmeldung und nähere Infos: Link

Norbert Eder: SoftwareentwicklerIn in #Graz – Wir suchen dich!

Richtig gelesen. Ich bin auf der Suche nach neuen Kollegen für die Softwareentwicklung bei AutomationX, da wir unsere Teams erweitern.

Bitte unbedingt teilen!. Auch wenn du kein Interesse hast, findet jemand anders dadurch vielleicht seinen Traumjob.

Was wir uns von dir erwarten

  • Wir entwickeln Software mit C#. Darin solltest du fit sein, oder zumindest in einer vergleichbaren Sprache.
  • Du suchst eine Herausforderung und möchtest dich weiterentwickeln.
  • Für dich stehen Lösungen im Vordergrund, keine Probleme.

Was wir dir bieten können

  • Ein Umfeld, in dem deine Meinung etwas zählt.
  • Eine herausfordernde Tätigkeit, an der du wachsen wirst.
  • Ein konkurrenzfähiges Gehalt.
  • Die vielleicht beste Kaffeemaschine des Landes und frisches Obst.

Wenn du Interesse hast, dann melde dich per E-Mail bei norbert.eder@automationx.com und sende mir deine Bewerbungsunterlagen inklusive deiner Gehaltsvorstellung. Gerne werfe ich auch einen Blick auf dein Blog oder GitHub-Profil. Für Fragen stehe ich auch auf anderen Kanälen (siehe Kontakt) gerne zur Verfügung.

Die offiziellen Stellenbeschreibungen kannst du hier einsehen. Diese beinhalten auch die gesetzlich vorgeschriebene Gehaltsangabe.

The post SoftwareentwicklerIn in #Graz – Wir suchen dich! appeared first on Norbert Eder.

Code-Inside Blog: Get the Windows 10 or 8 accent color in WPF

x.

Windows Accent Color

Since Windows 8 users can choose a system accent color. The color can be seen on the window borders of the default apps and it can be pretty easy be used inside a UWP App.

How to get the accent color in WPF?

Option 1: SystemParameters.WindowGlassBrush - not 100% the same color

As far as I know there are several ways to get the color code, one easy but not 100% correct way is to use the SystemParameters.WindowGlassBrush property that was introduced in .NET 4.5.

Sadly, the color is not 100% correct - I have no idea where this “similar”, but not identical color is used and why the API is returning this color.

It seems this is just a wrapper around the undocumented DwmGetColorizationParameters Win32 API.

Option 2: GetImmersiveColorFromColorSetEx

I found this solution here, which is just a wrapper around the GetImmersiveColorFromColorSetEx Win32 API.

Option 3: Registry, DwmGetColorizationParameters

The last option would be to read the Registry values - I found some hints on this site, but I wouldn’t recommend it, because it is more or less undocumented and might break in the future. So we will use option 1 or 2.

Usage:

The usage of both options is pretty easy (at least with the option 2 code provided) :

    // https://gist.github.com/paulcbetts/3c6aedc9f0cd39a77c37
    var accentColor = new SolidColorBrush(AccentColorSet.ActiveSet["SystemAccent"]);
    this.Code.Background = accentColor;
    this.Code.Text = "AccentColorSet Immersive 'SystemAccent' " + accentColor.Color.ToString();

    // Available in .NET 4.5
    this.SystemProperties.Background = SystemParameters.WindowGlassBrush;
    this.SystemProperties.Text = "SystemParameters.WindowGlassBrush " + ((SolidColorBrush)SystemParameters.WindowGlassBrush).Color.ToString();

Result:

x.

As you can see, the lower color does match the border color instead of the first option. Crazy, right? ¯\_(ツ)_/¯

From the comments: As Yves Goergen pointed out, the resulting color does not exactly match the border color, but it does match the system accent color, which is ok. I would guess that the border has some chrome behavior attached so that the color is slightly different.

The full code is on GitHub

Hope this helps.

Johannes Renatus: TypeScript Erstellung/Fehleranzeige in Visual Studio deaktivieren

Das gute an TypeScript ist zwar, das man direkt beim Erstellen des Projektes in Visual Studio sieht, wenn es zu einem Fehler kommt und das Projekt nicht gestartet werden kann, wie man es auch von C# gewohnt ist. Nur leider kann es durchaus dazu kommen das der TypeScript Code kurzzeitig nicht gebaut werden kann, da […]

Norbert Eder: Buchempfehlung zum Thema DevOps

Die Softwareentwicklung, nein, die gesamte IT-Branche ist inmitten eines gewaltigen Umbruchs. Niemand möchte heute noch arbeiten, wie es vor 10 Jahren der Fall war. Die Systeme sind weit komplexer geworden, die Anforderungen werden immer weitreichender und die Datenmengen riesig. Dadurch werden natürlich die Probleme bei der Implementierung, der Wartung und des Deployments nicht einfacher – gerade auch, wenn es sich um Systeme handelt, die über Jahre/Jahrzehnte gewachsen sind.

Eines der dabei führenden Schlagwörter ist der Begriff DevOps, eine Zusammensetzung aus den Begriffen Development und IT Operations. Es geht hierbei um eine verbesserte Zusammenarbeit der unterschiedlichen Bereiche um die Qualität der Software zu erhöhen, aber auch Änderungen schneller ausliefern zu können.

Mit The Phoenix Project steht ein Buch zur Verfügung, welches die Grundgedanken und -konzepte von DevOps sehr gut erzählt. So wird aufgezeigt, wie geringe Deploy-Frequenzen erhöht und hohe Vorbereitungszeiten für Deployments gesenkt werden können, vor allem auch, wie der Weg dorthin aussehen kann (Überlegungen und Prozesse betreffend).

Die zahlreichen Informationen sind leicht verdaulich verpackt und können somit schon auch mal spät Abends konsumiert werden.

Für dieses Buch gibt es eine klare Empfehlung von mir (gelesen habe ich übrigens die englische Ausgabe, d.h. die deutsche Übersetzung kann ich nicht bewerten).

The Phoenix Project

The post Buchempfehlung zum Thema DevOps appeared first on Norbert Eder.

codefest.at [MS]: #Ch9weekly - Containers 101 with Microsoft and Docker

 

Jede Woche stellen wir ein interessantes Channel 9 Video für Euch hier zur Verfügung, damit Ihr stets einen Wissensvorsprung haben könnt.

Dieses Video bietet eine Einführung in die Welt von Containern. Die Sprecher diskutieren über Windows Server und Hyper-V Container und wie sie sich von virtuellen Maschinen unterscheiden und des weiteren werden Anwendungsbeispiele vorgezeigt.

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

Kay Giza [MS]: Die Visual Studio Code-Entwickler bitten um Feedback zur Lokalisierung

Visual Studio Code 1.0 ist noch keine Woche alt, da hat die Community rund um VS Code bereits ein neues Insiders-Update veröffentlicht. Und dieses hat es in sich. Man hat auch an der Lokalisierung gearbeitet. ie Entwickler bitten hierzu um Feedback, wie die finale Lösung ausschauen soll, eine rege Diskussion ist schon entstanden: Don't localize command names on the command palette Hier der Aufruf an alle VS Code User, beteiligt euch und gebt eure Meinung ab, je mehr desto besser... [... mehr in diesem Blogeintrag 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

Sebastian Seidel: Continuous Integration and Deployment with Bitrise

During a current project we needed to evaluate possibilities to easily set up a Continuous Integration and Deployment system. For several reasons we normally would suggest an In-House solution with TeamCity, but the customer preferred a cloud solution to shorten the procurement and installation process. In this post I explain why and how we set up Bitrise.

Kay Giza [MS]: Xamarin und Visual Studio

Die Build 2016 ist zu Ende und es gab ja wirklich spannende Neuigkeiten, u.a. zu Xamarin. Die Übernahme des führenden Plattformanbieters für Mobile-App-Entwicklung wurde offiziell abgeschlossen und Microsoft hat Xamarin in Visual Studio integriert. Außerdem wurde das Xamarin SDK als Open Source veröffentlichen. Auf der Build hat Scott Guthrie in seiner Keynote auch über die weitere Zukunft von Xamarin gesprochen. Weitere Details erfährt man... [... in diesem Blogeintrag 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

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

codefest.at [MS]: One language to rule them all: 3 Studenten zeigen wie das geht mit Azure und Xamarin

Drei Microsoft Student Partner aus Deutschland haben sich auf die Suche gemacht wie ansprechende Cross-Plattform Apps entwickelt und in der Cloud deployed werden können. Und sie sind fündig geworden: Microsoft Azure und Xamarin!

Malte, Rafael und Kai zeigen Euch wie sie ihre App Ideen mit der Kombination dieser beiden Tools umgesetzt haben, wie zum Beispiel die Mensa Deutschland App (Speisepläne von über 300 Mensen in ganz Deutschland), die 10 min Rezepte (schnelle und einfache Gerichte zaubern) oder Tutus (das Smartphone als medizinischer Assistent) für das das Trio mit dem ersten Platz beim Imagine Cup Germany 2014 in der Kategorie Global Citizenship ausgezeichnet wurde.
Das neueste Projekt heißt Gabr(ein Startup im Bereich Kommunikation).

Last Euch durch diesen (englischen) Artikel inspirieren und beginnt gleich auch Eure Ideen umsetzten. Aktiviert Euren Student Azure Account und holt Euch kostenlos Xamarin for Students (12-Monats-Abo) – zahlreiche weitere Ressourcen zur Unterstützung findet ihr auf Microsoft Imagine und der Microsoft Virtual Academy:

image

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

Alexander Schmidt: WPF und MVVM richtig einsetzen – Teil 2

Erläuterungen zu INotifyPropertyChanged und IDataErrorInfo.

Sven Hubert: Rückblick: ALM Days 2016 in Köln

Wir waren vergangene Woche auf den ALM Days. Neben interessanten Beiträgen und Gesprächen haben wir das 10-jährige Jubiläum über den Dächern von Köln gefeiert. Erfahren Sie mehr über unseren persönlichen Highlights und laden Sie die Vortragsfolien herunter.

image

Der erste Tag begann mit einer Keynote von Sam Guckenheimer (Product Owner, Visual Studio Product Line). Er gab allen Teilnehmern ein tiefen Einblick in die Herausforderungen und Erkenntnisse des letzten Jahres mit Visual Studio Team Services (VSTS). Zusammengefasst hat er sie in “The seven habits of DevOps learned by Microsoft for TFS in the cloud”.

image

Danach folgten an beiden Tagen in drei verschiedenen Tracks Beiträge rund um Visual Studio, Team Foundation Server, Softwareentwicklung in .NET und darüber hinaus. Die neue Offenheit von Microsoft bezüglich Produkte anderer Softwarehersteller, die zunehmend immer besser integriert werden, haben sich in dem insgesamt sehr abwechslungsreichen Programm an den beiden Tagen wiedergefunden, wie zum Beispiel eine Session zum Thema “Design Thinking and Business Model Innovation in Product Development at SAP” von Dr. Tobias Hildenbrand und Sumeet Shetty; vor Jahren undenkbar.  Der erste Konferenztag endete mit einer Fragerunde an die geballte Kompetenz aus der Microsoft Developers Group: Justin Marks (Senior Program Manager), Stuart Kent (Group Program Manager), Immo Landwerth (Senior Program Manager) und Sam Guckenheimer. Das dazugehörige Backlog haben Neno Loje (IT-Berater und -Trainer) und Artur Speth (ALM-Architekt in der Microsoft Developer Experience Group) selbstverständlich im VSTS geführt, priorisiert und abgearbeitet.

image

Am Abend des ersten Konferenztages wurde ein weiteres Mal der zehnte Geburtstag des TFS gebührend in luftiger Höhe und dazugehörender Geburtstagtorte gefeiert (vgl. ALM Days 2015 siehe (http://blog.aitgmbh.de/2015/03/26/alm-days-2015-ein-rckblick/http://blog.aitgmbh.de/2015/03/26/alm-days-2015-ein-rckblick/).

image

image
image

image

Den zweiten Tag begann Justin Marks mit seiner Keynote Case Study of an Agile Transformation in a Large Organization, in welcher er seine Erfahrungen bei der Transformation von einem klassischen Softwarelieferanten zu einem modernen DevOps Team schilderte.

Wie jedes Jahr waren war die AIT mit verschiedenen Beiträgen vertreten und haben unserer Erfahrung aus dem Praxisalltag präsentiert:

  • Benjamin Boost: Boost your Quality – Reviews richtig durchführen

image

image

  • Nico Orschel: Alternativen zu Visual Studio Testtools: Wann lohnt es sich auch mal fremd zugehen?
  • Nico Orschel und Christian Schlag: Release Management mit Team Foundation Server

image

  • Nico Orschel und Christian Schlag: TFS-Upgrade leicht gemacht

image

  • Thomas Rümmler: Integration von Anforderungsmanagement in den Entwicklungsprozess mit dem TFS

image

image

In den Pausen konnten die Besucher Informationen an verschiedenen Ständen einholen. Bei uns gab es eine Microsoft Band 2 zu gewinnen. Wir wünschen Peter B. viel Spaß damit und einen besseren Schlafrhythmus als den Jetlag-geplagten Microsoft-Mitarbeitern.

image

image

Die Folien unserer Vorträge finden Sie in unserem Downloadbereich. Für Rückfragen zu unseren Beiträgen stehen wir Ihnen sehr gern zur Verfügung.

Jürgen Gutsch: An update to the ASP.NET Core & Angular2 series

There was a small but critical mistake in the last series about ASP.NET Core and Angular2. Debugging in the Browser is not possible the way I configured the solution. Fortunately it is pretty simple to fix this problem.

Modern web browsers support debugging typescript sources while running JavaScript. This is a pretty useful browser magic. This works, because there is a mapping file, which contains the info about which line of JavaScript points to the specific line in the TypeScript file. This mapping file is also created by the TypeScript compiler and stored in the output folder.

In my blog series about ASP.NET Core and Angular2, I placed the TypeScript file in a folder called scripts in the root of the project, but outside the wwwroot folder. This was a mistake, because the browsers found the JavaScript and the mapping files, but they didn't find the TapeScript files. Debugging in the browser was not possible with this configuration.

To fix this, I copied all the files inside the scripts folder to the folder /wwwroot/app/

I also needed to change the "outDir" in the tsconfig.json to point to the current directory:

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "module": "commonjs",
    "noEmitOnError": true,
    "noImplicitAny": false,
    "outDir": "./",
    "removeComments": false,
    "sourceMap": true,
    "target": "es5"
  },
  "exclude": [
    "node_modules"
  ]
}

The result looks like this now:

My first Idea was to separate the sources from the output, but I forgot about client side debugging of the TypeScript sources. By making the TypeScript file available to the browsers, I' now able to debug TypeScript in the browsers:

Thanks to Fabian Gosebrink, who points me to that issue. We discussed about that, when we was on the way to the Microsoft Community Open Day 2016 (COD16) in Munich this year.

Albert Weinert: Entwickler-Schriftarten mit dem gewissen Extra

Entwickler-Schriftart?

Entwickler-Schriftarten mit dem gewissen Extra

Es gibt sie haufenweise, Schriftarten die mit dem Augenmerk auf gute Lesbarkeit von Quelltexten entwickelt wurden. Exemplarisch erwähne ich hier Consolas, Hack und Source Code Pro. Jeder hat so seine Lieblingsschrift.

Das gewisse Extra

Vor ein paar Tagen bin ich jedoch auf eine Variante von Schriften gestoßen die den Fokus noch einen kleinen Tick mehr auf Quelltext legt. In einer der Keynotes der TechDays 2016 in Baden zeigte Erich Gamma beiläufig wie toll es ist dass Visual Studio Code auf Web Technologien basierte, da funktioniert so was wie Ligaturen einfach. Ligatur ist das verbinden von mehreren Zeichen zu einem Symbol. Und ich sah den Arrow-Operator wie er wie ein Symbol aussah.

Entwickler-Schriftarten mit dem gewissen Extra

Und in der Tat, in der Software-Entwicklung benutzen wir einen Haufen an Symbolkombinationen um was auszudrücken. Und genau dies optimieren die speziellen Entwickler-Schriftarten, in dem sie aus Kombinationen wie !=, , =>,

Die Schriften mit Ligaturen

Mir sind bis jetzt drei Schriftarten mit Entwickler-Ligaturen bekannt.

Allen gemein ist dass Sie für übliche Kombination von Zeichen mehr oder weniger Ligaturen anbieten.

Hier der Vergleich von Hasklig, welches auf Source Code Pro basiert.
Entwickler-Schriftarten mit dem gewissen Extra

Die Verwendung

Die Schriftart muss einfach auf dem System installiert werden. Dann kann sie im Editor oder IDE der Wahl verwendet werden. Welche Schrift wie genau mit welchem System kompatibel ist, steht meist bei den Schriften selbst dabei.

Visual Studio 2015

In den Optionen als Schriftart für Text-Editor auswählen, eventuell das Visual Studio neu starten wenn es schon lief als die Schrift installiert wurde.

Visual Studio Code

Hier muss die Schriftart in den User Settings eingetragen werden sowie die Ligaturen aktiviert werden. Auch hier musste ich VS Code neustarten, da die Schrift installiert wurde als der Editor schon lief.

{
    "editor.fontFamily": "Fira Code",
    "editor.fontLigatures": true
}

Dauerhafte Verwendung?

Keine Ahnung. Ich werde es weiter ausprobieren. Ich bin, wegen der Darstellung von

===, bei Fira Code hängengeblieben und mir Monoid etwas sehr dünn erscheint.

Kennst Du noch weitere Schriftarten mit dem Fokus auf Software Entwickler?

codefest.at [MS]: #Ch9weekly - Microsoft Bot Framework

 

 

Jede Woche stellen wir ein interessantes Channel 9 Video für Euch hier zur Verfügung, damit Ihr stets einen Wissensvorsprung haben könnt.

Interessieren Dich Bots und hast Du Lust selber einen Bot zu erstellen - Diese Videoserie bietet einen Überblick über das Framework, heben die wichtigsten Funktionalitäten hervor und zeigen, wie ein eigener Bot erstellt, hochgeladen und verwendet werden kann.

Hier ist der Link zur ganzen Videoserie zum Microsoft Bot Framework Thematik ... https://dev.botframework.com/

Norbert Eder: Visual Studio Code 1.0 ist da

Wer mein Blog liest, weiß, dass ich gerne über Visual Studio Code schreibe und es natürlich auch verwende. Umso mehr freut es mich, dass Visual Studio Code 1.0 verfügbar ist.

Auch die Zahlen sind großartig:

Visual Studio Code Statistiken

Visual Studio Code Statistiken (Grafik von Microsoft)

Natürlich gibt es auch wieder jede Menge Neuerungen.

Du möchtest dir dieses Tool testen, dann findest du hier den richtigen Download.

The post Visual Studio Code 1.0 ist da appeared first on Norbert Eder.

Kay Giza [MS]: Microsoft veroeffentlicht Visual Studio Code 1.0 // Ein kostenloser Code-Editor

Soeben hat Microsoft die Version 1.0 von Visual Studio Code (VS Code) veröffentlich! Nachdem wir im Mai 2015 die erste Puplic Preview veröffentlich haben, im November 2015 die erste Beta, vermeldet Microsoft jetzt 2 Millionen Installationen. Heute am 14. April erscheint Visual Studio Code 1.0! VS Code ist kostenlos und unterstützt u.a. JavaScript, TypeScript, C++, HTML, CSS, C#, Python, PHP, F#, Node.js, JSON, Go... [… mehr Informationen in diesem Blogeintrag 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

Jürgen Gutsch: ASP.​NET Core and Angular2 - Part 3

In the second part of this ASP.NET Core and Angular2 series, I wrote about the back-end to provide the data to the Angular2 Application. In this third part, I'm going to show you how the app is structured and how I used routing to navigate between the different components.

The components

Components in Angular2 in general are ordered hierarchically. You have a root component which is bootstrapped in the HTML page and which hosts the app. As you can see in part one of this series, the index.html calls the app bootstrap and the bootstrap method gets the AppComponent passed in.

I created five sub-components for the INETA Database:

  1. Dashboard to quick access some most used features
  2. The speakers area
  3. The user groups area
  4. The events area
  5. And the newsletter management

Except the dashboard, all of this sub-components also have sub-components for the CRUD operations:

  1. List
  2. Detail
  3. Add
  4. Edit

(It's not CRUD, but CRU: create, read, update. Delete an item doesn't need a separate view or a separate component.)

With this structure we get a hierarchy of three levels:

Templates used

Level 1 and level 2 doesn't contain any logic. The classes are completely empty. Only the AppComponent, the Dashboard and all of the third level components need a detailed view. The AppComponent view provides the main navigation and a <router-outlet> directive to place the result of the routing. The Dashboard contains a link list to the most used feature. And all of the third level components use a detailed template.

@Component({
    selector: 'speakers-list',
    templateUrl: 'app/speaker/speakers-list.template.html',
    directives: [
        ROUTER_DIRECTIVES
    ],
    providers: [SpeakerService, HTTP_PROVIDERS]
})
export class SpeakersListComponent implements OnInit {
	// add logic here
}

The other second level components have an inline template, which is just the <router-outlet> directive to place the results of their routes:


@Component({
    selector: 'speakers',
    template: `
    <router-outlet></router-outlet>
    `,
    directives: [
        ROUTER_DIRECTIVES
    ]
})
export class SpeakersComponent { } // doesn't need any logic here

All the detail templates are in separate HTML files, which are directly stored in the /wwwroot/app/ folder in a similar sub folder structure than the components.

routing

Since I'm planning a single page application (SPA) it is pretty clear that I should use routing to navigate between the different areas.

The routes between the second level components are defined in the AppComponent:

// ...

import {Dashboard} from './Dashboard/dashboard.component';
import {SpeakersComponent} from './Speaker/speakers.component';
import {UsergroupsComponent} from './Usergroup/usergroups.component';
import {EventsComponent} from './Event/events.component';
import {NewsletterComponent} from './Newsletter/newsletters.component';

@Component({
    // ...
})
@RouteConfig([
    { path: '/Dashboard', name: 'Dashboard', component: Dashboard, useAsDefault: true },
    { path: '/Speakers/...', name: 'Speakers', component: SpeakersComponent },
    { path: '/Usergroups/...', name: 'Usergroups', component: UsergroupsComponent },
    { path: '/Events/...', name: 'Events', component: EventsComponent },
    { path: '/Newsletter/...', name: 'Newsletter', component: NewsletterComponent },
])
export class AppComponent {}

The route to the dashboard is configured as the default route. With this configuration the URL in the browsers address bar changes immediately to /dashboard when I call this app. The other routes contain three dots (/...) in the path. This is needed, because I want to configure child-routing in the second level components, otherwise child-routing is not possible. All the routes are named and bound to a component. In the templates, the links to the different app areas are created by using the routes with their names:

<ul class="nav navbar-nav">
    <li><a href="" [routerLink]="['Speakers']">Speakers</a></li>
    <li><a href="" [routerLink]="['Usergroups']">Usergroups</a></li>
    <li><a href="" [routerLink]="['Events']">Events</a></li>
    <li><a href="" [routerLink]="['Newsletter']">Newsletter</a></li>
</ul>

Inside the second level child-components, I need to access the third level components. This is why I need to configure child-routing inside this components. This child-routing looks a little bit different, because I need to pass entity identifiers to the detail view, or to the edit view component:

// ..

import {SpeakersListComponent} from './speakers-list.component';
import {SpeakersDetailComponent} from './speakers-detail.component';
import {SpeakersEditComponent} from './speakers-edit.component';
import {SpeakersAddComponent} from './speakers-add.component';

@Component({
    // ...
})
@RouteConfig([
    { path: '/', name: 'SpeakersList', component: SpeakersListComponent, useAsDefault: true },
    { path: '/:id', name: 'Speaker', component: SpeakersDetailComponent },
    { path: '/Add', name: 'NewSpeaker', component: SpeakersAddComponent },
    { path: '/Edit/:id', name: 'EditSpeaker', component: SpeakersEditComponent }
])
export class SpeakersComponent { }

The :id tells the route engine, that this is a named placeholder, where we can pass any value (This looks familiar, if you know the ASP.NET MVC routing). The routes are named and bound to the third level components. In this case, the routes to the list components are configured as default routes.

Using the routes in the templates of the specific component, where the route is configured is as easy as shown in the code samples above. But how does it look like, if I need to use a route outside the current context? From the dashboard, I directly want to link to the components to add new entities.

If you carefully read the documentation, you'll see that you can use the herarchy of the reoutes to use it:

<div class="list-group">
    <a href="" [routerLink]="['Speakers', 'NewSpeaker']" class="list-group-item">Neuen Speaker anlegen</a>
    <a href="" [routerLink]="['Usergroups', 'NewUsergroup']" class="list-group-item">Neue Usergroup anlegen</a>
    <a href="" [routerLink]="['Events', 'NewEvent']" class="list-group-item">Neues Event anlegen</a>
    <a href="" [routerLink]="['Newsletter', 'NewNewsletter']" class="list-group-item">Neuen Newsletter anlegen</a>
</div>

The syntax is like this:

['base-route-name', 'child-route-name', 'grant-child-route-name', 'and-so-on-route-name']

The templates

Each of the third level components (even the Dashboard and the root component) are using detailed templates stored in HTML files in the /wwwroot/app/ folder in the same structure as the TypeScript files in the scripts folder. After compiling the TypeScript code, the transpiled JavasSripts are directly beneath the templates:

I don't want to go deep into the templates and binding stuff, but only show you two of the templates. For more details about the bindings, just visit the Angular2 documentation on http://angular.io/

This is the template of the speakers list:

<h1>All speakers</h1>

<div class="row">
    <div class="col-md-12">
        <ul class="list-group">
            <li class="list-group-item">
                <span>&nbsp;</span>
                <a href="" [routerLink]="['NewSpeaker']" 
                    class="btn btn-primary btn-xs pull-right">
                    Add new speaker
            </a>
            </li>
            <li *ngFor="#speaker of speakers" class="list-group-item">
                <a href="" [routerLink]="['Speaker', {id: speaker.Id}]">
                     
                </a>
                <a href="" class="btn btn-danger btn-xs pull-right">
                    Delete
                </a>
                <a href="" [routerLink]="['EditSpeaker', {id: speaker.Id}]" 
                    class="btn btn-primary btn-xs pull-right">
                    Edit
                </a>
            </li>
            <li class="list-group-item">
                <span>&nbsp;</span>
                <a href="" [routerLink]="['NewSpeaker']" 
                    class="btn btn-primary btn-xs pull-right">
                    Add new speaker
                </a>
            </li>
        </ul>
    </div>
</div>

This templates shows mustache syntax to write out the values of the FirstName and the LastName. This is called "interpolation" and it is a one way binding in the direction from the component to the template.

This templates also uses the routing to create link to the edit view or to the add view. You'll also find the *ngFor, which is the same as the old ng-for. It defines a template to repeat for each item of the speakers. That item will be directly assigned to the variable #speaker

The concepts here are pretty similar to old Angular.JS. Because of the new binding concept, the forms are a bit different:

<h1>Edit speaker</h1>

<form class="form-horizontal">
    <div class="form-group">
        <label for="FirstName" class="col-sm-2 control-label">Firstname</label>
        <div class="col-sm-10">
            <input id="FirstName" class="form-control" 
                [(ngModel)]="speaker.FirstName" />
        </div>
    </div>
    <div class="form-group">
        <label for="LastName" class="col-sm-2 control-label">LastName</label>
        <div class="col-sm-10">
            <input id="LastName" class="form-control" 
                [(ngModel)]="speaker.LastName" />
        </div>
    </div>

    <!-- some more fields here-->

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <a class="btn btn-default" href="" 
                [routerLink]="['Speaker', {id: speaker.Id}]">Cancel</a>
            <button type="submit" class="btn btn-primary" 
                (click)="saveSpeaker(speaker)">Save</button>
        </div>
    </div>
</form>

In this template we use different types of binding. The "banana in the box" syntax ([()] called like this by John Papa) defines a two-way binding, which should to be used in forms, to send the users input to the component. For the events we have a one-way binding from the template to the component. This direction is only used for events like this. This is used on the save button.

Conclusion

I'm not completely done with the implementation currently. But I was pretty surprised about how fast I got a running app. Development is pretty fast with Angular2 and you get the first results faster than using the old Angular.JS. Even TypeScript is cool and feels familiar to a C# developer. I'm looking foreward to do a real project with Angular2, TypeScript and ASP.NET Core.

To learn more about the data binding, read excellent the tutorials on http://angular.io/. Another great resource to learn more about Angular2, are the video courses by John Papa on PluralSight.

If you want to go to the details of the INETA Database, please have a look into the GitHub Repository.

codefest.at [MS]: Developer Events

Am Anfang war die Cloud - Ihr Weg zu kosteneffektiven und sicheren IT Dienstleistungen

Interesse an Microsoft Azure? Zwei Serien von kostenlosen Workshops bieten Euch die Möglichkeit Frühling, Sommer, Herbst und Winter sinnvoller zu verbringen, als am z.B. auf der Couch oder am Strand zu sitzen und ein Buch zu lesen.

Am Anfang war die Cloud – Euer Weg zu kosteneffektiven und sicheren IT Dienstleistungen

Steigt mit uns ein in die Welt von Cloud Computing und Microsoft Azure!

Oliver Lintner zeigt neben einer allgemeinem Einführung in die Welt von Microsoft Azure anhand von zwei konkreten Beispielen die einfache Handhabung und die Vorteile von Microsoft Azure (Microsoft Skill Level 100-200).

Der nächste Termin:

Wir beginnen mit der Anlage einer Microsoft Azure Subscription und betrachten dann wie Microsoft Azure typische Unternehmensanforderungen ermöglicht:

  • Kostenersparnis
  • Erhöhung der Agilität und
  • Maximierung der Sicherheit durch Auslagerung von Webanwendungen

Begleitet uns durch einen interaktiven Vormittag und stellt Euch darauf ein selbst aktiv zu werden. Wir freuen uns auf Eure Teilnahme!

Um an den praktischen Übungen teilnehmen zu können, nehmt bitte einen Laptop mit. Verkabelter Internetzugang steht vor Ort zur Verfügung.

Neu im Programm: AzurePR!ME mit unterschiedlichen Schwerpunktthema

Wenn Ihr Euch mit Microsoft Azure schon ein bisschen auskennt, dann kommt doch einfach nur am Nachmittag vorbei. Als separate Veranstaltung bieten wir mit AzurePR!ME direkt im Anschluss die Möglichkeit uns bei der vertiefenden Betrachtung eines Azure Teilbereiches zu begleiten (Microsoft Skill Level 200-300).

AzurePR!ME - Azure App Service

Wir sprechen mit den Azure Onboarding Camps sowohl Kunden als auch Partner an. Es kann dabei etwas technischer werden insbesondere bei den HandsOn Teilen, wobei der Vortrag auch einen guten Überblick für technisch weniger bewendete gibt.

Der nächste Termin:

Wichtig für die Teilnahme ist die eigene Microsoft Azure Subscription! Ihr könnt entweder eine bereits bestehende Microsoft Azure Subscription einsetzen oder eine kostenlose Testversion im Vorfeld anlegen. Gerne helfen wir auch beim Anlegen Eurer Microsoft Azure Subscription im Rahmen der Veranstaltung.

Jetzt kostenlose Microsoft Azure Subscription lösen!

Wisst Ihr eigentlich, dass Ihr als MSDN Abonnent oder als BizSpark Mitglied bis zu € 1.380.- jährlich an Azure-Diensten kostenlos von Microsoft beziehen könnt? Mehr dazu findet Ihr auch in diesem kostenlosen Online Training:  Microsoft Azure als kostenfreie Test- & Entwicklungsumgebung für MSDN Abonnenten

Ist Euch der Weg nach Wien zu beschwerlich? Oder passen einfach die Termine für Euch nicht? Dann nehmt doch online an einem unserer Microsoft Azure Webinare teil! Ein technischer Spezialist von Microsoft zeigt Euch Microsoft Azure live, und beantwortet Eure Fragen. Anmelden unter http://azure.microsoft.com/de-de/overview/webinars/

Und falls Ihr vor dem Workshop schon etwas Training braucht, dann schaut Euch doch mal einen dieser kostenlosen deutschsprachigen Online Kurse an. Zur Vorbereitung bietet die Microsoft Virtual Academymit Kursen rings um Microsoft Azure einiges an tollen Lerninhalten:

MVA Kurse zu Microsoft Azure

Anmerkung: Dieser Artikel wird immer wieder aktualisiert. Versprochen. Smile

Sven Hubert: Rückblick auf die //Build 2016/

Die Softwareentwicklung unterliegt ständigen Veränderungen und Neuerungen. Einer der wichtigsten Zeitpunkte, in denen die Microsoft-Entwicklergemeinde von Neuerungen erfährt, ist die Build. Ich hatte die Gelegenheit, die Neuerungen vor Ort zu erfahren und mich 3 Tage lang mit den Experten zu verschiedensten Themen auszutauschen. Im Folgenden möchte ich meine ganz persönlichen Eindrücke schildern.

Die mit Spannung erwartete Key Note mit Satya Nadella am ersten Tag brachte eine Menge Neues, der persönliche Wow-Effekt blieb aber aus. Für großen Applaus sorgte die Bekanntgabe der „Bash on Windows“. In Windows können jetzt dank eines neuen Subsystems Linux (ELF)-Binaries direkt ausgeführt werden. Dies eröffnet eine neue Welt von Werkzeugen innerhalb der Windows Plattform. Scott Hanselman berichtet in seinem Blog über erste Erfahrungen. Auch wird im Windows 10 Anniversary Update die Stifteingabe erneut verbessert. Virtuelle Lineale ermöglichen die exakte Linienführung und das saubere Zeichnen, sei es für technische Zeichner oder für Designer. Für mich als ausgeprägten OneNote-Nutzer sicher ein weiterer Schritt, um den Stift zum vollwertigen Eingabeinstrument zu machen.

Mit der Vorstellung von Project Centennial zeigt Microsoft einen Weg, wie bestehende Anwendungen auf die Universal Windows Plattform portiert werden können. Ein erster Test mit unserem Visual Localize zeigte aber, dass zwischen Marketing-Versprechen und Realität noch Raum für Verbesserung besteht. Ich bin zuversichtlich, dass Microsoft an dieser Stelle stark nachbessern wird und somit das Windows 10 Universum für Bestandsapplikationen geöffnet wird. Und beim Stichwort „Windows 10 Universum“ ging es auch direkt weiter. Die Xbox wird mit Windows 10 zur DevBox und Entwickler können jetzt ihre Apps direkt auf die Xbox deployen und dort testen und debuggen.

Weitere Neuerung und neues Feld der Interaktion zwischen Mensch und Maschine sind Bots, welche als Bestandteil der Cortana Intelligence Suite vorgestellt wurden. Microsoft spricht hier von Conversation Canvases. Darunter zu verstehen sind Kommunikationskanäle, die Menschen heute bereits nutzen und die durch Intelligenz wie z.B. Bots angereichert werden. In der Demo zeigte Microsoft, wie darüber z.B. eine interaktive Pizzabestellung laufen kann. Sicher ein sehr einfaches Beispiel, aber es zeigt, welche neuen Optionen in der Kommunikation zwischen Endnutzern und z.B. Serviceabteilungen ermöglicht werden können.

Mein Highlight des Tages war die Verfügbarkeit der HoloLens sowie der erste persönliche Kontakt mit diesem neuartigem Gerät. Was mich bezüglich der holografischen Visualisierungen erwarten würde, konnte ich mir basierend auf den reichhaltig verfügbaren Videomaterialien schon sehr gut vorstellen. So zeigen z.B. die Citi Group, Trimble, die Case Western University als auch Microsoft selbst mit Skype sowie mit Holoportation, was alles mit HoloLens erlebbar wird.

Was für mich aber im Besonderen erst im persönlichen Kontakt mit der HoloLens zum Vorschein kam, war der Einfluss von Spatial Audio bei der Schaffung einer holografischen Welt. Hierbei besitzt das Tonsignal ebenfalls wie Licht eine Quelle im Raum und verändert sich je nach Position und Ausrichtung des Kopfes. Im Zusammenspiel mit den holografischen Projektionen entsteht eine sehr realistische Umgebung. Ich empfehle jedem, der die Chance hat, HoloLens einmal zu probieren, dies auch zu tun, auch wenn die Schlange, an der man sich anstellen muss, länger sein sollte als die zur Vorbestellung eines Tesla Model 3.

Die Gespräche am Vorabend von Tag 2 mit den Kollegen von Xamarin schürten einige Erwartungen. Diese wurden in der Key Note des zweiten Tages auch prompt erfüllt: Xamarin ist für Visual Studio Enterprise und Premium Kunden ohne zusätzliche Kosten verfügbar. Booom ! ! ! Das Auditorium wusste dies auch lautstark und anhaltend zu würdigen. Aus meiner persönliches Sicht ist dies ein wesentlicher Schritt, um Windows als Entwicklungsplattform für alle Devices zu stärken und jedem MSDN-Subscriber den Zugang zu den notwendigen Entwicklungswerkzeugen zu ermöglichen. Es gibt jetzt keinen Grund mehr, vor der Entwicklung von mobilen Apps zurückzuschrecken. Mit Visual Studio, VSTS, Xamarin TestCloud sowie HockeyApp stehen Werkzeuge bereit, die DevOps zum  Hygienefaktor werden lassen.

Darüber hinaus waren Azure IoT sowie PowerBI prominent in der Key Note des zweiten Tages vertreten, beides Themen, mit denen wir uns bei AIT seit geraumer Zeit befassen. So ist die Preview von Power BI Embedded aus meiner Sicht ein wichtiger Schritt, um Daten in ansprechender Form in eigene Anwendung einzubetten. Zudem wird mit der Unterstützung von R ein neues Universum an Auswertungen und Visualisierungen erschlossen, welches via Power BI einfach konsumiert werden kann.

Mit Windows 10 IoT und den zugehörigen Diensten auf der Azure Plattform vergrößert Microsoft das Anwendungsuniversum weiter und zeigt auf beeindruckende Art und Weise, welche Breite an Plattformen bereits heute mit den Haus- und Hofsprachen von Microsoft adressiert werden kann. Aus meiner Sicht ein weiterer wichtiger Schritt, um aufgebautes Wissen und Können verstärkt wiederverwenden zu können.

Auch am zweiten Tag war HoloLens wieder präsent. Diesmal als verlängerter Arm von Augmented Reality, welches auf Basis von Vuforia am Beispiel von Caterpillar gezeigt wurde. Es wurde hierbei erneut deutlich, wie die einzelnen Geräte und Plattformen ineinander übergreifen.

Den Rückflug habe ich genutzt, um selbst die ersten Gehversuche mit den neuen Technologien zu machen. So reichte mein Zwischenstopp in Amsterdam, um meine erste HoloLens-App zu schreiben und mit dem Emulator zu testen.

Neben dem Aus- und Einblick in die Welt der Software-Entwicklung auf Basis der Microsoft-Plattformen hat die Konferenz mir insbesondere gezeigt, dass es bisher keine bessere Zeit gab, ein Microsoft-Entwickler zu sein. Der Zugang zu Technologien und Lösungen sowie der hohe Wiederverwendungsgrad von Wissen machen die Microsoft-Plattform zu einer hervorragenden Ausgangsbasis für eigene Entwicklungen. Ich freue mich schon darauf, mit und für unsere Kunden Lösungen zu schaffen, die unseren Kunden sowie den Kunden unserer Kunden einen Mehrwert stiften. Der Ansporn war nie größer.

PS: Wer es nicht zur Build geschafft hat oder so wie ich nur einen Bruchteil des Gebotenen persönlichen sehen konnte, der findet auf Channel 9 die Aufzeichnung aller Sessions

Karsten Kempe: Prozessanpassungen in Visual Studio Team Services – einfache Felder

VSTSMicrosoft mit einem seiner letzten Updates die Grundlage geschaffen, Prozess-Anpassungen auch in seiner cloudbasierten ALM-Plattform, den Visual Studio Team Services, durchzuführen. Dafür wird von einem Standard-Prozess eine Ableitung erzeugt, in der individuelle Änderungen vorgenommen werden können. Die einfachste Form von Anpassungen sind benutzerspezifische Felder in Work Items aufzunehmen.

Nach dem Erstellen eines neuen individuellen Prozesses, das Vorgehen findet Ihr in den Basics, können die einzelnen Work Item Typen angepasst werden. Alle Änderungen werden auf der Administrationsoberfläche des VSTS Accounts durchgeführt, was gleichzeitig bedeutet, das spezielle Rechte dazu notwendig sind. Nur Mitglieder der Project Collection Administrator Gruppe oder extra in diesem Bereich zugewiesenen Gruppen oder Nutzer können Prozesse erzeugen, editieren oder löschen.

Inherited Fields und System Fields

Um dieses neue vererbungsbasierte Prozess Customizing anbieten zu können, musste Microsoft einige Änderungen und Kompromisse zum bisherigen Modell des TFS eingehen. Eine der größten Schwierigkeiten des herkömmlichen Modells war und ist, die Upgrade-Kompatibilität aufrecht zu erhalten. Ich kenne viele TFS-Instanzen, deren Template so stark angepasst wurde, dass ein automatisches Upgrade nicht mehr möglich ist.

Eine Lösung zu diesem Problem sind die sog. Inherited Fields in einem individuellen Prozess. Diese Felder sind durch das Symbol Process Customiziation inherited Symbol gekennzeichnet und lassen nur die Umbenennung des Feld-Labels auf der Oberfläche zu. Verschieben oder umgruppieren lassen sich diese Felder auf der Work Item Maske nicht, sondern sich nur vor dem Benutzer verstecken.

Außerdem gibt es noch die sog. System Fields, gekennzeichnet durch das Schloss Process Customiziation System Symbol Symbol, die überhaupt nicht angepasst werden können.

Prozess Customization System Fields II

Neue Felder aufnehmen

Das Aufnehmen eigener Felder ist sehr einfach und straight forward. Den „New Field“ Knopf drücken und dem Dialog folgen, mehr nicht.

Als erstes muss die Entscheidung getroffen werden, ob das Work Item um ein existierendes Feld (aus allen Work Items) oder um ein neues Feld erweitert werden soll.

Process Customiziation add field

Für ein neues Feld, muss ein account-weit eindeutiger Name vergeben, der Feld-Typ ausgewählt (Text, Integer, Decimal, Date/Time) und optional eine Beschreibung eintragen werden. Es empfiehlt sich das Best Practice aus der TFS-Welt zu übernehmen und eigene Felder immer mit einem Prefix zu versehen (z.B. almsports_meinNeuesFeld).

Hinweis: Weitere Feld-Typen sollen in einem der nächsten Updates folgen (z.B. html, boolean oder Auswahllisten).

Auf der Layout-Seite des Dialogs kann die Sichtbarkeit des Felds auf der Work Item Maske aktiviert und die Gruppe ausgewählt werden, in der das Feld erscheinen soll.

Process Customiziation edit layout

Hier kann auch eine Feldbezeichnung eingetragen werden, die nicht identisch mit dem Feldnamen sein muss.

Abschließend kann unter Options entschieden werden, ob das neue Feld ein Pflichtfeld sein soll und ob es einen Default-Wert besitzt.

Sobald man dann die Erstellung mit „Add field“ bestätigt, wird das neue Feld für das Work Item aktiv und taucht auf der Work Item Maske des editierten Typen auf.

Hinweis: Auch bei den Team Services gilt das Grundprinzip des Customizings „weniger ist mehr“. Versucht mit möglichst wenig Feldern auszukommen. Eure Nutzer werden es Euch danken!

Alexander Schmidt: Azure SDK (fast) automatisch deinstallieren

Ein kleines Power-Shell-Script entfernt die Einzel-Komponenten des Azure-SDK.

Holger Schwichtenberg: Aktuelle und geplante Features von Windows 10 aus Unternehmenssicht

Die "Windows 10 Roadmap for Business" zeigt auch Features an, die noch in der Entwicklung sind.

Jürgen Gutsch: ASP.​NET Core and Angular2 - Part 2

In the last post, I prepared a ASP.NET Core project to use and build TypeScript and to host a Angular2 single page application. Now, in this second part of the ASP.NET Core and Angular2 series, I'm going to prepare the ASP.NET Core Web API to provide some data to Angular2.

I really like to separate the read and the write logic, to optimize the read and the write stuff in different ways and to keep the code clean and simple. To do this I use the "Command & Query Segregation" pattern and a small library I wrote, to support this pattern. This library provides some interfaces, a QueryProcessor to delegate the queries to the right QueryHandler and a CommandDispatcher to get the right CommandHandler for the specific command.

I also like to use the Azure Table Storage, which is a pretty fast NoSQL storage. This makes sense for the current application, because the data wont change so much. I 'll write one or two newsletter per month. I add maybe three events per month, maybe two user groups per year and maybe one speaker every two months. I'll use four tables in the Azure Table Storage: Newsletters, Speakers, Usergroups and Events. The Events table is more like a relation table between the user group and a speaker, containing the date, a title and a short description. This is not an event database for all of the user group events, but a table to store the events, we have to pay travel expenses for the specific speaker.

I'll write a little more in detail about the "Command & Query Segregation" and the Azure Table Storage Client in separate posts. In this post, you'll see the IQueryProcessor and the ICommandDispatcher used in the API controller and simple Query and Command classes which are passed to that services. The queries and the commands will be delegated to the right handlers, which I need to implement and which will contain my business logic. Please look in the GitHub repository to see more details about the handlers. (The details about getting the data from the data source is not really relevant in this post. You are able to use use any data source you want.)

This CQS engine is configured in the Startup.cs by calling services.AddCqsEngine();

services.AddCqsEngine(s =>
{
    s.AddQueryHandlers();
    s.AddCommandHandlers();
});

Registering the handlers in this lambda is optional, but this groups the registration a little bit. I'm also able to register the Handlers directly on the services object.

The methods used to register the Handlers are ExtensionMethods on the ServiceCollection, to keep the Startup.cs clean. I do all the handler registrations in this ExtensionMethod:

public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddQueryHandlers(this IServiceCollection services)
    {
        services.AddTransient<IHandleQueryAsync<AllSpeakersQuery, IEnumerable<Speaker>>, AllSpeakersQueryHandler>();
        services.AddTransient<IHandleQueryAsync<SpeakerByIdQuery, Speaker>, SpeakerByIdQueryHandler>();

        services.AddTransient<IHandleQueryAsync<AllEventsQuery, IEnumerable<Event>>, AllEventsQueryHandler>();
        services.AddTransient<IHandleQueryAsync<EventByIdQuery, Event>, EventByIdQueryHandler>();

        // and many more registrations
        
        return services;
    }
}

The Web API

To provide the fetched data to the Angular2 SPA, I want to use a Web API which is now completely included in ASP.NET Core MVC. Right click the Controllers folder and add a new item. Select "Server-side" and than the "Web API Controller Class". I called it SpeakersController:

[Route("api/[controller]")]
public class SpeakersController : Controller
{
    private readonly IQueryProcessor _queryProcessor;
    private readonly ICommandDispatcher _commandDispatcher;

    public SpeakersController(
        IQueryProcessor queryProcessor,
        ICommandDispatcher commandDispatcher)
    {
        _queryProcessor = queryProcessor;
        _commandDispatcher = commandDispatcher;
    }

    [HttpGet]
    public async Task<IEnumerable<Speaker>> Get()
    {
        var query = new AllSpeakersQuery();
        var speakers = await _queryProcessor.ProcessAsync(query);
        return speakers;
    }

    [HttpGet("{id}")]
    public async Task<Speaker> Get(Guid id)
    {
        var query = new SpeakerByIdQuery(id);
        var speakers = await _queryProcessor.ProcessAsync(query);
        return speakers;
    }

    [HttpPost]
    public async void Post([FromBody]Speaker value)
    {
        var command = new InsertSpeakerCommand(value);
        await _commandDispatcher.DispatchCommandAsync(command);
    }
        
    [HttpPut("{id}")]
    public async void Put(int id, [FromBody]Speaker value)
    {
        var command = new UpdateSpeakerCommand(id, value);
        await _commandDispatcher.DispatchCommandAsync(command);
    }
        
    [HttpDelete("{id}")]
    public async void Delete(int id)
    {
        var command = new DeleteSpeakerCommand(id);
        await _commandDispatcher.DispatchCommandAsync(command);
    }
}

As you can see in the Controller, I injected a IQueryProcessor and a ICommandDispatcher and I use this services by creating a query or a commend and passed it to the DispatchAsync or ProcessAsync methods

The client side

Ho does it look like to access the Web APIs with Angular2?

First I need to create a service in Angular2. This Service is also a component and exactly this is what I really love with Angular2: Everything is a component and just needs to be stacked together :)

I create a Angular2 service for every entity in the project. First I need to import some Angular2 modules:

  • Http is to call remote resources.
  • Headers need to be send additionally to the server.
  • And we need to work with Responses and RequestsOptions.
  • We get an Observable type from the Http service
  • and we have to import our Speaker type:
import {Injectable, Component} from 'angular2/core';
import {Http, Response, HTTP_PROVIDERS, Headers, RequestOptions} from 'angular2/http';
import {Observable} from 'rxjs/Observable';

import {Speaker} from './speaker';

@Component({
    providers: [Http]
})
@Injectable()
export class SpeakerService {

    constructor(private _http: Http) { }

    private _speakersUrl: string = '/api/speakers/';

	// methods to access the data
}

The Http service gets injected via the constructor and can be used like this:

getSpeakers() {
    let data: Observable<Speaker[]> = this._http.get(this._speakersUrl)
        .map(res => <Speaker[]>res.json())
        .catch(this.handleError);

    return data;
}

getSpeaker(id: string) {
	let data: Observable<Speaker> = this._http.get(this._speakersUrl + id)
        .map(res => <Speaker>res.json())
        .catch(this.handleError);

    return data;
}

private handleError(error: Response) {
    console.error(error);
    return Observable.throw(error.json().error || 'Server error');
}

In both public methods we return an Observable object, which needs special handling in the specific consuming component, because all requests to the server are async. To consume the data, I need to subscribe to that Observable:

this._speakerService.getSpeakers()
    .subscribe(
        speakers => this.speakers = speakers,
        error => this.errorMessage = <any>error);

Subscribe calls the first delegate in case of success and assigns the speaker to the property of the current component. In case of errors the second delegate is executed and the error object gets assigned to the error property.

This is how a complete Angular2 speaker list component looks like:

import {Component, OnInit} from 'angular2/core';
import {HTTP_PROVIDERS} from 'angular2/http';
import {ROUTER_DIRECTIVES} from 'angular2/router';

import {Speaker} from './speaker';
import {SpeakerService} from './speaker.service';

@Component({
    selector: 'speakers-list',
    templateUrl: 'app/speaker/speakers-list.template.html',
    directives: [
        ROUTER_DIRECTIVES
    ],
    providers: [SpeakerService, HTTP_PROVIDERS]
})
export class SpeakersListComponent implements OnInit {

    constructor(private _speakerService: SpeakerService) { }

    speakers: Speaker[];
    errorMessage: any;

    ngOnInit() {
        this._speakerService.getSpeakers()
            .subscribe(
                speakers => this.speakers = speakers,
                error => this.errorMessage = <any>error);
    }
}

To save an entity, I use the post or put method on the Http object, I need to specify the content type and to add the data to the body:

saveSpeaker(speaker: Speaker) {

    let body = JSON.stringify(speaker);

    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    let temp = this._http.post(this._speakersUrl, body, options)
        .map(res => console.info(res))
        .catch(this.handleError);
}

Conclusion

That's about how I provide the data to the client. Maybe the CQS part is not really relevant for you, but this is the way how I usually create the back-ends in my personal projects. The important part is the Web API and only you know the way how you need to access your data inside your API Controller. ;)

In the next blog post, I'm going to show you how I organize the Angular2 app and how I use the Angular2 routing to navigate between different components.

codefest.at [MS]: Microsoft TechGuide – Erstelle Dir ganz einfach einen Lernplan

TechGuide Hast Du schon mit dem Gedanken gespielt einen ganz bestimmten IT-Skill Dir anzueignen ... jedoch war der reine Gedanke nach Lernmaterialien zu suchen schon zu aufwändig?

Jetzt ist Schluss damit, der TechGuide ist Dein Retter in der Not!!

Mit dem interaktiven TechGuide wählst Du aus, welches Spezialgebiet Dich am meisten interessiert und als Nächstes suchst Du aus, welche Lern- oder Informationsressource Du genau brauchst.

Du kannst selbst entscheiden, ob Du ...

  • der/die ultimative IT-Pro werden willst und die neuersten Informationen und Videos zu allen möglichen IT-Themen durchstöbern willst
  • der/die ausgetüftelte Software Developer/in werden willst und komplizierte Prozesse einfach gestaltest bzw. automatisierst
  • ein/e erfahrene/r Web-Developer/in werden willst und raffinierte Websiten aus dem Hut zauberst
  • ein/e mobile/r App-Developer werden willst und die mobile Weltherrschaft an Dich reißen willst
  • ein/e Gaming-Geek werden willst, der/die die Spieleentwicklung auf den Kopf stellen will
  • ein/e Office-Experte/in werden willst, um Deinen Office-Anwendungen ein wenig Pep zu verleihen

 

Kay Giza [MS]: Vielen Dank / Thank you for 3000 followers on Twitter!

Thank you very much for 3000 followers on Twitter (@KayGiza) and @karolikl for being my 3000 follower!

Thank you very much for 3000 followers on twitter!



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

Sven Hubert: Office Add-Ins erstellen – Teil 3: Veröffentlichung

In diesem Blogartikel geht es um die Veröffentlichung eines Office Add-Ins. Dies ist letzter Teil der dreiteiligen Blogserie. Das Hosten des Webprojektes wird hier nicht beschrieben, der Fokus liegt auf dem Veröffentlichen des Manifests. Im zweiten Teil wurde erläutert wie ein einfaches Beispiel erstellt wird. Bevor an das Publizieren herangegangen wird, muss entschieden werden, wo es publiziert werden soll, und was dafür notwendig ist (siehe Abbildung 1 für die Ablaufliste).

Abbildung 1 Blogartikel 3

Abbildung 1: Ablaufliste zur Veröffentlichung eines Aufgabenbereich-Add-Ins

Visual Studio bietet die Möglichkeit an, zu prüfen, ob das Manifest die nötigen Anforderungen für den Office Store erfüllt. Dazu über das Projekt mit der Manifest-Datei, das Kontextmenü öffnen und „Publish“ auswählen. Den Pfad zu dem Manifest bestimmen und mit „Perform a validation check“ die Überprüfung ausführen. Um das Add-In im Add-In-Katalog anzubieten, müssen der Name und die URL, die auf den Webserver verweist, angegeben werden. Für den Office Store müssen noch ein Icon und eine URL, die zum Support führt, vorhanden sein. Wichtig ist für den Office Store, dass die URL der gehosteten Webseite mit https beginnt. [1]

Nicht jeder Add-In Typ kann alle Optionen, die zum Veröffentlichen angeboten werden, nutzen (siehe Tabelle 1). Jeder Add-In-Typ kann im Office Store publiziert werden. Inhalts- und Aufgabenbereich-Add-Ins können im Add-In Katalog auf dem SharePoint hochgeladen und über einen Netzwerk Ordner freigegeben werden. Outlook-Add-Ins können in einem Exchange-Katalog veröffentlicht werden, der für Benutzer des Exchange-Servers verfügbar ist. [2]

Typ Office Store Unternehmens-Add-In-Katalog Add-In-Katalog mit freigegebenen Ordnern Exchange-Server
Aufgabenbereich-Add-In
Inhalts-Add-In
Outlook-Add-In

Tabelle 1: Optionen für die Veröffentlichung von Office-Add-Ins [2]

Office Store

Beim Office Store handelt es sich um einen öffentlichen Marketplace, den Microsoft auf Office.com hostet und reguliert.2 Hier können Entwickler weltweit ihre Office-Lösungen veröffentlichen und verkaufen. Endbenutzer und IT-Experten können diese dann für private oder geschäftliche Nutzung herunterladen. Nach Upload eines Add-Ins in den Office Store, wird der Code von Microsoft überprüft. Wenn die Überprüfung erfolgreich war, wird das Add-In von Microsoft digital signiert. [3]

Um ein Office Web Add-In im Office Store zu veröffentlichen, wird ein Seller Dashboard Account vorausgesetzt. Dieses Konto umfasst ein Marketingprofil, womit das Fachgebiet des Unternehmens erläutert und Kunden erklärt wird, wie sie von Ihren Apps profitieren. Es kann ein Einzel- oder Unternehmenskonto erstellt werden. [4]

Wenn das Profil erstellt oder bearbeitet und zur Genehmigung übermittelt wird, wird es von GeoTrust und Mitgliedern des Seller Dashboard-Teams überprüft. Der Anzeige- oder Firmenname muss der vollständig registrierte Name des Unternehmens sein, er darf nicht mit einer anderen Marketingprofilidentität übereinstimmen. Die Inhalte auf der bereitgestellten Webseite müssen funktionieren und dem Unternehmen gehören. Unternehmensinformationen müssen überprüfbar und korrekt sein. Die verantwortliche Person für das Seller Dashboard muss berechtigt sein, im Namen des Unternehmens zu handeln.

Der Genehmigungsstatus unterteilt sich in Statusarten:

  • Pending approval: Die Kontoinformationen werden noch geprüft, es können Add-Ins hinzugefügt werden.
  • Approved: Hier ist die Einreichung von Add-Ins zur Überprüfung möglich.
  • Changes requested: Änderungen sind nötig, damit das Konto genehmigt wird.

Beim Hinzufügen des Add-Ins müssen Informationen wie Version, Veröffentlichungsdatum, URL zur Dokumentation und zusätzlich für jede unterstützte Sprache eine Beschreibung, Bilder und Titel angegeben werden. Für verschiedene Länder können verschiedene Logos angegeben werden. Damit Tester von Microsoft die Vorlage des Add-Ins als Teil des Genehmigungsprozesses testen können, müssen Einleitung, Links zu Ressourcen und Videos zur Demonstration des Add-Ins zur Verfügung gestellt werden. Für den genauen Ablauf einer Veröffentlichung ist am besten die Dokumentation von Microsoft zu benutzen. [5]

Unternehmens-Add-In-Katalog

Für Aufgabenbereich- und Inhalts-Add-Ins können auch private Add-In-Kataloge bereitgestellt werden, um dieselbe Add-In-Kauferfahrung wie mit dem Office Store zu ermöglichen. Mit dem Add-In-Katalog sind die Veröffentlichung und die Verwaltung von intern erstellten Add-Ins möglich sowie von Add-Ins, die im Office Store verfügbar sind und im Unternehmen lizenziert sind. [3]

Um eine Veröffentlichung im Add-In-Katalog zu ermöglichen, muss dieser zuerst im Office 365 Admin Center erstellt werden. Dafür werden Administratorrechte für die ganze SharePoint-Subscription benötigt und es kann nur ein Add-In-Katalog für eine Subscription existieren. Um das Add-In zu veröffentlichen, muss die XML-Manifest Datei in den Add-In-Katalog hochgeladen werden. Nach dem Hochladen wird das Add-In im Add-In-Katalog installiert: War die Installation erfolgreich, werden der Add-In Typ, die ID und die Version angezeigt (siehe Abbildung 2). Fehlen diese Angaben, ist das Manifest fehlerhaft. [6] [7]

Abbildung 2 Blogserie 3 Office Add-In

Abbildung 2: Im Add-In Katalog veröffentlichtes Aufgabenbereich-Add-In

Fazit

Im Allgemeinen haben die Office Add-Ins den großen Vorteil, dass ein Add-In für mehrere Office-Anwendungen entwickelt werden kann. Es kann z.B. ein Add-In für Word, Word Online, Excel und Excel Online gleichzeitig entwickelt werden. Dieses Add-In wird nur einmal implementiert.

Für die Entwicklung bietet Napa die minimale Funktionalität an, um ein Office Add-In mit CSS, HTML und JavaScript-Dateien zu erstellen. Im Gegensatz zu Napa bietet Visual Studio viele Tools zur Entwicklung an. Das Webprojekt von dem Office Add-In Template kann problemlos gegen ein anders Webprojekt eingetauscht werden.

Bei der Entwicklung muss man besonders darauf achten, welche Objekte, Eigenschaften, Methoden und Events von den Office Anwendungen unterstützt werden. Denn wenn Word und Excel unterstützt werden, heißt es nicht, dass auch Word Online und Excel Online unterstützt werden.

[1] https://msdn.microsoft.com/DE-DE/library/office/fp179811.aspx

[2] https://msdn.microsoft.com/DE-DE/library/office/fp123515.aspx

[3] https://msdn.microsoft.com/de-de/library/office/jj220082.aspx

[4] https://msdn.microsoft.com/de-de/library/office/jj220037.aspx

[5] https://msdn.microsoft.com/de-de/library/office/jj220033.aspx

[6] https://msdn.microsoft.com/DE-DE/library/office/fp123530.aspx

[7] https://msdn.microsoft.com/DE-DE/library/office/fp123517.aspx

Stefan Henneken: IEC 61131-3: Coding Guidelines

The wish to raise the quality of a software is hardly much older than the software development itself. At the beginning, a set of rules should be determined which define software development guidelines, especially in major projects with multiple developers. Fortunately, PLCopen published recently a draft specifically for IEC 61131-3.

Most developers have already been in a situation in which they had to incorporate themselves in a program that they didn’t write. One realizes soon that every developer has his own programming style. These differences might complicate incorporation, so that it becomes much more time-consuming and error-prone. For this purpose, companies define very often own guidelines for the software development. In this way, the source code becomes cleaner and more homogeneous. Thus, it can easier be maintained, extended and tested. Moreover, new colleagues can be integrated faster into the development team.

Corresponding guidelines exist for such programming languages as Java, C++ or C# for a long time. These guidelines are usually acknowledged by the developers, or are even a mandatory component of a programming training.

The current PLCopen draft provides a cross-corporate set of rules specifically for IEC 61131-3, which takes account of a wide range of characteristics. Thus, points were included which make source code more portable. Especially machine-level programming (e.g., Pointer Arithmetic or permanent addresses) can make transfer to other control platform difficult or lead to program execution errors. Each rule has a unique identification. Examples explain the background of the respective rules in many cases.

At present, over 60 rules are defined, which are divided into 5 categories:

Naming Rules (N) Declaration of variables, tasks, function blocks, functions, data types and namespaces.
Comment Rules (C) Design guidelines on comments.
Coding Practice (CP) General coding guidelines.
Languages (L) Peculiarities of individual representation types of IEC 61131-3.
Vendor Specific Extensions (E) Extensions which do not belong to the IEC 61131-3 range.

The rules should be seen as a proposition and not as a requirement. These rules make also no claim to completeness. It could very well make sense not to observe certain rules or substitute them with further rules.

Personally, I would not approve unconditionally several rules. The rule L17 is one example I can mention. This one implies that IF statements should always have an ELSE block, even though it is empty.

I also noticed a (small) contradiction in two rules. The rule L10 prohibits the statements CONTINUE and EXIT. However, EXIT is used in the examples of the rules L12 and CP9.

Some points should be seen as an addition to IEC 61131-3. Thus, IEC 61131-3 does not address whether a counter variable of a FOR loop can be further used after the termination of the loop. The rule L13 states quite clearly here that the counter variable mustn’t be used further. Depending on the compiler implementation, the program behavior can be different.

I discovered quite a few new things while reading through the coding guidelines. The rule CP8 points to a peculiarity: the inaccuracies of floating-point numbers should be considered when comparing. Otherwise, program blocks can emerge, which are maintained only with difficulty. For example:

Picture01

Although, both variables have apparently the value 0.1, the condition is not fulfilled. The variable bResult is not set to TRUE. This is due to the different kind of imprecision of the data types REAL and LREAL. None of the both variables can represent the value exactly (only approximate values). These approximate values are just different. A simple example illustrates these imprecisions:

Picture04

100 * 0.1 doesn’t give, as expected, 10.0, but the values which are somewhat larger or lower.

That’s why the rule CP8 recommends to consider a range and not an exact comparison:

Picture02

But rather “inconvenient“ surprises can also occur, when comparing integers depending on the compiler implementation:

Picture03

The variables diValue and udiValue have different values at first sight. But both variables get the same values, because type conversion takes place when comparing, and the values have the same bit pattern. The condition is fulfilled, and bResult is set to TRUE. The current IEC 61131-3 compiler should recognize this and output a warning.

In my view, the coding guidelines are a great source of information both for beginners and experienced programmers. Development teams can use these as a basis for their own coding guidelines and extend them correspondingly, or exclude rules.

PLCopen announced further guidelines in the December 2015 newsletter. The following issues are planned:

  • documentation
  • OOP (object-oriented programming)
  • software development process
  • software quality

The current coding guidelines can be requested on the PLCopen website (www.PLCopen.org).

Who wants to delve deeper into the subject, I can recommend the following books:

Clean Code by Robert C. Martin

Code Complete by Steve McConnell

Both books relate more to Java, but are also applicable to IEC61131-3 in many fields.


codefest.at [MS]: BUILD 2016 Session Downloader

Die BUILD Conference brachte wieder viele interessante Sessions (einen Überblick über die Ankündigungen gibt es hier: Tag 1 und Tag 2). Diese können auf der Website https://channel9.msdn.com/Events/Build/2016 gesucht, gefiltert, angesehen und downgeloadet werden.

image

Für alle jene, die allerdings alle Sessions oder bestimmte Sessions zu einem Thema herunterladen möchten, gibt es ein hilfreiches PowerShell Download-Script. Unser lieber Kollege Bill Ayers, aka @SPDoctor, hat hierzu das folgende PowerShell Script geschrieben und gepostet:

SNAGHTMLe836115

Hier gehts zum Artikel und zum Script: Download the Build 2016 Content We Care About using PowerShell.

Das Script liest den BUILD Session RSS-Feed, filtert nach bestimmten Kategorien und speichert die gefundenen MP4-Videos in das aktuelle Verzeichnis.

# Channel 9 download script by @SPDoctor
$feedUrl = 'http://s.ch9.ms/Events/Build/2016/RSS'
$filters = @("*Microsoft Graph*", "*Azure AD*", "*SharePoint*", "*Office 365*")
$categories = @("office", "office-365")

Wer möchte, kann den $filters und $categories (Tags) Ausdruck anpassen oder wie hier leer lassen um alle Sessions zu laden.

$filters = @("*")
$categories = @("")

Besonders fein finde ich, dass die Filenames “canonicalized” werden und somit existierende Files erkannt (und nicht doppelt heruntergeladen) werden und dass das Script den Filename durch den hübschen <title> ersetzt.

image

Derzeit wird das erste MP4-File aus dem Feed geladen, die folgende Grafik zeigt die verfügbaren Media Files aus dem RSS-Feed. Wer will kann das Script noch anpassen und die gefundenen Filenames nach "*high.mp4" filtern oder weiter modifizieren…

image

Die Ausführung des Scripts dauert dann, je nach Bandbreite.

Bill, thanks for the useful PowerShell-Script!

Viel Spaß mit den BUILD-Sessions!

friends header

bloggers headline

links header

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