26 August 2015

Have you ever wanted another workarea for the current repository you're working in? Maybe you're running some tests and need the normal workarea to stay unchanged, so you can't rebase or tweak another branch in the meantime.

This creates a new workarea in ../temp with all the current branches. It's the same repository! Any git command you do in the new workarea is applied to (and uses the database of) the original repository: commit, rebase, push, etc.

NOTE: If you leave off the branch name, 'git worktree add' creates a branch named after the new worktree directory.

NOTE: If you want to operate on the same branch as the original repository, it is disallowed by default. In order to operate on the same branch, you have to say $ git worktree add ../temp master -f'. Also if you ever move off of the branch and want to switch back when another worktree has the same branch checked out, you have to use an annoyingly-long option: $ git checkout master --ignore-other-worktrees. You could put that in an alias like so: $ git config --global alias.co "checkout --ignore-other-worktrees".

The theory I have about the phenomenon is that in a problem solving situation, the human mind develops a lot of parallel ideas & possible solutions, even ones that you are not aware of. But when you try to describe the problem and your ideas to someone else, just the act of trying to explain the situation helps you see it more clearly and links the ideas together better in a way that you become aware of more possibilities than you were able to see before.

But I've always had a problem talking to inanimate objects. Call me less imaginative, I guess. Or timid, maybe.

Well, I've had the feeling for a while now that using Git with small commits made me more productive. And I just realized, I'm using my future self as a rubber ducky, and that the act of writing explanatory commit messages to explain things to my future self is a source of ideas for me.

09 April 2014

"Fortunately many large consumer sites are saved by their conservative choice of SSL/TLS termination equipment and software. Ironically smaller and more progressive services or those who have upgraded to latest and best encryption will be affected most."

There doesn't appear to be any up-to-the-minute current registry that I could find of sites that are affected on the server. The scan posted on github is fairly out of date at this point, and from what I can tell only takes the homepage into consideration, not sites that only forward to https for things like login / checkout.

"Furthermore you might have client side software on your computer that could expose the data from your computer if you connect to compromised services."

My guess is that curl going to an https site would be affected, or other programs that use OpenSSL. Maybe a chat client or if programs are downloading their own "auto-updates" over SSL. Those are the only kinds of things that come to mind right now.

03 April 2014

I've heard: "Solve the hardest problem first." As a rule of thumb, that works great to reduce risk early on a software project. But I found myself saying something different to a co-worker recently:

Sometimes I start with the hardest problem, but sometimes I like to start with a really easy problem. Why do I do that?

Why would it be a good idea to start with the easiest problem? What kind of risk are you trying to pay down in a given situation?

Here are some reasons that would justify breaking the "hardest problem first" rule:

If you need to gain experience in a new domain, starting with something easy can help you get experience before tackling the harder problems.

If the world has changed out from underneath an existing system in an unpredictable way, starting with changing something easy or predictable can help you observe the source of the chaos.

If you are sharing work, handing the easy work items out to others based on their learning goals can help them learn better.

If tackling a hard problem will take a very long time, and others are waiting for you, then picking an easier part of the problem can help ease integration while still letting you engage on the hard problem.

The kind of risk you want to pay down first is important. Here are the kinds of risk that would be payed down by the above behaviors:

risk of getting lost while learning

risk of being unable to bring order to a chaotic system

risk of assigning impossible tasks to someone who just wants to ramp up

risk of high integration costs because of trying to change too much at once

Most of the time, the risk caused by the uncertainty inherent in solving a hard problem is the most important risk to pay down first. But sometimes, there are other factors at play, and other subtle variables that need to be managed to achieve a successful group outcome.

Thank you to Michael Nelson for his instructive collaboration on this topic.

Disclosure: I am employed by FamilySearch. The views expressed here are the opinions of John Sumsion and do not necessarily reflect the views of FamilySearch or The Church of Jesus Christ of Latter-day Saints.