Dr. Drang posted a lengthy article and script to open a given photo’s EXIF GPS location in Apple Maps. He’s using python and a library called “PIL”. I liked the idea but couldn’t, no matter what I tried, get the damn thing to install and what is python anyway? I like ruby! I’m sure there’s an easier way?
Turns out there was.
The rubygem exifr reads EXIF data like a champ, so let’s get it:
$ sudo /usr/bin/gem install exifr
I’m using the absolute path to gem, because we want to end up using this as a system service, and system services use system ruby.
Now, here’s the script. Save it as something like ~/bin/map.rb:
#!/usr/bin/env rubybeginrequire'exifr'rescueLoadErrorrequire'rubygems'require'exifr'end
usage = <<-USAGE
usage: map.rb IMAGE_PATH
USAGE
path = ARGV.shift
if path.nil?
puts usage
exit(0)
end
exif = EXIFR::JPEG.new(path)
if coords = exif.gps
system "open 'http://maps.apple.com/?q=#{coords.latitude},#{coords.longitude}'"else
puts "No GPS data for #{path}"end
Remember to chmod +x it and call it like the Doctor does in a service like this, substituting the path to where you saved the script:
When Livereload is too much and cmd-tab’ing too little, there’s always this AppleScript.
#!/bin/sh
osascript -e 'tell application "Safari"
set _url to URL of current tab of front window
set URL of current tab of front window to _url
end tell'
Put it in your PATH, chmod it +x, and map it to what you like in vim:
map ,r :callsystem("update_safari.sh")
You could even auto-run it when you save the current buffer:
OS X’s open command is great and I use it many times a day. But several times I’ve stumbled through some command that outputs something only to be reminded once again that open doesn’t support piping of input. Let’s fix that.
#!/bin/sh# Put a dash at the end of open to use stdin as arguments# usage: echo "TextEdit" | open -a -for last; dotrue; doneif [ "$last" == '-' ]; then
arg=`cat`
cmd=`echo$@ | sed -e "s/-$/${arg}/"`
/usr/bin/open $cmdelse
/usr/bin/open $@fi
This add a check to open: If the last argument is a dash (-), then use STDIN as the argument to the original open.
Put it somewhere that’s in your $PATH before /usr/bin is and you’re good!
I was kind of disappointed to find out that the ruby mime-type gem just looks at the file extension instead of getting the true mime type. This can cause trouble. Say we’re having the user upload files to our webpage - but we only want .mp3s. Without checking the true mime-type the user will be let through if he just renames his file to .mp3.
If you’re lucky enough to be on Unix though, you can get the true mime type by using the shell command file.
The folder will still exist it just wont be your desktop. You might have to re-log in for it to take effect. With these two power-settings you’re ready to concentrate and do your best procrastination on something better than files or widgets – fx Twitter.
Because of how Editorial workflows work I had to do a bit of hackery to make it work. The idea is to find the starting position of the word just before the current selection. My first version looped through every single word up till the selection but that was unusably slow on large documents. So this version only loops through every word in the 50 letters leading up to the selection. A hack, but it works really well.
I use vim split windows all the time. Instead of tabbing between files I just open another split. Especially if the change is small.
Here’s to of my favourties from my vimrc: <c-w>S to open a full-width, horizontal split topmost and <c-w>V to open a full-height, vertical split rightmost.
" Open splits at top levelmap<c-w>V :botright :vertical :split<cr>map<c-w>S :topleft :split<cr>
nb (new branch) is my very simplified method of creating new feature og fix branches in git.
When I’m working on fixes or features in an existing project, I check out a new branch. This also makes it way easier to create easily understood pull-requests when you need to get it reviewed.
Without any arguments it just lists the current, existing, local branches. These are the ones it will tab-complete. If the argument is an existing branch then check it out, if it’s not then create it based on master.
I’m using zsh and I’m not sure what it would take to make it work in bash. Probably not too much.