Wednesday, April 3, 2013

I don't expect to loved, I expect to be paid

Through the progression of my professional carrier I have learned a lot about interpersonal interactions. The most significant being, how to incentivize people. Giving people a reason to excel is fundamental to enabling your employees to achieve their best. A person with no reason to exceed their current situation will not. More importantly, they will seek that fulfilment elsewhere which can take away from the tasks you wish them to perform.

However, and this is the most important thing to remember, everyone is a special butterfly. An important aspect of any successful manager is to recognize this and adapt to each and every employee. This can be extremely difficult for managers with large teams or many remote workers. At the end of the day, the manager's primary function is to ensure the company is getting the most out of its employees.

I can't speak for most people but I'd like to share some of my experience dealing with management. Personally, I do not like verbal praise. I have always felt it hollow and basically just a tool they are using to make me work harder then I am paid for. I always do the best I can at my job regardless of my position. Please, I don't need someone telling me that. I also understand that if I want a raise I need to work at the next pay level but this must be a temporary situation. If you truly believe I am excelling at my job, PAY ME MORE.

Unfortunately, paying people seems to be the bane of management. My ideal position would be where when the manager compares my work to my pay they should think, "yep he is doing exactly what we pay him for" and never "WOW your doing such amazing work for the penance we grudgingly give you". Because if that is the thought you are having, I not being properly incentivized. Remember I will seek my fulfilment elsewhere.

Sunday, March 31, 2013

Ububtu netoworking hell.

Or how to stop hating routing and get on with your life.

As some of you may know, when our love, ubuntu, encounters a problem setting up network interfaces during upstart it tries to "failsafe". As a result, it waits two minutes with little information about what went wrong.

In most cases where DHCP is configuring the interface this is the correct thing to do. However, when the interface is static no amount of waiting is going to safe your sorry butt.

Unfortunately the networking subsystem "ifup/down" can be less then scrutable in it's error messages.

Take the following config as an example of a fail.

auto eth0
iface eth0 inet static
 address 10.10.10.200
 netmask 255.255.0.0
 network 10.10.0.0
 broadcast 10.10.255.255
 gateway 10.20.0.1
 dns-nameservers 10.20.0.1
 up ip route add 10.20.0.0/16 proto static dev eth0
 down ip route del 10.20.0.0/16 dev eth0

Seems legit? Ok so ya, this system is running on different subnet then the gateway but that's FINE. If the route exists then the packets flow. The problem here is the gateway but at this point we don't know that.

This config results in the 2 minute wait at startup because ifup is returning an error "no such process".

Figuring out what was causing the problem was a bit.. hard

Looking into how upstart configures the interfaces is what worked.

Upstart uses the ifup/down utilities and if it detects an error calls failsafe.

Ok that works. Let's bring down the interface and try it again. EXCEPT the interface isn't really up so use --force.

ifdown --force eth0

After that going line by line in the config with ifup and ifdown --force until we don't get an error.

In my case it was the gateway line. Turns out you need the route to the gateway BEFORE it can be configured but the line which adds the route happens POST up.

Since we can't add a route pre-up we must configure the gateway post-up. It could be done at up but there might not be a guarantee of execution order so keeping it explicit seems like a good idea.

The new config which works,
auto eth0
iface eth0 inet static
 address 10.10.10.200
 netmask 255.255.0.0
 network 10.10.0.0
 broadcast 10.10.255.255
 dns-nameservers 10.20.0.1
 up ip route add 10.20.0.0/16 proto static dev eth0
 post-up route add default gw 10.20.0.1 eth0
 down ip route del 10.20.0.0/16 dev eth0