Hello! I'm MattD1980

I work as a developer / integrator and as the Design Team Lead at Xceed. Web and application design geek! Silverlight and WPF nerd. I also work as a part time game designer at Loopycube. Very proud to be part of this incredible team since 2001.

Profile

Computer Software | Montreal, Canada Area, CA

Experience

  • Mar 2009 - Present
    Game Designer for iPhone. / Loopycube inc.
  • Aug 2002 - Present
    Design Team Lead - Integrator/Designer / Xceed Software
  • 1998 - Present
    Tech Support / Videotron

Education

Additional Information

Websites:

Posts

August 26, 03:19 PM

Programming is a field that requires extreme precision. There’s no emotional interpretation done by the compiler it will do exactly what you tell it. This, by default, doesn’t translate well in video games. Some games are authentic to their code, one pixel of a cliff boom your dead. Ninja Gaiden for the Nes is a brutal example of a game that required extreme precision from the player which correlates well with how it was coded. There are some exceptions, If you think of Super Mario Brothers 1, it displays more flexibility :

In this specific scenario, Mario “should” have fallen in the hole however, it was designed to cut the player some slack and allow them a margin of error. The benefits are obvious, you leave the player less frustrated and the experience becomes more enjoyable.

There are exceptions to this rule, obviously your targeted players could get bored if the game is too easy or too hard. Not all games target the same category of players. Recently released Deux Ex for example is definitely not your grandma’s Farm Ville. The skill level expected from the players is higher than your typical casual player. That said, it’s not because a game is super hard that it should not try to give a player some breathing room. Let’s look at vertical shooter, it is a category of game that is considered hard :

Ikaruga (shown in the picture) is not the hardest of it’s category but the game is trying damn hard to kill you. Dozens even hundreds of bullets are constantly being thrown at you that you must avoid or absorb by switching your ships colors. It requires a lot of coordination even to reach the third level in this game. The breathing room (may be hard to believe from the screenshot) is still present. In this case, the ship’s hit box is smaller than the actual ship :

As you may have guessed the bullets will only kill you if they touch the hitbox rather than the actual ship on screen. This has the chance to provoke : “WOooaaaaah! That was close!!!” reactions rather than “damn, dead again.”. I’m not downplaying the difficulty of these games, I’m rather trying to demonstrate that even the most hardcore games tend to try and apply that line of thought.

Games can be hard but they should never be impossible, give your players a break and remember that fun is part of the experience they are expecting from any game. Don’t let a compiler make design decisions, micro manage everything that’s going on in your game because once it’s out there, player will notice if you didn’t. To quote Futurama, “When you do things right, people won’t be sure you’ve done anything at all.” If people enjoy your game without being able to explicitly describe why, chances are you’ve done something right.

August 22, 09:20 PM

If you didn’t give Bastion a try yet, you should. Bastion takes place in “in a lush imaginative world, in which players must create and fight for civilization’s last refuge as a mysterious narrator marks their every move.” It’s absolutely gorgeous. The world gets created as you move around, it’s both technically and visually impressive.

On the downside, I wish they didn’t put in that narrator. As you progress through the world, a narration is done trying to give context to the story. It’s semi-humoristic and I was not quite sure where they were going with it. In my opinion, it doesn’t add to the experience, on the contrary it takes away from it. Still, it’s a small annoyance considering the quality of the game. Easily worth 15$!

July 28, 10:42 AM

If you own an iOS device, you must check out Gesundheit. It’s an action puzzle game that puts you in control of a snotty pig who needs to outwit a bunch of monsters. The game is incredibly well designed, the controls and the interface works perfectly, definitively worth your 0.99$ (for a limited time). You can get it here. Here’s a video preview of the game that should instantly charm you.

June 23, 04:11 PM

I’m still laughing just by watching this image. Maybe it’s because I woke up at 5:50am this morning but whatever, I think it’s a great piece that I wish I could have in my man cave!

found this on a fun (but French) website here.

May 20, 09:08 AM


I’ve recently finished playing Portal 2 and I have to say that I had a blast. Although I would have liked the game to be a little harder I think it’s still fair to say that playing through the game is incredibly rewarding. I would consider the game widely accessible even to those unaccustomed with shooter controls; the learning curve is very well done. The game’s story and dialogues (more monologues really) will be enough to motivate you to complete the puzzles as quickly as you can to get more of the story that you’ll be craving within the first minutes you play.

As my title suggest, the thing I was most impressed with is the game design. One thing I’ve learned about designing games over the past years is that you have to ask yourself, “what am I expecting from the player?”. Portal 2 game designers obviously wanted the players to solve puzzles, that’s what was expected. Simple enough right? Well, we’ve all played games that included puzzle situations (crate pushing anyone?) that not only required you to solve the puzzle but also expected the player to be able to precisely move the character through the puzzle. There’s one specific game that comes to mind and it’s Crush for the PSP. Not only were the puzzles incredibly hard but the game controls were awkward at best. Portal 2 didn’t go there, and this is definitely something I appreciate from the game designers. Once you’ve figured out the puzzle, it never asks the player to execute the puzzle with incredible precision. The game designers don’t expect you to play like a Quake 3 pro, they expect you to go through their design easily in a 3D environment thus making the game accessible to everyone.
This is a challenge we are currently facing at Loopycube; we’re working on a line of sight puzzle game. You have to steal a piece of art from a museum while avoiding the guards’ line of sight. We’ve been working for a couple of weeks on fine tuning the difficulty level of each stage and also trying to work on the learning curve. The first version I tried had this issue where we not only required the player to solve the puzzle but also asked them to complete it with extreme precision. At this point you have to step back from the game and ask yourself, “do I want to make an “action like” puzzle game where I expect the player to brute force is way through or go back to a more puzzle type game?”. We’re all learning this stuff together at Loopycube and having quite a blast at it as well. That said, I’m convinced the level designers faced that same issue with Portal 2. To me, it’s no coincidence that the game doesn’t include challenging platform scenarios and the like.

So what do you think? Do I have this impression based on the fact that I am used to playing shooters or would you agree that the game goes to great lengths to  focus mainly on the puzzle solving aspect and not requiring extreme precision that only the most adept gamers would have?

This was a triumph!
May 02, 11:14 AM

Square Enix sure knows how to pull my strings. Last week they released Final Fantasy IV: The Complete Collection, which I must definitely own, since it has to be the RPG I’ve played the most since it’s first release on the SNES (titled Final Fantasy II back then for those keeping score). This game was a landmark in my early teen years. I thought the scenario was brillant and I was captivated by all the unexpected plot twists. I simply adored the mystery behind Cecil’s dark knight mirror image fight amongst other thing. Of course, I was 11.

One thing that remains great is the musical score used to carry the story line. It was simply amazing back then and still is amazing today. Perhaps the musical score is one of the main reason why I held such an emotional attachment to this game, I could barely read English when I was 11 so it had to be something more than just the dialogs. This is one thing I hope they don’t touch.

For me, the down side to this release is the fact that it’s being released on the PSP. I don’t like the PSP; it’s not comfortable, especially for a game that will require long hours of gameplay like a Final Fantasy game. I wish they would release it as a downloadable then I could at least be spared from the spinning noise of the UMD. It still beats playing an RPG on a phone though so I guess I should be happy it’s not an Android or iOS-only release.

This will probably be the last game I purchase on my PSP before finally putting it to rest. You suck PSP and I loathe your battery life, easily scratchable screen, noisy UMD, slow load times, incredibly fragile device. You really, really sucked. Hopefully, this will also be the last time I play Final Fantasy IV, there’s too many great games out there to justify replaying these old ones again. I also didn’t enjoy the After Years all that much on the Wii but perhaps this version will improve my experience. Time to see Cecil get screwed by Kain one last time…

You can watch the cheesy trailer for this release here : http://www.youtube.com/watch?v=ndcGaUhiTnc

April 20, 08:43 AM

I’ve been incredibly busy and/or out of the house recently. I had the chance to go to Cuba for a week of family vacation and then Las Vegas for work. This is why I’ve been rather quiet on my blog recently. During my travel time I got the chance to play some 3DS, which I got a day before leaving to my trip to Cuba. I got Street Fighter IV, Shadow Wars, and Pilotwings. THE game I’m most looking forward to is Zelda OoT. Rumors have it that Nintendo decided to hold off its release to give other developer the chance to sell their titles, but that’s a different story. I’ll try to post my impressions about the console and the games as soon as possible.

Besides the 3DS stuff, there are a few games I’m looking forward to but the main one on my radar is Portal 2. I simply adored the first one and I’m looking forward to this sequel. I’m worried that they may try and over do it and over complicate things; Portal was great because of it’s simplicity and it’s success, I’m sure, came as a surprise. I’m hoping they haven’t changed the formula too much. Quite a few on my twitter feed are excited about Gears of Wars 3; however, I really didn’t enjoy the first two. I gave them a reasonable chance but it felt like a unending game of hide and seek so I will pass on this one.

I’ve also been playing a bit of World of Warcraft again with friends again, but this time with a new character and I’m enjoying the revamped content quite a bit. I’m curious to see how 4.1 will be received because it feels like people are already getting bored with Cataclysm. I’m also very interested to see if this will cause Rift players to go back to WoW. A great test for this new MMO.

So much to talk about, it’s good to be back!

March 10, 08:09 AM

From old-school to 2011, the Dragon Quest series manages to evolve in a great RPG game while keeping the old-school charm of the series. I’m currently 7-8 hours in and I’m having a blast with it. Contrary to most 3D games on the DS this one manages to look good for the dated system. It uses some cell shading that somehow manages to hide the low resolution of the device. The game designers also decided to keep some of the sounds original to the series (stairs sounds, attack sounds, etc…); however, if you are unfamiliar with the series you might just find this to be weird. Overall, it looks and sounds great so let’s look beyond the artsy factor.

It’s predecessor (Dragon Quest VIII) was a lot more tedious to play. Every single time you switched zones it meant grinding for a couple of hours. There’s no merit in a game taking 80 hours if more than half the time you have to grind your way through the game. Dragon Quest IX is far more balanced and won’t force you to do as much grinding. The game also allows you the flexibility to create your own party, which is something new to the series; however, it does mean less personality to your party as little to no scripting will be involved. I personally like the character of Jessica in DQ, for example, which added to the charm of the game. Now your party consists of 4 mute characters, which is a bit of a shame. That said, you can pick from multiple classes, which also offer multiple talent trees to pick from and that contributes to a great variety of groups you can form. I’ve decided to go with a classic party of Warrior, Priest, Rogue, and Mage. I figured it was a safe bet that wouldn’t require me to go back later in the game to change my party. The game also offers a multitude of online features that I have yet to test. A few hours into the game you will have the option to “visit” other worlds with other players. A feature that I’m looking forward to test.

I’ve been playing Dragon Quest since Dragon Warrior 1. Back then you could get it for free if you subscribed to a year of Nintendo Power. It wasn’t a great game but RPGs were a tad rare back then. The game gave you very little information on what to do next and most of the time you had to guess what you had to do to progress. Maybe I got this feeling because I couldn’t really read English all that well but either way, the translations were pretty bad. That said, Dragon Quest has come a long way since and so far it feels like this could be the best version since Dragon Warrior 4. Hopefully the game won’t disappoint me midway; however, if you’ve skipped multiple versions due to how tedious Dragon Quest usually are, it’s time to give it a chance one more time.

March 01, 08:16 AM

Last week there was a surprise (for me at least) added to the Wii Virtual Console catalog; a NES game called Faxanadu. I haven’t played this game since I was 10 years old so the nostalgia factor kicked in big time and made me spend $5 for it. I’ve played a few hours and I’m almost at the end of the game, but wow, what a brutal experience this has been. I would much rather deal with my root canal next month than actually going through the game again.  And yet, here I am, replaying it for at least the third time since 1990.

I wish I could talk about some ingenious game design elements or clever gameplay but it’s a total mess. There’s absolutely no game design to talk about, monsters will always rush towards you no matter the obstacles, if they can’t reach you they go nuts and start shifting wildly on the screen, it’s really quite astounding. I can understand that coding an AI is complex but a few IF conditions in their code could have given the game a more “organic” feel. The game is filled with cheap shots, sometimes there are NO options and you will get hit by the monsters on the screen no matter what.

So why am I bothering writing about it? Because somehow, in some way, the game still was fun to play. As a 10 year old kid, you are way less critical about the world around you and even less with games. When I was playing this, I must have thought to myself “I must be doing something wrong” and probably gave the designers more credit then they deserved but again, I don’t believe there were any designers involved in this project. It feels like the game was probably mostly done by a few programmers and a pixel artist. I think this game may have, by itself, created the need for testers. Even one tester could have told him : ”On screen X when you are up the ladder, it’s impossible to get out because monster Y will just hit you and make you fall down over and over”. I think their idea of a solution for this issue was “Meh, they can always die and restart from the town”.

Still glad I spent the 5$ for it though. Faxanadu was a blast for me to play as a kid but now, it’s just painfully wrong in so many ways and yet, I’m still trying to find that last ring to allow me to get in ”The Evil Place”!

Also, the marketing team decided that : “Daggers and wingboots, mantras and monsters await you.” was a good slogan for the game, that says a lot.

February 21, 09:04 AM

I caved. I went out and bought Marvel Vs. Capcom 3. I do feel cheated having to pay 60$ for a Street Fighter game but I paid the same price for games I know will be played even less. Still, a 39$ price point would seem more fair to me. As for the game, so far so good, I’m a few hours into the game and I must say it is quite impressive. The animations are incredible and the background stages are equally impressive. Some characters feel unbalanced compared to others, for example, I have yet to fight someone good with Tron and on the other hand, Dead Pool feels overpowered to me. It’s probably just a question of getting used to the characters.

Capcom should get a clue; this is no longer a game designed for the arcades. The single-player mode game offers too little. In previous versions it was understandable since Marvel Vs. Capcom were ports of an Arcade game; however, Marvel Vs. Capcom 3 is not. It’s a few battles between other teams and boom, Galactus. The last fight is ridiculous and does not bring additional fun to the game like it could have.  The game has another option called Mission that is just a hidden tutorial for each character. It’s nice, but it doesn’t cut it. In my opinion, it is pure laziness on Capcom’s part and this is an example where I expected more feature out of my game, especially if your charging me that much for a 2D fighting game. If you’re wondering what they could have done, you can check Street Fighter Alpha 3 or better yet, Soul Calibur, which manages to offer a compelling single player experience.

The game does offer a lot in terms of complexity; mastering a single character will require hours of practice. I’m also glad they moved to a 3 button layout when it comes to attacks: High Kick and High Punch are now a single High Attack. It works incredibly well and you probably won’t miss the extra buttons. They also added a “Special” button, which is basically the launch attack, and makes it easier to start your air combos. I’ve only played 4-5 hours so far but I can already tell that this is a game I will be playing for a long time. I wish I could tell you more about the online aspect but every time I tried to join a game I was dropped unexpectedly. Probably bad luck because reviews seemed rather positive about that aspect of the game.

Which team do you usually work with? I’m enjoying playing : Viewtiful Joe, Sentinel, and Wolverine for now. I’ll probably get my ass kicked online later this week, hopefuly the ladder system will allow me to have an occasional win. Feel free to email me if you want to add me on your Xbox Live account for a couple of fights! mattd1980 at mmmgamer dot com.

Posts

March 02, 01:24 PM

Feels like not too long ago I was writing about Xceed going to Mix09 and here we are a year later, ready to go to Mix10! We are all very excited about the announcements that will be made in regards to Windows Phone 7 Series development and are looking forward to some announcements about Silverlight's future as well. And who knows, maybe even WPF? Come on Microsoft, give WPF some love! :).

That said, if you catch Cat, Odi, Charles, or myself at the event and have questions about our products, don't be shy and come talk to us! We'll be staying at the Mandalay Bay hotel and will try to be part of social events there. You can check us out as usual on twitter (@MattD1980 @Cattatatow @Kosmatos) to see where we're hanging out.

I hope the keynotes and sessions this year will be as inspiring as last year. Mix09 by far surpassed my expectations and it would seem that even more is brewing in Microsoft's lair. I still have to fill my schedule with the sessions I will be attending. So much to learn, so little time!

See you there and don't hesitate to contact us if you want to meet up!

 

February 19, 03:39 PM

The upcoming release of Xceed Professional Themes for WPF will be our biggest update to the product since it was released last year. The latest incarnation of Xceed DataGrid for WPF brought a Windows 7 inspired theme as well as the Live Explorer theme to the table. Both these themes will now be available in the next version of Xceed Professional Themes for WPF.

So let's talk about the Live Explorer theme. When we first created our Xceed DataGrid for WPF Live Explorer we wanted to have a branded theme that would demonstrate how much of our product you could "re-style". At the time we didn't offer it as an available theme since we thought it would be too specific to our application. Boy, did we guess wrong on that one! Many of you responded very well to the theme and some of you were furious at us for not making it available. We heard you! Here's what it's going to look like :

The Live Explorer theme was crafted so you can easily add it to your window and instantly get the look we are using in our own Live Explorer. It is perfect for applications that require a "darker" environment with a hint of color to keep it visually pleasing. Keep in mind that the video displays a work-in-progress version of the theme but very little should change visually when it is released. We also decided to expose an additional style for the toolbar to make it orange instead of gray.

The second theme we added is a Windows 7 inspired theme. Windows 7 creates a very colorful and exciting environment and we wanted to capture this and bring it to our products. We tried to bring a more extravagant experience with this theme and hopefully it will allow you to build a fun application around it.

Both these themes are available in Xceed DataGrid for WPF and the upcoming version of Xceed Professional Themes for WPF. Another version of Xceed Professional Themes for WPF will provide styles for Microsoft's datagrid and calendar controls should come out shortly after.

If you have any questions about the product, feel free to contact us!

July 23, 02:29 PM

 
I thought it would be a good idea to share with you how easy you'll be able to integrate our new Xceed Professional Themes for WPF product into your application. Version 1.0 will include 5 different themes: Media, Glass, and Office 2007 Black/Blue/Silver. Future versions will probably include Office 2010, Windows 7 themes, etc. You can expect each theme to have a version for Xceed DataGrid for WPF as well. This way, you can keep the datagrid's look in sync with all the standard controls.

Once you have the product installed, the first thing you'll want to do is add references to your project. Each theme has an assembly associated with it. For this example, we'll work with the Media theme (similar to the WMP11 theme in Xceed DataGrid for WPf). Once you have added the reference, you'll want to set the namespace declaration in XAML:

xmlns:xcpt="http://schemas.xceed.com/wpf/xaml/themes"

xcpt stands for Xceed Professional Themes . We wanted to preserve the proper "WPF" way as much as possible, so each theme is basically a resource dictionary that you can add to your resources. You can simply add the resource dictionary as a resource to your entire window:

<Window.Resources>
  <xcpt:MediaResourceDictionary/>
</Window.Resources>

This will also work if you want it to be applied to your entire application.

<Application.Resources>
  <xcpt:MediaResourceDictionary/>
</Application.Resources>

You're almost ready to go. You need to first take care of the licensing. Our custom resource dictionary exposes a LicenseKey property:

<xcpt:MediaResourceDictionary LicenseKey="Your-License-Key-Here"/>

If you are in trial mode, you should be able to find your trial license key in the Resource Center installed with the product. If you have purchased the product already, you will find your license key in an email sent by our sales department. If you are trying the theme on an already existing application, you can hit F5 and see your standard controls styled with the Media theme. Simple enough?

The method I just described is using all our resources implicitly, meaning that you did not have to define explicitly on each controls which theme you want to use. If, for any reason, you do not wish our themes  to override all your defined styles, you can use this product explicitly.

<xcpt:MediaResourceDictionary StyleUsageMode="Explicit"/>

As you already probably guessed, the default value is Implicit. Now that you have changed the StyleUsageMode property, if you hit F5, you should not see any difference from what you usually see without the themes referenced.

This means, however, that you will have to define the resource you want for each control. Let’s take a button for example:

<Button Style="{x:Static xcpt:MediaResources.ButtonStyle}"/>

You have to force the Style of the Media button on the desired control. You will find a complete list of keys for our controls available in our documentation if you chose to work in Explicit mode.

When creating this product, we were also aware that even though we styled all the standard Microsoft controls, some users would require us to go further. This is why in our light API we added some brush resources that you can apply to your own controls. Here's an example:

<Border Background="{x:Static
xcpt:MediaResources.ControlBackgroundBrush}"
        BorderBrush="{x:Static xcpt:MediaResources.BorderBrush}"
        BorderThickness="1"            
        Height="50"
        Width="50"/>

This way, you create your own controls using some of our resources. As demonstrated above, you can set Background and BorderBrush to any element using our resources. A complete list of exposed resources will be available in our documentation as well. Of course, there's always the option to get our Blueprint Edition to get access to the complete XAML resources for all controls.

Finally, a request I have received a few times and even in my previous blog post is to be able to change themes on the fly for your application. Basically, something to allow the user to have a Combobox with a list of available themes that can be changed during run-time. Here's a quick and dirty way you can do this, by defining your Combobox:

<ComboBox SelectedIndex="0"
                SelectionChanged="ThemeComboBox_SelectionChanged">
         <ComboBoxItem Content="Glass">
            <ComboBoxItem.Tag>
               <xcpt:GlassResourceDictionary />
            </ComboBoxItem.Tag>
         </ComboBoxItem>
         <ComboBoxItem Content="Office 2007 Blue">
            <ComboBoxItem.Tag>
               <xcpt:Office2007BlueResourceDictionary />
            </ComboBoxItem.Tag>
         </ComboBoxItem>
         <ComboBoxItem Content="Office 2007 Black">
            <ComboBoxItem.Tag>
               <xcpt:Office2007BlackResourceDictionary />
            </ComboBoxItem.Tag>
         </ComboBoxItem>
         <ComboBoxItem Content="Office 2007 Silver">
            <ComboBoxItem.Tag>
               <xcpt:Office2007SilverResourceDictionary />
            </ComboBoxItem.Tag>
         </ComboBoxItem>
         <ComboBoxItem Content="WMP11">
            <ComboBoxItem.Tag>
               <xcpt:MediaResourceDictionary />
            </ComboBoxItem.Tag>
         </ComboBoxItem>
      </ComboBox>   

In your codebehind you will have to add the ThemeComboBox_SelectionChanged method, which should look like this:

private void ThemeComboBox_SelectionChanged(object sender,
SelectionChangedEventArgs e)
    {
      if (e.AddedItems.Count > 0)
      {
        this.Resources = ((ComboBoxItem)e.AddedItems[0]).Tag as
ResourceDictionary;

      }
    }

So this pretty much covers how our new product called Xceed Professional Themes for WPF will work. If you have questions about licensing and pricing, you can already contact sales@xceedsoft.com. You can expect this product to be available by mid/end of August. Enjoy!

June 25, 12:47 PM
For the past few months, Catherine and I have been working on a new product called Xceed Professional Theme Packs for WPF. This product will include all Standard Microsoft controls : Button, RadioButton, Checkbox, ListBox, TreeView, Toolbar, StatusBar etc... and about 30 different controls—all skinned.
 
The main reason why we decided to develop this product is because of you, our users. We received many comments like : "the WMP11 theme is nice for the DataGrid; however, the rest of my application doesn't fit!". It seemed like the next logical step was to offer a product that would enable our users to give their application a uniformed look. This product does not have a dependancy on Xceed DataGrid for WPF since we can easily imagine users wanting to use this product in any WPF application.

One of the features this product will have is the ability to skin all your controls and still respond to visual properties. For example, having a WMP11 button will completely redo the look of the button; however, we were careful to still support properties like Background and BorderBrush, for example. If you look a the following image, you'll see three different buttons all with the same skin. The only difference between each button is the Background property :
 
 
 
 
We wanted to enable our users to modify the look of the controls without compromising the skin. To achieve this, we had to exploit TemplateBindings as much as we could. TemplateBindings in a template allow you to chose which VisualElement in your VisualTree will respond to a given property. So in our WMP11 Button template, we added a layer over the gradient brush that gives the WMP11 look. So : 

<Rectangle Fill={StaticResource WMP11GradientBurhs}/>
<Rectangle Fill={TemplateBinding Background}
           Opacity="0.3"/>
<ContentPresenter />

This is obviously not exactly how our template looks, it's just to give you an idea of how we proceeded. The Rectangle that has the opacity set to 0.3 is the one that is template bound to the background property. This will allow our users to set a color to the control without overriding the grandients as seen in the image.

Here's a quick video demonstrating some of our controls in action :

 

Not all controls are being displayed but it should give you a general idea of where we're going with this product. One of the toolbars has its background property set to DeepSkyBlue and, as you can see, it still fits with the look of the control.
 
I'm pretty excited about Xceed getting this product out to you as soon as possible. We are currently in a final polishing phase and hoping for this to be released by the end of the summer. Expect to see 5 different themes with over 30 controls including : Office 2007 Blue, Black and Silver, WMP11, and Glass. Have questions about the control? Feel free to email me at drimonakosm@xceed.com or follow me on twitter at www.twitter.com/mattd1980.

 
May 29, 11:13 AM

This is somewhat related to my previous post about "less is more". Another thing that I've noticed over the years is that some websites or applications tend to give a priority to looks over function. There are some exceptions to this that obviously depend on the theme of the application or website. Now, WPF and Silverlight provide us with a lot of features to alter the visual appearance of an application and as I mentionned before: with great power comes great responsibility. 

 

A lot of our clients have to wear the designer, artist, and programmer hat all at once. Not everyone has the chance to have an integrator and artist/designer working alongside. If you are just starting out in WPF or Silveright and do not have a lot of experience in design my first advice is this: don’t try to be cute. Design is hard and requires a lot of experience, you wouldn’t expect someone to start coding in C# and or VB.NET by improvising, well don’t expect you can easily improvise design ;-). 

 

When I say “don’t sacrifice function over looks” it means elements placed on your application or website that require interaction should not be blended in your design in a way that they cannot be easily accessible. This might sound very basic; however, even the most advanced design companies make these fundamental mistakes. For example, here’s something Odi (@kosmatos) tweeted : “So who can tell which is currently selected in the "Public | Private" TOGGLE button? How do you know? http://twitpic.com/659sb”. And he’s right, the purpose of a ToggleButton is to easily determine if a button is currently toggled or not. When designing an application make sure your controls are easily accessible and that their visual representation respects the essence of the controls. 

 

Another fundamental way to allow users to easily indentify an element that can be manipulated is by using contrasts. Make sure that what is important to the end users visually stands out. This is another point that may sound very basic to most of you; however, it is a detail that can be forgotten or ignored. Here’s a selected menu item from a very awesome website I visit:

 

 

Bright orange on white is not the best way to make text stand out. Test your contrasts and make sure that important text or informationcan be easily read. 

 

Regroup valuable information or sections currently important to the user. We faced this issue when developing our Resource Center.  We wanted to display a lot of information in a single form. For those who don’t know what the Resource Center looks like, here it is: 

 

 

We have a main section in our circular listbox, we have News Headlines and Licensing Information. That’s a lot of content to throw at our users. So we have to guide our user eyes to what is important. The currently active section will have a big icon standout and the icon will be linked to the currently active section, in this case Getting Started, which is represented by a timer. One of the issues we had is that the news headline would have grabbed the user's attention too much when really this is not where we want them to initially look. So what we did is we made the text semi transparent until the user hovers over the section. We also decided to hide our scrollbar on the News section that would just be cumbersome to the user's eye. So with this, we hope that the users initially pay attention to the middle circular panel. 

 

This is just some advice I’ve learned by working with our designer over the years. They are fundamental principles that we obviously did not invent. Those are related to the Contrast, Repitetion, Alignment, Proximity (C.R.A.P.) design principles brought up by Robin Williams in his popular book The Non-Designer’s Design Book. You can do a quick google search for C.R.A.P. Web Design to find more information about this. Keep in mind that the C.R.A.P. Principles applies, in my opinion, to application design as well.

 

 Questions or comments, feel free to send them either on twitter @mattd1980 or drimonakosm@xceed.com

 

March 13, 09:47 AM

Next week I'm headed to Vegas to participate in this much anticipated event. I'm really looking forward to meet some of you and I will be hard to miss with my white Xceed polo ;-) so don't be a stranger! The sessions I will be attending will be mostly those concerning Silverlight 3 and WPF. I'm pretty excited about What's New in Windows Presentation Foundation (WPF) 4 by Kevin Gjerstad and Mark Wolson-Thomas, I've been working with WPF over the past three years and have pretty high expectations about this new version. I hear XAML will change a bit, which concerns me considering most of my coding time is done in XAML for the DataGrid or our Silverlight products.

 

My expectations for Mix09 are to a) learn new stuff and b) get inspired! It'll be interesting to see what others do and what Microsoft has planned for the future. I'll see you guys and gals there! I'll probably be tweeting quite a bit about what I am doing while I’m there so feel free to follow me at twitter.com/mattd1980. Oh and I'll be attending the TAO party with Catherine, Charles, and Odi on Wednesday night!

February 16, 11:14 AM
My previous post was xamlless so I thought I'd give some basic examples to get you started if you're not familiar with animations.

First I'll show you how to create this smooth translate and opacity animation and how to tweak it to what you want. Here's the storyboard I declared in my project resources :

<Storyboard x:Key="showItemsStoryboard">
  <DoubleAnimation
      Storyboard.TargetProperty="Opacity"
                              DecelerationRatio="0.5"
                              To="1"
                              Duration="00:00:00.400"/>         
  <DoubleAnimation
      Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
                              To="0"
                              DecelerationRatio="0.5"
                              Duration="00:00:00.400"/>
</Storyboard>

There are various ways you can do this but I prefer using a more generic approach where I will not be dependent on the type of object I will be animating, hence the UIElement.RenderTransform. You could also set this explicitly by using the Storyboard.TargetName property and naming (x:Name) your TranslateTransform, which would look like this : 

 <DoubleAnimation
                              Storyboard.TargetName="myTranslate"
                              Storyboard.TargetProperty="X"
                              To="0"
                              DecelerationRatio="0.5"
                              Duration="00:00:00.400"/>
  
Either way, it does not really change anything for the current example. Now, the only thing left is to make sure the object you will be animating has a TranslateTransform attached and its opacity set to 0 :

<TextBlock Opacity="0">
 <TextBlock.RenderTransform>
    <TranslateTransform X="-15"/>
 </TextBlock.RenderTransform>
</TextBlock>

Your control is now ready to be animated, for testing purposes you can just add the following code in your xaml :

 <TextBlock.Triggers>
    <EventTrigger RoutedEvent="TextBlock.Loaded">
       <EventTrigger.Actions>
        <BeginStoryboard Storyboard="{StaticResource showItemsStoryboard}"/>
       </EventTrigger.Actions>
    </EventTrigger>
 </TextBlock.Triggers>

There are various elements you can play with to get the effect you want, at this point it's just a matter of changing the duration along with the Acceleration or DecelerationRatio and the TranslateTransform X value. Keep in mind that in a lot of cases a simple Opacity animation should be enough without adding the translate. The key is to not over do it .
 
Another fun yet dangerous (in a design point of view) thing to play with when working with animation, is the ScaleTransform. If you read my previous post you will understand why. ScaleTransform animation surfs on the thin line between corny and cool. Scaling elements can be intresting in splash screens or when you initially layout your elements. Here is an example :

 <DoubleAnimation Storyboard.TargetProperty="Opacity"
                          To="1"
                          Duration="00:00:00.400"/>         
         <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
                          To="1"
                          Duration="00:00:00.400"/>
         <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
                          To="1"
                          Duration="00:00:00.400"/>

Make sure your element has both the opacity set to 0 and has a ScaleTransform attached : 

<TextBlock Text="Hello World"
  Opacity="0">
 <TextBlock.RenderTransform>
   <ScaleTransform ScaleX="0.75" ScaleY="0.75"/>
 </TextBlock.RenderTransform>
</TextBlock>

I would advise against starting with a ScaleX and ScaleY at 0 as the effect will be too drastic. You can try it out and see what I mean. 

Just to demonstrate what you could do :

 

So how does that all tie in the datagrid? Well, it's really up to you and your creativity. An easy example would be to use an animation like a scaleTransform in a cell's error style. If some data is invalid, you could then scale it to bring the information to the user's attention. 

If you want to try this out, create a new Style with TargetType xcdg:DataCell (assuming you added Xceed's namespace with xcdg) give it a key like : myCellErrorStyle

In this style you can add something like this (tweak it to what you want) :

 <Setter Property="RenderTransformOrigin"
              Value="0.5,0.5"/>
      
      <Setter Property="RenderTransform">
         <Setter.Value>
            <ScaleTransform ScaleX="1" ScaleY="1"/>
         </Setter.Value>
      </Setter>

        <Style.Triggers>
            <Trigger Property="IsValidationErrorRestrictive"
                     Value="True">
                <Setter Property="Background"
                        Value="Red">

            </Trigger>

            <Trigger Property="IsValidationErrorRestrictive"
                     Value="False">

                <Setter Property="Background"
                        Value="Orange">

<Trigger.EnterActions>
               <BeginStoryboard>
                  <Storyboard AutoReverse="True">
                     <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
                                      To="1.1"
                                      Duration="00:00:00.25"/>
                     <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
                                      To="1.1"
                                      Duration="00:00:00.25"/>                                      
                  </Storyboard>                     
               </BeginStoryboard>
            </Trigger.EnterActions>

            </Trigger>
        </Style.Triggers>

Now, on the datagrid you have a property named CellErrorStyle, you can set it to your myCellErrorStyle and voila!

Questions? Comments? Please feel free to share :).
February 10, 12:56 PM

A lot has changed since WinForms but one of the variables that hasn't changed much, is the programmer. WinForms programmers who were used to static environments are now asked to "upgrade" to WPF, which brings a whole new world of possibilities. One of these possibilities is animation. In an ideal world, a company that moves from WinForms to WPF should have an integrator and an artist. Obviously, not all of WPF programmers are that fortunate and some have to take on the three roles. Here's an example of what I consider a good use of animation.

If working with Catherine (our artist) has taught me anything in the past three year is that "less is more", which she often loves to remind me. This is especially true with animations and more so if you have little or no experience with it. Stick with the basics. Why do you want to animate X and Y? The answer can't always be "because it's cool” or “because I can". Animations should be used to guide the user’s eyes on the screen, to give them a visual queue that something changed. It's easy to go over the top and do too much. Here's an example of what I would not recommend :



Unfortunately, this is the type of things we see in WPF applications. Too much visual noise, which overwhelms the user. I would recommend a much smoother approach. For example:



In the end, if your application is built around a "light" animation philosophy, odds are that you'll get a much slicker application. Try not to vary the type of animation you are using either. Mixing ScaleTransforms with RotateTransform can make a user nauseous. If you don't feel you have the knowledge required to determine when you should use animation, refer to the pros like what you see in Zune, which uses very smooth animation like the one I demonstrated.

Also feel free to follow me on twitter !

February 04, 03:52 PM

Hello! Welcome to my new blog, Xaml hero! My name is Matt and I work as the WPF and Silverlight integrator at Xceed. With the arrival of new technologies that require artists and programmers to work together, came the need for a middle man: Me! Part of my job is to make sure that both parties understand each other and work towards the same goal. When we have technical group meetings the artist will often look at me and go "huh" and it's part of my job to make her understand some of the technical limitations she will be facing. My day to day job consists of taking the designs or prototypes the artists might have created and integrate them into our products. It can be new look for the column header in our grid or a new sample application for our Silverlight tools. I usually work directly in Visual Studio or a XAML-pad type of editor. I usually try to avoid using Blend as its XAML editor is still lacking.

As for our artist, she can use a wide variety of tools. She obviously does a lot in Blend; however, her mock ups can be static and come from illustrator. Once she is done, she'll ask me to "wpfize" them. She will also occasionally use Flash when her mock ups rely on elements being animated.

So there you have it, this is what I do at Xceed. I hope to bring you tips and samples on how to do neat things in both WPF and Silverlight whenever I get the chance.

Note that Catherine and I will be attending mix09! Look for us if you have questions about our products or just feel like chatting about them.

 

abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz