Wednesday, October 17, 2007

Junior Software Engineer / Product Support

Telecommute/Virtual Team – Burlington, VT area

 

Excellent compensation package including 401k plan and insurance benefits.  CONIX Systems, Inc. designs, develops and maintains software that creates new workflow options and improves operational efficiency and customer service for major banks and service providers.

 

This virtual team (home-based) telecommute position will be responsible for supporting and maintaining solutions for Windows and Web-based environments using the Microsoft.NET Framework (C#), Visual C++ and SQL Server 2000/2005.  This individual will work with existing client support staff in handling customer support issues related to these technologies. The ideal candidate will also train the existing client support staff to increase their technical expertise. This is a prime opportunity for advancement within the com­pany.

 

Required skills/experience include:  Excellent communication skills, both written and verbal; knowledge of .NET (2.0 preferred), SQL Server 2000/2005; clear understanding of object oriented design and programming; associate's degree in Computer Science or related field; access to a cable or DSL broadband ISP (no satellite); and resides in the Burlington, VT area (for periodic meetings).  CONIX supports its technical staff with a complete home office/development environment including furniture, computers, printers, phones and internet connectivity.  All engineers within CONIX telecommute from home-based offices with VPN access to corporate servers and mainframes.

 

Headquartered in Manchester, Vermont, CONIX offers an excellent compensation package and the opportunity to work in an environment where your contributions are recognized.  Please send resumes to JOBS@conix.com.

 

CONIX is an Equal Opportunity Employer.

Wednesday, October 17, 2007 11:34:07 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Tuesday, October 16, 2007

The title is a bit of a misnomer and not comparing apples to apples. To do it right would have been longer. The real comparison is

"Choosing LINQ to Entities vs. Entity SQL+Object Services vs. Entity SQL+EntityClient"

When doing an intro session on entity Framework last night for GUVSM in Montreal, even though it's something like the 7th time I've done this session (and every single presentation has been totally unique from any of the others I have done -  shaped by the questions asked), I think I finally figured out how I want to express this option of which query method you want to use. Even within those three options, there are more variations happening because they return different payloads and this can additionally be affected by whether or not you do projections (e.g. select firstname, lastname, age  instead of just select the whole object).

1) For me, Linq to Entities will always be the first query method I go for. I'm getting more and more comfy with LINQ since I've been using it with objects, SQL, DataSets and XML. Having all of that intellisense support is dreamy. Whether I use operators ("From c in context.Customers Where c.CompanyName="Acme Builders" Select c") or method operators (context.Customers.Where(Function (c) c.CompanyName="Acme Builders") it just makes my life easy! I've been using LINQ to Entities almost exclusively unless I have a reason to go to the next level.

LINQ to Entities still depends on an ObjectContext (and therefore uses Object Services) so you get all of the goodies that go along with that such as ChangeTracking, etc.

LINQ to Entities returns objects.

2) The next level is using EntitySQL with Object Services. That would be:

objectcontext.CreateQuery(Of Customer)("Select VALUE c from Customer as c WHERE c.CompanyName='Acme Builders'")

The main reason I would want to use this is because Entity SQL is a very robust query syntax and I can express queries that LINQ (which is strongly typed) may not enable me to write. I want to be clear about my use of the word "dynamic" since I just mean that I can build the strings. You can also use parameters and as in most cases, want to try to avoid dynamic queries ("select value c from customer where c.CompanName=" & myvariable)

As an aside, I've discovered that writing custom operators in Astoria, while possible with LINQ to Entities, is better in teh long run if you write them with EntitySQL. That is a conclusion made using the prototype so this may change down the road.

This method can return objects or dbDataRecords, depending on the query.

3) The method I see myself using most infrequently is EntitySQL with EntityClient. EntityClient is a db provider, similar to SQLClient or OLEDBClient. You create connections (EntityConnections) and commands (EntityCommands), set the command's string (an Entity SQL query) and execute as you would other clients. The big difference between this and the other Client Providers is that you are connecting to your entity data model, not to a database.

There are two reasons to use EntityClient.

The first is if you do not want to return objects, but just streamed data, because EntityClient always returns a dbDataReader. This also means it's a great candidate for helping you use an Entity Data Model in existing applications.

The other scenario (which is currently theoretical in my mind and has not be tested yet) where I can see myself wanting entityClient is if I have a data layer that needs to implement the Provider Factory class so that I can select my provider at runtime.

I'm ignoring another possible reason which is that EntityClient provides a familiar way of accessing data because it feels similar to using the other client providers. But because you lose your objects and all of the benefits of the objectContext, I don't think the benefit of "smaller learning curve" is a worthy trade-off.

"The proof is in the pudding," as they say and we saw the pudding last night at the GUVSM presentation because I have already gotten out of the swing of composing Entity SQL queries, while I'm getting to be a champ with LINQ to Entities.

Tuesday, October 16, 2007 9:37:34 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

While this is not online yet, I do have the latest issue of CoDe Magazine in my hands which has (among some other great articles!) an intro article I have written on Entity Framework.

I originally wrote the article using VS2008 Beta1 and Entity Framework beta1, then (as it always seems to happen) the Beta 2 bits of EF were released after the article was finished and with only a few days before the "going to print" deadline. But I was able to rerun all of my tests, through and make sure the content, the code and the screenshots were current, though I wasn't able to add in too much info about the new designer. You'll understand when you see how lengthy the article is.

I also wrote the MVP corner for this issue and finally got a chance to write about something that's been on my mind for a while - and I think it's kinda funny. I was a little surprised they let me write this one! :-)

Tuesday, October 16, 2007 3:56:57 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Sunday, October 14, 2007

Even though I'm still a Unit Testing luddite, I've been looking around to see how people are getting LINQ to SQL and Entity Framework to work in their Unit Testing scenarios even though neither technology is really built to test against well.

First, I found this excellent post by Ian Cooper that explained not just unit testing, but what makes code apprpriate for unit testing. This was really enlightening for this newbie  (that is, moi) and gave me a much better understanding of why the TDD guys have been so frustrated wtih Entity Framework - although it is absolutely evolving in a way that will satisify them (more likely V2, then V1 though).

Ian also was able to find a way to do Unit Testing with LINQ to SQL.

Then I headed back over to Danny Simmons' blog for this recent post on some key tweaks to make to the EDM (and codegen'ed classes (and now my brain knows enough to say "uh oh... codegen...that's a problem for Unit Testing!") work with Unit Testing.

Then I started playing with VS2008 to get a feel for how the tools enable me to do unit testing when have zero experience. I had give in and read through documentation (I know , how lame and lazy am I?) after I spent about 1/2 hour searching for a screencast or webcast on the topic. But I got some of the basics and figured out debugging, but still have some definite quandries! (Such as why do I get a failure when the expected value is 10 and the actual value is 11, but I get an inconclusive (rather than a pass) when the expected value is 10 and the actual value is 10?) I have a lot to learn! :-)

I found Chris Buckett's post on shoving EF into vS2008 Pro unit testing which helped a lot, mostly because he already understands unit testing and therefore understands what challenges he needs to solve when working with entity framework objects. The biggest issue about unit testing data access modules is that you don't necessarily want to hit the database each time. to this point, Chris is trying to create a mock provider to emulate the database calls made by Entity Framework. Another issue is that you need classes that are instantiated without parameters. So while Danny tells us the simple trick for getting regular classes to fit into unit testing (in the above linked post), Chris is struggling with how to create an ObjectQuery return without instantiating an ObjectContext because the latter requires parameters. (Surely, I've gotten some bit of my interpretation wrong in a way that is making you TDD pro's cringe, but I'm trying! :-))

I am happy to sit by the sidelines while he comes up with the model. (Subscribed)

Sunday, October 14, 2007 3:22:32 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [2]  | 

I am a graduate of a college that I will love until the day I die, Well College. I went to Wells almost begrudgingly, with my heart set on studying film at a giant party school: Syracuse University. Being at a tiny 500 student school with no boys around seemed like hell for an 18 year old. During my first semester I begged my parents to let me transfer, but they made me promise to see the year out.

And I fell in love with Wells and spent my entire four years there, learning, learning who I was and not worrying about how I appear or sound to possible love-interests in my classes. It's amazing to have all of that stripped away so that you can just keep your eye on the prize - getting a great education. I allude to this in my "Proud to be a Geekette" essay on OReillyNet's Women in Tech series.

Wells is in a tiny little town in New York State on huge Cayuga Lake (one of the finger lakes) half way up the lake from Cornell (in Ithaca). Many former Wells students stayed in Aurora after graduating. Most continue to have strong ties in one way or another. Mine is through the incredible friendships that I have maintained with a number of women that I graduated with and are still the absolutely dearest friends in my life.

One former grad (from before my time) went on to create the American Doll company and in the 90's sold it to Mattel for $700 million dollars. She decided to use a lot of her new-found fortune to help the college and to help the town. But it was soon apparent to many that her help came at a cost. She turned the town into a big doll house, which created a moral conundrum for so many and a rift through the residents of the town. I haven't been back since my 5th reunion, but have been thinking that I'll be there for the one coming in 2008. (my TWENTY-5th! Egad!). I wonder if I'll mourn the old Fargo, where I spent probably more evenings over those 4 years than I would like to admit. Oh, the memories! ;-)

While my suspicion is that there is a Wells alum working at CNN, it must be a slow news day because this is the headline story on CNN.com this morning. In reality, the article comes from the AP Newswire and was written by Helen O'Neill.

Sunday, October 14, 2007 12:18:54 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

While you can read all about the actual sessions at ReMix07 Boston through the official blog posts that are on the main site as well as from many blogs written by attendees, I am back to my old tricks writing about who I saw and talked to at this event earlier this week.

[A New DevLife Post]

Sunday, October 14, 2007 10:59:46 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Saturday, October 13, 2007

Many of us in Northern Vermont have been living the fantasy of a never ending summer. I was still picking beans and tomatoes from my garden earlier this week. This morning when I woke up the thermomter registered 32.9 and said it had been down to 32.7 overnight. There was frost on the ground. I haven't checked the garden. It certainly wasn't a hard frost so we'll see.

Now of course it is a glorious (though chilly) day with sunshine, blue skies and fall color and nearing 50 degrees. I'm thinking about a bike ride. I'll have to see if my warm weather cycling clothes still fit.:-)

Saturday, October 13, 2007 10:34:55 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
 Wednesday, October 10, 2007

The MSDN Events Tour for Q4 runs from Oct 16 - Dec 31 and hits 51 cities (including Burlington, VT!). One of the sessions is about Astoria* and it is called "A New Paradigm for Data Development with Web Based Data Services".

Astoria sits on top of Entity Framework, and the session will also give a brief intro to Entity Framework, which thrills me to no end! I can only get to so many user groups to spread the love (which I'll be doing next Monday, Oct 15th in Montreal by the way!).

If you are interested in preparing yourself better for Astoria by already having a clue about Entity Framework, you can look for my upcoming article in the Nov/Dec issue of CoDe Magazine called "Introducing Entity Framework".

There are also a bunch of great resources you can keep an eye on:

My Data Access category on this blog

Roger Jennings blog

Mike Taulty's blog

ADO.NET Team blog

And there are a number of team members writing about Entity Framework. I don't even have a comprehensive list but I can highly recommend Danny Simmons blog.

For Astoria, check the Astoria team blog.

*my recent spate of astoria posts:

  • What the heck is Astoria?
  • QuickStart For Building An Astoria Data Service
  • More Fun With Astoria: Random Queries In The Browser
  • Astoria is sick (as in SLICK) when it comes to DML!
  • Trying to see what Astoria messages look like in the pipe
  • Custom Operations and Hiding EntitiesInAstoria
  • Wednesday, October 10, 2007 8:13:56 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [2]  | 

    I promise not to say anything along the lines of "it's about time". I promise! I won't!

    (And you can blame Cicero for that little trick I learned in Latin class many years ago...)

    Wednesday, October 10, 2007 3:11:47 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

    I glanced at this headline:

    Train Derails In Ohio; Explosion Heard

    and thought it said

    Train Derails In Ohio; Expression Blend

    I know that your brain definitely fills in the blanks for you a lot which is why the SHAPE of words plays a huge role in being able to speed read. But I'd say this was a little bit out of context.

    Wednesday, October 10, 2007 1:41:01 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [2]  | 

    I learned a harsh lesson about Visual Studio and saving code snippets in the toolbox yesterday. Knowing that I am not great at coding Entity SQL on the fly, I stuck my code for custom operations in an Astoria Web data service into the VS2008 toolbox. I had two instances of VS open when I did this, so when I closed the instance where I had created the snippets, the instance that was still open is the one that saved the state and they were lost. Note to self: always have a text file with all snippets available when demoing. Oddly, I never used to trust the snippets and only used text files.  I guess I need to get back to a level of cautious (though not rampant) mistrust.

    I did surprise myself this morning when I rewrote these from memory and only made one mistake... inserting an "@" where I didn't need to. I'd call that an A-. It wasn't a typo, though and it did take a few minute to discover the error which is something I don't like doing during a conference session, so I just skipped the pain.  (Still only a C+ in my book :-( ).

    So here, in place of that particular demo, is a post on how to write operations in data services.

    The default service provides for all of the capabilities of drilling into, traversing and querying your entities as laid out in this post and in more detail in the Using Astoria document that comes with the downloads and is also on the Astoria site. (Start at http://astoria.mslivelabs.com to find all resources.)

    However you can customize your service by providing explicit query operations and also blocking specific query operations. Don't forget that you can also build views and sprocs into your model. Views are surfaced as EntitySets so they will be no different than other entities (though read-only) in your web service. Stored Procs are a little different. I have to explore how both of those are currently surfaced in Astoria, but would like to wait until we have bits that are not just prototype.

    To create a custom operation you need to use the WebGet attribute. Here's an operation that finds all customers based on the first name of the contact. (I'm using the AW LT database, and am just lazily querying for something that is a direct property of the customer table.)

    <WebGet()> _
    Public Shared Function CustbyContact(ByVal aw As AdventureWorksLTEntities, ByVal firstname As String) As ObjectQuery(Of Customer)
      If String.IsNullOrEmpty(firstname) Then
      'don't expect to see this nice error if you are testing
      'your services in a browser
        Throw New ArgumentNullException("firstname", _
         "You must provide a name to search on")
      End If

      Try
        Return aw.Customer.Where("it.firstname=@fname", New ObjectParameter("fname", firstname))
      Catch ex As ArgumentException
      'this is an opportunity to catch problems with your Entity SQL query when debugging
        Throw ex
      End Try
      End Function

    Note that I'm using Entity SQL in this query. While the query

    http://localhost:50000/WebDataService1.svc/CustbyContact?firstname=Linda

    will work if I had used LINQ to Entities for the query, I found that further operators or options such as this example where I additionally sort the response data

    http://localhost:50000/WebDataService1.svc/CustbyContact?firstname=Linda&$orderby=CompanyName

    do not work unless I have used Entity SQL.

    While I have used a WebGet attribute to add additional queries to my service, you can use OnSendEntity and OnReceiveEntity to trap calls to the web service.

    This custom operation in my data service prevents any one from querying directly for SalesOrderHeader entities using http://localhost:50000/WebDataService1.svc/SalesOrderHeader.

    <OnSendEntity("SalesOrderHeader")> _
    Public Shared Function RequestOrders(ByVal aw As AdventureWorksLTEntities, ByVal order As SalesOrderHeader) As Boolean
       Return False
    End Function

    I can still get at SalesOrderHeaders, for example by requesting customers with the expand option for SalesOrderHeader entities.

    The using astoria doc details the key components for creating a method that traps requests and also one that traps POST, PUT and DELETE operations.

    Wednesday, October 10, 2007 12:06:41 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
     Monday, October 08, 2007

    I'm hopping in the car to drive the 4 hours to Boston forthe sold-out REMIX which started this morning. I'll be there all day tomorrow and will be giving a talk on Astoria tomorrow afternoon.

    For you locals, the Vermont.NET user group is having a special type of meeting tonight  - a PubClub! We'll (without me  - so You'll) be meeting at RiRa's in downtown Burlington. Check the website www.vtdotnet.org for details.

    Thanks to Laura Blood, Tom Cooley and Rob Hale for coordinating and leading the three discussion topics.

    Monday, October 08, 2007 12:21:35 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

    Two job openings at Competitive Computing:

    Contact: jobs@competitive.com

    SENIOR BUSINESS ANALYST / PROJECT LEAD

    We are looking for a highly-motivated, results-oriented Senior Business Analyst/Project Lead who will be responsible for delivery of software solutions for our clients. To deliver best practice technical solutions and business value to our clients, this position requires demonstrated leadership skills in IT project management as well as a personality that thrives in a continually changing technology landscape.

    The ideal candidate will be a self-starter with the ability to work on a variety of assignments with people at all levels of the client’s organization, leading business/system requirements analysis and application development for several large client projects. Managing clients’ expectations and internal team performance throughout the project lifecycle is a core responsibility. The successful candidate also will need to build strong partnerships across those groups while acting as a key liaison between the technical and business members of both internal and client teams.

    Required qualifications:

    ·         Bachelor's degree in Information Technology or related field, or equivalent along with 5+ years leadership experience in technical systems analysis and development.

    ·         Very strong business analysis, analytical and problem solving skills, with solid data analysis skills.

    ·         Excellent written and oral communications and influencing skills, with skills in consensus building and facilitation.

    ·         Experience using Software Development Life Cycle methodology, to gather/document business, functional and data requirements, in accordance to Object Oriented Analysis & Design (OOAD) guidelines, and in developing/managing delivery of Use Cases.

    ·         Experience managing project schedules and resources using Microsoft Project or other project management tool.

    ·         Ability to work independently and proactively with a minimum amount of supervision, working within a collaborative team environment and with senior level business executives.

    ·         Experience with large scale system development, business re-engineering, and project leadership experience are a plus.

     

    SENIOR SOFTWARE ENGINEER / TECHNICAL ARCHITECT

    C2 is seeking a senior-level software engineer/technical architect to lead design, architecture, and development of custom application development solutions for large client projects. The successful candidate will have previous experience with ASP.NET (C#) development, with a strong background in web-based development, object-oriented concepts, relational database design, and SQL Server development. Strong hands-on application architecture and design skills are required for the position, with excellent written and verbal communications. Previous experience on large client projects and technical presentation skills are pluses.

    Bachelor's degree preferred, Associate's degree considered, along with 5-7 years experience in an application development environment.In addition to a competitive compensation and benefits package, C2 also promotes opportunities to advance technical knowledge through industry certifications, technical conferences, and other training programs. For those seeking significant growth potential, this is a unique opportunity to join a local company and work on challenging projects in a highly collaborative team environment.

    Monday, October 08, 2007 11:18:00 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

     RESOURCE SYSTEMS GROUP is a multi-disciplinary, employee-owned consulting firm specializing in the planning, analysis, and management of business, infrastructure and natural resources. We serve clients who share our belief that high-quality, objective analysis is a prerequisite to resolving complex problems. More than just analysts, scientists, and engineers, we’re communicators – our study results are clear, concise, and directly applicable to a client’s particular questions and challenges. Our solutions are creative and grounded by 20 years of experience with clients as large as federal government agencies and Fortune 500 companies or as small as neighborhood interest groups and local municipalities.  Recognized as one of the “Best Places to Work in Vermont” for the 2nd consecutive year and named as one of the “Best Workplaces for Commuters”, RSG employees enjoy excellent benefits, flexible hours and opportunities for advancement. We are an equal-opportunity/affirmative action employer.  Please visit  www.rsginc.com  for more information on Resource Systems Group. 

     

    Associate – Software Development

     

    This position involves working in the Technology Group, supporting the firm’s software and analysis needs. The primary focus will be developing fully dynamic web-based solutions from interface to business logic to back end database design. We are looking for someone who is organized, resourceful, and analytical to join our team.

     

    ·         Bachelor’s degree with emphasis in computer science or a related field

    ·         Practical experience in the following areas:

    o    Web Development in HTML and CSS

    o    Database programming in SQL

    o    Modern object-oriented programming (e.g. C#, VB.Net, Java)

     

    Please send resume and cover letter to Recruiting Director at employment@rsginc.com and indicate Associate Software Development in the subject heading.

    Monday, October 08, 2007 9:56:16 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 
     Sunday, October 07, 2007

    I wanted to create a demo of Astoria Data Services being used in a Silverlight app for my ReMix07 Boston session on Tuesday. i have created a little screencast of it in action. Read more here...

    Saturday, October 06, 2007 11:19:50 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [4]  | 
     Friday, October 05, 2007

    On January 26, 2008, the VT Software Developers Alliance, CEDO, Champlain College, Seven Days, VSAC, the Lake Champlain Regional Chamber of Commerce and GBIC, along with many other partners is hosting an all day "Creative/Technology Career Jam" at the Lake & College Building on the Waterfront. We are hoping to attract at least 30 employers to set up booths and meet with high school, college students and adults to discuss the growing need for qualified technical employees.

    This event will include food, music, and keynote and educational seminars presented by respected technology professionals, well known in their fields. Booth spaces will be $150 for 20 or less employees and $350 for more than 20 employees with limited space available. There will also be sponsorship opportunities. The rate sheet is not yet available, but please contact Bruce Seifer of CEDO (bseifer@ci.burlington.vt.us) or Patrick Martell with vtSDA (patrick@vtsda.org) if you are interested.

    Friday, October 05, 2007 3:31:21 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

    I've been playing with using EF object in code-behind of aspx web pages.

    The first issue to hit is postbacks.

    Entity Objects are Binary Serializable so they can be stored in ViewState.

    Like many other objects, you need to put your entities into viewstate (I'll deal with session and application caching in another post). Happily entities can be binary serialized so that happens for free when you add an entity object to ViewState. So you can persist the entities, but you cannot persist the ObjectContext, which is where all of the state information for the objects lives. Frankly, the objectcontext is very expensive and you wouldn't want that in viewstate anyway.

    The outcome of this is that even if you store the objects in viewstate, and pull them back out to attach to a new ObjectContext when you need them again, you will lose any state for the objects.

    One saving grace is that objects stored in viewstate get updated automagically during postback. In other words, if I create a cust object and store it in viewstate, then make a change to the cust object, then postback and pull the object back out of viewstate, it will have the newer property values. Viewstate is synced up to the object.

    That means we can be sure to have a current version of the object (or list of objects) hanging around as we muck with the page.

    Binary Serialization keeps the entire graph in tact

    The next piece of the puzzle is that if you have an obect graph (i.e. order with order details or cust with orders with orderdetails) that all gets persisted during binary serialization. That's a big difference from xml serialization. The big reason is that XML serialization doesn't know what to do with the relationships, which are also first class objets. The relationships "contain" all of the related data. So binary serialization can handle this. When you get the object graph out of viewstate, it's got everything in it that it had when it went in.

    Updating related data in an object that is in viewstate

    This doesn't act the way you might expect so listen up.

    Say I have a  cust object that has orders in it. i have saved the cust object into viewstate. If I edit a property of cust, say FirstName, that's easy:

    cust.FirstName="Julie"

    Viewstate syncs up that change just before the postback.

    But what if I want to change something in one of the orders.

    You need to do this directly in the cust object, not be extracting the order and changing it.

    Here's what I mean.

    My first instinct is to do this:

    myOrdtoEdit=(From ord in custs.Orders where ord.OrderID=123 Select ord).First()
    myOrdtoedit.ShippedDate="7/1/2007"

    On postback, that new ShippedData is not there.

    But if I make the change this way:

    cust.Orders.Where(Function(o) o.OrderID = currOrderid).First.ShippedDate="7/1/2007"

    The change is synched up. Good to be aware of.

    What about concurrency? What if I need to remember original values?

    I think the real solution is going to be is to have original values cached in another layer. But for the sake of working out the concepts, let's say you are doing everything in code behind. Here's how I'm solving this problem.

    When I first get the values, I want to store them in viewstate, too. But if I do that, and I want to take advantage of the synching viewstate (I think I remember seeing that there is a page directive to turn that off, but don't hold me to it), then the original objects will get overwritten.

    So what I have done was explicitly serialize the original objects and store the resulting memory stream into viewstate. When it's time to do an update, I deserialize that stream and voila, I have a set of original objects that I can use to compare my current objects to.

    I have a post here on how to do an update when you have the original object and current objects available over here.

    One object or more? How do I persist multiple objects?

    Note that I have wavered between talking about persisting a single object and multiple objects. If you are dealing with a query that returned a collection of objects, then you don't persist the query. Instead, convert the query to a list with .ToList and you will end up with List<Customer> / List(Of Customer) and that's what you can put into viewstate. This is also what you would serialize, the list of customer objects.

    When do I work with the objects again?

    I have done various tests using databinding (gridviews, textboxes) or just manually getting and setting text properties.

    Once you post back, the datasource is gone on a bound control anyway. I just work with the text values that are in the control. When I want to update an object, then I will get the object(s) from viewstate and modify them. Other than that, the only time I need them again is when it's time to do an update back to the data store.

    Friday, October 05, 2007 12:57:01 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  | 

    And I missed it!

    I was at a board meeting for www.vtsda.org, when Rich came home on Wednesday evening and saw a big male moose with BIG antlers sauntering up our road. When Rich got to our driveway he saw another moose... a girl.

    The stage was set and luckily nobody got in the male's way. It is pretty dangerous to get in the way of a male during rutting season; he will knock you down and trample you. Eventually the girl wandered off into our woods and the boy followed her. Luckily they were moving slowly,so most of our neighbors got a chance to see them.

    Nobody got a picture.

    Friday, October 05, 2007 11:28:17 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [1]  | 
     Thursday, October 04, 2007

    Russ Fustino used to be our little secret when he worked out of the Microsoft New England office. He was well loved by Burlington, VT developers who looked forward to his Russ' Toolshed events. A full day of free training that was before MSDN events existed!

    But there's more to Russ' legacy. It was Russ who inspired us to start our user group, VTdotNEt, and it was Russ who pointed his finger at me when he looked around the room to see who might actually take on the challenge.

    Then a dark day came and Russ moved to Florida. There was audible moaning and snivelling to be heard all over the Champlain Valley.

    Happily, we have been very lucky over the years to have Joe Stagner, Thom Robbins, Susan Wisowaty, Chris Bowen and Bob Familiar come to town.

    But next month Russ is coming back!

    I wonder if anyone told him that Nectar's has new owners? Well, let's keep that part quiet because they still serve gravy fries and have local bands playing every night. Hasn't changed that much.

    On Nov 12th, Russ will be presenting at the VTdotNET User Group Meeting and on Nov 13th he will be doing a full day MSDN Event in Burlington.

    You can find out more about the meeting at www.vtdotnet.org.

    You can find out more about the MSDN event as well as register at www.msdnevents.com.

    And one more thing, Nov 12th is Russ' birthday. I vote for wrapping up the meeting as soon as we can and heading down to his favorite watering hole on the planet (that would be Nectar's)  and try to see if we can convince him to return for good.

    Thursday, October 04, 2007 8:35:14 PM (Eastern Standard Time, UTC-05:00)  #     |  Comments [1]  | 

    There is a lot of potential for using nullables incorrectly in VS2008 in Visual Basic without even realizing there's a problem, or encountering a problem that makes no sense.

    Check Bill McCarthy's article in the October issue of visual Studio Magazing (not online yet but watch this space) is really helpful for pointing out gotchas.

    I had a conversation with Bill recently where i was asking some of these questions and he was happy to be able to say "actually, I just wrote an article about that and it will be out soon."

    Ahh, serendipity.

    VB
    Thursday, October 04, 2007 11:22:56 AM (Eastern Standard Time, UTC-05:00)  #     |  Comments [0]  |