
I’ve been doing a little free-lance web development again lately. It’s been a while and the landscape’s changed in the 2 or 3 years since I was last freelancing. Specifically the ‘minimum requirements’ for a public facing site and the quality of the ‘cheap’ generic hosts have both increased (for the better). In light of these two factors I’ve been having a go at making some basic ‘web-presence’ sites using ruby on rails.
Learning enough rails to make a simple site was easy enough, but the deployment turned out to be a bit of a puzzle. Particularly as bluehost, whose control panel is otherwise excellent, just doesn’t seem to have its rails story sorted. To make matters worse, every “rails bluehost” tutorial out there starts with “you need SSH access” and bluehost now requires a faxed or emailed copy of the account-holder’s drivers license to grant SSH access. Seeing as my clients are generally the hosting account holders, this wasn’t an option for me.
After a bit of trial and error I’ve discovered that you can indeed deploy a basic Ruby on Rails site to bluehost without SSH access (assuming you have ftp access). Here’s how:
-
Create rails directory.Use your ftp client to create a directory alongside the
{app}directory to which the domain/sub-domain points.I’ve called mine{app}_rails, but it can be called anything. -
Upload rails app.Upload your rails app into the newly created
{app}_railsdirectory. -
Symlink to rails public directory using temporary PHP.We need to symlink the
{app}directory (to which the domain/sub-domain points) to the{app}_rails/publicdirectory. Ordinarily we’d use the trusty ln -s command, but we can also do it without SSH access by using PHP’s symlink function.Create a php script on your local machine (I’ve called mine
symlink.php) with the following contents (replacing the{account}and{app}tokens with your own). Make sure the{app}directory doesn’t already exist (rename/move/delete it if it does).<?php symlink('', ''); ?>Upload the
symlink.phpto an accessable directory and then browse to it in your browser. If the script succeeds you’ll be greeted with a blank page (otherwise you’ll get errors). Once run successfully, you can delete the symlink php script (it’s no longer needed). -
Ensure
dispatch.fcgiexists.To run under apache, a rails app needs fcgi dispatchers. My understanding is that rails 2.3 no longer fcgi dispatchers by default so if you didn’t use the--with-dispatchesoption when you created your app (I didn’t) you’ll need to create them on your local machine using the following command:rake rails:update:generate_dispatchersThen upload the created
dispatch.fcgi,dispatch.cgianddispatch.rbfiles from your localpublicdirectory to{app}_rails/publicdirectory on bluehost. -
Enable
dispatch.fcgiin.htaccess.Create a.htaccessfile inside your{app}_rails/publicdirectory with the following contents:AddHandler fcgid-script .fcgi
AddHandler cgi-script .cgi
RewriteEngine On
RewriteBase /
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
ErrorDocument 500 “<h2>Application error</h2>Rails application failed to start properly“ -
Check permissions using FTP client.We need to check/set some permissions. Again, we can’t use the standard
chmodcommand without SSH access but luckily most modern ftp clients can also view/set permissions (select the file/directory then ⌘-i in Transmit or ‘right-click > File permissions’ in FileZilla). Set the appopriate permissions for the following files/directories (list courtesy Jack Danger Canty):File/Directory Permission {app}_rails/public755 {app}_rails/public/.htaccess755 {app}_rails/public/dispatch.fcgi755 {app}_rails/public/dispatch.cgi755 {app}_rails/log775 {app}_rails/tmp775 -
Handling rails gems version issues.If you're app still isn't working, check the error logs in cpanel. It may be that the version of the rails version you built against isn't available on the shared host. In this case,you'll need to either freeze the gems into your app locally (then upload the
vendor/gemsdirectory) or comment out the following line inenvironment.rbwhich refers to their specific version (risky).rake rails:freeze:gems
That should be it!


We all have bookmarks we use everyday. Delicious allows me to group mine together by applying a common tag (I use the tag “me”). I then tell the 

zenith
sky row
horizon row
ground row
nadir (taking two at opposites enables later removal of feet & shadows)
Ensure ‘consistent colour’ across shots by correcting white-balance discrepancies (tip: remember to lock white-balance, exposure, shutter-speed, focal length and focus while shooting). Also correct any
Import the corrected images into a stitching tool (after trying a few apps I finally ponied up for a copy of
Back in photoshop I combine both equirectilinear images into a single image (‘patching’) and apply any necessary retouching (e.g. making horizons dead-level and apply colour-corrections) to produce the pièce de résistance: the final (70+ megapixel) image.




















PangeaVR is (amazingly) free, though I 

Download and extract 









Sharpness is the top of the list for most lens geeks. Not all lenses are created equal, especially considering the difference in the ‘sharpness’ of the image they produce. A single lens can vary greatly between different focal length/aperture combinations and even varies (non-linearly) from centre to corner within a single shot!
Distortion is what causes real world straight lines to appear curved in your photographs. Zoom lenses in particular are prone to distorting ‘inwards’ (pincushion) at one extreme and ‘outwards’ (barrel) at the other. Distortion varies by focal length.
Falloff is the phenomenon whereby the corners of the frame appear ‘darker’ than the centre (i.e. the light ‘falls off’ from centre to edge). Though often used as an intentional effect, falloff is generally avoided if possible and varies with focal length, aperture and obviously, distance from centre.
There was much internal debate (which still rages) about this UI element which allows users to change/compare reviews, but the eventual decision was to filter reviews by system, lens and finally camera body. Note: Our lens tests are performed on a camera body (instead of an optical test bench) which has relevance upon the results.