Visual Studio 2010 hangs during installation…

August 15, 2011 VS2010 2 comments

Today I spent good porting of time trying to downgrade my VS2010 from Premium to Professional edition.

When I run VS install I got following hanging:

image

I had to wait about 20-30 minutes to get to the next step. So I tried to kill process are restart again, reboot PC and other things. Of course I did research over internet and it gave me much hints, but not complete solution.

Maybe it is only solution for my particular problem, but it also might be your problem.

1. Download Process Monitor and start spying your setup.exe.

2. Find out root causes of hanging.

image

3. Resolve issues. In my case those were missed registry keys, which I had to manually create and locked files – I had to kill processes using them. I also discovered that some of the issues were related to IE settings, so I put all to defaults, cleared all history/cached data.

4. If it doesn’t help, continue your research. For me this one post was very useful.

Hope this helps someone.


2 comments


Mine time management = pomodoro + outlook + notepad + paper

June 22, 2011 Success 6 comments

Have you ever read any books on time management? I’m sure you read maybe few of them or at least read articles/blogs and of course heard a lot. Have you ever tried some time management techniques? I’m sure you tried. Have you ever failed in those tries? I guess you did. And if you did not fail, than you are probably very lucky person. I believe I have an answer why those fail, or at least failed for me. Reason is – none of particular techniques that I tried really matched my personality and my style of work. There are things that simply cannot work for you. That’s it.

So what do I recommend to make it happen?

Play more and more with different (!) techniques, think about them, think why they work and don’t work for you. Also try to mix them. Try to adapt what you learnt more and never be precise to what is written in the book.

And here is what I think works for me

Paper notebooks

I have two paper notebooks. One I always have with myself when I’m outside of the work and another is always at work. I never forget working one at home and vice-versa.

Work-notebook. Usually I write to this notebook as I go. Anything could go there – meeting minutes, my thoughts, items to work on, even some bad words if I’m not satisfied with meeting I’m attending. I would have used laptop instead, but I’m not at position/company where guys have laptops for work.

Personal-notebook. Is something where everything goes planned per each day. For example I can put there to have haircut on Friday. But I also like to list there items for the next day that are related to work, grouped by need in them. Something like “must”, “nice”, ”awesome” so in the end of the day when I take a look at it and I did everything from “must” section I’m already satisfied with my day and if I did something from “nice” or “awesome” I’m proud of myself.

Plan Of Attack

I have txt file located at my working desktop called “Plan of Attack.txt”. It is very similar to what you would have called “todo.txt”, but except of writing there things I need to work on, I also put anything that could come into my mind while working on something else. For example while I was working on coding stuff X, I realized that I need to send short e-mail to customer on feature Y. Even if this e-mail could be short, instead of writing it immediately I do my “Alt+Tab” and document “e-mail on Y”, which is probably one second to do. By this process I did not lose my concentration on stuff X and I avoided stress for my memory to remember about that Y.

Outlook

I utilize Outlook very much for planning stuff for the day along with applying “pomodoro” technique. This is also very interesting that I have 15-30 minutes appointments in outlook that look like “Plan of attach and e-mails”. During that time I work on my inbox and I also reorganize what I have in my magic file by simply changing order items are located in file. Those at the top have higher priority. Once I sent e-mail on Y appropriate line disappears from my list.

Pomodoro technique

I try to stay maximum focused on things I do, and this is very much propagated by pomodoro technique. My outlook has 30 minutes personal appointments, I mark them as “free time”, so it shows people that they anyway can schedule meeting with me at that point of time. Also if I have to much external interruption (e.i. guys asking questions) I put a note at the paper near me with label “I’m available starting from xx:xx”. So during 25 minutes I just do my job, say “Pomodoro: Coding – Security” or “Pomodoro: E-mails”, very focused. Here is also one important note: I do not use this technique if I feel that I’m concentrated at work and have no issues with continuing what I do. I can continuously work on coding something during 2 hours and still be focused. I do not interrupt myself by these “tomatoes” if such things happen (usually at night).

Free time which is never free

I also have free spots, of course they are always occupied by something I need to help on, on short conversations with others and many other things that steal our time. But there is pros. in free spots – I can spend it on my further planning and I can go through my scribbles in notebooks and… I have time to relax.

Spend time wisely

When someone cannot be in time with task they do there are doubts if they spend their time wisely. Having this doubt can be fair and can be not. People always have different vision on what is important for other people and what is definition of “done”. Doesn’t matter how much stuff you’ve done and will do, please always know why you do everything in your life.

Key things to the whole damn time management:

  • Every thought or task is documented, so your mind if free to do what it is intended to do at the moment
  • Have time to reorganize tasks and plan them
  • Be maximum focused on tasks you do at the moment
  • Have time to relax and think about things you do and will do in future

Thank you very much for reading this blog post, looking forward to hear feedbacks from you.


6 comments


Technical Leader

June 8, 2011 TeamWork 6 comments

There has been a while since I posted something relatively personal. In recent time I’ve been working as Technical Leader for two projects (for one maybe partially thanks to another great team member). Being TL might be also justification on why I did not post that much, but probably it is not justification, it is just prove of my bad time management.
In this blog post I would like to talk about people motivating and leading team as I have much of this activities now. My vision could be very weak in this respect, but I have it clear in my mind and I would like to share it with you.
I did some research on who is tech leader and I also read couple books
on managements and have some ideas from them. I also had some
conversations inside of the company on this assignment. So I know there
is lot of stuff and information we can read/share. There are huge set of
different opinions on this manner and most of them are correct. So I just express what I was able to compose withing allocated time for this blog post.
In manner of couple of months I’ll see if my attitude and actions are correct. I will definitely share this with you, dear readers.
Here is how I see goal of good Technical Leader:
TL’s goal is to ensure that each team member (including him/her-self) is happy with work they do and that they constantly grow their professional skills, therefore establishing overall success of the project.
I believe it sounds differently from what you can read from other sources, but there are dozen of different definitions of this role, so above one is mine. To be a good technical leader you might need to take a lot steps before you succeed.
TRUST
But unless people believe in you, and have strong trust in you, you might not be able to do much.
It might be difficult to build trust, but it is doable. Here are my thoughts:
1) Explicitly show your desire to work for the projects success thought the prism of everyone’s happiness.
2) Work very hard on learning new stuff each day, make sure people know that you are very strong in your knowledge.
3) Stand for the people in your team, always show respect, always treat them as the best developers.
4) Listen to people, ensure they know that their ideas are valued.
5) Show that you try to understand needs of each person you interact with.
Here are some things I do now:
1. Ensuring that people don’t have anything on their way to complete tasks.
2. Giving clear tasks and establishing clear expectations, especially for the people that are not highly motivated.
3. Acknowledging developer’s work. So if some of the developer’s did great job I’m sure everyone should know otherwise it just dies with closing task in tracking system.
4. Coaching on technical stuff when it is appropriate.
5. Giving people tasks they like and tasks that challenge them. Also if people don’t reveal much interest I just hope that next task they pick up will be something they will like.
6. Inspiring developers us much as I can.
7. Showing personal responsibility and technical skills as an example. 
Here is something I would like to improve:
1. Make sure everyone feels high responsibility for the work they do.
2. Make everyone believe in project and is really willing to make it happen.
3. Make the team to be an extremely collaborative, self-defensive, self-organized, motivated and oriented to success.
Here are also some things I would like to try:
1. Build table of everyone’s weak and strong areas and try to use it the best.
2. Find best tasks for the people so they learn and get excited about working.
Thanks for reading this blog post!


6 comments


Interpreter

May 30, 2011 Design Patterns 4 comments

Some imaginary company has very funny business, when people have garage sales, they go and buy everything they can fit into few of their trucks. In the end of the day they are very interested to know how much goods inside of each of the trucks cost. We don’t really care what they do after. But we are interested in knowing how they calculate cost of goods. Many things they buy are packed into packages, sometimes they put similar goods into one package, sometimes they double-triple pack fragile things. So company deals with trucks stuffed with packages of goods. The other day truck’s guts can hit different cost number. In the context of current date prices, having graph of packages/goods we can calculate total cost, this can be done by man, but company goes different way, trucks do it automatically. Each truck accumulates cost of each package, each package calculates cost of what’s inside (packages/goods), any stuff knows its today’s price.
INTERPRETER
Interpreter is design pattern that allows to represent language grammar and knows how to evaluate its sentences into parts that can be understood.
Talking about our dummy example, language would be truck/packages/goods, its current sentence would be stuffed truck ‘cause it has graph of language parts, and the meaning of the sentence would be total cost of the goods inside.
There are two kinds of expressions in the language, those that can be understood immediately, called terminal expressions, and those that require language logic to be applied to be understood, called nonterminal expressions.
Talking about our example, terminal expression would be old TV, Laptop or Bed, since we know that today old TV costs 100, Laptop 500 and Bed 400, and nonterminal expression would be package in which they put 3 laptops, where we have to apply logic to understand what it means to us.
Let’s take a look at our example source code:
Here are expressions our language contains:
    // Abstract expression
    public abstract class Goods
    {
        public abstract int Interpret(CurrentPricesContext context);
    }

    // Nonterminal expression
    public class GoodsPackage : Goods
    {
        public List<Goods> GoodsInside { get; set; }

        public override int Interpret(CurrentPricesContext context)
        {
            var totalSum = 0;
            foreach (var goods in GoodsInside)
            {
                totalSum += goods.Interpret(context);
            }
            return totalSum;
        }
    }

    // Terminal expression
    internal class TV : Goods
    {
        public override int Interpret(CurrentPricesContext context)
        {
            int price = context.GetPrice("TV");
            Console.WriteLine("TV: {0}", price);
            return price;
        }
    }

    // Here other terminal expressions go (Laptop, Bed)
As you can see GoodsPackage knows that for to be understood it has to accumulate cost of each things inside. In our example we have very simple language with only one rule for it, but in more complex languages we will have something different, like for math it could be (“+”, “-”, “/”, “*”, “Sqrt”, “Integral”, and so on…). Math would also have variety of terminal expressions, like numbers or variables, value of which can be substituted.
Two more things are left. It is context, which represent information global to the whole process, in our example prices as of today, and it is client, which actually somehow gets sentence and invokes method Interpret in order to understand sentence. Here below is only Client, I do not show CurrentPricesContext, since it would bring only noise to this example.
        public void RunInterpreterDemo()
        {
            // create syntax tree that represents sentence
            var truckWithGoods = PrepareTruckWithGoods();
            // get latest context
            var pricesContext = GetRecentPricesContext();
            // invoke Interpret
            var totalPriceForGoods = truckWithGoods.Interpret(pricesContext);

            Console.WriteLine("Total: {0}", totalPriceForGoods);
        }

        private CurrentPricesContext GetRecentPricesContext()
        {
            var pricesContext = new CurrentPricesContext();
            pricesContext.SetPrice("Bed", 400);
            pricesContext.SetPrice("TV", 100);
            pricesContext.SetPrice("Laptop", 500);
            return pricesContext;
        }

        public GoodsPackage PrepareTruckWithGoods()
        {
            var truck = new GoodsPackage() { GoodsInside = new List<Goods>() };

            var bed = new Bed();
            var doubleTriplePackedBed = new GoodsPackage() { GoodsInside = new List<Goods>() { new GoodsPackage() { GoodsInside = new List<Goods>() { bed } } } };
            truck.GoodsInside.Add(doubleTriplePackedBed);
            truck.GoodsInside.Add(new TV());
            truck.GoodsInside.Add(new TV());
            truck.GoodsInside.Add(new GoodsPackage() { GoodsInside = new List<Goods>() { new Laptop(), new Laptop(), new Laptop() } });

            return truck;
        }

Quickly output:
Bed: 400

TV: 100

TV: 100

Laptop: 500

Laptop: 500

Laptop: 500

Total: 2100

Interpreter is one of the design patterns that you most likely will never use in your life. It is bit cumbersome and has very specific application.

My Design Patterns Table


4 comments


WCF and versioning – my adventures (or “The resource MultipleIdDefinition was not found”)

May 14, 2011 Errors, WCF No comments

Hey, I believe that everyone of us have ever dealt with versioning. Versioning inside of WCF doesn’t exist if so to say, but it is very easy to keep all your stuff running until you actually have to validate schema of the messages.

In recent time me with my team had to make our Phone client of version 1.0 and 1.1 work with either version of server 1.0 or 1.1. In other words we had 4 cases. Two of them are obviously non-problematic and two are not that clear. Accordingly to MSDN there is no direct support for versioning in WCF, except of that each data elements are optional by default. This means that if you haven’t specified opposite all of your DataMembers are going to be null if they are missed in incoming XML.

So having this in mind I expected that all of our versioning scenarios will go smoothly, but this did not happen. We were getting ugly exception looking like this: “The resource MultipleIdDefinition was not found”. Honestly it was very surprisingly since google search did not give me any good answer for this.

So here are steps that I took to figure out where the problem is:

  • Made the way up to the deserialization code.
  • Debugged to the point where I can see actual payload.
  • For same data request I copied payloads as is from two server versions.
  • Did text comparison and found what I was looking for.

Added properties could not brake serialization, so I found other differences, which were additional z:Id=”i7” right after one of the data contracts. Some of you might know that this is cause of IsReference=true of the DataContract. So I did research if this really has been changed between version 1.0 and 1.1 and found out that it was.

So, long story short, if you having some issues with serialization inside of WCF when dealing with versioning think less about new or even deleted elements of you contract, but think more what can cause mismatch in messages. And dong forget to see source control logs.


No comments


Proxy

May 8, 2011 Design Patterns No comments

Taken from here: http://news.malaysia.msn.com/photogallery.aspx?cp-documentid=4417270&page=7Do you imagine yourself defusing bomb? Scary? Even if you couldn’t imagine this there is such profession as bomb defuser and people owning it are human as well, so I bet they feel scary when near bomb. For our luck there is technology nowadays that allows remotely operate with some kind of robot that can defuse bomb. Using robots also allows to do more complex operations with safely lifting bombs, and manipulating them. I bet human hands would shake while holding bomb, not robot’s.

Connection with robot is wireless of course and you would have special suit that makes you body operate robot remotely as you were it. (Ok on the picture above you see not such advance robot, but lets imagine we are in future.) Robot still has control panel on it that will allow operating it directly. This is needed just in case connection could not be made (say someone is blocking signal).

To summarize, robot is heavy instance and it can be operated directly or you can proxy your requests through special suit.

PROXY

Proxy is design pattern that surrogates real object and proxies requests to it when needed, it also instantiates real object if it is not yet instantiated.

Talking about example above, object which we use is robot (RobotBombDefuser) it is heavy stuff, which we move using remote controls aka. proxy suit (RobotBombDefuserProxy). As this suit works wirelessly with robot it knows how to connect to real object and how to pass your requests to it. The same is happening when we connect to some remote web server and call methods on it.

Proxy is also often used when you need lazy initialization. In this case instead of connecting to remote resource there is simple check if object is not null and then assigning an instance if needed.

Let’s see what we have in our example. Here is robot itself.

    public class RobotBombDefuser
    {
        private Random _random = new Random();
        private int _robotConfiguredWavelength = 41;
        private bool _isConnected = false;

        public void ConnectWireless(int communicationWaveLength)
        {
            if(communicationWaveLength == _robotConfiguredWavelength)
            {
                _isConnected = IsConnectedImmitatingConnectivitiyIssues();
            }
        }
        public bool IsConnected()
        {
            _isConnected = IsConnectedImmitatingConnectivitiyIssues();
            return _isConnected;
        }
        private bool IsConnectedImmitatingConnectivitiyIssues()
        {
            return _random.Next(0, 10) < 4; // immitates 40% good connection, aka. very bad
        }

        public virtual void WalkStraightForward(int steps)
        {
            Console.WriteLine("Did {0} steps forward...", steps);
        }

        public virtual void TurnRight()
        {
            Console.WriteLine("Turned right...");
        }

        public virtual void TurnLeft()
        {
            Console.WriteLine("Turned left...");
        }

        public virtual void DefuseBomb()
        {
            Console.WriteLine("Cut red or green or blue wire...");
        }
    }

 

Main methods that do the stuff are WalkStraightForward, TurnRight, TurnLeft, DefuseBomb. Methods to connect wirelessly and IsConnected are just for imitating reality of this app. You could omit how it works internally.

Here we have Proxy implementation. It always has reference to real object and often implements same interface if is not derived from object’s class.

    public class RobotBombDefuserProxy : RobotBombDefuser
    {
        private RobotBombDefuser _robotBombDefuser;
        private int _communicationWaveLength;
        private int _connectionAttempts = 3;

        public RobotBombDefuserProxy(int communicationWaveLength)
        {
            _robotBombDefuser = new RobotBombDefuser();
            _communicationWaveLength = communicationWaveLength;
        }

        public virtual void WalkStraightForward(int steps)
        {
            EnsureConnectedWithRobot();
            _robotBombDefuser.WalkStraightForward(steps);
        }

        public virtual void TurnRight()
        {
            EnsureConnectedWithRobot();
            _robotBombDefuser.TurnRight();
        }

        public virtual void TurnLeft()
        {
            EnsureConnectedWithRobot();
            _robotBombDefuser.TurnLeft();
        }

        public virtual void DefuseBomb()
        {
            EnsureConnectedWithRobot();
            _robotBombDefuser.DefuseBomb();
        }

        private void EnsureConnectedWithRobot()
        {
            if (_robotBombDefuser == null)
            {
                _robotBombDefuser = new RobotBombDefuser();
                _robotBombDefuser.ConnectWireless(_communicationWaveLength);
            }

            for (int i = 0; i < _connectionAttempts; i++)
            {
                if (_robotBombDefuser.IsConnected() != true)
                {
                    _robotBombDefuser.ConnectWireless(_communicationWaveLength);
                }
                else
                {
                    break;
                }
            }
            if(_robotBombDefuser.IsConnected() != true)
            {
                throw new BadConnectionException("No connection with remote bomb diffuser robot could be made after few attempts.");
            }
        }
    }

So our proxy simply redirects requests to real object and before doing so it always ensures that connection is established, and if it is not it establishes it with three attempts and if it couldn’t it then throws an exception.

So let’s see usage:

        public static void Run()
        {
            int opNum = 0;
            try
            {
                var proxy = new RobotBombDefuserProxy(41);
                proxy.WalkStraightForward(100);
                opNum++;
                proxy.TurnRight();
                opNum++;
                proxy.WalkStraightForward(5);
                opNum++;
                proxy.DefuseBomb();
                opNum++;

                Console.WriteLine();
            }
            catch (BadConnectionException e)
            {
                Console.WriteLine("Exception has been caught with message: ({0}). Decided to have human operate robot there.", e.Message);

                PlanB(opNum);
            }
        }

        private static void PlanB(int nextOperationNum)
        {
            RobotBombDefuser humanOperatingRobotDirectly = new RobotBombDefuser();

            if(nextOperationNum == 0)
            {
                humanOperatingRobotDirectly.WalkStraightForward(100);
                nextOperationNum++;
            }
            if (nextOperationNum == 1)
            {
                humanOperatingRobotDirectly.TurnRight();
                nextOperationNum++;
            }
            if (nextOperationNum == 2)
            {
                humanOperatingRobotDirectly.WalkStraightForward(5);
                nextOperationNum++;
            }
            if (nextOperationNum == 3)
            {
                humanOperatingRobotDirectly.DefuseBomb();
            }
        }
    }

In sample code above you can see usage of the defuser proxy, there is also “plan B”, when direct instance of the defuser is created and used. Code might look bit complex, because of that opNum and nextOperationNum noise. I added it to ensure robot continues it work from where it stopped.

Output:

Did 100 steps forward…

Turned right…

Exception has been caught with message: (No connection with remote bomb diffuser robot could be made after few attempts.). Decided to have human operate robot there.

Did 5 steps forward…

Cut red or green or blue wire…

My implementation of this Design Pattern is slightly different from its original implementation in GoF book where you have two derived classes both from some interface or superclass. But I think in real world implementation with deriving from already existing class is more common. For example such proxy is used always you need to have virtual methods for some framework, say mocking framework or ORM framework.

Here is UML for my example:

image

My Design Patterns Table


No comments


Using Distributed Transactions in multitier environment

February 28, 2011 HowTo No comments

In one of my previous posts I wrote that we use Distributed Transactions in our code. This worked just fine till we tested all installed on one machine. But once we installed SQL server on machine1 and our services on machine2 and services that use our services on machine3 we got following error messages:

Inner exception message: Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable DTC for network access in the security configuration for MSDTC using the Component Services Administrative tool.

This means that your transaction is distributed but not as much as you wish it to be. So it is not enabled for Network access. You would need to go to Administrative Tools –> Component Services to enable it.

image

Here is everything explained up and down how you Enable Network DTC Access:

http://msdn.microsoft.com/en-us/library/cc753510%28v=ws.10%29.aspx

Also, please keep in mind that you would need to enable it on both machines between which you are distributing your transaction.


No comments


Mediator

February 26, 2011 Design Patterns No comments

Some time have passed since I wrote blog post on GoF Design Pattern. Not sure what are actual reasons for this. I guess passing MS exams, but maybe I was lazy.
I had been thinking about good example for Mediator Design Pattern and could not find anything better than standard example with UI and cooperation of different components, but this was before I thought about neurons and their cooperation and in few moments I realized amazing thing. Our brain is mediator to different body parts. It just amazingly fits description.
Just try to imagine what would happen if each of our body part knows about each other. This means that if you see something great and you want to touch it, your eye has to know about your hands and manipulate them to do this. What if you would need to defense by hands because you got hurt in chest. In this case your chest would need to know about hands and manipulate them. This can be applicable to any part of your body that collects information from world and then some reaction should be done by one or many other body parts. Cooperation many-to-many doesn’t work for our body. But it often happens that developers write code that works just as was described above. Sometimes it works, but sometimes it just creates crappy spaghetti mess. Our body has one central system that does all the analyzing for us and manages reactions. Very often this is good practice for code we write.
MEDIATOR
Mediator is design pattern that centralizes cooperation between components thus decoupling interaction between them.
Mediator gracefully simplifies understanding of interaction between components. This gives better maintainability for future, but because logic is centralized it can become very complex and huge, as human brain is.
Here below is demonstration of the demo application I wrote:
image
So as you can see brain know how to handle different things and how to react on them and with which body parts. How does this happen?
Brain (Mediator) knows about each body part (Colleague), so it actually has properties or fields, like Ear, Eye, Hand, Leg, etc. Each of the body parts knows its brain and can signal that something has happened.

Colleague base class (knows its brain)

        // Colleague
        class BodyPart
        {
            private readonly Brain _brain;

            public BodyPart(Brain brain)
            {
                _brain = brain;
            }

            public void Changed()
            {
                _brain.SomethingHappenedToBodyPart(this);
            }
        }

Concrete implementation of Colleague can look as following:

    class Ear : BodyPart
    {
        private string _sounds = string.Empty;

        public Ear(Brain brain)
            : base(brain)
        {
        }

        public void HearSomething()
        {
            Console.WriteLine("Enter what you hear:");
            _sounds = Console.ReadLine();

            Changed();
        }

        public string GetSounds()
        {
            return _sounds;
        }
    }

So it basically can HearSomething and can provide its status by GetSounds method. Some other body parts can have some reactions, as simple Face implementation below:

    class Face : BodyPart
    {
        public Face(Brain brain)
            : base(brain)
        {
        }

        public void Smile()
        {
            Console.WriteLine("FACE: Smiling...");
        }
    }

Mediator (aka Brain)

As it should be expected Mediator is bit huge class and it has to handle all the complexity of interaction between body parts. You might want to change something in this class, I do not expect you to see this as ideal brain, but I hope you get an idea how it works.
    // Mediator
    class Brain
    {
        public Brain()
        {
            CreateBodyParts();
        }

        private void CreateBodyParts()
        {
            Ear = new Ear(this);
            Eye = new Eye(this);
            Face = new Face(this);
            Hand = new Hand(this);
            Leg = new Leg(this);
        }

        public Ear Ear { get; private set; }
        public Eye Eye { get; private set; }
        public Face Face { get; private set; }
        public Hand Hand { get; private set; }
        public Leg Leg { get; private set; }

        public void SomethingHappenedToBodyPart(BodyPart bodyPart)
        {
            if (bodyPart is Ear)
            {
                string heardSounds = ((Ear)bodyPart).GetSounds();

                if (heardSounds.Contains("stupid"))
                {
                    // attacking offender
                    Leg.StepForward();
                    Hand.HitPersonNearYou();
                    Leg.Kick();
                }
                else if (heardSounds.Contains("cool"))
                {
                    Face.Smile();
                }
            }
            else if (bodyPart is Eye)
            {
                // brain can analyze what you see and
                // can react appropriately using different body parts
            }
            else if (bodyPart is Hand)
            {
                var hand = (Hand)bodyPart;

                bool hurtingFeeling = hand.DoesItHurt();
                if (hurtingFeeling)
                {
                    Leg.StepBack();
                }

                bool itIsNice = hand.IsItNice();
                if (itIsNice)
                {
                    Leg.StepForward();
                    Hand.Embrace();
                }
            }
            else if (bodyPart is Leg)
            {
                // leg can also feel something if you would like it to
            }
        }
    }

Personally I liked example that I’ve prepared. Hope there is no such example over internet, but who knows.

UML

In addition here below is some UML stuff. You can click on image to see it bigger.

image

My design patterns table


No comments


I’m MCPD: Enterprise Application Developer 3.5

February 18, 2011 Certification, Success 3 comments

So far so good, I passed everything I planned to pass for the next 1.5 years. Take a look at the picture in career plan for software engineer blog post. I guess that I probably was afraid about learning ASP.NET. And as I passed everything sooner I can plan for more cool stuff, for instance starting my own small project or spend more time on personal life.

But here is just a little bit more on exam itself. I was ready for this exam not because of some books, training kits or anything else. It is all my experience. I extremely enjoyed passing this exam, you just apply your experience and common sense if you have it in software development of enterprise applications. Exam measures my understanding of designing application, its components, their testing, stabilizing, deployment, also choosing appropriate technologies. That is what I encounter often at work.

 

MCPD(rgb)_1260

This is good plus to my CV and promotion strategy.

Exam 70-565: PRO: Designing and Developing Enterprise Applications Using the Microsoft .NET Framework 3.5

I passed 70-565 exam with score 971 out of 1000. And this time exam questions just flattered to me. I liked them much. I believe that this is because they are not kind of questions where you have to know exact method signature. These are questions where you have to think and choose appropriate decision, and even more, they overlap a lot with questions I encountered in my experience.

You can see my transcript using this information:
https://mcp.microsoft.com/authenticate/validatemcp.aspx
Transcript ID: 904316
Access Code: andriybuday

Nearest certification plans

There is still one thing left. It is 4.0 .NET framework outside, not 3.5 so I’m looking for upgrade of the current certification. The best matching exam would be transition of my skills to MCPD 4.0 Windows Developer (70-521). At the moment I don’t have exact date for this exam, but it might be in 2-4 weeks.


3 comments


That’s enough for post suggestion poll on my blog–RESULTS

February 11, 2011 Blog 2 comments

 

Here below are results of the poll that have been on my blog:

image

Obviously people want me to write more on software design and patterns and no one wants to see “Hello World” applications. I’ve been thinking about this poll that it might be that I misses something related to frameworks and new technologies/languages. I’m afraid that those are valuable options as per me.

Anyway, that isn’t so much bad, 24 people have voted and I appreciate all of the votes. I will try to be stick to it, but cannot promise that I will have everything in proportion. Actually I’m planning to have 24 book reviews this year. This means 48 posts on design patterns and software design. Hm.. not that many. Smile

Thank you very much.


2 comments