Archive for the ‘General’ Category

The responses of giving notice.

Wednesday, January 14th, 2015

This morning is the day. After 6 years with the company, Tom has decided it was time to move and is putting in his notice. He is nervous and excited. Tom meets with his direct manager and lets him know. Because of their one on ones Tom’s manager is not surprised and saw it coming.

Later, Tom is in the teams weekly update meeting and breaks the news. It is a rough moment because he has spent the last 6 years with this team and now he was leaving. In that moment, everything is now different.

Jen has worked with Tom for many years. They have become friends and colleagues. She is understanding of why Tom has decided to leave and is supportive. She knows that they will stay in contact long after Tom has left the company.

Hugo is the VP of Development and has been with the company since forever. Hugo is extremely upset. He views Tom’s choice as an insult to him and the company. How could someone just leave? Hugo will make it known of his anger to Tom, typically by being passive aggressive. Making comments about loyalty and trust.

Adrian is the Project manager. She is scared. Tom was a big part of the team and with him gone, she is unsure on how they are going to fill in the gaps.

John, another developer on the team, is sad. Tom was a mentor to him and now that he leaving, it’s like a peice of John is now missing. John is visibly upset over the news and anytime the topic of Tom leaving comes up, the emotions return.

Taylor, a mid level developer, is excited. With Tom leaving, this means there is a chance to step up and get noticed. She is pretty much pushing Tom out the door so she can start taking on more responsibility and start showing her worth.

When a person puts in their notice, everyone affected has one or more of the above reactions to some degree. In my experience, the majority of people will be like Jen. They will be understanding and supportive, maybe a tiny bit sad. They understand that the action of the person leaving is not directed at them nor some insult. The unexpected outliers that have a more extreme reaction are the ones to look out for as these are the people that make leaving a company harder than it should.

The bright side of it all is that these feelings will pass. Adrian will see that people like Taylor step up and fill the gaps. John will realise that Tom was a great mentor and has prepared him well. Even Hugo will get over it as anger is sometimes just a defence mechanism.

When you put in your notice, be ready for the sudden and abrupt change in how your soon to be ex-co workers interact with you. As you tie up loose ends, you will slowly fade to the background. Don’t fret though, you are about to start something new.


My bout with Shyness

Thursday, October 16th, 2014

I am shy. I am very lucky that it is not crippling. But it is bad enough that it has and is keeping me from doing what I really want to be doing. For example It was keeping me from being active in the development community. I would like to be able to introduce my self to people I want to meet when I see them. Mainly I would like to stop being anxious when I meet new people.

It is weird because I have not been able to figure out if I am an introvert or extrovert. I have traits from both sides. I love talking in groups of people I know but also love the times I off doing things on my own. Communications is one of my top 5 strengths from Strengthsfinder. I don’t know if it is possible but I feel that I am both but on different days.

Now my shyness is really around people I don’t know or don’t know well. If I don’t know you, I am not comfortable around you. I can not just walk up and start a conversation. It causes me large amount anxiety. I would go to meetups and conferences and talk to no one while I was there. It bugged me a lot. That is until I decided enough was enough and that it was time to do something about it.

3 years ago, I attended the first That Conference. I love learning, it was inexpensive, and close by. I knew exactly 1 other person that was attending. I was excited. That was until morning of day 1.

Day 1 started with Clark Sell standing in front of the attendees and issuing a challenge. He stated that That Conference was designed to be a social conference. Yes the session are awesome but the organizers put ample time between sessions and had after hours events to foster socialization among the attendees. His challenge was to take these opportunities to meet new people.

Pretty much after that moment, I was freaked out. I was thinking I can’t do this. I am going to be that guy sitting in the corner by himself for 3 days. For the most part of day 1 that was true. Thankfully the 1 other person I knew is more outgoing than I am and found a group of people to hang out with on night 1. If it wasn’t for that 1 person, I would have been hiding in a corner for all 3 days.

To be clear, I love That Conference. I love, now, that it is setup to be social. And this challenge was exactly what I needed but I didn’t know it at the time.

After the conference was over, I was inspired to do awesome things. During the following months, I decided it was time to get over my shyness or at least deal with it. I didn’t really have a plan yet but I had an idea of what I wanted to do. I didn’t want to be the person in the corner anymore. I started off by attending more meetups. At the very least I was getting more comfortable with being around people I didn’t know.

About a month before the 2nd That Conference, I got it in my head that was going to do an open spaces with the topic of developers with disabilities. I am dyslexic, this was my in. After the 3 days, I ended up chickening out. Fear sucks. The whole drive home, I regretted not doing it. The feeling sucked even more than the fear.

All was not lost, one amazing thing happened during the conference. During the time between the 1st and 2nd year, I became a bit more active on Twitter. While at That Conference, Clark Sell sort of called me out for not saying hi. I was hiding behind twitter and he basically said stop it. This sort of forced me into doing something I am not comfortable with. That was getting out of my chair and saying hi. I did it. It was a small victory. It was a step toward the realisation that getting over this is possible.

At this point it is August 2013 and it was time to get serious. I set 2 goal that I wanted to complete. Become active in development community and host an open spaces at That Conference 2014.

About this time, I learned that Milwaukee’s development community had an IRC channel (#devmke on freenode). I jumped in and idled. Even with just text between me and others I had anxiety about joining in the conversations. Over time, I learned who was who and started to join in. Slowly. Because of Twitter and IRC, I got to follow and interact a bit with people that organized some of the meetups in Milwaukee.

In early 2014, the organizers of MKEJS were talking in IRC about the need for a topic/speaker for that month. I suggested that they do a Node School workshop. I am not sure how but my suggestion turned into me facilitating the workshop. Node School workshops are a set of self guided lessons that use node to teach you node and other aspects of JavaScript. My job facilitator would be to get people started, show them how to use it, and help them if they get stuck. On top of this, this was looking to be the most popular MKEJS meetup yet.

Facilitating this workshop was an great step forward. They say facing your fears is a good way to get over them. Well public speaking to a group of people I don’t know. What could possibly go wrong? I faced them head on and everything went really well and gave me the confidence to do more. Shortly after, I was asked to help co-organize the MKEJS meetup which I accepted and at roughly the same time joined the Content Advisory Board for That Conference.

This August was the 3rd That Conference. So far I have reached one of my goals and have become more active in the development community. Now it was time to complete goal number 2 and do an open spaces. Before the conference, I told a few people my plan and asked them to help me make sure I do it. Since I didn’t went to let them or myself down I completed the goal. Here I am 3rd in line to tell my topic to roughly 1000 other developers, most I have never met. Yes I was nervous. Yes, stumbled a bit but I did it.

The conference went amazingly. I was able to meet many people I know from IRC and twitter in person for the first time. I was uneasy about approaching complete strangers but did so on a few occasions to recruit speakers for MKEJS.

Since That Conference this year, I had a new goal of giving a talk. This goal was completed in September when I gave a talk Titled “Rocking with Web Audio API” to MKEJS.  The next goal is to give a talk at That Conference next year.

I am still a bit shy and still have problems approaching people but I am going to continue to work at it. It has been a slow process and I think it had to be for me. I had to be ready for the change to happen and that takes time.

As I was writing this, I realised that a lot of my anxiety stemmed from not having confidence in myself. The reason this took time is that I needed to build up my confidence before I could do the next thing. Now to work on that talk for That Conference 2015.


Stop chasing carrots

Friday, September 19th, 2014

My first job out of college was working for a large printer of magazines.  There was a good number of developers and for the first few years things were good. The company had some interesting abilities outside of print that I thought were really interesting and I stayed longer than I should have because the potential to get bigger was there.

Then 2008 happened. We all felt the crunch. Print is not really a growing industry and the recession did not help. Yet, I stayed. I stayed even after new projects required over time from day one. I stayed even though perks and benefits of working for this company disappeared because they needed to make the bottom line look better. I stayed for another 3 years. Why? Because I was chasing the what could be. The metaphoric carrot  if you will. I believed the promises. I was a fool.

During those years, I was consistently underpaid when compared to market average. The work environment went from happy to hostal. Time lines went from reasonable to this needs to be done yesterday.

One day the carrot was removed. The CEO stood in front of the company and said they were going all in on print which mean the interesting abilities outside of print were being sidelined for projects that pushed print. I was done. I stopped working overtime. My work suffered. It didn’t take long before I left.  I couldn’t chase a carrot I didn’t believe in.

This experience taught me a major lesson:

Stop chasing carrots

This is not an original idea. This is an idea that is supported by science and research. When a task requires even the slightest cognitive processing, carrots no longer work. In fact they tend to be more harmful than helpful. Dan Pink’s TED talk The Puzzle of Motivation sums this up very well.

In Dan’s talk he suggest that people who work in creative fields require different motivators. Motivators that you have right now, not that you may get at some point in the feature. Dan suggests 3 different items:

  • Autonomy – Can you do the work in a manner that works for you?
  • Mastery – Do you have a chance to learn and grow?
  • Purpose – Does the work affect the world in even the slightest bit?

There are many other factors but these 3 are important. Looking back on my relatively short career, I have to agree. My biggest issues were doing things I did not believe in and doing them in a way that didn’t work for me. Going back to my story above, I left that job because I no longer had a purpose I believed it. It made me sad that the focus of the company switched because those areas outside of print had purpose and were awesome.

Whatever you are doing are doing for a job, make sure you are getting something from it. If you are working 80 hours a week because you may get a raise, you are doing it wrong. It is very likely that you will not get anything and soon this type of effort will become expected from you. If you are working 80 hours a week because you love what you are doing and you are making that choice then I am not going to tell you not too.


C# HttpClient integrated authentication

Monday, July 14th, 2014

HttpClient has become the standard way to make http requests in C#. This is mainly used for API calls but has other uses as well. Recently, I have had to make http requests to servers that require authentication and the documentation on how to do this is scattered. The funny part is that it is really easy to do.

var uri = new Uri("<url>");

var credentialCache = new CredentialCache();
    new Uri(uri.GetLeftPart(UriPartial.Authority)),
            "<auth method>",
            new NetworkCredential("<user name>", "<password>", "<domain>")

HttpClientHandler handler = new HttpClientHandler();
handler .Credentials = credentialCache;
var httpClient = new HttpClient(handler );

var response = httpClient.GetAsync(uri).Result;

can be basic, digest, ntlm, or negotiate. Then just updated the Network Credentials to that of the user you want to make the call and you are good to go.

It appears that kerberos on its own does not work. This may be because of my server configuration. However if you use negotiate, HttpClient will use kerberos if the server is configured for it otherwise it will fallback to NTLM.

Why having an open door isn’t enough

Tuesday, June 17th, 2014

Recently Jason Fried wrote an article titled “Is Your door Really Always Open?” In it, he suggests that having an open door policy is great but also a cop-out. And I agree with him. So much so that I would like to go a little deeper as to why this is a problem.

I am an introvert and a bit shy. because of those traits, it is going to take a lot for me to go into my bosses office and talk. I am not going to do this unless I absolutely have to or I know it is likely that my point will be made. Recently I came across some videos called “The Power of Introverts” that suggests that this is a trait of introverts as a whole. They tend to be more calculated when they speak up and wont do so unless they know they will be heard.

What this means to a manager is that having an open door isn’t enough. It means that many of the employees a managers has are not just going randomly walk into your office and talk.

The other problem that I have seen with open door policies is that employees only use them to bring up problems or things they want to change.

If an employee is to honest to often they get labeled. Labels are bad. It is hard to remove labels. Labels keep employee opening up because they don’t want the label.

As an employee, these are the main two things that keep me from bursting into my bosses office and being honest. As an employee, the easiest way to fix these problems is to do what Jason Fried suggested in his article. That is, as a manager/boss, you need to be the one to open the communication. You need to go out and actively communicate with your employees. Once they get comfortable, they will be honest and more willing to come to you about anything. This has the added bonus of hearing more than just the negative things going on in the office.

One man’s solution for full page web apps

Thursday, January 30th, 2014

Recently, I had a need to create a web application that functioned kind of like a native app. The design requirements were simple. There would be a header and menu stuck to the top of the page and a footer and navigation buttons stuck to the bottom of the page. Content would fill the middle.

There are many ways to do this. For example, bootstrap has an example of how to do this type of layout. This is probably the most common example of how to keep elements stuck to the bottom of the page. It has one problem, the height of the stuck element must be known. Sadly the height for me is not always the same which makes this example not ideal.

Flexbox is another option. It would work good except for its browser support. For this project I had the fun requirement of needing to support IE8. Don’t ask, long story, some day I will tell it.

So how did I solve my problem?  CSS Table Display! CSS Tables allow you to use semantically correct layout with divs (or newer tags) but have those divs act as if they were table elements. So one can read all about that what they are and how to use them all over the Googles. The remainder of this post is what I did with them.

Below is some example html and css I used. Header, menu, content, footer, and bottom stuff are all normal display block div tags. They work like you would expect. It even works will to drop in Bootstrap grid system to place things on different places horizontally.

The key to the is the div with class .trow-fill. It will push all elements below it to the bottom of the page because its display is set to table-row. Make sure to notice that the body tag is set to display as a table. What is cool about this is the content or the navigation area can change heights and everything will move correctly. The stuff that should be at the bottom of the page will stay there.

Screen shot:

Example HTML and CSS



		height: 100%;
		width: 100%;
		margin: 0;
		display: table;
		display: table-row;
		height: 100%;
		background-color: yellow;
	/*fill colors for effect*/
		background-color: green;

		background-color: orange;
		background-color: red;
		height: 150px;
		background-color: lightblue;
		background-color: grey;


	<div class="header">Header</div>
	<div class="menu">Menu</div>

	<div class="content">content</div>
	<div class="trow-fill" >Normally this would be empty. This will push anything elements below it to the bottom of the page.</div>
	<div class="bottom-stuff">Navigation and other stuff. This can be dynamic height!!</div>
	<div class="footer">footer</div>


Now a few things may be running through your head. Mainly something about tables and it feeling dirty. Well I was with you up until I noticed something about Bootstrap. In v2.X of bootstrap, CSS tables is exactly how it achieves the fluid grid system. Just look right here. If it is good enough for them, it is good enough for me.

Software Craftsmanship

Friday, January 3rd, 2014

On my way home from work the other day, I was listening to .NET Rocks Episode 934 with Uncle Bob on building software. Carl, Richard, and Uncle Bob had a discussion on and the issues with the site from a development stand point. At 28 mins 45 seconds in , Richard states “I am responsible to my industry first and my customers second” and this struck me as very profound.

I have never considered idea before that my actions, code, and software is a representation of my industry. That because of my actions as a developer could causes a person to view all programmers in a different way.

If we look at lawyers for example, we can see the stigma of the job. Society seems to have negative view of lawyers. That somehow you are a terrible person if you go into law. Why is this? There are terrific people that work in law. I have met them and worked with them. The negative view was probably built by the few that have acted unprofessional. The ambulance chasers and those who make frivolous lawsuit just to make a buck. My point, is that it won’t take much for our profession, software development, to get a similar stigma if projects keep failing.

I fear that the stigma of a software developer not being professional, not caring is already taking hold. The software the world uses every day is pretty terrible. Why is my password limited to 12 characters for my online credit card account. Why does the family doctor tell me all the issues he has with the EMR instead of telling me how awesome it is? Why does my cable box freeze so much? Why does Google Chrome’s spell check not fix the fucking word when I click on it? People should be excited about how software is making their lives easier not about how much it sucks. Our jobs as developers is to provide software that helps people not infuriates them.

Uncle Bob and many others created the Software Craftsmanship manifesto in 2009. The goal of this movement is to push craftsmanship and professionalism in the industry. The general idea is to promote doing what is right over getting it done. Good enough is no longer acceptable. 

Not only working software, but also well-crafted software
Not only responding to change, but also steadily adding value
Not only individuals and interactions, but also a community of professionals
Not only customer collaboration, but also productive partnerships

I have signed the manifesto as a reminder to push my industry forward. To not sit idly by. To make awesome!

Transparency in the Work Place

Thursday, December 12th, 2013

Image a CEO walks in one morning and states loudly for everyone to hear “The release date has changed from 5 weeks to 2 weeks. Everything must be done.” and walks away.

The first questions from everyone is: What just happened? Why did the date move? How are we going to finish this 3 weeks early? Productivity will remain very low until answers arrive or the shock wears off. And the rumors will start. Maybe we have a client? Maybe we are being sold? Maybe we ran out of money? Maybe the CEO is a bitch?

Many of us of lived through this example or examples like it far too many times. Thinking back to the times this has happened to me, the majority of the problem wasn’t with the information I was receiving. It was with the number of questions it created. My must crippling one was Why. I, like many, will spend extremely too much time trying to understand  why changes was made or why something works

As developers, a large part of our day is understanding the whys of our software. Why does it work in this case but not that one? Why does this user click a button 5 times? Why did bob eat that? To many of us, not knowing why is like having an itch we can’t scratch. It will plague our minds until we have a suitable answer. This is also what makes us good programmers but that another post.

Transparency can solve this and so much more. Forbes agrees. There are many benefits to being transparent but the one I am most interested in is the one that bugs me the most. Answering the question of why.

Looking back to the example, if the CEO was completely transparent, good or bad, it would have allow the staff to cut through the crap and get to the point. The deadline was moved because there is a huge opportunity for the company if we can hit it. Or the deadline was moved because if we are not done in 2 weeks, we are going to run out of money and everyone is laid off. In either case, why was answered and the staff can move on to dealing with other questions like how.

I have been more loyal and understanding to a boss that was transparent even when the information was bad. I knew that they were telling me all they knew and I understood their choices more completely, and was willing to follow their direction more often.

With a boss that was less than transparent, I have been more questioning of their motives and if they really had the teams best interest in mind.

I am not alone with this way of thinking. Many of the my co-workers over the years exhibited the same tendencies.

Statements like “Something bad is happening. Why would we do that know? It doesn’t make sense.” are common place when transparency is limited. My suggests to the management of the world is to treat us like adults. We can handle bad news. If an employee can’t, you probably didn’t want them as an employee anyways.

Geek Motivation

Wednesday, October 16th, 2013

Physcology is something I have always been interested. If I couldn’t work in software development, I would probably be in physcology. To more specific, I am interested in geek physcology. What makes us act they way we act? What motivates us to be engaged? How are we the most productive?

Recently there seems to be shift in how people are being managed at work. More specifically how people in creative positions are being managed. Traditional styles of management seem to be less productive than newer styles of management. The reason seems to be that the newer styles of management help make a geek’s work life better by giving them freedom to complete their tasks in a way that works for them.

Michael Lopp, who blogs under the name Rands, talks a lot about soft skills. He has a posts entitled “The Nerd handbook” and “Managing Nerds”. These posts outline many of the characteristics that generally define geeks. One of the main themes throughout each post is something dubbed the high. The high is the euphoria that is felt when one understands or complete a task. Much likes drugs, this euphoria is what geeks are chasing. Todays new management trends are trying to create environments where geeks can reach this high quicker because this is when geeks create awesome.

This high is important. Without the high, geeks get frustrated, bored, and quit. Ever wonder why some geeks seem to switch jobs every few years? It is because they have an understanding of all the interesting problems and have dominated those problems. There is nothing else for them to do to reach the next high. So they move on.

Having solved all the interesting problems is not the only reason geek quit. Sometimes it is because of the environment they work in. Did you know a business can have a mindset? Humans, groups, teams all have a distinct mindset that drives the actions and culture of that collective. There are two main types of mindsets: fixed and agile. Geeks do not liking being in a group that is a fixed mindset.

A person with an agile mindset craves knowledge and is ok with failure as long they are learning. These are the people that try 10 different algorithms to sort a list to find out which one is best. These are the people that suggest cutting edge technologies because they want to learn it. They know it will be painful to implement but they don’t care. These are the people that want to be the least skilled person in a room because they know the other people in the room have knowledge they can learn.

A fixed mindset person is one that believes they are naturally smart. The people in this mindset have been typically told they are really smart. These people tend rely on their natural ability than trying to get better and learn. They are easily frustrated with failure. If possible they would prefer to be the smartest person in the room as it somehow validates what they believe is true.

Linda Rising gave a talk on subject a few years back. She explores this topic in more detail. During her talk, she suggests that a businesses can also have a mindset. I believe this to be true. Businesses show the same charistics as people do but with the side effect of this will affect their employees. A fixed mindset business will tend to not tolerate failure. They will assume the talent of all the employes will carry that business forward. An agile mindset business will allow employees to fail as long as they move forward.

Geeks prefer to not work for fixed mindset businesses. Geeks love to try new things and push themselves to be better and learn. In a fixed mindset business where failure is not an option, trying new things is also not an option. Which leads to geeks getting frustrated and leaving.

On the flipside, geeks prefer working for a business with an agile mindset. Companies like Github and Netflix are embracing this mindset and attracting highly skilled geeks. Github believes in giving their geeks almost unlimited freedom for when and how they work. For them this has worked very well. Their employees are highly motivated and engaged.

If you are a geek and want to make awesome stuff and to have an impact on the world in some small way, I would highly suggest seeking out a company that understands how geeks work and function the best. Your utopia exists but it is up to you to find it.

If you are a business that is looking for motivated geeks, I suggest that you make sure to take care of your geeks. Give them the space and opportunity to fail and learn. Given the right environment, your geeks will create awesome.

Node.js running on Azure.

Tuesday, September 10th, 2013

Recently I created a little node.js project for fun. It sole reason for existing is to display Bastard Operator from Hell quotes. I ended up deploying this little project to a free azure website because this little project used edge.js and required C#. Azure websites runs on windows and has .NET installed. Yes even node.js websites run on windows.

Time to jump right into it. I spent entirely too much time getting my little project deployed. Why? Well, the documentation for azure is incomplete. Little did I know, I was missing a key piece of info. To run node.js in azure, one needs a web.config file. If you use one of the templates it will be created for you. If you don’t use a template, you have to created. This is/was not documented.

Why does node.js require a web.config to run in azure? Well node.js in azure runs on IIS. Yeah, that IIS. If I am not mistaken, it is using iisnode. Honestly, this is ok given that azure runs windows and IIS is pretty decent at managing resources. But for the love of sanity, could this be written somewhere please?

How did I figure this out? By luck. I created another website using the template, FTPed into website and noticed a little file with the name web.config. Upon looking at, it is clear as to why it is required.

Here is an example of a web.config, the important piece is line 14. The path should be the name of app start js file.

     This configuration file is required if iisnode is used to run node processes behind
     IIS or IIS Express.  For more information, visit:


            <!-- indicates that the app.js file is a node.js application to be handled by the iisnode module -->
            <add name="iisnode" path="server.js" verb="*" modules="iisnode" />

                <!-- Don't interfere with requests for logs -->
                <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url="^[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$" />

                <!-- Don't interfere with requests for node-inspector debugging -->
                <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url="^server.js\/debug[\/]?" />

                <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
                <rule name="StaticContent">
                    <action type="Rewrite" url="public{REQUEST_URI}" />

                <!-- All other URLs are mapped to the Node.js application entry point -->
                <rule name="DynamicContent">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" />
                    <action type="Rewrite" url="server.js" />

        <!-- You can control how Node is hosted within IIS using the following options -->


My little project:
It running in azure:

Update 9/11/2013: I need to clear some things up. As pointed out in the comments there are many ways for azure to auto create a web.config or iisnode.yml file. In my case, I did not use the command line to deployment and ran into a bug with github deployments which would not allow me to publish to azure from github. This bug may be fixed now. In the end, I uploaded my files to azure via FTP, which did not create a file for me. My fun ensued at this point when I couldn’t figure why nothing was happening.

This was not meant as a bash against Azure. I was just putting this out there in case someone else runs into the same issue. Happy Coding!