Markus on Development and Publishing

This is Markus Egger's professional blog, which covers topics such as development, publishing, and business in general. As the publisher of CoDe and CoDe Focus magazines, and as the President and Chief Software Architect of EPS Software Corp., Markus shares his insights and opinions on this blog.

Content Area Footer

Monday, November 24, 2008
First Prototype of Xiine running on Surface

Now that we have our Surface unit and got it calibrated right too, we were able to deploy our first application prototype. We created a version of our Xiine publishing platform/ reader application.

The idea was to have "a bunch of virtual magazines" on the table people could interact with. We already had WPF components that could render things like magazine and book covers out of the Xiine content store, so we were able to reuse that. We also have the ability to render high-quality content based on an extension of the WPF document services. So in theory, we had all the pieces and just needed to put them together in a way that made sense for Surface.

The most obvious approach is to use Surface's "ScatterView" control, which is a container for WPF controls (similar to a listbox or other container). What is unusual about the scatter view is that it randomly "throws out" those elements in a random layout. Items are at all kinds of angles and upside down and generally make everything look like a messy coffee table. Exactly what we wanted! The scatter view also provides interaction, such as moving, rotating, and scaling items on the table.

The scatter view also gets you used to one of the peculiarities about Surface: There is no up or down! Plus, multiple people can use this at once. Using the scatter view control, you get used to your UIs being used in all kinds of orientations and sizes, and that is a good way to get used to that paradigm.

One of our concerns was that loading the content out of the Xiine store could tax Surface quite a lot, because each cover is it's own XAML composition with potentially complex XAML, interactive content, and high-res cover imagery. We also load that content using a custom content loader out of an encrypted and compressed content store. It turned out that Surface handled that part pretty well and it was straightforward to convert that to Surface.

Another problem is that when using the scatter view, as soon as one interacts with the items in the view in a multi-touch fashion (such as using two fingers to rotate an element), the element is practically always resized at the same time, since it is impossible for the user to perform a rotate without also changing the size slightly by accident. This is normally not a problem (and in fact desired), but for rendering something as complex as an advanced document, it takes up a lot of resources. For instance, when rotating a 50 page document, the resize will cause a complete repagination of the entire document *continually*. So this causes us a lot of performance problems in the early prototype. But at the same time, we know how to fix it (by manually resizing the document once rotation is complete). This is something we will have to tackle next.

Finally, we wanted some interaction with items on the table. The prototype currently allows throwing an ID tag down. The ID can be linked to an account. This way, people can throw their ID tag down on the table to open up their library. This worked very well. The only issue we have is that some libraries (like mine) have way too much stuff to load everything at once. This causes a lot of slowdown, and - even worse - there is so much stuff on the table that it becomes just about useless organization-wise. But that is OK for this prototype. The final product will have a better way to organize content.

One of the really important things about Surface is "natural interaction". In other words: Instead of clicking on a button to do something, you touch the associated object directly. Or instead of moving a scrollbar up and down to move a list, you just grab the list directly. Our current implementation shows that in some areas, but not in many. This is one of our next steps. For instance, instead of taping on a cover, you will be able to flick it open like you would a real magazine. Or instead of clicking on the "next page" button in an article, you will be able to flick pages back and forth, again, like you would in a real book or magazine. This will also make some of the interaction hassles (like accidentally open a magazine when you want to move it) less of an issue. (We found that one of the challenges with natural interaction is correctly interpreting the user's intention). The current prototype takes a lot of shortcuts, but they are just that, and the real interaction model will be introduced in the next version. (BTW: We had to redo a lot of the overall interaction, because all the things that used to be mouse-clicks do not work in multi-touch environments).All in all, this was a very good experience and not too difficult to pull off as a first example. There is lots more to come of course! :-)

Check out this video we uploaded to YouTube:

Posted @ 12:18 PM by Egger, Markus ( -
Comments (34)

Monday, November 24, 2008
Microsoft Surface Calibration Challenges

As I mentioned in this post, we now have a Microsoft Surface unit in our Houston office (and if you want, you can come to see it if you just want a cool experience... just contact us at

However, when we first got ours, it turned out to not be working so well. It recognized when we put a whole palm down on the surface, but it couldn't sense fingers. Yikes! What a bummer. First we get such a cool device and then it doesn't work :-(. We even had a technician come out and had lots of interaction with Microsoft (which was a very good experience, I have to say!).

However, the problem turned out to be almost trivial. When you get your Surface unit, it needs calibration. There are two kinds of calibration. Since our unit didn't seem to work right hardly at all, it needed "deep calibration". For that, the unit comes with a special board with a checkerboard pattern. In theory, you put that down on the unit as instructed by the calibration program. Once it completes, the unit plays a happy sound jingle, and you think you are done. But that didn't work for us either.

As it turns out, the calibration board comes with a protective foil on it *on both sides*! You have to get that off before you calibrate. It isn't obvious at all, and in fact, it isn't even easy to get off. But with the foil on, it simply doesn't work.

Posted @ 12:04 PM by Egger, Markus ( -
Comments (61)

Monday, November 24, 2008
DevConnections Las Vegas Session Materials

My slides for DevConnections 2008 (Las Vegas), including the decks for my ASP.NET MVC talk, my WPF/Silverlight Expression Blend talk, and my "Anywhere Access to Data" talk:

Also, here are individual links to the samples I created during the presentations:


Posted @ 11:08 AM by Egger, Markus ( -
Comments (27)

Sunday, November 09, 2008
Blogged about VFP as a Dynamic Language

I blogged about whether or not VFP is a dynamic language over on the VFPConversion Blog. Click here for the specific post.

Posted @ 4:04 PM by Egger, Markus ( -
Comments (23)

Saturday, November 08, 2008
CodeCast Episode 3 is up!

Time flies when you are having fun, but could it have possibly bean a week since the last episode already? Well, no, actually. The last episode went up a little late because we were so busy at PDC and all. But this week's episode was released right on schedule, so there you have it!

It is a pretty cool episode, I think. (Or as late night show hosts would say "we have a great show tonight!", or "it's a great day for America!" depending on who your favorite show host is). We are following up with PDC and we have 3 different interviews in this episode (more to come!).

Check it out at


Posted @ 3:16 PM by Egger, Markus ( -
Comments (59)

Saturday, November 08, 2008
Our first Surface unit arrives at the EPS offices :-)

Yesterday, our first Microsoft Surface unit finally arrived in our offices. (Not that it took overly long, but this is just one of those things you are waiting for really badly :-)).

So it arrived on a truck, and the first problem was to get it off. It comes on a wooden crate and with all the packaging and other stuff that comes with it, it weighs like 250 lbs.

Here is our first glimpse at our new baby:

Within minutes, it caused quite a commotion at the EPS:

You think Claudio is excited there (below)? :-)

Here it is, coming out of it's cocoon for the first time:

Make no mistake, this thing is still heavy, even with the other stuff removed. Takes 2 people to move it:

Almost there:

And here it is, finally up and running:

This was very fun and exciting. It has been a long time since we got the last piece of hardware that caused so much excitement with the whole company (well, the people from the Houston office who were there that day anyway :-)... ) standing around a box trying to get it ripped open, and taking pictures... :-)


Posted @ 12:05 PM by Egger, Markus ( -
Comments (38)

Wednesday, November 05, 2008
CodeCast Episode 2 is now available!

It took us a bit longer than we had hoped, but the second episode of our new podcast (CodeCast) is now available. This one has "live" reporting from PDC. I just listened to it, and I think it turned out to be a pretty cool episode :-).

You can get to it here:

The next episode with PDC follow-up is scheduled to be released within a day or two too!

Posted @ 9:23 PM by Egger, Markus ( -
Comments (19)

Tuesday, November 04, 2008
Free State of .NET Event in Houston, Monday Nov. 10th 2008

When: Monday, November 10, 2008 - 1:30 - 4:30 PM
Where: Microsoft-Houston Offices (2000 West Sam Houston Parkway)

A free, unbiased look at the current and future development with .NET.

Join Markus Egger, the Publisher of CoDe Magazine and CSA of EPS Software Corp. for an afternoon of free and independent information about current Microsoft developer technologies! What is the state of .NET today? Which of the many .NET technologies have gained traction? Which ones can you ignore for now? What is new in .NET 3.5 and the coming .NET 4.0? What other Microsoft technologies should you include in your development efforts?

For this free event, industry renowned expert, author, speaker, MVP, President of EPS Software Corp., and Publisher of CoDe Magazine, Markus Egger provides an unbiased and independent look at the current state of .NET development. This event is completely free of charge. It is designed for developers as well as (IT) decision makers. Specific prior knowledge is not required.

The following topics will be covered in this event:

  • Latest news from PDC
  • What is new in Silverlight and WPF
  • Preview of "Dev10" (Visual Studio 10)
  • Internet Explorer 8
  • Microsoft Surface
  • Windows 7
  • Windows Azure and Cloud Services
  • Microsoft Sharepoint
  • SQL Server 2008
  • New .NET Languages: F#, Iron Ruby and Iron Python
  • Developing MS Office Solutions with the Open XML SDK

Attendees of this event will come away with a clear understanding of which technologies to use for various technical challenges. Questions? Please e-mail or call 832-717-4445 x32.

Note: This event is co-hosted by EPS Software Corp. and Microsoft Corporation. EPS is responsible for all content presented at this event.

Click here to sign up! (Link will take you through our VFPConversion signup page)

Posted @ 12:07 PM by Egger, Markus ( -
Comments (41)

Tuesday, November 04, 2008
Houston D2Sig (Silverlight/WPF User Group) Inaugural Meeting Thursday!

Inaugural Houston-Area D2 SIG Meeting for Silverlight & WPF Designers and Developers Announced (Free)

When: First Tuesday of Each Month 6:00 – 8:00 PM (First meeting is Thursday, November 6, due to Election Day)
Where: Microsoft-Houston Offices (2000 West Sam Houston Parkway)

This special interest group (SIG) is a community effort open to all interested participants. Each month, a different presenter from various organizations will present to interested attendees. The group is dedicated to exploring modern user experiences (UX) which are part computer programming and part artistic design. While traditionally there has been little overlap in the two disciplines, users now expect a good experience with a professional look. Covered topics will range from development in Silverlight, WPF and related technologies such as Microsoft Surface to design of rich interactive experience for graphical designers. The group strives to provide a good balance of content that appeals to both developers and designers.

The inaugural meeting, to be held on Nov. 6th, 2008 introduces the SIG and the covered topics and technologies in general, before proceeding into this month’s presentation delivered by industry renowned expert, author, speaker, MVP, President of EPS Software Corp., and Publisher of CoDe Magazine, Markus Egger. Markus’ presentation will include the following topics:

  • Introduction to Silverlight ans WPF (Windows)
  • Creating a Silverlight Application
  • Silverlight and WPF news from PDC!
  • A first look at Microsoft Surface

RSVP Requested
Attendance of the SIG meetings is free. To allow us to plan the meetings better and to judge interest ahead of time, we ask people to RSVP here. (Signup through VPF Conversion is temporary and will be replaced in the future with

Phone: 832-717-4445 x 32


Posted @ 12:03 PM by Egger, Markus ( -
Comments (19)

Saturday, November 01, 2008
Is EA support trying to insult me on purpose?!?

This is one of those times where I just have to share my frustration with EA (Electronic Arts) and their support department. Check out this exchange of messages I had with them over the last few weeks:

My original inquiry:

I have recently purchased Warhammer Online. However, I can't create an account, because there is no activation key in the box. I have 2 DVDs, a manual, a Red Alert promo code, and advertisement for a pre-paid game card, but no activation key. I expected a sticker inside the box or something like that, but nothing.

Now what?

EA Response:


Thank you for contacting EA Games Support.

Of there is no activation key in the box then I would suggest you to contact the retailer form where you have purchased the game for a replacement. If you have purchased the game from EA store then please let us know.

If there is anything else we can help you with please let me know.

Thank you,

EA Online Support

Clearly, this was not what I was looking for. After all, I am quite sure Best Buy didn't rip open the box, take the code out, and re-sealed it. So here was my next message to them:

I am not sure how that helps me. The game was shrink wrapped when I bought it (from Best Buy). They surely didn't remove the code.

Where is the code supposed to be with this game? Printed on a card in the box? On a sticker inside the jewel case? ...?

EA Response:


Thank you for contacting EA Games Support.

Registration code/CD Key is a 16-20 digits alphanumeric code generally located at the back of the CD case. You would be able to locate it at the back of the case or on the inside of the back cover of the game manual.

A few of our games have their codes in unusual places. Here are some other suggestions for where to look, depending on the type of game you're registering:

PC games - look on the back of the CD Case or on the inside of the back cover of the game manual.

Console Games - Look on the inside or outside of the back cover of the game manual.

If you are still unable to find the registration code for the game we would request you to please contact the retailer from whom you have purchased the game.

If there is anything else I can help you with please let me know.

Thank you,

EARep Naif
EA Online Support.

 Yeah, no crap. Why would have thunk the CD key is a code. And apparently he heasn't even read my message above or else he would know that I have a PC game. So I responded again:


I know what an activation code is, and I have probably bought close to 100 EA games over the last few years for various platforms. I am also a software developer myself. I think I am generally smart enough to find a reg code and have always been able to do so in the past.

This game doesn't seem to have one.

Please re-read my question above. I have purchased a very specific game (Warhammer Online), which is obviously a PC game. So I do not need to know where xbox games normally have their code. (Xbox codes?!?) Anyway: This is also not a CD jewel case game. It is in the regular new packaging that comes in a black DVD case. So I doubt very much that it is on the outside of that, since that would mean everyone could read it when the game is on store shelfs.

I am sure somewhere there must be someone at EA who knows where specifically the code is supposed to be for this specific product, rather than pasting a standard answer from the Q&A section. If I have that information, I can go back to the store and tell them what specifically is missing from the product.

 EA Response:

Greetings Markus,

Thank you for contacting Electronic Arts.

I sincerely apologize for inconvenience this may cause but if you purchased Warhammer online copy and game code is not included with that copy then you will need to contact the retailer/Best Buy for the Code issue. They are responsible for making sure each copy of the game purchased has a proper code/unused code.


EARep Paolo
Player Relations
Electronic Arts. 

My response:

OK, so I went to BestBuy, and they say there is nothing they can do, because the game was shrink wrapped and they didn't touch it.

OK, now what?!?


I mean, this question can't be that hard to answer, can it? I feel like I have to bring this up at the next EA shareholder's meeting to get an answer on this. Argh! 

And another update of mine later that day:

To add to my previous update: So what you are telling me here is that BestBuy was to somehow open the package up and add the code to it?!? Nonsense! How would Best Buy be responsible for adding the code? that is the biggest bag of baloney I ever heard! Now wonder they sent me away when I wasted close to 2 hours of my day driving there and back.

Like I said before: I have purchased probably over 100 EA games in the last few years for all kinds of systems. I am even an EA shareholder. In short: I have been pretty fond of EA in the past. But I am getting pretty tired of this stuff lately. It took me 3 or 4 tries and 3 months to get a working Rockband guitar controller. I had a broken Crysis disc that took forever to get replaced. And now this. I am not a happy camper right now, and especially after having made the trip to Best Buy, I now feel like a complete idiot!

And I updated my request again 6 (!!!) days later since I never got a response (my original inquiry was close to 2 weeks old or so at this point):

Hello?!? Any thoughts on this?

EA Response another 7 (!!!!!) days later:

Thank you for contacting Electronic Arts.

I apologize for the delay in response, but our support site has had an above-average number of requests for assistance. I hope that some of the information provided will be of assistance to you and your issue.

For technical issues please start with the following FAQ to diagnose the trouble;

Also please make sure we have an updated DxDiag file if you have done any changes during the troubleshooting.

If you have the disk version and are having trouble with the installation, I you should start with the following FAQ. I would recommend trying the manual installation steps;

If you have the Downloaded version of a game, or are having trouble with our EADM please include your log files. They can be found on your system under the following folder;
C:\ProgramData\Electronic Arts\EADM\cache\logs

If the issue seems to be related to your account, or with product activation generally it can be fixed by simply linking your accounts:
For an Xbox360 gamertag:

Additionally our store site has answers to most order related questions:

Finally when it comes to gameplay questions or just unique situations, generally the best place to find an answer is our forums or on third party sites that have game walkthroughs, tips, and message boards for users to help other users getting through the game. One good example of this type of site is Searching for the game there will usually provide good results for general questions.

Again I hope that answered some of your questions. If that did not address the situation please update this case as soon as possible with more details on the situation. I apologize for any inconvenience that this delay caused you.

Thank you,

EA Online Support

WTF?!?!? It took you almost another 2 week to paste this formletter that has nothing to do with my problem?!? What a bunch of jerks. So I responded again a few days ago:

Guys, this is starting to be a real insult. Have you even read my question(s) below?!?

I am not having trouble running the game and I am not having a gameplay issue of some sort. I also made it very clear that this is a PC game, and - in case you are not familiar with it - Warhammer Online is a PC only game.


I "doubt" running DirectX diagnostics will rummage around the box and come up with it.

So no, your hope is not fulfilled. My question remains unanswered. 

This whole exchange is now going on for almost a month and I am still awaiting an answer. As you can imagine, I am a very unhappy customer at this point...


Posted @ 7:39 PM by Egger, Markus ( -
Comments (39)

Saturday, November 01, 2008
Custom Visual Studio/ .NET Static Analysis Dictionaries

Visual Studio Static Analysis is a great tool. It checks your code for problematic sections of various kinds. One of the things it checks for is spelling, which is a pretty cool addition. However, sometimes you have words in your code that it doesn't recognize, even though they might be valid in your application. In that case, you need to create a custom dictionary. Unfortunately, the docs are a bit vague on how that is done. The good news is that it is almost trivial once you figure it out.

The basic dictionary file is in Visual Studio's FXCop folder. Typically that is something like this:

C:\Program Files\Microsoft Visual Studio 9.0\Team Tools\Static Analysis Tools\FxCop\CustomDictionary.xml

The exact path will vary of course, depending on your exact setup.

One possible option is to customize this file. I am not aware of a schema being published for this, and you need to make sure you don't introduce XML Visual Studio's SA doesn't understand. But the format is pretty simple and you can figure it out based on the default contents of the file, as well as comments contained in it.

The downside of customizing this file is that it isn't reusable across machines or even teams. What you really want most of the time is a dictionary included in the projects you create. That can be done as well. Simply add a new XML file to your project (name doesn't matter) and put your custom dictionary settings into that file. Here is an example of a small dictionary we often use at EPS:

<?xml version="1.0" encoding="utf-8"?>

As you can see, the file structure is pretty simple.

Here comes the trick: Make sure the "BuildAction" of this file is set to "CodeAnalysisDictionary". To do that, click on the file in the Solution Explorer and then set this setting in the property window (hit F4 to bring it up, if it isn't already open). Now you have an extension to the default dictionary that is included in your project and thus shared with your entire team through source control.

One limitation of this approach is that the dictionary isn't easily reused across projects and solutions. You will have to keep multiple dictionary XML files up to date manually. I have seen various attempts to fix this, but none of them work reliably with later changes. You can of course keep a dictionary file in a shared place and then choose to "add existing item" to the solution, but that doesn't keep later changes in sync.


Posted @ 1:42 AM by Egger, Markus ( -
Comments (22)








Syndication RSS 2.0 RSS 2.0

All My Blogs:
My personal blogs:
Dev and Publishing Dev and Publishing
Travel and Internat. Living Travel and Internat. Living
Other blogs I contribute to:
Milos Blog (US) Milos Blog (US)
VFPConv. Dev Blog (US) VFPConv. Dev Blog (US)
VFPConv. Dev Blog (DE) VFPConv. Dev Blog (DE)


Blog Archives
All Blog Posts

    September (1)
    September (1)
    April (1)
    March (1)
    October (1)
    June (3)
    May (1)
    March (2)
    February (2)
    January (2)
    December (3)
    November (2)
    October (2)
    September (1)
    August (2)
    July (1)
    June (1)
    April (3)
    March (1)
    February (5)
    January (1)
    October (4)
    September (2)
    August (1)
    July (1)
    May (4)
    April (6)
    February (1)
    January (1)
    December (3)
    November (11)
    October (8)
    September (1)
    July (1)
    June (3)
    May (3)
    April (6)
    March (6)
    February (4)
    December (1)
    November (1)
    October (5)
    September (1)
    August (1)
    July (6)
    June (3)
    May (3)
    April (1)
    March (2)
    January (2)
    December (3)
    November (4)
    October (1)
    September (2)
    August (2)
    July (4)
    June (1)
    May (2)
    April (10)
    March (2)
    February (3)
    January (1)
    December (6)
    November (7)
    October (6)
    September (8)
    August (10)
    July (6)
    June (9)




This Blog is powered by MilosTM Collaboration Components.