TechEd BCN 2007 – LINQ to XML

november 8, 2007 od Ales

Predavatelj: Mike Taulty, Developer and Platform Group Microsoft UK

LINQ to XML je “DOM like” API, kar pomeni, da nalozi celotno XML drevo v pomnilnik in ga nato maniplira. Dela tako s celimi dokumenti kot s fragmenti. Dva kljucna razreda sta XElement in XAttribute.

Kreiranje

XElement root = new XElement("root");
XElement child = new XElement("child");
XAttribute attr = new XAttribute("attr", 104,5m);
root.Add(child);
root.Add(attr);

Branje

XElement.Load();
XDocument.Load();

Obe metodi podpirata branje iz URL-ja, XmlReader-ja, TextReader-ja. XElement ima več metod za navigacijo po “oseh”:

XElement.Descendants();
XElement.Ancestors();

LINQ pozna dva načina izvajanja poizvedb: del za delom (nad razredi, ki implementirajo IEnumerable) in vse v enem kosu (nad razredi, ki implementirajo IQueryable). LINQ to XML uporablja prvega (del za delom). Podpira vse lastnosti LINQ-a, kot so uporaba metod, kot je Distinct(), group by, join in podobno.

XElement data = XElement.Load(fileName);
var query = from c in data.Descendants("custmer")
    select (string) c.Attribute("id");

Spreminjanje

XML drevo ni samo za branje. XElement ima cel kup zanimivih metod, ki pridejo zelo prav pri manipuliranju drevesa:

XElement.Add();
XElement.Remove();
XElement.ReplaceWith();
XElement.AddBeforeSelf();
XElement.AddAfterSelf();
XElement.RemoveAttributes();
XElement.RemoveNodes();

Visual Basic ima še boljšo podporo za XML, saj je XML postal del jezika. VB sedaj tako pozna “XML literals”. Le ti omogočajo, pisanje kode, kot je ta:

Dim root = <root>
              <child>Value</child>
           </root>

Za boljšo podporo pri delu z velikimi XML dokumenti obstaja razred XStreamingElement.

Delo s shemami

Validacijo drevesa v XElement-u in XDocument-u lahko izvedemo s pomočjo metode .Validate.

XmlSchema schema = LoadSchema("file.xsd");
customers.Validate(schema, ValidationErrorHandler);

Oznake in dogodki (Annotations and events)

XML drevo lahko označimo s poljubnim objektom. Prav tako lahko s pomočjo “event handler”-jev zaznavamo spremembe v drevesu.

Povezave:

http://mtaulty.com

TechEd BCN 2007 – Unit Testing Tips, Tricks and Common Sense

november 7, 2007 od Ales

Predavatelj: Roy Osherove

Dnevni red predavanja smo ustvarili udeleženci sami s predlogi in glasovanjem zanje. Ker je bilo premalo časa, smo predelali le 5 tem.

Testiranje uporabniškega vmesnika

Ne priporoča avtomatiziranega testiranja uporabniškega vmesnika, ker zahteva preveliko vložka za premalo rezultatov. To testiranje naj bi opravljali ljudje. Priporoča pa uporabo vzorcev kot sta MVC (Model-View-Controller) in MVP (Model-View-Presenter).

Testiranje podatkovnega nivoja (DAL) in podatkovne zbirke

DAL naj bi vedno testirali skupaj s podatkovno zbirko, ker le na ta način lahko stestiramo tudi stvari, ki so v sami zbirki (triggerji, stored procedure, …).

Pri tem testiranju se tudi pojavlja problem zagotavljanja neodvisnosti testov (kako zagotoviti, da en test ne bo vplival na drugega). V ta namen svetuje uporabo razreda TransactionScope (je v .NET 2.0 in naprej). Prav tako priporoča uporabo osnovnega razreda v katerem implementiramo to logiko transakcij (in drugo, ki je skupna vsem testom), in iz katerega podedujemo vse ostale, ki implementirajo teste.

Nekaj časa je porabil tudi za priporočila glede poimenovanja testnih metod. Ime naj bi bilo sestavljeno iz treh delov:

  • imena metode, ki jo testiramo
  • scenarija: pod kakšnimi pogoji naj se prej omenjena metoda izvede
  • obnašanja: kaj naj se zgodi ob takih pogojih
[Test]
public void DoSomeLogic_NullMsg_ThrowException();

Testiranje večnitnih aplikacij

Na njegovi spletni strani je na voljo knjižnica (ThreadTester), ki olajša to delo. Pri testiranju niti pravzaprav ne gre za “unit testing” temveč za integration testing, ker zadeve niso 100% ponovljive (zagotoviti želimo samo, da ne pride do “race condition-ov”).

NUnit Vs. MbUnit Vs. MStest 2008

MSTest < NUnit < MbUnit

Za začetnika priporoča uporabo NUnit-a, ko pa naleti na omejitve oz. ga že dovolj obvlada, pa naj preide na MbUnit.

Povezave:

http://www.iserializable.com

http://www.nunit.org

http://www.mbunit.com

http://www.testdriven.net

TechEd BCN 2007 – Microsft Visual C# Under the Covers: An in-depth Look at C# 3.0

november 7, 2007 od Ales

Predavatelj: Luke Hoban, Program Manager, Microsoft

Auto-implemented properties

Namesto

public Class Point {
   private int x;
   private int y;
   public int X { get { return x; } set { x = value; } }
   public int Y { get { return y; } set { y = value; } }
}

sedaj lahko pišemo

public Class Point {
   public int X { get; set; }
   public int Y { get; set; }
}

Object initializers

var r = new Rectangle {
   P1 = new Point { X = 0, Y = 1 },
   P2 = new Point { X = 2, Y = 3 }
};

Collection initializers

var contacts = new List<Contact> {
   new Contact {
      Name = "Chris Smith",
      PhoneNumbers = { "206-555-0101", "425-882-8080" }
   },
   new Contact {
      Name = "Bob Harris",
      PhoneNumbers = { "650-555-0199" }
   }
};

Local variables type inference

// namesto
Dictionary<int, SomeType> myCol = new Dictionary<int, SomeType>();

// sedaj lahko napišemo
var myCol = new Dictionary<int, SomeType>();

Query expressions

from c in customers
group c by c.Country into g
select new { Country = g.Key, CustCount = g.Count() }

Anonymous types

var p1 = new { Name = "Lawnmower", Price = 495.00 };
var p2 = new { Name = "Shovel", Price = 26.95 };
p1 = p2;

Lambda expressions

x => x + 1                     // Implicitly typed, expression body
x => { return x + 1; }         // Implicitly typed, statement body
(int x) => x + 1               // Explicitly typed, expression body
(int x) => { return x + 1; }   // Explicitly typed, statement body
(x, y) => x * y               // Multiple parameters

Extension Methods

Omogočajo razširitev že obstoječih tipov z dodatnimi metodami. Spodaj je primer razreda z dvema takima metodama:

  namespace Acme.Utilities
{
   public static class Extensions
   {
      public static int ToInt32(this string s) {
         return Int32.Parse(s);
      }
      public static T[] Slice<T>(this T[] source, int index, int count) {
         if (index < 0 || count < 0 || source.Length – index < count)
            throw new ArgumentException();
         T[] result = new T[count];
         Array.Copy(source, index, result, 0, count);
         return result;
      }
   }
}

Expression Trees

Omogočajo, da so lambda izrazi predstavljeni kot podatki in ne kot koda.

Func<int,int> f = x => x + 1;                  // Code
Expression<Func<int,int>> e = x => x + 1;      // Data

Partial Methods

Implicitly-Typed Arrays

TechEd BCN 2007 – WHY SOFTWARE SUCKS and what you can do about it?

november 6, 2007 od Ales

Predavatelj: David S. Platt

Najboljše predavanje do sedaj. Kljub temu, da je predavanje potekalo v času kosila, je bila predavalnica polna.

Večina uporabnikov misli, da je programska oprema, ki jo uporabljajo zanič. Po predavateljevih besedah je razlog v tem, da ne poznamo uporabnikov naših programov.

Plattov zakon: Poznaj svojega uporabnika, saj ni ti.

Pokazal je nekaj primerov dobrih in slabih rešitev na spletnih straneh in programih.

Za izboljšanje stanja, bi pri načrtovanju morali upoštevati naslednja pravila:

  1. Add a virgin to design team. (“Virgin” je nekdo, ki še ni bil izpostavljen/ne pozna delovanja programa.)
  2. Break convention when needed.
  3. Don’t let edge cases complicate the main stream
  4. Instrument – Carefully
  5. Always ask yourself: Is this individual design decision taking us closer to “just working”?

Povezave:

www.suckbusters.com

http://www.webpagesthatsuck.com/dailysucker/

TechEd BCN 2007 – Improvements in Visual Studio 2008 and .NET Framework 3.5 for Windows Mobile Developers

november 6, 2007 od Ales

Predavatelj: Andy Wigley, Device Application Development MVP, CEO Wigley Computing Limited

V VS 2008 je novo:

  • Podpora za “unit testing”
  • Device Security Manager: omogoča “igranje” z varnostnimi nastavitvami naprave. Vse naprave nimajo enakih varnostnih nastavitev, npr. nekatere ne dovoljujejo namestitve programov, ki niso podpisani.
  • Device Certificate Manager
  • Managed Core Connectivity Framework: z njim lahko izdelujemo lastna “remote” orodja; interno ga že uporablja VS.
  • Device Emulator 3.0: možnost, da ga preko “automation”-a upravljamo iz naših lastnih aplikacij, konfiguracija lastnih “custom” emulatorjev
  • SQL Server CE 3.5

Novosti v CF 3.5:

  • Podpora za LINQ (niso podprti LINQ to SQL, LINQ to entities, Expression Trees)
  • WCF podpora (tudi preko elektronske pošte)
  • CLR profiler
  • Podpora za kompresijo
  • Sound API
  • Izboljšave v razhroščevalniku
  • Kot dodaten download je na voljo .NET CF Power Tools 3.5, ki vsebujejo še .NET CLR Profiler, .NET CF Log Viewer, Logging Configuration Tool, Remote Performance Monitor

Povezave:

www.opennetcf.org

TechEd BCN 2007 – Building Mobile Windows Forms Applications: Tips, Tricks and Guidelines

november 6, 2007 od Ales

Predavatelj: Daniel Moth, Developer and Platform Group, Microsoft

  • Pomisli kako se aplikacija obnese, če jo uporabljaš stoje z eno roko in ne za mizo, ko vnašaš podatke z navadno tipkovnico
  • Ne skušaj narediti “full screen” aplikacije
  • Ne skrivaj naslovne vrstice (“title bar”)
  • Ne skrivaj spodnje vrstice
  • V vseh oknih v aplikaciji uporabljaj isti naslov (“title”)
  • Ne uporabljaj “toolbar” gradnika (da se narediti, da v prihodnjih verzijah sploh ne bo več podprt)
  • Ne imej več kot 2 menija (tako sta lahko vezana na “soft key”)
  • Gradniki na katere lahko kliknemo (so “tappable”) naj bodo pri pri dnu okna
  • Gradniki v katere vnašamo podatke ali kakorkoli drugače potrebuje SIP naj bodo pri vrhu okna
  • Vedi kakšna je razlika med zapiranjem in deaktiviranjem okna
  • Uporabljaj “docking” in “anchoring”, da bodo okna pravilno delala na različnih velikostih zaslonov, orientacijah, resolucijah
  • Ne uporabljaj “popup” menijev, ker jih je težko uporabljati
  • Poskusi narediti aplikacijo, ki se zgleduje po Smartphone-u, ki nima “touch screen”-a in je tako potrebno vse storiti s tipkovnico in v večini primerov z eno rokoč. Pri tem je zelo pomembna pametna uporaba “soft key”-ev.
  • Uporabi niti za osveževanje uporabniškega vmesnika
  • Niti naj bodo “background” niti

Thread t;

t.Name = “MyThread”;

t.Background = true;

  • Uporabljaj orodja, ki so na voljo v VS kot so npr. Remote Tools (File Viewer, Process Viewer in drugi).
  • Ustrezno reagiraj na WM_HIBERNATE

Povezave:

http://www.danielmoth.com/blog

http://blog.markarteaga.com

http://blogs.msdn.com/netcfteam

TechEd BCN 2007 – The .NET Language Integrated Query Framework

november 6, 2007 od Ales

Predavatelj: Luca Bolognese, LINQ Lead Program Manager

LINQ naj bi spremenil način kako pišemo kodo, saj naj bi do vseh virov podatkov od sedaj dostopali na enak način. “Iz škatle” so na voljo:

  • LINQ to Objects
  • LINQ to Datasets
  • LINQ to SQL
  • LINQ to XML

Ker pa je zadeva razširljiva je možno napisati tudi svoje providerje. Da so lahko razvili LINQ so morali precej razširiti tudi C# in VB. Tako so v C# 3.0 sedaj na voljo “automatic properties”, “lambda expressions”, “object initializers, anonymous types”. VB pa ima dodanih še nekaj sladkorčkov kot npr.:

Dim xml = <Bla><Krneki></Krneki></Bla>

XML je postal del jezika.

Predavatelj me je spominjal na poročnika iz “Allo, Allo”, saj je imel isti naglas. Imel je samo 3 slide, nato pa je bil celo uro v VS. Uporabljal je snippete, tako da mu je bilo na trenutek kar težko slediti. Kljub temu mislim, da je svoje delo opravil odlično. Glede na videno me je kar prepričal, da je LINQ prava stvar (LINQ to XML bi lahko uporabili v NiceFormu ali v PocketFormu).

TechEd BCN 2007 – Building Complete Web Application Using ASP.NET 3.5 and VS 2008 (part 2)

november 6, 2007 od Ales

Predavatelj: Omar Khan, Group Program Manager, Visual Studio

V drugem delu predavanja je predavatelj najprej govoril o novih podatkovnih gradnikih v ASP.NET 3.5 kot so ListView, LinqDataSource in DataPager.

Nato je predstavil ASP.NET AJAX in ASP.NET AJAX Controlkit in boljšo podporo za JavaScript v VS 2008. Pokazal je tudi kako enostavno je narediti “extender”-je obstoječih gradnikov. V AJAX Controlkit-u je na voljo več kot 15 extenderjev samo za TextBox (všeč so mi bili npr. AutoCompleteExtender, FilteredTextBoxExtender in TextBoxWatermarkExtender).

Predavanje se je zaključilo s hitrim pregledom novosti v IIS 7.

Na splošno s predavanjem (obema deloma) nisem bil zadovoljen, ker sem imel občutek, da ni bilo najbolje pripravljeno pa tudi demoti niso šli skozi brez problemov.

TechEd BCN 2007 – Building Complete Web Application Using ASP.NET 3.5 and VS 2008 (part 1)

november 6, 2007 od Ales

Predavatelj: Omar Khan, Gropu Program Manager

Visual Studio 2008 podpira različne verzije .NET Framework-a (2.0, 3.0. 3.5). Glede na izbrano verzijo so nato vidne samo tiste stvari, ki so podprte v tisti verziji. Tako imaš lahko nameščeno samo eno verzijo Visual Studia.

HTML editor in designer sta precej izboljšana:

  • Preklaplanje med kodo in vizualnim delom je hitrejše (vidna sta lahko tudi oba naenkrat, kar dosedaj ni bilo mogoče).
  • Končno so podprte gnezdene master strani
  • Podpora za CSS se mi je zdela zelo dobra

Nato je predavatelj govoril tudi o zgodovini dostopa do podatkovnih zbirk in tako napeljal zgodbo do LINQ-a. Ker pa je bil LINQ tema naslednjega predavanja pa več o tem v naslednjem poročilu.

Koristne povezave:

Open Source Web Design

TechEd BCN 2007 – Uvodno predavanje

november 6, 2007 od Ales

Uvodno predavanje z naslovom “Building Great Applications” je imel Soma Somasegar (Corporate Vice President of the Developer Division, Microsoft Corporation).

Najbolj zanimiva novica s predavanje je predvsem ta, da bosta Visual Studio 2008 in .NET Framework 3.5 na voljo MDSN naročnikom še pred koncem tega meseca.

Govoril pa je tudi o:

  • Preteklih rezultatih: Visual Studio (VS) uporablja več kot 1 milijon profesionalnih uporabnikov (25% od njih uporablja VS Team Foundation Server), zastonjske verzije beležijo 17 milijonov downloadov
  • Ciljih v prihodnosti
  • Novostih v VS 2008
  • Novostih pri vsebinah, ki jih nudi MS: MSDN naj bi postal platforma za celotno skupnost. V ta namen imajo oz. še pripravljajo MSDN Code Gallery (prihaja v kratkem), MSDN Wiki, Translation Wiki
  • Novih izdelkih: MS Sync Framework, Software and Services Blueprints
  • Prihodnjih verzijah VS in Expression Studia

V okviru predavanja sta bila prikazana tudi 2 demota: prvi je bil na temo novosti v VS 2008, v drugem, ki se mi je zdel pa še bolj zanimiv je bila prikazana možnost razširitve/prilagoditve VS – AddOn Studio for World of Warcraft. Gre za open source orodje, ki omogoča izdelavo dodatkov za igro World of Warcraft. Menda sta ga dva človeka izdelala v parih tednih. Narejeno je na osnovi VS, za skriptni jezik pa uporablja LUA.

Oznanjen je bil tudi MS PopFly Explorer Beta, ki je od danes na voljo. PopFly je “mashup” urejevalnik, ki omogoča izdelavo spletnih strani, ki podatke pobirajo iz različnih virov (npr. iz Google Maps, Facebook, Amazon, …).

Koristne povezave s predavanja:

http://www.popfly.ms

http://www.microsoft.com/vstudio