.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv Februar 2014

Fast ein Loblied auf das Visual Studio und .NET

25.02.2014 23:59:00 | Jürgen Gutsch

Meine .NET-Infrastruktur wird immer besser. Das ist ein subjektiver Eindruck. Aber der zählt wenn es darum geht, sich bei der Arbeit mit .NET besser zu fühlen.

Ich arbeite jetzt seit 12 Jahren produktiv mit .NET (hauptsächlich mit ASP.NET) und habe mich dabei schon immer recht sehr wohl gefühlt. Das Visual Studio hat sich mit jeder Version verbessert, .NET und C# wurde mit jeder Version um gute Features erweitert. Mal abgesehen von monströsen und unhandlichen Frameworks wie das Entity Framework, WCF und ähnliche. Selbst ASP.NET ist mit ASP.NET AJAX und den ASP.NET WebParts in eine Richtung gegangen, die sich wie eine mit Unrat gefüllte Sackgasse angefühlt hat.

Microsoft hat sich aber inzwischen (seit einigen Jahren schon) soweit geöffnet, dass .NET nicht nur auf Microsoft und nicht nur auf C# und VB.NET beschränkt ist, nicht einmal auf das Visual Studio, oder gar auf das .NET selber. (Daran ist die Entwickler Community rund um .NET und Microsoft nicht ganz unschuldig.) Das hat zur Folge dass die Entwicklungsinfrastruktur immer flexibler und agiler wird.

Ich habe seit einiger Zeit die Möglichkeit, die Entwicklungsumgebung so anzupassen, dass ich gefühlt angenehmer und schneller arbeiten kann.

Hier sind ein paar Punkte die meine und dir mir (persönlich) helfen produktiver zu sein

  • GIT oder Mercurial, statt TFS
    • GIT inzwischen im Visual Studio, im TFS und auf Azure integriert
  • FAKE, statt MSBuild
  • Trello oder Jira, statt TFS
  • Jenkins, statt TFS
  • Node.js innerhalb von Visual Studio
    • Nutzung von .NET aus Node.js heraus
  • NuGet zur Verwaltung und Verteilung von Bibliotheken
  • NUnit, statt MSTest
  • ReSharper, Web Essentials, NChrunch, uvm…
  • (Fast) direkte Nutzung von Java-Bibliotheken im .NET
    • und andersrum

Auf der Agile Bodensee 2013 durfte ich vorstellen, wie diese Entwicklungsinfrastruktur mir hilft, in meinen Projekten agil zu arbeiten und den Kunden / Produkt Owner aktiv am Prozess teilhaben zu lassen.

Aber das ist nicht der einzige Punkt: Ich bin schneller geworden. Dank der GIT-Integration in Azure muss ich keine manuellen Deploys mehr machen und muss nicht einmal einen Build-Server bemühen. Ein Commit in den Hauptzweig im GIT genügt und einige Minuten später ist die Website aktualisiert.

Dank FAKE muss ich keine mühsamen Hacks mit MSBuild mehr machen und kann bequem mit .NET meinen Build konfigurieren. Jenkins wird fast zu einem Scheduler reduziert der nur noch sehr übersichtliche Build-Jobs enthält.

Jenkins hat nicht die schönste UI, funktioniert aber immer, unkompliziert und auf Anhieb.

Trello funktioniert einfach für fast jeden Prozess und muss nicht umständlich konfiguriert werden. Ist intuitiv und muss einer dritten Person nicht umständlich erklärt werden.

NuGet hilft mir Fremdanbieter-Bibliotheken, Bibliotheken von Microsoft oder auch eigene Bibliotheken schnell einzubinden oder zu aktualisieren.

Vorsicht bei der Benutzung NuGet. Die Aktualisierung von Bibliotheken sollte nicht automatisiert geschehen, sondern immer ein manueller Vorgang sein. Externe Bibliotheken gehören in die Quellcode Verwaltung, damit jeder auf Anhieb alles zur Verfügung hat, was er benötigt, auch ein Build-Server sollte nie fehlschlagen, weil zu aktuelle Bibliotheken Compiler-Fehler verursachen. Auf diese Art wird auch vermieden, dass mehrere Leute und der Build-Server mit verschiedenen Versionen der externen Bibliotheken arbeiten. Das spart Zeit und Nerven. Das Updaten einer externen Komponente muss ein expliziter, manueller und bewusster Vorgang sein.

Und der TFS?

Der TFS ist immer noch klasse :-) (siehe hier) Allerdings nicht für mich persönlich und aus meiner Sicht, nicht für Unternehmen die viele kleine und schnelle Projekte managen müssen. Aber auch der TFS ist besser geworden, aber aus meiner Sicht immer noch nicht Agil genug.

Flexibel ist der TFS, was in auf eine gewisse Art auch Agil macht. Allerdings in etwa so Agil wie ein Radlader in einer Kiesgrube. Das ist auf keinen Fall zu negativ gemeint: Eine Kiesgrube ist ein längerfristiges Projekt, in dem der Radlader das perfekte Fahrzeug und Arbeitswerkzeug ist und sich dort auch sehr Agil fortbewegen kann. Im schnellen Straßenverkehr wirkt der Radlader allerdings schwerfällig und träge.

Letztes Jahr hat ein großer Kunde, für ein kleines Projekt, den TFS vorgegeben, weil er In-Hause immer den TFS nutzt (Aus meiner Sicht kein echter Grund, aber wenn er das so möchte…) Kein Problem für mich, wenn ich dem TFS sagen kann dass er GIT nutzen soll. So habe ich GIT Verwendet und der Kunde hat mit dem gewohnten TFS gearbeitet. Gut für beide Seiten :-)

.NET macht nun auch richtig Spaß

Weit ASP.NET MVC und seit MS weitere Open Source Komponenten direkt integriert. und vor allem seit ich selber ohne großen Aufwand weitere Open Source Komponenten integrieren und nutzen kann, macht die Arbeit mit .NET und allem was drum herum entstanden ist richtig Spaß. Das beschränkt sich nicht nur auf MVC sondern ebenso auf WPF, WinRT und Windows Phone mit seiner offenen und flexiblen XAML-Technologie.

Die Integration von Komponenten und die Nutzung von Werkzeugen, die ich für richtig und produktiv halte, ist absolut kein Problem mehr.

Es gibt sicher noch einige Punkte die man verbessern kann, aber ich bin sicher, dass Microsoft mit zukünftigen Versionen vom Visual Studio und von .NET weiter in diese Richtung gehen wird. Und die nächsten Versionen wieder ein bisschen besser, offener und flexibler werden.

Windows Azure Provider für den SimpleObjectStore

25.02.2014 00:01:00 | Jürgen Gutsch

In den letzten Wochen hatte ich für ein kleines Projekt die Anforderung einfache Informationen im Azure Table Storage abzulegen. Aus diesem Grund habe ich zwei Provider für den SimpleObjectStore geschrieben, die den Zugriff auf den Windows Azure Store ermöglichen.

Table Storage Provider

Der Table Storage Provider legt die Entities in Azures NoSQL Datenbank ab. Der Table Storage hat den Vorteil, dass er recht schnell und für große Datenmengen sogar recht günstig ist.

Im letzten Jahr haben wir ein recht großes Projekt erfolgreich mit dem Table Storage umgesetzt und waren hoch zufrieden.

Die einzelnen Entities werden nach JSON serialisiert und in ein universales SosTableEntity gespeichert. Dieses wird dann nach Azure publiziert. Das Table Entity sieht somit immer gleich aus.

Warum dieser Umweg?

Der Azure Table Storage benötigt drei Eigenschaften, die ich unter Umständen nicht in meinen Daten-Objekten haben möchte, die oder unnötigen Overhead bedeuten könnten. Aus diesem Grund nimmt dieses TableEntity das eigentliche Entity auf. Da Der Table Storage keine komplexen Typen verarbeiten kann wird das Entity zusätzlich nach JSON serialisiert.

Beim Query auf die Daten müssen die JSON-daten nun aus dem TableEntity ausgelesen werden und wieder in ein konkretes Entity deserialisiert werden. Was sich nach Performanceeinbuße anhört ist nicht wirklich erwähnenswert. Sind die Daten einmal aus Azure geladen und im Speicher des Provider ist die deserialisierug mit Json.Net enorm schnell, so dass Performanceeinbußen erst bei mehreren hundert Datensätzen bemerkbar sind. Sollte sich das dennoch einmal als Problem herausstellen, kann der Provider so umgebaut werden, dass erst der komplette JSON-String zusammengebaut wird und erst am Ende der gesamte String deserialisiert wird. Dazu müssen noch Performancetests gemacht werden.

Die Azure Storage Client Bibliotheken die von Microsoft per NuGet ausgeliefert werden, bringen mit dem TableEntity eine Basisklasse für alle Objekte mit, die im Azure Table Storage abgelegt werden sollen. Diese Basisklasse bring alle benötigten Eigenschaften mit. Dabei ist zu beachten, dass der PartitionKey und der RowKey immer angegeben werden müssen. Da das Objekt sonst nicht gespeichert werden kann. Der Timestamp wird automatisch gesetzt.

Im oben genannten großen Projekt mit ist das ebenso gelöst. Hier war unter anderem Das CQRS-Pattern im Einsatz, das für den Event-Stream enorme Datenmengen erzeugt. Auch hier waren keine groben Performanceeinbußen festzustellen, obwohl permanent auf den Event-Stream zugergriffen wurde.

Aktuell ist dieser Provider schon mit dem jetzigem Stand erfolgreich im Einsatz und wird in wenigen Wochen für die Website eines Freundes produktiv gehen.

Ablage im Table Storage

Objekte die im Table Storage abgelegt werden, müssen zwingend folgende Eigenschaften haben:

string PartitionKey {get; set;}

Enthält in meinem Fall den Typ des zu speichernden Entities. Auf diese Art wird jeder Entity-Typ auf verschiedene Partitionen aufgeteilt und identische Entity-Typen bleiben in der gleichen Partition. Das hat unter umständen Performancevorteile innerhalb der Abfrage auf den gleichen Typ. Zudem kann Microsoft im Rechencenter mehrere verschiedene Partitionen Physikalisch verteilen. Eine Partition wird dagegen niemals auseinandergenommen und aufgeteilt. Die Angabe des PartitionKeys beim auslesen der Daten sorgt also für einen weiteren Performanceschub.

string RowKey {get; set;}

Enthält den Identifier des Datensatzes im Table Storage. Der Provider ermittelt aus allen Identifier Properties des zu speichernden Entities einen RowKey und nutzt diesen an dieser Stelle

DateTime Timestamp {get; set;}

Der Timestamp wird vom Table Storage automatisch gesetzt und entspricht in unserem Fall den Speicher-datum.

Blob Storage Provider

Für die Migration bestehender Anwendungen die den SimpleObjectStore verwenden, habe ich parallel einen Provider geschrieben der auf den Azure Blob zugreift. Auf diese Art lassen sich vorhandene Datendateien bequem wiederverwenden, indem diese einfach nur in den Blob Storage geladen werden.

Die einzigen zwei Nachteile am bisherigen Stand des Blob Storage Providers ist, dass der Blob Container Public sein muss und der Containername “objectstore” heißen muss.

Ersteres ist eine Einstellungssache die noch ausgiebig getestet wurden muss. Trotz korrekten Credentials oder korrektem Connection String ist der Zugriff auf einen geschützten Store noch nicht möglich. Dem werde ich noch nachgehen. Für den Zweiten Punkt muss die Instanziierung des Provider erweitert werden, damit ein Container-Name übergeben werden kann.

Ein entsprechendes Update wird es in den nächsten Tagen geben.

NuGet

Auch diese Bibliothek ist bereits unter NuGet bereits zu finden:

PM> Install-Package Gos.SimpleObjectStore.AzureProvider

Interessanterweise ist sie schon über 10 Mal heruntergeladen obwohl ich es noch nicht wirklich kommuniziert habe :-)

Feedback needed

An den Downlads auf NuGet.org sehe ich, dass die Bibliotheken nicht nur von mir heruntergeladen und genutzt werden. Daher rufe ich hier auch auf, Feedback zu geben.

Kontaktiert mich auf allen angegebenen Kanälen um mir mitzuteilen ob die Bibliotheken so in Ordnung sind, oder wo und was ich optimieren sollte. Vielleicht sollte ich es auch ganz sein lassen? ;-) Auf jeden Fall würde ich gerne wissen, was ihr davon haltet :-)

Wer möchte darf sich auch gerne selber dran machen eigene Provider zu schreiben und hier zu Contributen. z. B. könnte ich mir einen SharePoint Provider vorstellen, Excel oder CSV Provider oder Provider auf andere Cloud basierte Datenbanken.

Ich selber nutzt die Bibliotheken überall in kleinen unkritischen Projekte und in Demos und Testanwendungen. Warum soll ich auch dort umständliche Konfigurationen machen, wen ich den SimpleObjectStore schnell eingebunden habe und sofort nutzen kann?

Binärdaten im Azure Blob Storage ablegen und laden

24.02.2014 00:15:00 | Jürgen Gutsch

Für eine kleine Bildergalerie, die als Azure Website gehostet werden soll, sollen die Bilder in den Azure Blob Storage abgelegt werden. Das macht Sinn, zumal man später die Bilder per CDN verteilen könnte und so den Weltweiten Zugriff optimieren könnte.

In diesem Fall werden die Bilder aber in die Website geholt und dort nochmals bearbeitet Die Bildgröße wird verändert und die geänderten Dateien werden dann lokal in der Azure Website zwischengespeichert. Das ist unkritisch. Sind die geänderten Dateien weg, werden sie einfach neu erstellt. Ich verlagere hier den Traffic vom Blob Storage auf die Website. Langfristig und mit steigendem Traffic muss geprüft werden, ob der Traffic der Azure Website günstiger ist oder der des Blob Storages. Wenn letzteres Der Fall ist, müssen die geänderten Dateien im Blob Storage abgelegt werden und auch von dort geladen werden.

Download

Wie aber bekomme ich die Dateien aus dem Storage? Danke der Windows Azure Storage Bibliotheken, die von Microsoft per NuGet verteilt werden, ist das recht einfach. Zuerst benötige eine zentrale Klasse, die mir den Zugang zum Azure Storage bereitstellt:

public class AzureStorageAccount : IAzureStorageAccount
{
    private readonly CloudStorageAccount _storageAccount;

    public AzureStorageAccount()
    {
        _storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
    }

    public CloudBlobClient BlobClient
    {
        get
        {
            return _storageAccount.CreateCloudBlobClient();
        }
    }
}

Diese zentrale Klasse könnte mir zum Beispiel noch weitere Clients zum Table Storage oder Queue bereitstellen.

Eine weitere zentrale Klasse kapselt den Zugriff auf den Blob Storage:

public class BinaryRepository : IBinaryRepository
{
    private readonly IAzureStorageAccount _storageAccount;

    public BinaryRepository(IAzureStorageAccount storageAccount)
    {
        _storageAccount = storageAccount;
    }

    private string GalleryBlobContainerName
    {
        get { return CloudConfigurationManager.GetSetting("GalleryBlobContainerName"); }
    }

    public void LoadGalleryImage(Stream stream, string imageName)
    {
        LoadImageToStreamAsync(stream, imageName, GalleryBlobContainerName);
    }

    private void LoadImageToStream(Stream stream, string imageName, string containerName)
    {
        var blockBlob = CloudBlockBlob(imageName, containerName);

        blockBlob.DownloadToStream(stream);
    }

    private CloudBlockBlob CloudBlockBlob(string imageName, string containerName)
    {
        var container = _storageAccount.BlobClient.GetContainerReference(containerName);
        container.CreateIfNotExists();

        return container.GetBlockBlobReference(imageName);
    }
}

Der entsprechende Blob Container Name des Blob Store wird aus den AppSettings geladen, mit dem dann eine eine sog. Container Referenz erzeugt wird. für den Fall dass der Container nicht existiert, wird dieser neu angelegt. Anschließend wird mit dem Container eine BlockBlobReference erzeugt, also eine Referenz auf das entsprechende Blob, Das passiert direkt mit dem Namen des Blobs, in unserem Fall der Bildname. Die Methode LoadImageToStream lädt den Blob in einen Stream, den ich dann weiterverwende. Alternativ könnte der Blob auch direkt in eine Datei gespeichert werden, entweder per Dateipfad oder per FileStream.

In diesem Fall ist der Stream ein MemoryStream, den ich dann an die Bildbearbeitung weitergebe:

var imageName = “myImageToLoad.jpg”;
using (var stream = new MemoryStream())
{
    _binaryRepository.LoadGalleryImage(stream, imageName);
   
    // weitere Verarbeitung des Streams
}

Upload

Der Upload in den Blob Storage erfolgt in der selben Klasse mit folgenden Methoden:

public void UploadGalleryImage(Stream stream, string imageName)
{
    UploadImageFromStream(stream, imageName, GalleryBlobContainerName);
}

private void UploadImageFromStream(Stream stream, string imageName, string containerName)
{
    var blockBlob = CloudBlockBlob(imageName, containerName);

    blockBlob.UploadFromStream(stream);
}

Hier wird das Bild über per Stream über die Methode UploadFromStream an die BlockBlobReferenz übergeben. Der eigentliche Upload passiert dann in der Windows Azure Storage Bibliothek.

Die Upload Methode benutze ich dann so:

var imageName = “myImageToSave.jpg”;
using (var stream = uploadedFile.GetStream())
{
    _binaryRepository.UploadGalleryImage(stream, imageName);
}

ProFTPD - Creating a User

23.02.2014 07:16:00 | Andreas Mehl

If you want to create a new user for ProFTPD, just one uses the system user. 

In order for the new FTP user not by the whole server "browsed", a small adjustment in the configuration is needed, how it works will be explained in detail in this article. 

 

First, we create a new system user with useradd. We could also use adduser, but is not so easily controlled. 

Our syntax for useradd is:

useradd username -d folder

useradd John -d /var/www/john

 

Now we give him a password:

 

passwd John

 

This allows the user John /var/www/john remains in its directory. We write the following in the configuration file /etc/proftpd/proftpd.conf:

 

defaultroot ~

 

After saving ProFTPD should be restarted:

 

/etc/init.d/proftpd restart

 

Now John should come in via FTP ...

Xaml: ViewModel für die Designzeit

17.02.2014 20:22:20 | Hendrik Loesch

Wenn es etwas gibt, dass ich bei der Nutzung von Xaml besonders mag, dann ist es die strikte Trennung zwischen Logik und Darstellung. Alles was zur Darstellung gehört, wird in Xaml geschrieben, die Logik wiederum findet sich im testbaren ViewModel. Dies erlaubt eine einfache Trennung der Verantwortlichkeiten und eine Parallelisierung der Arbeit, weil Designer und […]

DNUG Braunschweig: Domain Specific Languages (DSL) und Produktkonfiguration

17.02.2014 01:34:00 | Lars Keller

Die DNUG Braunschweig trifft sich am 18.02.2014 um 19:00 im Restaurant Zucker (Tagungsraum). Dieses Mal hält unser Mitglied Uwe Lesta einen Vortrag über Domain Specific Languages (DSL) und Produktkonfiguration.

Abstract:
Dieser Vortrag richtet sich an Entwickler und Architekten die ähnliche oder sich wiederholende Aufgaben schneller und korrekter lösen wollen. Es werden einige (Programmier-) Sprachen mit ihren Anwendungsdomänen sowie deren Codegenerierung bzw. Ausführung vorgestellt. Des Weiteren wird das Microsoft Visualization and Modeling SDK (DSL Tools) vorgestellt um eigene (grafische) DSL zu entwickeln. Im zweiten Teil des Vortrags wird die Konfiguration von Produktlinien dargestellt. An Hand eines Softwaresystems zur Erstellung von Produktkonfiguratoren wird die Verwendung der vorgestellten Sprachen und Werkzeuge demonstriert.

Uwe Lesta entwickelt seit 1992 regel- und constraintbasierte Produktkonfiguratoren mit C / C++ und Prolog, seit 2001 im Visual Studio zusammen mit C# und dem .Net Framework um Web-Applikationen zu erstellen. Als Mitgesellschafter der SBS-Softwaresysteme GmbH ist er verantwortlich für die Bereiche Produktkonfiguration, Datenbanken und neue Technologien, sowie Microsoft Certified Professional für den SQL-Server.

Wie immer ist die Veranstaltung kostenlos!
Weitere Informationen zur DNUG Braunschweig können hier gefunden werden: http://www.dotnet-braunschweig.de

Hier bin ich raus und nun woanders

16.02.2014 12:33:18 | Albert Weinert

Kurze Info, hier passierte ja kaum noch was. Und nun geht neu und frisch ans Werk unter

http://blog.der-albert.com/
Mehr unter Wieder da ... mal wieder?

Update - TFS Work Item Tags

14.02.2014 12:21:48 | Christian Binder

TFS Work Item Tags sind eine einfache Möglichkeit, dynamisch Attribute an Work Items zu knüpfen. Hierbei besteht nicht Notwendigkeit die Prozessvorlage oder andere Konfigurationseinstellungen im TFS vorzunehmen. Aus meiner Sicht ein echter Mehrwert, um einfache Filter zu realisieren, ohne gleich eine neues Feld in einem Work Item Typ anzulegen, welches vielleicht nur temporäre Verwendung findet. Das Hinzufügen von Tags erfolgt direkt im Work Item. Neue Tags werden automatisch angelegt, sofern der Nutzer über die entsprechende Berechtigung verfügt.

image

Diese Tags können nun z.B. als Filter im Backlog verwendet werden.

image

Aktuell schon auf Visual Studio Online verfügbar, ist Möglichkeit diese Tags auch in Work Item Queries zu verwenden.

image

Die Query kann dann auch recht einfach auf der Team Homepage bereitgestellt werden

image

Nicht mehr verwendete Tags werden durch den TFS gelöscht. Wer darf neue Tags erstellen, um unkontrolliertes Wachstum zu vermeiden? Wie schon Anfangs erwähnt, haben wir eine neue Berechtigung zu diesem Zweck eingeführt -  Create tag defintion. Auf diese Weise kann man recht einfach den Nutzerkreis definieren, der neue Tags hinzufügen darf und der ganzen Dynamik etwas Struktur geben.

image

Viel Spass mit den Tags

Chris

HTML5: Beliebige Polygone zeichnen mit Canvas

12.02.2014 00:00:00 | Jürgen Gutsch

Wer beliebige Polygone auf einem HTML5 Canvas zeichnen muss kann das mit folgender funkction recht einfach lösen:

function polygon(context, x, y, radius, sides, anticlockwise) {
    if (sides < 3) return;
    var a = (Math.PI * 2) / sides;
    a = anticlockwise ? -a : a;

    context.translate(x, y);
    context.moveTo(radius, 0);
    for (var i = 1; i < sides; i++) {
        context.lineTo(radius * Math.cos(a * i), radius * Math.sin(a * i));
    }
    context.closePath();
    context.fillStyle = 'red';
    context.fill();
    context.translate(x * -1, y * -1);
    context.lineWidth = 5;
    context.strokeStyle = 'black';
    context.stroke();
}

Die Funktion nimmt den Canvas-Kontext entgegen, sowie den Zeichen Mittelpunkt (x, y), den Radius, die Anzahl der Seiten und die Zeichenrichtung. Sie berechnet zuerst die Länge der Teilstrecken. Im nächsten Schritt wird der Startpunkt des Canvas (0,0) mit translate() verschoben, was die Berechnung der Koordinaten etwas vereinfacht. Anschließend Finder der Zeichenvorgang statt. Der 0-Punkt muss mit einem weiteren translate() mit negativen Werten wieder zurückgesetzt werden, damit Folgezeichnungen wie gewohnt machbar sind.

Die Funktion wird dann wie folgt aufgerufen:

function drawHexagon() {
    var canvas = document.getElementById('previewCanvas');
    var context = canvas.getContext('2d');

    var centerX = canvas.width / 2;
    var centerY = canvas.height / 2;
    var radius = 150;

    polygon(context, centerX, centerY, radius, 6, false);
}

Das Canvas selber ist recht unspektakulär:

<canvas id="previewCanvas" width="400" height="400" style="border:1px solid lightgray;">    </canvas>

Zweiter Frühling für Commodore C128D

11.02.2014 23:14:00 | Daniel Springwald

Nach 30 Jahren kann ein Computer ja schon mal etwas unansehnlich aussehen. Aber das muss nicht sein Laughing

Ein Commodore C=128D ist ja mit seinem Metall-Gehäuse eher unverwüstlich - da lohnt sich schon eine keine Aufarbeitung.

Vor der Reinigung sieht er (und ins Besondere die Tastatur) schon recht oll aus:

Also alle Tasten entfernt und ab ins Ultraschall-Bad:

Die Tasten haben es aber auch wirklich nötig:

Auch zwischen den Tasten sieht es nach über 30 Jahren recht "flauschig" aus:

Aber da kann CyberClean echte Wunder bewirken:

Parallel dazu konnte ich dem Computer- und Tastatur-Gehäuse mit Hilfe von Kunststoff-Reiniger wieder einen "jugendlichen Glanz" verschaffen.

Am Ende sieht selbst ein Computer aus den 80ern inklusive seiner Tastatur fast aus wie neu:

Was macht Azure in Sotschi?

11.02.2014 17:20:35 | Mathias Gronau

Für die einen ist es das größte Sportereignis des Jahres, für die anderen die längste Werbesendung der Welt. Unabhängig davon, wie Sie das sehen, eines steht fest: Fernsehzuschauer weltweit verfolgen seit Freitag die Winterspiele in Sotschi. Für die internationalen TV-Sender gehört die Live-Berichterstattung aus Russland zu den größten logistischen und technologischen Herausforderungen des Jahres: Kälte, Eis und Distanz machen es den Bildjournalisten im Kaukasus nicht leicht. Fernab des russischen Winters erwarten wir per Tablet im warmen Wohnzimmer oder unterwegs im Zug mit dem Smartphone On-Demand Streams in 1A Qualität.Für eine ständige Verfügbarkeit über das Web setzt NBC Olympics, eine Sparte der NBC Sports Group, erstmals auf Windows Azure. Auf Basis der Microsoft Cloud Plattform und in enger Zusammenarbeit mit Partnern wie Adobe und iStreamPlanet produziert der US-amerikanische Fernsehsender sowohl Livebeiträge als auch OnDemand Material. Auch zu Spitzenzeiten und im Medaillenregen ist so ein reibungsloses end-to-end Streaming der Inhalte über die Cloud gesichert.Hat sich NBC Olymics von den deutschen GrundyUFA Kollegen beraten lassen? Der Schluss liegt nahe, denn auch in Deutschland kommt Windows Azure bei TV-Produktionen zum Einsatz. Seit 2011 vertraut GrundyUFA, Marktführer im Segment lang laufender Serien, bei ihren Produktionen auf das Cloud-basierte Content Collaboration System ScreenerONE. Eine Applikation, die die Bertelsmann-Tochter arvato gemeinsam mit GrundyUFA und Microsoft Partnern entwickelt hat. Auf Basis der Microsoft Cloud Windows Azure wird ScreenerONE seit 2012 auch als unternehmensweite Lösung bei den Produktionen “Verbotene Liebe”, “Gute Zeiten, schlechte Zeiten”, “Alles was zählt” und “Unter Uns” genutzt, die täglich für ein Millionenpublikum produziert werden. Innerhalb von 24 Stunden nach Dreh müssen alle inhaltlichen Abstimmungen erfolgt sein, unabhängig wo gedreht wird und wo die Ansprechpartner sitzen. Da der GrundyUFA Workflow in der Microsoft Cloud vollkommen datenträgerfrei ist, führt er zu wichtigen Einsparpotenzialen. So verringerte sich beispielsweise beim Mallorca-Dreh der “Verbotene Liebe” der Transportaufwand für Film- und Datenmaterial auf der Insel und von der Balearen-Insel nach Deutschland deutlich.Stephan Pepersack, Product Marketing Manager Windows Azure bei Microsoft Deutschland: “Die Medienbranche, wie keine andere, hat das Potential von Cloud Computing erkannt und setzt in Deutschland wie international auf Microsoft als Partner. Durch die veränderte Mediennutzung greifen immer mehr Menschen auf On-Demand TV-Inhalte im Internet zu. In Kombination mit Berichterstattungen als Live-Stream sind TV-Produktionsfirmen auf hochverfügbare Cloud Plattformen angewiesen, die auch extrem hohe Zugriffszahlen flexibel abfedern können.”

Hautcreme für Schrauber und Bastler

09.02.2014 21:25:00 | Daniel Springwald

Und nun zu etwas ganz anderem ;-)

Durch eine glückliche Fügung des Schicksals habe ich eine Teststellung eines Produktes in die Finger bekommen, welches in Deutschland aktuell offenbar noch gar nicht erhältlich ist. Es handelt sich dabei um die Reparatur-Hautcreme „Eucerin Aquaphor“, welche besonders effektiv Kratzer und dergleichen beheben soll.  Beim Werken und Basteln kommt es ja selbst bei entsprechenden Sicherheitsmaßnahmen dennoch gern mal zu solchen kleinen Beeinträchtigungen der Haut – also eigentlich ganz passend für meinen Bastel-Blog.

Und ein Glück kommt selten allein: Statt mir für entsprechende Tests mit dem Lasercutter Haut wegbrennen zu müssen oder die Hand in den laufenden 3D-Drucker zu stecken, stellte sich eine kleine Test-Verletzung ganz von allein ein. Und – als wäre das nicht schon Glück genug – nicht einmal an meiner Hand, sondern an Nicoles ;-)

Optimal wären natürlich zwei ähnliche Verletzungen zum Vergleich "mit Creme" vs. "ohne Creme" gewesen - aber man kann ja nicht alles habe ;-)

Es konnte also losgehen.

Der erste Eindruck der Creme war, dass die betroffene Hautstelle nach dem Auftragen zunächst etwas brennt. Das ging aber wohl recht schnell vorbei.

Im Vergleich zu einer normalen Handcreme zieht die Creme eher wenig ein. Stattdessen fühlt es sich etwas ölig an – vielleicht vergleichbar damit, als hätte man man die Haut mit einem Massageöl eingerieben. Selbst nach einigen Minuten bleibt dieser Effekt bestehen -  gut zu sehen, wenn man sich selbst z.B. auf dem Ledersofa abstützt:

In den nächsten Tagen erholte sich die Haut dann schon sehr gut.

Nach drei Tagen war von der Beeinträchtigung nichts mehr zu sehen.

Wunderheilung der betroffenen Hautstellen innerhalb von Minuten kann die Creme also natürlich nicht leisten. Rein subjektiv scheint die Regeneration der Haut aber besser zu funktionieren, als ohne diese Creme. Ohne Vergleichsverletzung ist es aber natürlich schwer, objektiv zu bestimmen, ob der Schaden ohne langsamer verheilt wäre.

C# 6 – Neue Sprachfeatures

07.02.2014 02:30:00 | Jürgen Gutsch

Rein zufällig bin ich heute über ein paar neue Sprachfeatures der kommenden C# 6 Version gestolpert. Über die Sinnhaftigkeit und Lesbarkeit einiger Features kann man sicher streiten, aber dennoch sehen die Features mal recht interessant aus.

Folgender Blog-Artikel von Damien Guard zeigt die Features mit ausführlichen Beispielen:
http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated

Ich persönlich halte in dieser Auflistung nur die Params for enumerables, die Inline declarations for out params für wirklich sinnvoll. Alle weiteren Feature dienen aus meiner Sicht nicht gerade der Lesbarkeit des Codes.

Params for enumerables

Params müssen nicht mehr ausschließlich als Array definiert sein, sondern können nun auch vom Typ IEnumerable<T>:

public void mein(param IEnumerable<string> arguments)
{

}

Inline declarations for out params

Deses Feature vereinfacht die Schreibweise von z. B. by Try-Methoden etwas:

public bool IsNumeric(string possibleNumber)
{
  return Int64.TryParse(possibleNumber, out int number);
}

Ein im erwähnten Artikel nicht gezeigtes Feature, hat Christian Nagel in seinem Blog erwähnt, und zwar handelt es sich um Exception Filter, wie es sie in VB.NET bereits gibt. Das wäre ebenfalls eine nützliche Neuerung.

Warum sollten sich IT Professionals für ALM interessieren?

06.02.2014 09:27:02 | Christian Binder

Application LifeCycle Management entwickelt sich weiter. In vielen IT Unternehmen ist der Betrieb und die Entwicklung von Software organisatorisch und inhaltlich klar getrennt. Die Übergabe der Software in den Betrieb wird nicht selten durch einen formalen und manchmal auch schwergewichtigem Abnahme Prozess definiert. Der Grund hierfür ist einfach – Selbstschutz oder die Idee, nur fehlerfreie Software in den Betrieb zu übernehmen. Denn einmal im Betrieb angekommen, übernimmt man auch die Verantwortung. Treten dann doch Probleme auf, kann sich die Kommunikation mit der Entwicklung zur Lösung des Problems manchmal herausfordernd gestallten. 

Nun ändert sich die Entwicklung hin zu kürzeren Produktzyklen, um so flexibler auf Kundenwünsche und Innovationen reagieren zu können. Kürzere Zyklen bedeuten auch, das betriebswirtschaftliche Risiko zu minimieren. Für den Betrieb entsteht so die Notwenigkeit in kürzeren Abständen Deployments durchzuführen. Der oben skizierte Abnahme Prozess ist aber genau für dieses Szenario meist nicht optimiert und Probleme sind vorprogrammiert. Ein Lösungsansatz ist, den Betrieb enger an die Entwicklung zu koppeln. Aus Operations wird Developer Operations kurz DevOps.

Funktional ist DevOps: Deployment. Monitoring und Telemetrie. Monitoring und Telemetrie erlauben eine schnelle Identifikation von Problemen. Ein integriertes Fehler Reporting ermöglicht es, Fehler schneller und zeitnah in die Entwicklung zu kommunizieren und so beheben zu können. Idealerweise sollte ein Problem erkannt werden, bevor Nutzer es bemerken. Quasi wie beim Automotorsport, wo man schon Runden vorher absehen kann, dass ein Auto liegen bleiben wird. Entwickler und IT Professionals rücken auf diese Weise enger zusammen, mit dem gemeinsamen Ziel einer stabilen aber auch agilen Anwendungsplattform.

IT Professionals, die Interesse an DevOps und kürzeren Zyklen in der Entwicklung haben, sollten einen Blick auf die Agenda der ALM Days werfen. Dort gibt es dedizierte Vorträge zu Enterprise DevOps, Release Management und zum Thema Cloud Cadence direkt aus der Microsoft Produkt Entwicklung. Warum nicht ein Blick über den Zaun wagen?  

Zudem finden alle IT Professionals, die eine Team Foundation Server Infrastruktur betreiben, Vorträge zum Thema Upgrade der Infrastruktur und Deep Dives zu Anpassungen der Plattform.

Chris

SideWaffle – Visual Studio File Templates für die Web Entwicklung

05.02.2014 13:35:02 | Jürgen Gutsch

Logo: SideWaffle Mads Kristensen ist nicht nur der Kopf hinter den Visual Studio Web Essentials und nicht nur Produkt Manager für einige Teile des Visual Studios, sondern er steckt auch hinter einer umfangreichen Bibliothek von Visual Studio File Templates, genannt SideWaffle

SideWaffle wird über den Visual Studio Extension Manager installiert. Nach der Installation erhält man eine ganze Menge nützlicher Templates die einem die Arbeit etwas erleichtern. z. B. erhält man die Templates für AngularJS Controller, für jQuery Plugins, RequireJS Files, Readme Markdown Dateien, Unterstützung für TypeScript, auch ein Template für NUnit basierte Unit-Tests und vieles mehr

Im Prinzip sind das alles Templates für gängige Tools und Techniken, die Microsoft nicht von Haus aus unterstützt.

Interessant ist die Herkunft der Templates. Mads hat hauptsächlich die Sammlung zusammengestellt. Die Templates selber stammen aber oftmals von John Papa, der sich nach seiner Silverlight Zeit bei Microsoft in der JavaScript-Welt mit der Unterstützung für KnockoutJS und AngularJS einen Namen gemacht hat.

SideWaffle ist Open Source und es steht jedem frei eigene Templates zu contributen. Z. B. könnte ich mir zusätzliche Templates für FAKE, MSpec, NHibernate, etc. vorstellen.

Visual Studio Web Essentials

05.02.2014 13:04:00 | Jürgen Gutsch

Logo: Visual Studio Web EssentialsViele Webentwickler werden die Visual Studio Erweiterung vom Mads Kristensen schon kennen. Aber wer immer noch meint Webtechnologien seien mit Visual Studio noch nicht gut genug unterstützt, der sollte sich die Visual Studio Web Essentials anschauen, die es für Visual Studio 2012, Visual Studio 2013 und unvollständig auch für Visual Studio 2010 gibt.

Seit Visual Studio 2012 ist die Unterstützung für HTML, CSS und JavaScript nochmal ein ganzes Stück besser geworden, als in den Versionen zuvor. Allerdings erweitern die Web Essentials das Visual Studio aber noch um einiges mehr:

So wird der Solution Explorer und der Editor mit Vorschauen für z. B. Bilder erweitert. Farbangaben im HTML und CSS werden im Editor direkt angezeigt. Weiterhin werden TypeScript, CoffeeScript, sowie LESS und demnächst auch SASS unterstützt. Ein Markdown-Editor wird integriert und vieles mehr.

Ich persönlich kann die Web Essentials nur empfehlen, auch wenn das Zusammenspiel von Visual Studio 2013, ReSharper und Web Essentials schon mal zu interessanten Konflikten führen kann. Nichts kritisches, nur empfehlen z. B. alle drei Werkzeuge teilweise jeweils andere Vendor Prefixes bei CSS3-Eigenschaften die von den jeweiligen Browserherstellern noch nicht voll implementiert sind. Je nachdem welches Tool die aktuellsten Infos über den Implementierungsstatus der Browserhersteller haben.

ALM Days 2014 - Smart Products und Microsoft Services

04.02.2014 13:30:13 | Christian Binder

Ein weiteres Highlight auf den ALM Days.

Clemens Vasters aus Windows Azure Produktgruppe in Redmond über seine Keynote Smart Products und Microsoft Services auf den ALM Days 2014 :

Auf nur 4 Quadratmillimetern lassen sich heute schon 32-bit Mikrocontroller unterbringen und diese können, passendes Volumen vorausgesetzt, für weit weniger als einen Euro pro Stück eingekauft werden. Es gibt Zigbee, WiFi, und andere RF Chips für einige wenige Euro und selbst komplette GSM (UMTS/LTE) Modemmodule sind für um die 20 Euro verbaubar. Auf der Hardwareseite werden mithin die passenden Voraussetzungen geschaffen, damit Geräte und Gegenstände des täglichen Lebens in kostengünstiger Form digital aufgewertet werden können, um beispielsweise eine Steuerung oder Überwachung per Smartphone oder einfachere und sogar vorausschauende Problemdiagnose und -behebung zu ermöglichen. Clemens Vasters erläutert den schnell wachsenden Bereich der „Smart Products“ und wie die Konvergenz von operationeller Technologie und Informationstechnologie auf beiden Seiten neue Möglichkeiten eröffnet, aber auch neue Herausforderungen mit sich bringt. Dabei dreht es sich explizit um ein das ganze Spektrum von Geräten, unabhängig von Betriebssystem und Plattform, inklusive Linux und Echtzeitsystemen, und darum, welche Rolle die Microsoft Services Plattform, mit Windows Azure als Grundlage, für skalierbare und sichere Gesamtlösungen spielen kann.

Windows 8.1 update - Store This app can’t open for Built-in Administrator account

02.02.2014 08:48:00 | Andreas Mehl

You might have encountered with this strange and annoying error.  This app can’t open for Built-in Administrator account please sign in with a different account and try again. or  while User Account Control is turned off. You need to turn on UAC  There is an easy solution for the error:

  • Press Windows key + R and in run dialog box type: "secpol.msc"
  • Go to Local Policies –> Security Options –> Scroll down and find "User Access Control: Admin Approval Mode For built in….."
  • Double click on it and select enabled and the press ok
  • Again hold windows key and R and type "regedit"
  • Go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\UIPI
  • And on the right hand side double click on default and change the value to "0×00000001(1)" and click ok
  • Restart your computer and Windows Store will be open and you can download and install Windows 8.1 Update.

DNUG Braunschweig: Windows 8 & Windows Phone 8 Hackathon

02.02.2014 05:30:00 | Lars Keller

Am 22.02.2014 von 10-20:00 Uhr veranstaltet die DNUG Braunschweig zusammen mit Microsoft Deutschland Ihren zweiten Windows 8 & Windows Phone 8 Hackathon!

Jeder ist herzlich eingeladen seine App-Idee alleine oder im Team vor Ort mit Unterstützung von Microsoft Mitarbeitern und einem/r Designer/in zu entwickeln. Für Essen und Getränke wird natürlich gesorgt und etwas zu gewinnen gibt es auch noch, z.B. ein Nokia Lumia Windows Phone.

Mitbringen müsst Ihr gute Laune, eine App-Idee und einen Laptop mit Windows 8 oder Windows 8.1 (je nach App-Fokus) und Visual Studio 2012 oder 2013. Letzteres können wir in einer geringen Anzahl auch stellen. Benötigt Ihr ein Gerät, dann meldet Euch nach der erfolgreichen Anmeldung einfach bei mir per E-Mail. (lars at lars-keller dot net)

Anmeldung und weitere Details unter
https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032576990&culture=de-DE

Wir freuen uns auf Euch! Happy Coding!

Office 365-Abo verlängern – Beschreibung einer Odyssee

01.02.2014 08:30:41 | Mathias Gronau

Normalerweise mag ich Microsoft und seine Produkte ja wirklich. Aber manchmal benimmt sich Microsoft so unmöglich, dass es mir kaum noch gelingen kann, zu glauben, dass da jemand nicht nachgedacht hat. Manchmal habe ich fast den Eindruck, da steckt Absicht hinter. Heute ist wieder einmal so ein Fall. Dass mein Office-Abo abläuft war mir klar. So weit kein Problem. Office hat mir das in den letzten zwei Wochen auch bei jedem Start angezeigt. So wurde mir in sehr holprigen angezeigt, dass ich mein Abo am 1. Februar verlängern müsse. Nicht bis zum 1. Februar, nicht spätestens am 1. Februar, sondern genau am 1. Februar. So weit so gut. Heute ist es so weit – der 1. Februar ist gekommen. Da ich derzeit bis zur Halskrause in Arbeit stecke bin ich heute schön früh aufgestanden und habe um 5 Uhr meinen Rechner gestartet. Outlook gestartet und die letzte Mail, die ich empfangen habe, war um 4:42 von Microsoft gekommen. Darin teilte mir das Unternehmen folgendes mit: This mail is confirmation that your subscription to Office 365 Home Premium has been cancelled on Saturday, February 01, 2014. If you need support, visit http://support.microsoft.com/contactus/ Thank you for using Microsoft Online Services. Microsoft Office Team Das um 18 Minuten vor 5 am Samstagmorgen zu machen ist schon nicht gar so elegant, aber OK. Also habe ich mich bei Office.com eingeloggt und begonnen, mein Abo zu verlängern. Das klappte auch einigermaßen, bis ich zum vermutet letzten Schritt kam. Auf der Schaltfläche, auf die ich geklickt habe, stand doch: “Einkauf abschließen”. Leider kam nach einem Klick auf die Schaltfläche die folgende Meldung: “Ihre Bestellung konnte nicht erfolgreich durchgeführt werden. Bitte wenden Sie sich an den Kundendienst, um Ihre Bestellung abzuschließen. Fehlercode:141078″ Langsam begann die Sache, mich wirklich zu nerven. Aber Microsoft ist ja ein innovatives Unternehmen, daher steigerungsfähig und in der Lage, noch einen draufzulegen. Ein Klick auf den Link zum Kundendienst (zumindest hat Microsoft das nicht Service genannt) brachte mich zu folgender Info: “Wir sind gerne für Sie da – von Montag bis Freitag 9:00 Uhr bis 19:00 Uhr.” Ich bin mir nicht sicher: ist das reine Gedankenlosigkeit bei Microsoft oder ein bewusster unfreundlicher Akt gegen mich als Kunden? Ich habe jetzt den Papp auf. Worum geht es? Microsoft bietet Office als Abonnement an. OK. Nach einem Jahr schaltet Microsoft Office aus, so lange, bis das Abonnement erneuert wurde. OK. Microsoft gibt kein Zeitfenster vor, sondern erwartet, dass das Abonnement genau am Tage des Ablaufs des alten Abonnements verlängert wird. Das ist grenzwertig, in meinem Fall aber noch zähneknirschend zu akzeptieren. Andere Kunden könnten damit erheblich größere Problem haben. Kunden können bei der Verlängerung des Abonnements in Probleme laufen. OK, das kann passieren. Microsoft bietet keinen 24/7-Support für Office. OK. Microsoft schaltet dem Kunden, bei dem die Verlängerung des Abos nicht funktioniert, die Nutzung von Office 52 Stunden und 18 Minuten, bevor er Unterstützung bekommen kann, die Nutzung von Office ab. Das ist ein extrem unfreundlicher Akt gegenüber dem Kunden, der dem Kunden viel Geld […]

Regeln | Impressum