Welcome to RioterDeckers' HeadQuarter Sign in | Join | Help

M Y P A C K

French 1st Empire armies were the first troops who walked with an individual pack. Napoleon composed it personally and this stuff count a bit into its military supremacy.

 

 

 

 

Following is the stuff that composes my Consultant Pack.

 Do you know what is common in between the Didier Drogba new orange baskets and the Tablet PC of the picture?

 

A professional footballer is free to select the shoes he plays with. As an IT professional I feel free to select the computer I always work with.

 

I started to implement GTD last June, and David Allen principles are at the core of my decision to select the right tool to improve my personal productivity.

 The reasons why I selected a Tablet PC are:

1.       I elected OneNote2007 as the only collection bucket  

2.       Since nearly 1 year I haven’t really developed, but sometime I am working on proofs of concept.

Following are the beast characteristics:

Asus R1E

 

Processor duo core 2,4 Ghz

Ram 2Go

Disk drive 160 Go / 5400 with

 

C:

Vista OS

(60Go)

Operating system

D:

Data

(60Go)

Default data place

E:

Pro_Studio

(4Go)

Professionals’ developments

F:

RD_Studio

(4Go)

RioterDeckers’ developments

Z:

DMZ

(32Go)

Download zone and share

 

 

Autonomy (nearly 5 hours with the battery saving mode)

Vista Business SP1

Visual Studio 2008

Virtual PC

Office2007 full

7zip

DaemonTools

FileZilla

Free Download Manager

Nero 7

Win Merge

MozyHome

Acronis home edition

Firework 8.0

iTunes

Avast antivirus

 

Beside the computer I gathered many useful things in a well arranged blue back bag:

 Apart from the transportable stuff I have three more very important items I always have on long running mission:

 

My Akira poster

 

My daily siesta mattress (20 sacred minutes)

 

My thermos mug brought back from the PDC2005

 

·         One 80 Go Maxtor removal storage composed of 2 partitions. One dedicated to MSDN software the other for VHD images.

·         One 4 Go Corsair USB drive full of minors things that need to be carry out from right to left.

·         A Bluetooth Asus 3 buttons mouse

·         A good Sennheiser retractable audio cask

·         A digicode Kensigton

·         A trouser full of connection cables + 2 emergency batteries

·         A 1 meter RJ45

·         A trouser with 3 pens, a knive, a fork and a spoon

·         Planning tools: 2 pack of planning poker cards and of course my red RPG dice set

·         One Ipod Nano (while working in an open space or simply to relax)

·         Speed one minute cards game (quick and stress away)

·         And my Petzl headlamp (not on the picture)

 

This is all I need to be fully operational.

posted by WoZoI | 2 Comments

UsWare & UsGame

First I want to give my respect to «Saint Gygax» who died two days ago. While he was a war gamer he imagined the way to be able to simulate small squad skirmishes. He just created Role Playing Game.

Did I already said that I am a big fan of Jeff Atwood’s blog ? So, I am. Each time my outlook rss reader indicates that he has committed a new post, I arrange my time to get a short while at pace to delight myself of his opinion.

The last three posts that ignited my brain were:

Database versionning  - on top of my todo list

Backup strategy  - We are supporters of Acronis and I am using Mozy

Browser Shortcut - simple

With this recent post UsWare vs. ThemWare I realized that Massai is a UsWare while D&D was a UsGame (Gary was passionate and he settle the foundation of a new activity).

 I started to imagine the Massai features just because I was a role player involved in my passion. Then once I was convinced that all the features could really become a product I started to try to build the product. Some years later I became a Software engineer just because the project require me to dig in the tech. Today we started the fund raising campaign to promote the UsWare I imagined and which change already my life.

Weird, isn’it.

Massai on facebook. Join the group to sponsor us.

posted by WoZoI | 0 Comments

What did I do since the last post?

N3RD 2007

My last post was the announcement of the conference we organized for Microsoft as netfxfactory.org   authors.  We worked hard for 45 nights to deliver a complete implementation of an alerts management system use case. The team members were physically separated and we never met each other before the conference day. I started by interviewing 4 firemen of the Lougnon fire station (Toulouse )then Rask and Thor design the architecture solution while Chaz initialized its brand new immersive user interface then the whole RD team plus Xavier Vanneste, Jean Marc Prieur and Alain Metge develop the code require to fulfill the 5 sessions goals .

Microsoft gave us a wild card that we used to infused our way to work in the conference branding:

·         We decided of the conference name .Net Enterprise Realization Day. (3 words tricks)

·         We asked Didier Balicevic to illustrate an enterprise information system as a toony town.(N3RD 2007 poster)

·         We deliver an 8 pages brochure to help attendees understand the session purpose. (download the brochure Fr)

I presented the first session and it was a very impressive experience. After my three first words I have been possessed by the stage fright and I endured it until the second half of the show. Except that, I had really appreciate being on the stage.

Webcasts of each session are available for French people.

Single after 6 years of life in SO

June -  I ended my relation with Cerize. I realized that since our first encounter I have changed so deeply but also that our goals were not as melded as before. She was the first and the only girl I can say I have been in love. I thank her for her help to handle my Mr Hide. So in order to not forget what am I, I branded myself (september) with a new tattoo around the right ankle. Piero did the job.

Free summer lessons for involved people

While working for a customer I noticed that one of its «Chef de projet» [the bad side of the program manager] was able to deal with projects and team without a piece of understanding of what the customer requirements could be. No need to say that its developers’ team went often in trouble. So I decided to launch free modeling and specification courses.

 The sessions took place at lunch time for an hour and half and a complete course length five days and it was based on a mixed approach which combines MSF and UML2 modeling.

Schedule

Monday: Vision scope and customer validation based on a use case approach.

Tuesday: Domain diagram. Why it is important to understand and structure conceptual objects in order to specify comprehensive requirements.

Wednesday: Dynamic representation of Use case with system sequence diagram and textual description of use case. The UCTD is the deal, because it’s a clear and non technical written explanation of what is the feature is supposed to do. And this is the document that finally your customer must «sign» before you start to develop a feature.

Thursday: Dynamic representation of objects with the State machine diagram. I love this diagram because it helps really people to understand why things are not as simple as they seems.

Friday: In bed with Pat. Of course, I am still a fan of Helland and I  spread his precepts. I did a simplified lesson about the Data Typologies. Understanding it, helps people to bridge the first gap toward service design.

 Materials: I pinned some UML shapes around the white board and I used a sharepoint site to gather questions and post my cool links:

The theory by sparx system

The Thesaurus*

What to draw according your message (a must have in favori)

 

I made the course for 6 weeks, I had 24 different attendees (ranged from developers, to buying assistants) and 18 attended to the complete course but the one I tried to trap never came.

My key messages were:

·         Focus on business value.

·         Word document will ever cost less that code.

·         Never start without a customer agreement.

*to discuss and find an agreement you need to express clearly your opinion so using this dictionary help you to find the right word that you and your customer will understand the same way.

The Massai project

We are still working on creating our own software company dedicated to change the rpg distribution model.

17 october 2007 Sofware Academy : We attended conferences dedicated to «entrepreneurs» who are at the first stage of their project. 2 speakers were really impressive:

·         Francis lorentz - Lorentz Deschamps et associés Venture Capitalist

·         Michel Safars - Inria Transfert Coach

26 november Conference call with Peter Adkison. We send the Massai presentation to him and after three mails we had a phone appointment for 55 minutes. He is as passionate as he is supposed to be. He had read the whole document we send to him because the only 4 questions he asked prove it. Early January 2008 he gave us a formal blessing. He is currently involved in his own world project, a collectible card game : bella sara for whom he raised 15 millions dollars.

Massai on facebook don‘t hesitate to joins the group to sponsor us.

Back to tree

I recently read The Evolution Man from Roy Lewis, I rarely laugh as this while reading but this short book is now one of my preferred.(top ten)

This year 2008 I decided to go back to the tree and to manage me more old school activities such a tabletop RPG, game boards sessions …

On 17 january 2008 we had a contest of SpaceHulk  (first edition)

On 23 february 2008 I mastered a Call of Cthulhu scenario Wail of the witch

On the road again

I am currently ending the project I joined 16 months ago. I will soon post my Curriculum on monster (Ireland, Switzerland and France) I am looking for a project / team which need help in industrializing software development. I am good at infusing energy to the team members.

Want to hire me? download my CV, then send me an email.

posted by WoZoI | 1 Comments

Tinkering at N3RD

Naturly every RioterDecker are whole nerds, but that's not the purpose today.

Microsoft France ask us to organize .Net Entreprise Realization Day, a full day conference where we will share our development methodology about the framework 3.0 technologies. I will animate the first session about the realization context and we will discuss about the architecture, the Command Center use case that we will deliver at the end of the day.

the inscription page here (french)

the netfxfactory.org presentation (french)

and soon available, the conference background N3RD2007 by Didier Balicevic that show up an Information System drawn as an agitated town.

posted by WoZoI | 0 Comments

Beautiful fresh Guids for sale!

At least two years ago Raskal came back from a long and tiring meeting with a large smile on his face. The meeting purpose was about  helping the Release Management Team to build and deploy its first .Net app. He was already prepared to meet the amateurism but nothing could have prepared him from what happen these day.
When he realized that the team members won't really agree to do all their job and will relly on us to cope their lacks he jeopardized. Facing the team leader straight he asks:
Rask: We already spoke longly of the process, but do you already have enought GUIDs?
the other : What ?
Rask: What, What??? Don't you have already order at least 10 000 Global Unique Identifier? how will you mark our business entities ?
the other: Global Identifier ? you never spoke of it before?
Rask: Of course , was sure facing such pro... So it means that you don't! Whoooa, we gonna be very late. No need to continue, if you didn't order them. Don't you look at the quotation on Boursorama? Come back to us when you get them. I will send you back two or three certified  web sites to furnish you. Don't try to buy second hand Guids, we have enough problems.

He waited three full days before caming back to them and this story became one of our best professionnal joke.


So Tonight, I am proud to introduce you to the brand new GuidMarket. the only market place where you will be able to buy 4 certified different qualities of Guids. So don't wait anymore and go purchase them. Hurry up the stock is limited.
Enjoy the challenge I submitted to Chaz last week and don't miss his technical review of the everywhere portage.

Guid.NewGuid() for all
 
I also thank my friend Greg for his text translation.:o)

posted by WoZoI | 1 Comments

In bed with Pat Helland

Sometime you read bright opinion that helps you improve your own view and level up your perception. On rarer situation those opinion are so powerful that they change forever your own referential. When this happens and you realized that the impressive opinion was expressed four years ago and it didn’t aged: you fall in love! Here is my love story with pat Helland former senior software architect.

Resources

The article that ignite my brain is still on the MSDN : Data on the Outside vs. Data on the Inside

I also read the resources left on www.pathelland.com

What really capture my attention is the data typology introduced by this article, I will sum up the concept I co ncentrate on, then I will show you how the RioterDeckers employ a small trick to mark reference data and finally I will share my view on a tool aiming designing business entities according to the data typology and compliant with the SOA principles.

Data typology

Reference Data

Within service’s architecture it is about information that is published across services boundaries, for each set of reference data there is one service that creates it, publishes it, and periodically sends it to others. It is identified as the Data owner.

This kind of data shares specific abilities:

· Immutable: Once written they cannot be changed.

· Identified: with one ID you retrieve the same piece of data whenever and wherever.

· Stable: the piece of data cannot be ambiguous.

Ex: Product Identifier

Resource Data

This kind of data is used by services to complete their goal. They used to survive a service lifetime and therefore can be processed by various services (as far as you master the field life cycle). Each time a field can shift due to process execution consider it as a resource.

Ex: Stock value

Activity Data

This kind of data lives only in the scope of a service. Some can be persisted in order to reproduce the context of a service, but even those data got means only for its owner purpose. No other process will be able to work with.

Ex: Basket Orderline

Other considerations

Validity

A data scope can sometimes be established among time or space. Expiration defines the validity within a period whereas localization describes it for an area.

A data that got validity must be considered as a reference data and it must have the three intrinsic characteristics. (Immutable, identified and stable)

Versioning

Most of the reference data are not ever ending. They required some revision over the time. Updates must be periodic and they must be easily available to each service that subscribes to them. Versioning is a strategy that can be used to manage reference data over time. It helps to maintain an up to date referential. It’s crucial to be aware which piece of data is currently exploited by others. This information can be mastered by a clear versioning schema.

Retirement

Business entities got lifecycle so piece of data have also their own lifecycle. Within real life it’s very rare that lifetime ended with a concrete destruction most of the time data retires in history’s tables for reporting and metrics purpose.

One common behavior among retired data is that they must be treated as immutable and so, must be presented as read only.

Each type of data can retired but under different conditions, let’s sum up them:

· if retirement* is not required for BI or activity monitoring.

As retired data are getting older they become less and less frequently accessed and you can consider archiving them elsewhere in the information system.

A static diagram look like this :

 

And with the help of the typology you can identify within the entity life cycle some piece of data that we call data fragments:

 

Object Identifier: OID

While you design business entities you realize that most of them got an identifier and a name that quickly become immutable. I remember many discussions about database technical identifier and the opportunity or not to model them upon the data contract. More fights later, and thanks to the patience of AvalonBoy, I finally understand that each entity must have its own identifier whether it is used by the business or not, this id must be part of the contract, it’s not just a matter of techies. Nothing that resides within a database can be anonym and therefore Id is the cool way to offer them a “name” for accessibility purpose.

Two years ago, AvalonBoy introduced to us a geeky mean to mark identifier and to take advantage of the trick while using distributed data structure. This trick is called OID for object identifier.

We always use GUID as primary key within our databases as a table design best practice. OID is a GUID whose third octet has been typed. Each entity that needs to be marked got its own marker. The marker is a unique value defined among a domain range we call boundaries. This trick let us define 4^16 ObjectTypes possible definitions and we can ask to the identifier what ObjectType it is just like that:

OID.GetTypeId(__oidRelief) // Where __oidRelief is a Guid [OID of course!]

OID code source: download here the RD_OID_Demo(17ko)

Some of you are currently thinking, dude they broke the Guid algorithm, isn’t? Yes it is, but tests have shown that within a ten millions of OID generation everyone get unique. But keep in mind that this trick is for technical purpose. 

Data fragment editor

Let’s speak about software engineering and development process. You have seen how ORL is treating the Object/Relational mapping and how it his embedded within the code production process. Now I know the data typology, I want a tool that will help software’s architects and business analysts to model their business domain and improve their ability to master the business entities and their data fragment.

Mini glossary

Business Entities: this is the large concept used by workers to achieve a piece of their job. Each business got his major and minor entities. (Product, Account, Bundle…)

Data Structure: this is the full representation of a business entity without consideration of the entity’s lifecycle. Technically a data structure will be different from the objects modeled by developers but also different from the database design.

Data fragment: must be considered as a view on the entity data structure. Each data fragment must have an identified service owner charged to create, publish, and periodically send the data fragment to other services. The owner is the only one able to mutate the content of the data structure and can publish to subscriber a read only version of it. 5subscribers consider it as a referential data)

Service Owner: the service in charge of a dedicated data fragment.

Goals

Design domain model using UML static diagram concept to identify entities’ relations and package segmentation.

Describes how a business entity can be divided among the different data fragment that compose its life cycle.

Employ the data typology to mark each data fragment field in order to specialize the behavior of the contract produced to correspond to the data fragment definition.

Animate the state machine to visualize the changes in between each data fragment. The sequence of data fragment, illustrates the business entity lifecycle.

Generate the XML map definition for each data fragment in order to be able to map them to the relational model by using ORL features.

Consequence of the typology

Each Data fragment is a contract with one unique service owner able to modify fields marked as Resource or Activity.

Reference data must be implemented as read only property

Reference data don’t need to fit business rules anymore

A resource data can become a reference data in a newest data fragment. (The next step of the business entity lifecycle)

Only the service owner of a data fragment can update the resource data described in the fragment. Other services get notified once the data have been updated, and they will work on a read only version of the data fragment that they will cache.

An activity data can never become of another two types(Reference or Resource) . They are internal member who never appear on subscribers version, thus it can only be persisted in History table for workflow re hydratation purpose.


*:Pat Helland say “Rarely it’s deleted”

posted by WoZoI | 1 Comments

Chaz : the waterfall's old man

The challenge is finally over and our kun-fu wasn't brutal enough to become a codemaster.

Chaz worked hard on the Massai Mockup as you could have noticed here and that's why I entitle him: the old man of the waterfall.

In the next few month to come he will write down his experience about building industrialized application with WPF (you can have an overview in the video that illustrates how to develop a complete layout from scratch  for Massaï), how his MDI framework run to fit the requirements of having multiple "behavioured" windows and, maybe,  will you learn some of his secret battle skills.

I have to confess that yesterday evening I was a little bit disappointed when I discovered we weren't in the final four. My first action was to search for information about their creations but so far I can't find any info about them.

So win a FREE GUID by posting comments with url about the winners' application (purpose, screenshot, business problem solved…).

Let me know what is cooler than role playing game.

posted by WoZoI | 0 Comments

ORLMovie post production

As many of my best friends I enjoy discovering our holidays' movies once Cerise - my wife- as finished to edit them. Cutting and pasting movies is one of her hobbies and this time she practiced it for ORLinker technical presentation. The movie you will soon discover on the AvalonBoy's blog is the resulting job.

Here is the sum up of what you need to do to have this kind of movie:

1 storyboard

Raskal and I previously described each plan within a text document.

2 Video rushes

according the previous document we filmed each sections by using Camtasia Studio.

TIPS: use a smaller resolution than your working one, you will avoid lots of problems...

3 Audio rushes

Speaking English is not really a problem but being recorded while become a really one. A friend of mine remind me of the amazing job done by the acapela-group so we decided to use synthetic Ryan to vocalize the explanations. Isn't it amazing?

4 Icons and static's pictures

Use a basic picture designer to compose static pictures.

5 Film editing

Cerise use Adobe Premiere Pro a very elaborated but difficult movie studio. I am unable to explain how she realized all the effects I had described within the storyboard but she did them all.

So if you want to make such a movie find someone who is fluent with Premiere Pro.

6 Film publishing

Finally to broadcast the result we just compress the avi file into a .wmv. We tried many swf or flv export but the resolution of the rush was too bad to allow this kind of feature.

 

Behind the scene: we did all this job because of one cool man I met last year at the PDC05 : Vivek. After seeing the previous movie he just said me "I don't understand I can't hear the sound?", there was none!

So this new movie got sound!

Musics: If you are interested in what we used :

Thievery Corporation

Air Batacuda

Illumination

La phaze

Nouveau défi

Ethnopaire (not in this movie but I daily work with, so buy it. Yes you are right, this is an advert!)

One more time special thanks to my sweet Cerise.

Appologize: I realize I have made a mistake in writing the english term Developer with 2 p. I beg your pardon for this loosely error...

posted by WoZoI | 0 Comments

today i am a DBA, at least a wanabee...

As an autodidact I used to work nearly on every project phases. I still prefere project management and business analysis but as I am currently a developper I enjoy playing with code. Nowaday I am currently working on my new secret project whose code name is HPC. The solution is a basic asp.net 2.0 website.

I was working on Membership and Roles following  Scott Guthrie  and Scott Mitchell recommandations and I implemented the Membership and Roles site management by using the provided SqlProvider.

HPC got his own database, so I am playing being a database administrator. I had to mix my own db schema with the one generated by aspnet_regsql.exe (simplistic : just follow the wizard!). My website will have by default 2 basics roles and one admin user.The big thing I want to introduce today is   Team Edition for Database professional. I am not a database professional of course but this tool is really amazing. I used it to create 2 scripts :

  • First the combined databases using a simple build project
  • Second a diff gram of the default data using the Data comparison feature.

Conclusion I have only two scripts to execute to ready the settings of my systems. Easy and cool this tool will also help you to populate a DB with test data.

TIPS: if you use SQL server instead of the Express edition,  once you have installed TeamDataCTP4.exe, go in Visual Studio to Tools | Options | Database Tools | Data Connections |  and blank the Sql Server Instance name then click ok AND LEAVE Visual Studio in order to take the change in account. 

posted by WoZoI | 0 Comments

How I analyzed a poker hand straight drawing opportunity

It has been a long time I haven’t post something. I spent much of my time in helping Chaz to specify the Massai mockup requirements and also  by helping AvalonBoy to prepare the coming soon ORLinker's next video entitled : ORLinker within a collaborative development environment.

Some weeks earlier I discovered Texas Holdem and as many French people I was plagued by the poker mania. I was really astonished to face a game that requires so many different skills to become a good player. So to train me, I decided (of course) to build my own poker-library. For now I have just realized a Texas Holdem's HandExplorer that is able to figure out the best hand combination and draw possibilities of a player's hand combined with a board.

During this little campaign I had to cope the Drawing possibilities problem and this is what I want to discuss with you.

My problem : You got five cards and you want to know what kind of straight drawing opportunities this hand got. Is there a gutshot draw, an overended draw, or none?

Here is my solution :
private static HandCombination StraightDrawCombination(List<Card> sortedHand)
{
  HandCombination __combination = new HandCombination();
  Card __lastCard = sortedHand[0];
  List<PointDashCards> __pdc = new List<PointDashCards>();
  List<Card> __tempStraight = new List<Card>();

     for (int i = 1; i < sortedHand.Count; i++)
     {
         int __gap = __lastCard.Force - sortedHand[i].Force;
         if (__gap == 1)
         {
            __tempStraight.Add(__lastCard);
            if (i == sortedHand.Count - 1)
            {
               __tempStraight.Add(sortedHand[i]);
               __pdc.Add(
new PointDashCards(__tempStraight, 0));
            }
         }
         else
         {
            __tempStraight.Add(__lastCard);
            __pdc.Add(
new PointDashCards(__tempStraight, __gap));
            __tempStraight.Clear();
            if (i == sortedHand.Count - 1)
            {
               __tempStraight.Add(sortedHand[i]);
               __pdc.Add(
new PointDashCards(__tempStraight, 0));
            }
         }
         __lastCard = sortedHand[i];

      }
      //No straight draw opportunity
      if (__pdc.Count == 1 || __pdc.Count > 3)
      {
         __combination.DrawFlag = DrawFlag.None; 
      }
      else if (__pdc.Count == 3)
      {
         /******************************/
         /*            - = a card                           */
         /*             . = a gap                            */
         /*             x = a card whereever     */
         /*             0 = no possible card      */
         /******************************/

         if (__pdc[0].GapSize == 2 && __pdc[1].SerieSize == 3 && __pdc[1].GapSize == 2) // -.---.-
         {
            __combination.DrawFlag = __combination.DrawFlag | DrawFlag.OpenEndedDraw;
            __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[1].UpperCard.Force + 1, 4));
            __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[1].LowerCard.Force - 1, 4));
         }
         else if (__pdc[0].GapSize > 2 && __pdc[1].SerieSize == 3 && __pdc[1].GapSize == 2) // -..---.-
         
{
            __combination.DrawFlag = __combination.DrawFlag | DrawFlag.GutShotDraw;
            __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[1].LowerCard.Force - 1, 4));
         }
         else if (__pdc[0].GapSize == 2 && __pdc[1].SerieSize == 3 && __pdc[1].GapSize > 2) // -.---..-
         
{
            __combination.DrawFlag = __combination.DrawFlag | DrawFlag.GutShotDraw;
            __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[0].LowerCard.Force - 1, 4));
         }
         else if (__pdc[0].SerieSize == 1 && __pdc[1].SerieSize == 2 && __pdc[1].GapSize == 2) // x.--.--
         
{
            __combination.DrawFlag = __combination.DrawFlag | DrawFlag.GutShotDraw;
            __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[1].LowerCard.Force - 1, 4));
         }
         else if ( __pdc[0].SerieSize == 2 && __pdc[0].GapSize == 2 && __pdc[1].SerieSize == 2) // --.--.x
         {
            __combination.DrawFlag = __combination.DrawFlag | DrawFlag.GutShotDraw;
            __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[0].LowerCard.Force - 1, 4));
         }
         else if (__pdc[0].SerieSize == 1 && __pdc[1].SerieSize == 1 && __pdc[1].GapSize == 2 && __pdc[2].SerieSize == 3) // x.-.---
         
{
            __combination.DrawFlag = __combination.DrawFlag | DrawFlag.GutShotDraw;
            __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[1].LowerCard.Force - 1, 4));
          }
         else if (__pdc[0].SerieSize == 3 && __pdc[0].GapSize == 2) // ---.-x
         {
            __combination.DrawFlag = __combination.DrawFlag | DrawFlag.GutShotDraw;
            __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[0].LowerCard.Force - 1, 4));
         }
      }
      else if (__pdc.Count == 2)
      {
         if (__pdc[0].SerieSize >= 2 && __pdc[0].GapSize == 2 && __pdc[1].SerieSize >= 2) // x--.--x
         {
            __combination.DrawFlag = __combination.DrawFlag | DrawFlag.GutShotDraw;
            __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[0].LowerCard.Force - 1, 4))
         }
         if (__pdc[0].SerieSize == 4 || __pdc[1].SerieSize == 4)
         {
            if (__pdc[0].SerieSize == 4 && sortedHand[0].Force == ForceKind.Ace)// 0----.x
            {
               __combination.DrawFlag = __combination.DrawFlag | DrawFlag.GutShotDraw;
               __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[0].LowerCard.Force - 1, 4));
            }
            else if (__pdc[1].SerieSize == 4 && sortedHand[sortedHand.Count - 1].Force == ForceKind.One)// x.----0
            {
               __combination.DrawFlag = __combination.DrawFlag | DrawFlag.GutShotDraw;
               __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[1].UpperCard.Force + 1, 4))
            }
            else
            {
            //OpenEnded draw
            int __index = -1;
            if (__pdc[0].SerieSize == 4)
            {
               __index = 0;
            }
            else if (__pdc[1].SerieSize == 4)
            {
               __index = 1;
            }
            if (__index != -1) 
            {
               __combination.DrawFlag = __combination.DrawFlag | DrawFlag.OpenEndedDraw;
               __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[__index].UpperCard.Force + 1, 4));
               __combination.AddToOutsList(new KeyValuePair<ForceKind, int>(__pdc[__index].LowerCard.Force - 1, 4));
            }
         }
      }
    }
   return __combination;
}

The only manner that satisfy me (but I am not proud of it) is to analyze straights and gaps length within the poker hand. the __pdc list is based on a simplistic object that I called PointDashCards that got two fields :

private
List<Card> _continousCards;
private int _gapSize;

And my method analyzes the number of these small series within the hand and the "texture" of each. Smells like Morse code.

So, as I already said, I am not proud of this solution. Win a Free GUID by teaching me the coolest way to analyze five cards poker hand to identify drawing opportunity.

posted by WoZoI | 0 Comments

My green bell theory

Since last summer I worked a lot on team methodologies and teammate responsibilities to identify the better counter part of everyones' participation. The first parameter is people are not the same even if they have the the same job title, i.e. the smaller your team is the more these inherent differences will be something to deal with.
For each job title, one estimate what an average team member is really supposed to be able to do. For each task assigned to a job title assess the average required time amount. As much as you find this amount productive write down the task under the bell.
Once you have drawn job titles’ generic bells. Draw each of your team members. Estimate for each of their job titles tasks their own productiviity and rank them under the individual own bell however add also under the bell their particulars skills.

Arrange the skills under the bells

By putting in the middle the high productive skills.
Then surround them by ordering descending :
on the left those he won’t invest in.
on the right those that your collaborator is likely to develop.

BellsArchetypes

The archetypal bells

BellsArchetypes


The big bertha: This is a rare bell. Those kind of person combine two majors qualities first they are experts in every tasks of their job second they often are visionary and their choices anticipate the next issue’s solutions.
The jack of all trades: Whatever is the subject they are at least skilled with. They are methodic and often early adopters. Those persons are like cowboys that survived a desert forced march with just a flask.
The gunner: They are just experts but in some particular tasks. One major advantage to work with this profile is that within their range you will always have the right answer.
The tinker bell: a newbie’s bell. Wait and see. Pay attention to the daredevil, this bell is slightly different as it looks like a small jack of all trades but this kind of people are willing to learn everything and they tend to scatter among too many things. Your project is not a laboratory. The dardevil is not the jack of all trade childwood. According to me, learner must stay focus on one field at a time. 

Tuning the « Carillon*  »

Building a team is like tuning a Carillon. You must first balance the job’s profile and then use the bell theory to identify the team covered abilities. Be sure that every needed skill is mastered by at least one of your fellow. For those critical double the offer. Take into account what members are not willing to do and especially learn because this will lead to delivery delay and collaborator’s dissatisfaction.
According to me it’s a good thing to start a project with a big bertha and a jack of all trade profile. Pour them with many gunners and complete with some tinker bells. Then sift the tinker bells as they grow up.

___________________________
*:
French word that identifies a bells set within a bell tower.

posted by WoZoI | 0 Comments

.Net 2.0 System.Configuration store parameters - Part IV of IV

IV. Do it recursively
<SectionName sctAttr="section attribute">
  <EltsCollection>
      <Elt name="E_1" value="Elt_1">
        <References>
          <Elt name="E_2"/>
          <Elt name="E_3"/>
        </References>
      </Elt>
    <Elt name="E_2" value="Elt_2"/>
    <Elt name="E_3" value="Elt_3"/>
  </EltsCollection>
</SectionName>
Do exactly the same three first step of the previous sample, but the type of the InnerCollection must be the same as the elements collection previously defined.
This is exactly what Thor used in the  app.config of his Windows Communication Foundation Service Discovery to describe the Dependencies between his services.
 
With the attributes the configuration associates one and only one xml element name to the configurationProperty when he adds each node to the configurationElement propertyBags. This single name definition is responsible of the impossibility to do recursive usage of the configurationElement declared with attributes.
 
Correction: The four posts were writen early december while I haven't yet installed the RTM and in between the novemberCTP and the release the Microsoft System.Configuration's developers updated the attributes usage and its now easy to create recursive ConfigurationElements. 
Cheer.

posted by WoZoI | 0 Comments

.Net 2.0 System.Configuration store parameters - Part III of IV

III. Describes an elementCollection that old an inner collection
From now you can’t use the attribute.
When you want that an element hold an inner elementCollection you must create each configurationElement programmaticaly.
 
<ItemList>
 <Items>
   <Item key = "item_1">
     <InnerItems>
        <InnerItem name="I_11" value="first InnerItem"/>
        <InnerItem name="I_12" value="second InnerItem"/>
      </InnerItems>
    </Item>
    <Item key="item_2">
      <InnerItems>
        <InnerItem name="I_21" value="first InnerItem"/>
        <InnerItem name="I_22" value="second InnerItem"/>
        <InnerItem name="I_23" value="third InnerItem"/>
     </InnerItems>
    </Item>
  </Items>
</ItemList>
 
To be able to use it, you must describe a new section, a new collectionElement, an element that will have attributes but also its inner collection and the innerCollectionElement. Let's do it by code.
 
Step 1: the section
So in order to create a section without using the attribute you still derive from ConfigurationSection and you have to declare:
A private static ConfigurationPropertyCollection and  instantiate it within the static constructor
Each xml attribute will also be declared as a private static ConfigurationProperty and added to the ConfigurationPropertyCollection within the static constructor.
Don’t forget to declare a read only property for each attribute.
Finally you must override the ConfigurationElement property called Properties and return the static field of type configuration¨PropertyCollection
 
protected override ConfigurationPropertyCollection Properties
{
      get { return _properties; }
}
 
Step 2: the ElementCollection
Derive from ConfigurationElementCollection then create a field to store the type of the collection.
 
private ConfigurationElementCollectionType _collectionType;
 
The type will determine the kind of node authorized within your xml collection.
 
In the constructor set the _collectionType field to
 
ConfigurationElementCollectionType.BasicMap
 
In order to define your custom itemCollection,  declare a private field elementName to store the collection item node name:
 
private string _elementName;
 
instanciate its value within the constructor and override  the property ElementName to return it. If the value is null or empty return the base value.
 
Now override the CreateElement, GetElementKey and add an indexer (Same method as described above).
 
Step 3: The Element that will have an inner collection
As we describe in this sample first step declare a private static ConfigurationPropertyCollection to store the properties, instantiate it within a static constructor. Then declare each ConfigurationProperty you need and don’t forget the collection key.
 
Step 4: the innerCollection
Do exactly as step 2
 
Step 5: the inner Element
Do exactly as step 3.
 
posted by WoZoI | 0 Comments

.Net 2.0 System.Configuration store parameters - Part II of IV

II. Store a collection of elements
<SimpleDataList>
  <Datas>
    <add name="D_1" value="data1 of the elementCollection"/>
    <add name="D_2" value="data2 of the elementCollection"/>
    <add name="D_3" value="data3 of the elementCollection"/>
  </Datas>
</SimpleDataList>
You have to add to a configurationSection, a configurationElementCollection and you must describe the ConfigurationElement used by the collection.
 
Step 1 the section
As we did previously, create a Section that derived from ConfigurationSection
Add a property that will return the configurationElementCollection defined above, this property must have an attribute of type ConfigurationProperty with the following parameters.
[ConfigurationProperty("Datas", IsDefaultCollection = true, Options = ConfigurationPropertyOptions.None)]
 
Step 2 the elementCollection
Define the collection class by deriving from ConfigurationElementCollection override the CreateNewElement() to return the new TypedConfigurationElement. Override the GetElementKey(ConfigurationElement element) to return a specific TypedConfigurationElement by the property identified within the TypedConfigurationElement
 as the collection key.
protected override object GetElementKey(ConfigurationElement element)
{
  return ((DataElement)element).Name;
}
Note: you must also add a public indexer in order to be able to fetch the configurationElementCollection
public DataElement this[string name]
{
  get
  {
    return (DataElement)base.BaseGet(name);
  }
}
 
Step3 the element
Create the element by deriving from the ConfigurationElement add the property as we already did in the first sample but don’t forget to define an attribute as the collectionElement key.
[ConfigurationProperty("name", IsKey=true)]
public string Name
{
  get{return (string) base["name"];}
}
 
posted by WoZoI | 1 Comments

.Net 2.0 System.Configuration store parameters - Part I of IV

If you read AvalonBoy‘s first post about the .Net 2.0 System.Configuration you surely thought that he doesn’t show you anything, moreover you didn’t understand why he disbelieves the attributes usage. So as he is too busy to present the second part of his post I will do it for him. Let’s go behind the hood of System.Configuration.ConfigurationElement presenting 4 different ways to describe and consume 4 ConfigurationSection within our dedicated ConfigurationSectionGroup named “RioterDecker”.

I. Simple data to store:
<BasicData dataValue="attributeValue"/>
So create a configuration Section and as a section derived from a configuration element define directly its attributes by creating read only properties. Each property must have an attribute ConfigurationProperty with the string name of the xml attribute as parameter.
 
[ConfigurationProperty("dataValue")]
public string DataValue
{
  get { return (string)base["dataValue"]; }
}

posted by WoZoI | 0 Comments
More Posts Next page »