Paper todo system

March 11th, 2011
by Chris Chandler (DevelopingChris)

I really like pen and paper for my todo lists. Which is ironic because my handwriting is dreadful.

I was meeting  a friend for coffee and they asked why I needed a notebook, and I showed them my system. He thought it was good enough I should share it.

I’ve tried many systems, GTD, 7 habbits, AutoFocus. If it can be done with fancy stationary, I’ve probably given it a shot to see how it goes.

My system is the best of those previous 3 that I can see. I use a medium sized notebook, 5″ x 8 1/2″, I really like the feel of acid free paper but that really doesn’t matter.

I write out everything that I can think of that I need done in the middle of the page, as a running list. No priority, no filter, just stream. This becomes the master list. A good master list is made up of actionable statements. “Mortgage” is not a thing to get done. “Call mortgage officer at x bank about mortgage rates” is a good item.

So now we have a master list of things to work from. Flip the page and write the date on top. Scan over the master list and pick 3 things you can take action on in the next few hours.  Write them on this page. An action can be to delegate it, complete it, make some progress and then postpone the rest, or cancel it entirely.  To denote the action taken I use the Franklin planner style. For complete a check mark, fairly normal. For delegation, the initials of the person, and a circle around it. For started a dot, if completed check through the dot, if postponed and arrow pointing right. To cancel something I draw an x.

Now tomorrow rolls around. Now you need to track which page you are on, I use a paper clip, ordinary metal that I can get at anyone else’s desk if I need one. Flip the page, put the paper clip on that page, write the date on the top, pull over any deferred items first, then write in  the next 3 things you can do from the master list.

If anything new is added to your plate while running this course, just add it to today, not the master list. The master list is just a jumping point. If you find yourself procrastinating or you need to break things down, just flip to a blank page, start a master list, and get more granular and start over. As long as you move your paper clip, you won’t be confused by this exercise, and you can get back on track quickly.

Other hacks, that I’ve come up with to make this even better include, writing phone calls from the bottom up on the page. All others from the top. Usually phone calls need knocked out all at once, so its easy to whip out the smartphone and tick off 4 things quickly.

I would love feedback on how you do this kind of thing.

Posted in craftsmanship, programming | Comments (0)

Book Review: Javascript the good parts

March 10th, 2011
by Chris Chandler (DevelopingChris)

I’m working on a project which is javascript intensive. It’s probably 90% of this app. So I was looking for a way to sharpen my javascript.

So I heard that I should pick up “JavaScript: The Good Parts” to help learn how to structure javascript for use in the dom and elsewhere.

Now that I’ve gotten it and read through it, I wish I’d had it years ago. Crockford skillfully guides you through javascript, showing you the grammar and how it works. All the while carefully explaining the pitfalls and how to avoid them.

He shows you how, even though it looks like a C based language, it shares more with lisp. As well as how to create objects that look and act more to how you would create them in a C based language.

One thing that I’ve known for sometime is the scoping problems with javascript. There is no block scope. There is function scope. So and if(){  doesn’t begin a new scope, variables created there are scoped to the parent function. This is explained very well, and how its just good style to put your variables at the beginning of your function because of that.

The next major pitfall is that the new keyword has some tricky implications if not handled properly, so object names that begin with a capital letter such as Object are meant to be run with the new keyword even though they are able to be executed as var x = Object(); this is just bad news.

I’m now a firm believer that javascript is an amazing dynamic language, with a few blemishes and a bad reputation. This book is all of 130 pages and is deceptively small, given how pumped I am to write code. Also the railroad diagrams describing the grammar opened my eyes to how I can think of other programming languages and statements in general.

Posted in Book Review, programming | Comments (0)

Escaping tfs for git, without burning your history

March 9th, 2011
by Chris Chandler (DevelopingChris)

So we used TFS at work. It wasn’t the worst implementation of source control ever, but there was pain. You know contractors with locks on files from 7 months ago, who have moved on. Difficult to do continuous integration with, due to workspacing and having to have multiple copies of things just to do work on hotfixes.

So we are staring down the barrel of a big project, one that means an extended separation from the current code base. We need a sound branching strategy and we need it yesterday.

When I’ve needed this in the past, I’ve used Subversion, up until a few years ago when I discovered git. It was touted as fixing the many branches problem in open source development communities, a bigger problem than mine. So I’ve been using it on windows and linux for the past few years for every little piece of code I touch. Also I keep my home documents and our image library in git, because synchronization of backups is simpler.

So we have a problem, and a solution, but I couldn’t think of a very good strategy to bridge the gap short of writing a translator. It turns out after consulting stackoverflow, this was a solved problem.

There is a git plugin which connects to TFS and pulls down changesets applying them directly to the git snapshot store, with versions in the comments as to where and who did it in TFS.

There were a few small problems when doing the conversion. Git-TFS, depends on a c# based object model for the git CLI. This c# wrapper is not very good at managing memory on handles to shell calls. So I actually ended up forking the code and debugging it while it converted to make it work in batches and then dispose of its space and keep going. Secondly I had to run in a very minimal mode on my box so that enough memory was available. The final problem was a very large installer of a third party library stored in our binaries repository. The solution was to delete it and remove it from history in TFS, and then all was good.

Other things to look out for. Really really long paths. we had a file that was generated by a microsoft code generator whose path from the base of our solution is 230 characters deep. So if you put it more than a few directories deep, git cannot perform file operations on it, because its too much for the operating system, windows 7. The solution is to keep it close to the root of your drive, which is hacky, but the other option is to fix something that isn’t broken.

Now we have a nice git repo, with 7000 commits, that is ready to go.

On a side note, we used the Turnkey linux version control server. Which meant that we had a linux box, up and running a central server with backups, in vmware, in only the time it took to download the virtual image. If you have a server 2008 box handy this isn’t a necessity, as you can run the central server on iis 7.

Posted in craftsmanship, Deployment, programming | Comments (1)

First meeting of Software Craftsmanship group in Columbus

November 23rd, 2010
by Chris Chandler (DevelopingChris)

Last night we held the first meeting for a new software craftsmanship group, in Columbus Ohio. The turnout was tremendous, rivaling some of the more established groups in town. In total, we had conflicting counts between 26 and 28. That was not the point but just shows that the interest in the subject is greater than I anticipated. We met at a restaurant on the north end of Columbus, we over took the back half.

We all had dinner and discussed what about the craftsmanship movement brought us to the meeting, and then discussed some technology specific things at each table. Due to the rapid expansion in attendance we didn’t have the room to pair and really practice like I was hoping. So, that’s the priority for the next event. We had a good amount of diversity in the room: ruby, python, J (jpl), .net, java, android, iphone, collars, T’s, beers, and sodas.

All in attendance were in agreement, that it’s a breath of fresh air to have a group that is more relaxed about format. Having a “nerd dinner “, even though it wasn’t planned that way, turned out awesome. Typically user group meetings seem so “sit and listen” that its hard to get as much participation as I’m hoping for. Everyone seemed to pick up on the vibe and treat it as dinner with old friends, you know your 27 best ones, and look beyond all the usual religious battles that happen on the open internet.

For the next meeting of the group, Matt Yoho has stepped up and would like to host. It will be on more tech friendly turf for pairing.  The initial thought is to choose a kata ( maybe bowling kata), and everyone pair on it, and then do a quick retrospective on how it went. This is the group I’ve wanted to be a part of for a long time. I’m excited to do it again. We’re starting a google group and other communication tools, to keep a posted status without tweeting daily.

Posted in craftsmanship, programming | Comments (0)

Euler….Euler…..Frye….Deliberate Practice

November 8th, 2010
by Chris Chandler (DevelopingChris)

Trying new languages is considered a good habit by most software craftsmen. At the same token, generally most professionals agree that you can’t practice aimlessly you have to have driven, deliberate practice. Just programming doesn’t  make you better. Programming with a goal, and making bugs and or hard things to maintain is good practice. Realizing that you need to then practice those things which you found difficult and then making that your sharpening of the saw effort is the real goal of practice.

In an effort to both learn more python, and get better at writing code in general, I have decided to practice python and math by combining them to make the project euler algorithms.

I think that the python koans were a great experience in learning what the language could and could not do. However solving problems and getting in the thick of them with the language really teaches you how to figure things out in that language.

As promised I’m going to continue to write about deliberate practice, and its role in craftsmanship. One way that I am deliberately practicing is using the project Euler problems. These problems provide a good problem domain to play around in, without getting caught up on the concepts in which to practice principles and self disciplines of the craft.

I’m using a language I have not used as much as others I know, python. I really enjoy python, this lets me use it in the “trenches” as it were. The second piece of the practice which I need right now is TDD. Its not that I don’t believe in TDD or haven’t done it, its that I know I can get better at it such that its my main mode of operation, and not an after thought when I have time.

The TDD reason may push me into practicing in a different language as the testing tools for python are more primitive than other languages, although testing is not difficult the test runners and tooling is just rougher, in my immediate experience. Given this practice it may not be a problem.

I’ll post an article with my progress and the metrics I’m using in my practice. My initial goals for the practice are, get through the first 10 euler problems, in python, with test coverage.

Posted in craftsmanship, Uncategorized | Comments (0)

Thoughts on Craftsmanship in Software

November 5th, 2010
by Chris Chandler (DevelopingChris)

A lot of people, myself included, are thinking about how the software industry can instill learning and getting better industry wide.

The Software Craftsmanship movement seems to be the next iteration of this thought.

Its a thought process that there should be a very small gap if any between, getting it done fast, and getting done right.

There are a lot of concrete principles that people are associating with this movement. Single Responsibility, Open Close… However, that is a very narrow way to look at it. Especially if we expect all people in all languages to aspire to be craftsman of software.

To me it all comes down to how you assess where you are in terms of quality, and what needs worked on. Then working on those things in order to achieve a higher level of quality. If tested code is better than untested code, and you haven’t ever tested, or testing is very hard for you to do in a crunch, maybe you just need to practice testing more?

Deliberate practice, the kind that professionals in other fields use to be at the top of their game, is very much a part of this mind set. I’ve heard a lot of people echoing this sentiment without putting their finger on it directly. Analysis of where you are in terms of where you want to be, and identifying things you can practice to get to where you need to be.

So I am going to be writing a few articles on my thoughts of how I’m doing this, and maybe others can benefit from deliberate practice in the same way.

Posted in craftsmanship, Uncategorized | Comments (2)

Ubuntu 10.10 released

October 11th, 2010
by Chris Chandler (DevelopingChris)

The current answer to OS choice for both my laptop and desktop is. Ubuntu 10.10. Which coincidently was released on 10.10.10.

101010 in binary is 42 in decimal. 42 is the answer to life the universe and everything, and ubuntu 10.10 seems to be quite a good answer to Os’s for everything for me right now.

Posted in Uncategorized | Comments (0)

Ubuntu 10.4 window manipulation buttons moved to the left

May 18th, 2010
by Chris Chandler (DevelopingChris)

Ubuntu decided to put its buttons on the left. They have chosen their side in PC vs Mac. In any case you can run 1 command to get them back. Only some apps are affected, making it really awkward to have any windows with the x on teh left.

gconftool-2 –type string –set /apps/metacity/general/button_layout “menu:minimize,maximize,close”

Run this command in your terminal and it puts them on the right, in the same order min max close, as windows uses. Just one of the few things I’ve had to do more than 1 time in my upgrade of a few machines to ubuntu.

Hopefully its easier to find later.

Posted in Apps | Comments (0)

Php downgrade after upgrading distro to Ubuntu 10.4 Lucid Lynx

May 18th, 2010
by Chris Chandler (DevelopingChris)

Many php applications have compatibility issues with php 5.3.1. Unfortunately in that is the only version currently available in the aptitude repositories for the latest version of Ubuntu.

Once you have either freshly installed Ubuntu and php, or after you update just your distro and do an apt-get update, you will be on 5.3. There are lots of people with this problem. Many of them have solutions. Most involve running lots of terse commands. Then I ran across this shell script that once you have everything installed for php 5.3 will downgrade your stack to 5.2.10 for you. Since I’ve had trouble finding the original source after a few days, here’s the source in case you need it.

#! /bin/sh
php_packages=dpkg -l | grep php | awk '{print $2}'

sudo apt-get remove $php_packages

sed s/lucid/karmic/g /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/karmic.list

sudo mkdir -p /etc/apt/preferences.d/

for package in $php_packages; do echo "Package: $package Pin: release a=karmic Pin-Priority: 991 " | sudo tee -a /etc/apt/preferences.d/php done

sudo apt-get update

sudo apt-get install $php_packages

Copy this script into a file in your home directory, make it executable and then run it. It set everything up for me really well.

Posted in programming | Comments (4)

Ubuntu 10.04 Lucid Lynx Networking problems on laptop

May 15th, 2010
by Chris Chandler (DevelopingChris)

I’ve been in search of a new laptop. One of the things I wanted was linux as the primary boot OS with windows as either a dual boot or a VM.

In my search for the appropriate configuration I’ve played with Ubuntu 10.04 Long Term Support release. It fixes most of my problems with earlier releases, except when the laptop wakes up from lid closing, it refuses to not only connect to wireless networks, it tells me there is no wireless devices. At this point the light that tells you your wireless is off/on, is stuck at on, and can’t be changed.

I’m looking into possible solutions. Many people in the know say that open Suse has much better support for laptops, including lid closing. I have to get this solved ASAP, I’ll update this post with my findings.

UPDATE: It turns out to be a network driver issue with this model of hardware. If you are looking at a machine with Atheros networking, just don’t. Also if you don’t have a sufficient swap file suspend and hibernate get even weirder. Maybe I’m just a newb on how hibernate/suspend work but that was news to me that having a swap file, larger than your ram was required.

Tags:
Posted in Apps | Comments (0)