Deleting a User in Windows 7
Note to self:
To delete a user in Windows 7, don’t use the UI (the postgres installer complains that the user still exists). Instead run the following command:
NET USER postgres /DELETE
Note to self:
To delete a user in Windows 7, don’t use the UI (the postgres installer complains that the user still exists). Instead run the following command:
NET USER postgres /DELETE
I just finished reading Great Business Teams: Cracking the Code for Standout Performance.
In Great Business Teams, renowned business consultant Howard M. Guttman takes you inside some of the world’s most successful corporations—Johnson & Johnson, Novartis, Mars Incorporated, and L’Oréal, to name a few—to discover how a powerful new high-performance horizontal model has changed the way leaders lead, team members function, challenges are met, and decisions are made. He also reveals how and why the organizations that have implemented this innovative team structure have become great companies, able to ride the crosscurrents during lean times and truly soar when opportunities arise.
As Agile team coaches or organizational coaches, we aim to increase the teams’ performance in an attempt to deliver better results. We improve quality, help the team work more efficiently, and have fun while delivering increased business value. Interestingly, many of the observations presented in Great Business Teams: Cracking the Code for Standout Performance are in line with the Agile values and principles. Here are some of the keys points to remember:
Isn’t this what we would expect of the Product Owner in Scrum?
Interestingly, the author positions the process by wish the leader achieves these objectives by asking tough questions such as:
Hence, the support of an external coach is useful and can help the leader ask powerful questions.
Members of great business teams think of themselves as accountable not only for their own performance but for that of their colleagues. Similar to the concept of self-organized teams, great business teams typically take accountability to achieve their objectives.
On high-performing teams, accountability goes well beyond the individuals recognition that he or she is part of the problem. It even goes beyond holding peers on a team accountable for performance. “Us” accountability includes holding the team leader accountable as well.
Once a leader with the right skills is in place and supported by a self-organized team, the group needs to agree on the rules they will play by. Obviously, the more structured its way of working together, the less likelihood of misunderstanding, conflict or costly delays and bottlenecks the team will encounter.
One important set of protocols related to decision making.
Straight-up rules such as “no triangulations or enlistment of third party”, “resolve it or let it go”, “don’t accuse in absentia”, and “no hand from the grave or second guessing decisions” can eliminate much of the unresolved conflict that paralyzes teams and keeps them from moving to a higher level of performance.
No matter how much it achieves, great business teams are never satisfied, they implement self-monitoring, self-evaluation, continuous improvement, and raise the bar. The continuous improvement process helps a highly performing team to keep improving its performance and deliver impressive results.
Having the right individuals in the right roles and establishing clear rules of engagement are not sufficient. The performance monitoring systems have to be inline with the expected behaviors.
- Team and individual goals have to be crystal clear;
- The necessary technical and interpersonal skills have to be provided;
- Performance has to be monitored;
- And feedback has to be timely an well thought out.
The book wasn’t written for an Agile audience but after reading it, it seems to me that applying the Agile principles would come close to cracking the code for standout performance.
Du nouveau dans l’équipe web @onf. On avait déjà fait des randoris et nous avons commencé les katas. Comme l’exercice était nouveau pour l’équipe, nous avons emprunté une structure d’atelier tdd. L’atelier que j’avais en tête était la session de craftsmanship de @slagyr lors du Scrum gathering à Orlando début 2010.
Pendant une rétrospective, l’équipe avait décidé d’explorer les katas le lundi suivant. Je leur ai proposé la structure suivante, répartis sur 1h45:
- 15mn : on regarde une vidéo de kata. En l’occurrencehttp://vimeo.com/16935085
- 45mn : chacun pratique seul ce kata dans le langage de son choix.
- 15mn : pause
- 15mn : quelqu’un se lance et fait le kata devant tout le monde
- 15mn : feedback du public au démonstrateur sous la forme d’un jeu de la perfection
Pendant la pratique, la consigne est de réussir à trouver un chemin qui puisse être parcouru en moins de 15mn.
Etant à l’ONF, Office Nationnal du Film canadien, les analogies évoquées par l’équipe après l’exercice ont tourné autour du film. La personne qui fait le kata s’est retrouvé tantôt réalisateur tantôt héros malheureux malgré lui. Les tests plutôt dans le rôle de l’agresseur. A un moment, un copier/coller malheureux s’est retrouvé être le méchant de l’histoire. Le public l’avait vu, pas le héros…
Ce que j’ai aimé avec cette analogie proposé par l’équipe et nouvelle pour moi c’est l’idée consistant à voir le kata comme un film dans lequel le scénario est autant important que le dénouement, voir plus important. En effet traditionnellement dans un kata, le héros gagne à la fin ; peu de suspence de ce côté. Le public est sensible au scénario, au chemin incrémental choisi par le réalisateur, et apprécie un tableau final original et des émotions fortes en cours de route.
Cela m’a donné envie de scénariser plus mes katas en empruntant des chemins dangereux, en revenant en arrière, … pour finalement gagner tout de même à la fin
.
Where ever we read about self-organized teams, it often seems to be a binary thing – either the team is self-organized or it isn’t.
When people suggest that the team should become self-organized, the suggested process is presented as fairly easy and straight forward.
If you are amongst the people who believe these previous two statements, I am sorry to be the bearer of bad news. In exchange, I will offer you a free reality check. Team self-organization is neither binary nor straight forward – self-organization is an evolutionary process that takes time.
We have been helping customers implement self-organizations for years and we have been pushing the limits within our organization. Based on that experience, I am sharing 7 levels of self-organized teams.
The road to self-organization is long but very rewarding. Each organization needs to determine how far they are willing to push the model and how fast they wish to move.
You may also be interested in this post: I don’t believe in self-organized teams…
After many hours trying to find a complete solution to execute some Silverlight automated tests on a TFS 2010 build server without any success, I was forced to try to build my own solution. Thanks to my colleague Mathieu Szablowski, a Microsoft ALM expert here at Pyxis, we were able to craft a solution by combining StatLight (an open source tool used to run Silverlight tests) with a custom activity in Team Build 2010.
Configuring Silverlight test execution
With StatLight, it is possible to run automated tests from a Silverlight Test Project (created from the Silverlight Toolkit project template) and write the results to an XML file. The general principle here is to configure your build to run the Silverlight tests and have the build react if something is wrong.
The first step is to download and install both the Silverlight Toolkit and StatLight on your build server.
Once this is done, open Team Explorer on the build server and follow the steps below:
1. In the BuildProcessTemplate folder of your TFS project, make a copy of the DefaultTemplate.xaml template file.
2. Rename the copied template to a name like SilverlightDefaultTemplate.xaml and open it to edit the workflow.
3. Go to Process -> Sequence -> Run On Agent -> Try Compile, test, and … -> Sequence and add a sequence named Silverlight Test Run just after the “If a compilation exception” box.
4. From the toolbox, add an InvokeProcess TFS activity in the sequence. Open the properties and enter the following name: Invoke StatLight.
5. Still in the properties, enter the path of your StatLight installation on the build server in the FileName property. Example: “C:Program Files(x86)StatLightStatLight.exe.
6. In the “Silverlight Test Run” sequence box, create a TestResultFile variable that will be used to indicate where to write and read the XML report file generated by StatLight. You can assign the following value: BinariesDirectory + “TestResult.xml.
7. You must use the “-x” parameter to indicate to StatLight what Silverlight test file (.xap) to run and the “-r” parameter to specify where to write the test result report. In the arguments property of your “Invoke Statlight” activity, enter the following line: “-x=” “” + BinariesDirectory + “SilverlightTestProject.xap”"-r =” “” + TestResultFile.
8. To ensure that your build service will be able to interact with the StatLight program, you must configure your build service to run in interactive mode. Open the TFS administration console, select Build Configuration, click Properties on your BuildService and select Run build service as: Interactive Process.
Your Run Silverlight Test workflow box should almost look like this:
Note: To see your custom activities in the workflow (xaml template file) without any errors, you must open your XAML template file in a project that reference your custom activie’s dll.
Now you can run a build and verify that Silverlight tests were run by checking that the XML report has been posted at the location specified by the “-r” parameter in the argument properties of the “Invoke StatLight” activity.
The next step is to create and configure custom activities in Team Build. The steps to accomplish this are well detailed in the following blog: http://www.ewaldhofman.nl/post/2010/04/29/Customize-Team-Build-2010-e28093-Part-4-Create-your-own-activity.aspx
For our specific need, our custom activities will call a class that will be responsible for parsing the XML file generated by StatLight and analyzing the test results to provide a list of all the tests that failed.
Then, you can use this class within the custom activities to retrieve the list of tests that failed. From this list, in the custom activities, just run the following code to fail the build:
Or you can run the code below to add a warning according to the desired behavior:
When you have completed your custom activity, you have to follow the configuration steps (step 11 to 25) mentioned in the Ewald Hofman blog’s mentionned above to complete the solution. You need to insert your custom activities immediately after the “Invoke StatLight” activity, instead of the “Get the Build” activity mentioned in the Hofman blog.
Here is an exemple of the result in Activity Log (detailed build information) with one failed test:
Until Microsoft provides a built-in alternative, this solution will enable our team nSemble to develop fully tested Silverlight applications using Agile engineering practices and continuous integration required to implement working software iteration after iteration.
Our organization is w
ell known in Canada, France, and other French speaking countries around the world as a leader with the Agile approaches. We are one of the few organizations in North America with over 20 full-time agile coaches (employees). For most part, our governance model relies on self-organization, the absence of hierarchy, and transparency in our decisions. This is what is well known from customers who have worked with Pyxis and potential employees who wish to join the organization, but what is much-less known is how Pyxis is a real-life laboratory for management, organizational behaviours, and team dynamics.
Most of the people who come in contact with people at Pyxis or who have worked with us will agree that the organization is different and throughout this year, I will share some of the inner working of our organization.
Pyxis helps software development companies to become places where results, quality of life, and fun coexist sustainably by being first and foremost an example of what it proposes to its clients and by coaching them.
We help our customers transition to Agile because we know it works – not because it is written in books but because we have been living the Agile way for 10 years now.
As the first post on the inner working of our Agile organization, I will explain the root cause of this difference. More posts will follow on self-organization, agile management, governance models, and growing a profitable organization by leveraging people’s inner motivation (remember autonomy, mastery and purpose?).
After observing the organization from the inside for over two years, I have had the opportunity to appreciate that we are fortunate (and one of very few organizations) to have a real-life laboratory for human experiments – no, not the kind usually reserved to white rats. Our structure allows us to experiments with governance models (the way people are managed) and observe first hand the organizational behaviors that arise and the impact on team dynamics. We pride ourselves as being an incubator for highly performing teams and as such, we often experiment new concepts within our organization before trying them out on our clients – which is not often the case in consulting, but I digress…
The first reason behind our uniqueness is the philosophy of the founder. François sees the world differently from most people and although he has an opinion on many topics, his real contribution is that Pyxis is not a profit-maximizing organization. Like every organization, Pyxis wishes to generate a yearly profit but that is not the reason why Pyxis was originally created. Pyxis was born with a purpose to improve how software development is made and more importantly to improve the quality of life of people within those organizations.
This is critical to understand the organization because it leaves rooms for experiments (making mistakes is a critical part of learning), for employee satisfaction (people truly enjoy working at Pyxis), and deliver great results (highly motivated employees deliver better results).
There are other reasons why the organization is different but in my opinion, this one is fundamental.
This is a follow-up on my blog about Framework-free dependency injection in Ruby.
Alright. So you’ve heard of AOP and never tried it before in Ruby or Python. Or maybe you tried it in Java a few years back when it was the new buzz word using an exotic framework and quit before it ever got working.
Today, I’ll present a rather simple way of doing method interception or AOP using Python and Ruby.
Suppose you are in the following context:
You are working on an existing App and are introducing the second method of your controller and it now looks like this :
class TweetsController:
def display_users_tweets(self, request):
user = request.user
if not user.is_logged_in:
return redirection_to(login_page)
user_tweets = Tweets.get_all_tweets_for_this(user)
return rendered_template(tweets_template, using=user_tweets)
def display_users_most_popular_tweets(self, request):
user = request.user
if not user.is_logged_in:
return redirection_to(login_page)
users_most_popular_tweets = Tweets.get_the_most_popular_tweets_for_this(user)
return rendered_template(most_popular_tweets_template, using=users_most_popular_tweets)
Alright. Not too bad. But in only two short methods we already have some code duplication.
Then you think to yourself : “I know, I’ll use my charming IDE and extract methods” and get the following result :
class TweetsController:
def required_login_redirection(request):
if not request.user.is_logged_in:
return redirection_to(login_page)
return None
def __user_tweets_template_rendered_for_this(self, user):
user_tweets = Tweets.get_all_tweets_for_this(user)
return rendered_template(tweets_template, using=user_tweets)
def display_users_tweets(self, request):
user = request.user
return required_login_redirection_for(user) or self.__user_tweets_template_rendered_for_this(user)
def __most_popular_tweets_template_rendered_for_this(self, user):
users_most_popular_tweets = Tweets.get_the_most_popular_tweets_for_this(user)
return rendered_template(most_popular_tweets_template, using=users_most_popular_tweets)
def display_users_most_popular_tweets(self,request):
user = request.user
return required_login_redirection_for_this(user) or self.__most_popular_tweets_template_rendered_for_this(user)
This is much cleaner. We have encapsulated the redirection verification logic responsibility in a single method.
This work pretty well for our simple case. But what if we had more calls in the controller methods ? What would we do then ?
The issue with what we did is, we did not attack the problem from its root.
Requiring the user to be logged in is a precondition for executing this method.
Then, wouldn’t it be nice to be able to require the user to be logged in prior to a single line of code being executed in each of these methods ?
This is one of the times when AOP, method interception, wrapper methods or decorators come in handy.
Remember the days when we had comments like these on top of our functions ?
/*******************************************
* Pre-condition : x most be a positive int
********************************************/
Wouldn’t it be nice if you could replace all of this dead text with executable code ?
With Python, you can do so by using decorators.
Your controller would then end up looking like this :
class TweetsController:
@requires_user_to_be_logged_in
def display_users_tweets(self, request):
user_tweets = Tweets.get_all_tweets_for_this(user)
return rendered_template(tweets_template, using=user_tweets)
@requires_user_to_be_logged_in
def display_users_most_popular_tweets(self,request):
users_most_popular_tweets = Tweets.get_the_most_popular_tweets_for_this(user)
return rendered_template(most_popular_tweets_template, using=users_most_popular_tweets)
Wow. Me likes that ! If you’ve never written a decorator in Python here is a quick tutorial on how I wrote this decorator.
def requires_user_to_be_logged_in(function):
def requires_user_to_be_logged_in_wrapper(self,request, *args, **keyWordArgs):
if request.user.is_logged_in:
return function(self,request, *args, **keyWordArgs)
return redirection_to(login_page)
return requires_user_to_be_logged_in_wrapper
Some explanation :
Alright. Now that we have seen how cool implementing a decorator in Python is, let’s see how we could do this in Ruby.
class TweetsController
def display_tweets
puts “tweet tweet tweet”
end
def display_users_most_popular_tweets
display_tweets
end
display_users_most_popular_tweets = requires_login(:display_users_most_popular_tweets)
end
In the above example, we simply take the display_users_most_popular_tweets function, and reassign it to the original method decorated by the requires_login function.
How do we decorate the method ?
def requires_login(func_name)
old_method = instance_method(func_name)
define_method(func_name) do |*args|
if user_is_logged_in
old_method.bind(self).call(*args)
else
redirect_to_login_page
end
end
end
Just like in the Python example, we use an if statement to see whether or not not we need to do a redirection. If not, we call the original method using the same parameters it was originally called with. Otherwise we override the call completely and call the redirect_to_login_page method.
-Nicholas Lemay.
* Of course if you are using Django you already know about the very useful @login_required decorator.
** If you are using Rails, you could use the kick-ass before_filter in your controller and apply the requirement to be logged in to the proper controller methods.
As a leader, I believe it is important for people I work with to know my beliefs. As the leader of a self-organized company, I want to share those beliefs.
I personally believe that:
What are your beliefs?

This is a question I received from Etienne in part 2.
“But when there’s a problem with the behavior of a New Feature, how do you call that?”
It depends. When talking about a new feature, my guess is that you are talking about a feature that has yet to have been released.
In that case, even when using the bug type in a backlog, I would never raise a bug on a feature that has yet to have been released. The feature is not delivered, thus the bug is simply remaining work that has yet to have been addressed in order to be able to deliver the feature.
In that case, I would either add the details of the strange behavior in one of the existing tasks or create a new task to the story related to this behavior.
One strange thing that I have seen being done was team members raising a bug mid-sprint to be fixed later in the sprint or in another sprint(!) for a feature that got broke by the development of a new feature.
Why people would do this is beyond me. This is allowing the software to regress on purpose !
I would rather follow the Primum non nocere(first do no harm) maxim that is used in medicine.
Ideally, introducing a new feature should never make the software regress. At least not on purpose. Of course, there will always be times unwanted behavior is introduced without us knowing.
As always, having a fully automated test suite goes a long way in making it much easier for a team to discover the regression they are introducing as they go along and to make adjustments along the path.
I’ll be back soon with more feedback on how we are using our bug free backlog within team Sosoft.
Feel free to give us your feedback on our approach. Maybe we’re just a bunch of loonies after all
-Nicholas Lemay.
I finally finished writing this post that I started just after Halloween – not because it is long or complex but simply because other things were more of a priority. Anyhow, back in October and in the spirit of Halloween, we had decided to rent a Halloween movie that was somewhat kid-friendly. Our selection ended up being Shaun of the Dead, a 2004 movie. Don’t worry, I haven’t turned into a movie critics and I won’t pretend this movie ranks anywhere in my top 3,000 favorite movies – that’s not the point here – but the movie made me realize how many (most?) employees are zombies.
“What the heck are you talking about?”, you ask.
I’ll spare you the gory details but there’s a scene at the end of the movie were the zombies end up being captured and turned into normal workers. The scene is great as it portrays the zombies perform mindless (and numbing) tasks while people around them don’t seem to notice them or even mind them at all.
[You may also be interested to read what Derek has been publishing on the topic of zombies in the workplace]
To simplify things and explain the analogy I came up with after watching this silly movie, I will start by explaining that in my opinion people (employees) fit into one of three categories.
Although at first, we may believe that everyone fits into this category you may be surprised to find out that it isn’t so. LIVING people are those who take full responsibility of their life while they don’t necessarily travel the path the most followed. LIVINGS do a lot of introspection to make sure they are living the life they truly want and they aren’t afraid to step outside their comfort zone.
In organizations, the LIVINGS aren’t afraid to look for a better way to do things and challenge the status quo. They aren’t happy just mechanically doing their job and they look for challenges that will make them grow professionally. You can find LIVINGS at every levels of an organization.
Although not measured scientifically, I believe there is only 20% to 30% of the working population that are real LIVINGS.
At the other end of the spectrum are the ZOMBIES. Contrary to the LIVINGS, the ZOMBIES are dead workers. They perform routine tasks without getting intellectually and/or emotionally involved. No matter how old they biological body actually is, the ZOMBIES are counting the days ’til retirement – or if retirement is more than 5 years away, they are counting the days until their next vacation, until next week-end, and sometimes the hours until the end of the day.
In industrial times, ZOMBIES were seen punching in and punching out of their day job. With the advent of modern technology and the disappearance of the punch clocks, ZOMBIES can pass their time updating their Facebook page, sending useless emails and performing tasks on their computer to keep their body active since their soul has died.
Although not measured scientifically, I believe there is between 20% to 30% of the working population that are dead ZOMBIES.
Somewhere between the LIVINGS and the ZOMBIES is the majority of the working population. The LIVING-DEAD are very difficult to distinguish from the LIVINGS as they seem to perform their tasks with some interest. The main difference between the LIVINGS and the LIVING-DEAD is that the latter were once part of the LIVING population but at some point in their career, their brain has been captured by ZOMBIES – just like in the Shaun of the Dead movie, once a living is bitten by a zombie, there is a gradual decline toward becoming a full-fledged zombie.
Although not measured scientifically, I believe the majority of the working population (between 40% and 60%) are LIVING-DEAD.
Contrary to the movie, the LIVING-DEAD and the ZOMBIES can come back to becoming LIVING individuals but the road back is difficult. The sad news is that most large organizations are based on rules, on controls and on structures that help breed ZOMBIES by converting LIVINGS into LIVING-DEAD. The good news is that there are ways out – I know, I used to be a ZOMBIE myself…
What category do you fit into?