Cornerstone vs. Versions vs. SmartSVN

There are a few different reviews/forums comparing Cornerstone and Versions, but some are out of date, and I really had to try them to really see, so I thought I’d chime in with my opinions. I’ve been using SmartSVN for a while, a cross platform Java SVN client. I started to think about switching though because I now deal with 20+ repositories and it was annoying having so many windows open, since SmartSVN needs a separate window for every repository cannot organise different projects in folders in a single window. I thought it might also be nice to have a native Mac client.

UI
Versions has the better UI, it looks better, and overall has more consistent buttons. Cornerstone is inconsistent with some commands on the toolbar, some on the bottom bar, and some accessible by right clicking. SmartSVN has a more old fashioned UI with simple list like tables and layout rather than

While versions has the better UI overall, it has no built in diff and has a weird feature that when you remove a working copy from the app it prompts to remove the files, which is a bit dangerous and unnatural in my view. It also nests working copies inside the repository tree, which means the overview of all repositories isn’t as good as Cornerstone.

Log/timeline
They all have a log built in, but Versions with its more thought out UI displays this information clearer, and shows changed files. Cornerstone folds up the changed files so you have to click to reveal, and SmartSVN as I said before is less modern and just has a table with all log messages, and another panel to display details.

Recursive Commits
This is actually the main thing I will miss from SmartSVN. SmartSVN had a much smarter recursive commit mode than either Cornerstone or Versions. SmartSVN would:
1) Add unversioned files / delete missing ones
2) Allow you to select which changes you want to commit
3) Only mark the files you select as added and deleted
4) Show a separate diff panel that requires only a single click to show (Cornerstone requires you to click back after each diff preview)

Of these (3) is the key. While Cornerstone prompts you if you want to add unversioned files, it adds all the files first and then prompts to select if you want to commit them, as I mentioned SmartSVN will only add them after you select them. This means you then have the laborious step of going back and reverting the local adds that it did. But still this is better than Versions that has no recursive commits.

Summary
I think I will switch to Cornerstone since having a single window helps so much, and being able to see an overview of all repositories has already showed me missed files that I thought I had previously committed. But there will be more clicking while committing, because SmartSVN is the best there. I wish I could use Versions because its prettier, but just doesn’t cut it for me functionally.

Cornerstone Versions SmartSVN
Native Native
+2 Single Window + Folders +2 Single Window + Folders +1 Single Window
+1 Recursive Commit +2 Recursive Commit
+2 Overview all respositories +1 Overview all respositories
(More items in tree)
+1 Pretty log +2 Beautiful timeline
+1 UI +2 UI
Built in diff Built in diff
-1 Bad remove working copy UI
Mac Mac Mac/Window/Linux
$59 $59 $79

Detecting Quercus

At Onoko, I’ve been using Quercus to run PHP applications on Elastic Beanstalk, Amazon’s scalable Java stack.

Quercus is great, although I’ve found I have to work round some of its unimplemented methods or implementation differences from PHP. I test on a plain Linux/Apache/PHP server though, and wanted a way to detect Quercus so I can conditionally use different work arounds. You can do this with the following PHP:

$IS_QUERCUS = strpos($_SERVER[“SERVER_SOFTWARE”],’Quercus’) !== false;

Force User Login Multisite

This is my first WordPress plugin in a while. Its a modification of the Force User Login plugin that extends it in two ways:

1) It works with WordPress multisite, so that you can set on a per site basis if a site requires login to view the content.
2) It allows you to set a minium user level to view content, so for example, only Editors and above can view the content. (This is useful when you have automatic user registration set up or on a multisite where users may have access to multiple sites.)

Get it from WordPress here

iPhoto ’11 No Place Smart Album

I was wanting to find all the Photos in my iPhoto 2011 library that didn’t have a place assigned, so I could assign a place to them. There wasn’t a filter option that would directly detect if a place was blank. Then I realised I could check for every single letter in the alphabet to see if the place didn’t contain them, but a Smart Album is only allow 10 filters, not the 26. Then I realised almost every place name will contain a vowel, so I could just check for the 5 vowels. If you want to do this your self, make sure you select “Match all of the following conditions”:

Update:
I later realised you could do this for a similar affect using the GPS tag, although its not quite the same because if a photo has a place assigned but wasn’t tagged with GPS it will still appear in this filter:

Random OSX Hacks

1) Custom Sidebar Icons
I had linked my “~/Movies” directory to a directory on my second hard drive (I have an SSD + 1TB 12.5mm in my 13″ MacBook Pro). However this removes the special icons OSX will show for folders like “Movies”, “Documents”, etc. if you drag them to Finder’s sidebar.

I found out that the sidebar icons are kept track of in “~/Library/Preferences/com.apple.sidebarlists.plist”. However it gets overwritten from cache when you log out, meaning you can’t edit it while you’re logged in. I was able to copy and paste in the icon information from the file of a second user when logged in as the second user or by using ssh when the original user wasn’t logged in.

2) Forcing Google Contact Sync
I found this through a combination of searching on google, and running “Sync Now” from the iSync.app menu item while doing a “ps -ef | grep google”.


/System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --oneshot --sync com.google.ContactSync --entitynames com.apple.contacts.Contact,com.apple.contacts.Email Address,com.apple.contacts.IM,com.apple.contacts.Phone Number,com.apple.contacts.Street Address

3) Toggle File Invisibility
I’ve created an AppleScript app that you can drag to your Finder toolbar to toggle file visibility. It requires Xcode to be installed and will make files visible or invisible, but you’ll need something like Total Finder in order to be able to view hidden files to make them visible.