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:
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:
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; }}
// db is an instance of DirectDataAccessvar table = db.Products;
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; } }}
var row = db.Customers[10];
var row = db.Customers.Row10;
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); }}
var companyName = db.Customers[10].CompanyName;
Console.WriteLine( db.Customers[10] );
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?
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:
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?
Für dieses Wochenende (beginn Donnerstag Nacht) sind Wartungsarbeiten an der MSDN Blogs Plattform angekündigt. In dieser Zeit werden keine neuen Blog Posts auf der Plattform erscheinen, des weiteren wird die Seite unter Umständen in einen Wartungsmodus geschaltet. Ab Montag sollte dann alles wieder reibungslos funktionieren.
Ich wurde auch angeschrieben bezüglich der Download-Größe der Bilder und Videos die in meinen Blog Posts verwendet werden. Das sind unter Umständen mehrere MB die heruntergeladen werden, nur weil man die Blog Seite mal anschauen will. Ich werde das ändern sobald die Plattform umgestellt ist. Sorry an dieser Stelle nochmal.