April 2008 - Posts
This is not a technical post. Nor it's related to software development or the theory behind it. It is a pure human post about principles that are much more basic and important in life then anything else - family.
My wife and kids have left for their spring-summer vacation about two months leaving me behind to catch up later. Two days and I am on my way to see them, reunite and spend a one hell of the month in the place I love - Israel.
These two month were an interesting period of time for myself. I have made a few decisions two change the way I do things. Realized how much I care and love my family. Learned to appreciate my own time, and see the things normally I cannot see from a distance of a meter - time goes by quickly and I have to make the difference every single day. Difference as dad, as husband, as a software developer, as a human.
Saying this I realize how much I still have to go/do. Very exciting. The vacation will give me some rest I need. Seeing my family will boost my moral. My family is great. I love you Anna, Liam and Liz. Here's my family on current vacation (thanks to Roy Osherov for pointing out the web service, sorry, the track is the same - tried to be original, but this one is really good:).
PS: yes, and the warm weather - that is an important ingredient for a fun time! Make it double please.
Today run into what I think is a bug in Windsor Container. After googling a bit, found a post that is similar to what I have - need to have a constructor in implementer component (ctor(string)) and configure Windsor to call it, rather than overloaded version of constructor. For some reason Windsor is not going to the default constructor.
1: public interface IService
2: {
3: //...
4: }
5:
6: class Component : IService
7: {
8: public Component() : this(DependencyResolver<IService>()) {}
9: public Component(IService service){}
10: }
The component was registered as:
1: var type = typeof(IService);
2: DependencyResolver.Register(type.FullName, type, typeof(Component));
the proposed workaround was :
1: class Component : IService
2: {
3: public Component(string ignored) this() {} // call default ctor
4: public Component() : this(DependencyResolver<IService>()) {}
5: public Component(IService service){}
6: }
and through Container.Kernel.Handler register Dictionary of parameters (string in this case) that would determine what constructor to use.
Has anyone solved this problem in a more delicate way rather that creating a workaround constructor and registering parameters?
I have posted before about the subject, and there was a strong hold on both sides (for and against). Yesterday I run into a blog that mentioned a software called Mingle 2.0 - obviously not the first version according to the name, but I have never heard of it before, so it might be a naming game (all the Web 2.0 thing) - who knows? And probably someone knows. If you a successful survivor of the software or have a few words to drop, leave your comment after the beep.
Beeeeep.
We have some very talented and blade sharp people here. So why can't we start ALT.NET Calgary local group? This would definitely promote excellent ideas around, enrich our dev community, put more stress on quality, agility, and much more. Feel free to contact me if interested.
PS: I am quite inspired by what is going on right now at the ALT.NET conference. Wish would be there...
Inspired by people like JP. Thank you.
The Matrix has you...
- Ever have that feeling where you're not sure if you're awake or dreaming?
- How did you do that?
- Right now, all I can tell you... is that you're in danger. They're watching you, Neo.
- Who is?
- Please just listen. I know why you're here, Neo. I know what you've been doing. I know why you hardly sleep... why you live alone and why, night after night... you sit at your computer. You're looking for him. I know, because I was once looking for the same thing. And when he found me... he told me I wasn't really looking for him...
- ...I was looking for an answer. It's the question that drives us, Neo.
- It's the question that brought you here. You know the question... just as I did.
- What is the Matrix?
So what is the Matrix? Matrix is the existing software culture that has us all playing by it's rules. Matrix is the classic waterfall with the big fat design up front, if you wish. Matrix is the culture of lonely stars "ruling" the code-world, or at least the imaginary worlds they create.
What is the question? Question is what doesn't let you fit nicely into the Matrix, causing discomfort and feeling of bad taste in your mouth, while you trying to digest it. Question is your passion to something that can be better, and you know that Matrix is not it.
- The answer is out there, Neo. It's looking for you. And it will find you... if you want it to.
The answer is not single, these are multiple answers. Answers are Alternatives. You won't have answers, until you embrace alternatives. You won't have answers, until you try the alternatives. You won't have answers, until you are honest enough with yourself and make the decision.
Bzzz - bzzz - bzzz - bzzzz
-Oh shit!
Shit - that's how reality looks like when you wake up to it in the morning, with a great tune of the buzzing clock. But is it? You know this is not the reality you want to leave, you know that you can do more and better. You know that the answers will help you to get where you want to be. All you need to do is answer the question(s). Or at least try to. Yes, you will try to get the answer to your question(s) and by that change the stinky reality. And right then the reality kicks into the next gear. Reverse.
- You believe that you are special, that the rules do not apply to you. Obviously, you are mistaken. This is one of the top software companies in the world... because employees understand they are part of a whole.
And back you are to your beloved desk and sad reality.
- Hello, Neo. Do you know who this is?
- Morpheus.
- Yes. I don't know if you're ready to see what I want to show you. But unfortunately, you and I have run out of time.
We all need such a call. A wake up call. A call that will make it clear that something has to change in how you do things. The way you think, the way you work. A wake up call to realize that time is not your ally, but the worse enemy, and if you don't act, answers will remain unrevealed.
- Please, Neo, you have to trust me.
- Why?
- Because you have been down there. You know that road. You know exactly where it ends. And I know that's not where you want to be.
When the time comes to make some painful decisions, we chicken out. We normally do, because it's different, it's new, it's unknown, it doesn't feel familiar and the comfort is gone. Unknown feels so heavy when possession of already accumulated knowledge makes you feel so great about yourself. But deep inside you know that that road is not for you, there's nothing left for you. You have traveled that road and it's not the one that takes you to the answers.
- Let me give you one piece of advice. Be honest.
Giving and taking advices is easy. Following those is tougher. Be honest with yourself, your skills, you abilities. Am I as good as I want to be thought of? Am I adding value by what I do? Am I making any difference, or just doing the same old thing is some other trivial way? Am I honest about answering the questions I face? Honesty is the key to loose the unnecessary fears that are roadblocks to the answers you are looking for. At least it serves as a good kick off point.
- I imagine... that right now you're feeling a bit like Alice... tumbling down the rabbit hole?
- You could say that.
- I can see it in your eyes.
- You have the look of a man who accepts what he sees... because he's expecting to wake up. Ironically, this is not far from the truth.
Find the people who will see what you going through in your eyes, wise people who can sense what you going through to show you a hint to what you are looking for.
- It is the world that has been pulled over your eyes... to blind you from the truth.
- What truth?
- That you are a slave. Like everyone else, you were born into bondage... born into a prison that you cannot smell or taste or touch. A prison for your mind. This is your last chance. After this, there is no turning back. You take the blue pill the story ends, you wake up in your bed and believe whatever you want to believe. You take the red pill, you stay in Wonderland, and I show you how deep the rabbit hole goes.
Remember... all I'm offering is the truth. Nothing more.
The blue pill for me is falling back into old habits. Waterfall, BDUFs, cubical, DB driven designs. The red pill for me is Agile, TDD, open communication, team, openness. I choose the red pill not only to know how deep the rabbit hole goes, but also to test my abilities to go even deeper. I choose the red pill, because I prefer bitter truth to sweeter illusion. I choose the red pill because I want the truth. And my truth is that I still have the dream and on my way of achieving it.
Don't abandon your dream. Don't live in Matrix.
After a long time I had the book sitting idle, finally I had a chance to get my hands
on it - Who Moved My Cheese. A very nice, fairy tale kind-of book teaching how to cope with changes. I loved it, especially it's nice to read if you are trying to wrap around the agility concept.
Be ready for changes, be ready to change. Be ready for things become and stay dynamic. You have to be dynamic. Don't be a littlepeople, with a two complicated brain analysis to adopt to changes, be quick and pragmatic, adopt and period. Nice book, worth reading.
PS: I think I will introduce my son to this nice story. His brain is much better of adopting then mine :)
While pairing today with one of the developers from our team, we decided not to let the mice to distract us, and unplugged it. That was awesome - within seconds we diagnosed ourselves with a mouse-have-to-touch addiction symptom. Every single moment a hand was reaching to the sacred location two things happened:
- The mouse wasn't working
- The brain was realizing that there's an alternative - keyboard
It probably took an hour to digest the great loss, but we started to rely on R# and keyboard shortcuts to do the job. I can definitely see the difference between the start and the finish.
The other challenge is how to practice something similar with a person who is pairing remotely - you can ask to disconnect the mice and drop it to the bin, but it's not always working. A typical reply would be "Sure! What for? I simply won't touch it". And 3 seconds after that you see the sneaky mouse making it's way from one corner of the screen to the opposite one (or worse, expressing the thoughts of the confused 'master', while trying to thing what is needed to be done).
So I can't unplug the beast, can I then mute it? Wow, that would be nice, an application to temporarily disable mouse. What do you think? (This is where I solicit for a utility name).
Confession: I am not using mouse for a while while developing, and the whole purpose of the experiment was to prove to my team mates that they can do with no problems at all. It's all in the head, Pinky, all in the head.
Reminds me words of Morpheus from Matrix movie in context to the importance of the mice to be able to work: "Do you think it's the air that you breath? Hmmm. Interesting...."
Over the weekend I had a chance to play a bit with the tutorials provided by Gabriel Schenker for NHibernate 2.0 TDD style. A few thoughts on the subjects:
- NHibernate is powerful for especially Domain oriented solutions
- Feels a few orders more mature than the ADO.NET* approaches (Have to admit, I am not a big fan of ADO.NET - and at work people don't like that. Hopefully they will be able to see in NHibernate what I saw for myself)
- Definitely helps to shift the focus on the right problems (not how to persist and cache, but how to resolve the real problem - logic of the solution for the domain, not technology)
I will be continuing with those tutorial, trying to learn more and see how and when can introduce it in our code. The fact that you can do you testing without having an actual database is thrilling (in a good way) and exciting. What I am missing at this point is some good literature recommendation that is more .NET oriented, with accent on the version that supports Generics and HCQ (HQL is a bit too SQL-ish to me).
An interesting book where author sharpens things that are quiet simple and have lots of common sense. I loved a few things that are very applicable to myself:
Quit the wrong stuff. Stick with the right stuff. Have the guts to do one or the other.
People settle. They settle for less than they are capable of.
It's easier to be mediocre than it is to confront the reality and quit.
Time to look for a new job is when you don't need one. The time to switch jobs is before it feels comfortable. Challenge yourself.
Failing means your dream is over.
At the company I work for we are trying to do things in a more agile way. And one of the things that people hesitate to do is to stick to something to 'taste' it. It doesn't necessarily means that there will be no value delivered to the client, or the work will be entirely stalled. To me it means don't turn down right away something until you know what are you talking about. And you won't know what you are talking about unless you do it. So this one is about whiteboard with stickers vs excel spreadsheet.
Why excel spreadsheet? Shared easily with remote people, supports the paperless office, and.... that's it.
Why not excel? Don't have to scroll, by looking at the whiteboard you can have a quick idea how good or bad things are. Allow multiple team members concentrate on a few things at the same time due to the fact that there's no restriction on the viewport (computer screen).
So we have now a few post-it notes on the whiteboard in the column In-Process, none in done (hopefully not for long), and more in not started. This is definitely feels better when you walk in into the office and see the "big picture", realizing that the value has to be produces, and not just the status updated to XY% in the spreadsheet.
I would love to hear ideas on how to make it work better, especially from people who have done it already.
More Posts