Technical Summit – Keynote

Thursday, November 20, 2008 12:30:12 PM (Mitteleuropäische Zeit, UTC+01:00)

Auf der Keynote gab es drei Sprecher die das Technical Summit offiziell eröffneten.
Frank Fischer stellte sie Software und Services Strategie von Microsoft mit einem Vergleich von Sauerstoff und dem Internet vor. „Internet ist wie ein Gas, welches jeden zur Verfügung stehenden Raum vollständig  ausfüllt“.

P1000981   P1000982

Er gab einen Ausblick auf Windows 7 und stellte die neue Sensor API in Windows 7 an einem Beispiel vor. Er hatte eine Platine auf der verschiedene Beschleunigungssensoren untergebracht waren. Mit dieser Platine steuerte er ein Spiel. Dies  erinnerte etwas an die Wii. Außerdem stellte er kurz Azure vor, „ein Betriebssystem in the Cloud“, das  hochskalierbar, hochverfügbar und weltweit verteilt sein soll. Beachtlich ist, wie Microsoft zurzeit die Infrastruktur für dieses Betriebssystem ausbaut. Im Moment nimmt Microsoft jeden Monat 10.000 neue Server in Betrieb. In Kürze sollen monatlich 20.000 neue Server hinzukommen.

Steve Teixeira stellte in seinem Vortrag das aktuelle Problem der Auslastung von Multicore CPUs vor. Er zeigte, wie schwierig die Multithreading Entwicklung bisher war, um Mehrkern-Prozessoren gleichmäßig auszulasten.  Er stellte neue Möglichkeiten vor, um dieses Problem zu beheben. Seine Demos zeigte er jeweils auf 3 PCs, einem Single-Core, einem Quad-Core und einem 24-Core(!) PC.

 P1000990 P1000992

Der Performance Gewinn war gewaltig.
Eine große Linq-to-XML Abfrage brauchte mit einem Kern 18 Sekunden. Mit Plinq (Parallel Language Integrated Query) und 24 Kernen dauerte die Abfrage nur 1,1 Sekunden. In .NET 4.0 wird es zwei Möglichkeiten zu Parallelisierung  geben. Das wären die Task Parallel Library und Plinq.

P1000993 P1000994

Der dritte Speaker war Patrick Baudisch, er arbeitete 6 Jahre bei Microsoft Research und stelle einige seiner Forschungsprojekte aus dem Bereich „Very small Mobile Devices“ vor.

Soap

Bei Soap handelt es sich um eine Maus ohne Mousepad, um dieses Eingabegerät zu bedienen, braucht man also keinen Tisch mehr. Der Name des Gerätes wurde von seiner Optik abgeleitet. Es sieht aus wie ein Stück Seife.

P1000995

Helo

Helo ist eine Lösung um große Landkarten auf kleinen Geräten, wie PDAs, darzustellen, dabei wird ausgenutzt, dass das menschliche Gehirn Krümmungen besser unterscheiden kann, als Pfeilen zu folgen. Ein sehr interessanter Ansatz.

P1000997

Summary and thumbnails

Dies ist eine Technik, um Webseiten auf sehr kleinen Displays anzuzeigen, ohne das Layout zu verändern. Ich hoffe, dass diese Technik sehr bald in Windows Mobile Einzug hält.

Back touch

Back touch ist eine Technologie die es möglich macht, sehr kleine Displays mit den Fingern zu bedienen. Dabei bedienen die Finger die Geräte von der Rückseite. Anwendungszwecke wären zum Beispiel Uhren oder Ringe.

P1000998 P1000999

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


LIKE und Wildcards bei Linq

Sunday, December 16, 2007 4:54:46 PM (Mitteleuropäische Zeit, UTC+01:00)

Möchte man mit SQL zum Beispiel alle Kundennamen aus einer Tabelle abfragen die mit "Me" beginnen, verwendet man LIKE, wie das folgende Beispiel zeigt:

SELECT * FROM customer
WHERE ContactName LIKE 'Me%' 

Linq bietet für diesen Zweck die Methode StartsWith an:

var customers = from c in db.Customers
                where c.ContactName.StartsWith("Me")
                select c; 

Möchte man jedoch auf die LIKE Methode in Linq nicht verzichten um Wildcards wie das Prozentzeichen zu verwenden, kann die Methode SqlMethods.Like aus dem Namespace System.Data.Linq.SqlClient verwendet werden.

Beispiel:

var customers = from c in db.Customers
                where SqlMethods.Like(c.ContactName, "Me%")
                select c;

Diesen Tooltip sollte man an dieser Stelle einfach ignorieren :-)

Like

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Neue Insert und Delete Methoden bei Linq

Wednesday, November 28, 2007 9:50:13 PM (Mitteleuropäische Zeit, UTC+01:00)

Auf vielen Webseiten, meist Entwicklerblogs, findet man derzeit diverse Linq Beispielabfragen Wie zum Beispiel diese hier:

db.Customers.Add(newCustomer)
db.SubmitChanges()
Diese Add Methode gab es nur in der Beta 1 und 2, in der RTM Version wurden die ADD und Remove Methoden umbenannt:

Beta 2 Version RTM Version
Add() InsertOnSubmit()
AddAll() InsertAllOnSubmit()
Remove() DeleteOnSubmit()
RemoveAll() DeleteAllOnSubmit()

Diese Übersicht hab ich im Blog von Özgür Aytekin gefunden, Danke!

Achtung: Sogar in der MSDN findet man noch oft die veralteten Methoden!

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


SQL Befehle einer Linq Abfrage ausgeben

Sunday, November 25, 2007 7:53:30 PM (Mitteleuropäische Zeit, UTC+01:00)

Daniel Walzenbach hat in seinem Blog gezeigt wie man die von Linq erzeugte SQL Abfrage in die Console umleiten kann.
Was machen nun die Webentwickler die keine Console haben?
Eine Möglichkeit ist, den Inhalt in den Debugger Output zu schreiben, dazu hat Kris Vandermotten eine kleine Klasse geschrieben die in seinem Blog zu finden ist.
Wer sich die SQL Abfrage im Browser ansehen möchte, kann  den StringWriter verwenden wie der folgende Code zeigt:

DataContext db = new DataContext();

StringWriter stringWriter = new StringWriter();
db.Log = stringWriter;

// Linq Abfrage

Response.Write(stringWriter.ToString());

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Linq vs. ADO.NET

Sunday, November 25, 2007 7:29:27 PM (Mitteleuropäische Zeit, UTC+01:00)

Heute habe ich eine SQLRoleProvider Klasse von ADO.NET auf LINQ umgestellt.
Die beiden folgenden Codebeispiele machen genau das gleiche.
An diesem Beispiel wird deutlich wie effektiv LINQ sein kann.

ADO.NET Variante:

bool exists = false;
connectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Roles WHERE Rolename = @Rolename", conn);

cmd.Parameters.Add("@Rolename", SqlDbType.VarChar, 255).Value = rolename;
cmd.Parameters.Add("@ApplicationName", SqlDbType.VarChar, 255).Value = ApplicationName; 

conn.Open(); // try catch finally hab ich für dieses Beispiel entfernt
int numRecs = (int) cmd.ExecuteScalar();
conn.Close();
if (numRecs > 0)
       exists = true;
return exists;


Linq Variante:

private DataContext db = new DataContext();
var roleCount = (from r in db.Roles
         where r.Rolename == rolename
         select r).Count();

return (roleCount > 0);

Der von der Linq Abfrage erzeugte SQL Code sieht dann so aus:

SELECT [t0].[ID], [t0].[Rolename]
FROM [dbo].[Roles] AS [t0]
WHERE [t0].[Rolename] = @p0

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de