Zum Inhalt

Monat: März 2016

Visual Studio Multilanguage bzw. Sprache wechseln

Als Entwickler will man in der Regel Visual Studio (VS) in englischer Sprache benutzen, zumindest geht es mir so. Wenn man aber aus Gründen, die man nicht beeinflussen kann, eine deutschsprachige Installation von VS vorfindet, so muss man es nicht neu installieren, um die Sprache zu wechseln, sondern kann einfach ein zusätzliches Sprachpaket herunterladen. Die entsprechenden Schritte hierzu findet man in der folgenden Anleitung.

Sprache von Visual Studio ohne Neuinstallation ändern

Linkdump KW12/2016

Why fruits and vegetables taste better in Europe – Vox – Eine interessante Betrachtung der Wertschätzung gegenüber Lebensmittel in verschiedenen Kulturkreisen unserer Welt und was daraus für die Qualität der Produkte resultiert.

Flow Requires Focus, Not Time – Fast jeder Entwickler weiß was gemeint ist, wenn bspw. von „Flow“ oder „im Tunnel sein“ gesprochen wird. Meine Erfahrung deckt sich teilweise mit diesem Artikel. Häufig erfordert es einfach nur Fokus, um ein Problem zu lösen. Allerdings hat meine persönliche Erfahrung gezeigt, dass manchmal doch die Zeit ein Faktor ist, gerade bei Debugging-Sessions bei denen man im Kopf die „Variablen sortieren muss“.

Tips for Writing Short Emails Without Being Rude – The Muse – Hier greift meiner Meinung nach das alte Sprichwort „Der Ton macht die Musik“.

The Future Of Collaboration Is Asynchronous – Man merkt es ja auch im privaten Umfeld, immer weniger Leute telefonieren mit Ihrem Smartphone, sondern benutzen ihr „Telefon“ immer mehr nur als Messaging-Endgerät. Auch beruflich bietet asynchrone Kommunikation viele Vorteile, die leider von vielen Leuten noch immer nicht verstanden haben. Der Klassiker für mich ist immer noch, dass jemand eine Email schickt und direkt danach anruft, um die Email zu erklären.

Ehemaliger Nixon-Berater: ‚War on Drugs‘ sollte Waffe gegen Schwarze und Hippies sein – Sollten sich diese Dinge wirklich so zugetragen haben, dann ist das wirklich ein starkes Stück. Viele historische Aspekte müssten meiner Meinung nach, dann ganz neu bewertet werden, vom diskriminierenden Faktor mal ganz abgesehen, welcher dann wirklich unerhört wäre.

TIL – IntelliTrace „bremst“ ADO.NET Aktionen

Das „bremst“ im Titel steht ganz bewusst in Anführungszeichen, aber ein besserer Begriff ist mir für dieses Verhalten nicht eingefallen. Ich wollte heute eigentlich eine ganze einfache Datenbankoperation im Rahmen eines Programms implementieren. Es sollte einfach eine bestimmte Menge Datensätze generiert (ca. 1500) und in einer SQL Server Tabelle persistiert werden. Je nach Performanz des SQL Server eigentlich eine Sache von unter 1 Sekunde.

Allerdings kam mir dann IntelliTrace in die Quere bzw. hat dafür gesagt, dass die Datenbankoperation scheinbar mehr Zeit in Anspruch genommen hat, als ich vorher gedacht habe. Fairerweise muss ich sagen, dass ich mich mit IntelliTrace bis zu diesem Zeitpunkt noch nicht detailliert bis gar nicht auseinander gesetzt habe. Eine gute Einleitung in IntelliTrace bietet 1. Auf jeden Fall ist IntelliTrace seit 2010 ein Bestandteil von Visual Studio. Allerdings werden die IntelliTrace Information seit VS2015 nicht mehr in einem eigenen Fenster dargestellt, sondern sind jetzt in einem Tab in den Diagnostic Tools integriert.

Grundsätzlich gibt es die Möglichkeit mittels IntelliTrace alle Informationen zu sammeln und später zu filtern oder nur die Information zu sammeln, die einen konkret interessieren, und später nicht mehr filtern zu müssen. Genau dieser Umstand bzw. die Tatsache das hierbei bestimmte Defaults gesetzt hatzu dieser „Bremse“ geführt.

Der gesamte Code für dieses einfache Beispiel sieht wie folgt aus, wobei das wirklich nur ein Beispiel ist, um das Verhalten zu demonstrieren und so mit Sicherheit nicht für einen produktiven Einsatz gedacht/geeignet ist.

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Demo"].ConnectionString);
conn.Open();
 
SqlTransaction trans = conn.BeginTransaction();
Console.WriteLine("Start: {0}", DateTime.Now);
for (int i = 0; i < 2000; i++)
{
    SqlCommand command = new SqlCommand();
    command.Connection = conn;
    command.Transaction = trans;
    command.CommandText = "INSERT INTO dbo.OpenWeek (Id, CW, [User], Completed) VALUES ("+i+", 201611, 'Demo" + i +
                        "', 0);";
    command.ExecuteNonQuery();
}
trans.Commit();
Console.WriteLine("Start: {0}", DateTime.Now);
Console.WriteLine("Done");
Console.ReadKey();

Mit den Standardeinstellungen habe ich immer ungefähr die folgenden Zeiten erreicht.

In den Diagnostics Tools habe ich dann die folgenden Information gesehen:

Danach habe ich den Einstellungen von IntelliTrace sämtliche ADO.NET Events deaktiviert.

Danach sind die Zeiten entsprechend so, wie ich sie ursprünglich erwartet habe.

Da ich, wie Eingangs erwähnt, mich noch nicht im Detail mit IntelliTrace befasst hatte, hat mich erst 2 auf den richtigen Weg gebracht. Abschließend sei aber noch gesagt, dass einem IntelliTrace erst in die „Quere“ kommt, wenn man die Enterprise Edition einsetzt. In der Professional und Community Edition von Visual Studio ist dieses Feature nicht enthalten.

Falls jemand gerade kein VS2015 Enterprise Edition zur Hand hat und sich dieses Feature dennoch ansehen möchte, so gibt es unter 3 eine fertige virtuelle Maschine in der eine entsprechende Umgebung fertig eingerichtet ist. Weiterhin gibt es auch ein schönes Hands-On Lab 4, welches einem den Umgang mit IntelliTrace näher bringt.

Linkdump KW11/2016

Who Needs GitHub? Run GitLab on a USB Stick with Docker | Elton Stoneman – Docker, Docker, Docker! Man hört/liest es im Moment an jeder Ecke. Der Einsatz ist häufig nicht immer sinnvoll, für diesen speziellen Anwendungsfall finde ich den Ansatz aber gut. Leider ist die Docker-Nutzung noch immer *nix only.

Getting Six Hours of Sleep Can Be Just as Bad as Not Sleeping at All – Die genaue Zahl an „benötigten“ Stunden variiert von Person zu Person natürlich leicht aber ich kann aus eigener Erfahrung des Schlafmangel nicht gerade zur Produktivität beiträgt. Wenn man dann hierzu auch Meldungen wie „Wie gefährlich ist das ungesunde Schlafverhalten unserer Politiker?“ berücksichtigt, fragt man sich, ob es vielleicht nicht besser wäre, wenn unsere Politiker auch mehr schlafen würden?

Lasst mich in Ruhe mit den Kindern, die ich nicht haben will › ze.tt – Schöner Standpunkt für dieses Thema. Im Alltag erlebt man leider immer noch sehr oft, dass Menschen nicht objektiv über dieses Thema sprechen können.

Linkdump KW10/2016

Zeal – Praktisch um Dokumentationen verschiedener Sprachen/Frameworks offline verfügbar zu machen (Cross-Plattform)

Announcing SQL Server on Linux – Hell freezes over! Schon sehr interessant, welchen Wandel Microsoft in den letzten Jahren vollzogen hat. Es wird sich noch zeigen müssen, welche langfristige Strategie dahinter steckt.

What Happens To Older Programmers/Developers? – Im Kern eigentlich immer die gleiche Aussage und meiner Meinung nach auch relativ allgemeingültig für andere Berufe. Wer gedanklich stehen bleibt und sich nicht permanent weiter entwickelt, wird nicht nur körperlich alt.

Do Fewer Things, Better – Entscheidend ist, dass man sich auf wenige Dinge konzentriert und diese dann versucht zur Meisterschaft zu führen.

GitHub lock-in? – Solange man Dinge nicht selber betreibt, hat man immer eine gewisse Art von Vendor Lock-in. Allerdings hat man auch einen Vendor Lock-in, wenn man ein proprietäres Produkt, in diesem Fall passt Team Foundation Server ganz gut, auf eigener Hardware betreibt. Hiermit kann man auch nicht komplett ohne Aufwand auf eine andere Lösung wechseln.

9 Todsichere Wege, Mitarbeiter Zu Demotivieren – Wie wahr, wie wahr. Gerade die Punkte sechs und neun sind in meinen Augen wirkliche Motivationskiller.

TIL – Spaß mit Bitmasken

Häufiger hat man die Anforderung bestimmte Einstellungen zu speichern. In manchen Fällen kann man pro Einstellung bspw. ein Datenbankfeld verwenden und jeweils mit einem Tinyint den Zustand speichern. Allerdings gibt es auch Fälle in denen es Sinn ergeben kann hierfür eine Bitmaske zu verwenden.

Hilfreich ist, dass das .NET Framework alle Werkzeuge, auch für die Konvertierungen zwischen den verschiedenen Datentypen, von Haus aus schon mitbringt.

Hierzu kann man einfach eine simple Enumeration erzeugen und mittels des „Flags“ Attribut kennzeichnen, dass die Enumeration auch als Bitfeld genutzt werden kann.

Ein einfaches Beispiel hierfür kann wie folgt aussehen:

[Flags]
public enum EditDataMode
{
    Create = 1,
    Read = 2,
    Update = 4,
    Delete = 8
}

Eine Instanz kann nun wie folgt erzeugt werden.

EditDataMode dataMode = EditDataMode.Read | EditDataMode.Create | EditDataMode.Delete;

Mittels einer einfachen Hilfsmethode kann man nun prüfen, welches Flag gesetzt ist.

static bool IsFlagSet(EditDataMode bitmask, EditDataMode flag)
{
    return (bitmask & flag) != 0;
}

Nun kann man bspw. prüfen, ob das „Create“-Flag gesetzt ist.

if (IsFlagSet(dataMode, EditDataMode.Create))
{
    Console.WriteLine("Create flag is set.");
}

Praktisch ist, dass man diesen Wert, also die Repräsentierung der Instanz auch als int oder string ausgeben kann.

Console.WriteLine("From EditDataMode to int: {0}", (int)dataMode);
Console.WriteLine("From EditDataMode to string (bin): {0}", Convert.ToString((int)dataMode, 2));

Auch der umgekehrte Weg ist so einfach zu realisieren. Hat man die Bitmask in irgendeiner Form als string gespeichert, so kann man diesen auch einfach wieder in Klassen-Objekt verwandeln.

string input = "0011";
Console.WriteLine("Input: {0}", input);
int convertedInput2Bin = Convert.ToInt32(input, 2);
 
Console.WriteLine("Converted input from string to int: {0}", convertedInput2Bin);
EditDataMode inputDataMode = (EditDataMode) convertedInput2Bin;
Console.WriteLine("EditDataMode to string: {0}", inputDataMode.ToString());

Ein vollständiges Beispiel habe ich bei Github abgelegt.

ExploBitmask

Quellen: