.NET Remoting Quickly

August 11, 2010 .NET, C#, HowTo No comments

As you may know recently I got junior to mentor him. In order to understand his capabilities and knowledge I asked him to do couple of things, like explain me one Design Pattern he knows, explain SCRUM and write the simplest .NET Remoting. So that was yesterday and today I verified that he failed with .NET Remoting, but it doesn’t mean that he is bad. He just need learn googling art more. I asked that for next day, and gave him stored procedure to write. Hope he will be smart enough to finish it till I come tomorrow from my English classes.

.NET Remoting

To ensure that I’m not asshole that asks people to do what I cannot do, I decided to write it by my own and see how long will it take for me. It took me 23 minutes. Hm… too much, but I should complain at VS about “Add Reference” dialog.

So here we have three projects in Visual Studio: one for Server, one for Client and of course Proxy class shared between client and server.

Shared proxy class ChatSender in ChatProxy assembly:

    public class ChatSender : MarshalByRefObject
    {
        public void SendMessage(string sender, string message)
        {
            Console.WriteLine(string.Format(“{0}: {1}”, sender, message));
        }
    }

Server (ChatServer):

    class Program
    {
        static void Main(string[] args)
        {
            var channel = new TcpServerChannel(7777);
            ChannelServices.RegisterChannel(channel, true);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(ChatSender),
                “ChatSender”, WellKnownObjectMode.Singleton );
            Console.WriteLine(“Server is started… Press ENTER to exit”);
            Console.ReadLine();
        }
    }

Client (ChatClient assembly):

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(“Client is started…”);
            ChannelServices.RegisterChannel(new TcpClientChannel(), true);
            var chatSender =
                (ChatSender)Activator.GetObject(typeof(ChatSender), “tcp://localhost:7777/ChatSender”);
            string message;
            while ((message = Console.ReadLine()) != string.Empty)
            {
                chatSender.SendMessage(“Andriy”, message);   
            }
        }
    }

My results


No comments


KE – Day Third – Modelling: UML

August 10, 2010 Career, UML 5 comments

Today is my third day preparing to the Knowledge Evaluation. For today I had DB Design and Modeling. Modeling is about UML diagrams as it is mentioned in sheet I’m using for preparing. In this post I explained each of the diagrams with one simple sentence. Also I drew few of them, have no enough power at this point of time at night to continue and draw all of them. Hope you will like my drawing tries :)

UML: Structure Diagrams

Class Diagram – show classes and their interaction in details.

Component Diagram – represent components of the system, their relationships and contracts they use to interact.

Composite Structures Diagram – show collaboration of instances in run-time and communication links used.

Package Diagram – organizes other model elements into groups for easy understanding of the system.

Deployment Diagram – represent static state of the working system, including hardware and software located on it.

Object Diagram – shows snapshot of the instances of the system to represent how system can look at run-time.

UML: Behavior Diagrams 

Activitiy Diagram – represent workflow of the activities in the system, basing on decisions made.

Use Case Diagram – show usage patterns of the system, so they can ideally describe requirements.

 

State Diagram – shows all of the possible states of the object in the system and conditions when it can change its state.

UML: Interaction Diagrams

Sequence Diagram – show the lifetime of the components/classes and their interaction in time.

Communication Diagram – shows flow of the messages in the system and illustrates basic relationships between classes.


5 comments


KE – Day Second – Engineering Management & Requirements

August 9, 2010 Career No comments

Today is the second day when I spend some evident time on preparing to my knowledge evaluation. For today I had Engineering Management, Requirements and OOD.
Engineering Management is something that I read few articles on wikipedia and OOD is something that is not possible to learn per one night. So regarding Requirements I noted only few things.

Requirements

Requirements is very important part of the process of building software. The better and cleaner requirements you get – the better understanding of the system and its design you create; the better you communicate requirements to development team – the better product will be built. And what is the most important as per me – you can evaluate requirements before you started developing something and find out if it is feasible.

So how can requirements look like?

  • Business Requirement – defines needs from software that can help reach goal of the business.
  • User Requirement – defines how people (users) will interact with system and what should it do from their perspective.
  • Functional Requirements – define functional specification to the system, developers must build to satisfy the other requirements.
  • Quality of Service Requirement – performance, scalability 

Evaluating the Requirements for the Application

  • Requirement perspectives
  • Unambiguous
  • Complete
  • Necessary
  • Feasible


No comments


KE – Day First – Communication

August 9, 2010 Career No comments

I’m preparing to the Knowledge Evaluation, which should let me get next step in my career. Today I spent about 5 hours on learning the Communication area of requirements for me. I read dozen different articles and reviewed many presentations. Very important part of communication is Team communication and Coaching, but I’m off for sleep. Indeed want to write something about it. You just need kick me to do that next week. Here in this post you will see some random lists on different communication items created or mixed from other resources by me.

All of us know how that is critical to be competent in written communications, specially with client, so while preparing I created some lists of things to be remembered.

Be clear in your e-mails:

  • Keep in mind your reader
  • More verbs instead of nouns 
  • Concrete, not abstract 
  • More active instead of passive 
  • Making sense – managing stress (Put old or known information at the beginning of the sentence and new or complex information at the end)
  • Be simple (Foggy phrasing often reflects foggy thinking)

Requirements

Software Requirements documents consist with:

  • Introduction (Purpose, Scope, Definitions, References, Technologies, Overview)
  • Overall Description (Use-Case Model, Architecture Diagrams, Assumptions and Dependencies)
  • Specific Requirements (Use-Case Reports, Supplementary Requirements)
  • Supporting Information,
  • Concerns if any

Questionnaire

  • Short
  • Target carefully
  • Start with interesting questions
  • Limit, or avoid, the use of open-ended questions
  • Put your questions in logical order

Meeting Minutes

Meeting minutes document what occurred at the meeting. They are not an opportunity to present a position or to add new materials and comments.

Format of Meetings Minutes should follow the agenda closely:

  • Date & Time, Place of meeting, Attendees
  • Purpose of Meeting
  • Each issue addressed and highlights of the discussion
  • A notation of any materials handed out at the time
  • Outcome or decisions made

Always attach copies of materials distributed at the meeting or note where to find
them.

Proposals

Should have Executive Summary and answer for the following questions:

  • Why are you doing this project?
  • What will you be doing?
  • How will you be doing it?
  • Who will be doing it?
  • Where will it be done?
  • How long will it take?
  • How much will it cost?

Conference calls

I’m sure that you can anourmous amount of information on how you can effectively provide your conference calls.

Here is my own list:

  • Be always prepared for the call. Have pen & paper handy.
  • If you do a call or if you receive a call, always know what is the purpose of it and if right persons are selected.
  • Be honest and oriented to help, never say that it is not your job or policy.
  • Track if meeting goes by agenda, direct and drive when needed.
  • Try to exceed expectations, ask something like “While you’re on the line would you like me to…”
  • Always have summary of the call outcomes in the end.

 If this is bad post, let me know.


No comments


English classes in outsourcing company

August 7, 2010 English, Opinion, Success 1 comment

Since each software company wants to develop into huge one and be evident player in the IT industry, managers work on improving skills of the personal. For not English speaking country, as Ukraine, it is quite critical for the employees to know English well. That is why many companies are investing money on creating English courses.

Half of the English courses, I’m attending are left and I would like to provide some feedback that can be useful for my teacher, for people who are attending courses, and for anyone else who is working in outsourcing software company in non-English speaking country.

I’ve been attending regular Upper-Intermediate course for about 4 months and I see many advantages of it, but classes do not bring as much value for my work, as I’m expecting to get.

Difficulties

Why don’t classes bring enough value for my everyday work?

First and the major reason is that subject of our studies is completely unrelated to matters we are encountering during daily work. For example one of the latest chapters of our student’s book was “Literature”. For me it was the worst chapter in that book. I’m not keen on literature, so maybe that is the reason why I was so much bored with that chapter. Maybe, but if we take a look at this from other side asking ourselves question “Which value does chapter about literature can bring to software guys?” my statement about that being worst chapter doesn’t look ridiculous. Except of some out of the common situations, like dinner with client or library software solution, literature topics bring small value. I do not say that it is bad to have such topics; I say that to some extent it is waste of time which could be consumed by learning other more interesting stuff.

Gap between engineers and English teachers

More over I think that I understand why this gap exists – because people who created study books are from another life area than software guys are. They are academic guys, they write articles and some fiction stories. On another hand we have software engineers who develop programs and discuss them, who look bit prosy for others, but we know what we know.

For example, I often watch different programming video. Guru speak about new frameworks coming soon, about mature approaches to building software, they show best practices and design patterns. Surprisingly I understand absolutely everything from their speech (maybe 1-2 words per minute missed). Why? Because they operate with words and terms I’m using in everyday work and because I’m interested to hear things they say. On one of the lessons we had listening practice, where guy talked about the train in Asia, and how some lady brought insects on plate for eating and about wooden sticks and bla-bla… Question is: why on earth I need this?

Advantages, Improvements, Thoughts…

Is everything so much bad?

No, of course, no! Main point of my previous paragraph is that classes are not 100% concentrated on needs of software engineers.

These classes bring lot for my general understanding of English Language. I now feel more confident in using perfect tenses and different grammar. Classes are great revision of the grammar, that you learnt at some time and then have forgotten.

On my previous Performance Appraisal I got remark from client, that my English has improved. I should thank my company for giving me opportunity to learn English.

Improvements to regular courses that I see are:

Have brief review of the upcoming topics and find out if people are interested in them. If not maybe it worth to provide one-two lessons that do not belong to regular course, like one lesson of “listening & speaking” one lesson for grammar one for video, after that proceed with further chapters. Get feedback from people. Btw: I really appreciate, that my teacher asked for feedback. You rock! I know that feedback is the most reinforcing way of improvements.

Course I’m attending is comprehensive (learnt this word at classes :)) set of activities, but I would really like to see more speaking. Make people speak more, and provide feedback on that only after person finished. I would like to see it more regulated. Make everyone speak.

Make some friendly-competitive environment. I’m kind of person who would like to win some rewards, like “Best presentations deliverer”. For now I would win only “Most Thursday lessons missed” – 9AM is too early for owl.

Have some home activities that differs from usual, like ask for watching some film and provide review for the students. Or simply let people introduce and explain their duties in company. That should be interesting.

Additional learning is needed

As per me it is required to work on English by your own and simultaneously attend classes. How does it work?
English teachers are the best in their understanding of grammar. Particularly my teacher can explain tenses just terrifically. Your everyday work doesn’t require complex grammar to be used, but nothing restricts you from doing that. Simply start listening to your clients more attentively and catch the smallest matters they say. Write more clean and sophisticated letters. Now you have theoretical knowledge, go and use.

My list of activities I do for learning English:

  • Attending English classes and catching grammar at daily work
  • Using theoretical knowledge in your daily work. Why not write two-three words to build more complex and correct sentences that can emphasize your e-mail.
  • Reading huge dozen of articles. I read technical only, and tech books in original.
  • Watching tech video. I just love watching it.
  • Watch with beer and friend movies you have already seen translated.
  • Watch without beer movies for the first time. Even if you understand little; low of average works – the more films you watch the more words you intuitively understand.
  • Find someone who will likely be talking with you in English during the day. I’m happy that I have colleague, who talks to me in English. We have fun. 
  • Write something. I write blog posts, that is also asset to my learning.

Conclusion

English classes are definitely needed for the software company. And I really enjoy attending them, but hate that they suck time that I need for my sleep and dislike that they are not software-related, but I try to understand this. I see some improvements, biggest part of them are applicable to our courses, but not necessary near to wishes of other students. As always everything depends on your desire to work, so I have my own list of activities I do for learning English.

Please let me know your thoughts about said above.


1 comment


Abiliton PRO Certified

August 7, 2010 Certification, Success 4 comments

Yesterday my company officially started new certification model, called Abiliton PRO. It was announced much earlier, but rewarding first portion of best company’s people happened only yesterday.

What is Abiliton?

Abiliton™ is a strategic methodology for software development lifecycle management, invented by SoftServe. Abiliton is a fully optimized approach to software development that incorporates a
superior framework of services and solutions to deliver maximum value
with each and every project. It is focused on selecting and employing the most talented and bright professionals, this way company can ensure clients that projects will be done in time and with best quality that can be provided.

Who are Abiliton PRO People?

It is clear that success of any software company depends on its employees and their growth. By rewarding the best of them company emphasizes knowledge and working capabilities of the employees in any area.

What does Abiliton PRO certificate require?

It is some set of requirements, which include your performance and knowledge. Performance is measured by regular Performance Appraisals, which include different areas to be evaluated, starting from your communication with client or within team, your result orientation, etc.  finishing with applying your knowledge to daily work, like how are you in applying OOD or do you write high quality code. Knowledge, except of internal knowledge evaluations and performance appraisal, is ensured by external certificate. For example, Microsoft’s or Sun’s, or any else that are applicable to your position. This means that even Project Managers have there external certifications.

The rewarding event

President of company started his speech emphasizing why we gathered and what is the intent of rewarding. Also other guys congratulated us, after that we had some drink.

Here is me holding my certificate:

And close look at certificate itself:

Currently this certificate is requirement to get promotion. They say that they create more clear path for growing. Yes, and no. Many co-workers are complaining about that, and I understand them. Now it is required to commit extra effort in getting external certificates, but hey, guys, that is not so much difficult.

Honestly, I love to be recognized, and that is also part of my year goal and another mile stone on Developer’s RoadMap To Success. Why shouldn’t I love this? Everyone wants to be recognized and I would like to see people around who show desire to grow.


4 comments


Developers Meetings Survery – RESULTS

August 6, 2010 Coaching, DevMeeting, Presentation, Success 2 comments

Few days ago I started survey about improvements to Developers Meetings inside of my team, but I also announced it to anyone who can be interested in this via twitter and blog.

Top areas of interest are:

  1. *Foundations like WCF, WPF, WWF and huge parts of .NET development like WinPhone
  2. Design Patterns either Gof, Enterprise or not commonly known
  3. Core .NET (concurrency, memory, security)
  4. New features coming in .NET

 More details:

Top voted topics are:

  1. Enterprise Design Patterns
  2. WCF
  3. Gof Design Patterns with live code
  4. Estimation
  5. Refactoring
  6. TDD

My thoughts on top topics:

Because I’m not expert in Enterprise Design Pattern, it would take time for me to have some presentation on it. Either I will ask one of my colleges, who already read  “Patterns of Enterprise Application Architecture“.

I just scheduled Developers Meeting on WCF for my team, and I see this to be “getting started” meeting where I’m going to talk about main concepts and basic usages. I’m going to implement some funny example.

Regarding GoF Design Patters with live code, that should be very easy for me. I already have a whole bunch of different examples on my blog, so I can use them and talk on them. I expect to have junior stuff on those meetings. I would like to train my capabilities in coaching.

Estimation should be meeting where I would like to talk around Fowler’s estimation deadly sins.

Refactoring could be divided in many meetings, like core refactorings but with live code and also “refactoring to patterns”

TDD – no slides. I remember when we had presentation on TDD for devs and it was with slides. I think that is the worst way to explain TDD. Yeah, might be that it is good to show flow diagram, but I vote for code.

Details:

Improvements section:

What is the most interesting about improvements is that people would like to see more real code. Hm, this should mean that either people are tired because of my simple “hello world” examples, or either they are very interesting in how we can use those things withing complex project, and maybe they are right, because “hello world” examples could be found easily over internet.

Details on improvements:

Also as you can see we’ve got 3 comments on improvements. First one says to view presentations before meeting. I would agree with this, but maybe I will work on more detailed agendas, which will be sent exactly before meeting. Please let me know if this is ok.

I’m really looking forward to provide lot of interesting information to my co-workers and work along with them to build solid and very knowledgeable base for our growth.

Will appreciate if you would share your thoughts on this results and thank you very much for participating in survey!


2 comments


Wow – Always check the Inner Exception

August 4, 2010 Errors, QuickTip 3 comments

Today, I worked with services logic that sends me light objects mapped from NHibernate entities with AutoMapper, and I got an exception stating that something is wrong with mappings. I wrote UT that reproduces my issue and surrounded code with try{}catch(){} to see exception closer, and it said me the same I saw. I took a look on Inner exception message and at first glance it was absolutely identical to parent message.

Then I spent about 10-20 minutes verifying all my entities, trying to find some stupid mistake and I would spend more if I would not take a look on Inner exception of the Inner exception and it was a bit different, saying that another entity mapping is wrong, so I took a look into Inner exception of it and so on…

So do you have an idea where did I stop? See:

So I went through 11 Inner Exceptions to get to the null Inner Exception :) Highlighted message provided me information I needed to resolve my issue.

Moral: Always take a look into Inner Exception!


3 comments


Developers Meetings Survey

August 4, 2010 Coaching, DevMeeting, Presentation No comments

As you might know, I’m keen on delivering technical meetings for my co-workers within one business unit in company.

It is very important to keep developers working on their knowledge and that is what my company is trying to do. It organizes special seminars on different topics for all of the offices, it also creates its own certification model to evaluate knowledge of employees, etc. , but before that all started my team had our own technical meetings called “developers meetings”. Those were providing by one smart guy, who has moved to another country, but since team felt sad about that we continued having developers meetings, so we proceeded with scheduling topics and assigning people to them.

Fun, but while it was like official, conference room was full of people and everyone was listening to junior talking on some design pattern. As I think everyone got disappointed by such meetings, but I do not say that this was bad idea to have junior talking on patterns. Turns out it has something good inside, because that person learns something for himself and trains to present. Sad but true, he is not able to deliver something properly to the big audience.

I know this, because I also was in role of such presenter, talking on Prototype without clear understanding of it and using sophisticated example from book of GoF – I simply did not understand it and I’m sure that none get something valuable for him/herself out of that talk.

My conclusion is that presentation should be delivered by person, who has really solid understanding of things he talks about. If it is small team and it contains juniors, he should start with ever simplest code. But since anyone should start with something, junior also should have presentation sometime. In this case I would recommend to make presentation for limited number of people, like other starting developers and few experts who are really interested in people growth.

Back to Developers Meetings we are having now, I really would love to see them thriving, but it requires investment of time from interested people. These months I’m trying to deliver presentations more often, and since we’ve got lot of new staff we can repeat old topics with new breath. How to know if developers want those meetings again?

To get some feedback I created survey, which I sent to my co-workers, but I would be really happy if you, my readers, will fill-in it also. (It shouldn’t take longer than 1 min.)

http://www.surveymonkey.com/s/PYNDS3B


No comments


Andriy Buday List of Podcasts for .NET Programmers

August 2, 2010 Uncategorized No comments

I listen to few tech podcasts, which talk on programming. I fill with them my time, when getting to the work or traveling somewhere. So no time lost :) Also except of getting good valuable information I sharpen my English. For folk who it trying to reach success in software development it is very important.

So here is my list of podcasts I listen to. Please note, it will not be comprehensive list of podcasts, since I do not listen to all. If you want to see more comprehensive list proceed with this link where Scott Hanselman mentioned his list along with links to lists of other folks.

.NET ROCKS
This is amazing podcast. Besides it brings great content it is also very fun stuff. Carl and Richard talk easily, they interview lot of interesting people. These guys might be surprised that someone wrote “.NET ROCKS” on his body being in mountains far from in Ukraine…

Continuation of the list (I might add more comments in future):

Hearding code
Deep Fried Bytes
Software engineering radio
Elegant Code
Chanel 9
Hanselminutes

[Edited]
This Developers Life

Let me know which of the listed you also listen and which would you recommend for me.


No comments