Monday, September 17, 2007

This a job with one of my mentoring clients, Co-Operative Insurance. I absolutely love going to their office and working with these people. It's a small team in a large company. Nice, friendly folks. And it's in Middlebury which is a great place to work.

Web Application Development

Excellent opportunity for a qualified programmer with web application design, development, and implementation experience!

Work on the complete product development lifecycle of our B2B extranet, including requirements gathering, technical design specification creation, coding, testing, deployment, post-production support, documentation and maintenance.

Must have 2-5 years’ development experience with Visual Studio 2003/2005 as well as JavaScript, (X)HTML, ASP.net, VB.net and XML. Pluses include insurance industry knowledge and experience with CSS and with version control software such as SourceSafe or Vault. Solid UI design skills get you multiple pluses.

To join our hard-working, fun IS team in producing quality apps, you must be an organized, self-motivating team player, an excellent communicator and attentive to detail. You must be willing and able to work both independently and with a team, depending on the assignment.

Co-operative Insurance Companies is a $50 million property and casualty insurer in VT and NH.  We offer a competitive benefits package and a schedule that allows for work/life balance.

For immediate consideration, please forward a copy of your resume to jobs@ciui.net.

Monday, September 17, 2007 12:20:58 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

We are really looking forward to this talk by Mark Mullin tonight at VTdotNET!

We also have some great WCF books to give away: Learning WCF by Michele Leroux Bustamante (thanks OReilly and INETA) and Pro WCF: Practical Microsoft SOA Implementation from APress.

Thanks to Infragistics, we will be raffling off two licenses to NetAdvantage for .NET. One of the raffles will actually be a fund-raising raffle.

We also have shirts and swag courtesy of CodeZone and piles of CoDe Magazine and aspnetPRO to give away.

And thanks to Verio's sponsorship of INETA, I am able to offer Verio's free webhosting to Vermont .NET members who show up at the meeting tonight.

Since it's such a nice day (and I have just absolutely NO work to do ;-)), and Mark is being so generous with his time (driving up from New Hampshire) and cash (there's gas $ and hotel involved), I am going to take him on a 1.5 hour cruise on Lake Champlain aboard the Spirit of the Ethan Allen this afternoon. Hey, running a user group is HARD work, y'know?

Monday, September 17, 2007 11:15:14 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Sunday, September 16, 2007

Loren Heiny has been working on a cool Silverlight annotation app to user Silverlight and a stylus to do Google and Technorati searches. It's called SearchTip and is live on TabletPC Post.

There is a lot that is really interesting about this. (And it's visually appealing too!) First of all, he has a YouTube video where he compares using this (earlier version) on a Mac to using Inkwell on the Mac (when you have a tablet ala Wacom attached to the Mac) and demonstrates the superiority of Microsoft's handwriting recognition. I was lucky enough to attend an SDR at Microsoft a few years ago where the man who ran the whole reco team explained to us how they made it all work. I can't imagine anybody being able to come close to their investment or acheivement with handwriting recognition, so it was great to see Loren being able to really compare apples to apples (no pun originally intended, but oh well!)

Next is the fact that Loren is doing handwriting recognition from the InkPresenter in Silverlight. Not an easy feat. Once the reco is done, the result can get passed to a google service and voila you get your results displayed.

Loren has done some amazing work with the Tablet APIs for a number of years and always thinks out of the box. So I love that he's taking his ideas and applying them to Silverlight.

 

Of course, you don't need a tabletpc to draw in silverlight, but as awesome as the recognition is, I don't think it's fair to ask it to recognize mouse drawn handwriting. But it's not bad. Reco returns a list of guesses, sorted by best to worst. Here I'm using an earlier version which does google searching and trying it with my mouse on a regular (non-tablet) desktop.

So you can click on the guess (I clicked on Steins) and it will show you the next guess on it's list. Heinz was next, then a few more clicks (just to see) got me off the track. oops. This is not a reflection of the reco or of Loren's app. I'm only playing around with the mouse for fun (and laziness since my tablet is upstairs.) So while the reco may not be great when you aren't using a stylus which has about 10 times the resolution as a mouse, Silverlight's ability to collect the ink data from the mouse is still pretty impressive.

You can see Loren doing this. and how impressive it truly is using a Tablet, in his YouTube demo video.

You can clear your writing with the x, and of course, when you have the correct reco displayed, click Search.

Sunday, September 16, 2007 9:48:13 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [1]  | 

I watched part 2 of Jim Wooley's ASP.NET Podcast show on LINQ and was really impressed with the creativity of his examples. Having dug deeply in order to write LINQ in Action along with Fabrice Marguerie and Steve Eichert, he's way past the how-to basics and able to see the bigger picture of leveraging LINQ.

In his demo, he starts with some simple querying of the file system - a good demonstration of using linq against objects, but by the time he gets to the end of the demo, he is using JOIN to build queries that combine file system info with data pulled from the database.

I knew I wanted to do something like that but I couldn't just copy him, no matter how flattering. So I thought about it for a while... what data is on my computer that I might want to extend with some database data? Then I thought of Outlook.

Thankfully, John Goalby had already written some posts on querying Outlook data with LINQ. So I was well on my way!

I created a few new email accounts for some employees of companies in AdventureWorksLT and sent emails to myself with their accounts. Then I created contact records for them in Outlook in my own account, making sure that I typed in the company names to match the database. Now I had some test data.

First I tested out a query where I joined MailItems from my inbox with ContactItems from my contact. (Note that I did this in VB since John's examples are in C#, so this gives a little more sample code for people to discover.)

Dim ol As Outlook._Application = New Outlook.Application
Dim inbox = ol.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)

Dim contactfolder As Outlook.MAPIFolder = ol.ActiveExplorer.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)

Dim emails = 
From email In inbox.Items.OfType(Of Outlook.MailItem)() Select email
Dim contacts = From contact In contactfolder.Items.OfType(Of Outlook.ContactItem)() Select contact

Dim
emailswithcompany = From email In emails Join contact In contacts _
    On email.SenderEmailAddress Equals contact.Email1Address _
    Select email, contact.CompanyName

For Each emailwithco In emailswithcompany
    Debug.Print(String.Format("{0} from {1}: {2}", _
       emailwithco.email.SenderName, emailwithco.CompanyName, emailwithco.email.Subject))
Next

This worked fine. I got a list of the sender and subject from the emails and company names from the contact records.

  • Katherine Harding from Sharp Bikes: Order 40 Shifters
  • John Harding from Sharp Bikes: modification to recent order
  • Keith Harris from Progressive Sports: vendor appreciation party

Then I queried the database and did a JOIN with the above results. It was funny to see how the types and subtypes kept growing as I built this up in layers. It's nice to have things organized, but if I were starting from scratch, I might do this a bit differently so that my resulting types aren't so complex*.

Dim awdc As New awlinqDataContext
Dim custSalesPerson = From cust In awdc.AWCustomers Select cust.CompanyName, cust.SalesPerson
Dim emailswithcompanysp = From emailco In emailswithcompany _
   Join cust In custSalesPerson _
   On cust.CompanyName Equals emailco.CompanyName _
   Select emailco, cust.SalesPerson

For Each emailwithcosalesp In emailswithcompanysp 
  Debug.Print(String.Format("{0} from {1}: {2}" & NewLine & "SalesPerson:{3}", _
    emailwithcosalesp.emailco.email.SenderName, _
    emailwithcosalesp.emailco.CompanyName, _
    emailwithcosalesp.emailco.email.Subject, _
    emailwithcosalesp.SalesPerson))
Next

And voila!

  • Katherine Harding from Sharp Bikes: Order 40 Shifters
    SalesPerson:adventure-works\josé1
  • John Harding from Sharp Bikes: modification to recent order
    SalesPerson:adventure-works\josé1
  • Keith Harris from Progressive Sports: vendor appreciation party
    SalesPerson:adventure-works\david8

Now I could write an app that can distribute email to the correct sales people when they come into a general mail box! Well, I supposed I could have done it prior to having LINQ (or maybe in Exchange which I know nothing about), just with a lot more effort!

*I couldn't resist streamlining the final solution.

Dim ol As Outlook._Application = New Outlook.Application
Dim inbox = ol.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
Dim contactfolder As Outlook.MAPIFolder = ol.ActiveExplorer.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
Dim emails = From email In inbox.Items.OfType(Of Outlook.MailItem)() Select email
Dim contacts = From contact In contactfolder.Items.OfType(Of Outlook.ContactItem)() Select contact
Dim awdc As New awlinqDataContext
Dim custSalesPerson = From cust In awdc.AWCustomers Select cust.CompanyName, cust.SalesPerson

'now query across emails, contacts and custSalesPerson in one query

Dim emailcontactsp = From email In emails Join contact In contacts _
  On email.SenderEmailAddress Equals contact.Email1Address _
  Join custsalesp In custSalesPerson On contact.CompanyName Equals custsalesp.CompanyName _
  Select email, contact.CompanyName, custsalesp.SalesPerson

For Each ecsp In emailcontactsp
Debug.Print(String.Format("{0} from {1}: {2}" & NewLine & "SalesPerson:{3}", _
   ecsp.email.SenderName, _
   ecsp.CompanyName, _
   ecsp.email.Subject, _
   ecsp.SalesPerson))
Next

Sunday, September 16, 2007 8:17:37 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [2]  | 

There's been a lot of talk about role models in the various Women in Tech essays over on OReillyNet.

But I wanted to brag about my best role models!

My parents celebrated their 50th anniversary yesterday. :-)

Sunday, September 16, 2007 1:27:41 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [1]  | 

A million years ago, when Windows 2000 came out, many VB6 developers got calls from users that the scroll wheel stopped working in their VB6 applications.

It didn't take long for the fix (Install Intellimouse v4.0) to get shared on newsgroups and forums. (This was pre-blog days; do you even remember those?)

I have a client who has that Intellimouse install tucked away on the server to apply to new computers being set up with my old apps and it's worked charmingly for years.

But a few months ago, a user got a new p.c. and the fix didn't work. His job requires him to make heavy use of a function that has a big FlexGrid and not having the ability to use the scroll wheel definitely cramped his style and impeded the efficiency of his work.

I found a KB that offered a solution for the IDE, but not compiled exes. I dug into the mouse drivers on his compuer but there was no way to uninstall them.

Finally, on the VB newsgroups, MVP Ken Halter suggested a code fix that was on PlanetSourceCode.

Scroll Wheel Support: http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=48722&lngWId=1

It contains two modules that futz around with some Win32 stuff to get the scroll wheel to be noticed by VB6. You need to add those modules to your project and then make a call to a function passing in the window handler of your control when you fire up your form and then a detach function as you unload the form.

Simple as heck and worked like a charm!

(and generated this very happy note from the user: IT WORKS!!!  THANKS!!)

VB
Sunday, September 16, 2007 11:13:51 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [1]  | 
 Saturday, September 15, 2007

I'm ashamed that this is STILL on my to-do list as I have probably written and presented more about Query Notification than most people. But I see via Roger Jennings blog that Ryan Dunn has the key of the implementation posted on his blog (by way of a hot tip from Mike Pizzo on the DP* team :-)).

To activate Query Notification, you need to get a query "registered" in SQL Server's Service Broker then listen for a notification.

ADO.NET 2.0's SqlDependency class does all the dirty work then all you need to do is create a SqlDependency object and attach it to a SqlCommand before you execute it. When the command gets to the server, the server sees the dependency and sets up the watch and the notification in Service Broker. When SQL Server sees something change that would impact the results of your query, it fires back a notification. SqlDependency has an event handler to catch that notification as well as other properties to interact with it.

SqlNotification is a more low level approach for complex scenarios where you want to have more control over the process. Here you need to create your own listener.

ASP.NET also uses Query Notification with the SqlCacheDependency object as well as dynamically engaging it in the Page directive.

The obvious (if you have played with this stuff) problem here is that with LINQ to SQL, we are not executing the command ourselves. So how do we register a query with service broker and how do we listen for it?

Rather than attaching the SqlDependency to a SqlCommand, you can expliclty wire up some instructions to have the SqlDependency taken along when a call is made to SqlServer. Pretty cool, although I'm already wondering about how I might want to control that. Certainly you don't want to attempt to register EVERY SINGLE query with Service Broker. Many will fail anyway and when that happens you get an immediate notice about the failure. There are a limited scope of scenarios in which QueryNotification is a benefit (oft-called and infrequently changing data e.g. "states in the u.s." "categories of items we sell") and plenty of rules about what is and is not a valid query for notification. With a blanket approach, you could be creating a performance nightmare.

The key is the CallContext class, which is buried in System.Runtime.Remoting.Messaging. I've never heard of it before and would never ever have figured this out on my own! Here's more info on CallContext.

Here's the critical line of code from Ryan's post which has a more complete example of using SqlDependency in it's simplest form, which is always the right place to start.

  System.Runtime.Remoting.Messaging.CallContext.SetData("MS.SqlDependencyCookie", dependency.Id)

So now my todo list is getting edited. I will have to see how to control this puppy and also what happens when you use the asp.net page directive.

(*DP=Data Programmability)

Saturday, September 15, 2007 3:05:47 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

I've been watching Roger Jennings blog as he forayed into hammering on the use of stored procs in LINQ to SQL. Like a great and supportive pal, I sat on the sidelines while he dug dizzyingly deeper and deeper to try to work out issues with what a stored proc actually returns (different than using LINQ to get dynamic sql) and it's impact on paging with databound asp.net controls as well as loading children. It also impacts the use of LINQDataSource.

I definitely have an interest as I'm doing some more talks on LINQ and Databinding later this fall.

Today he reports that with the required obsessive persistence (grin) and help from Matt Warren, he's only solved one of the issues he was running into and 1/4 of another one. (It took me a while to figure out his math on that!)

Here is are the related posts:

Problems Using Stored Procedures for LINQ to SQL Data Retrieval  This post has been updated to reflect his up-to-date findings.

Update and summary of the problem is included at the top of this post LINQ and Entity Framework Posts for 9/14/2007+

On a related front, Mike Taulty has started digging into disconnected LINQ to SQL. Mike is one of the web services gentry in my mind, so I definitely trust his conclusions. Rick Strahl has some interesting posts on it as well. I've been trying to work out the same scenarios with Entity Framework (with XML serialization and binary) and the challenges and solutions are pretty similar so there's a ton that we can learn from each other.

Saturday, September 15, 2007 1:57:00 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [2]  | 
 Friday, September 14, 2007

I was fiddling with Entity Framework in a website and was happy to see how smoothly objects serialize (binary serialization) across postbacks.

Query for one customer along with their SalesOrderHeaders:

  Dim query = (From cust In aw.Customer.Include("SalesOrderHeader") Where cust.CustomerID = 151)

Grab that customer into an object:

Note, I've found a problem with using .First in the query... Include is not working, so this is a temporary long way around...

  For Each c In query
    cust=c
  Next

Now shove it in viewstate

  ViewState.Add("mycust",c)

Postback, then recall the customer:

 cust = ViewState("mycust")

Be sure that cust is explicitly cast to a Customer.

You will find that not only is the customer in tact with it's EntityKey, but all of the SalesOrder headers are there as well. So as far as I can tell, it was retained in its entirety.

Be careful however with assumptions about object state!

If you make a change to the object before adding it to ViewState, when you rehydrate the object, the state information won't survive. This is expected behavior. The ObjectContext is responsible for managing the state of it's objects. When you detach, you lose the state.

I've been playing with different ways of dealing with that if you care at all about concurrency when you do updates - using SaveChanges or using stored procedures. You can see a very long discussion of this in the forums if you are interested.

Friday, September 14, 2007 9:28:51 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

I just found out about Channel8 which is in Beta and was launched recently. it's aimed at students - from kids to PhD's.

There are arlready some great videos - interns at Microsoft, PhD students describing their research projects; blog posts and more.

I've been emailing it to all of my pals who are teachers and profs related to all things nerdy.

 

Friday, September 14, 2007 8:04:37 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

Finally, you can draw a simple line on a windows form, just like in the old VB6 days. The VB2005 Power Pack has lines and other shape controls. It also has a compatilibity tool for leveraging VB6 printer code. Read more here!

[A New DevLife Post]

Friday, September 14, 2007 7:23:56 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Thursday, September 13, 2007

I have dynamically generated XAML in a few of my apps. It's not easy to debug so I wrote a post sharing how I go about tracking down problems that might be in this code.

[A New DevLife Post]

Thursday, September 13, 2007 12:20:28 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

Mom and the kids (who I first saw in July) have been hanging around the neighborhood most of the summer. They didn't do too much damage to my flowers or veggie garden.

Today I saw them all under the apple trees. There are about 10 old trees by our driveway and this year all of the apple trees around here are filled with billions of apples. Ours are not great - since we don't spray them, though I might make some applesauce.

There are already lots on the ground, so the deer were having a mini-feast. Unfortunately it also attracts Porcupines and we HATE porcupines. (They hurt our curious pets.)

While looking for the porcupine post, I came across one entitled "G.B.s big night out" from almost two years ago. Sadly, G.B. had his last big night out about a month ago. We haven't seen him since.

Thursday, September 13, 2007 10:55:25 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

Tatiana pushed up two more essays this morning and mine is one of those.

It's not quite as serious or challenging as some of the more thought provoking essays have been, but it is definitely from the heart!

Proud to be a Geekette

Thursday, September 13, 2007 10:35:29 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Wednesday, September 12, 2007

Hey, so I'm not a walking encyclopedia.

I thought it would be cool to try to build an xml file from a Silverlight object - namely the StrokeColleciton of an InkPresenter.

I coded it up in what I thought was a very nice way:

   XElement XMLStrokes = new XElement("StrokeCollection");
   //create stroke then add to collection element   
   XElement mystroke;
   foreach (Stroke s in mystrokes)
   {
    mystroke = new XElement("Stroke",
     new XElement("Stroke.DrawingAttributes",
      new XElement("DrawingAttributes",
        new XAttribute("Color", s.DrawingAttributes.Color),
        new XAttribute("OutlineColor", s.DrawingAttributes.OutlineColor),
        new XAttribute("Width", s.DrawingAttributes.Width),
        new XAttribute("Height", s.DrawingAttributes.Height))));

    //create points separatly then add to mystroke xelement
    XElement myPoints = new XElement("Stroke.StylusPoints");
    foreach (StylusPoint sp in s.StylusPoints)
    {
     XElement mypoint = new XElement("Stylus Point",
      new XAttribute("x", sp.X),
      new XAttribute("y", sp.Y));
     myPoints.Add(mypoint);
    }
    mystroke.Add(myPoints);
    XMLStrokes.Add(mystroke);
   }

It compiled fine, but then the strangest thing happened. The code would never get called. If I put it in a method and had a click event call the method, the method would not get hit. I put it in a new static class but still it did not get hit. Then I put the code right in the click event and then the click event stopped getting hit.

I thought for sure it was me being stupid with C#. But finally I had a new idea and I googled "LINQ to XML" and Silverlight and the first hit was a post by Fabrice Marguerie saying that LINQ to XML was not supported in Silverlight, with a link to a post by Aaron Dunnington on the XML team.

Not supported, eh? Well, it's just not quite yet. it'll be there. (I knew that from reading Aaron's post, but totally neglected to point that out. Thanks for Scott Guthrie's reminder in the comments.) Either way, it sure had a funny way of showing it. Sheesh!

I suppose I could put it into a WPF project and test it (I still don't know if my logic is correct) but I've got better things to do at the moment.

Note: I did think of using a webservice for this, but a StrokeCollecton is not serializable, so it would be redundant to find another way to get it across the pipe just to see if I can pull it off in LINQ to XML while still in the context of a Silverlight app. I'll just be patient.

Wednesday, September 12, 2007 8:32:55 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [1]  | 

Even though i am on the INETA speaker committee (responsible for the NORAM Speaker Bureau), I didn't really know this was public yet but I'm starting to get some emails and see some blog posts that people are announcing their addition to the speaker bureau, so I guess it's okay to blog about it now!

Must be that the email I got wasn't a "how does this look before we send it out to the world?" but it was the official email.

Fifteen, count 'em 15! new people were added to the speaker bureau.  They are all on the website already so you can start ordering them up!

Rod Paddock - Rod has spent his kid's college fund travelling on his own dime to speak to user groups all over the u.s. and canada. he's been to VTdotNET and he's a great presenter. Rod is also editor of CoDe Magazine.

Markus Egger -  Markus is the publisher of CoDe, so he keeps Rod in line! Markus presents at conferences all over the world. I am always amazed at the ease at which he explains some difficult concepts in a easily understandable way. Even with that Austrian accent!

Mark Miller - You may know Mark from his crazy fun on Mondays! with Carl Franklin, but Mark is also a friggin genious who is one of the driving technical forces behind Developer Express. Mark is another one of those guys who speaks at user groups on his own dime all the time.

Nick Landry - aka Active Nick. Nick is a crazy and smart as hell guy from Montreal (though he's now a New Yakah living in Joisey)who is a guru in mobile device programming. He has been presenting at conferences for years. Watch out for that Quebequois accent, shiny bald head, and most especially his super silly jokes that somehow make technology sound dirty.

John Papa - John writes the Data Points columns for MSDN magazine and speaks at VSLIve a lot and we've just snagged him to present at devconnections this fall (he's doing 2 talks in the Data Access track that I coordinated and 2 in the Mobile Connections conference that Nick Landry chairs). Maybe if we keep him really busy on the speaker bureau, he'll be lulled into slacking off on his MSDN Mag column and I can steal it away from him. Evil laugh.

Ambrose Little - Ambrose has written books for WROX on ADO.NET 2.0, ASp.NET 2.0 Hacks and has a book on silverlight coming out. He works at Infragistics  and is an ASPINsider - and a really nice guy who will be a pleasure to host at your user group!

Oh, John Papa's really nice too. You should all invite him to speak at your groups. Keep him really busy! ;-)

DonXML - oh, wait, Don actually has a last name! It's Demsak. But really, "Donxml", need I say more?

Wow - 7 down and 8 to go. This is a lot of work and I have work to do.

I'm going to have to just cut & paste the rest. I know, that's really boring. Sorry!

Todd C. Bleeker, Ph.D., is regarded as an innovative, resourceful, and competitive technologist with an intense desire to excel. Todd is co-owner of Mindsharp (http://mindsharp.com/), a company that offers top-notch educational opportunities on the SharePoint platform.  Todd has architected many solutions for small and large corporations: P&G, Fingerhut, United Healthcare, itiliti (now PeopleClick), Air Canada, State of Minnesota and Bank of Montreal. Todd also presented on Web Services and MCMS at TechEd.  Todd loves to soak up whatever technology Microsoft is churning out and lives in Minnesota with his wife and six "high energy" children.

Mark Dunn has over 20 years of experience in the disciplines of software engineering, database administration, and project management. For the past four years, Mark has been awarded MVP status for his contributions to the Visual Studio .Net community and he serves as Microsoft's Regional Director covering the Southeast United States.  Mark also co-founded .Net Rocks, an Internet radio program for .Net developers recognized in over 80 countries and now hosted by Microsoft on the MSDN site. Mark is also a Microsoft Certified Trainer, Application Developer, Solution Developer for .Net, and Database Administrator.

 

Daniel Egan - MCT, MCSD, ASP.NET MVP, Daniel is the founder of Odyssey Consulting Group Inc. (http://www.ocgpros.com/), a Southern California software development company. In addition, Daniel teaches a .NET Certification course and serves on the .NET Advisory board at California State University, Fullerton. He is cofounder of the SoCalDotNet Developers Group and a frequent speaker and conference presenter including SDWest, and MIX07. He has written several articles for asp.netPRO magazine, and is the author of several books including an upcoming title on design patterns from WROX. [Daniel is also now heading up INETA Noram's Tech committee and working on getting a new website for us. But more importantly, he is going to win the "best dressed INETA Speaker award"]

 

Caleb Jenkins long time community leader, former Microsoft Developer Evangelist, training mentor and consultant with Improving Enterprises, Inc. Host, cameraman and editor for http://communitycast.tv/. Caleb lives in Dallas where he continues to date his beautiful wife and busy himself playing candy land and Xbox 360 with their four incredible children. Occasionally he writes curriculum, speaks at conferences, and writes code for silly things like twitter applications. Eventually he'll post some of the gazillion interviews that he's recorded on CommunityCast or blog at http://www.calebjenkins.com/

 

Kevin McNeish is President and Chief Software Architect of Oak Leaf Enterprises, Inc, and a Microsoft .NET MVP.  He is a well-know speaker and trainer throughout North America and Europe including VSLive!, DevTeach (where he serves as one of the .NET chairs), SDC Netherlands, and Advisor DevCon. He is co-author of the book "Professional UML with Visual Studio .NET", author of the book ".NET for Visual FoxPro Developers". He authors articles for CoDe magazine and has been interviewed on the .NET Rocks! Internet Radio Show. He is the Chief Software Architect of the MM .NET Framework and spends about half his time on the road training and mentoring companies to build world-class .NET applications.

Mark Michaelis is the IDesign architect specializing in WCF and VSTS. Mark was recognized by Microsoft as a Microsoft MVP for Visual Studio Team System and C#. Mark holds a MS in Computer Science from the Illinois Institute of Technology and he serves on several Microsoft Software Design Review teams including WCF, C# and VSTS. Mark speaks at developer conferences both nationally and internationally and has written several articles and books, in addition to maintaining a blog. His most recent book is Essential C# 2.0 (Addison-Wesley, 2006). [Hey, there's nothing in this bio about riding roller coasters on top of tall buildings with Kathleen Dollard!]

Jeffrey Palermo makes his living making software teams twice and three times as productive by coaching executive managers all the way down to individual software engineers.   Jeffrey is also a master developer, MCSD.Net, Solutions Architect MVP, Austin .Net User Group leader, AgileAustin board member, INETA Membership Mentor, Eagle Scout, Aggie, and Iraq war veteran.

 

David Yack is the CTO of Colorado Technology Consultants, a Microsoft Gold Certified Partner based in Colorado.  David specializes in large system architecture, design and integration.  David is a Microsoft Regional Director and is also a Microsoft MVP for ASP.NET.    David is a frequent speaker at user group and industry events and is co-author of two NET 2.0 related books.  David founded and is on the leadership team for the South Colorado .NET User Group and lives in Colorado Springs with his wife and two kids. You can always track David down via his blog at http:/blog.davidyack.com where he writes about his .NET adventures.

Wednesday, September 12, 2007 7:30:55 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

I was happy to see Danny's blog post this morning that he'll be coming to DevConnections. He's not even presenting. But since there will be an entire Data Access track (a day of 4 microsoft talks and then 2 days of third party speakers) and in that track there will be 8 talks that will either be about Entity Framework or will include info on it , AND I'll be doing a 1/2 day workshop... he knows it will be the place to be to talk about Entity Framework with interested folks!

There will be plenty of folks from the team there and I am envisioning some engaging discussions!

 

Wednesday, September 12, 2007 7:11:45 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

Sept 12 at 6 PM meeting: Deployment Issues with Rails

Posted: 11 Sep 2007 07:07 AM CDT

We are going to have a User Group meeting on Sept 12 at 6 PM. The meeting is at Draker Solar Design, 22 North Street,Burlington, Vermont 05401.

www.vtrails.org

 

 

Wednesday, September 12, 2007 6:10:59 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Monday, September 10, 2007

As part of the Women in Tech series at OReillyNet, Lauren Wood writes about serving on standards  committees and how the people who are there representing a great variety of interests, manage to make it all work.

Lauren is a Sr. Technical Program Manager at Sun - so she represents a BIG interest! I also read Lauren's bio and my jaw dropped even more when I saw this:

Lauren holds a Ph.D. in theoretical nuclear physics

"Gulp!", says the gal who majored in History at a teeny tiny liberal arts college in Central New York.

Monday, September 10, 2007 10:41:53 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

    If you've been playing with Entity Framework and used the wizard to create a model from an existing database, you'll see that the resulting model  looks something like this which is a small portion of the EDM built from Northwind.

     

     

    Compare the Orders Entity above to the Order table schema

     

     

    and you'll quickly notice that the foreign keys for CustomerID, EmployeeID and ShipVia are "missing".

     

    We are used to using foreign keys as a means for defining relationships between tables and realizing them through the joins when we query. In our objects, we use the foreign keys as a means of finding our ways back to another object.

     

    In the Entity Framework we have a different method of finding our way from one table to another - Associations & Navigations (which come as a team).

     

    The model is more "holistic" than what we are used to.

     

    The fact that there is a relationship between Orders & Customers is identified by an association (which in the model is represented by the lines between the entities). The Association is named "FK_Orders_Customers" and describes that in this relationship there will be 0 or 1 customers and many orders. (Though I can't figure out how any order could be without a customer...)

     

    So far this is only a part of the puzzle. Still nothing about CustomerID in there.

     

    Then there are the Navigation properties. If you are working with a Customer entity, it uses it's Orders navigation property to know that it has a relationship with orders and that relationship is defined by the association.

     

    Okay so stop there a minute! Why have the Navigation property if we already have the Assocation?

    The association is not part of the customer (nor part of the order). It floats outside of those. So when you are wokring with a customer, you need one of the properties to give you access to the orders, therefore a navigation property. The association is shared because the Orders entity has a property that allows you to navigate over to the customer when you are working with the objects.

     

    When you create an Order object, while you don't have Order.CustomerID, you do have Order.Customers, the Navigation property and that gets you to customers without having to say "where order.customerid=customer.customerid"

     

    (From o In nw.Orders Where o.OrderID = 10281 Select o.Customers).First

     

    This query will bring back  the customer for the specified order.

     

    If you looked at the xml which defines the Associaitons and the Navigation proeprties in the conceptual model, you will see that there are still no references to customerid. So how does it work?

     

    The fact that it is the customerid that is the foreignkey is defined in the Storage model. The Order entity in the storage model has a customerid and the FK_Orders_Customers association in the storage model has a reference to the CustomerID in it's ReferentialContraint element.

     

    Finally in the mappings, there is an AssociationSetMapping that very clearly defines that CustomerID is the means for relating Orders and Customers.

     

    When the data is surfaced in the Conceptual model, all of the relationships have been sorted out and there is no longer (for most intents & purposes) a need to have the customerid in the order entity. We shouldn't need to use that to navigate between orders and customers.

     

    Some people beg to differ on that matter.  See this forum thread [http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1663304&SiteID=1] and also note that in response to a list of Entity Framwork suggestions by Roger Jennings , Mike Pizzo replies to suggestion #9.

     

    9. Provide read-only access to foreign key values.

    This is actually a feature I’m fighting to get into our final milestone for V1. Can you describe the scenarios where this is used? Do you need the ability to query on the foreign key value, or simply expose it on the domain object?

     

    There's one other thing that needs pointing out here. OrderDetails has an OrderID and a ProductID. So am I full of it? Well, that could be a different topic for debate, but in this case OrderID and ProductID are not only Foreign Keys but they are both Primary Keys in the Order Detail table as well. They become EntityKeys in the OrderDetails entity. Note the primary key icon for the two fields.

Monday, September 10, 2007 10:07:16 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [3]  |