Wednesday, February 14, 2007

We have gotten at least 18" of snow since going to sleep last night and it is still snowing hard at 5:30 pm. Rich and I went to Mad River in the late morning. They say that by 4pm today they had 2 feet of new snow and are looking at 3-4 feet total when the storm is over! We were both exhausted after skiing in the deep powder (hey for us a foot of powder is DEEEEEEP). The roads are pretty bad now. But when the roads are the worst, the skiing is the best. Mad River is 7 miles from our house - long miles since it's up and over the mountain. I'm sure we'll sleep pretty well tonight.

Heck now that they have wireless, maybe I"ll just bring my laptop over there tomorrow. Ski work ski work ski. :-)

Wednesday, February 14, 2007 5:28:46 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Tuesday, February 13, 2007

Don't get me wrong. I love LINQ and LINQ for SQL. But the more I have been digging into it the more things I discover that, as a developer, I may want to explicitly choose how to use. That's probably why my talk on Linq for SQL with Web Apps last night at VTdotNET was pretty long. (Going to have to cut it down to fit a one hour slot at DevConnections - egad!)

I spent a lot of time trying to be sure people were aware of what is going on in the background when they may just see on the surface that they are so easily writing a query and the data so easily appears the way they want it to.

1) For example, the default Optimistic Concurrency. Not that Optimistic Concurrency is always a bad thing, but almost everyone groaned when I said that it was on by default - for all columns. The UpdateCheck property of LINQ to SQL column (oh, it's so much easier to say and type "DLINQ") defaults at Always. When you use the designer, that's what you get. The enum I prefer is "WhenChanged". The current (May CTP) designer doesn't have a property exposed at the UI, which means that if you want to change it in code, you can't use the UI again or it will be overwritten. Of course, this is the May CTP and all of this might change in future CTPs, Betas or the release. When writing any of your own update logic, it's a lot of work to deal with all of those columns. I suppose any way you slice it, dealing with concurrency is a pain in the butt and what LINQ for SQL has is a stake in the ground.

2) Another biggie is to have an awareness of how the LINQ queries are turned into TSQL which is really matter of knowing is the hard work done in TSQL or in memory after the data is returned? I've been talking with Frans Bouma (creator of LLBLGen who knows a lot about ORM) about this as I was trying to understand what I was seeing. There doesn't seem to be a discernible pattern - though there must be and I'm just not seeing it (until maybe I explore 2 or 3000 more queries? :-)) For the most part, the queries I looked at in SQL Profiler looked as I would expect them. And certainly much smarter people than myself are creating the algorithms to do this work. But there was one query that stood out like a sore thumb.

The query gets data from one table which has child objects. I'm displaying data from the child objects, so I do expect lazy loading to first grab the parent data and then grabs a set of child objects for each parent. It also does some filtering based on the child table. For example suppliers and it's products.

from s in db.suppliers where s.Products.Count > 2 select s

So on the surface, I'm just asking for this sql query.

select * from suppliers  WHERE ((
    SELECT COUNT(*)
    FROM [Products] WHERE products.[SupplierID] = suppliers.[SupplierID])) >2

This returns 16 of the 29 suppliers in Northwind.

And then as I populate my data control and ask for product info, I expect lazy loading to go out and get the products for each of the 16. So 16 more queries.

But what I get is two additional queries for each supplier.

First there is a query which gets the count of products for the supplier. Second is a query that gets the products.

I can't figure out why the first query is necessary.

Of course, (caveat caveat caveat), I can't imagine being the person (probably more than one! ) that is creating the code that has to take any weird LINQ query I come up with and translate it into TSQL. So my point is more that [some] developers might want to know that this is going on and make a decision about whether or not to use the defaults, override them (note this from the Dec 12th chat with the LINQ folks about upcoming mods: You can disable deferred loading by setting a property on the DataContext, and then you can describe pre-fetch behavior using the new DataShape class.") or just write your own data access.

3) Which begs to point out Lazy Loading: Again there are pros and cons to any technology choice you make. Just know that it's going on and how it changes based on how you do write or enumerate your queries. The samples of lazy loading usually show code which explicitly enumerates through query results. What people also need to think about is that it's happening elsewhere too. For example, the way I defined the datalist that displays the above Supplier/Product data forces lazy loading to happen.

4) Caching and nullables. I'm putting these together because I haven't dug into them. I think anyone interested in performance should know how LINQ caches data and what to expect from it (and what NOT to expect from it).

5) All those other table/column properties. I haven't gotten to them yet. For example, DeleteCommand on a Table. I wonder if that just lets me point to the stored proc that I want to be run for a delete.

6) When you think you found a way to do something, there are probably 18 other ways to do it too. Of course, that's nothing new! :-)

I have a lot more banging around in my head. But I gotta get back to work. Though I still need to work up a good response to the guy who summed up LINQ to SQL as a "glorified dataset".

Though I was worried that I was a little fanatical when I presented this stuff last night (hey, it's data access, whadya want?), I was happy to hear from attendees that they were really glad I went behind the magic to show what's happening in the background that might be of interest to them.

Tuesday, February 13, 2007 10:21:43 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Monday, February 12, 2007

Sitting in my kitchen working on 5 computers? Yep.....

A DevLife post

Monday, February 12, 2007 10:55:48 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

After living 100% in LINQ for the past week, this is my conclusion. And that's just LINQ to SQL. There are just so many ways to skin the database with LINQ. The possibilities seem quite endless at this point.

But I'm having fun and we'll see if I can keep it to 1.5 - 2 hours tonight at VTdotNET!

Swoon.....   

Monday, February 12, 2007 2:38:14 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [2]  | 

From the INETA NORAM Feb 2007 Newsletter:

Elections are being held for the INETA NorAm Board of Directors in mid-March. From now through February 15, 2007 any user group leader of an INETA registered user group in the United States and Canada can nominate an individual for a Board position. The nominee can be any member of the developer community and does not have to be a user group leader. Experience and familiarity with the operation and needs of the user group community is beneficial. You cannot nominate yourself, but any other user group leader may, so get someone to nominate you.

Read  more here...

Monday, February 12, 2007 2:06:31 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

Qvault, Inc. is actively recruiting individuals with strong web application, database-driven programming proficiency. Qvault is an entrepreneurial driven product-focused company with a series of exciting opportunities on the horizon. Successful candidates will play a major role in shaping the current and future products and services the company takes to market.

 

Desirable skills and experience include:

 

Visual Studio 2005

Object-Oriented Programming, fluency in C#

            ASP.NET, ADO.NET

            Web Services (XML, SOAP)

SQL Fundamentals

 

This is a full-time job, not a contractor position.

 

About Qvault

 

Qvault, Inc., a privately held corporation; develops, hosts and supports web based business intelligence and collaboration solutions for professional organizations throughout world. Our customers range from SMB to large multi-national organizations primarily in the dynamic real estate and mortgage industries.  Please visit our website at www.Qvault.com. 

 

Qvault's main offices are located in downtown Burlington, Vermont.

 

Interested candidates please submit resume, salary requirements or other information in confidence to hr@qvault.com

Monday, February 12, 2007 12:58:56 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Saturday, February 10, 2007

R J Peters Associates (alt site http://www.avmax.net/) is seeking a:

NET Web Developer

 

We are looking for a mid-level .NET developer to create, update, and maintain internal and customer-facing web sites, .NET web applications, and XML web services.  Although the developer’s main task will be to write code, he will also be required to maintain the company databases including adding data, backups, and running reports. Candidate must be able to manage multiple projects and prioritize workflow, work alone without supervision, and communicate project status. 

 

The ideal candidate for this position will have:

  • Minimum 1-2 years experience creating web applications and web services using ASP.NET, C#, XML, ADO.NET, and Visual Studio 2005.
  • Proficiency with Windows Server 2003 technologies as relating to web development (IIS, FTP, Active Directory). 
  • Proficiency with SQL Server 2005 databases and the tools relating to the design, use, and maintenance of databases used by the web applications.
  • Proficiency with development cycle and use of source code management tools.

Pluses would include:

  • Advanced Windows 2003 administration
  • Advanced SQL Server skills
  • Proficiency setup and maintenance of ACT!

Salary commensurate wtih experience.

 

Contact

William M. Peters, President
R.J. Peters Associates, Inc.
97 Blakely Road, Ste 210
Colchester, Vermont 05446

 WmPeters@rjpetersinc.com
802 860-4700

 

Saturday, February 10, 2007 9:41:51 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Thursday, February 08, 2007

Why do I think I'm a perfect Guinea pig for this new technology? Read more...

A DevLife Post

Thursday, February 08, 2007 6:13:27 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Wednesday, February 07, 2007

I'll be doing a talk on Building Web Apps using LINQ to SQL at VTdotNET on Monday.

I have seen Scott Guthrie do a session on this topic a few times and got so excited I wanted to dig in more and show it off as well. Scott has probably done this talk at least 20 times over the past year, has posted his PPT and demos, writes about it and even has a a recent video webcast on the topic.

He's a REALLY hard act to follow, but I have tried to stay away from his session as I build my own so that I'm not just trying to do his talk. One of the interesting things about LINQ is that although you can easily group it into things like straight queries, joins, filtering, shaped data, paging and insert/update/deletes and then "advanced :-)", there are a LOT of ways to do queries. Just like there are a lot of ways to construct a query in any other query language. So in the 90 minutes I have to do my session, I will be giving some specific examples, but more importantly, trying to open up people's eyes to the power and flexibility of using LINQ to SQL. Then I'll point them to the 101+ samples as well as the more advanced stuff that people like Fabrice are doing.

I keep worrying that people will say "why do I need to bother coming to your session on this topic when I can just watch THE MASTER do it." Ummm, free pizza?

But, I trudge on...

Wednesday, February 07, 2007 9:01:28 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Tuesday, February 06, 2007

I was always looking at the source code of the LINQ samples, and never ran the actual solution! What I saw surprised me!

[A DevLife post]

Tuesday, February 06, 2007 3:18:38 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Saturday, February 03, 2007

Watching the Tenacious Search blog over the past few days, the only name I was familiar with was Werner Vogels, who a few years ago went from researching at Cornell over to Amazon. I know Werner's a brilliant guy! Even though I am astounded by what I have been reading on the blog (people pointing satellites in the area where Gray was last known to be, the satellite imagery becoming available through the blog, the discussion of what people are doing with teh imagery), I had no idea who the brains behind all of these names were. This NY Times article, published today, enlightened me quite a bit. What has been obvious is that the technology and the minds that Jim Gray has developed, inspired and influenced over the years are all being put into force to help try to locate him.

It's a dazzling effort, though so far, with heartbreaking results - not a hint of him has been found yet. This isn't the Bermuda Triangle we're talking about. How can it be that not one piece of evidence (even if it's evidence of something tragic) can be found.

You can help, too. Amazon has an app that will display a handful of the satellite images with explanation of what you are looking for. You can go there and look at images and mark them. It's called Amazon Mechanical Turk.

Saturday, February 03, 2007 10:53:57 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Friday, February 02, 2007

Looking at a new post from the ADO.NET team about EDM...[read more]

[A DevLife post]

Friday, February 02, 2007 1:36:25 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Thursday, February 01, 2007

After checking the various news sources and research.microsoft.com throughout the past few days to see if there's any new info about Jim Gray, there was an update on the MS Research site, which has a link to this blog where people who are searching (outside of the Coast Guard which has suspended it's search) for any signs.

Thursday, February 01, 2007 10:13:26 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

I discovered the GMC desktop calendar earlier this month. This was January's.

It's a photo of Vermont's Mt. Mansfield and beyond with lots of snow! It was great to look at when we didn' t have any snow and I really loved having it on my desktop this past month.

The image with the month calendar and GMC logo was created for GMC by Paul Hansen, a local photographer who's company is ecopixel.com. I'm really looking forward to seeing what beautiful local photo I'll get to have for Feb.

Looking at the ecopixel site, I noticed that he has an offer to create desktop calendars for other organizations. I think it's a great idea. It has put the Green Mountain Club in my mind every day.

Thursday, February 01, 2007 11:44:48 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Wednesday, January 31, 2007
 Tuesday, January 30, 2007

I'm so out of the loop. Good thing Susan pointed this out. I love Jon Stewart trying to trick Gates into divulging his password. "Did you have any pets when you were a kid?"

Tuesday, January 30, 2007 5:18:10 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

I have SS2005 on my development machine. Normally, I don't need to back up test data, but now that I have started using SourceGear Vault, the source gets stored in the database and therefore I definitely need to do the backups.

I've set up backup maintenance plans before for a client, so even though I'm not a DBA, I felt okay doing this.

A week later, I looked at the folder for the backups and was dismayed to see that there was nothing but my initial tests from the week before. I checked to make sure SQL Agent was running, as I remembered that was a problem for me in the past.

I played further with the maintenance plan and today realize that I must have gotten distracted because I didn't address en error message that is blatant and the reason my backups weren't happening.

The error is "GUID should contain 32 digits with 4 dashes (xxxx....". Clearly something internal.

So this time, before I got distracted by an email or a phone call, I googled the error and quickly found that this is a known issue. Here's a forum thread about the problem which shows a few workarounds and has a pointer to a KB article. Apparently, the SP fix should have meant that I have to install some other tool and not Integration Services, but I don't see what that is, so I just installed Integration Services anyway, which was quick and easy.

The maintenance plan requires the Integration Services to be installed. If you install them retroactively, as I have done, note that you may need to clear out the jobs and delete and recreate your maintenance plan(s).

Tuesday, January 30, 2007 4:15:23 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

I'm really starting to think they are just playing "You're on candid camera" (or candid microphone) with me.

I have an itty bitty SX280 Ultra that came with a 40gb drive. I want more storage and was hoping that, even with the tiny footprint, I could add a 2nd drive in there. Dell's site makes it super easy to get support for your particular system. You just log in while you are on that computer and it identifies the computer and the service tag and gives you links to everything about your computer. So rather than shut the p.c. down and open the chassis, I thought I'd just ping the online chat and ask if I could fit another drive in there or not. Stupid me.

Here are a few highlights of the conversation. Note the times.

01/30/2007 08:57:16AM Agent (): "Thank you for contacting Dell Technical Support. My name is xxx and my rep ID number is xxxxxx. How may I assist you today?"

01/30/2007 08:58:04AM Julia Lerman: "I didn't want to take my computer apart to answer this question - it's an SX280 ultra. Is there room INSIDE for a 2nd hard drive?"

01/30/2007 08:58:31AM Agent (): "Thank you for the information. I’ll be glad to assist you. Please give me 2 to 3 minutes to pull up your account information."

01/30/2007 08:58:41AM Agent (): "I would also request you not to hit F5 key or refresh the screen anytime during the chat as that will disconnect you from me."

01/30/2007 08:58:44AM Agent (): "Also, may I have your telephone number, along with the area code to update our records?"

01/30/2007 09:01:14AM Agent (): "May, I also have your alternate number in case we are not able to get you over the main number?"

01/30/2007 09:01:27AM Julia Lerman: "use the number I gave you"

01/30/2007 09:01:29AM Julia Lerman: "thanks"

01/30/2007 09:01:32AM Julia Lerman: "it will work"

01/30/2007 09:02:14AM Agent (): "If I understand the issue you need information if you can install a second hard drive on the system you are using?"

So it's been 5 minutes of bullshit and now he's getting to my question.

Then after another 1 1/2 minutes....

01/30/2007 09:03:31AM Agent (): "I apologize for the inconvenience; you have reached Dell Hardware Technical Support for Desktop systems and your query is regarding a Optiplex."

01/30/2007 09:03:55AM Julia Lerman: "this is a desktop system"

01/30/2007 09:04:09AM Julia Lerman: "and this is the support that I was pointed to for this particular system"

01/30/2007 09:07:20AM Agent (): "You will need to call at 1-800-822-8965 for the support with the system model you are using."

01/30/2007 09:07:28AM Agent (): "I apologize for the inconvenience caused."

01/30/2007 09:07:59AM Julia Lerman: "Okay - but please be aware that I logged into the website, it identified my system and the service tag, it gave me a link to support which sent me to you."

and so on and so forth

here's where the conversation ended, with my question still unanswered.

01/30/2007 01/30/2007 09:17:30AM Julia Lerman: "bye" Julia Lerman: "bye"

Twenty freakin' wasted minutes. This was not the fault of the agent, but of Dell's support system.

So I disconnected and in 2 minutes I had my computer shut down, the chassis off and saw that no, there is no room for another hard drive.

Tuesday, January 30, 2007 10:34:46 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Sunday, January 28, 2007

I finally upgraded the first of my boxes with VS2005 on it today. After all the worry about how long it would take based on so much feedback, I was shocked when it finished up very quickly! Read more....

[A DevLife post]

Sunday, January 28, 2007 12:55:41 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Saturday, January 27, 2007

I hear a lot of whining that the software jobs in Vermont don't pay well.

I was just poking around Technical Connection's website and saw a .NET Developer job for $100,000, a C++ job advertised as "highly competitive for Vermont" and a SQL Server DBA job for $80K+.

When I first moved to Vermont 6 years ago, during the dot com BOOM, I had to get a mortgage and the mortgage broker said I had to get a full time w-2 job. I had a hard time, with my 20 years of experience, finding a job over $50,000.

So seeing these jobs in the $80-$100K range is awesome.

Saturday, January 27, 2007 9:40:20 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  |