Monday, July 6, 2009

Get Windows Live Messenger 9.0 Working on 64bit XP and Server 2003

Microsoft says that these are not supported. But they actually are.

You need to download the MSI version of the installer. It's available here:

http://www.softpedia.com/progDownload/Windows-Live-Messenger-9-Download-89148.html

You may then get the "cannot connect to server" message. In that case, upgrade the communication plumbing by installing this:

http://download.microsoft.com/download/0/F/4/0F4D43A7-8D47-4312-BC35-EC1F888AC156/en/Contacts-ship-neutral.cab

You should be able to connect at that point.

Thursday, April 23, 2009

An Interesting Discussion with Robert

I seem to always get into good conversations with Robert. We thought we should share it and perhaps it will start some more meaningful discussions.

Adam said:
BTW, thanks again for the invite yesterday. Good presentation. I liked the mind map way of displaying the ideas

Robert says:
Thanks Adam. And thanks for the input and clarifications; It was very interesting to see people's reactions to the ideas. Good discussions.
Robert says:
It seems that there is a considerable level of comfort with the idea that the status quo is broken.
Adam says:
yes.. please pass along my contact info to them.. they sound like a bunch of smart guys
Robert says:
I will.
Adam says:
sometime next month we'll have a geek beers again.. I like the presentation idea
Adam says:
I'll try and think of something like that for the next one
Robert says:
Nothing too excessive, I hope . Excessive presentation, I mean - shouldn't distract from the beer too much ...?
Robert says:
Just kidding - good idea.
Adam says:
no.. for sure.. but it's good to give some food for thought to the people
Robert says:
Indeed. If for no other reason than getting a better feel for how jaded, exactly, everybody is. That notion that building apps is broken, but that's just the way it is / will be / makes money.... Eerie.
Adam says:
ya
Robert says:
Not that I'm advocating revolution or anything, but I wonder to what extent that's a self-fulfilling promise and to what extent we actually have the answers and are just not implementing them .....
Robert says:
.... because of resignation - "it'll never work in any other way."?
Adam says:
there are multiple answers
Adam says:
it takes time to implement them all
Adam says:
what's needed is better tools
Adam says:
or larger adoption of good tools
Adam says:
there a few combinations of answers that don't work together
Adam says:
but the people that know the answers, know that anyway
Robert says:
Not sure about that. There seem to be more better tools about than you can shake a stick at. Adoption seems to be key, and it's linked to culture and language, just as was alluded to yesterday.
Adam says:
how many developers do you know practice DRY by using the built in templates in Resharper, for example
Adam says:
or better yet
Adam says:
how many develop their own templates
Adam says:
or macros in VS?
Robert says:
Very few. The interesting question is why that is so.
Adam says:
There is no reason, for example, that developing an ORM w/ MVC app in .NET should be as be as fast as developing in Ruby on Rails
Robert says:
"Insufficiently experienced" is the pat answer, but that doesn't capture it.
Robert says:
I think it has nothing whatsoever to do with tools, frankly.
Adam says:
I think softwareshops are too shortsighted that devoting just 1/2 an hour a day to sharpening the saw would make the difference
Robert says:
Yes, undoubtedly, but why?
Adam says:
Fire those who refuse to learn
Adam says:
Fire those who don't learn for whatever reaso
Adam says:
n
Robert says:
Learn what? Fired by whom? (as in, who makes the decision that they aren't learning) Replace them by whom?
Adam says:
it has to come from the top
Robert says:
The factors which cause the entropy are deep - human nature, culture, etc.
Adam says:
yes
Robert says:
Jawohl mein Fuhrer. Not to be facetious, but if it could be imposed just like this, we'd be as good at it as we are at digging ditches in no time.
Adam says:
but if actively the organization fights entropy, you have a better than the rest scenario. At this point it's worth fighting for
Robert says:
All organizations are actively fighting entropy. That's what an organization IS - a means of shaping reality and staving off entropy.
Adam says:
There was a good saying. "Look at that tractor there. If we got rid of it we could have 50 people shoveling the dirt."
Robert says:
It seems that the problem is agreement on exactly what constitutes order and chaos, and to what end.
Adam says:
The other guy says: "Why not use spoons, you could employ 500 people"
Robert says:
And why not, if the 500 would otherwise turn into antisocial drunks without purpose and happyness in life. Perspective has a lot to do with it.
Robert says:
.. happiness, of course....
Adam says:
yes.. I feel a rush of communism coming over me
Robert says:
How come it's about ideological correctness in software development and not in electrical engineering? What is the difference? That's what I don't understand.
Robert says:
Everybody seems to know what needs to be done whilst at the same time conceeding that it'll never work.
Adam says:
I'll tell you the difference between software and any other engineering
Robert says:
The "fire everybody who won't learn" / "don't work with anyone who isn't competent" theme was fervently supported by one of the guys last night, you, Greg Y, myself in darker moments.
Robert says:
All that knowing full well that that can't be done either.
Adam says:
yup.. so the current concensus now is architectural segregation via SOA done properly, ie, under the guidence of DDD
Robert says:
That's like the current political consensus that it's better to be free than slaves.
Adam says:
it's too easy to build software
Adam says:
mistakes have no harsh consequences
Robert says:
... what does "free" mean, whose "slave", etc.
Robert says:
"mistakes have no harsh" (especially near-term) consequences - that may be closer to the mark ....
Adam says:
if you burnt the wrong circuit on the board, it's toast
Robert says:
Curious that everybody either goes commie (extreme programming, etc.) or totalitarian when looking at the problems....
Adam says:
if you made a syntax error, you type something and recompile
Adam says:
lol
Adam says:
I love that comment
Robert says:
Yes, but that's not the true picture. You just recompile, but .....
Robert says:
.... as we both know the true consequences of a series of suboptimal decisions when building software can ruin companies.
Robert says:
That's why patterns and antipatterns seem like such a good idea. They make consequences more obvious and help to prevent bad choices.
Robert says:
The problem is that that's fairly well understood by now by technicians, but I know of a good number of entrepreneur and PM types who are blissfully unaware of the chain of events which made their stuff unmaintainable/useless/very costly even after everything folded.
Robert says:
It's as if our nice little patterns should each have case studies attached to them which attempt to quantify the effect of the pattern / antipattern in financial terms, for better or worse.
Robert says:
I wonder if that's possible.
Adam says:
too many variables
Robert says:
Not if one could classify the organisations and "cultures" which attempt to apply the pattern/antipattern in some way.
Robert says:
For example, patterns would have a different effect when used in an open source project, a dotcom style entrepreneur shop and Telus.
Adam says:
still lots of variables.. but you're getting closer
Robert says:
We should toss this thread into a blog post.
Adam says:
perhaps it's the quantification of the things we have not been quantifying that's the problem here
Robert says:
Yes. That sounds likely.
Adam says:
So we can explore that..
Adam says:
I'll post this on my blog when we're done
Robert says:
OK.
Adam says:
so, let's have "transiency" as a variable worth measuring
Adam says:
what is the percentage of consultants here
Robert says:
..... "transiency" .... ?
Adam says:
how many do short stints?
Adam says:
how likely is it for a person to leave if they don't like it
Robert says:
No idea, or even particular opinion on what metrics may make sense. I feel that it would need a lot more discussion before touching that one.
Adam says:
"relative compensation" - do the people get paid the average that is out there in town, more, less, by how much?
Adam says:
related to the previous, but imortant
Adam says:
.. to be looked at separately
Adam says:
"implied incentive" - is this a 9-5er or someone that fell in love with the art?
Adam says:
"personality type"
Adam says:
- do we have a bunch of type A personalities comprising the team
Robert says:
It sounds to me as if that's too focussed on the techies who do the coding and not enough on the "culture" of the organization in question.
Adam says:
ok.. you name a few
Adam says:
we'll need combinations of these matrix to throw methodologies and patterns at to see what happens
Robert says:
As I said, I'd have to think about that and would like to hear more opinions. For example: .....
Robert says:
Staff turnover probably plays a role, but do we need to look at it or those factors of which it is a symptom?
Adam says:
yes
Robert says:
I really don't have an opinion about that yet.
Adam says:
I think propensity to leave tied to that rate itself
Adam says:
it's not an easy equasion
Robert says:
Absolutely.
Adam says:
looks more like a y=y`` + y` differencial equation thing
Robert says:
Dave made an interesting observation yesterday, to the effect that the "shared language" would require a culture built in a stable organization with long-term folks who know the shop and each other for years, etc. as a prerequisite and that the perspective of "hired gun" outside consultant architects (or folks with that kind of mindset - admit it - he was describing us.....?) would be entirely...
Robert says:
different from these folks.
Robert says:
That one also had the ring of truth, somewhere.
Adam says:
I don't buy it
Robert says:
There's a lot of stuff here which smells of needing more input from people. It seems too early to narrow down the questions to ask.
Robert says:
The notion that an ubiquitous language has to be embedded into a culture in order to work has a very strong possibility of being true.
Robert says:
Look at languages: They cannot survive without a living culture around it.
Adam says:
yes
Robert says:
In short, a culture must be there which buys into the need to speak the language....
Adam says:
but all you need is a domain expert role and you're good
Adam says:
perhaps one for each context if you're going down the DDD path
Robert says:
... which brings us right back to the crux of the matter: Selling the notion that all this stuff about developers and domain experts need to work together on the ubiquitous language thing and therefore need time, no waterfalls, etc.
Robert says:
It seems to be about acceptance in the "culture" of the company. Otherwise, no management support, etc.
Robert says:
If it weren't so, agile would rule the world.
Adam says:
not sure about that.. agile can't rule the world because of the personality types out ther
Adam says:
there are planners that will, by nature, go against agile
Adam says:
not even intentionally
Adam says:
it's not about "getting it"
Robert says:
No. It' can't rule the world because the principles which make it successful can only be applied by a small percentage of the best and brightest.
Adam says:
it's simply human nature
Adam says:
not even best or brightest
Robert says:
.... whereas a culture needs to include all participants in order to flourish.
Adam says:
yes
Adam says:
so agile is dead in the water
Robert says:
Heck, the stuff is too complicated.
Robert says:
No, not really. Whatever comes will have a lot to do with it.
Adam says:
it's achilie's heel is the way that it forces companies to work
Adam says:
hence lean is a more palatable way of working
Robert says:
Maybe. It's as if we are missing a way of doing things which follows the "natural contours" of how people and companies actually operate.

Monday, February 9, 2009

New Developers Are Just Over-Confident Children

Having a little one to look after has shed some light into how we get the software in most shops today. This quote is quite good in how it relates to our educational systems:

"For the true significance of Disneyland is that it reflects our notions of children - what they are, what is good for them, and what will please them. Children are a special class of human beings which came into existence with the industrial revolution, at which time we began to invent a closed world for them, a nursery society, wherein their participation in adult life could be delayed increasingly - to keep them off the labor market. Children are, in fact, small adults who want to take part in the adult world as quickly as possible, and to learn by doing. But in the closed nursery society they are supposed to learn by pretending, for which insult to their feelings and intelligence they are propitiated with toys and hypnotized with baby talk. They are thus beguiled into the fantasy of that happy, carefree childhood with its long sunny days through which one may go on “playing” - in the peculiar sense of not working - for always and always." - Alan Watts

Friday, November 28, 2008

QCon's DDD Track Gets an Shot in the Arm

While I did not formally attend QCon, I was invited to a couple of presentations by Greg Young. I saw some familiar faces there like Martin Fowler, Matthew Podwysocki, Jeff Brown, Jeremy Miller, Rod Paddock and others.

Eric Evans was very happy to see the Domain Driven Design track get some scalability/performance issues addressed. Greg's (at first glance) militant emphasis on Command/Query separation gave a clear and simple answer to avoid scaling issues when concentrating on designing and refactoring to a strong core domain. One key point to take away was the fact that our applications usually have 10X more read operations than write. This distinction is usually haphazardly represented in most designs we see today - and why we have so much money to make helping organizations scale up.

The one point I got from Greg some time earlier this year was to look at the business that you are trying to automate with an IT-free mind. That is, how would this be done (or how was it done long ago) with no computers and, instead, paper, pencils and people? They key information that is gathered out of that is the SLAs. Does that sales report need to have up to the millisecond information?

Greg has a link on his blog to the same presentation. I feel this one was more polished and was made more pleasing to the eye by incorporating some of David Laribee's use of images in stead of words. I'm hoping that the videos to the presentations get published soon. InfoQ, from what I hear, likes to spread out the release of videos over time to keep the site flowing with new material on a consistent basis.

On Saturday, Eric was kind enough to meet up with a handful of us and talk about DDD and life in general. He also toured around with us for a little bit. We saw some great views of San Francisco and a bit of the ocean shore.

It was a San-Fran-tastic trip!

Tuesday, September 16, 2008

GITting Around

I've been very busy for the last 3 months or so, but now can start to blog again.

A few things have changed. One of them is source control. GIT is working out really well. I highly recommend people drop SVN in favour of it. You can get an overview and tutorial from many places, so I won't bother repeating any of that. For folks developing in a windows environment, I can help a bit with some specific issues one might run into with the switch.

1. Upon installing MSysGIT, the AutoCRLF setting should be set to false before you do anything unless you are writing a multi-platform app. If you don't, you run into the danger of having your CRLFs changed to LFs in the repository. Then GIT will report file changes where there are none.

2. Stop all that typing (unless you want to strictly use the GUI via git gui):

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.me merge
git config --global alias.cl clean
git config --global alias.ps push
git config --global alias.pl pull
git config --global alias.rt reset
git config --global alias.rb rebase

If you want to configure bash on your machine, you could make aliases at that level - such as gci for "git commit".

3. Unless your SVN repo followed a strick trunk, branch, tag structure, don't bother with the standard layout option for cloning SVN with git svn. This leads to more headaches in the end. It's a long running process, so get it right the first time. Use --follow-parent to track moves, copies and renames.

4. Get hosting. Unfuddle is great as a free host environment. Don't get scared about the 200MB limit on the repository. GIT is very efficient and will take 1/30th the space that a SVN repo took. Unfuddle will email you when there are commits. It parses commit messages as well, so you can close an issue (tracked in unfuddle) with something like "closes #435". A commit with that message will close issue 435 in unfuddle. For $9/month you can get more users, 500MB limit and file attachments. The file attachment is a waste. I use www.drop.io to host files.

5. Setup your remote branches so you can simply "git ps" and "git pl" to send commits and receive commits from the remote repo. If you have a remote repo for the remote team over in India, you could set up something like this in the .git/config file for an "india" branch:

[remote "india"]
    url = git@mycompany.unfuddle.com:mycompany/outsourced.git
    fetch = +refs/heads/india:refs/remotes/india/master
    push = india:master
[branch "india"]
    remote = india
    merge = refs/heads/master

6. Read up on GIT. It's quite different from SVN.

Tuesday, August 19, 2008

Messaging Update

Seems more multithreading was the culprit.

with on thread one:
lock (dictionary) { dictionary.Add("bum", "a homeless person");}

and seven seconds later on another thread:
lock (dictionary) { if (dictionary.Contains("bum")) C.Out("defined"); }

... Contains returned false!

FTW??

... or was it IIS.

*** UPDATE Sept 16 ***

It was IIS. After adding tons of logging and tracking thread IDs, app domain IDs and process IDs, it was apparent that IIS would load up more than 1 either app domain or process for the app.

The long term solution was to house the app in a windows service that communicated over WCF. It was a quick refactor and opens the door for using WCF to push to clients. The new question is, does WCF hold threads? Or can you have 100,000 seldomly active clients for, say, a chat application?

Don't Give Up on Messaging

Today at work the dreaded words were uttered: "Well if it's not working by the end of the day lets just go for the pull every 1 second solution."

After implementing all of the long running processes to a pub/sub model, it was not pleasant to hear that. I wasn't going to just give up on that much energy poured into the current (and best) approach.

After adding tons of logging and hammering the server to see where the leaks sprung up, I cornered the culprit. If you are pulling from MSMQ ad nauseum, and you are in a multithreaded environment, you need to protect yourself from the thread unsafe methods "Send" and "Receive" on your MSMQ object - usually done by creating the MSMQ object for just long enough to do 1 operation.

The place where this was being done was not a multithreaded scenario, so I got rid of the creation and disposal of the MSMQ object between receives.

That did it.

The other lesson here is to be careful when you do have a multithreaded app pulling from MSMQ. You may see same messages go missing. I know there are other MSMQ features that guarantee delivery, etc, but I expect this integrity out-of-the-box.