Wednesday, November 9, 2011

Privateer vs. Pirate - resolving one's sensibilities

In short, I don't sail for the "Queen's Navy" - and I sure won't ask her for permission to operate as I please.

I've worked for "the Normals", dealt with "the Squares", and said some incredible brain-dead managementese in the spirit of holding a J-O-B. I want that to be in the past; sometimes the remnant douchbaggery surfaces. My skills have grown and reputation is such that I don't need to sign on with the East India Company, or any other competitor (and I sure as hell won't need to hit the seas under the Union Jack).

Gangplank in the landlocked Old Pueblo has been an experience. It started with a walkabout and some Sonoran Dogs. It turned to chaos in a room - a perfect storm of ideas. Then, we spent a summer with our ship in dry dock: "One more week, one more week, one more week!" the shipwrights claimed. The shipwright and the taxman - old buds, I guess. Neither can be trusted. Finally, our ship was to test the waters: an official launch this past Friday.

Now we've gone from "All Aboard!" to "Abandon Ship!" in 3 short days.

But what we've learned since April is: "some get it, some don't". Gangplank is an idea and that idea is dangerous (and those that pay tribute to that are part of the Danger Party).

Gangplank is not a space - it is a community. And a community does not need a corporate sponsor nor a letter of marque to take action. We operate as needed, flying our flag as we see fit from this point forward.

Let us get a few things straight about that _idea_ in case you have not self-selected already:

It's not an opportunity to peddle your wares. It's a chance to expand your mental horizons.

It's not an arena for "vetting your strawman and acquiring cust-dev in order to accumulate feedback metrics". It's a chance to display your merit and prove yourself with actions & presence.

It's not a place for vacantly exchanging business cards. It's a chance to connect and understand perspectives.

It's not a puppet organization. It's a collection of independent, like-minded iconoclasts (or it will be, after this - and we don't take kindly to mutiny).

It's not going to stop being out of step without corporate ideals.

No quarter will be given. No parlay will be honored.

To join us, follow @DangerParty or search for the hashtags #tusdp #dangerparty

Explore. Create. Master.

Friday, August 19, 2011

Celebrating Whyday

I lead a team of developers working on a larger scientific application. Having fun and reconnecting with the awesome feeling of "creating" things is important. That playful side of programming is often replaced with "software engineering" (*said of a heavy, deep, serious voice*) or adhering to "best practices."

Today - we put our "best practices away" as _why asked and have some kid-like fun.

Here's an excerpt of an email I sent out to the teams who are celebrating:

Hi all!

I just wanted to remind you that today is Whyday! [0] We're all celebrating by doing fun coding or learning. To me, it's all about reconnecting with the playful aspects of programming that originally hooked you in.

Not sure what to do to celebrate? See what everyone is doing to celebrate:

http://twitter.com/#!/search/%23whyday

Still don't know? Learn about Hackety Hack! [1] Or learn about "light" frameworks that can enable web programming! [2]

Who is Why the Lucky Stiff? (aka _why) Well, this is a good place to learn about him [3] as a start. If nothing else, learn about the contributes that Why made to the community [4] and the inspiration that he was.

I'm coding on a little Android application [5] before I take off for the day

We're working some talks from "ART && CODE" in 2008 as a brown bag today at lunch [6, 7]. And a couple of satire shorts by _why [8]. [...]

Chunky bacon!!!


Saturday, May 14, 2011

Dirty Jobs perspective on programming...

Thursday I got to visit Gangplank Chandler (which I'll talk about in another post) and catchup with a friend (Kelly Wilkerson, who I worked as a teaching assistant with some 10 years ago. She teaches at Arizona State University now and we got to share some of thoughts, experiences, frustrations, and insights having both gotten the chance to teach classes [1] on our own. In that vein, I saw Mike Rowe's testimony to the Senate on Wednesday (5/11/2011) and thought there were some parallels in teaching students to program. Here's an excerpt from an email I sent on to her:

So... you might say that students are as disconnected from what they're doing "standing on the shoulders of giants" when coding as people are who don't think about where food comes from or who fixes their plumbing:

Thirty years later in San Francisco when my toilet blew up again. This time, I didn't participate in the repair process. I just called my landlord, left a check on the kitchen counter, and went to work. When I got home, the mess was cleaned up and the problem was solved. As for the actual plumber who did the work, I never even met him.


It occurred to me that I had become disconnected from a lot of things that used to fascinate me. I no longer thought about where my food came from, or how my electricity worked, or who fixed my pipes, or who made my clothes. There was no reason to. I had become less interested in how things got made, and more interested in how things got bought.


Thought about our conversation yesterday and decided this is actually a nice way, potentially, to talk about this in a context (Dirty Jobs) that students might recognize or understand... Or are they not among the millions that watch Discovery Channel?
I realize now that I've been away from teaching for about 5 years, how I might related to students would be drastically changed if I was back in the classroom. I do think that "Dirty Jobs" and the work of architects, programmers, and hackers building the foundational layers that coders use today is something that every students should come to appreciate. It just sadly will not happen until they have to dig in and try some of the work themselves.

[1] I taught a number of courses on introductory programming, component-oriented programming, and enterprise web development in the Computer Science Department at the University of Arizona as an adjunct instructor between 2001 and 2006.

Friday, March 18, 2011

Mindfulness Meditation

I'm helping restart the Mindfulness Meditation group at the BIO5 Institute. Every Tuesday, Wednesday, and Thursday morning from 7:45 to 8:45 am in Keating Building, Room 309. Please enter anytime between 7:45 and 8:45 am. Sit for as long or as little as you like.

Mindfulness Meditation is a simple practice of awareness. The goal? Remain mentally present.

Google's "Jolly Good Fellow" Chade-Meng Tan is an engineer for the company and led the effort to introduce Mindfulness Meditation there: "I want to create a world where meditation is treated like exercise for the mind." [src]

How to meditate: Sit on a chair or cushion. Aim for a posture of dignity. Put your hands where they are comfortable. Close your eyes, or face a blank wall with your eyes opens.

Follow your breathing. Pay attention to the sensations and cadence of your breathing. When you find your mind wandering to the matters of the day, simply return attention to your breath without judgment (try to avoid being critical). You may wish to count breaths (when you reach ten, start over at one). When you find yourself distracted in thought, counting long forgotten, start over at one. If you find a thought or group of thoughts causing you to lose focus, note that. You may wish to think about what you can do about those thoughts to put your mind at rest.

If concentrating on your breath interferes with your breathing, you may "just sit." Just sitting involves being present and becoming mentally aware of reality. You may begin by thinking, "here I am in BIO5, just sitting..." but try to get away from the thoughts and words, just be. When you forget where you are and begin planning your day or your next vacation, stop and remember where you are. Practice staying mentally present in the moment.

You may wish to just start by sitting for 2 to 5 minutes. The effort of being present should help improve your focus during the day.

Learning more:

Articles
Books
  • John Kabat-Zinn. 1994. Wherever You Go. There You Are: Mindfulness Meditation in Everyday Life.
Videos
Local meditation centers
Thanks to Mary Paniscus for organizing the original Mindfulness Meditation group at BIO5!

Thursday, August 5, 2010

"SCIENCE IS RAD" Git Commits

So I thought this was a great idea! But I did not want to just copy the clapping, cheering kids. I work on a bioinformatics & plant sciences project so I thought I'd come up with something more related to that. I edited a comedy bit that used to appear on Triple J (the youth radio station for Australia) called "A Precise History of ...." Sam Simmons did the bits for Robbie Buck's afternoon (aussie time) radio show and they're pure genius (IHMO).

Thanks Collective Idea! I smile and am giddy with each commit.

"SCIENCE IS RAD! HEY YOU SCIENCE FACE!"

Indeed.

Disclaimer: this clip is not used with permission from Australian Broadcast Company (ABC) or Triple J. All rights are reserved to ACB/Triple J. It is 3.5 seconds and falls under no commercial / fair use. Its' appearance here is promotion of the Triple J and their On-Air talent. It will be removed upon request.

P.S. - I didn't give Robbie a link because he can be lame I do not want to promote him. Sorry mate.

Saturday, July 24, 2010

Finding the right place to put static JavaScript files in GWT

I work on in the UI group for a software team building a large distributed system. We use Google Web Toolkt (GWT) and Sencha's Ext JS extensions for GWT (GXT). And we've been running into some warnings when building the applications that were quite annoying:

[INFO] using GWT jars from project dependencies : 2.0.3
[INFO] establishing classpath list (scope = test)
[INFO] using GWT jars for specified version 2.0.3
[INFO] using GWT jars for specified version 2.0.3
[INFO]
[INFO] ---------------------------------------------------
[INFO] T E S T S
[INFO] ---------------------------------------------------
[INFO] Running org.iplantc.de.client.GwtTestComponentValueTable
[INFO] The development shell servlet received a request for 'tizakie.js' in module 'org.iplantc.de.discoveryenvironment.JUnit.gwt.xml'
[INFO] [WARN] Resource not found: tizakie.js; (could a file be missing from the public path or a <servlet> tag misconfigured in module org.iplantc.de.discoveryenvironment.JUnit.gwt.xml ?)
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 16.982 sec
[INFO]
[INFO] Results :
[INFO]
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO]
We're working with GWT 2.0 and the inclusion of static JavaScript resources are changed. So the odd thing is that the functionality supported by ``tizakie.js`` works fine. So when deploying the application, or just running it in dev-mode via the Firefox plugin, everything works as you might expect. It seems the crux is that the test JUnit servlet is not finding it.

I took the hunch and starting searching for the info/warning messages on Google and ended up finding the private method that produces the message in the GWTShellServlet. The servlet is only used during development (which I believe since the package is com.google.gwt.dev.shell). The interesting part was the name of the method: doGetPublicFile()

(I should also mention that we use Maven 2 as build engine so I was looking for the best place to put this file in the Maven directory structure)

So I tried placing the static file in a number of different places to no avail. The info/warning messages were still happening. I thought that if I place the static JavaScript file under org.iplantc.de.discoveryenvironment, like specific in a GwtTestCase, then the development shell might find the file. After all, you have state a package name as your module name for each test case.

With the project's gwt.xml file coming under org/iplantc/de, I figured that putting the file there might get it resolved:

org/iplantc/de/
|-- discoveryenvironment.gwt.xml
`-- ...


But still no luck. One of my co-works and colleagues, Evan, stopped by my desk and I mentioned my frustration. He suggested putting the file in a directory named ``public`` under the base directory structure where the *.gwt.xml file for the project was, like so:


src/main/resources/
|-- discoveryenvironment.properties
|-- log4j.properties
`-- org
`-- iplantc
`-- de
|-- discoveryenvironment
`-- public
`-- tizakie.js

This finally resolved the info/warning messages. I had seen in GWT In Action that they had their static JavaScript files under public directories for then ScriptaculousDemo, and I had seen the private method that produces the message. But I never thought to try this.

I will admit I should have documented all the places that I tried putting the tizakie.js file so I could produce that now. I'm looking to see if I really have done this correct. Or, perhaps, this is a artifact of something related to Maven 2 or just GWT. But it sure is not the most obvious approach to resolving the info/warning messages.

If anyone has suggestions on the appropriate way to include static JavaScript files (in a Maven 2 directory structure), please post comments. I know Maven 2 is not used by GWT development team, but if I know where the static JavaScript file should be in the WAR directory structure - I can figure out in Maven 2 how to make that happen.

Monday, July 19, 2010

Recover lost commits from a Git repository

This morning I managed to blast away a colleagues local commits. We were running into ``non-fast-forward`` errors when pushing and somehow I lost one of the local commits (which I'm still curious how I screwed that up). Anyway, I use the technique I wrote about almost 3 months ago (to the day!): "Recover a deleted branch from a Git repository"

The main difference was I was not after the dangling commit, but the commit just before for it (which would show after the dangling commit in ``git-log``).

So I use that command I borrowed from StackOverflow:

$> git fsck --full --no-reflogs | grep commit

Then, use ``git log --stat <commit-hash>`` on the identified hashes and look for the following commit that you're after.

I will 100% admit that this is in the realm of MacGyver - but I didn't want to be responsible for blowing away any of my co-workers code.