Why Sarah Sharp Leaving Linux Is Bad For Everyone

It was profoundly sad to read Sarah Sharp’s blog post today that she’s leaving the Linux Kernal development team.  The sort of it is that she just had it with the caustic social atmosphere maintained by that group, most famously exemplified in the well publicized rantings of Linus Torvald himself.

This to me is a universally bad sign for everyone not just in IT but everyone touched by it, which is everyone.

The chief damage of poorly socialize and highly aggressive communities in IT is that they develop a mono-culture.  They mistake a specific way of arguing and reasoning as the ultimate means of making progress in IT and thus limit the progress that can be made by those groups to those with that specific way of arguing and reasoning.

This closes what should be an open market place of ideas and limits progress in the field to people who can pass particularly personality tests or have their ideas recognized by people with a demonstrably limited ability to recognize or appreciate the worth of other human beings.

We have entered a phase of human history where conceptual models are the basis of or economy.  Cloud computing, iphones, kickstarter, service architectures, snapchat and most of the 1/3rd of the global economy driven by IT is entirely the product of conceptual models.  Communities like this ensure only a small number of socially compromised individuals will be able to bring their ideas to market, which limits the possibilities for all of us.

I understand this.  I passed a phase in my career where I had to step away from something I loved because the politics of it all left me burned out and I couldn’t see a way to recover.

I wish Mrs Sharp good fortune and happiness, selfishly I hope she takes a break to recharge and that I’ll see here like again driving IT forward.  Right now though, all I can feel is a deep sadness that it had to come to this.

New Experiences in IT

So in the last 8 months I’ve made a bit of a change, after 18 months in higher-ed IT I transitioned over to the public sector in government IT. Specifically primarily emergency response IT. It’s been an interesting experience, much more catching other people up and getting folks modernized, lots of realtime Geospacial stuff and lots of experiences with field staff. I had been getting involved with planning related Unified Central Virginia Emergency Services for the UCI Roadrace here in Richmond.  They haddn’t had much of an IT leadership presence in this space before and the IT skills are a bit thin so after working with me a bit they decided to tag me as the Tech Section Chief for the event.  What surprised me most was that this is considered a big step forward and they haven’t had IT leadership in events like this, which blows me away.  So much updating need in government IT but there’s a lot of dedicated people and broad sets of skills that with a few changes there is the potential to have a big positive impact.

The month of September has seen me more or less consumed by this though.  I think 2 days off total in the month with most days at very long hours, 12+ hour days each day for the last 2 weeks or so.  Looking forward to getting back in touch with friends and to whatever life holds for me next.  What an amazing experience, It’s such a privilege to work with professionals of this caliber in thier own field.  Richmond and Henrico is indeed in very good hands from a public safety point of view.

IT Management is counter to everything you know

One of most difficult challenges an organization can face is building effective IT Leadership. It faces the paradox of needing IT Leaders with strong technical background and skills who understand that leadership is the exact opposite of everything they’ve come to know up until that point in their career.

As technical experts we’ve spent most of our career jumping in and solving problems, taking pride in our ability to research and implement smart solutions. As leaders it’s no longer about what you can do, it’s about what your team can do. This can be supremely difficult because you must know enough about what needs to be done to exercise good judgement, but resist your urge to dive deeply into the implementation details and get distracted from your role across the organization. You also have to know your people’s skills deeply enough to understand what is a comfortable fit, what is a stretch and what is a gap for them and how to mitigate for it. You have to put your pride aside and not get caught up in the (often romanticize) notion of how you could solve the problem back in the day. You have to navigate the subtle differences between the tight control needed by an implementer and firm guidance required by a leader who facilitate them.

Our conceptional models of how we fit into an organization is strongly shaped by our vision of the day to day value we add. We have to be able to let go of that conceptual model to understand the role soft skills play in the organization in building our teams and organization over time. This can be especially challenging for anyone coming from the concrete world of implementation. We have to trade our immediate mindset of how we’re going to get our work done today for a longer view of how is this work going to get done in the future and continue to be done, perhaps even be an entirely different set of people, perhaps with an entirely different leader. We have to broaden our assessment of strategies to imagine a way to forge a trail ahead for the skills we’ll need next month or next year instead of what skills we need to get the job done today.

Leadership comes with a large set of challenges to begin with but the unique challenge in IT is that it requires the exact opposite of some of our most powerful habits and strongest mindsets up until that point in our careers.  A mindful approach to this transition is critical and there are a number of great books or resources to help develop leadership mindsets, but it requires recognizing the difficulties in the first place.

Executive Leadership in particular needs to understand these issues as they are the ones developing and choosing their organizational IT Leaders.  Too often they avoid the issue by choosing IT Leaders from a pool of career managers with little to no IT skills, which is often a fatal flaw, and introduces too large a gap between Executive Leadership and product implementation.  On the opposite end, Executive Leadership can sometimes simply advance someone to IT Leadership based on their technical skills alone which runs the risk of driving toward directionless growth of their IT products and an inability to sustain or replicate any success across teams or over time.

Running Ansible on Windows through Cygwin

For various reasons I’m mostly on Windows machines at work and at home but prefer to develop in Linux and provision with Ansible.

The Server Checkin blog has a great post on setting this up I had a few things I needed to do differently or in addition to the directions there I wanted to jot down for myself and in case anyone found it useful.

Bash the right thing

The directions point to setting up the ansible config settings in .bash_profile but in cygwin it points you to using (as on many bash setups) .bashrc instead so just make those changes in .bashrc instead.

Updating git submodules

The master branch checkout of Ansible I used for my setup needed a few updates for submodules.  I discovered this from some output after running `ansible –version`.  To update those just `cd /opt/ansible` and run:

  • git submodule update –init lib/ansible/modules/core
  • git submodule update –init lib/ansible/modules/extras
  • git submodule update –init v2/ansible/modules/core
  • git submodule update –init v2/ansible/modules/extras

After that it seemed to work fine for me, though I’m still trying to get over the Vagrant hurdle it mentions at the end of the post.

The future is Go’s to lose…

Go Language GopherIt would be hard to miss the splash the Go programming language has made in the software engineering community in the last year.  I’ve worked with it over the last several months and am pretty impressed by it, particularly for how new it is.  That being said though, it would be dishonest to claim that most of the buzz on Go isn’t hype right now and like any new technology headed for the trough of disillusionment, it has a lot of work to do if it’s going to stabilize into something that’s going to deliver on it’s promise.    Go is moving fast and given the state of languages out the right now, it has a unique opportunity to firm up a few things and become what people want it to be.  In other words, this is Go’s game to lose right now.

None of this is new, and the following may not be either but I thought I’d be one of the many voices tossing out some of the things I think Go urgently needs to change to take advantage of the opportunity it currently has.  So in no particular order…

Runes are going to ruin us…

For some reason Go decided to forgo a char (character) type in favor of a byte base Rune.  I’m not a character set guy so I’m sure there are good reasons in somewhere in the multi-byte or composing vs non-composing character bushes, but at the end of the day Runes are characters or at least people want to use them that way.  Getting esoteric with what should be such a fundamentally simple concept just seems like a bad idea to me.  Go does a great job of dealing with things on the byte level so I get the thinking behind Runes but the work it takes to treat a Rune like a char, which is most of the use cases, makes it feel like the language is getting the way to me.

Go Get needs to be more long sighted...

I seems kind of neat at first that you can import a go library using it’s GitHub or bitbucket path and import it with the Go Get command but I can’t imagine how this is going to be a good idea in the long run.  Linking a fundamental feature like imports into a low level language to current fads in repository practices seems like such an amazingly bad idea to me.  What happens in 3 years when we’re all onto the next new social coding platform or any number of other things change.  Go Get is neat but a poor (and dangerous) substitute for a a real dependency management system.  Nobody want’s to recreate maven, but maybe something akin to python’s pip would be a big step forward.

Better Collections and Generics

Anyone working with Go has heard this a million times so I wont go into it too much.  Slices, arrays and maps do generally work in my experience, so much so that the mantra of the community is that if you think you need lists, then you’re probably wrong.   Most of the features I find in common collection types from other languages can be built using these low level data types and the experience of doing it is a nice refresher in what is going on at a language level in many collections. That said though I think it’s sometimes confusing and having to explicitly manage slices gets tedious after awhile, mimicking sets out of ‘map[string]bool’ seems strange as does overuse of use the “interface{}” declaration.  The community debate on this is an interesting one and seems to come down to people expressing a desire for common language features either for clarity or convenience.   As you’ll see in my next point, I think we need to do a better job as a language community at valuing clarity. openness and learning and the division over collections is a small example of this divide to me.

Good community needs to be a core principle

As a new language and a community full of early adopters, which way the personality of the go community is going to trend is still very much in the air.    For my part I really hope to see Go follow the python community model to push openness (doing well there), diversity (hmm not so much) and develop a friendly and welcoming base (jury still out).  A trip to any of the Go communities is a very schizophrenic experience right now and while the culture is shaping up to be generally positive and helpful (play.golang.org is a huge help here), we should be mindful that cultivating a strong community is a very purposeful act.  There are spots where grumpy engineers hang out still, wasting the energy to give snarky answers about wasting their energy that it can drive some people away.  Also the entrenchment around issues like Runes or Collections can quickly escalate debates on that topic to something nobody wants to follow.  I threw out the idea of a community code of conduct similar to the one the python community uses and was immediately attacked by parts of the community.    Who adopts Go and what they bring to the community, at this early stage of language and community development, is going to be almost as important to the future of the language as the evolution of the language itself.  Like the social evolution brought on by GitHub, I hope to see Go bring a similar evolution of the more hard core engineering community and open it up to new and diverse engineers in the community and in turn I hope that evolution helps us all become better engineers.

What’s your take on Go, where it needs to develop or improve or do you think it’s perfect where it is?

Enabling Vagrant SSH on Windows

Picture of old shoesDevOps tools like VirtualBox and Vagrant are the kind of tools that can make you feel like we’re able to cast off the boundaries of mortal realities and take our place among the stars.  That giddy feeling quickly wares-off however when you try your new powers on a window machine and, not so surprisingly, things don’t quiet work as smoothly as they do on Linux or OS X.

VirtualBox and Vagrant themselves install just fine on my Window 8 rig, and building a box and bringing it up works just fine as well, but things come to a screeching halt when you need to SSH into your running VM as windows just doesn’t have a functional SSH client at command line.  As most windows users will likely guess here comes Putty to the rescue, but it will need a bit of work.

My robot masters at Google eventually let me to a chain of threads that helped me work out how to connect Putty to vagrant and use the SSH key.   The gist of what needs to be done is:

  • The vagrant multi-putty plugin needs to be installed.
  • The directory with the Putty executable needs to be added to the Windows Path.
  • The vagrant private key in your %HOME%/.vagrant.d/insecure_private_key needs to be converted and saved to ppk format and with the ppk extension by puttygen.

So quickly

Install the vagrant multi-putty plugin, from your windows cmd line type:

> vagrant plugin install vagrant-multi-putty

Then add the directory with your putty executable to your PATH (Google it hippies)

Then vagrant generates a private key to use for ‘vagrant ssh’ in your user directory under %HOME%/.vagrant.d/insecure_private_key.  You need to download and open puttygen.exe and select ‘load’, navigating to the directory above and opening the key.  It will convert it to *.ppk format and you need to save the private key with the .ppk extension.

After that just ‘vagrant up’ on whatever box you want and type:

> vagrant putty

and you should be in!

RailsTutorial and Failing Dropdown Menus

Rails on Mac ImageI’m working my way through the very excellent RailsTutorials by Michael Hartl and ran into a problem I thought I’d not here related to gem versions and the 3.2 version of the book.

Throughout the book I was having problems with the twitter bootstrap dropdown menus not working.   It doesn’t become a problem until user sessions later on but when I got there I tried a little troubleshooting.

Checking out the javascript console I found the error:

cannot read property 'webkit' of undefined bootstrap

Which the nice folks over on StackOverflow point out is a version change in query that no longer supports the way one of the methods are called.  If you use a current version of the jquery-rails gem this means bootstrap dropdowns don’t work. the recommended version from the book is 2.0.0 but that has been pulled due to bugs.

To a Ruby and Rails Noob like me (RoobNoob?) it’s not apparent but using the line in your Gemfile

gem 'jquery-rails', '~> 2.0.0'

Will automatically load the latest bug fix in the 2.0.x line, which is 2.0.3 at the time of this post.  Presumably using current versions of jquery-rails and bootstrap-sass would get around this problem but I want to complete the full tutorial before I do much off-roading.

Normalizing Decency in the Development Community.

Adria Richards posted some very disheartening experiences she had at the recent PyCon, dealing with some awkwardly sexual bro-grammers in the audience.    I think everyone with an interest in developer communities or management should read it as it’s a great expression of what I think could be a too common experience.

I don’t want to rehash the whole issue here but there are a few things that specifically jump out at me as I read her experience that I think are worth noting.

I was struck by how much energy she felt she had to put into the descriptions of the incidents and her perception to feel she was justified in feeling outraged and how utterly draining that has to be to women in the development community.  This seems like one of those things that people should just get intuitively and wouldn’t require more than a tweet to illicit the appropriate WTF reaction I think it should.  This poor women has to essentially open a veign and bleed out all over her blog just to get to the point of feeling justified and from the reaction around the twitterverse, even then some people still have their doubts.

That people can act so inappropriately in large groups without some trigger for regulating it always a chilling thing to me.  In this instance a trigger did work in terms of the wonderful PyCon staff but the threshold for activation was just too high to call ourselves and inclusive community.  Active triggers are almost always a last resort option and form a more inclusive community we’re going to have to aspire to more passive triggers to become a self regulating community.

Why is this important to me?

As a profession, our job is essentially to make conceptual models real for people to use.   We have too much of a mono-culture in programming and that hurts our ability to create better conceptual models.  Diversity of background, thinking and personalities is an important tool for improving our set of conceptual models to solve problems in a diverse world. Anything we do to increase diversity and break the monoculture improves the profession.   Do more of that and don’t want for someone else to ask you to.

Why wont RPG Publishers a dopt an Open Data policy?

I often wonder how much of the decline of Tabletop RPGs is due to the failure of publishers to adopt an Open Data model surrounding their IP. Like most of my fellow old-school geeks, I’ve watched the dwindling of games like DnD and Rolemaster with a fair bit of melancholy. Sure, competition from other entertainment sources is a big reason for this but I think we don’t acknowledge the impact the closed nature of publishers and IP managers on the hobby.    Too tight control and an attempt at trying to force what is basically a subscription model  has a greater impact on making the hobby less relevant than we give it credit for.

Running a tabletop roleplaying game is a derivative work by its very nature, with a fair bit of work being injected by the GM and players.  We live in arguably the most accessible period in human history for creating derivative works yet tools and resources are stagnant in the community, I believe largely because of a failure of RPG publishers to make datasets for their game easily available.   Most games present a player or GM with table after table of numbers to look-up, calculate or reference during gameplay but almost none of them make that data available in a way the community can manipulate or build on.  Fans faced with a desire to create tools for the game are forced to hand type large datasets on their own, often wondering if going to all that work will get slammed by the publisher for a violation of their copyright, or made irrelevant with the inevitable next edition of the game where they’ll have to retype the entire dataset again.

Overall I think this lack of openness further wears away at an already eroding potential fanbase and publishers would do well to find ways to further enable the community.  Instead of trying to strictly control the player experience they should be releasing information to facilitate players building deeper experiences and sharing that with other potential fans.   It could be the ship has already sailed for this hobby and nothing can arrest the continued attrition in the community but I can’t quiet give up hope for a tabletop Renascence as there has been for board games.  I just hope if that time arrives for the hobby that publishers will be ready to meet the opportunity as open partners rather than theme park vendors.

Windows 8 USB Fix for GRUB 2 Dual Boot

Computer Boot ScreenI recently upgraded my desktop to Windows 8 and set it up to dual boot Ubuntu 12.10 with GRUB 2. To my chagrin doing so seemed to disable USB devices (including keyboard and mouse) when trying to boot to Windows.

The root problem seems to be with how EFI BIOS interact with GRUB 2 and non EFI Operating systems and the general answer lies in enabling the right combination of legacy drivers for USB devices in BIOS.

My own flavor of BIOS is an ASUS EFI BIOS and I after trying various combinations came up with one that works for my system. Posting it here in case it helps anyone else:

  • Legacy USB Support: Auto
  • Legacy USB3.0 Support: Enabled
  • EHCI Hand Off: Enabled

I tried several other combinations of these and none worked but the above did. Makes sense if you think about it, when the drivers fail to load it falls through to the legacy drivers.

Fixed me up and I’m dual booting comfortably.