Silverlight Multiplayer Pokerroom

  • nederlands
22 02 2008

Finally, after a few weeks of very hard work I’m back.

The last few weeks were about my Silverlight Multiplayer Pokerroom, a technical showcase that tries to show what can be done with Silverlight 1.1/2.0 and Silverlight Multiplayer PokerRoomASP.NET 3.5.

An application, with multiple poker tables. In which users on different computers, on different sides of the world, can play poker and chat with each other.

And when there is no one around to play with you can always add a "bot". (Type /help in the chat for more info).

You do have to create your own account before you can start playing. But because it only requires you to enter a username, password and e-mail address, this should take you no time at all.

It has been tested to work on IE6+7 and Firefox on windows.

Some of the more advanced poker rules are not implemented (sidepots, all-in, etc…),  so expect it to behave strangely when this happens.

It still contains a few bugs, that is why the application is recycled every 120 minutes.

The game should keep you busy for a while and hopefully it will get some people "into the light " ;-).

Design & 2.0

Silverlight Multiplayer PokerRoomI’m in the process of getting a real designer to redesign the pokerroom, and in a few weeks (probably after Mix) the application has to be made compatible with Silverlight 2.0.

More suggestions are always welcome, please use the contact form. I’ll keep you all posted on the progress.

Geek

As a true geek, there are is some technical stuff I would like to highlight:

  • There is a real PokerHand comparer that can compare 11 billion hands per second ;-), totally useless of course, but just as fun.
  • The webservice calls are long running. Meaning that as long as there is no new data, they stay open and sleep. A very simple but effective way to minimize webservice calls. Hopefully I can replace this with a nice WCF solutions in 2.0.
  • The colors in the chatbox, were a hell of a job, but just look nice!.
  • When the server restarts or when the session goes away, the client app will recognize and restart itself.
  • The bot’s taunt you when they win money from you ;-)  (Altough it would be nice in the future if they used more than one taunt)

Links

Have fun playing poker, and see you at Mix!

Robertjan Tuit



Silverlight 1.1/2.0 Alpha Timer

  • nederlands
4 02 2008

In silverlight 1.1/2.0 alpha there are a lot of things that just do not work as us spoiled developers would expect.

One of these things is the fact that a normal Timer event cannot access the UI Thread. Meaning you cannot change any visual things with a normal timer.

There are some fixes around, I added some of them together in a simple class u can use as seen in the following example:

public partial class Page : Canvas
{
    UITimer _Timer;
    public void Page_Loaded(object o, EventArgs e)
    {
        // Create a new UITimer
        _Timer = new UITimer(this); 

        // With a 10 seconds interval
        _Timer.Duration = new TimeSpan(0, 0, 10); 

        // And call this delegate every 10 seconds
        _Timer.TimerEvent += new EventHandler(_Timer_TimerEvent);
    } 

    void _Timer_TimerEvent(object sender, EventArgs e)
    {
        // Do something in the UI
        // Fore example: Set the opacity of the page
        Opacity = 0.5;
    }
}

The class itself looks like this:

using System.Windows;
using System;
using System.Windows.Media.Animation; 

public class UITimer
{
    static int TimerCount = 0; 

    private bool _Active = false;
    public bool Active
    {
        get
        {
            return _Active;
        }
        set
        {
            if (_Active != value)
            {
                _Active = value;
                if (_Active)
                {
                    timer.Duration = _Duration;
                    timer.Begin();
                }
                else
                    timer.Stop();
            }
        }
    } 

    private Duration _Duration;
    public Duration Duration
    {
        get { return _Duration; }
        set
        {
            _Duration = value;
            timer.Duration = _Duration;
        }
    } 

    public event EventHandler TimerEvent;
    Storyboard timer; 

    public UITimer(FrameworkElement rootElement)
    {
        timer = (Storyboard)XamlReader.Load(String.Format(“<Storyboard xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” x:Name=”UITimer_{0}” Duration=”00:00:00″ />”,UITimer.TimerCount));
        timer.Completed += new EventHandler(timer_Completed);
        rootElement.Resources.Add(timer);
        UITimer.TimerCount++;
    } 

    void timer_Completed(object sender, EventArgs e)
    {
        if (TimerEvent != null)
            TimerEvent(this, EventArgs.Empty);
    }
}

Source Code :  UITimer.zip

Light it up!

Robertjan Tuit



Mix08

  • nederlands
1 02 2008

It has been some time ago that I have seen the inside of Windows Live Writer. I have been terribly busy with a project for the Silverlight Challenge en currently still am. This is why I haven’t blogged as much is I usually do. Also the previously promised report about the Envision-Event trip will have to wait.

Why this blog post then, U ask? I would like to share with you the joy of having registered for the Mix08 in Vegas. An event you should not miss this year.

With the release of  Silverlight 2.0 (beta) and subjects as IE8, ASP.NET MVC, IIS7, WPF 3.5, Dynamic Data Controls and.NET 3.5, I’m very much looking forward to it.

And the fact that it is in Las Vegas is not bad either. I haven’t settled yet on the flying schedule, and the hotel.

Who else is going? and if you are, how did you arrange your flight schedule and your hotel, any tips that can help me? The Venetian is a bit to pricey for my taste.

Going to dive back into my Silverlight 1.1 Alpha project. The longer I work with it the more I’m looking forward to the 2.0 beta release.

Hope to see you in Vegas!

Robertjan Tuit



Silverlight 1.1 en ASP.NET WebService

18 12 2007

Al een paar weken ben ik in de avond uurtjes een applicatie aan het maken die  gebruik maakt van silverlight 1.1 alpha , asp.net, webservices en Linq2Sql. Daarbij ben ik een paar heikele puntjes tegengekomen die ik met jullie wil delen. Ze zullen zeer waarschijnlijk allemaal opgelost zijn in de komende 2.0 beta. Maar als je, zoals ik, voor die tijd ermee aan de slag wilt dan kan je de volgende zaken tegenkomen:

A circular reference was detected while serializing an object of typeDbMl properties

Als je een linq2sql object model maakt dan zitten daar naar alle waarschijnlijkheid circular references in. Hier kan de serialization van de webservice niet mee omgaan.

Dit kan je, als je WCF gebruikt, oplossen door Serialization  Mode van de DataContext op UniDirectional te zetten.

Als je zoals ik gebruik maakt van een “ouderwetse” webservice, omdat ik WCF, Silverlight 1.1 alpha en de silverlight proxy generator van Visual Studio 2008 maar niet goed aan de praat krijg. Dan kun je dat op 1 manieren oplossen.

Een simpele oplossing is om de association weg te halen, maar dit is in veel gevallen niet wenselijk.

Je kan ook een van de 2 referenties op “internal” zetten in plaats van “public”. Deze Access property is er voor de Child property en Parent Property van de Association. Vaak is de child property niet nodig in je model. Let alleen wel op, deze is dus nu ook niet meer beschikbaar in Linq Queries.

JSON_cannotconvertobjecttotype

In eerste instantie gebeurde er gewoon helemaal niets, ik probeerde een webservice aan te roepen en toen hield hij er gewoon mee op. Na wat verdere inspectie kwam ik bij de fout JSON_cannotconvertobjecttotype.

Na wat zoekwerk op google,  bleek deze fout te ontstaat als je een Guid binnen een class hebt. De fout zit ergens in de alpha code van Silverlight. En dan heb je dus een probleem want de Guid is gegenereerde code uit je database.

Je kan je datamodel aanpassen en gaan werken met incremental id’s. Maar wil je gebruik maken van de aspnet_user tabel (standaard in asp.net 2.0) dan zul je toch echt iets moeten gaan doen met de Guid.

Een andere oplossing is om zelf objects (dto’s) te maken met Guid als string en deze objecten te vullen met de gegevens van de Linq objects. Dit voelde alleen als een heleboel dubbel en repetitief handmatig werk en als echte ontwikkelaar heb ik daar een hekel aan (grijns).

De oplossing die ik uiteindelijk gekozen heb is om via een SearchAndReplace command-line utility in de gegenereerde proxy class alle System.Guid te vervangen door System.String na elke successvolle build.

Hierdoor word de Guid in silverlight dus een string, waar ik mee kan leven. De SearchAndReplace utility is eigen fabricaat dus als iemand interesse heeft kan ik de source op mijn blog plaatsen.

Update 18 Dec 2007 16:08: Dezelfde fout treed op met System.Nullable<> types.

Robertjan Tuit



ASP.NET 3.5 Extensions

10 12 2007

Het lange wachten is over, we kunnen eindelijk aan de slag met het MVC Framework. Gebundeld met de onderdelen die tot nu toe in de asp.net futures release zaten heeft het asp.net team vandaag een preview van MVC framework uitgebracht in de ASP.NET 3.5 Extensions. Je kunt ze “gewoon” naast de huidige assemblies blijven draaien, dus ASP.NET MVC Object Viewerinstalleren en spelen maar!

De extensions download bevat:

Je krijgt er dus gratis en voor niets ook nog is het Entity Framework bij, ik kan niet wachten tot ik er vanavond lekker mee kan gaan spelen!

Direct downloaden :

En nog een klein overzichtje van wat informatieve blog posts, walktroughs en screencasts:

Veel plezier!

Robertjan Tuit

Bronnen: ScottGu, Nikhilk & Phil HAACKED.



Volta, Web Development 2.0

7 12 2007

Inderdaad: Web Development 2.0 en niet Web 2.0.

Ik ben echt ontzettend enthousiast over wat er vandaag uit de Microsoft Labs is geslopen, dus neem alsjeblieft de tijd om deze lange post door te lezen. Ik ga proberen uit te leggen wat Volta nu precies is, om daarmee ook volta_thumbnail aan te geven waarom ik het zo geweldig vind.

Voor de mensen die mijn blog al wat langer lezen, Volta is Script# in het kwadraat. Volta werkt alleen niet met source code maar met MSIL (Intermediate language). Deze MSIL kan hij dan weer converteren (hercompileren) naar javascript dat draait in elke willekeurige browser en elk willekeurig platform (in deze ctp alleen nog IE en FF). Het genereren van cross browser javascript kan je vele uren ontwikkel en debug tijd schelen.

Je kan dus “gewoon” C# (en o.a ook VB, Python en Ruby) code schijven tegen je html pagina aan. Dus als je in html een element met id=”Text1″ hebt, dan kun je in C#  Text1.InnerHtml = “Nieuwe tekst”; intikken, waarbij het bij het hercompileren door Volta, vertaald zal worden naar javascript en uitgevoerd in de browser.

Tot aan hier, nog niets nieuws. Want dit konden we al met Script#. Hoewel deze implementatie je wel behoorlijk veel meer vrijheid geeft. De echte kracht van Volta zit hem wat mij betreft in het feit dat je binnen een project zowel server als client code kan schrijven.

image001

Deze laag splitsende technologie (zie ook plaatje hierboven) werkt door middel van attributen (o.a. [RunAtOrigin]) die bepaalde classes op de server en andere classes op de client laten draaien. Deze classes kunnen dan, zonder dat je daar zelf code voor hoeft te schrijven, elkaar aanroepen alsof ze zich op dezelfde laag bevinden. Volta genereert alle code die nodig is voor de communicatie tussen de browser en de server.

Daarbovenop levert volta een wijde reach van tools en functionaliteit (o.a. controls en javascript interop). Daarme tilt Volta het ontwikkelen van webapplicaties naar een nieuw niveau.

Wel moet op dit moment worden aangetekend dat het wel te maken hebben met een CTP preview release waarvan de functionaliteit nog lang niet vast staat en de code nog lang niet productie klaar is, maar een kijkje in de keuken van de toekomst is natuurlijk nooit verkeerd.

Dus als je net zoals ik gegrepen bent door het Volta Virus, kun je de volgende links volgen om meer informatie te krijgen en er zelf mee aan de slag te gaan en ik hoor net dat Christiaan van Bergen na het weekend met een paar mooie code voorbeelden komt om je verder te helpen.

Robertjan Tuit

p.s. Waar zouden ze toch dat logo vandaan hebben ?



Released : Visual Studio 2008, .NET 3.5 & Ajax Control Tookit

20 11 2007

Ik in ieder geval, en ik denk een aardig aantal mensen met mij, zit al een tijdje op dit nieuws te wachten. En vandaag is het zover , de RTM van Visual Studio 2008, Team Foundation Server 2008 en .NET 3.5.

Te downloaden via :

Let wel op: de Silverlight 1.1 Alpha en Web Deployment Add-Ins werken NOG NIET met deze release, deze hopen ze de komende weken beschikbaar te maken.

Een korte feature list van VS2008 :

VS2008 is ontwikkeld met TFS. Channel 9 heeft een video met Somasager over dit onderwerp : Channel9 VS 2008 Built with TFS Talk 

Daarnaast heeft het Ajax Control Tookit team besloten om hun nieuwe release ook samen te laten hangen met de Visual Studio 2008 Release. Die kun je hier vinden : Nieuwe Ajax Control Tookit Release (11119 release)

Bron : De enige echte Scott Guthry natuurlijk, en Somasegar voor de TFS video.

Robertjan Tuit



Microsoft ASP.NET MVC Framework

15 11 2007

MVC, of Model-View-Controller, word al sinds Small-Talk (1979) gebruikt om een applicatie op te splitsen in 3 delen met allemaal hun eigen verantwoordelijkheden (seperation of concerns). Deze opdeling heeft een aantal belangrijke voordelen, zoals een scheiding van model en user  interface, die het weer mogelijk maakt om tegen een gedeelte van de UI unit testen te schrijven. Een van de bekendste en succesvolste van alle MVC implementaties is Ruby on Rails.

Zoals altijd heeft Microsoft goed om zich heen gekeken, en ook het succes gezien van Ruby. Gecombineerd met een community die zelf aan de slag is gegaan in het Castle Project : MonoRail project, heeft dit Microsoft doen besluiten om zelf met een MVC Framework te gaan komen.

De eerste dingen die ik zo gezien heb van het MVC Framework zijn veelbelovend, als vervent unit-tester en een interface is het hele MVC concept zeker is iets wat ik met asp.net wil gaan gebruiken.

Zoals altijd praten we natuurlijk wel weer over een product waarvan de eerste CTP nog moet komen, maar ScottGu, Brad Abrams en MVC product manager Phil Haack hebben al in een paar mooie blog posts laten zien wat ons straks te wachten staan in de System.Web.Mvc namespace.

ScottGu :

Brad Abrams:

Phil Haacked :

Fredrik Normen (added 19 november)

Ik hoop binnenkort meer te kunnen vertellen over eigen ervaring met het framework, maar dan moeten ze wel snel die eerste CTP uitbrengen.

Robertjan Tuit



Gratis ASP.NET Ajax Rich Text Editor Control

12 11 2007

iets wat in zo’n beetje elke website wel terugkomt is richt text editng. Tot nu toe moest je er of zelf een schrijven of er een kopen. Nu hoeft dat niet meer!

Kannan Sundarajan heeft een hele aardige gemaakt en deelt hem met ons op codeplex zodat we hem kunnen hergebruiken.

Ik heb hem al even in wat voorbeelden gehangen die ik hier had liggen en het lijkt allemaal heel goed te werken, bedankt Kirti!

Demo : live demo site!
CodePlex: http://www.codeplex.com/rte/
Blog : Kirti’s blog

Robertjan Tuit



Video.Show Silverlight Sample

10 11 2007

Microsoft is druk bezig om met voorbeelden te laten zien wat er allemaal mogelijk is met silverlight. In samenwerking met Vertigo Software hebben ze het WPF voorbeeld omgezet naar Silverlight.

Het voorbeeld bevat naast Silverlight ook Linq, Framework 3.5, ASP.NET Ajax, Expression encoder en Silverlight Streaming.

Binnenkort zal het ook worden toegevoegd aan het Software + Services Blueprints initiatief, aangekondig op de TechEd in Barcelona.

Download hier Video.Show van CodePlex

Robertjan Tuit