Welcome to MSDN Blogs Sign in | Join | Help

Seit gestern steht die Developer Beta für Silverlight 4 zur Verfügung. Die Version 4 hat den Fokus auf die Themen

  • Media
  • Business Applications
  • Beyond the Browser

Neben dem heißbegehrten Feature der Druck Unterstützung aus Silverlight Anwendungen heraus, hat sich noch eine Menge anderer Dinge getan:

  • WCF RIA Services
  • Unterstützung von Kamera und Mikrofon innerhalb der Sandbox
  • Einheitliches Assembly Format für .NET 4 und Silverlight 4. Das Problem des Unit Testings ist somit entzerrt worden. Man schreibt ein Assembly mit der Anwendungslogik und kann auf dem Desktop die Unit Tests anwenden und das getestete Assembly in Silverlight einfach einbinden.
  • Offline DRM Funktionalität
  • COM Automation Support bei Out Of Browser Anwendungen die mit elevated Trust laufen

Mehr Details stehen auf der Silverlight 4 Beta Seite, wo man sich auch die Entwicklertools runterladen kann.


shot1 Silverlight 4 Beta Information

Wir haben das Windows Azure Gewinnspiel bis zum 31.12 verlängert. Einer der Gründe war die Problematik mit der schleppenden Token Vergabe.

Hier haben wir nun eine erfreuliche Nachricht. Es gibt nun einen einfachen direkten Weg einen Windows Azure Token anzufordern.

Jeder Interessent sendet eine E-Mail an AzureNow@microsoft.com mit dem Betreff „Anfrage Windows Azure Token“ und innerhalb 24h bekommt man den Token zugesendet.

Stephen Toub hat einen wichtigen fehlenden Baustein zu den neuen Parallel Extensions im .NET Framework 4 rausgebracht: Ein Dokument über die Anwendung dieser Technologie. Lesenswert!

Link: Patterns for Parallel Programming

Mit dem C# 4.0 Webcast wurde auf MSDN Deutschland die Serie rund um Visual Studio 2010 + .NET Framework 4 gestartet. Nun sind weitere Webcasts zum Thema erschienen:

Visual Studio 2010 – Die Entwicklungsumgebung

Managed Extensibility Framework – Eine Einführung

Visual Studio 2010 & .NET Framework 4 – Highlights

Windows Workflow 4 – Die Neuerungen

Wer nicht so viel Zeit hat sich alle Webcasts anzuschauen kann sich mit dem Visual Studio 2010 & .NET Framework 4 – Highlights Webcast einen Überblick über verschiedene kommende Technologien verschaffen.

An diesem Wochenende Reise ich nach Berlin zur Tech-Ed Europe 2009. Ich werde dort im Ask-The-Experts Bereich zu finden sein. Was mich freut ist die Tatsache das der Standort Berlin attraktiv ist und die Tech-Ed Europe 2009 komplett ausverkauft ist.

shot1

Mit den Verbesserungen von WIndows 7 ist eines der Features die ich nutze Direct Network Access. Smartcard in den Slot schieben, Passwort einhacken und schon bin ich mit meinem Firmennetz verschmolzen. Ganz ohne VPN, einfach direkt integriert.

Bisher allerdings hatte ich so nur Zugriff auf Intranet-Seiten über das HTTP Protokoll. Seit gestern funktionieren nun sämtliche File-basierten Zugriffe und damit auch alle Scripts die durch unsere IT eingespielt werden.

So wollte ich gestern gerade einen Webcast aufnehmen als mir diese Meldung angezeigt wurde:

shot1

Nun, um Compliant mit unseren Policies zu sein, habe ich mich entschlossen das Setup durchzuführen.

Shutdown, TPM aktiviert, Boot, Login und dann kommt der dezente Hinweis das dieser Prozess 1-5 Stunden dauern kann:

shot3

Des Weiteren wurde noch darauf hingewiesen das man mit eingeschränkter Performance weiterarbeiten kann, allerdings entsprach das nicht der Wahrheit.

Wie dem auch sei, der Prozess dauerte bei mir in der Tat volle 5 Stunden und ich bin jetzt auch voll Compliant.

Zeitpunkt

Natürlich hätte ich auch das Setup zu einem späteren Zeitpunkt anstarten können, allerdings überlegte ich wann es günstiger wäre. In Anbetracht dessen das die TechEd vor der Tür steht und ich auch danach gleich voll eingespannt bin, habe ich die Entscheidung getroffen den Webcast nicht aufzuzeichnen und die Verschlüsselung meiner Festplatte zu gewähren. Ich fühlte mich einfach überrumpelt und habe spontan entschieden.

Was mich allerdings während der Installation verwundert hat, ist die Tatsache, dass ich keinen Recovery Code ausdrucken oder auf einen USB Stick speichern musste. Keine Ahnung warum das jetzt so ist, vielleicht kann mir ein Leser Licht ins Dunkel bringen, ich selbst habe ja so meine Erfahrungen mit BitLocker. Bei meinem letzten vernichten der Registry relevanten Blöcke auf der Festplatte (durch zu frühes Ausschalten meines Laptops) konnte ich nämlich nicht mehr ohne den BitLocker Recovery Key booten. Bin jetzt schon gespannt wie dass ohne Recovery Key funktioniert, wenn mir vielleicht wieder so ein Missgeschick passiert.

Arbeitszeit

Das BitLocker auf meinem Laptop installiert ist, ist sinnvoll. Ich bin viel Unterwegs, lasse meine Hardware in ungeschützten Räumen bei Konferenzen, Kunden, wo auch immer. Bei einem möglichen Diebstahl oder Verlust kann ich mir sicher sein dass die Daten trotzdem geschützt sind. Trotzdem bin ich genervt. Die Art und Weise wie man Compliance sicherstellt ist für mich ein wichtiger Faktor.

Viel lieber wäre mir vorher eine Email gewesen, die nochmals darauf hinweist das der Prozess unbedingt vollzogen werden muss, mit klaren Datumsangaben. Dann hätte ich unter Umständen besser planen können als meine aus dem Bauch Entscheidung, “Ja, hau halt die Verschlüsselung rein und pfeiff auf den Webcast”. Denn eine Aussperrung aus dem Firmennetz durch mangelnde Compliance wäre deutlich Zeitaufwendiger.

Kostet Compliance nun Arbeitszeit?

Im Titel steht Compliance kostet Arbeitszeit. Das war jetzt bei mir der Fall, mich würde interessieren wie das bei Euch so ist. Bei großen Unternehmen wird Compliance auf jeden Fall ein Thema sein, bei Freelancern könnte ich mir vorstellen das auch diese mit dem Thema konfrontiert werden, wenn diese direkt Vor-Ort beim Kunden zum Beispiel in deren Firmennetzwerk wollen.

Kostet Euch das zusätzliche Arbeitszeit oder habt Ihr gute Strategien entwickelt das möglichst Reibungslos abzuwickeln?

Der Winter TechTalk den Christian Binder und ich halten lässt keine Registrierung mehr über die Webseite zu, da er ausgebucht ist.

Es gibt hier zwei Dinge, die ich jetzt mal in den Raum stelle:

  1. Beim TechTalk zu Parallel Computing waren einige Locations auch ausgebucht und wir hatten trotzdem noch Stühle frei, da es doch immer wieder mal passiert dass man sich anmeldet und was anderes dazwischen kommt.
  2. Selbst wenn wir keine Stühle frei hätten, so gibt es noch die Möglichkeit sich auf den Boden zu setzen, an der Wand zu stehen oder Chair Sharing zu machen.

Wir limitieren Anmeldungen einfach auf Grund von räumlichen Kapazitäten und Catering (Meist ein Brötchen und ein Getränk).

Damit wir in keinen Engpass laufen, werden wir zu jedem TechTalk einen Kasten Bier mitbringen.

Um nicht das falsche Bier mitzubringen, würde ich mich über Kommentare freuen, was denn so an den Standorten Karlsruhe, Köln, Hamburg, Berlin und München üblicherweise getrunken wird.

This morning I just played around with the new C# 4.0 dynamic feature. Using the dynamic keyword allows you to bind to properties, indexers and methods during runtime. This means that during compile time there is no check if the methods, properties or whatever you are calling are really existent, you experience any missing pieces during runtime.

On the other hand this allows you to implement some flexible stuff. You can implement your own dynamic objects just deriving from DynamicObject and overriding the methods you are interested in.

So, I just implemented a short demo how to use DynamicObject derived classes to wrap some parts of System.Data.SqlClient to access data from tables directly, without any code gen.

The result is, that I can write the following code and it will resolve during runtime if it can find data for the specified tables.

using( dynamic db = new DirectDataAccess("connectionstring") )
{
Console.WriteLine( db.Products.Count );
Console.WriteLine( db.Customers[15].CompanyName );
Console.WriteLine( db.Employees.Row10.LastName );
}

Here is how it works. First lets have a look at the responsible classes:

shot1

DirectDataAccess, DirectRowAccess and DirectColumnAccess are deriving from DynamicObject. My approach is simple and just for demo purposes. Also it just enables read access and does not handle errors well. I encapsulate DataTable as member and create new instances of DirectRowAccess and DirectColumnAccess through the overriden TryGetMember methods.

Lets have a look into the DirectDataAccess implementation:

public class DirectDataAccess : DynamicObject, IDisposable
{
SqlConnection connection = null;

public DirectDataAccess(string connectionString)
{
connection = new SqlConnection(connectionString);
connection.Open();
}

public void Dispose()
{
/// removed for clarity
}

public override bool TryGetMember(GetMemberBinder binder,
out object result)
{
DataTable table = new DataTable(binder.Name);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM " + binder.Name;
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;

try
{
table.Load(cmd.ExecuteReader());
}
catch (Exception)
{
result = null;
return false;
}

result = new DirectRowAccess(table);
return true;
}
}

The constructor is creating the connection and opens it. The TryGetMember implementation just constructs a SQL Query for the given binder. The binder specifies exactly the property name I use in the code. For instance, I want to get a specific table, I just type:
 
// db is an instance of DirectDataAccess

var table = db.Products;

 
table is an instance of DirectRowAccess which is also derived from DynamicObject.
 
public class DirectRowAccess : DynamicObject
{
private DataTable table = null;

public DirectRowAccess(DataTable table)
{
this.table = table;
}

public override bool TryGetMember(GetMemberBinder binder,
out object result)
{
string raw = binder.Name.Substring(3,
binder.Name.Length - 3);
int index = Convert.ToInt32(raw);

try
{
result = new DirectColumnAccess(table.Rows[index]);
return true;
}
catch (Exception)
{
result = null;
return false;
}
}

public override bool TryGetIndex(GetIndexBinder binder,
object[] indexes,
out object result)
{
result = new DirectColumnAccess(
table.Rows[(int)indexes[0]]);
return true;
}

public int Count
{
get
{
return table.Rows.Count;
}
}
}

Methods, properties and indexers which are implemented by the class are called directly. The override TryGetMember will be called if a method or property was not found by the binder natively.
 
I can access rows from the table in two ways. I can use an indexer like
 
var row = db.Customers[10];

or I can use an alternative implementation like
 
var row = db.Customers.Row10;

both returning a new instance of DirectColumnAccess, which, yes you can guess, is also derived from DynamicObject:
 
public class DirectColumnAccess : DynamicObject
{
private DataRow row = null;

public DirectColumnAccess(DataRow row)
{
this.row = row;
}

public override bool TryGetMember(GetMemberBinder binder,
out object result)
{
try
{
result = row[binder.Name];
return true;
}
catch (Exception)
{
result = null;
return false;
}
}

public override string ToString()
{
return string.Join(",", row.ItemArray);
}
}

This TryGetMember implementation tries to retrieve the column value specified in the binder, for instance:
 
var companyName = db.Customers[10].CompanyName;

The ToString() override is just an convenient way to retrieve all values from a specific row, so you can just console out the following:
 
Console.WriteLine( db.Customers[10] );

Just remember:
This is just demo code, written just for fun!

Another Idea I had was to write a generic REST object which implements the common HTTP Verbs GET, POST, PUT and DELTE to talk to REST Services. I thought on writing something like this:

dynamic rest = new REST("http://twitter.com")
var xml = rest.GET.statuses_public__timeline.AsXml();

var postXml = ...;

var xml2 = rest.POST.statuses_update(postXml).AsXml();

But there are some problems to solve like the fact that you can’t use a forward slash in a method or property name and masking the underscore is maybe not a good idea.

What do you think, are there any usages in your environment where DynamicObject derived implemenations could help?

MSDN Blogs Main Feed RSS

Und, schon eine wage Idee?

Ich schreibe diesen Blog Post an alle Teilnehmer des Windows Azure Gewinnspiels (http://www.msdn-online.de/AzureNow), die noch immer nicht Ihr Token erhalten haben.

Das Token wird innerhalb von 48 Stunden per Email an Sie versendet. Falls Sie nach 48 Stunden immer noch kein Windows Azure Token erhalten haben, so schreiben Sie mir bitte eine Email

dparys@microsoft.com

und teilen Sie mir bitte Ihre Windows Live ID mit der Sie die Registrierung durchgeführt haben, sowie das Datum und die Uhrzeit der Registrierung mit. Dann kann ich auch entsprechend diese Informationen weitergeben und intern eskalieren.

Falls Sie mich auf anderem Wege kontaktieren (z.B. über mein Blog) so hinterlassen Sie mir doch bitte eine Möglichkeit Ihnen zu antworten (z.B. die eigene Email Adresse).

In den nächsten Monaten werden wir bei MSDN Online einen Schwerpunkt auf Visual Studio 2010 und dem .NET Framework 4 legen. Dies wird sich auch in den kommenden MSDN Webcasts widerspiegeln. Am Montag ist hierzu der erste Webcast erschienen. Er behandelt die neuen Sprachfeatures von C# 4.0.

Link: Webcast C# 4.0

Während der PDC 2008 habe ich bereits über die wichtigsten Features geblogged.

C# 4.0 kurz zusammengefasst:

  • Das neue Keyword dynamic und damit Dynamic Invoke
  • Benannte Optionale Parameter
  • Verbesserungen COM Interop –> Interop Type Embedding
  • Co- und Contra Varianz

Ich denke ich sollte zu meinen Blog Post zum 1-Wochen Projekt ein wenig Stellung nehmen.

Die Frage sollte nicht provokativ wirken, ich habe auch keine Praktikanten die ich zur Verfügung stellen kann. Es ging mir vielmehr um das Verständnis ob ein beliebiger Entwickler, mit gleichem Kenntnisstand wie man selbst, hilfreich sein kann, wenn er nur eine Woche zur Verfügung steht. Die Fragestellung war vielleicht auch nicht so glücklich, deshalb möchte ich die Frage neu stellen, mit neuen Rahmenbedingungen:

Wenn Ihr 1 Woche Zeit hättet, dass zu Programmieren was Ihr schon immer mal anpacken wolltet, was wäre das? Ein Tool, eine Hilfsklasse, ein komplettes Spiel, Refactoring des kompletten Projekts?

Die Definition von 1 Woche in Stunden ist bei jedem unterschiedlich, aber ich denke 7x12 sollte es nicht überschreiten.

Ich hatte vor längerer Zeit die Gelegenheit Dominick Baier zum Thema Windows Identity Foundation zu interviewen. Das Interview ist nun endlich fertig gerendered und auf Channel 9 publiziert.

Interview mit Dominick Baier auf Channel 9

Leider hat während des Interviews die Kamera ihren Geist aufgegeben. Oder vielmehr: Die Schärferegulierung hat nicht mehr funktioniert. Insofern sollte man sich dann einfach nur das Audio zu Gemüte ziehen.

So, das Wochenende der Blog Umstellung ist nun vorbei. Was hat sich eigentlich verändert? Nun, mein Blog das auf den MSDN Blogs liegt wird nun in einem unserer Data Center gehostet. Das war vorher nicht der Fall. Ansonsten hat sich nichts getan. Sprich, ich bin immer noch an diese Blog Software gebunden und meine Suche nach einer möglichen Alternative hat sich zumindest konkretisiert. Ich denke es wird Subtext werden. Das ist jetzt von der Anprogrammierung auch nicht so der Hit, aber es ist noch überschaubar.

Auf Wunsch einiger Leser werden nun kaum Grafiken in der Hauptseite angezeigt. Der Style machts möglich, aber leider eben auch nur dieser Style. Der Nachteil ist die Wahnsinnige enge, damit wird das anzeigen von Sourcecode nicht gerade einfacher.

Ich habe nicht die alten Posts auf das neue Stylesheet angepasst. Insofern können ausbrechende Grafiken und auch Quelltexte in den älteren Posts unter Umständen schlimm aussehen. Falls die Lesbarkeit zu sehr leidet, einfach anpingen, ich werde den entsprechenden Post im Laufe der Zeit anpassen.

Nehmen wir mal an, wir hätten eine Ressource die uns eine Woche zur freien Verfügung stehen würde. Nehmen wir an, diese Ressource würde uns kein Geld kosten. Nehmen wir an diese Ressource könnte uns in dieser einen Woche ein beliebiges Thema selbstständig bearbeiten und fertigstellen.

Was würdet Ihr aus Entwickler-Sicht diese Ressource entwickeln lassen?

Hättet Ihr überhaupt Bedarf an einer solchen Ressource?

More Posts Next page »
 
Page view tracker