# Monday, November 30, 2009

I have been a fan of ADO.NET Data Services (Astoria) for a long time. Last week at the PDC, Microsoft unveiled the new name for ADO. NET Data Services: WCF Data Services. That makes sense since Astoria was built on top of WCF, not ADO .NET. I thought that Astoria was a cool code name and that ADO.NET Data Services sucked as a product name. At least WCF Data Services sucks less since at least it is more accurate and reflects the alignment of WCF, REST capabilities of WCF, and RIA Services (now WCF Data Services).

Astoria, I mean WCF Data Services :), is a way to build RESTful services very easily on the Microsoft platform. Astoria implements extensions to ATOMPub and uses either ATOM or JSON to publish its data. The protocol that Astoria used did not have a name. Since other technology was using this Astoria protocol inside (and even outside of) Microsoft, Microsoft decided to give it a name and place the specification under the Open Specification Promise. Astoria’s protocol is now called: the Open Data Protocol, or OData.

If you have been using Astoria and liked it, not much is different. What is cool is that other technology is now adopting OData including: SharePoint 2010, SQL Server 2008 R2, PowerPivot, Windows Azure Table Storage, and 3rd party products like IBM’s WebSphere eXtreme Scale.

With all of this technology supporting OData, Microsoft created the Open Data Protocol Data Visualizer for Visual Studio 2010 Beta 2. The tool gives you the ability to connect to a service and graphically browse the shape of the data. You can download it from here or search the extensions gallery for Open Data. Once you have it installed you can view OData data very easily. Here is how.

To get started you first have to create a WCF Web Data Service. I just mapped Northwind to an Entity Data Model using the Entity Framework and then created the WCF Data Service. Then I added a console application and set a service reference back to that Astoria Service. My projects looks like this:


To start the OData Protocol Data Visualizer, just right click on the Service Reference and click “View in Diagram.” This “View in Diagram” menu option will show up when you have a Service Reference that is OData compatible, whether you created it or not. (Meaning if you have a Sharepoint list as your service reference, it will work as well.)


This brings up the diagram canvas and corresponding OData Protocol Model Browser.


From here you can select an entity from the Model Browser and drag it onto the canvas. I dragged over the Customer entity and right clicked and was able to add all related entities.


From here you can interrogate your model and start to learn about it, all in Visual Studio. This is a great little add-in!


Technorati Tags:
posted on Monday, November 30, 2009 7:43:07 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Wednesday, November 25, 2009

Microsoft has released a new .NET Stories site that features real developers and their stories about building .NET applications. Sure the site is a marketing site, however, it is pretty cool since the stories are true and very varied. There are stories that integrate SharePoint, SQL Server R2 and Win7. 

I spent some time reading over the case studies and watching the videos and some of the apps blew me away. What is cool is that Microsoft is looking for more. You can submit your .NET app to a contest and get a chance to win a 12-day Galapagos Islands trip or a Smart Car! You can also get featured on their wall of fame.

Having been to the Galapagos, I can tell you, this is an amazing offer. If you are selected, Microsoft may even take your photos and dress you up as Dr. Efficiency, or something like that.

Good luck!

posted on Wednesday, November 25, 2009 9:21:09 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Tuesday, November 24, 2009


Another Firestarter event is coming to the NY/NJ area!  If you’ve been to any of the previous Firestarter events, then you’ll know this one will be sure not to disappoint!  Firestarter’s are a full day event where we focus on a single technology and take attendees from intro to guru in hours.  The goal is for attendees to come away fired up and ready to start using the technologies or methodologies right away.

The Agile Firestarter in NYC that I helped plan and spoke at and back in June 2009 was super popular and a huge success and now it is time to have one in NJ! Are you just starting out with Agile, XP or Scrum and need to get up to speed? Or do you know a thing or two about Agile but want to learn the basics so you can implement it in your organization?  Then this Firestarter is for you!


Registration just opened this morning (Nov 25th).  There are a limited number of seats available for this event, so register quickly if you want in.  Previous Firestarter events have all sold out!  So do it before you head off for a turkey stuffed extended weekend! :)


Saturday, December 12, 2009 from 8:30 AM - 5:00 PM (ET)

Microsoft Office - Iselin, NJ
Microsoft Office - Iselin, NJ


Microsoft Office (Iselin)
194 Wood Avenue South (Prudential Building)
Sixth Floor
Iselin, NJ 08830

The Agenda:

  • Introduction to Agile
    A high-level introduction to Agile concepts and values from the software developer's perspective.
  • SOLID:  OO Principles
    This presentation will examine the five key design principals used on agile project and how to use them to build out an adaptive system over several cycles.
  • Test-Driven Design & Development
    An introduction to Unit Testing and Test-Driven Development, showing how this approach helps keep your code adaptable to change
  • Agile Estimation & SCRUM
    An overview of the concept of agile estimation and the notion of re-estimation
  • Domain Driven Design
    An introduction to the core principles for applying a Domain Driven Design approach and how it fits into the agile development life cycle.
  • Continuous Integration
    This session shows how to centralize your quality assurance efforts and help keep developer productivity high (and defect count low!)

The Presenters:

  • Stephen Bohlen
    Currently a Senior Software Engineer for FirstPaper, LLC, a start-up in the world of digital media, Stephen brings his varied 15-year-plus experience as a former practicing Architect, CAD Manager, IT Technologist, Software Engineer, CTO, and consultant to the design and delivery of Software Engineering Solutions.Stephen is an active contributor to several Open-Source Software projects including NHibernate, NDbUnit, and others as well having developed a number of Visual Studio productivity add-ins. Active in the local NYC software development community, Stephen speaks publicly, blogs regularly, and is the author of several popular screencast series focused on Agile and ALT.NET concepts and technologies including the widely-praised 15-part Summer of NHibernate video series introducing viewers to the popular open-source O/RM tool and the Autumn of Agile series that takes viewers through the design, planning, and construction of an entire .NET project in an Agile context. He is also a contributor of a number of shorter screencasts available on Dimecasts.NET and elsewhere. Stephen is also a founding/organizing member of the NYC ALT.NET user group which meets monthly to discuss Agile-focused techniques and technologies in the world of Microsoft software development and beyond.
  • Jess Chadwick
    Jess is an independent software consultant specializing in web technologies. He has over 9 years of development experience ranging from embedded devices in start-ups to enterprise-scale web farms at Fortune 500s. He is an ASPInsider, Microsoft MVP in ASP.NET, technical editor of the recently-released Silverlight 3 Programmers Reference (WROX) and leader of the NJDOTNET Central New Jersey .NET user group.
  • Sara Chipps
    Sara is a developer specializing in web applications, an irreverent blogger at GirlDeveloper.com, and a writer for Datamation.com. She enjoys participating in and organizing community events such as Code Camps and most recently NJ Tech Drinks and Concept Camp, an opportunity for nerds to go camping together.
  • Peter Laudati
    Peter Laudati, the "JrzyShr Dev Guy," is a Developer Evangelist with Microsoft, based in the New York/New Jersey area. One of his roles is supporting and educating Microsoft customers working with the .NET development platform. Peter supports the community of .NET developers in the NY Metro area by speaking at user group events and Code Camps. Peter is also the co-host of the “Connected Show”, a new podcast covering Microsoft technology with a focus on interoperability.  His blog can be found at http://www.peterlaudati.com.
  • Todd Snyder
    Todd is a MCSD in .Net and a MCTS in SharePoint & Biztalk. He works in the Infragistics Experience Guidance Group (XDG) as the developer team lead. In his role as the XDG developer team lead Todd is responsible for making sure the samples include with Net Advantage showcase the capabilities of the product and help educate developers on how to tap into those capabilities. Prior to joining Infragistics Todd spent several years working as consultant helping customers build enterprise .Net applications.
Technorati Tags:

  Technorati Code: YJQU3Z2SWF46

posted on Tuesday, November 24, 2009 5:39:35 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Monday, November 23, 2009

Last week at PDC, Telerik launched a new product named JustCode. It was a stunning success since we had a lot of people show up for the launch and we gave away 1,000 free licenses at the event. Back in March at a planning meeting at Telerik HQ, we decided that we would embark on an Apple style “secret” strategy and go for the most buzz at launch.

Back at that meeting in March we decided that secrecy, which goes against a lot of our values at Telerik, would be required for the most buzz at the launch. But keeping a secret is not easy in the world of Twitter, blogs, and Facebook. Back in March only the development team, their closest buddies, and the senior management knew about JustCode. But that had to change soon as we started to dogfood JustCode a month or so later at Telerik. We were certain if we communicated the goal of being secret that there would not be any leaks. At the same time we decided to extend JustCode outside Telerik to a handful of vendors (super thanks to Imaginets for not only building the Work Item Manager and Dashboard, but doing it with clunky pre-alphas of JustCode.) A little later on, we also gave a super early look to the Telerik MVPs and DevReach speakers. Nobody let the news out.

Nobody that is, except me- one of the architects of the “secret” plan.

The fist boo-boo I made was mention it to a fellow Telerik employee back in March just after that meeting. Oops, but no big deal, it was at least in the family.

The next snafu was in Durban, South Africa, back in August. I was speaking at TechEd South Africa and I used my non-presenter VPC to do one of my demos since that had the particular Silverlight 3.0 bits on it and my presentation VPC had only Silverlight 2.0 (long story but a different demo needed SL 2.0 at the time. Remember SL 3.0 only shipped the week before..) My non demo VPC of course had JustCode early alpha on it since we were dogfooding it at Telerik. Most of you know me and know that I love to write a lot of code in my sessions. Well I had to do some refactoring in one of my talks and boom, without thinking, used JustCode on stage. Big oops! Luckily the handful of folks who came up to me after to ask “do you have a super fast beta of Resharper on your machine?” were sworn to secrecy and kept their word of the secrecy of JustCode. (The free license I promised them also didn’t hurt.)

Next came the awesome video product teaser that generated a lot of buzz. If you didn’t see it, watch it here.

Next came Basta in Germany in September. Our marketing team printed up flyers with all of our products on it. Somehow JustCode made it to the flyer! After a few frantic calls back and forth, the team at Basta decided that we would test the waters and give the flyers out. The first person who noticed it asked if we support F#. Everyone who came to the booth was sworn to secrecy.  After Basta the flyers were destroyed. (Look for a few of them on eBay, they are now a collector’s item.)

Lastly was the day of the launch. I was wearing a JustCode tee shirt well before the launch. I was filming an MSDN video and also speaking at my BOF talk, so Stefan decided to put tape over the “Code” on my tee shirt to generate some buzz. It worked but I took the tape off and put it back on about an hour before the launch to reposition the tape for the unveiling, and the C and E were now showing, so people were able to guess.

Despite my attempts to sabotage our well laid plans, the launch went great. Note to Telerik: next time don’t tell me the secret product launch!

Technorati Tags: ,
posted on Monday, November 23, 2009 3:22:34 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Friday, November 20, 2009

As I sit in my hotel room recovering from my PDC Hangover and reflecting on the past week, the Day 2 keynote by Steven Sinofsky was the highlight for me.

You may be thinking, yea yea, lucky bastard, you got a free laptop. Sure that was awesome, but that is not what stuck out most in my head. The most important thing that Sinofsky did was to be brutally honest with the audience. This represents a new attitude from Microsoft.

Sinofsky admitted Vista’s flaws. To prove that he got it, he even showed some of the annoying dialogs and videos of customers doing useability testing with those annoying dialogs. (He did follow up with some of the changes Windows 7 made and some of customer useability tests.)

Then he moved to IE 9 development. I remember the Microsoft of the browser wars era. The one where Bill Gates would get on stage in front of 20,000 people at COMDEX and never say the words “Netscape” but rather “down level browser.” At the PDC keynote, Sinofsky  said the words “Firefox” and “Google Chrome”. Not only did he say those words, he showed charts at how slow IE 8 is compared to Chrome, Safari, and Firefox. Of course he was also showing how IE9 will be just as fast, but he is openly admitting in front of 5,000 people and live on streaming video that IE 8 sucks.


He also talked about how IE 8 fails the ACID 3 Standards Test. I ran it here and IE 8 gets a pathetic 20 out of 100:


Then Sinofsky talked about IE9 and the Acid 3 test. IE 9 gets a pretty sad 32, but he showed it anyway and promised to get better.


I also like Sinofsky because he is accessible. When Win7 went RTM to MSDN last summer, I sent a message complaining about what I thought was a bug to an internal Microsoft email alias. Sinofsky replied to me personally with a solution (on a weekend), and it was soon clear to me that the problem was caused by something that I did, not Win 7. I followed up with some thanks for the solution and told him that the real problem was somewhere “between the chair and the keyboard.” He even replied back again saying no problem and we had a few more mails in the thread and a good laugh. This is a very busy VP in charge of one of the most widely used products in the world taking time out to talk and troubleshoot with a customer.

You may be thinking, sure Steve but you are an MVP and RD. Well at the PDC in the afternoon after they gave us the laptops, Sinofsky spend about an hour or two walking around looking for people in the cafe playing with their new laptops. He stopped and chatted with each person asking how they liked it, did the touch live up to their expectations, etc. Then he went to the expo hall and did a book signing (with free copies of his book) and even posed for photos with anyone who wanted as he signed the book.

This level of accessible and honesty is simply amazing. Keep it up Microsoft.

Technorati Tags:
posted on Friday, November 20, 2009 4:31:29 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Thursday, November 19, 2009

Today at the PDC, Microsoft announced a new SQL Azure developer tool that is still pre-alpha: Code Name Houston.  Houston is a web based developer tool for SQL Azure databases. Built in Silverlight and hooked into the SQL Azure developer portal, Houston allows you to rapidly create tables, views, procedures, add data, delete data, etc. It kinda reminds me of Microsoft Access, but in a good way. This tool is not for admin stuff like adding users, just rapid database development in the cloud.

Houston is not available yet, but was demoed at PDC. Building a table was done very fast. It was not demoed, but I did see a button for import and export of data. When asked about general availability, no dates were given but calendar 2010 was indicated as the target. Can’t wait…

posted on Thursday, November 19, 2009 6:24:28 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Wednesday, November 18, 2009

PDC is well underway and of course Telerik launched JustCode last night. It was fun walking around with the JustCode tee shirt on all day and duck tape over the CODE part.

If you are at the PDC swing by the Microsoft SQL Server booth and take a look at two of our exciting new projects. Microsoft is highlighting both our OpenAccess Data Services Wizard and our LINQ to M implementation.

See you at the Telerik booth, my sessions, or a party. :)


Technorati Tags: ,
posted on Wednesday, November 18, 2009 9:38:03 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Tuesday, November 17, 2009

Thursday, November 19, 2009
Parallel Programming and Patterns using Microsoft .NET 4.0 ( Task , PLINQ , Data)

You must register at https://www.clicktoattend.com/invitation.aspx?code=141114 in order to be admitted to the building and attend.
The manycore shift presents an unprecedented business opportunity for developers to design new software experiences that take advantage of the performance power of manycore architectures. At the same time, parallel programming is complex, difficult and labor-intensive, for even the most skilled developers.
This session will cover some basic concepts of Parallel Programming , related patterns , demos and .NET 4.0 support for parallel programming.

Navneet Srivastava, Emerging Health Information Technology

Navneet is lead architect and manager of engineers in the Product Development division of Emerging Health Information Technology, a subsidiary of Montefiore Medical Center in the Bronx. He oversees design and development of the breakthrough clinical intelligence application, Clinical Looking Glass, employing cutting edge Microsoft technologies and a host of best practices. In past positions, Navneet has developed other healthcare applications with national distribution.

Thursday, November 19, 2009

Reception 6:00 PM , Program 6:15 PM

Apress , 233 Spring Street (between 6th Avenue and Varick Street) New York, NY 10013 , 6th Floor

C or E trains to Spring Street or #1 train to Houston Street

posted on Tuesday, November 17, 2009 10:04:52 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Monday, November 16, 2009

Joel and I are doing a BOF session on Tuesday about Agile tools and Teams. (I am not listed on the PDC web site for some reason, but I will be there alongside Joel.)

We will most definitely show the Telerik Dashboard and Work Item Manager as well as chat about tons of other great tools. Most importantly, we want to hear from you at this session. We did it that way at TechEd in LA earlier this year (the #1 ranked interactive session at TechEd 2009) and it worked well. Hope to see you there and have a great discussion.

Tooling on Agile Teams

Joel Semeniuk in 309 on Tuesday at 3:00 PM

Agile practices focus on customer value and team interactions. There is significantly growing and important set of tools that work to help Agile teams be more “agile”. In this session, we would like to hear what you have to say about tools for Agile teams? What tools work? What tools don’t work? What tools are missing in the industry? What tools can you not live without? Come join the discussion or simply listen to what your peers have to say.

See you there!


posted on Monday, November 16, 2009 1:54:14 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Sunday, November 15, 2009

Following the lead of the Department of Justice (DOJ) in Washington, DC, the Attorney General of the State of New York, Andrew Cuomo, has brought a lawsuit against Intel, calling them a monopolist. While Intel has recently settled legal claims with rival AMD (mostly due to patent disputes as well as some anti-competition charges), Cuomo is suing Intel on the grounds that they are a monopoly and have stifled competition.

While Intel’s market share is huge, over 80% of chips sold are “Intel Inside”, the free market has regulated the industry very nicely and lead to innovation. Intel and its cheap and low powered Atom processor started the netbook revolution (I now see as many netbooks as Macs in Starbucks). Look at the progress with multi-core and x64 architecture. (Actually three years ago I thought AMD’s x64 chips were better since their high end chips had more cores at the time. I remember buying an AMD based 2xquad core x64 SQL Server machine in that time frame and was impressed that AMD’s multicore server chips were so much better.)

Over ten years ago, I lobbied the US Congress against the DOJ’s case against Microsoft on similar grounds. At the time did Microsoft do some bad “evil empire” things that they were able to do since they were so big? Yes. Enough to warrant an anti-trust legal battle? No. The free market was able to sort it out on its own, far better than the legal remedies brought by the DOJ. When Microsoft got all big and lazy with dominate Internet Explorer market share, boom, Firefox came out of nowhere and handed Microsoft its lunch. Now Microsoft is starting to invest and innovate in the browser space, but now has to deal with not only Firefox, but Chrome and Safari. The free market did loads more to spur innovation and regulate Microsoft than the anti-trust trial even dreamed of doing! Same with Intel, allow the free market to decide, not lawyers.

Fellow New Yorker and good friend Andrew Bust wrote an opinion here. Andrew is a registered Democrat and I am a registered Republican. We both agree on this issue. The last time we agreed on a political issue was when DOS was the primary operating system used.

Let the free market regulate the industry and don’t let the government stifle innovation. Sign a petition here.

posted on Sunday, November 15, 2009 4:38:07 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Saturday, November 14, 2009

I appear again on .NET Rocks this week, this time talking with Richard and Carl about life in the 21st century. I talk about marketing in the digital age, geek stuff, and also argue with Carl about Amazon’s decision to remove the book 1984 from the Kindle.

You can listen here. Enjoy.

Technorati Tags:
posted on Saturday, November 14, 2009 9:08:59 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Friday, November 13, 2009

Earlier this week, Microsoft released SQL Server 2008 R2 November CTP (Microsoft needs to hire some people from Apple to do something about the naming of their products.) I learned while at TechEd Europe 2009 that the version of SQL Server Management Studio (SSMS) that ships with R2 CTP3 has support for SQL Azure. So I downloaded the CTP (I had to do it in the speaker room, the speaker hotel blocks just about everything on its “free” wifi) and got rolling.

After installing, I decided to play around with the SQL Azure support. I was able to put my login credentials right into the SQL Server connection dialog and did not need to specify a database in the “Options” menu like I had to do before.


I was able to play around with SSMS and Azure and create databases tables, views, etc (via TSQL, not dialogs). Most importantly, SSMS does support the Object Explorer for SQL Azure!  We can’t change the database as we can in other community tools, however, this is still a beta and it has come a long way so far. SSMS supports most of the functionality that you will need to get started with SQL Azure.



Technorati Tags:
posted on Friday, November 13, 2009 5:02:34 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Thursday, November 12, 2009

Just a few weeks ago Microsoft released Visual Studio 2010 Beta2. Last week Telerik put its Q3 release live into production. One of the cool new Q3 features is that OpenAccess now works seamlessly with Visual Studio 2010. That means you can target .NET 3.5 or .NET 4.0 using either Visual Studio 2008 (.NET 3.5) or Visual Studio 2010 (.NET 4.0).

I will do a quick demo with Visual Studio 2010, SQL Azure, and OpenAccess. With OpenAccess Q3 installed, I fired up Visual Studio 2010 and started a console project targeting .NET 4.0


While the project will target the .NET 4.0 Framework, we have to do one small thing to make it work. By default the project type is “.NET 4.0 Client Profile” so we have to change that to a straight up .NET 4.0 project type. The way to do this is to right click on the project and select properties. In the properties dialog Application section, you will see Target framework;  select .NET 4.0 and you are good to go. (Visual Studio will have to close and reopen the project for you.)


Next we have to fire up OpenAccess via the Enable Project Wizard. When I start the Enable Project to use ORM Wizard, OpenAccess asked me what database to use, and as I showed before on this blog, Q3 now supports SQL Azure natively. Notice that the wizard will prompt you to put in your SQL Azure credentials and will give you the basic template for your server name: tcp:<sqlazureid>.database.windows.net.


Note: Depending on your setup in Visual Studio 2010, you may have to use the Server name without the tcp: and use the syntax UserName@sqlazureid. Visual Studio 2010 will give you an error in your setup if the default does not work. If you get this error you would enter the following for your SQL Azure credentials:

Server Name: sqlazureid.database.net (no tcp:, so for example p28drog84.database.net)
User Name: YourSQLAzureUserID@sqlazureid (for example: Stevef@p28drog84)

Next you will want to map some SQL Azure tables to OpenAccess entities. This can be done pretty easily, just by running the Reverse Mapping wizard. Here you can select your tables to map. By default OpenAccess will also now map the foreign keys of each entity as a primitive type in addition to the complex type. This will help a great amount if you are using your entities in conjunction with any data service such as WCF or ADO .NET Data Services. (More on that later.)


Once you have mapped your entities, you are free to work with them. You can use the OpenAccess LINQ implementation (which has went through a major overhaul and is in line with the LINQ to SQL and LINQ to Entities LINQ implementations.) As I showed last time, you can write a simple LINQ statement to filter all the Customers by a certain country as shown here:

   1:  static void Main(string[] args)
   2:  {
   3:      IObjectScope dat = ObjectScopeProvider1.GetNewObjectScope();
   4:      //LINQ Statement   
   5:      var result = from c in dat.Extent<Customer>()
   6:                   where c.Country == "Germany"
   7:                   orderby c.CompanyName
   8:                   select c;
   9:      //Print out the company name  
  10:      foreach (var cust in result)
  11:      {
  12:          Console.WriteLine("Company Name: " + cust.CompanyName);
  13:      }
  14:      //keep the console window open  
  15:      Console.Read();
  16:  }




posted on Thursday, November 12, 2009 11:20:25 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Wednesday, November 11, 2009

For me at least. After delivering three sessions at TechEd Europe, I have to turn around and head home and then turn around and head out to the PDC (I have an agile birds of a feather session there, more info later.)

It was great speaking and I also helped out at the Telerik booth. During the slow time, the whole team took a break and were brave enough to trust me to manage the booth all by myself. (I did not break anything!)

See you all next year!

posted on Wednesday, November 11, 2009 8:51:26 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Tuesday, November 10, 2009

Last summer Telerik released the Oslo Comparison and Migration Tool. It is a tool that is available free for the community. It allows you to compare two Microsoft code named “M” files, see a visual diff, and then merge the results. (M is the code name for a new data modeling language from Microsoft.)

Telerik has expanded the tool to allow comparison of items in the SQL Server “Repository” and then do the same visualdiff and them merge the schema. Developers who have been playing with the M language and repository will find it very useful to have a tool that will allow comparisons and migrations, since the requirements of our applications are always changing! :) Pretty cool.

Just a note: Telerik will be updating the tool as soon as Microsoft makes some “M” and SQL Server “Repository” related announcements next week at PDC. Stay tuned!

posted on Tuesday, November 10, 2009 1:34:25 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Monday, November 09, 2009

I am in Berlin for TechEd 2009 while Germany is celebrating the 20th anniversary of the Berlin Wall falling. Today most of us take for granted the society we live in, however, when I was growing up Eastern Europe was “the enemy”, all colored red on a map. We were not free to do business with the “eastern block”, nor were we allowed to visit without permission. Today that is all gone and I now work for a company that was behind the “iron curtain”, a company that would never have existed if the Berlin Wall did not fall.

Last night we walked down by the Brandenburg Gate and downtown Berlin. I listened to amazing stories from my colleague at Telerik, Jan Blessenohl. Jan is German and was in university in 1989. On November 9th, he actually traveled to East Berlin to buy some cheap textbooks when the protests overwhelmed the Berlin Wall and when it fell he was right there at the Brandenburg Gate standing on the wall, a part of history.

It is amazing to be here today…

Update 1

The speaker gift at TechEd was a piece of the Berlin Wall!

Update 2 (Photos!)

I went to the Brandenburg Gate area near Potsdamplatz this evening to watch the ceremonies. What was really cool was that there were 1,000 foam dominos lined up to fall, each decorated by 1,000 artists around the world. Because there were 1,000 of them and it was pouring rain, I got to get up close to them and take lots of photos.


Also a photo of the Brandenburg Gate:


posted on Monday, November 09, 2009 4:25:15 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Saturday, November 07, 2009

Next week I will be speaking at one of my favorite events, TechEd Europe, this year held in Berlin. While Barcelona is still my favorite city in the world, I am glad that we are in Berlin this year, since Monday is the 20th anniversary of the Berlin Wall falling, and our world changing forever.

I will be speaking on:

I speak on Tuesday and Wednesday, and the event is SOLD OUT. I hope you were lucky enough to get a ticket. I’ll be hanging out at the Telerik booth when I am not speaking if you want to come and say hi.


Technorati Tags: ,
posted on Saturday, November 07, 2009 3:17:24 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Friday, November 06, 2009

I have been supporting PalDev, the first (and I think only) .NET User Group in Palestine for many years. It started as a vision of Jihad Hammad a friend of mine, about 6 years ago. Goksin Bakir, Malek Kemmu, and some others in the community have also rallied behind PalDev.  This is a user group that had its first meeting in a refugee camp, then moved to Al-Quds Open University. Now they have almost 200 members and just helped launch Windows 7 and organize Microsoft’s first ever TechDays in Palestine.

The event was a great success, held over three days in three cities in Palestine. Attendance at the first day in Hebron, was about 250. Goksin was suppose to speak at the event but did not have the proper visas and was turned away at the border, so he went to Jordan and did a LiveMeeting!

This is a region with a tremendous amount of political instability, to say the least. I encourage all members of the community to help out, contact Jihad and do a session via LiveMeeting, or travel to Palestine and deliver a talk. You won’t regret it and you will do more to bring peace to the Middle East then all of those politicians out there.

You can read Jihad’s post here.



Technorati Tags:

posted on Friday, November 06, 2009 3:19:44 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Thursday, November 05, 2009

I am in Hong Kong speaking at the Hong Kong International Computer Conference. It is a great conference, it focuses on IT as a driver for innovation and economic transformation. I was lucky enough to be doing one of the keynote presentations on how technology is so disruptive and how cloud computing changes entrepreneurship. In my talk I mention Ray Kurzweil’s Abstraction of Moore's Law, which can be summarized as saying that the next 20 years will see as much technological innovation as the past 100.

I represented Microsoft Hong Kong in this talk, and after the speech lots of people came up to me to chat. I got to talk to tons of folks at the conference: I got to talk to students and professors at Hong Kong University, the folks from One Laptop per Child, entrepreneurs (including a dude building some amazing robotics), people form NGOs, and local software developers. We got to talking about how the new technology reality has drastically changed business models. Think about digital media, the music industry has changed forever, old business models just don’t work anymore.

This got me thinking. Microsoft recently announced a great offer for Visual Studio Ultimate (yet another SKU). But the world has changed. Web 2.0 is here! So I say: All SKUs of Visual Studio should be free.The goal should be to get Visual Studio out to everyone, for free. I know that we have Express versions of these products, and for the most part, they are very capable, but I mean the real deal, Visual Studio Ultimate.

Now I know what you are thinking: Steve, have you gone soft on me?

Of course not.  I am still a disciple of Milton Friedman and a firm believer of free markets and economic incentives. But that does not mean you have to actually sell something to make money on it. I am thinking of Visual Studio 2.0.

For example, there are four versions of Visual Studio as far as I can tell. (And the fact that I have no idea is a problem.) There are the free express versions, Professional, Premium, and (the new SKU) Ultimate.


Microsoft should do away with all versions and give away Ultimate (without MSDN) to anyone who wants it. My mom could go and download it if she wanted to. Just have to provide some demographic information and have a Live ID.

The startup page in Visual Studio would be ad supported (and you can’t make it go away, so you will see it each time you load Visual Studio.)  I could see Telerik or our competitors wanting to sponsor that page-but not in a “pay us a million dollars model”, rather as a pay per conversion model. Basically Telerik and our competitors would pay a small fee to be on the startup page and be able to stream ads to the developers and each Telerik license sold, Microsoft takes a cut.  Note to Microsoft, since this was my idea, can Telerik have an exclusive on that page? :)

In addition, in exchange for the free Visual Studio, Microsoft will get anonymous data from the developers. What country you are in, the specs of the developer machine, installation experience, etc. Also how many projects were started in C# v VB v F#, etc. Silverlight v Web, etc. Imagine if Microsoft knew all of this data!! I want to know how many lines of C# code in Brazil were written for Windows Forms last week.

Microsoft can then sell ad space based on your environment. Think about a C# developer in Poland working mostly on Silverlight. On the startup page next time there are offers (in Polish) for Silverlight tools, conferences, books, or even job offers. How much would Dell pay to market to every developer in Australia with Visual Studio installed on an “underpowered” machine? The vendor would only know who you are if you actually clicked on the offer.

Microsoft can also make money by using Visual Studio as a sales engine for MSDN. MSDN does not really have a “sales force” and Visual Studio can be a “loss leader” for MSDN.

But MSDN’s business model would have to change as well. Why not have MSDN (not the software part) evolve into a Visual Studio based Facebook/Linkedin social network for developers. You can only get into your “MSDNFacebook” via Visual Studio. When you are coding, Visual Studio can automatically update your status (Stephen Forte is currently breaking the build….) Imagine hitting F1 and be brought to a MSDN forum search on that line of code as one option. Every .NET developer in the world would be a member of this social network! Want to find a user group? No problem! Imagine the collaboration opportunities. A whole new world of revenue opportunities would open up to Microsoft, including an IPO of MSDNFacebook! :)

In addition, the MSDN software pricing model would change. Microsoft can sell fractional MSDN licenses and specialize MSDN for local markets and different developer types. Maybe you only want MSDN for Web Development. MSDN is expensive since it includes big things like Windows Server and Exchange, etc. (I have never installed Exchange, nor will I ever do so.)  Maybe you can have MSDN options where that is excluded. Kind of like a menu where you customize just want you want and pay only for what you use. Sell more with less. (Sound familiar?)

Of course if you want the ads and the anonymous data collection turned off, you can pay an annual fee. If your employer is paying that annual fee, they can opt out of certain content, such as a job offer coming your way, etc.

Visual Studio 2.0 would be awesome. Developers get free software and more collaboration, vendors get to tap into the entire ecosystem, and Microsoft makes more money while collecting a tremendous amount of metrics, metrics that will drive new features, service packs, etc.

Maybe this will be one of the great announcements next week at the PDC……..

posted on Thursday, November 05, 2009 6:56:41 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Wednesday, November 04, 2009

Tomorrow I will be speaking at the 2009 edition of the Hong Kong International Computer Conference. This year’s theme is on Value Creation and Economic Transformation via IT. When they asked me to put together a session, I jumped on the idea of how Cloud Computing has changed the economics of start-ups and entrepreneurship. 

I started Corzen, my last company, in 2002. We got started for around $250,000. About $75,000 of that was on building out a data center. I am a software guy, so this also took a lot of my time. In 2010, I can have more processing power, more storage, and more free time for around $99 a month from Windows Azure or Amazon EC2. Think about what this will mean, it will be much easier to start a new business in the future.

The implications of this are staggering. The late 90s was always considered the golden age of start-ups since funding was so “easy” in the .com boom. Now you can start your own business for less than $20,000! We’ll see a ton of new businesses pop up in all industries. Since you won’t need investment to get started and most entrepreneurs will use their own money, the start-ups will have tons of passion.

Innovation will take a great leap forward in the next decade. Cloud Computing will lead the way.


posted on Wednesday, November 04, 2009 1:43:02 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Tuesday, November 03, 2009

I have a simple demo application that uses ADO.NET Data Services as a data service back end for a Silverlight application.  My ADO.NET Data Service uses the Entity Framework to map the Northwind database tables of Customers, Orders, and Order Details. Once the Silverlight applications sets a service reference to the ADO.NET Data Service, you can use the client side LINQ libraries to build your application. My application looks like this, it has a drop down filled with customers, a grid with Order and a grid with Order Details. As you click on each one, it will filter the rest.


The LINQ statement for the drop down looks something like this:

   1:  //this uses the LINQ to REST proxy (servicereference1)
   2:  NorthwindEntities dat = new NorthwindEntities(
   3:      new Uri("Northwind.svc", UriKind.Relative));
   5:  //linq query to get customers in ComboBox
   6:  var customers = from c in dat.Customers
   7:                  orderby c.CustomerID
   8:                  select c;


Pretty basic LINQ stuff. What I would like to do next is bind my drop down combobox to customers. There is one catch, since we are in Silverlight, this processing has to be done asynchronously, so that data binding code has to be done elseware.

There are a few ways to do this, the most straight forward it to set a delegate and catch an event, etc. Another is to use a code block and catch the event right in the same method.

While both of these solutions are fine, I don’t like them. I don’t like them because they look funny and pollute my data access code with tons of async communication stuff. Lastly, for each area where we have a LINQ statement, we have a lot of repetitive similar looking code. Every bone in my body wants to make that generic and only call it once.

Enter the AsyncLINQManager class I wrote. Forget about the details of this class for now, I will list it below in full. For now let’s show how to use the LINQ statement with the helper. First you have to create an instance of the AsyncLINQManager and then register an event. (No getting around the events!) You can do this in the page load handler:

   1:  //ref to the linq manager
   2:  alm = new AsyncLINQManager();
   3:  //register an event so we can do the databinding
   4:  alm.OnEntityFetched += Page_OnEntityFetched;

Now your LINQ statement needs one more line of code. Here is the same LINQ statement from above, passing customers to the AsyncLINQManager:

   1:  //this uses the LINQ to REST proxy (servicereference1)
   2:  NorthwindEntities dat = new NorthwindEntities(
   3:      new Uri("Northwind.svc", UriKind.Relative));
   5:  //linq query to get customers in ComboBox
   6:  var customers = from c in dat.Customers
   7:                  orderby c.CustomerID
   8:                  select c;
   9:  //call async functions for the linq query
  10:  alm.LinqAsync(customers);

Line 10 is the only new line of code. Now the LINQ manager will take care of all of the async processing for us and we just have to put our data binding code in Page_OnEntityFetched() shown here:

   1:  //this event handler will do the actual databinding
   2:  void Page_OnEntityFetched(EntityEventArgument args)
   3:  {
   4:      switch (args.TypeName) //we get this info from the event
   5:      {
   6:          case "Customers":
   7:              CustomerCbo.ItemsSource = args.returnedList;
   8:              break;
   9:          case "Orders":
  10:              dg.ItemsSource=args.returnedList;
  11:              break;
  12:          case "Order_Details":
  13:               dg_Details.ItemsSource = args.returnedList;
  14:              break;
  16:      }
  17:  }


You will notice that we do all of our data binding here, for all of our LINQ statements. This is the value of the AsyncLINQManager, now all of my binding code is in the same place. (I am sure that there will be some who disagree, but hey, build a better AsyncLINQManager and blog about it and I will link to it. :) )

So let’s take a look at the code to query the orders, you will notice that it will call the same LINQ manager and then have to come back to Page_OnEntityFetched() to do the binding:

   1:  //orders
   2:  private void AsyncBindOrdersCbo(string customerid)
   3:  {
   5:  //this uses the LINQ to REST proxy (servicereference1)
   6:  NorthwindEntities dat = new NorthwindEntities(
   7:      new Uri("Northwind.svc", UriKind.Relative));
   9:  //linq query to filter the Orders in the grid
  10:  var orders = from o in dat.Orders
  11:               where o.Customers.CustomerID == customerid
  12:               orderby o.OrderDate
  13:               select o;
  15:      alm.LinqAsync(orders);
  17:  }

What I really  like is that you can go ahead and write a simple LINQ statement like you are use to, pass the result to the AsyncLINQManager for processing and then just have one event handler take care of all of your data binding. To me, your code is more clean and your developers can code the LINQ statements almost like normal (minus that one extra line of code) and forget about all of the async stuff.

The code for the AsyncLINQManager is here. All it is doing is sending out the async request, catching it, and then returning an IList and object name in the event args.

   1:  using System;
   2:  using System.Linq;//for IQueryable
   3:  using System.Data.Services.Client;//for DataServiceQuery
   4:  using System.Collections;//for ILIST
   6:  namespace LinqUtilities
   7:  {
   8:      //ASYNC Linq stuff
   9:      public class AsyncLINQManager
  10:      {
  11:          //see the EntityEventArgument class below for the event args
  12:          public delegate void EntityFetchCompleted(EntityEventArgument args);
  13:          //developer must register this event in the UI code to catch the IList
  14:          public event EntityFetchCompleted OnEntityFetched;
  16:          //pass in linq query object for execution
  17:          public void LinqAsync<T>(IQueryable<T> qry)
  18:          {
  19:              //generic async call to start the linq query
  20:              DataServiceQuery<T> dsq = (DataServiceQuery<T>)qry;
  21:              //Call the code async and assign OnFetchComplete to handle the result
  22:              dsq.BeginExecute(OnFetchComplete<T>, dsq);
  23:           }
  25:          //method to handle the async result
  26:          void OnFetchComplete<T>(IAsyncResult result)
  27:          {
  28:              //catch the status of the async call
  29:              DataServiceQuery<T> dsq =(DataServiceQuery<T>)result.AsyncState;
  30:              //if we are done, then stuff the data into a untyped List
  31:              if (OnEntityFetched != null)
  32:              {
  33:                  //delegate for event
  34:                  OnEntityFetched(new EntityEventArgument
  35:                                 { returnedList = dsq.EndExecute(result).ToList() });
  36:              }
  37:          }
  39:      }
  42:      //event args class for the event on the client to 
  43:      //see what linq query they are handling
  44:      public class EntityEventArgument : EventArgs
  45:      {
  46:          public IList returnedList { get; set; }
  47:          public string TypeName
  48:          {
  49:              get { return returnedList.Count == 0 ? string.Empty : returnedList[0].GetType().Name; }
  50:          }
  52:      }
  53:  }

You can download the sample code and the AsyncLINQManager code from my “DataAccess Hacks and Shortcuts” session demos here.


Technorati Tags: ,,
posted on Tuesday, November 03, 2009 4:42:33 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Monday, November 02, 2009

Microsoft’s SQL Azure database offering has great 3rd party support. This week Telerik is releasing its Q3 version of its entire product line and the OpenAccess ORM will have more robust and native support for SQL Azure over what is currently available. I will expand on the example I did last week on connecting to SQL Azure by showing how to work with OpenAccess entities via WCF in a Silverlight application.

The fist thing that you have to do is create a project for your data access layer and connect to SQL Azure. I started a new class library and used the Enable Project to use ORM wizard. This is where you can specify your SQL Azure user account and credentials. I showed how to do this last week, so I will skip the steps here. (This is a new feature of Q3, in the previous version of OpenAccess, you had to use the SQL Server provider, now OpenAccess supports SQL Azure natively!)

Next we have to create a project to contain our WCF service. What we have to do next is point the Telerik Data Service Wizard to the DAL project and have it automatically create the SVC and CS files of our service for us.  The wizard will automatically create all of the CRUD methods for our entities. (In this demo I only used Customers.) In case you have not used the wizard yet, here is a walk through video on how to do that.

Telerik OpenAccess WCF Wizard Part I from Stephen Forte on Vimeo.

Now we will have two projects, one for our DAL and one for our WCF service. Now, add a Silverlight project and your solution should look like this, four projects: the DAL project, the WCF service project, the Silverlight Web project and the Silverlight project itself.


Next up we set a service reference to our WCF service and call the ReadCustomers method to get a list of all the customers and bind it to a XAML grid. (Remember that this being Silverlight, we have to do it all asynchronously.) We do this inside of a LoadData method in our form.

   1:  private void LoadData()
   2:  {
   3:      //ref to our service proxy
   4:      SampleWCFServiceClient wcf = new SampleWCFServiceClient();
   5:      //register the event handler-can move this up if you want
   6:      wcf.ReadCustomersCompleted += ReadCustomersCompleted;
   7:      //make an async call to ReadCustomer method of our WCF service
   8:      //get only the first 100 records (default)
   9:      wcf.ReadCustomersAsync(0, 100);
  10:  }

The first thing that we do in the code above is create a reference to our WCF service in line 4 and then register an event handler to catch the asynchronous completion of the event on line 6. On line 9 we make the (asynchronous) call to ReadCustomers(). Since ReadCustomers() will process asynchronously, we will have to go to the ReadCustomersCompleted() method to catch the event. Let’s look at that here:

   2:  void ReadCustomersCompleted(object sender, ReadCustomersCompletedEventArgs e)
   3:  {
   4:      //if the filter is set use a LINQ statement
   5:      //this can also be done on the server via the service
   6:      if (CheckFilter.IsChecked == true)
   7:      {
   8:          var filter = from c in e.Result
   9:                       where c.Country == "Germany"
  10:                       select c;
  12:          dataGridCustomers.ItemsSource = filter;
  13:      }
  14:      else
  15:      {
  16:          dataGridCustomers.ItemsSource = e.Result;
  17:      }
  18:  }

In ReadCustomersCompleted we are doing seeing if a checkbox is checked and if so, we do some client side LINQ statements to filter on the client for only customers in Germany. (This is a holdover from a demo I did at BASTA in Germany, of course you should move your countries to a drop down list and then filter with a parameter! Better yet, filter via the WCF service on the server!) If the checkbox is not checked, we will just show all of the customers.


If you want to edit a customer (or add, etc), the Silverlight grid allows you to do this inside the grid itself. However, you have to make sure that all of your dirty records are recorded so you only send back the dirty records to your backend WCF service. (Why bother updating all of the records?)

Here is the code to build the collection on the Begin Edit of the grid. This code just adds the current customer object into our custom collection (editedCustomers) so we can loop through it later on if we are doing an update.

   1:  void dataGridCustomers_BeginningEdit(object sender,
   2:   DataGridBeginningEditEventArgs e)
   3:  {
   4:      //build a list of Customer that are dirty
   5:      Customer customer = e.Row.DataContext as NorthwindWCFService.Customer;
   7:      if (!editedCustomers.Contains(customer))
   8:      {
   9:          editedCustomers.Add(customer);
  10:      }
  11:  }


Now that we have our collection of dirty customers, we have to deal with the save button. The code below is run when the user clicks on the save button, saving all dirty records. Line 6 sets up the WCF service via the proxy and line 8 registers the event. Lines 11-15 is a loop of all of the dirty customers. (I get them via the custom collection editedCustomers shown above.) Inside of the loop on line 14 we make the actual asynchronous call to the WCF service’s UpdateCustomer method passing in the object and its correct ID. While the UpdateCusotmerCompleted event will fire (since this method is called asynchronously) when the update is complete, we have nothing really in that method except some cleanup of our custom collection and a message box to the users that the update is complete.

   1:  void ButtonSave_Click(object sender, RoutedEventArgs e)
   2:  {
   4:      //the WCF service
   5:      //ref to our service proxy
   6:      SampleWCFServiceClient client = new SampleWCFServiceClient();
   7:      //register the event handler-can move this up if you want
   8:      client.UpdateCustomerCompleted += UpdateCustomerCompleted;
  10:      //save only the dirty customers
  11:      foreach (NorthwindWCFService.Customer customer in editedCustomers)
  12:      {
  13:          //call the WCF method async to update the customer
  14:          client.UpdateCustomerAsync(customer.CustomerID.ToString(), customer);
  15:      }
  17:  }

That is all there is too it! An add or delete is done in the same way.


Technorati Tags: ,,,
posted on Monday, November 02, 2009 5:13:59 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Sunday, November 01, 2009

I’ll be speaking this week at TechDays in Hong Kong. Doing a new session on TSQL Tips and Tricks, a session on Silverlight, and of course the Daily Scrum (on Agile development as well as scrum.)

Hope to see you there.


Technorati Tags:
posted on Sunday, November 01, 2009 8:44:35 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback