<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="text">Solitude</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/solitudevkps" /><subtitle type="text">Technology. Code. Living relentlessly in the real world.</subtitle><updated>2010-09-07T19:29:51+00:00</updated><generator uri="http://wordpress.org/">WordPress</generator><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="solitudevkps" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><id>http://solitude.vkps.co.uk/feed/atom/</id><entry><title type="html">Social Cinema and Cineworld: Part 2</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/09/07/social-cinema-and-cineworld-part-2/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-09-07T12:28:46-07:00</updated><id>http://solitude.vkps.co.uk/?p=4655</id><summary type="html">In part one, I discussed some of the fundamentals of building a cinema community that is engaging. In this part I&amp;#8217;ll go a little further into the social aspects of such a community. Building out from the fact that you can track, rate and recommend films, engaging in some form of debate around the merits [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/09/07/social-cinema-and-cineworld-part-2/">&lt;p&gt;In part one, I discussed some of the fundamentals of &lt;a href="/Archives/2010/09/05/social-cinema-and-cineworld-part-1/"&gt;building a cinema community that is engaging&lt;/a&gt;. In this part I&amp;#8217;ll go a little further into the social aspects of such a community.&lt;/p&gt;
&lt;p&gt;Building out from the fact that you can track, rate and recommend films, engaging in some form of debate around the merits of those films would be useful. People love to talk about films, and there are plenty of forums around to do just that but those forums don&amp;#8217;t know a huge amount about your film habits. They can&amp;#8217;t tell you that a discussion has just kicked off on a film you recently watched, that people are discussing a forthcoming sequel or that it&amp;#8217;s actually a poor quality knock-off of another film. By &lt;strong&gt;tying the discussion of films into tracking and recommendation&lt;/strong&gt;, you can do all of those things and more.&lt;/p&gt;
&lt;p&gt;While the last thing the world needs is yet another social network, having &lt;strong&gt;some connections between accounts would be of great benefit&lt;/strong&gt;. If I&amp;#8217;m looking to go and see a film with a particular friend or friends, it would be easy to check the films we all want to see automatically and recommending it, rather than picking through them one by one. Turn this around: if I want to see a certain film but don&amp;#8217;t know who wants to see it, the site could easily give me a list of my friends who also want to see it. Slightly different, have all my friends been raving about some new film that I don&amp;#8217;t know about? Well, let me know and I can add it, see it and join in that conversation. There are a lot of interesting possibilities here.&lt;/p&gt;
&lt;p&gt;Next, &lt;strong&gt;throw location into the mix&lt;/strong&gt; and you can power another bunch of community-building features. If I genuinely don&amp;#8217;t know anyone who wants to see a film, maybe there are some other like-minded people in my area that would like the company. A little feature to negotiate a time or set up a meeting and you get more people through the door, and a happier audience.&lt;/p&gt;
&lt;p&gt;Probably more interesting is using the recommendation features and location together to build &lt;strong&gt;film groups&lt;/strong&gt;. A bunch of people in the same area all like horror films? Encourage them to start a group to go and see all the new scary movies that appear, and discuss it later. You wouldn&amp;#8217;t even necessarily need location for this: you could add film groups to the forum and have people across the country discuss their favourite zombie movie.&lt;/p&gt;
&lt;p&gt;I hope I&amp;#8217;ve shown that a handful of features, mixed and remixed, can drive a hell of a lot of interesting behaviour that would benefit the movie-going public and make a cinema chain stronger.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry><title type="html">Social Cinema and Cineworld: Part 1</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/09/05/social-cinema-and-cineworld-part-1/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-09-07T12:29:51-07:00</updated><id>http://solitude.vkps.co.uk/?p=4650</id><summary type="html">It&amp;#8217;s always surprised me how little Cineworld (and other big cinema chains) have made of building a community of film-goers, especially given their Unlmited cards. Here&amp;#8217;s what Cineworld do right now towards engaging with customers: If you sign up to their website, you can keep track of your bookings, and anything you&amp;#8217;ve ordered from their [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/09/05/social-cinema-and-cineworld-part-1/">&lt;p&gt;It&amp;#8217;s always surprised me how little Cineworld (and other big cinema chains) have made of building a community of film-goers, especially given their Unlmited cards.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s what Cineworld do right now towards engaging with customers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you sign up to their website, you can keep track of your bookings, and anything you&amp;#8217;ve ordered from their shop. Note that unlimited customers can&amp;#8217;t advance book tickets, so that&amp;#8217;s not helpful.&lt;/li&gt;
&lt;li&gt;If you sign up to their website, you can keep track of anything you buy in their shop section. Since the only thing they appear to sell is cinema gift cards, that&amp;#8217;s not hugely handy for unlimited customers unless they&amp;#8217;re buying for someone else.&lt;/li&gt;
&lt;li&gt;If you follow &lt;a href="http://twitter.com/cineworld"&gt;Cineworld on Twitter&lt;/a&gt;, they have competitions and info, and answer questions you may have. Handy, but not the most engaged community.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#8217;ll preface my ideas about how they could both improve the experience they provide for customers and their engagement by saying that as I understand it, right now, they can&amp;#8217;t connect the use of an Unlimited card to an actual user account so those ideas are a little fanciful just now. The rest are not.&lt;/p&gt;
&lt;p&gt;That important issue aside, a few thoughts.&lt;/p&gt;
&lt;p&gt;First and foremost, a cinema-focussed community is about films: seeing them, discussing them, and figuring out what else we would like to see. From that:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Each film shown at Cineworld should be followable from the moment it&amp;#8217;s added to the release schedules&lt;/strong&gt;. They maintain a list of future releases. Users should be able to add those films to the list of films that they would like to see. Once they&amp;#8217;re nearly out, it would then be trivial to send reminders to all interested users that whatever they want to see is nearly out.&lt;/p&gt;
&lt;p&gt;Now, importantly, this could not only apply to future releases, but current releases and past releases. It would be useful to know when a classic film is being re-released, or shown as part of the cinema&amp;#8217;s sporadic classic film series.&lt;/p&gt;
&lt;p&gt;Having trackable films leads quite comfortably into having rateable films. &lt;strong&gt;Users should be able to give a personal rating for every film they have seen&lt;/strong&gt;. Once you have this information, you can start to push a lot of interesting functionality. You can do things like take the noise out of the listings page. If I can view a listings page of current releases that I have not already seen, that clearly makes picking something a smoother process. Films that I had already tracked as wanting to see could be highlighted, and films the cinema think would be of interest (more later) could be too.&lt;/p&gt;
&lt;p&gt;Additionally, if Cineworld could track viewing through Unlimited card usage, the tracking of films viewed could be automated and reminders for ratings could be sent out.&lt;/p&gt;
&lt;p&gt;Now, knowing what the users think of each and every film, it would be possible to start employing the same ideas that have helped Amazon and Netflix: &lt;strong&gt;based on prior ratings, personal recommendations could be made on what to view next&lt;/strong&gt;. This seems so obvious to me I&amp;#8217;m surprised that no cinema chain has picked up on it. Netflix practically built their business on top of it, and I wouldn&amp;#8217;t be surprised if the first cinema chain to do this seriously disrupts their industry in the same way.&lt;/p&gt;
&lt;p&gt;Tracking, rating and recommendation: the three obvious pillars on which to build a community. That&amp;#8217;s just a starter. I&amp;#8217;ll be discussing the social aspects and stickiness in &lt;a href="/Archives/2010/09/07/social-cinema-and-cineworld-part-2/"&gt;part 2&lt;/a&gt;.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><title type="html">Film Fight 2010: August</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/09/01/film-fight-2010-august/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-09-01T14:53:05-07:00</updated><id>http://solitude.vkps.co.uk/?p=4341</id><summary type="html">August is the month for the big summer blockbusters, three in total. The A-Team is a failed attempt to revive a well-loved franchise. First, the good: both Bradley Cooper and Sharlto Copley were great as Face and Murdoch, using all the right ticks for those characters. Some of the action sequences (i.e. the numerous explosions) [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/09/01/film-fight-2010-august/">&lt;p&gt;August is the month for the big summer blockbusters, three in total.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The A-Team&lt;/strong&gt; is a failed attempt to revive a well-loved franchise. First, the good: both Bradley Cooper and Sharlto Copley were great as Face and Murdoch, using all the right ticks for those characters. Some of the action sequences (i.e. the numerous explosions) were decent enough. That&amp;#8217;s about it. The rest was a mish-mash of nonsensical plot, with too many pointless threads and characters. Given the film was trying to establish four strong leads, adding a half dozen other people to the mix really left little time for much else. Liam Neeson&amp;#8217;s Hannibal was an interesting idea, portraying him as a meticulous and obsessive planner, but we don&amp;#8217;t get enough time with him to really see it pay off. Quinton Jackson&amp;#8217;s take on BA was pretty poor. Rather than being the mean, near invulnerable hulk of the series, we get a generic brawler who, to add yet another sup-plot, finds religion. There were some good ideas on show, but they were drowning in franchise building, dumb plotting, and the apparent need to move to the next action set-piece. Poor. (See &lt;a href="http://twitter.com/garyfleming/status/20729340430"&gt;my A-Team Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Expendables&lt;/strong&gt;, on the other hand, made to qualms about what it was. Sure, the plot was perfunctory and the characters paper-thin, but that was the point. It was all about getting the biggest action movie stars of the last three decades together to revel in their artform. It&amp;#8217;s a big dumb action film, with all the explosions, guns, and hand-to-hand fighting you could hope for. If you want a story, don&amp;#8217;t bother. If you want to see Stallone fight Lundgren, then this is the film for you. (See &lt;a href="http://twitter.com/garyfleming/status/21183611608"&gt;my The Expendables Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Finally, &lt;strong&gt;Salt&lt;/strong&gt; is a fairly straightforward action-thriller. It borrows heavily from the improvisational spy style of the early part of the Bourne trilogy, but without either the story or meaty contact to really see it through. While a handful of the set-pieces are genuinely well-done, they get lost in the predictable &amp;#8220;twists&amp;#8221; of the thriller plot. It&amp;#8217;s the usual 24-style movie-plot threat and by the time it actually happens you really won&amp;#8217;t care. A shame. (See &lt;a href="http://twitter.com/garyfleming/status/21816558896"&gt;my Salt Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The winner is &lt;strong&gt;The Expendables&lt;/strong&gt;, for it&amp;#8217;s no-nonsense action sensibility. It would have lost in many other months, but up against two other action films, it&amp;#8217;s no contest.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><title type="html">Film Fight 2010: July</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/08/01/film-fight-2010-july/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-08-01T09:57:09-07:00</updated><id>http://solitude.vkps.co.uk/?p=2465</id><summary type="html">As is the norm, July was a reasonably full month with 4 films viewed. Predators, while not a masterpiece by any measure, is exactly what it needed to be: an action movie with an 80&amp;#8242;s feel, free from large CG scenes and full of physical effects, enough of a plot to put the cannon fodder [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/08/01/film-fight-2010-july/">&lt;p&gt;As is the norm, July was a reasonably full month with 4 films viewed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Predators&lt;/strong&gt;, while not a masterpiece by any measure, is exactly what it needed to be: an action movie with an 80&amp;#8242;s feel, free from large CG scenes and full of physical effects, enough of a plot to put the cannon fodder where it needed to be, and some absolutely great scenes. The pre-credits opening shot is particularly grabbing, pushing the audience immediately into the action and getting things started with some panic. Adrien Brody doesn&amp;#8217;t pull-off being an action hero in the same way that Schwarzenegger did, and the slow reveal of the predators themselves was something of a waste, given we know what they look like from the rest of the franchise, but those are small points in an otherwise solid film. (See &lt;a href="http://twitter.com/garyfleming/status/18185834123"&gt;my Predators Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a lot I would like to say about Christopher Nolan&amp;#8217;s latest masterpiece, &lt;strong&gt;Inception&lt;/strong&gt;, but can&amp;#8217;t do so without leaving a large trail of spoilers. There will be many fiercely argued debates about the minutiae of it&amp;#8217;s world and it&amp;#8217;s take on subjective reality. That&amp;#8217;s how you know it&amp;#8217;s going to be a classic. Nolan has created an incredible piece of cinematic storytelling, full of visuals and world-building that wouldn&amp;#8217;t work in any other medium. The central conceit of controllable dream worlds is revealed just as quickly as it needs to be, just like everything else in this film from Leonardo DiCaprio&amp;#8217;s broken team lead to the depth of the maze that is being built in the incredible plot. That, as I see it, is its only major flaw: everything moves so quickly that only the central concept and DiCaprio get a chance to breath. The supporting cast (and a great cast it is) provide excellent sketches of characters and there are many questions to be asked about them, but we never get the time to see any of it. When the only real criticism you have of a movie is that you want to see a lot more, you have a classic. A fantastic, must-see film. (See &lt;a href="http://twitter.com/garyfleming/status/18840963110"&gt;my Inception Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Pixar&amp;#8217;s latest effort is a new look at an old franchise. &lt;strong&gt;Toy Story 3&lt;/strong&gt; revisits Woody, Buzz and friends ten years later as Andy, their owner, prepares to go to college. The central theme of transition and moving on sets a tone that is both sweet in places, and fairly sad in others. That&amp;#8217;s not to say it&amp;#8217;s not got the little adventure set-pieces of the previous films, it has quite a few that will make you laugh, but it is less overtly funny than its two predecessors. Revisiting a franchise this long gone is dangerous, but Pixar have done well to put a neat little ending on this story. A great film. One other note: the 3D effects are understated to the point that they actually don&amp;#8217;t add anything to the film. If you saw this in 2d, you&amp;#8217;d still have the same great movie. (See &lt;a href="http://twitter.com/garyfleming/status/19436128539"&gt;my Toy Story 3 Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I had high hopes for &lt;strong&gt;The Karate Kid&lt;/strong&gt;, a thematically different take on the story structure of the 80&amp;#8242;s classic. In the opening chunk, some of my hopes were lived up to: we see the frustration and loneliness of a young boy pushed into a foreign situation. Had the film built on this theme, it could&amp;#8217;ve been a great film but it was there just as the set-up for a much more formulaic movie. Jaden Smith managed to get the emotional points across pretty well for an actor of his age, but failed when it came to anything approaching comedy: he has the mannerisms of his father, without the brash charm to pull it off. For a film lacking in depth and out-and-out fun, it certainly ran a lot longer than it should have. The plot on offer could&amp;#8217;ve been covered in 90-odd minutes, but we&amp;#8217;re given nearly an hour more than that. A shame. (See &lt;a href="http://twitter.com/garyfleming/status/19497790703"&gt;my The Karate Kid Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;While I really enjoyed Toy Story 3, this month&amp;#8217;s winner is &lt;strong&gt;Inception&lt;/strong&gt; for its clever storytelling and THAT hotel corridor scene.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><title type="html">Modern Java: The Point</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/07/06/modern-java-the-point/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-07-04T16:12:38-07:00</updated><id>http://solitude.vkps.co.uk/?p=1341</id><summary type="html">In the Modern Java series, I&amp;#8217;ve looked at how Lombok removes boilerplate from bean classes, JSR-303 validation makes checking domain correctness neat and how JPA provides a convenient standardisation over the ORM space. Each of these technologies does something interesting and in an interesting way. The point of this series, however, was not to try [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/07/06/modern-java-the-point/">&lt;p&gt;In the Modern Java series, I&amp;#8217;ve looked at how &lt;a title="Modern Java: Lombok" href="/Archives/2010/04/05/modern-java-lombok/"&gt;Lombok&lt;/a&gt; removes boilerplate from bean classes, &lt;a title="Modern Java: Validation" href="/Archives/2010/04/11/modern-java-validation/"&gt;JSR-303 validation&lt;/a&gt; makes checking domain correctness neat and how &lt;a title="Modern Java: JPA" href="/Archives/2010/04/22/modern-java-jpa/"&gt;JPA&lt;/a&gt; provides a convenient standardisation over the ORM space. Each of these technologies does something interesting and in an interesting way.&lt;/p&gt;
&lt;p&gt;The point of this series, however, was not to try to provide any deep level of insight into any of those technologies; writing anything even approaching a useful tutorial about JPA alone would take up many more posts than I had ever intended on giving the subject. There is simply too much there, and too much intricacy involved to sum that up.&lt;/p&gt;
&lt;p&gt;No, the point of this series was multi-faceted, and I&amp;#8217;d like to take another few moments to try and explain what I was trying to achieve.&lt;/p&gt;
&lt;p&gt;Firstly, the primary concern for designing good systems is understanding the domain of interest. If you don&amp;#8217;t understand the domain well, you won&amp;#8217;t be able to produce a nice user experience at the front-end. You won&amp;#8217;t be able to write meaningful abstractions at the back-end. You won&amp;#8217;t be able to write something that you can pick up a year or two down the line and immediately understand. Knowing and understanding the domain is a &lt;em&gt;prerequisite&lt;/em&gt; for good design.&lt;/p&gt;
&lt;p&gt;What does that have to do with the libraries I discussed? Each of them help you design in terms of the domain and only the domain. Lombok helps you write domain objects without all the cruft in the way. Standardised validation makes sure the correct rules are cleanly annotated and enforced on those domain objects. JPA ensures that when instances of those domain objects are persisted, they are persisted following a series of rules that make sense for the domain. Each of the libraries pushes you down a path of thinking about your domain and hiding other more mundane concerns.&lt;/p&gt;
&lt;p&gt;Secondly, I wanted to show that clean code is infinitely preferable to cluttered code. In the examples I gave, I showed a simple bean class being built up with just a handful of annotations, each one describing it&amp;#8217;s own purpose and providing a clean understanding of the domain. As a thought experiment, consider what that code would be like without the annotations. Imagine the number of classes and methods that even a well-designed alternative would have to orchestrate. While I&amp;#8217;m sure it could be quite neat, I can&amp;#8217;t imagine a solution quite as neat as the one offered by the technologies I mentioned.&lt;/p&gt;
&lt;p&gt;That leads into my final point: modern Java features, such as annotations, and the libraries that make use of them allow for much richer, cleaner and downright better code than has been possible previously. I won&amp;#8217;t try to argue that Java is perfect as a language as I like many of the alternatives, such as Scala, Groovy, Haskell, Ruby, Python and many others. What I &lt;em&gt;am&lt;/em&gt; trying to say, though, is the situation with the Java language is a lot better than it was five years ago, when typical Java code was verbose, unsightly and headed away from the domain. It often obscured the domain, rather than illuminating it.&lt;/p&gt;
&lt;p&gt;My hope is that future iterations of the language and future libraries continue to keep Java in a competitive place in the language market, by making even more problems domain-focused and removing the remaining boilerplate. With the &lt;a href="http://openjdk.java.net/projects/coin/"&gt;Project Coin&lt;/a&gt; and &lt;a href="http://openjdk.java.net/projects/lambda/"&gt;Project Lambda&lt;/a&gt; improvements due in Java 7 later in the year, I really think this will be the case.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><title type="html">Film Fight 2010: June</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/07/04/film-fight-2010-june/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-07-04T15:20:01-07:00</updated><id>http://solitude.vkps.co.uk/?p=962</id><summary type="html">Three new films this month, all quite different. Rec 2 picks up immediately after the ending of Rec, with a SWAT team about to enter the quarantined Spanish apartment building. Rather than shy away from the weak ending of the original, it embraces it and builds a fairly silly plot around it. There&amp;#8217;s all-sorts of [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/07/04/film-fight-2010-june/">&lt;p&gt;Three new films this month, all quite different.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rec 2&lt;/strong&gt; picks up immediately after the ending of &lt;a href="/Archives/2008/07/04/film-fight-april-2008/"&gt;Rec&lt;/a&gt;, with a SWAT team about to enter the quarantined Spanish apartment building. Rather than shy away from the weak ending of the original, it embraces it and builds a fairly silly plot around it. There&amp;#8217;s all-sorts of terrible tell-don&amp;#8217;t-show storytelling on display here, and that undermines a good amount of the work done elsewhere. Despite a forgettable plot, the audio-visual design is fantastic: in-camera glitches, sound breaking up and distorting in just the right way to make you squirm, and THAT scene with the boy. Genuinely creepy horror in places, let down by the plot changes. (See &lt;a href="http://twitter.com/garyfleming/status/15340433017"&gt;my Rec 2 Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Killer Inside Me&lt;/strong&gt; is, if nothing else, beautifully shot with art-direction in the opening credits that most films can&amp;#8217;t muster in 90 minutes. The look throughout is striking, whether we&amp;#8217;re observing the lead sitting in a chair or brutalising another character needlessly, and he brutalises other characters frequently. There are several fairly uncomfortable, difficult scenes here; scenes of reasonably extreme violence against women (in the context of modern cinema, at least). While they&amp;#8217;re extremely powerful and shocking moments, they sit amongst a plot that for the most part lurches along and doesn&amp;#8217;t really get anywhere. The film is purposefully rife with ambiguity as we, the audience, try to fill in the gaps around why the lead is such a cruel and twisted man. Sadly, it&amp;#8217;s just not interesting or well-done enough to really bother. The idea of irredeemable characters, monsters for their own sake, has surely been done better than this many times before. (See &lt;a href="http://twitter.com/garyfleming/status/15659114490"&gt;my The Killer Inside Me Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Finally, &lt;strong&gt;Shrek Forever After&lt;/strong&gt; marks the supposed end of the series, with Dreamworks claiming they won&amp;#8217;t make any more. I wish they&amp;#8217;d stopped at least one film back (perhaps two). The latest film in the series is definitely not a classic, lacking the originality, creativity or joy of the original Shrek. The plot is fairly forgettable and largely unimportant, with the majority of the laughs (and there are some good laughs in there) coming from little visual cues. The source material here has been stretched a little too thin: had this been an episode in a 25 minute cartoon series, you wouldn&amp;#8217;t have noticed the difference. Okay, but not great.  (See &lt;a href="http://twitter.com/garyfleming/status/17194132498"&gt;my Shrek Forever After Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;While I didn&amp;#8217;t think any of the films this month were particularly great, the winner is &lt;strong&gt;Rec 2&lt;/strong&gt;. Despite a fairly nonsensical plot, it delivered where it mattered: providing a horror-filled, cinematic experience.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><title type="html">Film Fight 2010: May</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/06/21/film-fight-2010-may/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-06-21T11:35:21-07:00</updated><id>http://solitude.vkps.co.uk/?p=960</id><summary type="html">It may be a few weeks late, but the Film Fight for May is an extremely light one with only one film. Four Lions is another interesting piece of comedy from Chris Morris. The premise is a comedy that follows a few would-be suicide bombers from their hometowns to training camps and back. Rather than [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/06/21/film-fight-2010-may/">&lt;p&gt;It may be a few weeks late, but the Film Fight for May is an extremely light one with only one film.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Four Lions&lt;/strong&gt; is another interesting piece of comedy from Chris Morris. The premise is a comedy that follows a few would-be suicide bombers from their hometowns to training camps and back. Rather than being mean-spirited or relying on controversy, what we get is a great British farce as we see how absolutely incompetent most of the crew are. There are a few stark moments, but it&amp;#8217;s almost entirely silly, poking fun at the idea of the bombers and their ridiculous scheme. (See &lt;a href="http://twitter.com/garyfleming/status/13662546747"&gt;my Four Lions Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;And the winner is&amp;#8230; &lt;strong&gt;Four Lions&lt;/strong&gt;. Obviously.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><title type="html">Film Fight 2010: April</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/05/09/film-fight-2010-april/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-05-09T12:00:00-07:00</updated><id>http://solitude.vkps.co.uk/?p=954</id><summary type="html">A reasonably busy April at the cinemas has meant another bigger-than-usual Film Fight, with five films. Kick-Ass is a ridiculous film. It&amp;#8217;s an absurd premise (a kid decides to become a super-hero and finds out he isn&amp;#8217;t the first one to try it), that holds together remarkably well when paired up with intentionally over-the-top violence [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/05/09/film-fight-2010-april/">&lt;p&gt;A reasonably busy April at the cinemas has meant another bigger-than-usual Film Fight, with five films.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kick-Ass&lt;/strong&gt; is a ridiculous film. It&amp;#8217;s an absurd premise (a kid decides to become a super-hero and finds out he isn&amp;#8217;t the first one to try it), that holds together remarkably well when paired up with intentionally over-the-top violence in a pseudo-comic book world. It&amp;#8217;s bloody, and goes quite far at times (mostly when it uses Hit Girl), but manages to pull it off by making it clear that this is entertainment and clearly straight out of a graphic novel. While the story isn&amp;#8217;t anything to right home about, and it has some cringeworthy moments, it remains entertaining to the end. (See &lt;a href="http://twitter.com/garyfleming/status/11537585568"&gt;my Kick Ass Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Green Zone&lt;/strong&gt; sees Matt Damon team back up with Paul Greengrass, in a plot pulled straight from a Tom Clancy novel. Yes, it&amp;#8217;s the usual military-complex, conspiracy nonsense, but it is reasonably fun. It works best when letting Damon get into the action set-pieces and starts to wane whenever it goes near the reasons for the conspiracy. For the most part, a reasonable balance is found to keep things moving forward. Where it really falls down is in the comparisons that have been drawn to the Bourne trilogy. Even on the action side, this is a much more relaxed affair than the impossibly well-developed skills of Damon&amp;#8217;s previous super-spy character. Worth seeing. (See &lt;a href="http://twitter.com/garyfleming/status/11656294361"&gt;my Green Zone Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Comedy, good comedy, can be painfully uncomfortable. Either bringing up subjects that most people consider taboo to shed some light on them or by poking fun at preconceptions. It was surprising to see that &lt;strong&gt;Crying With Laughter&lt;/strong&gt; managed to blend that discomfort so well into a fairly dark thriller so well. It tells the story of a stand-up who is at his make-or-break point, going further and darker with every show, as he bumps into someone he used to know who will give him an incredible story to tell. At moments the film is incredibly funny, and at others it&amp;#8217;s horrific as you discover the painful memories that full the lead. A few of the minor characters aside, this is a fantastic film; that brings together two kinds of unease, and produces an excellent story from them. Highly recommended. (See &lt;a href="http://twitter.com/garyfleming/status/12416359447"&gt;my Crying with Laughter Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Mike Judge has an incredibly strong legacy with Beavis &amp;#038; Butthead, King of the Hill, Idiocracy and his classic, Office Space. It&amp;#8217;s with that in mind that it&amp;#8217;s fairly surprising his new movie, &lt;strong&gt;Extract&lt;/strong&gt;, just isn&amp;#8217;t that funny. There are some great moments and some well-observed characters (David Koechner delivers another great small part), but a lot of it falls flat. It&amp;#8217;s not awful, but it is entirely forgettable. (See &lt;a href="http://twitter.com/garyfleming/status/12829983754"&gt;my Extract Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Finally, Todd Solondz returns to the characters he introduced in Happiness 12 years ago, recasting them all in a pseudo-sequel, &lt;strong&gt;Life During Wartime&lt;/strong&gt;. If you liked the first film, you&amp;#8217;ll wish he hadn&amp;#8217;t. It has a scant few jokes that hit the familiar territory of awkwardness that Solondz thrives in, but much of it doesn&amp;#8217;t work. As a whole, the film lacks any real cohesion, with fairly uninteresting characters not really doing much or saying anything of real value. There&amp;#8217;s not much of a theme, just a series of moments that hang together poorly. It&amp;#8217;s a shame because a few of them work incredibly well: the scene where Billy is reunited with his father is absolutely gripping. A quite disappointing effort. (See &lt;a href="http://twitter.com/garyfleming/status/13030912203 "&gt;my Life During Wartime Twitter review&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;And the winner is&amp;#8230; &lt;strong&gt;Crying With Laughter&lt;/strong&gt;, for walking the fine line between horrific and funny extremely well.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry><title type="html">Modern Java: JPA</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/04/22/modern-java-jpa/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-04-22T12:54:10-07:00</updated><id>http://solitude.vkps.co.uk/?p=952</id><summary type="html">In the previous post, I showed how JSR-303 is making validation neater. I concluded that article with the Person bean looking like this: @Data public class Person { @NotNull @Size(min=1) private String firstName; @NotNull @Size(min=1) private String lastName; @Min(18) private int age; } If we know we have a valid bean, at some point we [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/04/22/modern-java-jpa/">&lt;p&gt;In the previous post, I &lt;a href="http://solitude.vkps.co.uk/Archives/2010/04/11/modern-java-validation/"&gt;showed how JSR-303 is making validation neater.&lt;/a&gt;  I concluded that article with the Person bean looking like this:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
@Data
public class Person {
    @NotNull @Size(min=1)
    private String firstName;
    @NotNull @Size(min=1)
    private String lastName;
    @Min(18)
    private int age;
}
&lt;/pre&gt;
&lt;p&gt;If we know we have a valid bean, at some point we probably want to persist it so we can use it again. I won&amp;#8217;t waste time on spelling out how much boilerplate code is written for raw JDBC calls as most developers have moved a level of abstraction up from that anyway, with great tools like &lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html"&gt;Spring&amp;#8217;s JdbcTemplate&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I also won&amp;#8217;t go deeply into the history of ORM in Java, as a lot has already been said. The Java Persistence API (JPA) standardised fairly sensible ideas about how ORM should work, starting from real implementations (primarily &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;) and pulling together the main concepts. To prepare a bean for JPA persistence, we merely need to add an @Entity annotation and specify an @Id column (which I&amp;#8217;m going to have to add to Person):&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
@Data @Entity
public class Person {
    @Id
    private Long id;
    @NotNull @Size(min=1)
    private String firstName;
    @NotNull @Size(min=1)
    private String lastName;
    @Min(18)
    private int age;
}
&lt;/pre&gt;
&lt;p&gt;And that&amp;#8217;s it. You can then use a properly configured EntityManager to persist() your class (the configuration details are largely implementation specific, but relatively lightweight).&lt;/p&gt;
&lt;p&gt;There are a lot of options available to configure exactly how an entity should be persisted when passed into an EntityManager. Again, I won&amp;#8217;t cover them all, but it&amp;#8217;s generally considered best practice to state your table and column names explicitly (rather than relying on convention, as I have above) and you&amp;#8217;ll often want to make use of the built-in optimistic concurrency support to stop multiple changes happening at once.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
@Data @Entity @Table(name=&amp;quot;people&amp;quot;)
public class Person {
    @Id @Column(name=&amp;quot;id&amp;quot;);
    private Long id;

    @Version @Column(name=&amp;quot;version&amp;quot;)
    private int version;

    @NotNull @Size(min=1)
    @Column(name=&amp;quot;first_name&amp;quot;)
    private String firstName;

    @NotNull @Size(min=1)
    @Column(name=&amp;quot;last_name&amp;quot;)
    private String lastName;

    @Min(18)
    @Column(name=&amp;quot;age&amp;quot;)
    private int age;
}
&lt;/pre&gt;
&lt;p&gt;As a bonus, if you use a JPA2 provider AND have a JSR-303 validation implementation in your classpath, the default behaviour will be for your bean to get validated before it gets persisted, so you wouldn&amp;#8217;t have to explicitly call the validator any more.&lt;/p&gt;
&lt;p&gt;Again, there&amp;#8217;s a lot more to be said about JPA, and the use cases that it supports (I haven&amp;#8217;t touched on object-graphs, embedded collections, or the Java persistence query language), but you should have a flavour for it.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry><title type="html">Modern Java: Validation</title><link rel="alternate" type="text/html" href="http://solitude.vkps.co.uk/Archives/2010/04/11/modern-java-validation/" /><category term="Uncategorized" /><author><name>Gary Fleming</name><uri>http://solitude.vkps.co.uk</uri></author><updated>2010-04-11T11:26:08-07:00</updated><id>http://solitude.vkps.co.uk/?p=944</id><summary type="html">In the previous post on Modern Java, I showed how Lombok is making Java beans more concise. In that post, I showed how we would end up with the following class: @Data public class Person { private String firstName; private String lastName; private int age; } Given an instance of that class by binding data [...]</summary><content type="html" xml:base="http://solitude.vkps.co.uk/Archives/2010/04/11/modern-java-validation/">&lt;p&gt;In the previous post on Modern Java, I showed how &lt;a href="/Archives/2010/04/05/modern-java-lombok/"&gt;Lombok is making Java beans more concise&lt;/a&gt;. In that post, I showed how we would end up with the following class:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
@Data
public class Person {
    private String firstName;
    private String lastName;
    private int age;
}
&lt;/pre&gt;
&lt;p&gt;Given an instance of that class by binding data from a web form, a database or some other data source, a fairly common requirement is to validate it against a series of rules and constraints.&lt;/p&gt;
&lt;p&gt;For example, if we assume &amp;#8220;age&amp;#8221; is the number of years the person being described has been alive, we know that it must be zero or greater. Depending on our application we may also know that it&amp;#8217;s above a minimum age (18, say) and is extremely likely to be below a maximum age (there are very few people over 100, and none over 120).&lt;/p&gt;
&lt;p&gt;A few years ago, you would have to write a custom piece of code to validate simple rules in all of your domain classes. These would typically be specific to the class in question, running through a series of explicit checks, and produce a list of errors found. While this worked, it was often verbose and tightly-coupled to each domain class. It might look something like this:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public Collection&amp;lt;Error&amp;gt; validate(Person person) {
  Collection&amp;lt;Error&amp;gt; errors = new LinkedList&amp;lt;Error&amp;gt;();
  if(person.getAge() == null) {
    errors.add(new Error(&amp;quot;Age cannot be null&amp;quot;));
  }
  if(person.getAge() &amp;lt; 0) {
    errors.add(new Error(&amp;quot;Age must be greater than zero&amp;quot;));
  }
  if(person.getAge() &amp;gt; 120) {
    errors.add(new Error(&amp;quot;Unlikely to be a real age&amp;quot;));
  }
  return errors;
}
&lt;/pre&gt;
&lt;p&gt;Note that we&amp;#8217;re only validating a few rules on one field, and it&amp;#8217;s already quite verbose. If we validated every field on an object and the interdependencies between them, then we would have a lot of code.&lt;/p&gt;
&lt;p&gt;Both the &lt;a href="http://www.springsource.org/"&gt;Spring Framework&lt;/a&gt; and &lt;a href="http://hibernate.org/"&gt;Hibernate&lt;/a&gt; had come up with their own ways of making writing and integrating validation logic a little easier, but now validation has been standardised in &lt;a href="http://jcp.org/en/jsr/detail?id=303"&gt;JSR-303&lt;/a&gt;. The reference implementation is Hibernate Validator 4, and it&amp;#8217;s a great starting point, but most uses of JSR-303 will be relatively agnostic of the implementation. Since this is a finalised specification, you can also make use of it today.&lt;/p&gt;
&lt;p&gt;For our Person class above, let&amp;#8217;s add the following constraints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Age must be 18 or more&lt;/li&gt;
&lt;li&gt;First  and last name must be set i.e. they can&amp;#8217;t be left null&lt;/li&gt;
&lt;li&gt;First and last name must have at least one character in them&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To implement these rules, we need only add a few new annotations, using standard constraints:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
@Data
public class Person {
    @NotNull @Size(min=1)
    private String firstName;
     @NotNull @Size(min=1)
    private String lastName;
    @Min(18)
    private int age;
}
&lt;/pre&gt;
&lt;p&gt;You then create a Validator instance (how you do this will depend on your chosen implementation), and pass the class in for validation:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
Set&amp;lt;ConstraintViolation&amp;lt;Person&amp;gt;&amp;gt; errors = validator.validate(person);
&lt;/pre&gt;
&lt;p&gt;All the validation is then handled for you, reducing the amount of code and making your bean classes very clearly state the constraints under which they operate. You know a first name is not just any old nullable string by just looking at the class, and you know ages have limitations in your particular domain of interest. The code is more expressive and concise, and that&amp;#8217;s a very good thing.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s a lot more to the JSR-303 specification, and it has all the features you might want. While I fully intend to go into the other features at another time, I&amp;#8217;d strongly recommend browsing the spec to see some of the power and flexibility available to you.&lt;/p&gt;
</content><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry></feed>
