This idea popped into my head a while back. Photographers is quite a high volume community, and we manage to average 30.7692 posts per day. I wanted to do some analysis on the distribution of posts, who our top posters are and (possibly crucially), the commenting "sweet spot" of the day and the week.
To do this, I wrote a little C# app to fetch all the "back 20 entries" pages LJ makes available and then run a few regular expressions over this data to grab the name of the poster, the date, time of the post and the number of comments received. Unfortunately, LJ only allows you to page back 380 entries in this manner, so that only takes us back to 29/07/2008. At some point in the future, I may work out an alternate mechanism for paging through this data, but for the moment, this is all we can get.
Top Posters and Top Commenters

The graph above shows the "top posters" to Photographers, those people who have posted the most over the last two weeks. Shown against that figure are the average number of comments the poster received per photograph. Pretty easy to see that flooding the community with posts is not the way to be an effective comment whore. However producing interesting work repeatedly (igorlaptev), does seem to sustain a high level of commenting.

Switching it around, those people who received the most comments posted the least. Taking the user-ids of the top commented ten I queried to see when they posted and what kind of distribution occurred. Six out of ten of the top posts happened on 31/07/2008. As far as I can tell, the community wasn't running any kind of event on that day. What were you doing on that day that made you all so comment happy?
Time and Day - The "Sweet Spot"
But if you're reading this, then you're probably interested in finding out when the best time to post is for the optimum comment-whoring effect. Is there a magic spot of time in the day and the week when most people are sat in-front of their machines and feeling the most generous with their comment love? Unfortunately, with only two weeks of data, I can't give you any real conclusions on this, but we can at least have a stab in the dark. I've also just realised that the "date" field shows the time in the time-zone of the poster, not a standard time-zone. Bugger. Well let's press on.

Well, hopefully a day is long enough to not be too badly effected by time-zones. There seems to be a quite obvious spike on Wednesday/Thursdays for posting, possibly photos processed from earlier in the week, or maybe all the household chores are done by this point ready for the weekend? Who knows, but Thursday's crowded. There's not a hell of a lot in it for the comments really, just an odd one here of there. I think it's pretty inconclusive, there's no real deviation for when comments get posted in the week.

But, what ho! There *does* seem to be some interesting results when we break it down hour by hour. Unfortunately, please bear in mind that this lumps 8AM US/Pacific with 8AM GMT, so we're still looking at rough figures here. But if you want maximum comments, make your post at 6AM in the morning. Please bear in mind that this may be offset by the low number of posters at that time. One person supplying an absolutely stunning, praiseworthy image will totally skew the number-crunching (to be honest, that's probably what's happened here). Commenting seems to be pretty uniform throughout the day, with a slump in the wee small hours of the morning. Which I personally find ironic, since it's usually the wee small hours of the morning my work is finally ready to post. Maybe I should hold off until after a good night's sleep and then post? The numbers seem to indicate that would return better numbers of comments.
The fall off for posting is also interesting. It's good to see that whatever time-zone you're in, you appear to be getting reasonable shut-eye between 2 and 9am. 7 hours? That's healthy enough. Keep up the good work there.
Conclusion?
Realistically, based on such little data (380 posts is not a lot for around here), we can't make anything firm. It does appear to be a case of quality does indeed win over quantity, and there is no real sweet-spot to the day, so long as you post to most people's idea of waking hours (probably USA time?). But whatever you read into this, I hope you've found it reasonably interesting and worth your time.
More in the series availible by clickling on the image.
Constructive comments and blatent praise all welcome :-)
A couple of weeks ago I was chaperoning Kian’s younger brother with his Dutch girlfriend while she was visiting.
128/365 (BTW)
This was taken after a day out at the Royal Armouries in Leeds. It just so happens to be Kian’s youngest brother’s favourite place to spend an afternoon/whole summer holiday and there’s a Weta exhibition on atm.
This photo started life as a shot out of my Canon 10D. It had a large dirty white door in the centre that has at somepoint been kicked and looked rather unsightly. So I chopped it together.
Now the question is reader - can you see the chop?
So I’ve been rather absent from this blog for a while. I’ve not updated since coming back from Edinbrough in May. Since then I’ve been keeping up with my project 365 - there is a photo per day from the time I’ve not been updating. I’ve broaden my camera use - now using my Polaroid for stuff.
Anything any of you want to know?
83/365 9th June 2008 - one of the few nice days I’ve been able to go out with the camera
88/365 14th June 2008
92/365 18th June 2008
100/365 26th June 2008
102/365 28th June 2008
113/365 9th July 2008
115/365 11th July 2008
127/365 23rd July 2008
130/365 26th July 2008
Random selection of the photos from the collection.
I've been to a few Microsoft events over the past six months, and definitely have more than a passing interest in the development of SQL Server 2008. As a developer, one of the things that had really got me excited was the demonstrations of Intellisense against live databases. This is something that that up until recently was only available using the very excellent tool Red Gate SQL Prompt.
At most of the talks I've been to, it's been made perfectly clear that the Intellisense support was going to be available when connecting to all versions of SQL Server. This sounded fantastic, since I work with lots of different databases on a day to day basis as a contractor, and often have to "feel" my way around. Having to refer to the Object Explorer every five seconds is definitely something of a hindrance.
So, knowing that SQL Server 2008 RC0 had been made available I grabbed it this lunchtime and installed the client tools in the early afternoon. Apart from the fact that it took nearly an hour to complete (just for the client tools), everything went pretty swimmingly. I managed to lose my lovely visual theme again, but never-mind I could always re-apply that later. I fired up SMS, connected to my local SQL2005 Express instance and ... nothing. Didn't work. Zip, nada, no Intellisense anywhere.
Since I was working for a client, I didn't stop to contemplate this too much, I had to simply get on with it. But when I got home I did some digging and found this blog article:
http://blog.magenic.com/blogs/whitneyw/archive/2008/05/04/Backward-compatibility-for-Intellisense-please.aspx
It turns out that the CTP's backwards compatibility for Intellisense was actually a bug, and should never have seen the light of day. SMS wasn't checking the server version before enabling or disabling the Intellisense, and since MS are so worried about us poor little programmers possibly using the wrong syntax, they've pulled the plug on it completely. Having read the blog post and the accompanying details on MS Connect (feedback centre), I am pretty damn sure that no amount of petitioning is going to help.
So, if you're looking for a SQL Intellisense tool, don't bother grabbing the latest SQL Server unless you're wanting to work with only SQL 2008 instances. Keep your SQL 2005 tools and make an investment in Red Gate SQL Prompt. I'll write about how effective a tool it is in another post.
And why if a small company like Red Gate can do it, Redmond can't is beyond me.
More in the series availible by clickling on the image.
Constructive comments and blatent praise all welcome :-)
Given the following code, what would you expect tagList to contain at the end of this sequence?
string tagString = "First, Post, Please";
List tagList = new List(tagString.Split(','));
tagList.ForEach( delegate(string t){ t = t.Trim().ToLower(); });
For those who said {"first","post","please"} go to the back of the class. Let's go back to lesson one shall we?
Strings are classes, yes?
Good.
But they're not normal classes. They are immutable classes. What's so special about immutable classes? Every time you muck around with them, there's a new copy of them generated on the stack and the old one is simply thrown away. Added to that, ForEach passes byval rather than byref, so even if we switched from string to int or any other primitive type, we're still in trouble.
This is a good thing, since it reduces some significant headaches when it comes to concurrency. However, it does mean that when you do what you *think* are nice little tricks such as the above, in fact what is happening is a new copy of the string is created, a new copy is then created after it's manipulated, and then thrown away before moving onto the next one.
The answer lies in another extension method - ConvertAll. So our line above now becomes:
tagList.ConvertAll( delegate(string t){ t = t.Trim().ToLower(); });
Even better, if we're working in C# 3.0, we can also take advantage of the new lambda notation (a quick Hi to all the Haskell people who suddenly raise their heads) and we can now get:
tagList.ConvertAll( t => t.Trim().ToLower(); );
Now *that* is elegant.
Adam Joshua
This is my nephew, Adam Joshua. He’s 8 and this might just have been the only time during the weekend I was in Edinburgh that he sat still!
Main light (room feature) camera right and flash gun 2 foot above camera with stoven at 45° either 1/16th or 1/4th power.
23rd May 2008
24th May 2008
25th May 2008
26th May 2008
27th May 2008
28th May 2008
14th May 2008
15th May 2008
16th May 2008
17th May 2008
18th May 2008
19th May 2008
20th May 2008
This is my most recent shoot from the Studio at university. It’s main purpose was as a piece to go in my portfolio and to go in the portfolio of a make-up and hairstylist Sarah Spears.
Suzy
Nat
Here’s a week’s worth. It’s been a very heavy week getting stuff done and sorted (including two day at Chez Parents). Hope you enjoy.
13th May 2008
12th May 2008
11th May 2008
10th May 2008
9th May 2008
8th May 2008
7th May 2008
6th May 2008
Here in the Republic of Ashton-Ryan has been a very busy week. I’ll point out that I have been doing my photo a day - many with my phone’s camera. I’ll just link to them, rather than give you a weeks worth of images in one post.
48 5th May 2008
47 4th May 2008
46 3rd May 2008
45 2nd May 2008
44 1st May 2008
43 30th April 2008
42 29th April 2008
25th April 2008
26th April 2008
27th April 2008
23rd April 2008
Yesterday I spent the day cross stitching.
22nd April 2008
That’s the Palace Hotel - at about 8:30 am on Tuesday. Colour film, scanned and processed.
19th April 2008
20th April 2008
21st April 2008
Our internet and phone line have been down for a few days so you’re 3 days all at once!!
18th April 2008
I love my new game.
17th April 2008
I partook in some people watching today. In Piccadilly Gardens, Manchester City Centre.
16th April 2008
Is it half full or empty?
April 15th 2008
I’m still ill. *le sigh*
April 14th 2008
Pretty sunlight
I’m still rather ill. At least got some photos.
Palace Hotel
Balda test roll from March 3rd 2008.
This is a beautiful little pop-lens tin camera. I bought it for £5 from a charity through eBay. It takes 120 film and has a set shutter and two aperture settings. It is basically a metal version of the Holga, made in the 1950s!
So last Thursday I developed all of my backlog of film. Most of it was 120 (medium format) black and white, although there was one roll of Ilford HP5+ (developing for someone else).
I found the roll that I used in the studio on March 3rd (2008). While I was in the studio I had the chance to use a Fuji 6×9 - the only one that my uni has.
This is Cassie - one of my class mates.
The rest of the images are here.
April 12th 2008
Yesterday I was rather ill - still went climbing.
11th April 2008
I’ve been in university all day - playing around with the c41 (colour negative development) machine.
April 10th 2008
I’ve been developing film all day (that’s a Patersons day tank, drying on the kitchen sink.)
9th April 2008
Walking home on a rainy day when it decides not to rain on me ![]()
April 8th 2008
Under the Chinese Arch - China Town, Central Manchester. Today we had lunch at Pan Asia (my treat).
7th April 2008
Today was the hand-in day for my second term at uni. Tomorrow I have a personal review (with tutor) and a peer review and then on Wednesday I have a presentation.
6th April 2008
I’ve worked out at what distance I can use my on board camera flash - 5 feet! Isn’t my baby boy (yes, that’s Apollo) a cutie pie?
5th April 2008
My only time out of the house until Monday.
4th April 2008
I’m bored while waiting for prints. I drew on myself - I wish Kian would let me do this to him..
3rd April 2008
I went to town today. This is one of *many* photographs I have of Bolton Town Hall. You should see the ones from Christmas!
April 1st 2008
These are some of Kian’s “Executive Toys”. Lit from about lens with on camera flash - defused with a simple piece of stationary paper (Conqueror Stain 90gsm) - first sheet to hand.
Today’s Kian’s mum’s birthday - Happy Birthday!
31st March 2008
I’ve been printing in the darkroom.
Today and yesterday I’ve been printing. I’ve been doing photograms of my mum’s memento box - the same ones as the baby booties and stuff I took in the studio. I also did some other prints, but they’re for something else and not dry so I can’t scan them just yet!
The rest are in a gallery. Thought I should share.
Ah, okay. I'll can that project then. I was writing a central aggregator that looked after all my content from various social sites and provided a central stream. Then I managed to find FriendFeed, started by a couple of ex-google guys. The idea is very simple. You have multiple online identities and want to provide a way for people to keep track of them all in one place. You create a FriendFeed and add all the services you use to that feed. It does the rest. Simple really...
This is the kind of technology I'm interested in. We have social networks for pretty much everything now, and to be quite honest, it can be something of a nightmare trying to keep up with them all.
Concepts such as OpenSocial appear to concentrate on making developers lives easier, and DataPortability, although something of a geek's wet dream, is still hardly in use and doesn't really do much for aggregating all these identities together. It's not perfect (it's still centralized and you need to add friends, it doesn't check all your friend's feeds for you), but it looks like a step in the right direction.
My FriendFeed lives here: http://friendfeed.com/kianryan
March 30th 2008
It’s finally stopped raining long enough for me to take my camera out!! This is one of the out buildings of a building merchants at the end of our street.

Canon 10d, Tamron SP 28-70mm f2.8
f16 @ 1/125th second
Vivitar 285 shot through home made softbox. Positioned directly above camera.
I decided today was a "play with toys" day, but then realised I didn't have many "light" toys to play with.
Always wanted a softbox. I've got one of those small, Sto-fen diffusers, and that's useful for wide shots, and yes I've got a brolly, but that spills light all over the place.
No, a softbox it had to be. So out comes the cartridge paper, some leftover mountboard, tissue paper and enough masking tape to cover a small building. The result is this, and I'm quite happy with it for a large lump of pulp paper. Saves a few quid as well.
Kian made this:
It was made of four pieces of sketchbook paper (watercolour paper), some chunks of mount board, and two sheets of tissue paper - two Pritt sticks and a roll of masking tape went into it too. Rather good design and it works very effectively.
Also, today’s 365 Project photo came from this photo shoot.
Tomorrow I may let you see my photograms.
29th March 2008
We’re been playing with lighting today.
I like Flickr. Flickr is my friend, I use it to post my own photos, browse those of my friends, and to play around with groups. There are some awesome groups on Flickr, such as Strobist, BlackandWhite and ILoveFilm (I'm also a member of similar communities on Livejournal, can you guess what I do for kicks?).
One of the tasks I seem perform quite regularly is to talk to (read query) Flickr. Flickr provides a wide number of ways to query their service, including XML-RPC, SOAP and REST. XML-RPC isn't native to .NET (and Flickr doesn't work properly with XML-RPC.NET, there's no WSDL which makes SOAP awkward which leaves REST. The elegance of REST is in it's simplicity; you give it a URL, it gives you an XML file. Couldn't be simpler.
Well, relatively simple anyway. Prior to .NET 3.0, you would need to create your object (which was rather long-winded), fetch the object (HTTPRequest anyone?), load it into XDocument, iterate over the nodes, create the node to object mapping and add to a collection. Or use a strongly typed DataSet, but really, this is 2008.
And then do something with it.
Then .NET 3 and C# 3 came along. Anonymous methods, anonymous types. Humm... Monsieur Microsoft, you spoil us! All this stuff is leading towards Microsoft's next big thing, LINQ (Language Integrated Query). A nice system that allows you to query any IEnuerable or IQueryable collection with a shiny syntax. How that's going to fit in with some of the existing query frameworks including NHibernate.Query and Subsonic.Query we will have to wait and see, but for now, let's get something useful from Flickr.
Flickr REST requests take the form of a url string. The one below executes the method groups.pools.getPhotos (gets photos from a given Flickr Pool) for the group NorthWestFencing.
http://api.flickr.com/services/rest/?method=flickr.groups.pools.getPhotos& _
api_key=e03402abb5a6f36bddcae3ba9c2aaf98&group_id=697314@N21
Forming the url is left as an exercise to the reader, but the object cheat sheet is here. If you've not seen it before, have a look at the ToString() method, more anonymous delegates in there! The example above returns an XML document containing a number of <photo> elements. An example response is given below:
<rsp stat="ok">
<photos page="1" pages="1" perpage="100" total="1">
<photo id="2308416535" owner="21037076@N08" secret="08cb209e0a"
server="3274" farm="4" title="Sheffield Open 2006" ispublic="1"
isfriend="0" isfamily="0" ownername="kianryan" dateadded="1206480190" />
</photos>
</rsp>
Which is in fact, one of my own photos from the 2006 Sheffield Open. Argh, that's alot of fields to map! Now we need an object to map these photos to. And here again, C# 3 comes to the rescue (of sorts). With previous versions of C#, you would have had to spend quite a bit of tedious time declaring private fields and public accessors for each property you wanted to expose. The new shorthand get; set; format creates a public accessor and default sets and gets for the property. So much time saved. So the following:
private int _Id;
public int Id {
get {
return _Id;
}
set{
_id = value;
}
}
becomes:
public int Id {
get;
set;
}
9 lines of code to 4. And I'm being nice with the 9 there, I'd personally drop those opening curly brackets onto the next line. Cleaner and more code snippet friendly to.
So now we have our object declared (in half the lines and half the time it used to take) and we can get to the clever bit. The namespace System.Xml.Linq provides the XElement object, exposing the static Load element, which returns an XElement object containing a tree of XElements describing the document. Got that? Okay, have a look here then. As a little nicety, the Load method will take a url which means we get to avoid all that tedious prefetching. Of course, for anything production level, we need to look at caching, but we'll ignore that for now.
We can now return a List of Photo objects using the following code (don't forget to include the System.Linq and System.Xml.Linq namespace:
var query = from photo in XElement.Load(url).Descendants("photo")
select new Photo
{
Id = long.Parse(photo.Attribute("id").Value),
FarmId = long.Parse(photo.Attribute("farm").Value),
Owner = photo.Attribute("owner").Value,
Title = photo.Attribute("title").Value,
Secret = photo.Attribute("secret").Value,
Server = long.Parse(photo.Attribute("server").Value),
IsPublic = Convert.ToBoolean(byte.Parse(photo.Attribute("ispublic").Value)),
IsFriend = Convert.ToBoolean(byte.Parse(photo.Attribute("isfriend").Value)),
IsFamily = Convert.ToBoolean(byte.Parse(photo.Attribute("isfamily").Value)),
Ownername = photo.Attribute("ownername").Value
};
return query.ToList<photo>();
This code builds an object of an anonymous type called query, which will iterate over the elements called <photo> in the xml document, and for each element select an object of type Photo with all the appropriate fields mapped. If you think about it, that's alot of work for the number of lines involved. And that's just a straight select all. We can also perform wheres, joins and a full range of query tools. More information on Linq is availible on Mike Taulty's Blog
The last line causes the query to execute and returns a List of Photos. In my implementation of Photo, I provide additional properties to return the urls for the returned photos such as:
private string SmallUrl
{
get{
return string.Format("http://farm{0}.static.flickr.com/{1}/{2}_{3}_{4}.jpg",
FarmId, Server, Id, Secret, 's');
}
}
which we can bind directly in ASP.NET, Silverlight, Windows Forms, etc. A very powerful and flexible solution which also gives us nice levels of seperation between the request, response and presentation. It's also surprisingly straightforward, takes very few objects to perform and is highly reusable.
Nothing too spectacular, just a few tidying up details on the website:
- Removed the Twitter feed from the central post aggregate. I've been using Twitter a lot lately and the twitter posts were drowning out the posts from LJ. So Tweets are now restricted to a five latest on the left side of the page.
- Added the RSS feed to FeedBurner. So for those of you who subscribe via the RSS, please switch over to the FeedBurner link so I can egowhore. Thanks.
- Added explicit links to all the other social networks I frequent around the FeedBurner link on the front page.
- Fixed the Portfolio page, so it now shows images. I need to have a rethink as to how the filters work, so for the moment, they're as dead as a Python's Parrot. As it is, I'm not happy with the Portfolio; I have some ideas, but strictly speaking they're ideas for a separate site. We'll see how it goes.
My Polaroid from Kian
Harry from Kian
My Holga from me
March 28th 2008
Apollo has decided he likes my laptop and colour flash.
No need for a red gel - just used my hand to defuse the on camera flash.
27th March 2008 - Hannah in my studio
March 26th 2008
I have very few things in my studio that make it “comfortable” - gotta get work done in here - but my kitties are one of the niceties.
March 25th 2008
Hang in there Dude!!
Monday 24th March 2008
Yes, Kian has been stealing my chocolate. Enough said.
More in the series availible by clickling on the image.
klonecaid came around to my house last year with a pile of toys. In that pile was a Minolta SRT 101, a beautiful fully mechanical camera. He very kindly donated it to my collection along with a couple of lenses. Unfortunately, it was in something of a state and required a clean and lubrication. I've had the X-series bodies open before and generally they're straightforward to get to. As I opened this one, I must admit I wasn't really prepared for the amount of mechanics underneath the hood and a few bits went boing. I never managed to get it back together again, so it has resided in a small plastic tub in the studio for the past year. However I was impressed with the camera enough to buy another SRT-101 (the b model this time with mirror lock up!) and I used one or two of the parts from the dead body to cosmetically repair the new body.
But just admire the mechanical detail that goes into the construction of one of these things. When compared to the cameras of the late eighties and then the cameras of today, they are completely different generations of design and technique. Look at the detail of the number of different parts in the head components alone. The light meter itself uses a combination of tension, string, floating needles and dozens of gears to give you a simple light reading. All you have to do is twizzle a few knobs and put a little bit of thought into relationships.
So, when you next pick up your camera, be it digital, film, SLR, TLR or a Kodak Brownie, please give a little thought and thanks to the engineers who make all your toys possible, and the amount of effort they put in for you.
23rd March 2008
It’s been snowing here.
22nd March 2008
Hannah’s scratching post - she is the only one to use it, EVAAAAAAAAAR!
Also posting this as my Marco for the monthly challenge on photographers community on LJ.
21st March 2008 (Good Friday)
Today we have had Kian’s Mum and brother’s to visit - so we’ve spent the day playing on the xboxes, Wii and Dses.
There is flash on this photo, built-in flash too! Defused with half a “man sized” tissue and masking tape.
Thursday 20th March 2008
Its very wet today. Even my jeans were wet through on my little trip to Bolton Colour Lab (and the doctors).


