Rapid Keyword Extraction of Donoghue v Stevenson

Sometimes it would be really handy to be able to quickly and accurately extract keywords from a large corpus of documents. It is quite easy to foresee such a use-case arising in legal publishing, for example. 

RAKE (Rapid Keyword Extraction), is a Python natural language processing module that goes a long way in dealing with this use-case. 

I was interested in putting RAKE to the test and thought I'd pit the algorithm against what is perhaps to most well known piece of case law in the common law world: Donoghue v Stevenson (of snail and ginger beer fame). 

What follows is the basic "working out" of the code and the results of the first pass. For anyone interested in replicating this experiment or doing some keyword extraction of their own, see this excellent tutorial - you'll see that my own code follows it closely.

IMPORT THE RELEVANT LIBRARIES

import rake 
import operator

INITIALISE RAKE

rake_object = rake.Rake("smartstoplist.txt", 5, 5, 7)

This line of code does the following:

  • Creates a RAKE object that extracts keywords where (i) each word has at least 5 characters; (ii) each phrase must have at least 5 words; and (iii) each keyword must appear in the text at least 7 times
  • Hits the text file with a list of stop words to remove textual noise

GET THE TEXT

Now we open the text file (in this test, I've saved the judgment in Donoghue as a text file) and save it in a variable:

judgment = open("dono.txt","r") 
text = judgment.read()

RUN RAKE AND PRINT THE KEYWORDS

Now we're ready to run RAKE over the text to get the keywords:

keywords = rake_object.run(text) 
print (keywords)

THE OUTPUT

The following keywords (along with their scores) were returned:

[('give rise', 4.300000000000001), ('common law', 4.184313725490196), ('duty owed', 4.154061624649859), ('ordinary care', 4.115278543849972), ('reasonable care', 4.093482554312047), ('skivington lr 5', 4.050000000000001), ('lake & elliot', 4.0), ('pender 11 qb', 3.966666666666667), ('present case', 3.7993197278911564), ('defective', 1.7619047619047619), ('present', 1.7380952380952381), ('principles', 1.7333333333333334), ('dangerous', 1.6491228070175439), ('exercise', 1.588235294117647), ('cases', 1.5875), ('bottles', 1.5833333333333333), ('liability', 1.5789473684210527), ('relationship', 1.5555555555555556), ('court', 1.5365853658536586), ('supplying', 1.5), ('appears', 1.4761904761904763), ('principle', 1.4736842105263157), ('allowed', 1.4545454545454546), ('party', 1.4375), ('nature', 1.4210526315789473), ('warranty', 1.4166666666666667), ('goods', 1.4090909090909092), ('thing', 1.4090909090909092), ('articles', 1.4), ('condition', 1.4), ('appellant', 1.3953488372093024), ('injured', 1.3863636363636365), ('alleged', 1.375), ('bought', 1.3636363636363635), ('stated', 1.3636363636363635), ('examination', 1.3636363636363635), ('opportunity', 1.3636363636363635), ('appeal', 1.3333333333333333), ('support', 1.3333333333333333), ('defect', 1.3333333333333333), ('decided', 1.3333333333333333), ('relation', 1.3333333333333333), ('bottle', 1.3225806451612903), ('matter', 1.3125), ('authorities', 1.3125), ('injury', 1.3076923076923077), ('carelessness', 1.3076923076923077), ('judgment', 1.3055555555555556), ('proposition', 1.3043478260869565), ('recover', 1.3), ('referred', 1.3), ('circumstances', 1.2972972972972974), ('supplied', 1.2857142857142858), ('found', 1.2857142857142858), ('based', 1.2777777777777777), ('defendant', 1.2666666666666666), ('liable', 1.263157894736842), ('article', 1.26), ('manufactured', 1.25), ('lordships', 1.25), ('danger', 1.25), ('means', 1.25), ('poison', 1.25), ('inspection', 1.2307692307692308), ('purchaser', 1.2272727272727273), ('george', 1.2272727272727273), ('person', 1.2222222222222223), ('courts', 1.2222222222222223), ('house', 1.2105263157894737), ('plaintiff', 1.2096774193548387), ('chattel', 1.2), ('decision', 1.1935483870967742), ('entitled', 1.1818181818181819), ('authority', 1.1666666666666667), ('vendor', 1.1666666666666667), ('dicta', 1.1666666666666667), ('premises', 1.1538461538461537), ('repair', 1.1538461538461537), ('question', 1.1515151515151516), ('pursuer', 1.1428571428571428), ('manufacturer', 1.1384615384615384), ('facts', 1.1333333333333333), ('persons', 1.1333333333333333), ('subject', 1.125), ('class', 1.125), ('scotland', 1.125), ('evidence', 1.125), ('manufacturers', 1.125), ('defender', 1.125), ('contents', 1.1176470588235294), ('words', 1.1), ('longmeid', 1.1), ('holliday 6', 1.1), ('exist', 1.1), ('consequence', 1.1), ('negligence', 1.0985915492957747), ('contract', 1.0918367346938775), ('difficult', 1.0833333333333333), ('proved', 1.0833333333333333), ('respect', 1.0833333333333333), ('respondent', 1.08), ('consumer', 1.0789473684210527), ('proof', 1.0714285714285714), ('regard', 1.0714285714285714), ('manufacture', 1.0666666666666667), ('knowledge', 1.0666666666666667), ('england', 1.0588235294117647), ('langridge', 1.0555555555555556), ('action', 1.0476190476190477), ('opinion', 1.0357142857142858), ('lords', 1.0), ('ginger', 1.0), ('retailer', 1.0), ('result', 1.0), ('neglect', 1.0), ('division', 1.0), ('ground', 1.0), ('fraud', 1.0), ('judgments', 1.0), ('parke', 1.0), ('levy 2', 1.0), ('winterbottom', 1.0), ('wright 10', 1.0), ('stranger', 1.0), ('coach', 1.0), ('reason', 1.0), ('blacker', 1.0), ('breach', 1.0), ('skill', 1.0), ('parties', 1.0), ('brett', 1.0), ('heaven', 1.0), ('point', 1.0), ('treated', 1.0), ('property', 1.0), ('purpose', 1.0), ('thought', 1.0), ('existence', 1.0), ('pointed', 1.0), ('argument', 1.0), ('defendants', 1.0), ('hamilton', 1.0), ('contention', 1.0), ('mullen', 1.0), ('barr &', 1.0), ('defenders', 1.0), ('members', 1.0), ('remote', 1.0), ('bridge', 1.0)]

I was fairly chuffed with these results given it was the first attempt. The key seems to be getting the right balance of parameters when setting the object up. But, it's good to see terms like duty owed and reasonable care appearing at the top of the results. 

It definitely needs some fine tuning and probably an expansion of the stop list, but it's a good start.

 

Algorithmically Topic Modelling Judgments

Like many others that work in the information/publishing sector, I have developed a keen interest in learning how to make use of machine learning and text mining technology to enhance the information I work on (in my working context, the information is case law). 

Over the Christmas break I started to experiment with a statistical programming language called R, which has a decent suite of text mining functionality available right out of the box.  

I wanted to put R to use to tackle a simple and practical question: is it possible to accurately classify a judgment algorithmically with relative ease?

In order to test R against this particular use-case, I constructed a simple experiment.

Build sample corpus of data

To run the experiment I needed a small batch of sample judgments. I selected nine recent judgments from BAILII: three from the Criminal Division of the Court of Appeal; three from the Family Court; and three from the Commercial Court. 

Success Factors

For R to be successful in the experiment, it would need to algorithmically classify the nine cases to the correct topic, i.e. the three criminal cases should be grouped together, as should the commercial cases, etc. 

Method

I’ll write up more detailed notes on the method and code used in this experiment, but essentially the following steps would be taken:

  1. Load the nine judgments into R as text files
  2. Pre-process the text files to remove unwanted material (like punctuation, numbers and standard stop words).
  3. Analyse the most frequently occurring terms in the corpus of judgments and remove additional stop words that would be common across the entire dataset.
  4. Apply a topic modelling algorithm (the Latent Dirichlet allocation (LDA) model) to the corpus of judgments to algorithmically allocate each of the judgments to one of three topics (criminal, family or commercial).
  5. Match up the judgments to a topic
  6. Produce a matrix of the key terms governing allocation into a topic
  7. Produce a matrix detailing the respective probability for each case allocation to a topic.

Results

The LDA algorithm did a decent job of allocating judgments to one of the three topics. First off, we can take a look at the key terms the model has used to allocate each case to a topic. The first column in the chart below, for example, sets out the terms viewed as most relevant to allocate a judgment to the family topic. 

Family Commercial Criminal
1 children claus court
2 order claim evid
3 court polici appel
4 evid vote appeal
5 child period case
6 made manag convict

Now let's look at the actual allocation of judgment to topics:

V1
a.txt Fam
adamantine.txt Comm
arc.txt Comm
canary.txt Comm
f.txt Fam
n.txt Fam
r_v_amjad.txt Crim
r_v_burke.txt Crim
r_v_garland.txt Crim

Each of the nine judgments has been allocated to the correct topic. We can also have a deeper look at the probability for each allocation.

Family Commercial Criminal
a.txt 0.66 0.13 0.21
adamantine 0.05 0.92 0.04
arc.txt 0.06 0.90 0.04
canary.txt 0.05 0.91 0.04
f.txt 0.82 0.03 0.15
n.txt 0.86 0.03 0.11
r_v_amjad.txt 0.11 0.08 0.82
r_v_burke.txt 0.14 0.10 0.76
r_v_garland.txt 0.12 0.02 0.85

Conclusion

This experiment shows that it is possible to use a language like R to accurately fit a topic model onto the text of judgments. However, there are two obvious limitations associated with this particular implementation of text classification.

First, the number of topics needs to be defined a priori. That's absolutely fine where you have an idea of the number of topics in advance of the modelling (as in the case of this experiment), but if you don't know how many topics there are in the corpus, you'll probably have to run the model more the once and experiment with the number of topics. 

The second issue is one of scalability. This experiment used a small corpus (only nine judgments). The larger and more varied the corpus, the more heavy lifting is required to stage the data well. 

However, regardless of these limitations, the fantastic thing about this modelling approach is the ease with which it can be deployed. 

Scaffolding with Slush

The baby steps I have been taking in my quest to learn as much as possible about web application development have led me to the Slush scaffolding project. 

The fantastic thing about Slush is the simplicity with which even a mere novice like me is able to quickly bootstrap a whole range of full stack web apps. 

There is a formidable selection of generators available here.

Swiss in CSS

I am a huge fan of Swiss graphic design and the work of Josef Muller-Brockman. Swiss in CSS is an excellent reinterpretation of a number of classic Swiss designs (animated with pure CSS) and is a real feast for the eyes.

Fun and games with Adobe Draw on iPhone

It is rare for me to genuinely experience delight with an app on my phone, but I experienced it this morning on the train into London. 

With a bit of Interpol going on in the background (through my earphones), I open Adobe Draw for the first time and within about 25 minutes I managed to draw the following line drawing of my one-year old son sitting on the kitchen worktop playing with a biro and a tin of lip balm at 6:15 a.m. a few mornings back. 

I cheated a bit, in that I created an image layer from a photo from my iPhone photo library, dropped the opacity right down and then drew over the top. But, for someone who isn't all that good at drawing, I think the result is pretty decent. Bearing in mind that I was using my index finger to draw on the screen of a smart phone on a busy, moving train!

Artboard 1

Adobe Draw is a tad fiddly in places, but as this sketch proves, it isn't hard even for a relative novice to get a pleasing result on the move. Apart from sticking it into Illustrator CC (which I achieved from within the app itself) to bring the file into a format I could post on this blog, nothing else has been done to the image. 

I think it's rather smart!

To see what a pro has achieved with Adobe Draw (using the Apple Pencil on iPad Pro), see this at Khoi Vinh's excellent blog at Subtraction.com

Visualising subsequent judicial consideration: Part Two

Last week I posted a piece that explored ways in which the subsequent judicial treatment of a case could be graphically represented in a way that helps the viewer gain a bird-eye view of the basic profile of treatment a case has received. 

My first stab at a new model was to plot subsequent consideration on a radar chart, like this:

Authority Profile D3.js Radar Chart

The data in the radar is based on material subsequent considerations of Chan Wing-Siu v The Queen [1985] AC 168, which up until the beginning of this year was the leading authority on joint criminal enterprise. The problem was that whilst the radar model succeeded in drawing an easy to digest view of Chan Wing-Siu's authority profile, it had the potential to mislead because it did not take account of the importance of the most recent type of consideration the case had received. 

In the case of Chan Wing-Siu, it had enjoyed predominantly positive treatment from the mid-1980s straight through to 2016. This, when plotted on the radar chart, gave the impression that Chan Wing-Siu was still good law. However, we know that as a result of the Supreme Court's decision in R v Jogee that this is no longer the case. 

Plotting the consideration profile over time

The radar chart cannot be used to provide a sufficiently reliable account of a case's current status in law because the importance of recent events are not easily reflected in that graphic model. The answer, therefore, is to render the graphical view of the consideration profile over time

The following chart (a static version of a d3.js timeline chart), uses the same data as the radar chart above, but arranges that data chronologically. Each consideration type (e.g. applied, explained, not followed etc) is given a lane on the chart. Each case that has subsequently considered Chan Wing-Siu is then dropped into its corresponding lane (e.g. R v Barr distinguished Chan Wing-Sium, hence it sits in the "Distinguished" lane on the chart.).

Artboard Created with Sketch. Considered Followed Approved Distinguished Not followed Disapproved Applied Adopted Explained Not applied Doubted Departed from R v Barr (1986) R v Slack (1989) R v Hyde (1989) Hui Chi-ming v The Queen (1989) R v Roberts (Kelvin) (1993) R v Stewart (Heather) (1995) R v Powell (Anthony) (1997) R v Powell (Anthony) (1997) R v Rahman (2009) R v Jogee (2016)

The timeline chart is effective at demonstrating the clear run Chan Wing-Siu enjoyed until it was kicked into touch by the Supreme Court in R v Jogee.  There may be a case for collapsing the empty lanes to focus the graphic on the active consideration types, but all in all, I think the timeline does the job well.

To my knowledge, none of the legal databases (certainly in the UK) adopt this approach to mapping subsequent judicial consideration. If, I'm wrong about that, please let me know in the comments section below. 

If, on the other hand, I'm right that this method hasn't been employed before, then this is one of those head-slapping moments. 

Visualising subsequent judicial consideration: Part One

Visualisation of legal information is gathering momentum, albeit in baby steps. Without a doubt, Justis have been responsible for the pushing the envelope further than anyone else in this respect (see their Precedent Map in JustCite and text heat mapping in JustisOne).

Text visualisation tools almost certainly have a bigger role to play in the provision of online legal information. The challenge is to make sure that they are genuinely relevant and that the trends they describe are accurate. 

One facet of legal information that is ripe for useful visualisation techniques is the mapping of how a case has been treated by subsequent cases. The Justis precedent map runs along these lines: the case under analysis appears as the central node in a sort of clock dial. The nodes in the left hemisphere of the dial are the cases that have been considered by the case at the central node. The nodes in the right hemisphere of the dial are that cases that have themselves considered the case at the central node. Colour-coding is also used to denote the class of consideration, e.g. positive, negative etc. 

There is a potential use-case in which a user might wish to view the "authoritative profile" of a particular decision in a way that is not neatly satisfied by the Justis precedent map or any other tool I'm aware of. Say, for example, I wanted to form a bird's eye view of a particular case's authority profile in order to help me make an assessment as to whether it is good authority for some line of argument I'm seeking to run. What I want to be able to see, at a glance, is the rough shape of how that case has been treated by later cases. With this in mind, I tried to develop an extremely rough and ready visualisation that could assist in this situation. 

Plotting instances of subsequent consideration on a radar chart

The solution may or may not be something that runs along the lines of the radar graph below. 

The graph works by plotting points on a radar chart that correspond to the frequency over time a case has received a particular class of subsequent consideration. The classes of consideration (e.g. applied, distinguished etc) that run around the chart area are based on the granular consideration matrix developed by The Incorporated Council of Law Reporting for England and Wales. The right hemisphere consists of "positive" treatment classes, the left hemisphere consists of "negative" treatment classes. 

The larger the area of shading in the right hemisphere, the more positively the case has subsequently been treated. Conversely, the greater the area of shading in the left hemisphere, the more negatively the case has been subsequently treated. 

Authority Profile D3.js Radar Chart

The data in the radar chart above is actually based on material subsequent judicial considerations on Chan Wing-Siu v The Queen [1985] AC 168. Fourteen cases materially considered Chan Wing-Siu (that is to say, fourteen cases engaged with the Chan Wing-Siu beyond giving it mere mention). 

As the chart shows, the vast bulk of subsequent consideration has been positive, with 64% of the subsequent cases applying Chan Wing-Siu. The chart does provide an attractive visual profile of the ways in which Chan Wing-Siu has been subsequently considered, but the picture it paints of the future authoritative value of the case is where the chart falls down. 

Problems with the radar model

There are, I suppose, are a number of ways in which this data model falls down. The major problem is that is does not account for the importance of the most recent class of consideration. As we know, Chan Wing-Siu is no longer good law for the test to be applied to assess whether a defendant had sufficient intent to establish murder or grievous bodily harm in the context of a joint enterprise. The Supreme Court disapproved of the Chan Wing-Siu test earlier this year in R v Jogee [2016] UKSC 8[2016] 2 WLR 681 earlier this. The radar model is therefore misleading, because that single instance of negative consideration was sufficient to destroy the Chan Wing-Siu case's future authoritative value.  

Addressing this problem with the model

One simple way of addressing this problem with the radar model might simply be to assign a signal to the most recent class of consideration. That way, the user is placed on notice about the most recent class of consideration the case under analysis received and is able to adjust their assessment of the case accordingly. This seems a little clunky.

The better way, perhaps, is to admit that whilst the radar model is effective insofar as it is able to graphically demonstrate the basic profile of the sorts of subsequent consideration a case has received, a more effective method might be provide an additional graphical representation of consideration over time. I'll set out a time-based graphical model in a later post. 

Building the radar model

The radar model featured in this blog post was written using the d3.js library. The code borrows heavily from the radar chart function written by Nadieh Bremer (VisualCinnamon.com) and the original code (free of my hacking) can be found at on the excellent bl.ocks.org website here

Why is design so absent in legal products?

I absolutely detest it when someone gives me a document or a spreadsheet to read and the type is set in Calibri (the default typeface in most Microsoft Office apps). Two things about this particularly annoy me. The first is that Calibri has to be one of the ugliest typefaces ever created. It is absolutely miserable to look at, particular at small sizes. The second is that I know that the author of whatever it is I've been given to read didn't take to the time to notice (a) how horrible the document looks or (b) have the imagination to change the font! 

I know that sounds a bit obsessive, but it winds me up when I come across something that is so obviously devoid of any care taken in relation to its appearance - the "that'll do"-factor. 

I get the same feeling when I look at WestlawUK and LexisLibrary, both of which are the leading online research platforms in the legal market. The more I look at the way these products have been designed, the more I wonder whether there is some accepted conventional wisdom that says products for lawyers can only be taken seriously if they look crap or simply whether nobody cares about how these products look. 

Typography

The big legal research platforms trade in long, dense and complex textual structures - great big documents such as law reports and statutes. There's a lot of reading to be done. Why then is it that both WestlawUK and LexisLibrary insist of setting text in god awful sans serif fonts? Sans serif fonts are a notoriously poor design choice for long blocks of text, particularly at small point sizes.

Here's an example of what I mean, courtesy of LexisLibrary. The following extract is taken from the headnote in Cavendish Square Holding BV v El Makdessi; ParkingEye Ltd v Beavis [2016] 2 All ER (Comm) 1:

Two appeals were heard together because they raised similar issues concerning the principles underlying the law relating to contractual penalty clauses or the penalty rule. The respondent in the first appeal, M, agreed to sell shares in a company, which were ultimately transferred to the appellant, Cavendish. Under that agreement, cll 5.1 and 5.6 provided that, if M breached restrictive covenants in the agreement, he would not be entitled to receive interim and/or final payments, and could be required to sell Cavendish the rest of his shares at a defaulting shareholder option price, based on asset value and so ignoring any goodwill value (for the full provisions, see [55], below). Cavendish concluded M had acted in breach of the restrictive covenants and gave notice of the exercise of its call option, under cl 5.6. It subsequently issued proceedings against M for breach of the agreement. Cavendish sought a declaration that M was a defaulting shareholder, was not entitled to the interim payment or the final payment as a result of cl 5.1, and was obliged, as of the date 30 days after the service of its notice exercising the call option to sell to Cavendish all his shares in the company at the defaulting shareholder option price, and it sought specific performance of the latter obligation. The judge at first instance concluded that cll 5.1 and 5.6 were valid and enforceable. The Court of Appeal held that the two provisions were unenforceable penalties under the penalty rule as traditionally understood because it felt bound by the traditional explanation of the rule as being directed against deterrent clauses as such. Cavendish appealed. In the second appeal, the appellant, B, parked in the car park for which the respondent, ParkingEye, provided management services to the landowner and which contained signs providing the parking terms, including that parking was free for two hours and that failure to comply with the terms would result in an £85 parking charge (for the full text of the signs, see [91], below). B overstayed the two-hour time limit by nearly an hour and ParkingEye sent him a standard first parking charge notice, which demanded that he pay the £85 charge. B ignored the demand, as well as a subsequent standard form reminder notice and warning letter, and ParkingEye issued proceedings in the county court to recover the £85 alleged to be due. Before the judge and the Court of Appeal, B raised two arguments as to why he should not have to pay the £85 charge, namely, that it was unenforceable at common law because it was a penalty and/or because it was unfair and, therefore, unenforceable by virtue of the Unfair Terms in Consumer Contracts Regulations 1999, SI 1999/2083. The Court of Appeal upheld the judge's decision rejecting each of B's arguments and B appealed. The issues for determination were: (i) the scope of the penalty rule and whether it should be abolished; (ii) whether cll 5.1 and 5.6 were unenforceable as penalties; and (iii) whether the £85 charge was unenforceable as a penalty or as unfair under the Regulations.

The above block of text uses Verdana at 12px with a line height of 1.6em. Now let's look at how WestlawUK does things, by looking at the headnote in the headnote in the same case (this time, the headnote is taken from [2015] 3 WLR 1373:

In the first case, following extensive negotiations in which both sides were represented by highly experienced commercial lawyers, the defendant agreed to sell to the claimant a controlling interest in the advertising and marketing company which he had founded. The claimant agreed to pay up to $147m, depending on a calculation of profits, in instalments, with a large amount reflecting goodwill. The agreement provided that for a period after the sale the defendant was not to compete with his old business and that, if he did, he would not be entitled to any further payments (clause 5.1) and the claimant would acquire an option to buy his remaining shares at a price which disregarded goodwill (clause 5.6). When the defendant breached the non-competition provision, the claimant sought a declaration that he was not entitled to further payments and was obliged to sell his shares to it. The judge, rejecting the defendant's contention that clauses 5.1 and 5.6 were penal and therefore unenforceable, made the declarations sought. The Court of Appeal allowed the defendant's appeal, holding that the clauses were not genuine pre-estimates of loss but rather their function was to act as a deterrent, and that, therefore, both clauses were unenforceable penalties. The claimant appealed, contending that the clauses were not penal and that, in any event, the common law rule that contractual penalty clauses were unenforceable should be abolished or at least restricted so as not to apply to commercial transactions where the parties were of equal bargaining power and each acted on skilled legal advice.

In the second case, the defendant parked his car in the privately-owned shopping centre car park which was managed by the claimant. Notices prominently displayed at the entrance and throughout the car park stipulated that the maximum permitted stay was two hours, that parking was free up to that time but that £85 would be charged to those who stayed longer, reducible to £50 if paid within 14 days. The *1374 defendant drove out of the car park nearly an hour after the permitted time and was charged £85 by the claimant, which he did not pay. The claimant brought proceedings in the county court to recover the charge. The judge gave judgment for the claimant, rejecting the defendant's argument that he should not have to pay the charge because (i) it was unenforceable at common law because it was a penalty, and/or (ii) it was unfair and, therefore, unenforceable by virtue of regulation 8 of the Unfair Terms in Consumer Contracts Regulations 19991 . The Court of Appeal dismissed the defendant's appeal. The defendant appealed.

Just like LexisLibrary, WestlawUK has opted for a sans serif font, in this case Trebuchet MS. To the extent that design choices were made in favour of Verdana and Trebuchet MS, I'm baffled as to the logic. 

Quality newspapers tend to provide a good cue for decent typography. The Times, for example, uses its own custom designed serif typeface, Times Modern. 

The Times, Times Modern typeface

The Times, Times Modern typeface

Serif fonts, like Times, are famed for their clear legibility, hence their extensive use in the typesetting of books and newspapers. Why, if a design choice had in fact been made, would the developers of WestlawUK and LexisLibrary have opted for sans serif fonts (and terrible san serif fonts at that)?

One answer may be that the continued use of sans serif fonts is a hangover from a design decision taken when the services were built many years ago to instil some misguided sense of futurism.

Law on my computer? That is just *so* futuristic, man.

Had that been the case, I would have gone for Helvetica Neue. The other possibility is that nobody asked themselves the question "How can we make it easier for the user to read our content?". If that's the case, it's a shame. 

So, returning to extract from the Cavendish case, here's how it should look (note, this following extract has not been set for display on a smartphone):

In the first case, following extensive negotiations in which both sides were represented by highly experienced commercial lawyers, the defendant agreed to sell to the claimant a controlling interest in the advertising and marketing company which he had founded. The claimant agreed to pay up to $147m, depending on a calculation of profits, in instalments, with a large amount reflecting goodwill. The agreement provided that for a period after the sale the defendant was not to compete with his old business and that, if he did, he would not be entitled to any further payments (clause 5.1) and the claimant would acquire an option to buy his remaining shares at a price which disregarded goodwill (clause 5.6). When the defendant breached the non-competition provision, the claimant sought a declaration that he was not entitled to further payments and was obliged to sell his shares to it. The judge, rejecting the defendant's contention that clauses 5.1 and 5.6 were penal and therefore unenforceable, made the declarations sought. The Court of Appeal allowed the defendant's appeal, holding that the clauses were not genuine pre-estimates of loss but rather their function was to act as a deterrent, and that, therefore, both clauses were unenforceable penalties. The claimant appealed, contending that the clauses were not penal and that, in any event, the common law rule that contractual penalty clauses were unenforceable should be abolished or at least restricted so as not to apply to commercial transactions where the parties were of equal bargaining power and each acted on skilled legal advice.

In the second case, the defendant parked his car in the privately-owned shopping centre car park which was managed by the claimant. Notices prominently displayed at the entrance and throughout the car park stipulated that the maximum permitted stay was two hours, that parking was free up to that time but that £85 would be charged to those who stayed longer, reducible to £50 if paid within 14 days. The defendant drove out of the car park nearly an hour after the permitted time and was charged £85 by the claimant, which he did not pay. The claimant brought proceedings in the county court to recover the charge. The judge gave judgment for the claimant, rejecting the defendant's argument that he should not have to pay the charge because (i) it was unenforceable at common law because it was a penalty, and/or (ii) it was unfair and, therefore, unenforceable by virtue of regulation 8 of the Unfair Terms in Consumer Contracts Regulations 1999. The Court of Appeal dismissed the defendant's appeal. The defendant appealed.

The extract above uses a freely available serif typeface called Lora. The line height is set to 1.6em to give each line a bit of room to breath and, since the font is being displayed on a screen,  it's been set to smooth by antialiasing. To my eye, at least, it's ten times more readable than the extracts on WestlawUK and LexisLibrary. 

Note: the "futuristic" typeface further up is VT323, designed by Peter Hull, and is available on Google Fonts.

 

 

 

 

Jack & Coke with Adobe Capture

I recently downloaded Adobe Capture for iOS and have been having all sorts of fun with it. 

Adobe Capture, for those not in the know, is a sort of mobile visual asset generation tool that uses the camera on your smartphone. You simply point your camera at something and the app generates all sorts of interesting images based on what the camera has captured. 

I tested out Capture's Shape mode on a can of Jack Daniel's and Coke (classy stuff!) and here's one of the images I managed to generate:

Pattern mode is also very cool. Again, simply point the camera at an object and the app processes it into a kaleidoscopic marvel! Here's a pattern I managed to generate from a pretty rubbish shot of a Le Creuset stove-top kettle.

I'm not entirely sure how useful this sort of thing will be in practice for graphic designers on a day-to-day basis, but it's good fun and the results are very pleasing to look at. It's also good to see Adobe's continued focus on bringing design tools into the mobile realm.

Who the $%£& is Carrefax??

Who the $%£& is Carrefax??

That's a very fair question.

When I launched the original blog back in 2012, I'd been reading a lot of Tom McCarthy. His books are dark, insanely well-researched and dense (which, at the time, were qualities I rather admired - still do).

The first problem whenever you start a website of any sort is giving it a name. Generally speaking, most sensible people opt for a name that has some connection with the purpose of the site or the content hosted on it. Lacking both sense and a clear vision of what the blog was really going to be about, I wanted a single, vague word to hide behind. 

On the day I launched the original Carrefax site, I'd just finished reading McCarthy's C. I'm not going to attempt to give C a write-up here, but one of the major themes (at least on my reading) is the idea of signals and connections, concepts which align quite nicely with the idea of a website. 

C's protagonist is called Serge Carrefax and I selected his surname as the brand for my site (had I launched the site two weeks later, it may well have been called Moshe).

Mystery solved! Buy the book!  

A new home for Carrefax

About five years ago, I started my very first Wordpress blog and named it Carrefax. Carrefax went live around the time legal blogging was exploding all over social media and when there was a compact, but very active community of lawyers taking to Twitter.

Carrefax was not, I freely admit, a widely read blog! But I had fun gradually building it up and I'm quite proud of it as a repository of content. If nothing else, it just very pleasing to have a small corner of the internet reserved for my thoughts and ramblings.

The original Wordpress blog has been laying dormant for around a year, mainly as a byproduct of a lack of time to devote to writing rather than there being a shortage of things to write about.

Over the past year, I've realised that my interests have broadened considerably since the original site went up in 2011. I still find the law absolutely fascinating, but I've grown to be a fair bit more eclectic in the things that I find interesting.

I now spend just as much time reading about design as I do about the law, if not more, and I've come to realise is that what I'm really interested in is the business of making stuff, because making stuff is fun!

I'm still building and refining this website and am in the process of gathering material to start publishing onto it. But, for now, I just wanted to wet the head of the new Carrefax website with this short post and say "hello". 

Hello!!!