Selling photos on Picfair

As a keen photographer, I take lots of photos. It's not uncommon for me to shoot upwards of 500-600 photos in a weeks' holiday, and sometimes I like to feel that I've come home with some pretty good shots. I've tried my hand at submitting shots to the bigger stock libraries, but the process always seemed very complex, and the returns were never in your favour and also preferred top quality silly expensive hardware produced images. Canon 5D Quality, thousands of pixels by thousands of pixels, and shot with expensive prime lenses. Not that these requirements are unrealistic, they do charge top rate for their images, and they're all very high quality, but this meant my "hobbyist" shots were out of the running.

Then along came a UK startup Picfair.

How it works

Picfair is by far the simplest photo stock site out there right now. As a buyer, there is a fairly comprehensive search as well as editors picks that help filter the great shots from the ordinary. However, the primary discovery channel is the home page Trending feed. As far as I can tell, this is mostly page view driven, the more views your photos get, the better your chances of climbing the trending feed. Although this appears to work great for the current levels of traffic, I do wonder how sustainable this is longer term. It does mean that you can get quiet a good idea of how well certain photos do in attracting interest. Some of my photos that I thought were great, have only received average interest, whereas other photos have faired much better.

Purchasing photos is also very simple. There are no complex 'token' systems, you buy photos with real money via Stripe Payments. As a developer who has used stripe, I cannot recommend any other payment provider over them. There is also only one, very simple, license. As long as you don't use the images for corporate branding, you're pretty much good to go.

As Seller, Picfair is brilliant. There is no complex audition process as with other stock sites. There are no required Image quality or size requirements. You just sign up for an account, upload your photos free of charge, provide some basic metadata, and set your prices. That's it. Picfair will then advertise your price to buyers, and then add their own commission fee of 20% (as well as a small transaction fee) during checkout. This is a world away from other photo stock sites, where you as the photographer would expect to receive 15-45% of the sale price. With Picfair, you receive closer to 80%. I guess the clue is in the name!

Social

There's a very big aspect to social media to help adversities your photographs. Tweeting about your photos will help generate page views, although how many of these are automated twitter bots is hard to tell. You'll often get a retweet from the picfair account, which then boosts page views even more, as well as bringing you photos to the attention of the picfair team, which If you're luck could then get you featured on the Picfair blog.

Page Views

As I've mentioned earlier, apart from actual sales, page views is the only metric the site provides that allows you see how popular your shot are. This is defiantly an area that could be improved upon, but it's not a deal breaker.

I found with the majority of my photos, most will happily generate approximately 10-20 page views within their first few weeks, depending on the subject of the photo. You can significantly increase your page views by using the built in "Share on Twitter" feature. With my fairly small Twitter followers count, this usually gets me an extra 40-50 page views. If the Picfair then retweet you, you can expect another 50-100 page views. Getting featured on the Picfair blog has generated 400+ page views me, so It's always a good idea to aim for this. So far, my personal sales have been far to low to draw any conclusions as to whether these kinds of page views actually help sell you photos.

My Personal Experience

So far to date, I have been able to sell a few of my shots, to many, and certainly not enough to quit my day job at Kyan!

As a hobby photographer, I'm not in it to make money, but selling a few shots here and there is a massive boost to your personal well being. I've also only uploaded a handful of what I consider to be my better shots, But I try to spend about 30 minutes a week picking more photos, tagging them up and uploading them. I suspect, as with most stock photo sites, this is a numbers game. If you manage to build a large library of good quality photos, with good tagging and good descriptions, then the sales will slowly start to build up.

Please feel free to check out my profile at picfair.com/maniacalrobot

 

Swift style conditionals in Ruby

The Swift programming language has a neat feature that guarantees the presence of optional values in conditionals.

// possibleName is an optional variable, it maybe hold a name, or it may be nil
if  (name = possibleName} {
  // name is guaranteed to not be nil
  // name is also declared as a constant, so it will always be available.
  println(name)
}

This method of exacting the optional value into a local constant for use inside the conditional state is a first class construct.

In Ruby you can use these same constructs to a similar effect, although there are pitfalls to using this pattern. You can assign to variables in the conditional check, however, unlike Swift, in Ruby you can only declare throwaway variables, which opens up the possibility of the value mutating later in the code. The new name variable also exists outside the scope of the conditional, polluting the namespace.

IN RUBY

if name = possibleName
  # assuming name is not reassigned, it will be a value
  puts name
  # However, as name is a variable, we can reassign it
  name = 123
  puts name #=> 123
end
# name is still available outside
puts name # => 123

USING TAP

A Ruby solution to this would wrap the conditional in a block, that would provide the variable to only the block. Object#tap does exactly this, but unfortunately, this approach does not protect us from the possibleName being nil, so we'd still need to check that possibleName has a value.

possibleName.tap do |name|
  puts name if name != nil
end
puts name #=> NameError

WRITE YOUR OWN

Because Ruby is the awesome language that it is, we can extend the behaviour of the Object class. Here, I've defined an Object#tap! method, like Object#tap it yields itself to the supplied block, unlike Object#tap, it won't yield if 'self' is nil.

class Object
  def tap!
    yield self if block_given? && self != nil
  end
end

"Some string".tap! do |name|
puts name
end
# => Some string

nil.tap! do |name|
puts name
end
#=> this does nothing

This gets us pretty close to the swift unboxed value example. The harder part is making this temporary variable immutable, and that's a problem for another day.

 

The Great Bulgarian Adventure

It's been a year since we lived our Great Bulgarian adventure, 6 months spent living and working in the capital Sofia.

We arrived in mid february to a cold city, and a very unfriendly looking front door to our apartment building, our minds starting to wonder if this was such good idea after all. However, within a couple of hours, and short walk into the city centre for our first meal, our worries had been removed. We would get used to the broken paving tiles and the graffiti. Now we're back in the UK, we miss it, the friendly nature of the local Bulgarians, the great food and the months of blue skies.

Most of time in Bulgaria was spent surrounded by the historical buildings in the centre of the Sofia.

Our apartments front door The front door to our apartment
The National Theatre - Ivan Vazov The National Theatre
Newspaper Stand in the Morning
Sveti Sedmochislenitsi Church - The Black Mosque Sveti Sedmochislenitsi Church - The Black Mosque

Martenitsa

One of the many traditions that we've kept up after moving back to the UK is the Martenitsa. These simple red and a white wrist bands are given to friends on the 1st of March, Baba Marta day, and are worn until the first buds of spring start to flower. Then you hang the Martenitsa on the tree. By mid spring, not only are all the flowers in full bloom, but every branch in the city centre had Martenitsas hanging or tied on them.

Martenitsas hanging in the trees
Martenitsas hanging in the trees

Communism

Although the city has a very mediterranean feel, you cannot ignore the obvious remnants of communism that are scattered around. The big statues to Lenin and Stalin have been moved to a small museum on the outskirts of the city, but the Government buildings and the soviet era tower blocks still remain.

The Red start, taken from the old Communist Government building The Red start, taken from the old Communist Government building
The water fountains at night with the National Theatre in the background The water fountains at night with the National Theatre in the background
The gardens and fountains were very popular during the summer months The gardens and fountains were very popular during the summer months
Mount Vitosha overlooking the city Mount Vitosha overlooking the city

Gradska Gardens

The central Gradska gardens is where we spent many happy hours sitting in the sunshine.

Socialist Park Statues Socialist Park Statues

The Protests

A boy plays the piano in the protest camp Portesters in Bulgaria are amazingly civilised

Farewell

The Sofia Public Library The Sofia Public Library

 

Capturing and processing photos on the iPhone

They say the best camera, is the camera you have with you, and for most of us, that will also be your phone. With an 8 megapixel sensor, the iPhone5 is already a pretty capable camera, then consider that modern smartphones are pretty powerful computers that allow you to do most

A recent snowboarding trip to Austria was a great opportunity to test out if just an iPhone was enough to capture some great images.

All of these photos were taken with an iPhone5 and processed on the phone with camera+. View the whole set on flickr

 

Building Astro Runner part 1

Like most software engineers, I've always got a few part-time side projects that work on, most start from what at the time seed like great ideas, most are started with great enthusiasm, most never see the light of day.

This is the story of side project that shipped.

It all started much the same as usual, have and idea, spend an evening playing around with it. Only this time I got a lot further than usual. I've been using X-Code, Objective-C and the iPhone frameworks with the iPhone simulator for other projects, so the tools are famililiar to me. My fulltime job at Kyan is mainly spent programming in Ruby, so the jump to Objective-C is quite straight forward.

My plan was to build a faux-3D endless runner game. I'd recently stumbled across a reference to how to use the UIKit framework to transform simple UIViews into 3D space. From there, I'd figure I could use some very simple animation and some collision detection, and I'd have the basis for the game. It couldn't really be that easy could it?

3 hours later

The Apple iOS frameworks are excellent. There really is no other way to say it. Within a very short space in time, I had the basic 3D environment built, animating 'obstacles', a space ship with movement controls and collision detection. This is half the game built, and although I some major refactoring as I've learnt more, these core parts of the game have remained largly untouched.

The game engine that astro runner uses is 100% Apple UIKit, there are no 3rd party frameworks or toolkits. There are also very little images and graphical assets. Apart from the application icon and the retro typeface, all the graphcial components are drawn in realtime with Core Graphics, this has kept the total download size to kjust under 300Kb, that's tiny compared to many other games, which easily run above 100Mb.