# Wednesday, April 22, 2009

I am over in Bangalore, India speaking at the Great Indian Developer Conference, and as I get on stage for my first session my laptop does not project to the monitor. Oh well, I guess I have to reduce my five gazillion by one trillion screen resolution. Still not working. Tried the old reliable, rebooting. Still no dice. We try another laptop just to make sure it is me, not the monitor, sure enough it is me.

I was the first speaker at the conference and now the conference organizer is sweating. He offers his laptop and I say as long as you have SP1 on it. He said, Windows XP SP1? I was like, not that SP1, Visual Studio 2008 SP1. No dice. Now I was sweating (it was 40C/104F). Did I mention that my session is now 5 minutes late? I determine it is my Win7 video driver and give up trying.

I decide to let fate take over. I make an announcement: “Anyone in the audience have a laptop that I can borrow? One that has a lot of ram and Microsoft Virtual PC 2007 installed?” Blank stares. Now I am getting nervous, brought me back to a time in 2001 where I demoed beta2 of .NET without .NET installed on my machine. Time to hand wave and make jokes about George Bush. (That always worked in Egypt.) Then my hero showed up. Prashant lent me his laptop and we got going and life was good. I had to borrow the generic AV laptop for my Scrum session later in the day and Satheesh lent me his for my last session on Data Access hacks and shortcuts. In Belgium at TechDays Joel did an agile talk with no slides: I wrote the slides on the fly (we were being agile!) Now I will start speaking at conferences without a laptop! (Er, maybe not.)

Last night in my hotel the TV talked about a prison riot. Don’t ask me why, but prison riots always get my attention. I watched the story and it turns out that the inmates were not complaining about the conditions, they were complaining that they were not allowed to watch cricket. Yes, cricket.

So I started to pay attention. The next story was about a huge win by Chennai in the Indian Premier League (IPL).  (Yes more cricket.) Then the next story was about a flamboyant bollywood star who owns a team. They were caught with Paris Hilton or something, but the point was the news wanted to know how this would affect his team. More cricket. Did I mention that there are major national elections going on in India tomorrow. These elections will determine who is the next Prime Minister, but the news can only talk about cricket.

So I did some more investigation. The IPL was started last year. It is an Indian professional league for cricket-club based, representing cities. This is a new concept in India and has been wildly successful. The opening matches were only played a few days ago and season two is under way. Talking to a finance guy about the IPL today, I discovered that the larger markets attracted larger investors who spent a ton of money and have huge payrolls (sounds like the Yankees.) So the smallest market, Rajasthan, the team with the smallest payroll, are the defending champions (sounds almost like the Tampa Bay Rays.)

I was about done with my IPL education when I came across this blog post by fellow Regional Director Vinod Unny. The IPL web site, a site with more hits than you can imagine, streams the matches using Silverlight. The site also has a pretty cool interactive Silverlight based scoreboard where you can get real time stats and drill down into a player’s history. There are even tons of photos using deep zoom. Pretty awesome stuff (even thought it is cricket!)

IPLT20.com is estimated to get over 400 million unique page views from 45 million visits and 10 million unique visitors during this tournament. A huge win for Silverlight and proof that i can’t get away from technology ever, even when investigating a prison riot….

posted on Wednesday, April 22, 2009 12:14:54 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Wednesday, April 8, 2009

Get it here.

posted on Wednesday, April 8, 2009 9:13:54 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Monday, April 6, 2009

clip_image002

Let’s face it, going to a technical conference is good for your career but it’s not a whole lot of fun. You need an outlet. You need to have fun.

Cheap beer and lousy pizza.

We are bringing back GeekFest! Join us at Lucky Strikeclip_image003 for a night of pizza, beer, and bowling. There is limited invitations available, so what are you waiting for? If you are attending the TechEd 2009clip_image003[1] conference and you are a developer, you are invited. To register pick up your "duck" ticket (and wristband) in the TechEd Technical Learning Center (TLC) at the Developer Tools & Languages (DTL) information desk.

You must have wristband to get in.

Monday, May 11, 2009 from 8pm – 11pm
Lucky Strike Lanes at LA Live
800 W. Olympic Blvd Los Angeles, CA 90015

You must have a wristband to attend the party. Pick one up Monday at the Developer Tools and Languages TLC Info Counter.

posted on Monday, April 6, 2009 10:06:30 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Monday, March 30, 2009

As you know I can’t say no to charity.  In the past I have traveled to Mt. Everest to raise money for schools in NYC, run marathons to raise money for cancer, helped Tim with the Scipps Cancer app, and of course lead the .NET Celebrity Auction for the tsunami victims of Banda Aceh.

But now I am involved in something very crazy. Two of my colleagues, Kal and blogging partner on steveandthetank.com, Tom (aka the Tank), will be headed to the North Pole to run a marathon. Tom needs to raise $5000 for Memorial Sloan-Kettering via Fred’s Team. (Kal, Tom and I have run two marathons together, one in Antarctica where we all met!)

Tom recently trained with Joel Semeniuk up in Winnipeg, since only up there can there be temperatures even close to the north pole.

I already contributed $500 as part of a bet on Mt. Everest where Tom was to shave his head on Everest. He did not (the bet was for $1000) but he did shave his head in Kathmandu. Now I am helping him raise the rest of his money, but the slow economy has dried up fundraising. Since Kal and Tom are techies too, I figured that fellow geeks will like to help. Here is the info:

Tom Djurdjevich is running his 14th and final marathon at the North Pole Marathon on April 7, 2009.  He is raising money for cancer research at Memorial Sloan-Kettering Cancer as a member of Fred's Team.  He is about halfway, $2,580, of his $5,000 fundraising goal. 

To sponsor him, please go to the following secure fundraising link:

https://fredsteam.mskcc.org/fundraising/Controller?action=userHome&user_id=35640&event_id=122

Any and all contributions are greatly appreciated. 

posted on Monday, March 30, 2009 10:41:47 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Sunday, March 22, 2009

I have been on the road since Feb 1, visiting customers, speaking at conferences, and attending the MVP summit. I am in-between flights and finally found *the* video, the video of Sasha and I singing “Baby one more time..” at the EMP in Seattle.

For those of you who where not there, there is a rock band called “rock and roll-aoke ” where you sing karaoke with a live rock band. So no matter how bad you are, you still sound ok. MVPs lined up to sing with the band.

I was trying to find folks to come sing Britney Spears with me. Only Sasha Krsmanovic was brave enough. Sasha signed us up to sing. But unfortunately we were like 10th on the list at 11pm when the EMP was closing. No Britney! :(

Enter Paulette Suddarth. Paulette runs the MVP summit and we drafted her to come sing. Somehow she was able to bribe the band to push our names up on the list and we were the closing act. Lots of RDs came up on stage to help! Thanks to Darcy for taking the video and posting it.

 

posted on Sunday, March 22, 2009 9:32:46 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Monday, February 23, 2009

I received an email from the Mix registration group that my 3rd night at the hotel will be free. Good marketing tactic on the Mix team’s part, this will help people justify the travel if the travel expense is lower. Many have argued that the live in-person event is dead, due to a sharp recession and free ways to learn like web casts and blogs, etc.

I think reports of live events death are incorrect. Humans are social and need interaction. We need to go to events to talk to each other, complain about Microsoft’s data access strategy, and see if speakers will embarrass themselves. But I think that the days of the large industry trade show (CES) and large industry events (PDC, TechEd, Mix) are numbered. What will replace them? Code Camps.

The NYC .NET User Group that I am a co-moderator ran a Code Camp in January. There have been several other code camps in the past few months and they have all been very popular and well attended. Code Camps started as a way to supplement the monthly user group meeting. They are community driven. Now people are attending in larger numbers since they can’t justify a travel budget. What I also found what attendees liked about code camp was the ability of the Code Camp to present some alternative points of view (we had some open source sessions and some sessions that would never make it to TechEd since they may have said a bad thing or two about MS in the session.) The attendees also liked the agility of the event, open spaces, and discussions.

Emerging markets are now doing Code Camps. I just attended and spoke at the Cairo, Egypt based .netWork’s code camp last week. Based about 45 Km out of Cairo, about 500 people took off work and traveled to attend the free event 2-day even. Four international speakers came as well as several local speakers. It was a great event and run at a very low cost. Even better is that it got technical education to people who desperately need it.

I think that in a down economy, Code Camps are going to be more and more important and continue to evolve. Industry events will not die, but they will change in size and scope to be smaller and more agile. Code Camps will force “Conference 2.0.” As a conference speaker myself, it will be great to see what that looks like.

posted on Monday, February 23, 2009 9:48:24 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback
# Tuesday, February 17, 2009

In Part I of this series we looked at the tool Telerik is building and how to model an entity in MSchema and MGraph. Part II dug deeper into the modeling process and we saw the value of MGraph and data visualization to help your model along. We did a little refactoring and are now more or less happy with the model for these domain entities. After modeling the application in M, I realize the power of a textual modeling language. Boxes and lines in UML does not excite me, but a textual modeling language makes complete sense.

So far we have ignored the fact that these entities will live in a database. You can push your M into the repository or you can push it to plain old TSQL. Let’s do that today.

Inside of iPad you can go to the “M Mode” menu option and choose “Generic TSQL Preview.” This will split your code with the M code on one side and the TSQL on the other as shown below.  (Note, you can also choose M Mode|Repository TSQL Preview, however I am still avoiding the Oslo repository at the moment. I have my M files under source control in TFS and will push to the repository a little alter in the process. Once again, I am still learning, so this may or may not be a best practice.)

image

Let’s take a look at the TSQL produced.

This type that we build in Part I:

//mschema to define a user type
type ApplicationUser
{
    UserID : Integer64=AutoNumber();
    FirstName :Text#15;
    LastName : Text#25;
    Password : Text#10;      
} where identity UserID;

Will produce a CREATE TABLE TSQL statement like this:

create table [Telerik.MigrationTool].[ApplicationUserCollection]
(
  [UserID] bigint not null identity,
  [FirstName] nvarchar(15) not null,
  [LastName] nvarchar(25) not null,
  [Password] nvarchar(10) not null,
  constraint [PK_ApplicationUserCollection] primary key clustered ([UserID])
);
go

 

Ok, a few things here. First my table name is [modulename].[MGraph instance name]

Ug! ApplicationUserCollection is a horrible name for a table. I incorrectly assumed that the type name would be what we have as a table name. (I guess I should have actually done the M labs at the last SDR instead of goofing off with Michelle Bustamante.) Well this is new technology, so live and learn. :) I have to refactor all my types and instances. I guess I have learned pretty quickly that “collection” is not a good name.

Here is the renamed base type, I named it “UserType” since I can’t think of a good name, however,  I will do this with all my types:

//mschema to define a user type
type UserType
{
    UserID : Integer64=AutoNumber();
    FirstName :Text#15;
    LastName : Text#25;
    Password : Text#10;      
} where identity UserID;

Here is the new MGraph, I am using ApplicationUser here instead of ApplicationUserCollection:

//mgraph to get some test data in
    ApplicationUser : UserType*; ApplicationUser
    {
        //using a named instance (Steve, etc)
        Steve {
        FirstName="Stephen",
        LastName="Forte",
        Password="Telerik"
        },
        Vassimo {
        FirstName="Vassil",
        LastName="Terziev",
        Password="123"
        },
        Zarko {
        FirstName="Svetozar",
        LastName="Georgiev",
        Password="456"
        },
        Todd {
        FirstName="Todd",
        LastName="Anglin",
        Password="789"
        }
    }

 

Now the M Mode|Generic TSQL Preview will show this:

create table [Telerik.MigrationTool].[ApplicationUser]
(
  [UserID] bigint not null identity,
  [FirstName] nvarchar(15) not null,
  [LastName] nvarchar(25) not null,
  [Password] nvarchar(10) not null,
  constraint [PK_ApplicationUser] primary key clustered ([UserID])
);
go

 

And the insert statements are also generated:

insert into [Telerik.MigrationTool].[ApplicationUser] ([FirstName], [LastName], [Password])
values (N'Stephen', N'Forte', N'Telerik');
declare @Telerik_MigrationTool_ApplicationUser_UserID0 bigint = @@identity;

insert into [Telerik.MigrationTool].[ApplicationUser] ([FirstName], [LastName], [Password])
values (N'Vassil', N'Terziev', N'123');

insert into [Telerik.MigrationTool].[ApplicationUser] ([FirstName], [LastName], [Password])
values (N'Svetozar', N'Georgiev', N'456');
declare @Telerik_MigrationTool_ApplicationUser_UserID2 bigint = @@identity;

insert into [Telerik.MigrationTool].[ApplicationUser] ([FirstName], [LastName], [Password])
values (N'Todd', N'Anglin', N'789');

I ran the entire TSQL and then the next step is to load it into the database.

I opened SQL Management Studio and created a new database called oslotest1 as shown here:

create database oslotest1
go

Now I will copy and paste the TSQL in the preview pane of iPad and run it. Fingers crossed. :)

As you can see in the image below, all my tables were created successfully.

image

Let’s take a look at some of the sample data. A simple SELECT * FROM ApplicationUser shows us:

image

As you can see MGraph creates a SQL Server schema [Telerik.MigrationTool] out of the module name in our M file. This is a pretty cool feature (SQL 2005/08 schemas are not used enough, there is too much DBO floating around out there.) I guess I can use an easier to work with schema in the future like migrationtool instead of telerik.migrationtool.

Let’s now query some of the sample data in SQL Server. Here is the result of a query looking at the results of Project ID #1 and the first run of that project, all from the data that we modeled in MGraph:

 

image

I am pretty satisfied with the results of my model. I think the next step is to hand off the user stories and M code to the developers and get started. I will post their reactions, they know nothing about Oslo besides what they read in this blog. :) I will also post my progress and thinking on the repository. I think that now we are going to be working with a team (and a team in another country than me), we can get some benefits by using the repository.

posted on Tuesday, February 17, 2009 10:48:48 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] Trackback