Linq to Entities: Microsoft’s first go at O/R Mapping (they need our feedback now!) – level 300

First, none of this is NDA.  Others discussing it are Ayende and Sam.   Here's a quick rundown of how you would get Linq to entities working:

  • Create the metadata file using the wizard.
  • Select some database tables to map to objects.
    • Wait for the designer to generate the mapping meta data.
    • Wait for the designer to generate some partial classes that might serve as entity objects.
  • Add code to these new classes to do interesting things within your domain.
  • Using Linq queries to work with these objects and watch the SQL be generated and sent to the database.

This sounds easy  when you remember that the designer is generating all the ugly goo that _has_ to be there.  First, the classes must inherit from the mapping base class.  They are working on a way to make it implement an interface instead.  This is a non-starter first of all because it would require the domain assembly to carry around a reference to a data access dependency.  Next, for dirty-tracking, each property mutator must raise an event to let the framework know that a property changed.  Every property.  Let me repeat:  Every property setter must raise an event for dirty tracking to work.  This is another non-starter.  The team plans to have all this generated for you in partial classes. 

I have email addresses for several people on the team, and I'll be letting them know what is so compelling about NHibernate and why the above issues have to be resolved before RTM and not after.

In some cases, you don't care if the classes are data-transfer objects instead of domain objects.  In that case, use Linq to SQL, not Linq for Entities.  With Linq to SQL, you can use DTOs all over the place and work with the data pretty easily.  Heck, you could even use Linq to SQL to create your own data layer for hydrating your domain objects manually from the DTOs you decorate with the Linq to SQL attributes.

Linq to Entities is a different animal and is meant to persist domain objects.  Domain objects ARE the most important part of the application.  The domain defines the business problem scope.  Persisting to a data store is secondary to the domain model's structure and behavior. 

I want Linq to Entities to succeed.  I want frameworks and tools to continually get better; therefore, I will be communicating with the product team to voice my strong concerns over the current direction.

Vote for my Tech Ed 2007 Birds of a Feather sessions – level 100

It’s time to vote for Tech Ed BoFs.  Go here to vote. https://www.msteched.com/BOF/Voting.aspx

My submitted BoFs are as follows.  Please vote for them.

  • Techniques for writing less code (frameworks, libraries, and tools)
  • Join C# MVP Jeffrey Palermo for a lively discussion on frameworks, libraries, and tools that enhance productivity by reducing the amount of code required to deliver the same functionality in a program. The list is not a closed list. Attendees are expected to share success/horror stories about the frameworks, libraries, and tools they’ve used. Come quickly find out the secrets they won’t teach you in training courses.

  • Agile development with .Net
  • Agile development methodologies are gaining more and more traction in the software industry. Join Jeffrey Palermo and many others for this popular BOF that has attracted 70+ attendees in past Tech Eds. We’ll discuss basic principles of Agile development including people over process and delivering working software at the beginning of a project, not just at the end. We’ll share common successes and challenges from all the attendees, so bring your story.

Adobe’s Photoshop CS3 developed using Agile – level 200

I got the link from the AgileAustin online group:  http://groups.google.com/group/AgileAustin/t/e0370f2d6a210e40

A new VP at Adobe has introduced Agile methods to the Photoshop group, and they turned from waterfall to agile. . . with commendable results:  fewer late nights, work weekends. . .and. . . wait for it. . . fewer bugs with the same feature load delivered on schedule.

This is very important to me since I manage the Engineering department at Vital Insight, Inc.  It’s a given that my department is much smaller than the Photoshop department, but this is evidence that Agile methods scale from the small teams on up to very large organizations.

Read the full article here:  http://www.regdeveloper.co.uk/2007/03/08/adobe_cs3_development/

Scott Guthrie on integrating ASP.NET security with classic ASP – level 300

This is not a trivial topic, but it’s necessary at times to have classic ASP pages controlled by security in ASP.NET.  Scott gives some tips on how to accomplish this.

Scott also refer’s us to Stefan Schackow’s excellent book: ASP.NET 2.0 Security, Membership, and Role Management.  This is really a GREAT book.  I’ve read every word of it.  In fact, I was a technical editor for the book, so I can attest to its excellent technical content and depth.

What would I do without an automated refactoring tool? – level 200

Today, I made a commit to Subversion that encompassed over 200 code files.  What was the change?  I moved a delegate from sharing a code file with a class to be in its own file and put it in another namespace.  Pretty harmless change, but so much code uses this very common delegate.  As you know, I'm using Resharper, so here are my keystrokes:

  • F6 to "move" the Type.
  • TAB
  • down arrow (to move delegate to new file).
  • ENTER
  • F6 (to move to new namespace)
  • {type in new namespace}
  • . . . wait 10 seconds for Resharper to make appropriate changes to "using" statements in over 200 code file.
  • CTRL+SHIFT+S (save all)
  • CTRL+SHIFT+B (compile)

I run my automated build (with 1450+ test), and check in.

I remember back to when I didn't use a refactoring tool.  You know what I would have done?  I wouldn't have made the change.  The overhead would have been too great.  I would have left the misplaced delegate definition.

Please.  Do yourself a favor.  Don't develop with POVS (plain old Visual Studio).  Use a coding add-in.  Use Resharper.  Use CodeRush/Refactor.  Use JustCode!  Use something! 

Gmail has been down all day! 3/1/2007

I use Gmail for most of my mail these day.  Today has been hard.  Gmail has been down since mid-morning, so I can’t access my mail.  Not with FireFox, not with IE, not with WAP, not with the Java Mobile phone applet I have. 

With all the rave about software as a service and applications and data “out there in the cloud”, this highlights a downside – there is no one I can call, no one I can fire for this mishap.  My only recourse is to wait, and wait, and wait. . .and then switch to another email account!

Just passed 1400 automated test cases – level 200

I just HAD to write this up.  My company’s software has just crossed the 1400 automated test cases line.  I still remember when the software was new and when I was coaching my team on why we should write unit tests.  Now, the number of tests just climbs and climbs.

We have 1417 (as of right now) NUnit unit tests, NUnit integration tests and FIT integration tests.  We test the following types of things:

  • That each public method of each class does the right thing.
  • That each database table is the correct structure and has the right permissions.
  • That each NHibernate mapping is configured correctly.
  • That each logical service does the right thing.
  • That the system as a whole operates when integrated.

Party with Palermo: MVP Global Summit edition – official announcement updated

Party with Palermo

Party with Palermo: MVP Global Summit edition (220+ and
climbing)
website:  http://partywith.palermo.cc
March
11th, 2007 @ 7PM – 11PM
Jillian's Billiard club –
http://www.jilliansbilliards.com
731 Westlake Ave N
Seattle, WA 98109
(206)
223-0300

Bring a business card to drop in the pot for door prizes!!!!

  • Prizes:  1 XBox360 (courtesy of PreEmptive) , 1 license of ActiveReports.Net
    3.0 Standard.
  • Free to attend
  • Free pool
  • Free food
  • Free drink
  • Free t-shirt
  • Free swag
  • Any MVP gets a free license of Dotfuscator Profession from PreEmptive
  • Any MVP gets a free license of Telerik's control suite.
  • Any MVP gets a free license of DeveloperExpress' product line.
  • Any MVP gets a free license of JetBrains Resharper
  • Newsgator Premium (Newsgator Inbox,
    FeedDemon and Newsgator Go) free for the first 500 attendees.

Sponsors:

I'm going to maintain a list of everyone who has indicated they are
coming.  Please let me know if you are coming so I can plan accordingly.

Jeffrey Palermo (host)
Carl Franklin (.Net Rocks –
DNR)
Lorenzo
Barbieri

Bil Simser
Don Demsak (DonXml)
Sam Gentile
Mark Miller
Jeff Lynch
Noah Coad
Miguel Castro
Darrell
Norton

Keith Elder
Scott Hanselman
Scott Watermasysk
Mighell
Paul Ballard
Brian
Noyes

Brendon
Schwartz

Marc Adler
Nick
Parker
Dave Laribee
Jean-Paul S. Boodhoo
Raymond Lewallen
Tomas
Restrepo
Scott Bellware
Jeremy
Miller

Rob Howard
Javier G.
Lozano
Mario Cardinal
Milan Negovan
J. Michael Palermo IV
James
Kovacs
Shawn Weisfeld
Jeff Julian
Miguel Jimenez
Jim Wooley
Jim Duffy
Rod Paddock
Etienne Tremblay
William (Bill) Vaughn
Claudio Lassala
David Silverlight
Riccardo Golia
Daniele Bochicchio
Jon Flanders
Alan Griver
Beth Massi
Walt Ritscher
Dennis Vroegop
Sander Gerz
André Obelink
Armand du Plessis
Ernst Kuschke
Mauro Servienti
Ian Cooper
Samer Chidiac
Wessam Zeidan
Doug Seven
Chris Brandsma
Frans Bouma
Tim Gifford
Miha Markic
Peter Ritchie
Jorge Serrano
Tim Shakarian
Ivan Gonzalez
Rodrigo Corral
Marco Amoedo
Pablo Pelaez
Martin Woodward
Joe Brinkman
Ngoc-Huong
Nguyen
David M. Kean
Mateusz Kierepka
Karl Sequin
Leigh
Pointer
Rob Farley
Darren Gosbell
Maarten van Stam
Yonghyun
Kim
Paulo Morgado
Chris Dufour
João Pedro Martins
Hilton
Giesenow
Oliver Sommer
Scott Willhite
Rob Windsor
Aaron
Jensen
Jose Luis Manners
Kevin McNeish
Shawn
Wildermuth
Aneesh
Anjana
Cristian Civera
HimaBindu Vejela
Jason
Olson
Keith Rull
Shreeman
Greg Low
Laurent Duveau
Stuart
Celarier
Mike Ryan
Erik
Porter
Deepak Kumar
Vasudevan
Rich Claussen
Rory Blyth
Lorenzo Benaglia
Luca
Spolidoro

Cathal Connolly
Chris Tavares
Jim Zimmerman
Luca Bianchi
Adam
Kinney
Josh Holmes
Denny
Boynton
Andrea Gallazzi
Cory
Smith

Tobin Titus
Mark
Rosenberg
Savas
Parastatidis

Andrea Montanari
Scott Koon
Doug Robbins
Gerardo Fransecky
Michal
Stanislawek
Woody Pewitt
Daniel
Larson
Bob Mixon
Eduardo Quintás
Eli Robillard
Caleb
Jenkins
Rafael Munoz
Scott
Nonnenberg
Serge Baranovsky
Misha Zhutov
Dmytro Lapshyn
Richard
Campbell
Gregorio P
Kirk
Jackson
Craig
Murphy
Victor Garcia Aprea
Fernando Garcia
Roberto Hernández
Humberto Martinez
Gabriel Torok
Bill Leach
Sebastian Holst
Sandy Khaund
Vishal Singh
Jose Alarcón
James Newkirk
Brad Wilson
Piotr
Dobrowolski
Fabio Camara
Mauro SantAnna
Ramon
Durães
José Antonio Leal de
Farias
Aurelio Minerbo
Wallace Santos
Daniel Cazzulino
Ricardo
Oneda
Wesner Moise
Hugo
Kornelis
Nilton
Pinheiro
Ricardo Oneda Pereira de
Toledo
Fernando Guerrero
Brian Loesgen
Leonardo
Tolomelli
Abhilah M
Shanmugan
Michael Wiley
Chris
Muench
Amy Bang
Ronald van der
Putten
Dwayne Lamb
Jason Alexander
Fabio Vazquez
Hugo
Rodríguez
Jaun Pablo
García
Ruben Dario Sanchez
Abhilah M Shanmugan
Pilar Mueckay
Todd
Bohlen
Steven Smith
Jose
Berrios
Miguel Mendoza
Ryan Olshan
Matt Cassell
Keith Nicholson
Ricardo Gonzalez
Sean O'Driscoll
Morten
Wennevik
Blake McNeill
Asia Grzywna
Daniel Matey
Octavio Hernandez
Angel Hernández
Manuel
Mendez F.
Yonathan Arrivillaga
Pat Wright
Leandro SGallari
Reymarx
Gereda
Bruce Thomas
Oscar
Soto Casali

Bonnie Berent
Joe
Fawcett

Nick Gillott
Scott Dockendorf
Luis Fraile
Laura E. Hunter
Mark Arnold
Joel Semeniuk
Brian Baker
Simon Sabin
Julio Campos
Tim Landgrave
Sondre Bjellås
Miha Pihler
Bruce Hopkins

Are you a developer-tester or tester-developer? – level 200

Every programmer tests, but does every tester program?  I submit that the good ones do. 

Jason Darling sent me these two great articles that dig deeper into this discussion.

http://www.testobsessed.com/2007/01/17/tester-developers-developer-testers/
http://chrismcmahonsblog.blogspot.com/2007/01/developer-testers-and-tester-developers.html