# Friday, March 19, 2010

Ever since the “new” SQL Azure went to beta, I have craved an automated way to set up an OData (Astoria) Service from my SQL Azure database. My perfect world would have been to have a checkbox next to each table in my database in the developer portal asking to “Restify” this table as a service. It always seemed kind of silly to have to build a web project, create an Entity Framework model of my SQL Azure database, build a WCF Data Services (OData) service on top of that, and then deploy it to a web host or Windows Azure. (This service seems overkill for Windows Azure.) In addition to all of that extra work, in theory it would not be the most efficient solution since I am introducing a new server to the mix.

At Mix this week and also on the OData team blog, there is an announcement as how to do this very easily. You can go to the SQL Azure labs page and then click on the “OData Service for SQL Azure” tab and enter in your SQL Azure credentials and assign your security and you will be able to access your OData service via this method: https://odata.sqlazurelabs.com/OData.svc/v0.1/<serverName>/<databaseName>

image

I went in and gave it a try. In about 15 seconds I had a working OData feed, no need to build a new web site, build an EDM, build an OData svc, and deploy, it just made it for me automatically. Saved me a lot of time and the hassle (and cost) of deploying a new web site somewhere. Also, since this is all Azure, I would argue that it is more efficient to run this from Microsoft’s server’s than mine: less hops to the SQL Azure database. (At least that is my theory.)

image

To really give this a test drive, I opened up Excel 2010 and used SQL Server PowerPivot. I choose to import from “Data Feeds” and entered in the address for my service. I then imported the Customers, Orders, and Order Details tables and built a simple Pivot Table.

image

This is a great new feature!

image

If you are doing any work with Data Services and SQL Azure today, you need to investigate this new feature. Enjoy!

Technorati Tags: ,

Bookmark and Share
posted on Friday, March 19, 2010 3:40:11 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Thursday, March 18, 2010

If you would have asked me 5 years ago which company, Apple or Microsoft,  would have released a mobile phone that was super popular and got most of its success from a great developer ecosystem of 3rd party applications, I would have said Microsoft in a heartbeat. The reason is that traditionally Apple has been pretty “closed” and Microsoft always relied on 3rd party software developers, like myself, to build compelling applications for its platforms.

The Mac was a “superior” operating system than the early versions of Windows, however, Windows won the battle for supremacy (and still is winning with well over 90% market share). The reason why is that Apple was outright hostile to 3rd party software developers and Microsoft courted them. Building a developer ecosystem is in Microsoft’s DNA and clearly not in Apple’s.

When the iPhone SDK shipped, the tables were turned. Apple is now depending on 3rd party developers for continued success of its iPhone (and iPad). With the most applications, the iPhone is well ahead of the pack. Google’s Android market, with 30,000 apps, is far behind in second and Microsoft Windows Mobile is an also ran.

This week at the Mix conference, Microsoft announced the development platform for Windows Phone 7. Building apps for the new Windows Mobile 7 phone is super easy: Silverlight + Visual Studio is the primary way to do so. Last time I googled, there were about 5 million .NET developers worldwide, so Microsoft gained 5 million developers in the mobile phone wars.

So the question is: Can Microsoft out Microsoft Apple? Being a Microsoft watcher, I know that this is in Microsoft’s DNA and that Apple is a recent convert, so I would say that Microsoft does have a good shot. I would much rather code in Silverlight than Objective-C, the (painful to use) development platform for the iPhone. Let’s take a look:

Pros for Apple:

  • Best selling Smartphone on the planet
  • Apple “coolness”

Cons for Apple:

  • Developer outreach is new to Apple
  • Objective-C is not a developer friendly platform

Pros for Microsoft:

  • Developer Outreach is in their DNA for 30 years
  • Silverlight is an easy to use, modern developer platform that is already popular with 5 million developers

Cons for Microsoft:

  • New to the “cool” Smartphone game
  • Lack of “cool” credibility with consumers

Where will this all go? Apple certainly has a *huge* head start. Microsoft has its work cut out for it, however, over the last 15 years I have watched Microsoft be counted out before and succeed-they work best when they have their backs against the wall. Let the battle begin!

Technorati Tags:

Bookmark and Share
posted on Thursday, March 18, 2010 8:16:21 PM (Eastern Standard Time, UTC-05:00)  #    Comments [4] Trackback
# Saturday, March 13, 2010

This week Telerik released a new LINQ implementation that is simple to use and produces domain models very fast. Built on top of the enterprise grade OpenAccess ORM, you can connect to any database that OpenAccess can connect to such as: SQL Server, MySQL, Oracle, SQL Azure, VistaDB, etc. While this is a separate LINQ implementation from traditional OpenAccess Entites, you can use the visual designer without ever interacting with OpenAccess, however, you can always hook into the advanced ORM features like caching, fetch plan optimization, etc, if needed.

Just to show off how easy our LINQ implementation is to use, I will walk you through building an OData feed using “Data Services Update for .NET Framework 3.5 SP1”. (Memo to Microsoft: P-L-E-A-S-E hire someone from Apple to name your products.) How easy is it? If you have a fast machine, are skilled with the mouse, and type fast, you can do this in about 60 seconds via three easy steps. (I promise in about 2-3 weeks that you can do this in less then 30 seconds. Stay tuned for that.)

 Step 1 (15-20 seconds): Building your Domain Model

In your web project in Visual Studio, right click on the project and select Add|New Item and select “Telerik OpenAccess Domain Model” as your item template. Give the file a meaningful name as well.

image

Select your database type (SQL Server, SQL Azure, Oracle, MySQL, VistaDB, etc) and build the connection string. If you already have a Visual Studio connection string already saved, this step is trivial.  Then select your tables, enter a name for your model and click Finish. In this case I connected to Northwind and selected only Customers, Orders, and Order Details.  I named my model NorthwindEntities and will use that in my DataService.

image

Step 2 (20-25 seconds): Adding and Configuring your Data Service

In your web project in Visual Studio, right click on the project and select Add|New Item and select “ADO .NET Data Service” as your item template and name your service.

image

In the code behind for your Data Service you have to make three small changes. Add the name of your Telerik Domain Model (entered in Step 1) as the DataService name (shown on line 6 below as NorthwindEntities) and uncomment line 11 and add a “*” to show all entities. Optionally if you want to take advantage of the DataService 3.5 updates, add line 13 (and change IDataServiceConfiguration to DataServiceConfiguration in line 9.)

   1:  using System.Data.Services;
   2:  using System.Data.Services.Common;
   3:   
   4:  namespace Telerik.RLINQ.Astoria.Web
   5:  {
   6:      public class NorthwindService : DataService<NorthwindEntities>
   7:      {
   8:          //change the IDataServiceConfiguration to DataServiceConfiguration
   9:          public static void InitializeService(DataServiceConfiguration config)
  10:          {
  11:              config.SetEntitySetAccessRule("*", EntitySetRights.All);
  12:              //take advantage of the "Astoria 3.5 Update" features
  13:              config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
  14:          }
  15:      }
  16:  }

 

Step 3 (~30 seconds): Adding the DataServiceKeys

You now have to tell your data service what are the primary keys of each entity. To do this you have to create a new code file and create a few partial classes. If you type fast, use copy and paste from your first entity,  and use a refactoring productivity tool, you can add these 6-8 lines of code or so in about 30 seconds. This is the most tedious step, but don’t worry, I’ve bribed some of the developers and our next update will eliminate this step completely.

Just create a partial class for each entity you have mapped and add the attribute [DataServiceKey] on top of it along with the key’s field name. If you have any complex properties, you will need to make them a primitive type, as I do in line 15. Create this as a separate file, don’t manipulate the generated data access classes in case you want to regenerate them again later (even thought that would be much faster.)

   1:  using System.Data.Services.Common;
   2:   
   3:  namespace Telerik.RLINQ.Astoria.Web
   4:  {
   5:      [DataServiceKey("CustomerID")]
   6:      public partial class Customer
   7:      {
   8:      }
   9:   
  10:      [DataServiceKey("OrderID")]
  11:      public partial class Order
  12:      {
  13:      }
  14:   
  15:      [DataServiceKey(new string[] { "OrderID", "ProductID" })]
  16:      public partial class OrderDetail
  17:      {
  18:      }
  19:   
  20:  }

 

Done! Time to run the service.

Now, let’s run the service! Select the svc file and right click and say “View in Browser.” You will see your OData service and can interact with it in the browser.

image

Now that you have an OData service set up, you can consume it in one of the many ways that OData is consumed: using LINQ, the Silverlight OData client, Excel PowerPivot, or PhP, etc.

Happy Data Servicing!

Technorati Tags: ,,

Bookmark and Share
posted on Saturday, March 13, 2010 4:29:07 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Friday, March 12, 2010

I will be presenting my half day Agile seminar this May in Sydney, Australia. I hope to see you there. I will also be speaking at the Sydney .NET User Group that evening on Silverlight 4.0 and giving out some Telerik swag.

Half-day Agile Seminar
Wednesday 19th May 2010
9:00am - 12:00pm
SSW Office, Sydney
Suite 10, 81-91 Military Road, Neutral Bay
Cost: No Charge

 SharePoint

Agile Development, Tools and Teams

One of the most popular Agile project management and development methods, Scrum is starting to be adopted at major corporations and on very large projects. After an introduction to the basics of Scrum like: project planning and estimation, the Scrum Master, team, product owner and burn down, and of course the daily Scrum, Stephen (a certified Scrum Master) shows many real world applications of the methodology drawn from his own experience as a Scrum Master.

Negotiating with the business, estimation and team dynamics are all discussed as well as how to use Scrum in small organizations, large enterprise environments and consulting environments. Stephen will also discuss using Scrum with virtual teams and an off-shoring environment. We’ll then take a look at the tools we will use for Agile development, including planning poker, unit testing, and much more. There will be plenty of time for Question and Answer. This seminar is a jump start for a certified scrum master exam.

Agenda

  • Introduction to Agile Development and Scrum
  • Agile Estimation
  • Implementing Scrum with remote and offshore teams
  • Agile Tools, Test Driven Development, and Continuous Integration
Technorati Tags:

Bookmark and Share
posted on Friday, March 12, 2010 4:21:06 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Thursday, March 11, 2010

Love LINQ to SQL but are concerned that it is a second class citizen? Need to connect to more databases other than SQL Server? Think that the Entity Framework is too complex? Want a domain model designer for data access that is easy, yet powerful? Then the Telerik Visual Entity Designer is for you.

Built on top of Telerik OpenAccess ORM, a very mature and robust product, Telerik’s Visual Entity Designer is a new way to build your domain model that is very powerful and also real easy to use. How easy? I’ll show you here.

First Look: Using the Telerik Visual Entity Designer

To get started, you need to install the Telerik OpenAccess ORM Q1 release for Visual Studio 2008 or 2010. You don’t need to use any of the Telerik OpenAccess wizards, designers, or using statements. Just right click on your project and select Add|New Item from the context menu. Choose “Telerik OpenAccess Domain Model” from the Visual Studio project templates.

image

(Note to existing OpenAccess users, don’t run the “Enable ORM” wizard or any other OpenAccess menu unless you are building OpenAccess Entities.)

You will then have to specify the database backend (SQL Server, SQL Azure, Oracle, MySQL, etc) and connection.

image

After you establish your connection, select the database objects you want to add to your domain model. You can also name your model, by default it will be NameofyourdatabaseEntityDiagrams.

image

You can click finish here if you are comfortable, or tweak some advanced settings. Many users of domain models like to add prefixes and suffixes to classes, fields, and properties as well as handle pluralization. I personally accept the defaults, however, I hate how DBAs force underscores on me, so I click on the option to remove them.

image

You can also tweak your namespace, mapping options, and define your own code generation template to gain further control over the outputted code. This is a very powerful feature, but for now, I will just accept the defaults.

 image

When we click finish, you can see your domain model as a file with the .rlinq extension in the Solution Explorer.

image

You can also bring up the visual designer to view or further tweak your model by double clicking on the model in the Solution Explorer. 

image

Time to use the model!

Writing a LINQ Query

Programming against the domain model is very simple using LINQ. Just set a reference to the model (line 12 of the code below) and write a standard LINQ statement (lines 14-16).  (OpenAccess users: notice the you don’t need any using statements for OpenAccess or an IObjectScope, just raw LINQ against your model.)

   1:  using System;
   2:  using System.Linq;
   3:  //no need for an OpenAccess using statement
   4:   
   5:  namespace ConsoleApplication3
   6:  {
   7:      class Program
   8:      {
   9:          static void Main(string[] args)
  10:          {
  11:              //a reference to the data context
  12:              NorthwindEntityDiagrams dat = new NorthwindEntityDiagrams();
  13:              //LINQ Statement
  14:              var result = from c in dat.Customers
  15:                           where c.Country == "Germany"
  16:                           select c;
  17:   
  18:              //Print out the company name
  19:              foreach (var cust in result)
  20:              {
  21:                  Console.WriteLine("Company Name: " + cust.CompanyName);
  22:              }
  23:              //keep the console window open
  24:              Console.Read();
  25:          }
  26:      }
  27:  }

Lines 19-24 loop through the result of our LINQ query and displays the results.

image

That’s it! All of the super powerful features of OpenAccess are available to you to further enhance your experience, however, in most cases this is all you need.

In future posts I will show how to use the Visual Designer with some other scenarios. Stay tuned.

Enjoy!

Technorati Tags: ,,

Bookmark and Share
posted on Thursday, March 11, 2010 9:26:16 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Wednesday, March 10, 2010

While there is a Nobel prize in other scientific fields, there really isn’t one for computing. Instead we have the A.M. Turing Award, the next best thing. According to Wikipedia, the award: is given annually by the Association for Computing Machinery to "an individual selected for contributions of a technical nature made to the computing community. The contributions should be of lasting and major technical importance to the computer field".

Past recipients have included legends such as EF Codd and Fred Brooks. This year the award went to Chuck Thacker, a technical fellow at Microsoft Research for his lifetime achievement and for his work in the early 1970s on the Alto, the first PC. (When he worked at the Xerox PARC.) More on Thacker and the award can be viewed here.

Technorati Tags:

Bookmark and Share
posted on Wednesday, March 10, 2010 10:07:22 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Tuesday, March 9, 2010

By now there have been a lot of blog posts on Windows Azure billing. I have stayed out of it since I figured that the billing scheme would generate some sticker shock on our end and some rethinking on Microsoft's end. For the most part it has, but I now want to tell my story since I think most early Azure users are thinking along my lines.

When Windows and SQL Azure went live, I wanted to deploy an application using some of Telerik’s products to “production”. I put my free MSDN hours into the Azure system for billing and uploaded the application. I actually could not get it to work and left it up there figuring I would get back to it and fix it later. Periodically I would go in and hoke around with it and eventually fixed it. For the most part I had nothing more than an advanced “Hello World” and simple Northwind data over forms via SQL Azure up there.

Recently, I received a bill for $7 since I went over my free 750 hours by about 65 hours. (I guess I had a test and production account running at the same time for a while.) Even thought for the most part I had no hits other than myself a few times, I still incurred charges since I left my service “live” in production. My bad, I learned a lesson as to how Azure works, luckily, it was only a $7 lesson.

It was then that I realized that I was guilty of treating Windows Azure as a fancy web hosting account. The problem is that Windows Azure is not web hosting, but rather a “web operation system” or a “Cloud” service hosting and service management environment. We’re not only paying for hosting, we are paying for Azure to manage our application for us- much like enterprise middleware 10-15 years ago, but for the cloud. I now look at Azure differently and this is good since I will use it differently (and how it was intended.)  I am guessing that other developers with $7 bills in their inbox this month will do the same.

That said, I was in Redmond a month or two ago and had a chance to talk to the head of MSDN. I complained about how the MSDN subscription offer was only for 8 months, etc. He told me that for the first time in Microsoft’s history, they have hard physical assets that have to be paid for with this service. It is not like if they want to give me a free copy of Windows, it does not cost Microsoft anything except the bandwidth for me to download (which is a fixed cost.) I get that, and I am sure that there will be a cost effective MSDN-Azure “developer only” subscription option in the future. Or at least there should be. :)

Technorati Tags:

Bookmark and Share
posted on Tuesday, March 9, 2010 5:23:54 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2] Trackback
# Monday, March 8, 2010

Telerik is releasing an update to its entire product line this week. As usual, there will be webinars to walk you though all of the cool new stuff. All webinars will be held at 11 AM EST (full time zone conversion) and all will be recorded for Telerik TV on-demand viewing. To join the webinars, register now:

Technorati Tags:

Bookmark and Share
posted on Monday, March 8, 2010 7:46:59 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Friday, March 5, 2010

While delivering the Agile Seminars in Pune, India and Taipei, Taiwan over the last week, the question of the development team came up. What started out as a discussion of Team Velocity, ended with a discussion of “Heroes” or “Rock Stars” on the team.

Too many managers think that you need a team of super human coders to get the job done. I think that while a team should have the most talented, motivated, and hard working members it can find, teams should avoid adding the “rock star developer” at all costs.

At the seminar I told the story of a real life story of a team I managed a number of years back. It was a team of good developers and one rock star. Let’s call our rock star developer John. John coded faster than all our team members, some tasks he could do two or three times faster. His code was usually pretty spot on, decently commented, and well thought out. Shouldn’t the entire team be made up of John clones?

Well while the number of lines of code per day developed by John was high, other things did not add up. At code reviews John would argue with other developers about the direction they took. When those developers were not around, John would check out their code and make small changes.

What really got me to my breaking point was John’s inability to see the big picture. Once someone from the business side came over and asked John to make a small change to the online shop by the end of the day. It was a Friday of a three day weekend and the marketing guy thought that he can push this change out and help our sales over the weekend. This change was not in the product backlog (well this was almost 10 years ago, it was more of a project plan back then) but John said he can sneak it in today. John was assigned other tasks that day, but figured that if he skipped lunch and stayed a little late, he could do both and be the hero.

It did not turn out that way. John bypassed our build and qa and production upload process and somehow managed to push his change to production without telling anyone. He figured that the business people would be happy with IT and life would be good. The problem was that this took him longer than expected (it always does, even for rock stars) and he had to skip is regular tasks.

The rest of the team was at a local bar we hung out at watching the Mets-Yankees game on TV. (I remember it was a rare occasion where the Mets beat the Yankees.) John was noticeably not there and we just thought he went home. Then my cell phone beeps, it was the founder of the company asking me why the online shop is down. I said I had no idea and would look into it immediately. I asked a dependable programmer  to come with me and we went to the office to see what was up. Back at the office, the other programmer and I discovered John banging his head against his desk. After some heated words, the other guy and I reverted the site back to the original state. John pleaded and pleaded that he needed just 15 more minutes and that he was a “better coder than me.” While that may have been true, I said that my code always goes through QA. Against his wishes, I sent him home. John would have done better if he called in sick that day, by overpromising, he not only caused a problem with the site that caused two of us to fix, but he did not do his assigned tasks, making him behind in his work.

The next day I get an angry phone call from the VP of Marketing asking why the change was not pushed to production as he was “told by IT” it would be. The VP said that an email campaign was to be sent out telling customers about the change and it would be expensive to cancel it. I told the VP that I don’t care and to cancel it.

Needless to say the next week there were some fireworks at the office. I told John that he was like a cow who produced two buckets of milk while all the other cows produced only one bucket. But he also knocked over other cow’s buckets when he walked by. John thought he was right and I was wrong. That did not go well for anyone.

After the annual raise and bonus season went by and John was not “taken care of” in his mind (he was given the same modest raise and bonus the rest of the team received), he quit and took a job getting paid far more. He asked me what I would say when he used me as a reference. I told him:

“John is an A+ developer. Smart and fast. He is an F- team player. Overall that makes him a C+ developer.”

John never used me as a reference.

Rock stars have no place on a high performing team. Don’t confuse a rock star or “hero” with a very talented developer. A rock star is someone who, while talented, thinks that they are the ultimate guru and that everything should be done their way. Avoid them like the plague!

PS, about 5 years ago John asked me to lunch. It was the first time we spoke in many years. We made our peace and he admitted that he was wrong that day and looked forward to working together one day. I told him that if anyone asks for a recommendation today, I will let them know about our past difficulties and that he has evolved from a “Rock Star” to a great developer with perspective.

Technorati Tags:

Bookmark and Share
posted on Friday, March 5, 2010 11:12:01 PM (Eastern Standard Time, UTC-05:00)  #    Comments [5] Trackback