Profilo di AndreFurtaSpace - www.afurtad...FotoBlogElenchi Strumenti Guida

Blog


15 dicembre

Marry Christmas, Happy 2008 and Happy Gaming with XNA 2.0

 

This is probably my last post in 2007. Therefore, I'd like to wish you Merry Christmas and an excellent new year. 2008 will be a year of many, many challenges, but we can talk about this in a future post.

Meanwhile, have a nice gaming with the recently announced release of XNA 2.0!

XNA_Game_Studio_2

With such a release, a new stage in the "Web 2.0 game development" officially begins, since there is now support for creating multiplayer games, both through a system link or Live network. There is even a new starter kit in the XNA Creators Club website, Net Rumble, that illustrates how to create such connected games.

I ask myself which would be the next top priorities for the XNA Team when they get back from Christmas, towards XNA 3.0. For me (and SharpLudus), providing a better experience to (dynamically?) add sound effects and background music to games would be cool.

Take care.

[]s
-- AFurtado

Here comes another bubble

 

Hilarious! [click here if you can't see the embedded video below]

 

[]s
-- AFurtado

14 dicembre

[UX Pitfalls] Compactless/unsorted information display and liar links

 

[This post is part of a series. To understand the context, click here.]

Today's User Experience (UX) Pitfall goes to Yahoo Groups. In the past, I was able to see all my groups in a single page, in a very compact manner. Then they have introduced a new interface. Let's see what has happened.

The My Groups box doesn't display all of my groups anymore. Only a subset of them:

mygroups 

Are they organized by any specific criteria? Most used? Highest message volume? Alphabetical order? Owner/moderator/ordinary status? No. They seem to be randomly selected and displayed in the box. Not useful at all. I believe the box should be renamed from "My Groups" to "Compactless Unsorted Subset of My Groups".

Now here comes a tricky thing. There is a "View All" button in the bottom of the box. Nice, so will I finally be able to see my groups in a compact way and, if lucky, sort and filter them?

No way. "View all" is a liar link. It lies. You can't view all your groups when clicking it. Through the link you reach a paginated list, where you'll have to keep searching for your groups through Next/Previous buttons. Frustrating.

YahooGroups

Back to the box, I clicked in "Organize".  I'm then taken into a page where I should set the order, by myself, of my groups. Yet another manual action in our so dynamic and everchanging world...

order

But wait! There is a "More Info" link where I can finally know more about the "default sorting order"!

Sorry, it's another liar. It takes you to an extensive FAQ page with dozens of questions. Then I give YG a last chance: I use my web browser to search for the word "order". And then "default". And then "sort". No results. If I don't have time to keep ordering my groups, how am I supposed to read dozens of questions to find about what a default sort order is? And what if the link to the answer is a liar link as well?

Ah, I give up.

[]s
-- AFurtado

Far away from "informaticity"

 

In a previous post, when this blog was still written in portuguese, I've started (actually, tried to start) a series of posts presenting real-world examples of how end-users' life in our IT world... sucks. The point in which I believe is: counter-intuitive user experiences and incoherent IT business processes are some of the major constraints that avoids our society to reach ample "informaticity".

"Informaticity" is a term coined by a former teacher I had during my undergraduation studies. Roughly speaking, it means something as "information/informatics as simple as electricity". For instance, you don't need to set up electricity to use it. You don't even need to ask, in a given place (such as in an airport or hotel), if electricity is available for you to use. It's just there, for you and your grandparents to easily consume it, plug and play fashion.

So, back to my point: I believe we are still really far away from reaching informaticity. I've been studying and dealing with computer science for almost 10 years, but still get stuck with many user experience and IT business processes issues that would make part of the core reasons for grandparents to solely think that technology simply doesn't work.

The example I gave in that previous post was the website of a mobile operator in which you can by credits to actually use your mobile phone. The interface was like this:

ClaroAntes

In red, it is said "select the amount of money to buy new credits to your mobile phone". But if you chose the first option ($5), the credits can be used only to send SMS messages, not to make phone calls! Frustrating experience! Such a constraint is only presented to the user in pages far away from the page above, out of the ordinary credits buying flow. That's really a shame.

After calling the Brazilian National Telecommunications Agency (and the mobile operator countless times), I was able to get the interface changed. The new interface follows below:

ClaroDepois

Now the SMS restriction is displayed at the right time, in the right place (in bold, at the right-hand side: "SMS only"). How could essential information like this be neglected in the past? I don't know.

This post ends here. My goal was to introduce informaticity for those who still didn't know it, give a couter-example and set the field for future "interface pitfalls" posts.

[]s
-- AFurtado

12 dicembre

Game development: learning from practice

 

Which is the most important part of a (digital) game? While you think about this, let me share some insights from an interview [pt-BR] that a brazilian test manager from the XNA Live Server group did to a brazilian magazine:

  • Some success variables in game development: usability tests, alpha and beta versions, deal with alpha testers to gain early feedback.
  • To cancel a project can indeed be the best choice!
  • Tools that automatically provide feedback, in the background, are great to better know the user.

Meanwhile...

  • Dream Build Play 2008 Warm-Up Challenge coming soon, check it here.
  • My Imagine Cup experience and how competitions help to improve professional experiences was the theme of an article in the Estadão, one of the most popular brazilian newspapers:

20071209-Estadao1

20071209-Estadao2

[]s
-- AFurtado

Screen Transition Language on its way

 

"ScreenTransitionLanguage" is one of the domain-specific languages (DSLs) I'm developing to automate XNA game development. I'm planning to design other languages as well, such as to define entity state (ex.: jumping, attacking, etc.) or to declare which game entities should collide with others (and which action is taken).

By using ScreenTransitionLanguage, the game programmer/designer can easily define, in a couple of minutes, the game screen flow. All from within Visual Studio. Sweet!

ScreenTransition

I've added icon decorators to the transitions, so you can easily read the diagram to understand what's going on between each pair of screens. In the Properties Window of a transition, it is possible to change its type through a custom property editor:

PropertiesWindow

One of four transition event types can be chosen: a Xbox 360 controller button is pressed, a given amount of time passes, a menu option is selected in the screen and, finally, a custom method provided by the programmer checks if the transition condition is met. The only one I've not supported yet is the menu option transition... still need to think how it should be properly done.

Finally, by pressing a single button in the solution explorer, a lot of code is automatically generated! I'll end this post by listing the code generated by the diagram in first picture, above (please notice I'm using the FlatRedBall game engine; need to talk about it in future posts). Lots of code automatically generated from very few effort. I like that!

using System;
using System.Collections.Generic;
using System.Text;
using FlatRedBall.Input;
using FlatRedBall;
using Engine;
using Engine.GeneratedCode;

/* Code automaically generated by Sharpludus Arcade2D game factory */
/* Please do not change! Use partial classes.                       */
/* André Furtado, 2007 - www.afurtado.net                           */

public partial class IntroScreen : Arcade2DScreen {

    public IntroScreen(string scnFileName, string contentManageName)
        : base(scnFileName, contentManageName, BackgroundMusic.None) {
    }
    public override void Activity() {
        if (InputManager.Xbox360GamePads[0].ButtonReleased(Xbox360GamePad.Button.DPadUp)) {
            IsActivityFinished = true;
            NextScreen = "MoneyHunt.Screens.InstructionsScreen";
        }
        if (TimeManager.CurrentTime - creationTime > 5) {
            IsActivityFinished = true;
            NextScreen = "MoneyHunt.Screens.CreditsScreen";
        }
        base.Activity();
    }
}
public partial class InstructionsScreen : Arcade2DScreen {

    public InstructionsScreen(string scnFileName, string contentManageName)
        : base(scnFileName, contentManageName, BackgroundMusic.None) {
    }
    public override void Activity() {
        if (InputManager.Xbox360GamePads[0].ButtonReleased(Xbox360GamePad.Button.Back)) {
            IsActivityFinished = true;
            NextScreen = "MoneyHunt.Screens.IntroScreen";
        }
        if (InputManager.Xbox360GamePads[0].ButtonReleased(Xbox360GamePad.Button.Start)) {
            IsActivityFinished = true;
            NextScreen = "MoneyHunt.Screens.MainScreen";
        }
        base.Activity();
    }
}
public partial class CreditsScreen : Arcade2DScreen {

    public CreditsScreen(string scnFileName, string contentManageName)
        : base(scnFileName, contentManageName, BackgroundMusic.None) {
    }
    public override void Activity() {
        if (InputManager.Xbox360GamePads[0].ButtonReleased(Xbox360GamePad.Button.Back)) {
            IsActivityFinished = true;
            NextScreen = "MoneyHunt.Screens.IntroScreen";
        }
        base.Activity();
    }
}
public partial class MainScreen : Arcade2DScreen {

    public MainScreen(string scnFileName, string contentManageName)
        : base(scnFileName, contentManageName, BackgroundMusic.None) {
    }
    public override void Activity() {
        if (AllMoneyCollected()) {
            IsActivityFinished = true;
            NextScreen = "MoneyHunt.Screens.TheEndScreen";
        }
        base.Activity();
    }
}
public partial class TheEndScreen : Arcade2DScreen {

    public TheEndScreen(string scnFileName, string contentManageName)
        : base(scnFileName, contentManageName, BackgroundMusic.None) {
    }
    public override void Activity() {
        if (MyCustomMethod()) {
            IsActivityFinished = true;
            NextScreen = "MoneyHunt.Screens.IntroScreen";
        }
        base.Activity();
    }
}

[]s
-- AFurtado

11 dicembre

TV + Xbox + Media Center + Messenger

 

Xbox 360 is a Windows Media Center Extender, which makes it possible to access Media Center through the console. The last Xbox 360 update now also makes it possible to use MSN messenger from within the console.

Putting everything together, it is now possible to chat with friends while watching TV, everyhting from your Xbox 360! Check this [click here if you can't see the video]:

 

Cool, isn't it?

[]s
-- AFurtado

08 dicembre

First day at Microsoft: experiences from other people

 

temp

My friend Renato Guimarães pointed me to some nice posts (here, here and I found other here) that discuss about how it feels to start working for Microsoft.

Valuable insights from text and comments:

  • "The great part of course is that I’m pretty much in control over my own schedule for the most part, as long as I’m producing results."
  • "One good piece of advice is find a mentor (Either formally or informally). A good mentor is worth their weight in gold."
  • "I’ve been too busy doing and not spending any time pondering. It is really important to have a balance of both."
  • "I know there are some people very dissatisfied at Microsoft, so it’s not all roses and ice cream."
  • "No one has refused to help me when I had a legit question (note legit question).  With that said, I also think there is the mentality of 'I'll tell you once' and it is your job to remember."

Funny insights from text and comments:

  • "When you first join, you're surrounded by really smart people and you slowly start to realize that you don't even know how much of what you don't know"
  • "I’m sure there must be some stupid people around here somewhere. They’re just not in my group as far as I can tell."
  • "Get used to the free starbucks in the drink room, you will be spending a lot of time in there."
  • "The Chocolate Factory is huge, and the Oompa Loompa’s are all geniuses from Ivy League schools who are all staring at me, wondering HTF I got hired."
  • "Every day (on average), 9 Microsoft employees have a baby"
  • "I’m stoked. I’m grateful. I’m scared. I’m ecstatic. Please, keep me honest and never let me forget how this all started."

[]s
-- AFurtado

07 dicembre

Microsoft Tech Ed Brazil - feedback (so far) and DSL Tools resources

 

Today was the second day of Microsoft Tech Ed Brazil, in São Paulo. Tech Ed Brazil is the most important Microsoft event in Brazil and the fourth biggest Tech Ed, in size, of the world.

Yesterday, in the opening day, we had some keynotes and demos. Three things got my attention:

  • Visual Studio (2008) now supports different versions of the .NET framework (2.0, 3.0 and 3.5).
  • The new version of VSTO (VS Tools for Office) provides nice features do create smart documents, such as extending the ribbon.

ribbon

 

  • Office Communications Server provides a very cool convergence among different software and devices (instant messenger client, e-mail, mobile phone, landline phone, etc.)

Today I’ve done a presentation about domain-specific development with the Microsoft DSL Tools to part of the event audience. You can download my slides [pt-BR] and also check a step-by-step tutorial of the demo I’ve presented [pt-BR].

teched

Other presentations I’ve attended today were:

  • New features of Visual Studio 2008 “Orcas”: the Linq part was interesting, while the web features not that much for me, since I’m not regularly using them anymore.
  • VS Team System 2008 Test Edition: nice overview of the new testing features of VSTS, including AJAX support in web tests, reuse of a subset of a web test in other web tests, easy binding of data sources into test input (including XML and CSV files) and tools to better interpret the results of a load test. It is worth noticing also that unit tests now are now part of VS (2008) Professional!
  • Windows Live Platform for Developers: this one was really good. I was impressed about how easy it is to use Windows Live controls and APIs to add search, maps, contacts and other cool features of the Web 2.0 world in your application! Stay tuned to http://dev.live.com/.
  • New features of C# and VB.NET: this was a good presentation, but since I was already in sync with the topics covered there (expression methods, lambda expressions, type inference, etc.), I did not get new insights. But I really have to say that such new features are cool.

This is it. Tomorrow is the last Tech Ed Brazil day and then, back to Recife and "XNA + DSL".

[]s
-- AFurtado

04 dicembre

A tribute from Microsoft Brazil and Pernambuco State to Team Trivent Dreams

 

Tonight was a very special night for us (Team Trivent Dreams, winner of the Imagine Cup Korea 2007 Embedded Development Invitational).

Microsoft Brazil has chosen our hometown, Recife, to settle its headquarters for the North/Northeast regions of Brazil. The office was inaugurated in an event today, where Microsoft Brazil, represented by its president, Michel Levi, together with the Pernambuco State, made us a tribute for our performance in Imagine Cup Korea 2007.

SSL25914

I'd like to thank Microsoft Brazil and the Pernambuco State for recognizing our effort in better representing our country and state around the world! Hope many other students can receive the right investiments and support to also be able to do the same.

[]s
-- AFurtado

What makes a killer game in a game development competition?

 

Q: Andre, in your opinion which game genre has the greatest chances in winning a game development competition?

A: Certainly games targeted at competitions have a different focus than games targeted at the real market. I believe that, in competitions, what really matters is not quite the genre, but the easiness of understanding the <innovative/creative/technically superb/insert other quality here> gameplay you are proposing. Each of the qualities presented in "<>" are certainly important, but the simple and direct way the game delivers the message to the audience (judges) in the competition is even more!

In other words, the judges will not have as much time to understand and play your game as real players would. The timeframe of a competition is much shorter than the one of the real market. Therefore, if you can't make the judges to see the value of your game in the first minutes, goodbye first prize.

For example, the Civilization series are fantastic games, with many rules, wonders, unit types and so on. However, it takes some playing hours (days, actually) to get addicted to the game, to really understand its value and recognize how wonderful it is. Therefore, Civ would be easily beat by a much simpler game in a competition.

Other example is the Space War Mission Commando, the winner of the first Brazilian XNA Challenge. In a couple of minutes, you can explain (and demonstrate) what the game is about: "use speech recognition to give orders to you stellar squad", and that's all.

swmc

However, I have to admit that the replay value of this game is not that good. But here comes a second tip: I'd focus on other priorities rather than on the replay value of my competition-targeted game! If you can address replay value, that's great, and you should enforce this in your presentation/documents. But if you can't, do not worry that much: the game will only be played a few times by the judges (or even only once when you demo it). There is always room to enhance replay value later, by providing a better leval design, for example, if you intend to release the game to the market.

So, are casual games a cool approach towards competitions? Considering that prizes in some competitions, such as the Imagine Cup, include the possibility to publish the game into networks such as Xbox Live Arcade (which welcomes casual games), certainly the approach is worth. However, I don't believe "casual" is a genre. You can have puzzle casual games, action casual games and even strategy casual games (ex.: Sokoban), plus many others. Choose yours and have a nice gaming!

[]s
-- AFurtado

03 dicembre

Brazilian XNA tech-demo: Float Kart Racers

 

In an initiative of our local game development ecosystem in Pernambuco, Brazil, professionals and students created a game prototype (tech-demo), called Float Kart Racers, to test and acquire knowledge in the XNA technology. You can check the result in the video below [click here if you can't see it]:

 

Better than that, the team made available the source code of the game (here). Finally, they provided also a post-mortem document [pt-BR] with the lessons they have learnt throughout the process.

After reading the report, some key points I'd like to highlight are:

  • Due to project constraints, the scope was reduced. The original proposal was downgraded to a tech-demo;
  • The project lasted for 6 months;
  • The team was composed by 11 people: 2 conceptual artists, 4 modelers, 4 programmers and 1 game designer;
  • Maya was used to 3D modeling;
  • Team communication was key to the project;
  • There were some fails in the conceptual design of the game, since time was spent to model characters that were not used in the game and the GUI design was more complex than the necessary;
  • TV cuts 10% to 20% of the game image, therefore GUI info should stay in the safe 80% area;
  • The team implemented their own effects, in spite of using the built-in BasicEffects;
  • The XNA Framework Remote Performance Monitor for Xbox 360 was useful;
  • The team gave up using the 2D Farseer Physics engine (mainly because it was a 3d game);
  • Oriented bounding boxes were used to provide collision detection.

[]s
-- AFurtado

02 dicembre

Back to functional languages... at least for a while?

 

Mauro Sant'anna's last post motivated me to finally watch a video that lasted long in my personal MWL (multimedia waiting list): "Software Composability and the Future of Languages", with Anders Hejlsberg, Herb Sutter, Erik Meijer and Brian Beckman.

Some insights:

  • I agree with Mauro that Anders Hejlsberg is brave in trying to move academic concepts to the real world.
  • "Today, language syntax is a tiny part of the learning process, while APIs are huge", someone said in the video. That's the pure truth. But wait: isn't it natural to have APIs evolving into frameworks, which may evolve into... domain-specific languages? Including (especially) visual ones? So while learning today's APIs we might be learning the foundation of the languages of the future!
  • Not writing the types in a language does not mean that the language is dynamically typed.
  • It is said that software composability is better played by functional languages, rather than imperative.
  • Functional languages would better fit concurrency, since they are composed by expressions, with code as parameters, what makes it easier to split a program in two, as opposing to imperative languages (composed by statements with probably many side effects).
  • Research with functional languages are providing some nice additions to languages such as C#. Generic types and Linq are examples of that.

The last points sound like an alert: should we, as programmers, pay better attention to functional languages? For example, taking a closer look into Haskell, famous for implementing quicksort in two lines?

qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)

That sounded funny to me for a special reason: my first contact with Microsoft tools, as a developer, was when trying to help the porting of the Haskell functional language into Visual Studio .NET.

vhs

Then the next step was to integrate Haskell and Visual Studio with the Assignment Manager tool, providing automation for teachers and students to do their Haskell exercises.

am

Old times! Who knows if functional languages cross our path once more?

[]s
-- AFurtado

Rise Summer School 2007 - quick feedback

 

Would you spend a weekend inside a room, studying software engineering, while a beautiful beach lays outside in a 30 degrees Celsius environment? Especially if you have only a few days left before moving to the windy Redmond (minus something degrees)?

The answer is yes, but not surprisingly. The reason was the first RiSE Summer School (RiSS 2007), a first-class international event where topics such as domain engineering, software factories and product lines were discussed, by both academics and practitioners.

riss

I got many insights to my SharpLudus project, and hope to gradually share them with you. RiSE’s blog (World of Reuse) is providing a coverage on the event, which ended today, therefore I’m not going to replicate information here.

Hope you can attend next year!

[]s
-- AFurtado