Sunday 28 December 2008

Don't Tweet Drunk


The latest meme on Twitter is for twitterers to blog about Twitter and then tweet it so that it can be retweeted. We all sit around and read it and retweet in agreement or scroll on with a little bit of passive aggression.

Since I'm an individual just like everyone else, here is my Twitter post of choice. It addresses the eternal question asked by those outside the twitterverse about what this is all about - What is Twitter and why should I use it?

My first response to that is usually that you don't have to use it. You could go on for the rest of your life not using Twitter and not feel as though you have missed anything. On the other hand, if you do try it out then there are a few things you will experience and gain that are not so easy to list out and debate over Chinese food. These things are additive, like MSG. They add flavour but some people may not react well to it.

Networking
This is networking in whatever sense you want. If there something that you are in to then there are micro-groups on Twitter that share in your passion and will not hesitate to help or support you with your common pursuit. If you want to connect with people around the globe who can encourage your "thing" then Twitter is your forum.

I use Twitter to network with geek girls; software engineers, ThoughtWorkers; friends around the world; and family.

Reading
I use Google Reader less and less to find things I want to read when I'm not rushing around and have time to stop. Instead I steadily open in my browser the links that people tweet about that sound interesting to me. These are sometimes things they produce but most often are links to other places on the 'net. From this I find new things to read and subscribe to that I would not have found on my own in the lifetime of the universe. The Interblag is a big place and following people with common interests can introduce a new source of information to the pool you have already collected.

Thinking
I often find it useful to share my thoughts with people on Twitter and then discuss them in order to articulate what I think. There are many intelligent and switched on people out there who will actively discuss things with you.

Yeah, it is nice to talk about what you are thinking at the time but the coolest part is listening to interesting people bring up ideas that make me you think. Ideas that challenge your own thinking. Ideas you may never ever agree with but are willing to listen to because it's not being shoved down your throat.

On this point, you must be very careful not to get caught up in group-think. This is very easy to do on Twitter. People do complain regularly that there is too much of this on Twitter and that us being to nice and cuddly towards each other is killing original and critical thought. I do see the danger but also believe that an encouraging environment that allows you to test your assumptions and be wrong without fear of the fail whale pushes creativity and individuality. That in itself can overcome the memes that drift in and out of this growing nest of communities and networks.


Twitter is not for everyone but there is a place for you if you choose to follow. It's something different to every person. For all I've expressed here, there will be someone who sees it differently and that's just Twitter.

Try twitter. I recommend it.

Tuesday 9 December 2008

Learning about Testing ASP.NET MVC


Working on my first commercial implementation of ASP.NET MVC Beta has been rewarding and frustrating to almost even degrees. Learning to test the MVC framework after hearing the promises of Microsoft and the choir has proven that it is still young and the road is long. It feels like being back in .NET 1.1 land again but as an eternal optimist, I see that as meaning that ASP.NET MVC has a promising future. As promising as C#, which had humble beginnings.

Abstracting the business value and corresponding actions in to the C part of MVC has meant that the code behind an ASP.NET Page is reduced to nothing more than specifying the type of model that the strongly typed View uses. That solves an enormous amount of problems that came out of the pre-ASP.NET-MVC world. In particular the classic-ASP-like tendency to put all logic straight in to the events in the code-behind with little to no abstraction. Since you can not instantiate a Page object outside of the ASP.NET framework, it was impossible to unit test the controlling logic in the code-behind. When I have walked on to a project and seen the 3000 lines of code nested in page events, I knew it was almost impossible to safely refactor let alone extend the functionality. All changes in that case had to be additive and in no way morph logic so that nothing legacy would be broken.

The ability to test Controllers has pushed that code out in to a testable .NET class that can be instantiated independently of the framework and then easily tested. That's brilliant if you weren't already doing that but most of us were. I do commend Microsoft on forcing some sort of design on to us but as usual it's all mechanism and no policy. It's another easy way to say "put it all here" but also test it.

What I want to see out of future ASP.NET MVC releases is the ability to test Views with simple xpath searches and annotation validators on Models that feed through to the View. Yes, it's not there now but it will be soon as we can see in MVC Futures. This is not a case of Microsoft missing the point at all. They just have to release something and then they will add to it. They have shown their responsiveness to community feedback. If only they wouldn't refer us to stackoverflow.com.

From the conversations we have had with Microsoft, they have started by saying that it's only the Controller that needs testing and that Views should be tested by a UI testing tool like Selenium and that models have accessors only so don't worry about them. There is then the realisation that testing your View as an abstract concept is not a bad one since it is faster and most efficient than using the UI tools with their overhead (even headless). It certainly will let us test state more efficiently. As for models, validation is so important that the lack of access to annotation validators has resulted in an excess of JavaScript (beit jquery) in our application and I'm not convinced that is a good thing yet. Maybe that's my C# bias kicking in.

I for one am looking forward to the MVC futures becoming MVC present. Until then, all the positive parts of this new framework like the ease of integration of the Model, View and Controller make up for all the things I still want. It saves me the time I used to spend on implementing MVC in the old world.

This leaves me extremely optimistic about the future of .NET web development. Until then, let's do our best to avoid the fat Controller.

Sunday 23 November 2008

You Inspire Me

Photo by aeter used under the flickr creative commons license

I was recently asked by one of my colleagues at ThoughtWorks, who my female role models are.

It took a bit of thought to come up with famous people who I want to grow up to be or who I aspire to and I felt like I was picking the same old cliches that everyone picks. The interesting thing that was going on as I looked for inspiring political leaders was that I kept going "oh, I can't pick her because she's a friend of mine".

Then I realised that the people who inspire me are often people you know. People who you look towards for inspiration. I keep reading lists of women in IT who rock but they all seem to be stacked with people from the US and the UK. Here are mine...

Catherine Eibner
I met Catherine at the first Girl Geek Dinner held in Sydney. She ran her own successful business at the time. Now she is an evanglist for Microsoft in the Dynamics space. She travels, speaks, blogs and is an active member and organiser of many community groups including Geek Girl Blogs Podcasts. On top of all of this, she is a mother of a 3 year old boy who never stands still for more than a minute. She is always smiling, even on 2 hours of sleep.

Her best advice to me: "Exhale and enjoy life. We have it pretty good."


Anna Liu
Anna is the lead of the Microsoft evanglisits in Australia. She's the only person I've ever seen the rest of them truly jump for but they all adore her. Anna and I first met at a lunch for International Women's Day in 2008, that was organised by a splinter group who were over the non-technical dominant IT women's group in Sydney. We first bonded over the colours we had worn on the day and then over the idea that this town needed a group for the niche geek girl idea. Through this year, she has supported GGD Sydney and me by arranging Microsoft sponsorship and just being someone who I could send an email to and have a chat. When I saw her speak on a panel for the first time, she inspired me to want to get up there and do it too. Going to lunch with Anna and friends is always blogable but I've learnt to hold myself back :)

Her best advice to me: "Keep doing what you are doing."

Lindsay Ratcliffe
Linz and I work together. At least we used to at a previous client. Lindsay is the guru of User Experience at ThoughtWorks and in Australia through her involvement in the Australian Usabilty Group. She is a huge supporter of the women she works with and most probably the person TW Australia will attempt to clone first when the technology is in beta. Her skills in user experience design have shown me that building applications is less about what the devs think is cool technology and more about how much people enjoy using your final application.

Her best advice to me: "Always think about motives behind why someone may say something nasty to you and throw it away if it just doesn't feel right."

Jodie Miners
Jodie specialises in construction IT. She has many interesting insights in to women in IT and working in male dominated environments and is always positive about our industry. I met Jodie at the first GGD Sydney and we have grown to be good friends. She is actively involved in organsing the IT communities in Sydney and inspires me every time I feel a little tired with my own organising. No matter what happens, she will turn up and support her community because as she has told me, it's about people. After sneaking her in to the TechEd08 party and competing to meet the most new people in a night, I've learnt from her that it's cool to be a geek amongst geeks and never have to apologise.

Her advice to me: "Just keep organising it and they will come."

Pia Waugh
Pia is one of those people who has a wikipedia page, as you do. She's an open source girl but her and I have always found a lot of common ground. I even spare her my rants about giving stuff away for free since I respect her so much. She is major force behind the OLPC in Australia. That includes work in Aboriginal commuities. We met at dinner 0 for GGD Sydney. Since then we have supported each other's causes and even gone to a tupperware party together.

Her advice to me: "Geeks rock! Be proud of it."

Kate Carruthers
Kate and I just keep running in to each other, at work and in life. I guess the universe was going to get us together sooner or later. She's the most relaxed woman I know yet is on the ball and always ten steps ahead of everyone else. She works for herself as a contractor, a writer and an avid social networker. She is inclusive and supportive to all the people around her and has mastered the ability to get her point across strongly without stepping on a single toe. A must in what we do.

Her best advice to me: "Don't worry about it too much. Ask others to help and they will."

Bronwen Zande
Bronwen and I met virtually through Geek Girl Blogs - the biggest women's blog aggregator in the world. She started it. She also works for herself as the expert on Microsoft Live services in Oz, plays volleyball and runs the very successful Brisbane GGD. When we first met IRL after emailing and tweeting for months, she amazed me. She's young, organised and brilliant and the first person in a while who made me want to build a time machine and go back in time to tell myself to do more in my mid-twenties.

Her best advice to me: "Ignore the idiots."

Allison Young

Alegrya as she is better known in social networking circles is the most popular geek girl in this town. She only recently graduated from a degree with honours in IT and is working in her dream job. If only I had known what I wanted at her age. She's energetic and an achiever. Being around her is fun and educational.

Her best advice to me: "You should tweet that."


Who inspires you?

Wednesday 19 November 2008

What if they just don't get you?


Experiencing feedback is really like it sounds. You are holding the microphone of life and you turn to face the speakers. They scream and squeal in agony as the sound makes the sound of the sound making the sound.

Feedback is good for me. They all say it is. People who I want to be when I grow up.

Some people put effort in to it and make comments that will haunt but improve you.
Others take the 95% of you what is good and put that aside. Then they take a gigantic magnifying glass and hold it up so the Sun burns the 5%. They want to fix you.

Here is my view of feedback in a formal and informal sense...

  1. Always have real life examples for someone when you stand before them and compliment of condemn them. Both situations require honestly and example to show you sincerly care;
  2. Don't put it in writing if it burns - oh how it burns. People don't need to see something in writing that could have been improved with a conversation. Sometimes, taking the time to sit and drink coffee and talk to someone can mend anything you think needs mending. Remember to tell them that if you didn't care then you would not bother sharing;
  3. Mean well. Always mean to help or improve and share. Otherwise, there is no point in bothering.
How do you see feedback?

Saturday 15 November 2008

Making your own VS.NET nunit Test Project Template

Returning to .NET has been exciting after a long time away playing in Java and Ruby land. I can't say I'll miss XML config files and all that junk.

First thing I did after creating my first ASP.NET MVC project was to add a template to easily create a project to test it. The new template will create a class library project with MVC, nunit and my mocking framework of choice Rhino included and ready to go.

When you use VS.NET 2008 to create an MVC web application, it asks if you want to add a testing project to go alongside. Unfortunately, the only choice of test project template you get is the Microsoft one and I like nunit much much more.

This is how we do it...

Set the project up the way you want it to appear new
  1. Create a new C# class library project. Give it a general name which will apply to your test project template.
  2. Add a reference to the System.Web.MVC dll.
  3. Add a reference to the nunit.framework dll.
  4. Add a reference to the Rhino.Mocks dll.
  5. Set the Copy Local property for all of the above dll references to True.
  6. Create a Controller folder under the project root.
  7. Add a class HomeControllerTest to the Controller folder.
  8. Add unit tests to cover the About and Index actions.
  9. Build your project to get the binaries.

Export the project template

  1. Go to File --> Export Template and use the wizard to export the template. Call it NUnitTest. You will be told where the zip file is saved to.
  2. Be sure to chose the option to include the icon.
Importing the new template
  1. Move the NUnitTest.zip to %Program Files%\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\Csharp\Test\1033. This might be different for you.
  2. Quit Visual Studio.
  3. Open a command prompt and navigate to %Program Files%\Microsoft Visual Studio 9.0\Common7\IDE.
  4. Execute devenv /setup and go make a cup of coffee.
  5. If you now open VS.NET 2008 and create a new project, you should be able to see your template show up under the C#-->Test directory.
  6. Add the registry key below by copying the text in to a file and calling it nunit.reg. Run this regfile to add the key. You can add it manually also using regedit.


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\MVC\TestProjectTemplates\NUnit\C#]
"Template"="NUnitTest.zip"
"Path"="CSharp\\Test"
"TestFrameworkName"="nunit Test"
"AdditionalInfo"="http://msdn2.microsoft.com/en-us/library/ms243147(VS.80).aspx"
"Package"=""

Monday 3 November 2008

Bar Camp Sydney

Barcamp Sydney is on again...

Details

  • Who? Anyone who is interested in technology, the Internet and related topics. We have room for more than 200 people, so bring your colleagues.
  • What? A good opportunity to share ideas and projects and to work with like-minded individuals.
  • When? 9am-6pm on Saturday 15 November 2008
  • Where? BarCampSydney will be held at the Roundhouse at UNSW, Anzac Parade. See WikiMapia for details about the location.
  • Getting There Lots of buses to & from Central or Elizabeth St (39x, L94). Click HERE for details on busses from the City (QVB) to UNSW to get you to there on time, and see the Univeristy Busses Page for details about getting back to the city. For Parking see the University Parking Map - All day parking is on the upper floors of the Barker St and Botany St Parking Stations and will cost you $12 for the day. Plenty of nearby street parking just over Anzac Pde.
  • Website? The BarCampSydney blog is located at: www.BarCampSydney.org. We'll be posting updated information about the event there.
  • On the day A map of local food, drink and transport here. wino kredyt mieszkaniowy sprzedam mieszkanie sprzedam bilet

Friday 31 October 2008

Finding our target velocity without black magic

To be in the moment (and I always like to be), here is a post for Halloween that removes the black magic from the estimation process and determines initial velocity.

Photo by euart used under the flickr Creative Commons license

Starting a new project and being around from the beginning is always an eye opener. If you are involved in estimation then it is also like signing a contract. Breach of promise to reach the guessed random number can be punished with overtime and a sense of failure. Heaven forbid a late project especially if it is fixed price.

I've started a new project and we are working out how long it will take and what resources are required. For the first time, estimation seemed more deliberate and less like guesstimation.

This is how we did it...

What you need to start estimating:
  • The latest draft of the master story list - a list of the all the stories known so far, written like "AS a person using the system, I WANT TO do something functional SO THAT business value is achieved";
  • As many members of the delivery team as possible - including engineers, testers (QA), business analysts (BA) and even business;
  • Agree on the length of an iteration;
  • An estimation deck - usually consisting of cards representing the Fibonacci sequence between 1 to 13. If you don't have this then use your fingers with 10 fingers = 13;
  • A willingness to estimate in points and not days;
  • A big table for everyone to sit around and to spread the cards on;
  • Snacks - this can take a while.
Next you get the team to understand what you are building, both high-level technically and what the business wants:
  • Sit everyone down at the table;
  • Have the BA or Project Manager (PM) read through every story;
  • Allow questions to understand what the story means;
  • Rewrite or breakdown stories in to small functioning parts;
  • Write out all stories on 4x6 cards.
Now you start throwing numbers around:
  • Re-read the stories;
  • Get everyone involved in delivery to do min-likely-max estimates and write them on the back of the cards- minimum points if all goes blissfully well, likely points in a realistic situation and maximum points if all hell breaks loose;
  • For each story work out volatility - low, medium or high;
  • For each story work out completeness - complete, incomplete or unknown;
  • For each story work out complexity - simple, medium or complex;
  • Engineers group the stories in to what they think they could complete in one iteration. Use about 5 groups - dependencies and iteration order are not important. Just look at the size of the stories and group an iterations worth;
  • PM secretly adds up the total likely estimated points from the groups and works out average iteration velocity;
  • PM lays out different groups of stories that would fit in to the new predicted velocity - note this is not the teams actual velocity because that isn't known until they actually start banking points;
  • The engineers looks at the groups and decide if they are too big, just right or too small - it's a little like Goldilocks;
  • Rinse and repeat - this can be re-estimated and sorted again to double check numbers.

Monday 27 October 2008

Don't Embrace Mediocrity

used under the flick creative commons license by caravinagre

I wrote a post a while ago that somehow got on to a few of the IT aggregators and resulted in an influx of readers, many of whom were interested in what was a popular topic at the time. That attention brings out the good, the bad and the ugly on the Interblag.

A friend of mine who regularly blogs about food on our work blog feeder has also recently been attacked by the freak-geek police and told her blog doesn't belong as it isn't technical. Amusingly enough, it wasn't even a work colleague who said this.

After spending an hour listening to Edward de Bono talk about why arguing a point doesn't always produce the best outcome, I'm starting to see that point of view reinforced online. It was probably always there but it seems relevant to me now. So let's discuss it and also annoy the people who think that only code snippets belong in blog posts.

Are any new ideas being added to the blogosphere? Is blogging dead? If it is and there are no new ideas then what or who killed it?

It seems that if you are established, usually not through rising on the Internet but through a more traditional (and rightfully respected) publishing background, then your opinion is rarely knocked online. Social proof or tangible proof. If you are more like the bloggers I see out there with new ideas and different ways of thinking and challenging the established norm, then your words will be hammered. Interestingly enough, it is a small enough group who attacks so it doesn't really matter most of the time. It does however feel like that constant beating at the edges of the blogosphere, is dulling the interesting sparky parts.

It even has the potential to silence any new comers who think they might have something to say and haven't quite found their voice. Instead those who are happy with the way the Internet appears to be to them want to keep it that way. Maintain the average. Silence the creativity. It's an obscure notion to tell someone else not to speak so I will not tell them not to speak as they so happily feel the right to do to others.

Instead, I encourage any of you out there with something to say to stand up and say it. Ignore the push toward mediocrity. I paraphrase the wise and powerful Madonna in saying: Express what you've got, baby ready or not. Express yourself!

This one is better: ruby-net-ldap

After posting a quick how-to about Ruby-LDAP, I received a couple of very helpful comments that pointed me towards ruby-net-ldap. This is a pure Ruby LDAP library that is stable and has good documentation to help you along. It is the best Ruby LDAP gem out there and I've been through almost all of them to get to this point.

Here is a simple search for an organizational unit with the name "marketing"...


require 'rubygems'
require 'net/ldap'

def ldap_search

 ldap = Net::LDAP.new
 ldap.host = "localhost"
 ldap.port = "389"
 ldap.auth "cn=Directory Manager", "password"

 filter = Net::LDAP::Filter.eq( "ou", "marketing" )
 attrs = [ "ou" , "objectClass"]

 ldap.search( :base => "dc=mycompany, dc=com", :attributes => attrs, :filter =>
 filter, :return_result => true ) do |entry|
   puts entry.dn
 end

end


Here is the code to add an organizational unit under the base node...


require 'rubygems'
require 'net/ldap'

def ldap_search

 ldap = Net::LDAP.new
 ldap.host = "localhost"
 ldap.port = "389"
 ldap.auth "cn=Directory Manager", "password"

 dn = "ou=marketing, dc=mycompany, dc=com"
 attr = {
   :ou => "marketing",
   :objectclass =>"organizationalUnit"
 }
 ldap.add( :dn => dn, :attributes => attr )

end



Check out the rest of the documentation for pretty good examples. This is the library I recommend. In my situation, I'm using ruby-net-ldap to import data in to, manipulate and query data in an OpenDS LDAP server.

Sunday 5 October 2008

Ruby-LDAP

I said it would never happen but here is another Ruby blogpost for the ThoughtWorks pool. In my defense, there really wasn't much help out there on this topic so my pair and I decided this had to be posted. His post on what we tried in order to make Ruby talk to LDAP is over there.

The Bits
OpenDS is Sun's LDAP server. We chose this as our LDAP server because it is the one most likely to sit behind the OpenSSO Single Sign-On implementation we are populating, querying and binding to. It is written purely in Java and provides a bunch of useful shell scripts and a Java API to do the things we want to do. This will allow us to test our Ruby-LDAP implementation independently of our solution.

OpenDS has a nice installer with a friendly setup wizard. If you want to script the install then run this from the root of the installation directory:


>$ './setup --cli --no-prompt -p 1389 -D "cn=Directory Manager" -w "password" -b dc=example,dc=com -a --doNotStart'


Ruby-LDAP was the friendliest and most sensible choice because it was the most pure Ruby choice which allowed us to do things the Ruby way. RJB let us use the OpenDS libraries but was too much like writing Java in Ruby and involved running another JVM on the production server it is destined for. If we were to go that far then we'd have opted for JRuby to do the bridging. After ActiveLDAP flat out refused to acknowledge OpenDS and would only play well with OpenLDAP, that was written off. Ruby-LDAP is a written in C so it isn't a nice gem install but instead takes a bit of making and shaking to get going.

Here is how to install it from the command line once it is downloaded and unzipped:

>$ ruby
ruby-ldap-0.9.7/extconf.rb "."
>$ make
>$ make install

The Required Basic LDAP Knowledge
LDAP is like a very simple and slightly stupid database for storing Identity information. It does not have transactions. You can't query it with SQL. It is a tree. It does have a schema.

Understand your LDAP schema. You can customise it. It is made up of nodes that are defined by object classes and attributes. These include but are not restricted to: Organization; OrganizationalUnit; and Person.

Distinguished Name (DN) appears everywhere when you are dealing with LDAP. It is the unique name given to a node in the LDAP tree and describes the exact path from the node to the root. A DN starts at the node and walks up the tree. It looks like: uid=damana,ou=australia,dc=mycompany,dc=com

This is an LDAP glossary that was useful in deciphering the LDAP maze and nomenclature.

Adding an Organizational Unit
To add an organizational unit:


#/usr/bin/ruby -w

require 'ldap'

connection = LDAP::Conn.new('localhost', 1389)
connection.bind('cn=Directory Manager','password')

record = [
LDAP.mod(LDAP::LDAP_MOD_ADD,'objectclass',['organizationalUnit']),
LDAP.mod(LDAP::LDAP_MOD_ADD,'ou',['australia
']),
]

connection.add("ou=branches, dc=
mycompany, dc=com", record)

connection.unbind


Adding a User
To add a user to an organizational unit:


#/usr/bin/ruby -w

require 'ldap'

connection = LDAP::Conn.new('localhost', 1389)
connection.bind('cn=Directory Manager','password')

record = [
LDAP.mod(LDAP::LDAP_MOD_ADD,'objectclass',['person']),
LDAP.mod(LDAP::LDAP_MOD_ADD,'cn',['Damana Madden']),
LDAP.mod(LDAP::LDAP_MOD_ADD,'cn',['dmadden']),
LDAP.mod(LDAP::LDAP_MOD_ADD,'sn',['Damana Madden']),
]

connection.add("cn=Damana Madden ou=australia, dc=mycompany, dc=com", record)

connection.unbind


Deleting a User
To delete a user:


#/usr/bin/ruby -w

require 'ldap'

connection = LDAP::Conn.new('localhost', 1389)
connection.bind('cn=Directory Manager','password')

connection.delete("cn=Damana Madden ou=australia, dc=mycompany, dc=com")

connection.unbind

Monday 1 September 2008

Is there no hope for stoopid programmers?


Recently, we (on the Interblag) have gone through another wave of controversial discussions about people who shouldn't be writing code and should consider choosing a different career that is not in Technology. There has been heated debate and a lot of elitism expressed but what we have not talked about is if there is some other way for these developers to be used. I would like to consider and work my way through this idea.

There are many different levels of developers. My usual way of dividing up developers is in to two groups: Software Engineers and People Who Waste Air. This is the result of years of running in to and over people who don't belong in my profession.

On my long commute to and from my current engagement (in south-Brisbane/Chatswood), I've had the time to wonder...
  • Why don't some programmers belong in IT?
  • How do we encourage them go somewhere else?
  • and if we can't then what can be done to make them useful and less destructive?
Let me work through this in a slightly more succinct way than I have on the train and without the interruption of smelly passengers who like to rub up against my leg. That's another blog post for another time or just follow me on twitter for my daily #TrainTalk.


Why don't some programmers belong in IT?


This is not a new list of reasons. Most discussion seems to settle on the idea that there are people who are always learning and adopting new ideas. They do this in order to hone their craft and improve the journey - the journey from idea to software for the builders and the clients. These people are probably you. Yes, you reading this blog. You are a small minority of people who are constantly learning and thinking.

There are also people who don't learn or they once did and that was enough. That usually means that they don't know what's going on now. I've heard people say...
nothing has changed since the 70s in computing
...and I really want to slap them with the Internet.

Then there are those people who have brains but they've blue screened or they just don't think the way you need to think to do this job. If the idea of expressing something in code is difficult every time then that's not good. One highly paid contractor I worked with in 2005 said
programming is a matter of trial and error. You write it and then you try to get it working over and over again until it all of a sudden does.
That's not how it works if you have a clue at all about what you are doing. If this is how the job looks to you then look for another job.

The other prevalent characteristic that rears it's ugly head and hisses at us, is the unwillingness to alter the way things are done. Change is difficult for everyone. I struggle with it in many ways, every day. Change is not worth it just for the sake of change and that's not how I like to do it. I like the idea of learning from what I've done before. Retrospection and learning are reasons for change. Many programmers I've worked with who probably should not have been there were not open to adjusting their ways in any form at all. It was the way they were comfortable and any motion made them very insecure.


How do we encourage them go somewhere else?

The solution I usually see to getting rid of people who are making a mess of their career in IT or making a mess of your project, is to have the team push them out. First assumption here is that the rest of the team is able to judge that a person is not worthy. The Dunning Kruger effect describes when people who don't know much think they know a lot, while those who know a lot realise how little they actually know. What if your team really believes in themselves but don't have the ability to judge up? What if they don't know enough to know if an engineer is good?

indexed.blogspot.com shows the Dunning-Kruger effect visually

Sadly, I have seen that a lot. Teams of people who have decided that they are brilliant and have nothing more to learn. Anyone who disagrees with their team is collectively declared an idiot. Wrongly usually but the mob prevails. They have little chance of realising this about themselves so self-culling won't occur. Other teams and organisations do it quite well. I guess you need to find smart people first or bring in smart people who can make this judgement.

There is one other way to deal with this and it is to have as good a firing policy as your hiring policy. I've worked in a situation like that. The people manager was one of the coolest chicks you've ever met but one of the scariest if you happened to suck at your job. In her previous company, she was known to come up to the desk of people judged lacking with a moving trolley so they could be marched off the premises wheeling their belongings. It got to the point that people would run and hide if they saw her pushing a trolley. The thing was that she did something about people who were not meant to be there. She didn't let them cluster or build up political power. If you were wrongly hired, your were rightly fired. Trolleyed out!


If we can't get rid of them then what can be done to make them useful and less destructive?

This is where the arguments start. If you've had to spend the time undoing and fixing what these people produce then you just don't want them there. That is fair. If you have had to work with people who you have to constantly direct and correct then that consumes time and good resources. You could write the code in the time it takes to hammer it in to their heads. That frustration is understandable.

While writing this post I asked if these people are the same as junior developers who need to be mentored and taught and there was a resounding "NO WAY!" in response. Juniors with potential are more productive and encouraging than the useless types.

People suggested that it's best to keep them out of the way all together. Give them the jobs that no good developer wants. I'm not sure what those jobs are. Won't they just screw them up too?

At a start-up I worked at recently, the most unproductive and partially comatose person in the business was allowed to do the repetitive Flash work. He was a flunky for the graphic designer. Someone to write the script the designer wasn't interested in but had to be done. He was happy doing that and it kept him out of harms way, mostly.

The conclusion seems to be that these non-developers should be kept out of the way or removed completely. Is this valid? Is this how we all see it? Maybe there is no conclusion. I still need to ask...

Is there no hope for stoopid programmers?

Sunday 24 August 2008

Scrabulous completely gone from Facebook

It's official, I hate Hasbro.

Yesterday, Scrabulous disappeared from Facebook completely after Hasbro sued them. It's been suggested that I sign up to the Hasbro application on fb but I'd rather light fire to my newly painted toenails. It was a good fb community and was well written and presented.

This is a terrible shame. Big companies triumph again. Why can Hasbro do this in Australia?

Apart from status updates and photos, that only reason I went to facebook was to play Scrabulous. Twitter and flickr can replace the others for me. Maybe this is the end of facebook, at least for me.

Monday 11 August 2008

Spam A LOT

Photo by cursedthing used under the flickr Creative Commons license

Today I unsubscribe from Australia's biggest ticketing agent after they sent out mine and tens of thousands of other people's email addresses in a broadcast email.

I opened it thinking "cool, I might go see the Dandy Warhols" and was pretty unimpressed to see the body of the email with a listing of their subscribers. Apparently I am in the lucky 0.01% who had their email address shared with their entire mailing list and any spammers who get their hands on it.

First thought, can I trust a company with my credit card details if I can not trust them with my email address? Second thought, where do I complain about this? Go here and do complain because in Australia you can't be defended if you don't put your hand up and complain.

Friday 1 August 2008

Degoogling My Life


I've recently started using Google Analytics for my blogs. Yes, I'm watching you watching me.

A few interesting things have emerged from setting this up and from looking at the data it produces. The first is that Google applications are easy to register for, own and use. They make it easy to let them host your data. The second revelation is that a website can collect a surprising amount of information about you as you meander around the Interblag.

Let's go backwards and look at second things first - collecting information about the people who land on your site. Here is a quick summary about what I know about you when you visit this blog:

  • your browser and OS;
  • screen colours and resolutions;
  • flash and Java versions;
  • network location and host name;
  • connection speed;
  • the length and depth of your visit (the pages you read and time you spent);
  • language used;
  • referral sites (search engines, other sites or if you came directly to my blog);
  • and where in the world you are.
There are many valid reasons for wanting to know this useful information. It makes it easier for software engineers that build web applications to know about and cater for the different technologies in use out there. It helps us serve the majority when building a site by knowing what is most commonly used.

This information is collected using a simple script call that looks something like this, which is generated for each of your sites:



<script> type="text/javascript" var="">gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'


<script>pageTracker = _gat._getTracker("xx-xxxxxxx-x");
pageTracker._initData();
pageTracker._trackPageview();
</script>



Now back to the idea of making it easy to give your data to Google. I often roll my eyes at friends (geeks mostly) who avoid getting a Google account at all costs. They don't want a huge company to have so much information about them. Another good friend of mine believes that no matter why information is collected, it will be used for evil. Combine those too ideas and even with a company that promises to do no evil, you may get a little nervous.

Google knows a lot about me. I use their email; docs; feed reader; blog hosting and editor; photo library; web analytics tools; webmaster tools; and their oxygen. OK, not the oxygen but they might own shares in it. They use this information to provide advertisers with targeted advertising. I imagine they have a setup like Gringots, with the servers that store the history of all our virtual wanderings. I like to believe it is protected and will not be used in a bad way.

Of course, I'm not going to jump up right now and stop using google apps due to a passing over-thought paranoia. They are easy to use. Easy to start using. They use one id and one password. They let you do what you want to do without worrying about how. They are free.

As for how easy it would be to degoogle my life, I'm not sure. What are the alternatives?

Email: I could get mail through an ISP and bring it down to my laptop. It already comes to my crackberry;
Docs: Easy, Office on laptop. Everyone has that these days. How would people collaborate on the documents though? hmmm...
Feed Reader: Use Firefox but that doesn't move with me. Maybe another web reader.
Blogging and Analytics: Easy, host a web server running WordPress or use a hosting site and track everything through feedburner.
Photos: I already use flickr and facebook for that too.
Oxygen: It's free.

Will I be doing this any time soon? Probably not, it all seems like a lot of effort. Maybe one at a time. First I need a universal id. Let's see how it goes.

Sunday 20 July 2008

The Extroverted Minority


I am a member of many minorities and rather than complain about disadvantage, I find it is better to understand how other people think. That way I can explain why things are the way they are and like a good geek understanding is the bomb.

Since a friend introduced me to the oracle that is Myers Briggs, I have been entranced by the idea that people have a preference for how they think, are energised and how they prefer to behave. Let's not be ridiculous, it's a little more accurate than astrology but does not define you or me. Understanding the basis of behaviour is always revealing.

Over the years, I have spent a lot of time being the lonely extrovert in the sea of IT introverts. I won't complain because introverts are my favourite people. I do realise though that they often see me as the excited puppy or the open book.

In a fascinating conversation today with a group containing an even number of introverts (Is) and extroverts (Es), I discovered the kind of thresholds that people can handle before they feel uncomfortable in a group. According to Jung, extroverts get their energy from people while introverts are energised from within. To me, that makes introverts like superheroes and extroverts... well not. Being in a group and interacting with people makes me feel charged. Sometimes I have to stop hanging out with people or I feel I'll explode.

So back to the thresholds... the Is in the group and some of the Es found that they were comfortable with groups containing 1-6 people. Once they had interacted with these gatherings for a few hours, the Is had to have time on their own to recharge.

As a good puppy, I thought long and hard about my threshold because I wanted to contribute to the conversation. As a good extrovert, I waited for the person speaking to stop and spoke up with my number. This is the number at which I get uncomfortable dealing with that many people at once. When I said "My tipping point is around 50", there was great laughter and smiles. That was the honest truth though but it may be higher in larger rooms.

Even while I'm surrounded by introverts, I still don't quite get how they work and think and recharge but I do love the variety of people in the world. It's probably best we keep on trying to understand each other and just accept everyone for the beautiful unique snowflakes they are :)

Sincerely,
Your ENTJ

Tuesday 1 July 2008

Stop. Collaborate and Listen

Photo by Tio used under the flickr Creative Commons license

As a crippling head cold ends and I roll off my couch and on to a new project in the far north of Sydney, I've taken my sick days to think through what happens when I start a new gig. Doing this at ThoughtWorks is no different to the decade I spent contracting. It's all about walking in to a new space with new faces and working out how to make a difference.

Although I may be the first person to realise, it is now clear that Vanilla Ice was talking about consulting when he sang the wise words...

Stop. Collaborate and Listen.

There is no better set of rules to follow when you are entering unknown territory, whether they take you with open arms or have been told to have you there. Let's break it down...

Stop.
No matter how brilliant you are or how much you know you can contribute to a client, don't open with that line. Stop yourself from walking in to the room and telling everyone they are wrong and that you know a better way. The fact is that until you have a good understanding of what is going on, you have no idea how to improve it. Some people are able to understand this better and get going pretty fast. You will still notice that they hold back, even for a split second.

Collaborate
If your situation is like mine and you spend your entire working life on teams then collaboration should show it's face in your working ethos. Work together with people to change the landscape, achieve the goals or to teach and learn. You have a common goal. Work together with others to get there. If you pull in a different direction to those around you then you'll hold everything up or go nowhere. Of course, none of this means that you should not say what you think is right or suggest ideas but do it with the common goal in mind.

and Listen.
Listening to people and reacting to them as you work with them is the key to gaining trust and influencing any situation. Listening does not mean saying nothing until they stop talking and then talking about what you want to say. Listening means hearing what people say, even if you don't agree with it. In order to change minds, you must first understand what you are trying to change.


None of this means that you shouldn't try to make changes. If you know a better way to do something then it is your professional responsibility to make that heard, even if no one listens. The thing is that no one will listen to you if you walk straight in the door and start telling everyone how stupid they are. I've witnessed brilliant people go down in flames because they couldn't build trust. They insisted on being given control. Influence and trust are gained through building relationships. Think about the people you listen to. They will all be people you know and trust. They will rarely be the stranger who just walked in the door.

Be sincere, if you are really there to help and not just score genius-points then people will see that. You lose nothing by taking the time and effort to show them that you are a good person who they can rely on.

If Vanilla Ice doesn't work for you then maybe you could continue listening to Eminem's Low, Down, Dirty.

Friday 20 June 2008

Physics is to Maths...

xkcd from last week. As a mathematician, I agree with everything but the on hover comment.

Live Outside Your Comfort Zone

Photo by doeth used under the flickr Creative Commons license

IT is a changing space. It moves faster than other industries. The tools you worked with five years ago are the ones we would all sigh at if we heard they were being used now. Languages are born, reborn, popular and then not. The shape of the space changes with architectures ending in OA and everything 2.0. Your head will spin if you try to do it all but our jobs do mean that we have to at least keep up and know what the latest technology is, even if only for those moments at the water cooler.

Of late, I've had the chance to meet a lot of smart people who are new to the industry and asking how to keep up with all the changes. Of course, us oldies mention reading blogs, tech books, books on thinking, joining user groups and all those practical things. A lot of people are doing that but they still look around and wonder why nothing is happening. I think it's because you can't wait for change. You have to stretch yourself and extend your comfort zone.

We all look on ourselves favourably and think we live on the edge. Each of us is convinced that we push ourselves to be better at things - things we already do and those we don't. That's probably mostly true. For me, it's not really enough.

It is easy to stagnate. Take a job that by definition appears hard to others and you at first and then stay in it too long. Too long is when you know what the upcoming day entails. When you are comfortable. When nothing in your day scares you and makes you doubt yourself that little bit. That is a bad spot to be in. That is when you need to move on or shake things up.

When I talk to someone who is bored with their job, my usual response is to tell them to start making it fun and if that's not possible then find something newer and harder. Yes, quit and go for a job that extends you. Every interview I have ever been to involves me interviewing them too. Sometimes the guys on the other side of the table don't pass. I don't hire them as my employers. They aren't smart enough or intellectually intimidating enough to excite me about the job. That's what you should do.

The more you move, the more likely you are the stupidist person in the room, the more unsure you are that you know everything there is to know then the more likely you are to learn and keep up. That's not always in another job. Maybe it's in another team at work. Maybe it's outside work in a user group for a language or tool you have never used before. Be a sponge and also take something to the group. Everyone can add something to a situation.

Soon enough, you'll be back in your comfort zone and you'll surprise yourself about what you know. At that point, shake it up and move again.

Thursday 19 June 2008

No Comment!


Photo by decadentyou used under the flickr Creative Commons license


There is an etiquette to blogging. It encompasses writing, commenting and responding to posts. Credit should be given where credit is deserved. Images should note any license or conditions that allow them to be used. Quotes should only come from people who have approved their use or already been publicly stated.

Yesterday, I lunched with some old colleagues from a past life before heading off to Google Developer Day Sydney. We often meet. We always talk. We all blog.

This time was different. This time while we spoke, we had no idea that one of the participants was going to go to work the next day and post snippets of that conversation to his blog. The post included our names, the names of other people who weren't there, links to our blogs and absolutely no context.

Although he took down the post once it was made clear to him that what had happened was inappropriate and an abuse of trust, it still leaves me a little worried. There was nothing malicious in what he did but it was pretty bad form.

To make it clear: Do not quote someone or paraphrase them without their permission. If you do, don't expect me to trust you enough to say anything interesting ever again.

Tuesday 3 June 2008

Come on Barbie, let's go party!

Photo by Carol Esther used under a Creative Commons license



After rolling off a project that seemed a little longer than the 5 months I was there, I've had cause to look forward to what comes next. There are options. There are always options. Everyone has options.

The interesting trend I've seen lately is that consultants with social skills are often pushed in to roles that express those talents. That's fine, except if you are an engineer. Software engineers with the ability to not frighten the clients are encouraged openly, explicitly, implicitly and suggestively to walk down the one-way street to the post-technical role.

My feet are firmly planted on the ground and I'm not moving in that direction. To me that is not even a valid option and it shouldn't be for poly-skilled engineers. I have decided that there will be no such thing as post-technical for me because I enjoy technical too much. However, I will be extending my skills in other areas that are not purely technical.

At university we were told that software engineers covered all parts of software development, regardless of methodology. There are no strict roles. You must understand and participate in some way in all aspects of listening, enabling, communicating, coding, testing and building software. To me, the days of sitting in a dark room and "cutting code" on a green on black console never truly existed. Even experienced long term programmers will tell you they work across the project or product from go to whoa. There are no strictly defined vertical roles.

From now on if anyone asks what my role is, I will tell them that I am a consultant with an engineering background. Break the mould and resist the classic definitions given to people in IT.

Monday 26 May 2008

Are we there yet?


Photo by tonivc used under a Creative Commons license


Reaching the end of a project is always a very satisfying feeling for me. A few years ago, I got over that feeling of panic and dread that came from the belief that if a bug went in to production then the world would end; people would sue us; and puppies would die. That is quite ridiculous since there are ways to ensure those risks (I so dislike that word) are minimised.

Don't expect me to go in to why agile software development will save your life. There are many ways to assure yourself that the world won't implode because of you and they go from development methodologies to putting things in to perspective. Since many others will preach agile, I'll try give you perspective.

At university, I was lucky enough to have a programming lecturer who had worked in the real world and hadn't just read books (although I had plenty of the book types). His experience included working on implantable defibrillators. Imagine the machines they use in medical emergency shows, that are used to zap someone's heart when it stops beating. Everyone yells "stand back!" and then a huge charge is sent through two paddles in to the patients chest and hopefully the heart monitor starts blipping again. Now imagine they implant a tiny version of that so that if a heart patient's heart goes too fast or too slowly, they are zapped and encouraged to beat at a normal pace. Well, my lecturer was one of the embedded systems programmers who wrote the code that told the implanted device when to go boom.

Now, this would not be a useful story if there had not been a bug in their code. The thing is, their bug meant that they had to recall the device to replace the defective code. Think it through, recalling the device meant putting patients under the knife in order to remove and replace the defibrillator. Heart patients having unnecessary surgery is never a good thing but that's what had to be done to deploy the fix.

In our nice little worlds where a bug may cause a user to not be able to log in or to call up a helpdesk to get the account opened or not be able to update their GCC step count, it's probable that no one will die. If you do work in the other world where they could die then please ignore me. You are the minority. The rest of us can relax a little and breathe. Take your time to enjoy that you started and finished a project. Bathe in the glow of delivering software that will be used. After all, letting your heart rate rise too much might lead to the need for me to necessarily zap you.

Wednesday 21 May 2008

My Current Favourite Time Waster


Today I discovered dipity.com and found that I've only been contributing to the Interblag as Damana 2.0 since early last year. It sure feels like forever. I wonder if writing web apps counts... prob not.

dipity lets you graphically display all your different feeds in a meaningful timeline. My current obsession is to understand why people need to see things as a picture to fully absorb them. Many conversations with varied types of people since Tuesday have pulled me from side to side. Do conceptualists need pictures? If you need visualisation tools, should you be in IT? Is there value in the 10,000ft view? It is not yet answered in my mind but the blog post is being born. Stay tuned.

Until then, check out what I've been doing since March 2007.

Sunday 18 May 2008

The 'No Chick Lit' Rule


picture from alternative-footwear.co.uk


Over the last 12 months, I have ranted and blogged about women in IT across multiple blogs and to anyone who is interested or polite enough not to walk away. This post continues that theme so stop here if you were hoping for something lighter.

I'm a geek girl in almost every way but am still pretty unique, while being like everyone else. My latest geekdom to be revived is my love for discussing what I read. After leaving Canberra, finding a book group wasn't as easy as I'd hoped so that meant starting one was the only option. It has started and is going well. We are on our first book and headed at some cool titles I would not have picked off the shelf on my own but am looking forward to reading.

When it rains, it pours. After signing up for goodreads.com at the recommendation of a couple of friends, I discovered others I knew shared the same hobby for reading and talking. A wise friend of mine says that "you can tell a lot about someone from their bookshelf" and that is true. I'm willing to push that as far as you can tell a lot about a person if they read at all.

With a lovely invitation to join another book group came the tale that they want people who join to share a book with others in the group that they might not read normally... BUT there is a 'no chick lit' rule. The person doing the inviting is a geek girl. Now what I am about to say does not apply to her directly but what she said triggered off a torrent of emotion and thought that had to be ranted at someone (so you will do).

Why is it that geek girls say and do things that make other women feel insecure about being geeky and girly at the same time?

Just like it is ok to not be a pink-feather-boa-wearing girl in thigh-high boots reading chick lit, it's ok to be that too. I like to think that I'm pretty secure in who I am most days but it sure does suck when I feel the need to butch it up so as not to lose some geek cred. Imagine how it makes young girls feel about a career in IT. Every time I hear this it makes me want to be who I want to be and ignore the no-blah rules. What if you are more socially driven? Is this what makes 'geek' a bad word? All this talk of rejecting mainstream views because geek and popular are mutually exclusive?

Embrace your inner pink feather boa wearing self and read your chick lit while eating Swiss chocolate on a couch with a sequined cushion or don't but I'd like to let you know that whichever path you choose to walk is ok. You are a cool geek girl, just like Jane Austen.

Maybe we are wrong about Lotus Notes

Maybe Notes is IBM's way of making people talk to eachother because the pain of having to send an email is too great. It is IBM bringing people together.

Saturday 17 May 2008

Ruby on Rails presents WeddingPresents


My friend James, has created a unique wedding registry site written in Ruby on Rails. It took him no time at all and leaves us with a cool site that allows the couple to pick whatever presents they want without signing up to a department store.

Having recently used it for James' wedding last week, I can say that it's simple to use and effective. Also a great help for those of us who shop a little late :o)

" Why YourWeddingPresents.com?

Unlike other wedding registries, Your Wedding Presents is not owned by any store, and does not limit your gifts in any way. Your Wedding Presents:
* is completely free. No strings attached.
* lets you choose gifts from any store or even just say the type of present you want (eg, cutlery set for six).
* lets you ask for contribution presents, where several guests can pool their money to get a larger gift.
* shows you which presents have been chosen and, if guests enter their name, who has chosen what.
* lets you write a welcome message to show guests when they go to your registry.
* is easy to use. There are no big forms to fill in. "

Sunday 11 May 2008

Sir Robin and the Bubbles

I often tease my friends at Google about the preschool environment they work in - bright colours; soft furnishings and mobiles hanging from the ceiling. After stepping back and trying to argue that RPS is a valid way to settle a small bike-shedding disagreement, I realised that my time at TW has been more of a game than a job. That's a good thing. Work is fun but it's probably not the definition of "grown up" - which is just so over-rated anyway.

Our team is known as Team Bubbles for classified reasons. Of course, we've gone wild with that idea. There are bubble machines, individual bubble packs (manual) that are great on breaks.

This is one of the bubble machines that greets people as they enter

Then there are the non-bubble things like Sir Robin, our check-in chick-en. He's our check-in token and as we try to maintain a green build (especially) through UAT, he makes sure we only commit while we are in his company. We are currently trying to get him on to our RM list as a Release Manager but our Resource Manager guy is resisting... so far. Sir Robin has connections though so we might get him signed up as an official TWer.

Sir Robin with the founder of TW at the Australian Team Hug
(photo by Lachlan)

The aircon in our building hardly ever works so we have a portable aircon unit and since there was a spare beach ball hanging around (as usual) we got the anti-gravity going.

The magic falling floating ball


Then there is the lolly drawer for sustenance, the hats to let everyone know when you aren't working on a story and the pweety flowers. It's fun. I hope we don't have to grow up any time soon.

The very unhealthy lolly drawer full of 10kg of lollies at a time

Sam + I not working on our stories

A sticky note flower

Monday 5 May 2008

Let's Hug

What happens on the Gold Coast, stays on the Gold Coast... well mostly.

Friday 25 April 2008

Kill me now because all we need are "Flash Coders"

Continuing with my theme of Crazy People Tell Me How Life Is, here is my recent encounter with a friend I met on the Inteblag a long time ago. We've never actually met but posted to the same newsgroups in the mid-90s. We recently met again when he sent me a reminder and facebook invite.

Last night or this morning, I got up at some ungodly hour to see off a visitor who had spent a week with us in Sydney. My trusty Crackberry was handy and I checked my email, sms and fb messages as usual. The one thing waiting for me was a message asking if I knew of any "Flash Coders" - meaning web monkeys who write action script. I'm willing to admit that they are usually far more artisitically enabled than I am but... and it's a large one, they usually aren't able to pass for coders in any way, shape or form.

I have worked for one start up where the flash guy was a shocking electrical engineer who found solace in being able to make flash movies. Maybe there is more to it but it was common place for devs to show him how to embed his stuff in HTML.

So my friend tells me that Flash devs are worth US$20 000 a week from a business man like him. The Interblag has become so simple that real programmers are no longer required. No one needs hard stuff written anymore. The games and promo tactics used to sell stuff only need Flash Coders (FC).

I sure hope that isn't true. Who writes the stuff whose shoulders FCs stand on? Is it business guys? Is it other FCs? I sure hope there is some need for us sloggers. Those of us who can at the most draw a bath if not draw a picture.

Wednesday 23 April 2008

facebook now has im

facebook now has real time chat, just in case you can't get enough of your friends. It doesn't work with normal IM clients though so there will be no adding it to Adium yet.













You can also easily see who is online atm. I might spend most of my time hiding :o)

Wednesday 16 April 2008

You don't own me, I'm not that kind of girl anymore

After an interesting conversation last night with a colleague I respect and like usually, I was thoroughly disturbed to hear that there are people who believe that a company _owns_ it's employees.

I'm not a company man or a company woman even. If they are handing around the drinks, I'll pass on the kool-aid. My work is good. What I do is fun, challenging and stretches my ideas about technology, people and myself each and every day.

It's still my "day job"

Although those are words we are not supposed to say, I will shout them to the heavens.

I love my job. Sometimes I am shocked that people pay me to do this. Would I retire tomorrow? Yes! Then after traveling the world and sleeping in a lot, I'd go back to work. People often do what they do to get paid. They do what they do to buy houses, feed families and fill their time. Not me, I like what I do.

Right now I work for a company I like. In the past I've worked for ones I didn't. Either way, I have fun and enjoy it. Learning and learning each day. Extending myself.

But do I belong to the company I work for? No! Never!

If that means I'm doomed to walk the Earth for eternity writing code and building beautiful ideas, then that's ok.

No matter how much my job makes me happy, my family and my life outside work are just as important and more. Obsessing about anything is not good. Moderation is good. Do everything well but know when to stop. Do your job well but remember to go and hang out with your friends. Put down the mouse and call someone to go out. Liking your life outside work does not mean you suck at work. It means you are good at living.

Acknowledge Me

Apple started a user experience trend many iOSes ago when it accepted Settings changes and did not ask for confirmation. Once the chang...