Teched 2007, Barcelona – Day 2

Δείτε εδώ τα υπόλοιπα blog posts για την Teched 2007

Το πρώτο session σήμερα είχε τον απίστευτο L. Bolognese να μας μιλάει για LINQ to SQL. Ξεκίνησε την ομιλία του με επεξήγηση της αρχιτεκτονικής του LINQ to SQL. Στη συνέχεια, μας έδειξε βήμα βήμα πως μπορούμε να γράψουμε κώδικα προκειμένου να “γεμίσουμε” κάποια objects με δεδομένα από μια SQL βάση δεδομένων. Προχώρησε σε συγγραφή αρκετών LINQ queries, για πολλά από τα οποία μας εξήγησε πως δουλεύουν.

Είδαμε (για άλλη μια φορά) τον O/R designer του Visual Studio 2008, ενώ ο Bolognese συνέχισε να μας καταπλήσσει με το απίστευτο χιούμορ του. Σαν απόδειξη της ισχύος των LINQ queries, μας ανέφερε ότι η ομάδα του ζήτησε από την ομάδα του SQL Server να δώσει sql queries, τα οποία δεν θα μπορούσαν να γίνουν με LINQ. Όπως μας είπε, τέτοια queries δεν βρέθηκαν! Μας έκανε μια in depth εξήγηση του πως δουλεύει το LINQ και μια επίδειξη της ταχύτητάς του.

Σε επόμενο demo, είδαμε πως να χρησιμοποιούμε το LINQ για CRUD μεθόδους (Create, Retrieve, Update, Delete) και ότι by default υποστηρίζει optimistic concurrency. Έπειτα, μας παρουσίασε διάφορες πιο “advanced” δυνατότητες των LINQ queries, όπως τα joins, δείχνοντας παράλληλα και τον generated sql κώδικα. Τα τελευταία πράγματα που μας έδειξε ήταν η χρήση stored procedures και transactions σε LINQ queries. Εν γένει, μου έκαναν απίστευτη εντύπωση και οι δύο παρουσιάσεις του. Εξαιρετικά καλογραμμένες, κατανοητά demos. Στα συν το απίστευτο χιούμορ που βγάζουν οι ατάκες του αλλά και η αρκετά αστεία προφορά του.

Στη συνέχεια, παρακολουθήσαμε τον Jesse Liberty (που πλέον δουλεύει στην Microsoft) στην παρουσίαση “Building Great Web Experiences with Silverlight 1.x”. Ξεκίνησε με την κατασκευή ενός Silverlight 1.1 Alpha demo με τη χρήση του Visual Studio 2008. Περιέγραψε τον declarative τρόπο δημιουργίας αντικειμένων μέσω XAML. Περιέγραψε επίσης και τον πιο “προγραμματιστικό” τρόπο, μέσω του .xaml.cs αρχείου, με χρήση C#. Με βάση αυτά, μας έδειξε και ένα όμορφο demo με χρήση LinearGradientStops.

Το δεύτερο sample που μας έδειξε ήταν η δημιουργία μιας Silverlight Class Library. Αρκετά απλή και “στρωμένη” διαδικασία, ένας StreamReader διαβάζει το .xaml αρχείο (το οποίο είναι μέσα στο compiled .dll) μέσω reflection, κλήση της InitializeObjectFromXaml και αναφορά του με ένα FrameworkElement στοιχείο. Μας αποκάλυψε και πως το συμβόλαιο του με τη Microsoft του επιβάλλει σε κάθε demo να χρησιμοποιεί τον C# ? operator!!! Ο Jesse έγραψε αρκετό C# κώδικα, και επαναλάμβανε συνέχεια ότι δεν γράφει κάτι “εξωγήινο”, απλά χρησιμοποιεί μια γλώσσα που ξέρουμε όλοι. Φυσικά, και με την βοήθεια του Intellisense που υπάρχει στο Visual Studio.

Το τρίτο και τελευταίο sample του περιλάμβανε την κατασκευή ενός “game of life” προσομοίωσης. Μέσα από αυτό το sample, μας έδειξε πως γίνεται το HTML – Silverlight interaction με C# κώδικα (χρήση του System.Windows.Browser.HtmlDocument αντικειμένου), πώς μπορούμε να βάλουμε έναν C# event handler που να ανταποκρίνεται στο Click ενός HTML button αλλά και πως μπορούμε να “παίξουμε” με τα attached properties των Silverlight controls μέσα από τον managed κώδικα.

Το επόμενο session της ημέρας είχε σαν όνομα “Microsoft Visual C# under the covers. An in-depth look at C# 3.0” και presenter τον Luke Hoban. Ξεκίνησε την παρουσίασή του με μια αναφορά στα νέα features της C# 3.0

  • object initializers
  • collection initializers (“παίζει” στα Collections που κάνουν implement το IEnumerable)
  • automatic properties
  • type inference (the var keyword)
  • query expressions
  • anonymous types

δείχνοντας παράλληλα demos για αυτά, αλλά και αναφέροντας τι γίνεται κατά το compile προκειμένου να δουλέψουν αυτές οι καινοτόμες λειτουργίες (μιας και ο κορμός του .NET Framework, το CLR, δεν αλλάζει στο .NET 3. Απλά προστίθενται νέες κλάσεις και βιβλιοθήκες στο Framework). Τόνισε, παράλληλα, πως η νέα έκδοση της C# κατασκευάστηκε με έμφαση στα

  1. βελτιώσεις στη C# 2.0
  2. LINQ
  3. 100% backwards compatibility

Τα lambda expressions ήταν το θέμα του επόμενου sample. Αρχικά μίλησε για τις διαφορές με τα anonymous methods της C# 2.0 και γιατί τα lambda expressions είναι καλύτερα (αν και ο τρόπος λειτουργίας τους είναι πανομοιότυπος). Στη συνέχεια, έγραψε αρκετό κώδικα με τον οποίο δημιούργησε το Where αλλά και ένα Func<T>, για να μας δείξει πως δουλεύουν εσωτερικά τα lambda expressions, χρησιμοποιώντας χαρακτηριστικά της C# 2.0, όπως το generic interface implementation αλλά και το yield statement. Στο τέλος αυτού του sample, υλοποίησε και τη μέθοδο Select, με τη χρήση generic delegates.

Κατόπιν, έκανε refactor την Select και την Where, με χρήση των predefined Func delegates του .NET 3.5. Αφού λοιπόν τις έφτιαξε, ανέφερε το πρόβλημα του να μπούνε στο IEnumerable<T>. Μία αλλαγή που αν γινόταν, ίσως να έσπαγε υπάρχον κώδικα. Και έτσι γεννήθηκαν τα extension methods. Με μια σύντομη περιγραφή, μας εξήγησε ότι δεν σπάνε το encapsulation καθώς δεν μπαίνουνε private ή protected μέλη. Εξάλλου, κατά την ανάπτυξη του LINQ, usability tests απέδειξαν πως η συναρτησιοειδής κλήση μεθόδων (με χρήση .Where και .Select) δεν βολεύει και τόσο. Και έτσι γεννήθηκε η LINQ sql – like σύνταξη.

Τέλος, μας περιέγραψε τα Expression Trees και πως αυτά αποθηκεύουν τη lambda έκφραση και τη μετατρέπουν σε ένα object tree με σαφή δυνατότητα parsing. Σε demo, έφτιαξε τη συνάρτηση διαδοχής ( f(n) = n+1), μας έδειξε πόσο απλά μπορούμε να δούμε το body και τις παραμέτρους που έχει το lambda, αλλά και πως με τη χρήση της συνάρτησης .Compile() μπορεί να μας γυρίσει τον αντίστοιχο delegate.

Πάρα πολύ καλή η παρουσίαση, ομολογώ ότι περίμενα να δω κάτι για την υλοποίηση του IQueryable<T>, αλλά δυστυχώς ο Hoban δεν εμβάθυνε τόσο πολύ.

Το τελευταίο session που παρακολούθησα σήμερα είχε τίτλο “Implementing Workflow Enabled Services and Durable Services using .NET Framework 3.5”. Εισηγητές οι Justin Smith και Matt Winkler.

Ο στόχος της παρουσίασης ήταν να μας δείξει πως το Workflow Foundation και το Windows Communication Foundation μπορούν να ζήσουν αρμονικά. Έγινε μια μικρή επανάληψη στο από τι αποτελούνται τα δύο προαναφερθέντα frameworks. Κατόπιν, ο Justin μας περιέγραψε τα message exchange patterns, τα data formats, τα transport methods και την αρχιτεκτονική του WCF, καταλήγοντας στο ότι τα σημαντικά σημεία είναι

  • ABC (Address, Binding, Contract)
  • Service Contract (Interface)
  • Service Type (Class implementing Interface)

Στη συνέχεια, έγινε μια περιγραφή της αρχιτεκτονικής του runtime του Windows Communication Foundation, με άμεσο συμπέρασμα ότι πριν την έλευση του .NET 3.5, ήταν δύσκολη η συνεργασία του Workflow Foundation με το Windows Communication Foundation. Ακολούθησε μια περιγραφή της αρχιτεκτονικής του Workflow Foundation αλλά και περιγραφή των additions που φέρνει το .NET 3.5, όπως τα νέα activities Send και Receive.

Μετά, μας μίλησε για Workflow Services Approaches, και πιο συγκεκριμένα, για το πως μπορούμε να υλοποιήσουμε μία υπηρεσία σαν ένα Workflow, αλλά και πως μπορούμε να κάνουμε host ένα workflow από ένα service.

Τέλος, ανέβηκε στο βήμα ο Matt, όπου και μας παρουσίασε διάφορα demos για τα παραπάνω. Στο πρώτο, βέβαια, του βάρεσε ένα ωραίο SOAPException το οποίο απέφυγε κακήν κακώς να το σχολιάσει, επηρεασμένος προφανώς από κάποιες κακοτυχίες που του τύχανε σε χθεσινές παρουσιάσεις! Τα υπόλοιπα demos, βέβαια, εξελίχθηκαν απόλυτα ομαλά. Αυτά αφορούσαν

  • WCF Service Library hosting a Workflow ready client
  • DurableService και DurableOperation attributes, SQL Persistence (το πιο εντυπωσιακό απ’όλα)
  • Περιγραφή του context exchange με custom database repository
  • Duplex communication (multithreaded operation με multiple clients)

Πολύ ωραία τα σημερινά sessions, ανυπομονώ για τα αυριανά!!!

ΥΓ. Το σημερινό φαγητό δεν μου άρεσε καθόλου. Και ναι, απεχθάνομαι τα θαλασσινά!!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s