Posterous
Kirk is using Posterous to post everything online. Shouldn't you?
Mirror_spock_thumb
 

Kirk’s PRNG

"Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin." --John von Neumann

Blackberry Solution: "Sorry, your device does not meet the system requirements that are needed to support Google Talk."

I experienced a near panic this morning as my Blackberry Google Talk client stopped functioning and the official download site at http://www.blackberry.com/googletalk/ gave me a “Sorry, your device does not meet the system requirements that are needed to support Google Talk” message when I tried to reinstall it, both over the air and on my desktop.

If this happens to you, you may experience a deep sense of loss, of disconnection from the entire world. The sensation may resemble claustrophobia or being marooned.

Do not panic.
Remain calm.
All is well.

Just open up the software abomination known as Blackberry App World, search for and download Google Talk, and enjoy being restored as it ignores the incorrect dependency checking code the official site is using.

For you detail-oriented folk (and Google) this was tried out on a Sprint Blackberry Curve 8330 running OS v4.5.0.77.

Posted September 23, 2009
// 1 Comment

Mike Lee: Planning for failure means never having to say "mission critical."

Planning for failure means never having to say "mission critical."

Posted June 4, 2009
// 0 Comments

One Div Zero: A Brief, Incomplete, and Mostly Wrong History of Programming Languages

1970 - Guy Steele and Gerald Sussman create Scheme. Their work leads to a series of "Lambda the Ultimate" papers culminating in "Lambda the Ultimate Kitchen Utensil." This paper becomes the basis for a long running, but ultimately unsuccessful run of late night infomercials. Lambdas are relegated to relative obscurity until Java makes them popular by not having them.

Brilliant and hilarious. No matter what your preferred code flavor, you'll enjoy this.

Posted May 23, 2009
// 0 Comments

GitHub "Permission Denied (publickey)" Error Workaround

This frustrated me for 45 minutes tonight, and hopefully this post can save someone else from similar pain.

[MyRepo (master)]$ git push origin master
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

I followed all the instructions at http://github.com/guides/providing-your-ssh-key and http://github.com/guides/addressing-authentication-problems-with-ssh and verified my connection was working via the ssh git@github.com command, but kept receiving the Permission Denied (publickey) error when trying to push to github. Eventually I stumbled onto a workaround. In your local repository, remove and re-add the remote link. These commands worked for me, but YMMV:

git remote rm origin
git remote add origin <remote url>

Replace the remote url with your github clone url (looks like "git@github.com:<username>/<reponame>.git") and try your push again. If it doesn't work for you, please post a comment below and let me know why and what you did instead.

Filed under  //   github   version control  
Posted April 17, 2009
// 1 Comment

Thoughts on Google Voice

I've been a Grand Central user since the summer of 2007, and Google Voice is a great next step, adding SMS, Voicemail Transcription, and Conference Calling. I think the service is still just a preview of a real solution to the problem of routing voice communications. GV gives you one number, and incoming calls (and SMS) to that number will ring all the phones you tell it to. The problem is that your various phones still have their own real numbers, and to make outgoing calls that show up with your GV number for the recipient, you need to go online and initiate the call from the google voice web interface.

Ideally all your devices will someday be able to use your one number when making outbound connections. I wouldn't be surprised if this software is already being developed by Google and T-Mobile for the G1, but suspect it will really take another 10+ years while we wait for non-VOIP phones to be retired.

That's my hope for the future, but in the short term, there are a couple of things irritating me:
  • Each of my destination phones thinks it is my voicemail provider and should answer the phone after a few rings. If I want to use GV's wonderful voicemail I need to disable voicemail on my cell phone, skype, and office phone, which is a pain.
  • Outgoing calls initiated via the web require me and the other person to each answer the phone, and in my tests today, the calls went straight to my cell phone's voicemail without ever ringing, so the person I called answered the phone to hear Sprint asking them to leave me a message... probably Sprint's fault, but it's not usable for me right now.
That said, my thanks go to Google for buying and building the next step in voice communications.

Posted March 12, 2009
// 0 Comments

Thoughts on Safari 4's New Tab Bar

Safari’s new tab layout, placing the tabs directly in the window title bar, is a radical change.

Chrome and Safari 4's top-of-the-window tab placement irritated me at first, but I think that was mostly reaction to the required muscle memory changes, not the on the merits at all. Conceptually they're much cleaner up top, though Gruber has many well-thought out nits to pick with the implementation.
The biggest problem remaining is Safari still doesn't show me favicons in tabs. IE7 can do this for crying out loud, why not Safari?

(For those of you on the wild side, there is a browser plugin that purports to add favicons to Safari tabs. I don't do plugins as a general rule and haven't tried this one out, but if you're interested you can find Glims here: http://www.machangout.com/)

Posted March 9, 2009
// 0 Comments

Coding Horror: Paying Down Your Technical Debt

I believe that accruing technical debt is unavoidable on any real software project. Sure, you refactor as you go, and incorporate improvements when you can -- but it's impossible to predict exactly how those key decisions you made early on in the project are going to play out. All you can do is roll with the punches, and budget some time into the schedule to periodically pay down your technical debt.

As usual, Atwood does a brilliant job describing a necessary but easily overlooked part of software engineering.

Thanks Jeff, for giving my habitual refactoring some added legitimacy.

Posted March 2, 2009
// 0 Comments

Web Directions North 2009 Raw Notes

I'm still recovering from the after party and it'll be a few more days before coherent thoughts emerge, but if anyone is interested in my raw notes, they are available here:

Warning: These probably won't make sense without some serious editing on my part, and even then keep in mind that I'm hardcore nerd material, so all you cool designers I met will be bored to tears by most of the contents.

http://evernote.com/pub/kvangork/WDN09Notes

Posted February 6, 2009
// 0 Comments

Yammer: Twitter Goes To Work

I'm thrilled with a new communication tool called Yammer, which is basically a private, enterprise twitter. Go directly to their site and sign up to create or join your company's network, or if you aren't convinced yet see my writeup at Yammer: Twitter Goes To Work.

Filed under  //   communication   tools  
Posted February 3, 2009
// 0 Comments

svn:externals - using libraries with subversion

SVN is one of my absolute favorite tools. It’s hands-down easier to use than TFS or (gasp) SourceSafe, which have been the other common version control systems in my industry. If you aren’t using it, you’re missing out (quiet down all you GIT-heads in the back… keep using it for a few more years and we’ll accept that it isn’t just a fad).

In any project of significant complexity you’re going to use libraries of some kind. These libraries frequently end up being copied into the project tree under a lib subdirectory and compiled or included in a project deployment from there. Most of my projects rely on open source libraries, and as we make changes to a library those changes have to be propagated from project to project using patch files or simple copy/paste. This time-consuming process opens up the possibility of human error and versioning confusion, but there is a better way.

SVN Properties
First, some basics: using Subversion, you can specify metadata properties on any directory or file. These can be used for your own custom purposes, or more often to control how the SVN client treats certain files. One commonly used property is svn:ignore, which (unsurprisingly) tells SVN to ignore particular files when looking for changes in a working copy. My new favorite property is svn:external, which when set on a directory, allows you to define subdirectories and point them at any other SVN path, even to a particular revision. You can set an SVN property using the official command-line client, but I’ll leave the syntax for that to the official documentation and show how to do it in my favorite SVN client, TortoiseSVN.

  1. Check out a working copy of your project.
  2. Right-click the parent folder of where you want your library subdirectories placed. On the TortoiseSVN context menu, chose Properties.
  3. In the properties dialog, click New, then select a property name from the drop-down menu.

svn:externals
In the new properties dialog, select svn:externals, and then we’ll enter a value in the multi-line edit box provided. First, if you’re using an SVN client before version 1.5, upgrade and have everyone on your team upgrade. If you’re stuck using pre-1.5 clients the syntax is different so see the official documentation for the details.

In modern clients the syntax looks like this:
External_Path@RevisionNum SubDir_Name

  • External Path: This can be a fully qualified SVN url like “svn://svn.example.com/skin-maker” or you can use symbols to specify a relative URL.
    • ../ Relative to the URL of the directory on which the svn:externals property is set
    • ^/ Relative to the root of the repository in which the svn:externals property is versioned
    • // Relative to the scheme of the URL of the directory on which the svn:externals property is set
    • / Relative to the root URL of the server on which the svn:externals property is versioned
    I only use one SVN server for my project and libraries repositories, so I generally have external paths in the form of /libraries/libraryName without the protocol and server.
  • Revision Number: Regular integer revision number of the libraries repository. Here’s  a great note from the SVN Book:
    You should seriously consider using explicit revision numbers in all of your externals definitions. Doing so means that you get to decide when to pull down a different snapshot of external information, and exactly which snapshot to pull. Besides avoiding the surprise of getting changes to third-party repositories that you might not have any control over, using explicit revision numbers also means that as you backdate your working copy to a previous revision, your externals definitions will also revert to the way they looked in that previous revision, which in turn means that the external working copies will be updated to match the way they looked back when your repository was at that previous revision. For software projects, this could be the difference between a successful and a failed build of an older snapshot of your complex codebase.
  • Subdirectory Name: usually “lib” - the name of the directory underneath the directory with the svn:externals property set, which will be mapped to an external repository URL.

My projects follow a traditional trunk-branches-tags folder structure, with a /source directory under trunk. I set the svn:externals property on that source directory and end up with repository_root/trunk/source/lib pointing at an external library directory.

After setting the property, update and commit, and you should see the external library source downloaded during the update process. Commit will make sure all your team members get the property set in their working copies and their next update will likewise download the external library.

That’s all I have for now. Fire away in the comments if you see a mistake or something isn’t clear.

Filed under  //   externals   libraries   svn   version control  
Posted January 30, 2009
// 0 Comments