# Thursday, 25 March 2010

Last 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. Today I will show you how to build a domain model using MySQL as your back end.

To get started, you have to download MySQL 5.x and the MySQL Workbench and also, as my colleague Alexander Filipov at Telerik reminded me, make sure you install the MySQL .NET Connector, which is available here.  I like to use Northwind, ok it gives me the warm and fuzzies, so I ran a script to produce Northwind on my MySQL server. There are many ways you can get Northwind on your MySQL database, here is a helpful blog to get your started. I also manipulated the first record to indicate that I am in MySQL and gave a look via the MySQL Workbench.

image

Ok, time to build our model! Start up the Domain Model wizard by right clicking on the project in Visual Studio (I have a Web project) and select Add|New Item and choose “Telerik OpenAccess Domain Model” from the new item list.

image

When the wizard comes up, choose MySQL as your back end and enter in the name of your saved MySQL connection.

image

If you don’t have a saved MySQL connection set up in Visual Studio, click on “New Connection” and enter in the proper connection information. *Note, this is where you need to have the MySQL .NET connector installed.

image

After you set your connection to the MySQL database server, you have to choose which tables to include in your model. Just for fun, I will choose all of them.

image

Give your model a name, like “NorthwindEntities” and click finish. That is it.

Now let’s consume the model with ASP .net. I created a simple page that also has a GridView on it. On my page load I wrote this code, by now it should look very familiar, a simple LINQ query filtering customers by country (Germany) and binding the results to the grid. 

   1:  protected void Page_Load(object sender, EventArgs e)
   2:  {
   3:      if (!IsPostBack)
   4:      {
   5:          //a reference to the data context
   6:          NorthwindEntities dat = new NorthwindEntities();
   7:          //LINQ Statement
   8:          var result = from c in dat.Customers
   9:                       where c.Country == "Germany"
  10:                       select c;
  11:          //Databinding to the Gridview
  12:          GridView1.DataSource = result;
  13:          GridView1.DataBind();
  14:      }
  15:  }

F5 produces the following.

image

Tomorrow I’ll show how to take the same model and create an Astoria/OData data feed.

Technorati Tags:

Bookmark and Share
posted on Thursday, 25 March 2010 01:37:56 (Eastern Standard Time, UTC-05:00)  #    Comments [1] Trackback
# Wednesday, 24 March 2010

I started my career on Wall Street in a non-technical role. After I gained the confidence to make the move from hobby to profession, the company that I was working for did not let me be a programmer, so I quit my job to start my own one man shop. My first customers were Wall Street firms. Because of this background, I understand bonds, options, swaps, and other complex financial transactions. My guilty pleasure is reading about massive financial blowups, books like: When Genius Failed, Liar’s Poker, and House of Cards.

Michael Lewis, the bestselling writer of Liar’s Poker and Moneyball, just released a new book called The Big Short. It is a book about the bond and real estate derivative markets and the short selling people did the year before the massive crash of 2008.

I wanted to read this book and headed to Amazon.com to buy it for my Kindle. I noticed that it was the #1 selling book on Amazon, so I did not even have to search for it, it was right there on the home page.  That is when I realized that there is no Kindle version! I have a rule, no more “real” books, if it is not on the Kindle it doesn't exist to me. This is my preference and it exists for a variety of reasons: love of my Kindle, tons of crap to bring when I travel, too many books laying around the house, me temporary living in Hong Kong and don’t want to transport books 8,000 miles are on the top of the list. (If you don’t own a Kindle and think I am blowing hot air, ask yourself when the last time you bought a physical CD was, fancy iPod owner.)

image

If you remember back in January, I made a prediction on the blog that the content providers will fight back against Netflix and Amazon: and fight back they did. Once Macmillan forced Amazon’s hand back in late January, the rules changed. If you remember MacMillian, threatened to withhold their entire collection of books, print and digital, unless Amazon raised their prices for the Kindle. Amazon challenged, but lost and had to capitulate.

Now it appears that the publisher of The Big Short, W. W. Norton & Company, is doing something more evil, they are withholding the Kindle version until the paperback comes out. This is to boost the hardcover sales.

What a bad idea. The publisher is living in the pre-digital book era. Someone who owns an eReader is not going to buy a hardcover book ever again. The market has changed. W W Norton doesn’t realize it.

I heard about the book and was willing to spend $9.99 as an impulse buy. I would even pay $12 or $13 for the Kindle version, only a few dollars less than the list price. Now I have to wait at least 6-8 months and may forget or the book may lose its spot on my priority list.

The publisher is also assuming that I will still want to read this book a year from now, that the financial crisis will still be deep in my mind and I will want to rush to buy it. They are also assuming that I won’t illegally download this book as well. (Something they are forcing me to consider.)

The publisher is making a big mistake. They are pushing me to defer my purchase, a purchase I may never make. They would have made a sale today, but choose not to sell it to me. They are trading guaranteed profits today for potential profits later.

 

Postscript:

The reviews of The Big Short on Amazon are interesting.

image

There are more negative reviews (1 star) than positive (5 + 4 star). Most of the reviews are people like me complaining that there is no Kindle version! The author is being punished for the decisions of his publisher. Several bloggers came out to defend Lewis and bash Amazon. I am not one of them.

An author like Lewis has clout and could have put his foot down. He also could have chosen to self publish, sell it on Amazon and B&N only in e-format for $7.99 and kept all the profits. So while it sucks that his book is getting negative reviews, I don’t feel sorry for him. Besides it is still the #1 bestseller on Amazon as of now.

I’ll leave you with a great quote promoting the Kindle:

"The coolest thing, by far, is that you think of a book you'd like to read, someone tells you about a book you'd like to read, and in 30 seconds, it's on your screen, all of it."

--Michael Lewis, 2007.

 

Technorati Tags:

Bookmark and Share
posted on Wednesday, 24 March 2010 04:46:29 (Eastern Standard Time, UTC-05:00)  #    Comments [1] Trackback
# Tuesday, 23 March 2010

Today Google announced on its corporate blog that as of today all Google traffic in China will be redirected to Google’s site here in Hong Kong. I use the Hong Kong Google site daily and it has no censorship since Hong Kong is an autonomous self-governing region of China. The Chinese government said that Google is "totally wrong" and accused it of breaking a promise made when it launched its service in China.

I suspect that China will soon block google.com.hk or Google’s mainland China users will stop using Google since the Hong Kong site has excellent search results that have local relevance for Hong Kong but not for mainland China. Either way, the end is near for Google in China. It is interesting that Google has decided to burn a bridge in China.

My question is, does Google’s great “moral” stand matter? Can a company like Google effect the politics of a nation? Should they even try to?

Normally I would say no, a company should not try to change the politics of a nation it is doing business in. If it disagrees with the policies of a nation, it should not do business there. Would Google have done business in Nazi Germany? The Soviet Union?

The world rushes to do business with China, but sweeps under the rug the fact that it is not a free society. (I am reminded of this every day when I read the newspaper in Hong Kong and there is a story about some restriction on the mainland.) The question is, will Google’s actions make other companies think twice about China?

Technorati Tags: ,

Bookmark and Share
posted on Tuesday, 23 March 2010 08:03:50 (Eastern Standard Time, UTC-05:00)  #    Comments [1] Trackback
# Monday, 22 March 2010

Tomorrow I will be presenting a “What's new for SQL Server 2008 R2” session at the IT Efficiency Event in Hong Kong put on by Microsoft. Even thought it is an overview session, I’ll be doing a few extensive demos. The demos are on:

  • New TSQL constructs and other goodies like that
  • BING map integration (if I get internet access in the session room!)
  • Data-Tier Applications (fun for both developers and DBAs)
  • PowerPivot

I will be the only English speaking speaker, should be fun. :)

posted on Monday, 22 March 2010 03:30:19 (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Friday, 19 March 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, 19 March 2010 03:40:11 (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Thursday, 18 March 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, 18 March 2010 20:16:21 (Eastern Standard Time, UTC-05:00)  #    Comments [4] Trackback
# Saturday, 13 March 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, 13 March 2010 04:29:07 (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Friday, 12 March 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, 12 March 2010 04:21:06 (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Thursday, 11 March 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, 11 March 2010 09:26:16 (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback