TIP: How to Play a Sound Whenever You Commit to Git

Posted on June 12, 2013 by David Hilowitz

Writing code alone at home can be an isolating experience. There you are, day in day out, quietly making magic with your mind (sarcasm, obv.) only to silently commit the fruits of your labor into the void of your source control repository, appreciated by no one. If only a crowd of children could be retained for the sole purpose of cheering you on every time you complete something.

Amazingly, Brandon Keepers over at Collective Idea had the same exact same thought (almost; he was substantially less melodramatic in his blog post about it).  Anyway, here is what my version of his script looks like:


toplevel_path=`git rev-parse --show-toplevel`
afplay -v 0.1 $toplevel_path/.git/hooks/happykids.wav > /dev/null 2>&1 &

I put this in a file called .git/hooks/post-commit.playsound. I then trigger this from the main .git/hooks/post-commit script as follows:


toplevel_path=`git rev-parse --show-toplevel`

Where the post-commit.tweet script is the script from this blog post. If you aren’t also tweeting your commit posts, you’ll want to delete that line.

If you want this to work for every single Git repository from now on, add these scripts to your git-core templates. You’ll have to figure out where these are (it’s different for every setup). For my Mac, they’re located here: /opt/local/share/git-core/templates/hooks/post-commit.


TIP: Turn WordPress Page Titles On or Off Using Custom Fields

Posted on April 25, 2013 by David Hilowitz

Most WordPress themes display page titles for every page. This is usually what one wants, but sometimes it’s useful to be able to easily turn off WordPress page titles for individual pages but still keep them on by default. This is easy to do with custom fields. For simplicity’s sake, I am going to base these examples on the default WordPress Twenty Twelve theme although the same principle should apply to almost any theme.

The first step is to find where the page title is being generated. In the Twenty Twelve theme, this is in the content-page.php file. Go into content-page.php and find the block of code that looks like this:

<header class="entry-header">
<h1 class="entry-title"><?php the_title(); ?></h1>

and change it to this:

<?php if (get_post_meta($post->ID, 'show_title', true) != "no") {?>
<h1><?php the_title(); ?></h1>

As you can see we’ve wrapped the <header> tag in an “if” statement. This checks for the presence of a “show_title” custom field for this particular page. If one is present and its value also equals “no,” we don’t show the title. Otherwise, the page title is shown.

The only step left is to open up the editor for the page you want to modify. Go to the bottom of the page to the “Custom Fields” section. (If there is no “Custom Fields” section, you may have to go up to the top, click “Screen Options” and check the “Custom Fields” box.) In the “Name” box, type “show_title.” In the “Value” box, type “no.” Hit “Update.”

That’s it! Your page title should be gone from that page.

–Dave Hilowitz

TIP: How to get “anonymous” class functions to show up in Safari’s JavaScript Profiler

Posted on November 18, 2009 by David Hilowitz

I’ve been developing a JavaScript module for some graphing work I’m doing. I’ve been using Safari’s built in profiler to figure out which functions are wasting the most CPU. It’s a great tool:

The Safari 4 JavaScript Profiler before I correctly declared my class's member functions

For the longest time, I was running up against this one problem: some of my member functions were being listed simply as “(anonymous function)” in the Profiler function list (see highlighted row above). Not cool. (Luckily for me, the Profiler also lists the .js file and the line number, so it wasn’t that hard to figure things out, but certainly annoying nonetheless.)

Anyway, I’ve finally found a solution. You see, I was declaring my class functions as follows:

Grafsz.prototype.ClearCanvas = function() 

…notice how I’m not giving my function a name? I’m basically assigning an anonymous function to a member variable of the class. All I had to do was change it to

Grafsz.prototype.ClearCanvas = function ClearCanvas()

That’s it. Check it out:

Safari 4 JavaScript Profiler after I had correctly declared my functions

GO PROGRAMMING TIP: Where to put the ‘go.pbfilespec’ and ‘go.xclangspec’ files.

Posted on November 16, 2009 by David Hilowitz

So I was trying to get XCode syntax highlighting support for Google’s new Go language. I had located the two XCode files in the Go SRC package (these were in $GOROOT/misc/xcode), but for the longest time I couldn’t figure out where to put them. I finally stumbled on the answer (thanks to Talamathi for putting me on the right track): The files go in /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Versions/A/Resources/

In short, if you want syntax highlighting support for the Go language in XCode, the following should get you there:
cp $GOROOT/misc/xcode/* /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Versions/A/Resources/

TIP: How to find the full URL of a file within your Application’s Bundle

Posted on June 19, 2009 by David Hilowitz

iPhone Icon 79 x 130This is an iPhone Programming tip. Say you want to find  the full URL of a file within your Application’s Bundle (mainBundle), here’s how you would do it. Example: This would return the full URL of a file named “Sound2.caf”:

NSString *path;
path = [[NSBundle mainBundle] pathForResource:@"Sound2" ofType:@"caf"];
fileURL = (CFURLRef)[NSURL fileURLWithPath:path];