text:
[Search] [txt|pdfized|bibtex] [Tracker] [WG] [Email] [Nits]
Versions: 00 01 02 03 04 rfc2533
IETF media feature registration WG                        Graham Klyne
INTERNET-DRAFT                                Content Technologies/5GM
Category: Work-in-progress                              September 1998
Expires: March 1999
A syntax for describing media feature sets
<draft-ietf-conneg-feature-syntax-00.txt>
This document is an Internet-Draft.  Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its areas,
and its working groups.  Note that other groups may also distribute
working documents as Internet-Drafts.
months and may be updated, replaced, or obsoleted by other
documents at any time.  It is inappropriate to use Internet-Drafts
as reference material or to cite them other than as ``work in
progress''.
To view the entire list of current Internet-Drafts, please check
the "1id-abstracts.txt" listing contained in the Internet-Drafts
Shadow Directories on ftp.is.co.za (Africa), ftp.nordu.net
(Northern Europe), ftp.nis.garr.it (Southern Europe), munnari.oz.au
(Pacific Rim), ftp.ietf.org (US East Coast), or ftp.isi.edu (US
West Coast).
[[INTENDED STATUS:
This document specifies an Internet standards track protocol for
the Internet community, and requests discussion and suggestions for
and status of this protocol.  Distribution of this memo is
unlimited.]]
Copyright (C) The Internet Society 1998.  All Rights Reserved.
A number of Internet application protocols have a need to provide
content negotiation for the resources with which they interact [1].
A framework for such negotiation is described in [2].  Part of this
framework is a way to describe the range of media features which
can be handled by the sender, recipient or document transmission
format of a message.  A format for a vocabulary of individual media
features and procedures for registering media features are
presented in [3].
Klyne                      Work-in-progress                   [Page 1]
RFC nnnn                           A syntax for describing media feature sets
This document introduces and describes a syntax that can be used to
define feature sets which are formed from combinations and
relations involving individual media features.  Such feature sets
are used to describe the media feature handling capabilities of
message senders, recipients and file formats.
This document also outlines an algorithm for feature set matching.
1. Introduction.............................................3
1.1 Structure of this document ...........................4
1.2 Document terminology and conventions .................4
1.3 Discussion of this document ..........................4
1.4 Amendment history ....................................5
1.5 Unfinished business ..................................6
2. Content feature terminology and definitions..............6
3. Media feature combinations and capabilities..............6
3.1 Media features .......................................6
3.2 Media feature collections and sets ...................7
3.3 Media feature set descriptions .......................7
3.4 Media feature combination scenario ...................8
3.4.1 Data resource options............................8
3.4.2 Recipient capabilities...........................8
3.4.3 Combined options.................................9
3.5 Feature set predicates ...............................9
4. Feature set representation...............................10
4.1 Textual representation of predicates .................11
4.2 Named and auxiliary predicates .......................12
4.2.1 Defining a named predicate.......................12
4.2.2 Invoking named predicates........................13
4.2.3 Auxiliary predicates in a filter.................13
4.3 Feature set definition examples ......................14
4.3.1 Single predicate.................................14
4.3.2 Predicate with auxiliary predicate...............14
5. Processing feature set descriptions......................15
5.1 Matching feature sets ................................15
5.1.1 Feature set matching strategy....................17
5.1.2 Formulating the goal predicate...................17
5.1.3 Replace set expressions..........................18
5.1.4 Replace comparisons and logical negations........18
5.1.5 Conversion to canonical form.....................20
5.1.6 Grouping of feature predicates...................20
5.1.7 Merge single-feature constraints.................21
5.1.7.1 Rules for simplifying ordered values         21
5.1.7.2 Rules for simplifying unordered values       22
5.2 Effect of named predicates ...........................22
5.3 Unit designations ....................................22
5.4 Unknown feature value data types .....................24
5.5 Worked example .......................................24
5.6 Algorithm source code ................................24
6. Security considerations..................................24
7. Copyright................................................25
8. Acknowledgements.........................................26
9. References...............................................26
10. Author's address........................................28
A framework for such negotiation is described in [2].  A part of
this framework is a way to describe the range of media features
which can be handled by the sender, recipient or document
transmission format of a message.
Descriptions of media feature capabilities need to be based upon
some underlying vocabulary of individual media features.  A format
for such a vocabulary and procedures for registering media features
within this vocabulary are presented in [3].
This document defines a syntax that can be used to describe feature
sets which are formed from combinations and relations involving
individual media features.  Such feature sets are used to describe
the media handling capabilities of message senders, recipients and
file formats.
The feature set syntax is built upon the principle of using feature
set predicates as "mathematical relations" which define constraints
on feature handling capabilities.  This allows that the same form
of feature set expression can be used to describe sender, receiver
and file format capabilities.  This has been loosely modelled on
the way that relational databases use Boolean expresions to
describe a set of result values, and a syntax that is based upon
LDAP search filters.
1.1 Structure of this document
The main part of this memo addresses the following main areas:
Section 2 introduces and references some terms which are used with
special meaning.
Section 3 introduces the concept of describing media handling
capabilities as combinations of possible media features, and the
idea of using Boolean expressions to express such combinations.
Section 4 contains a description of a syntax for describing feature
sets based on the previously-introduced idea of Boolean expressions
used to describe media feature combinations.
Section 5 discusses some feature set description processing issues,
including a description of an algorithm for feature set matching.
1.2 Document terminology and conventions
"SHOULD", SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
NOTE:  Comments like this provide additional nonessential
information about the rationale behind this document.
Such information is not needed for building a conformant
implementation, but may help those who wish to understand
the design in greater depth.
1.3 Discussion of this document
Discussion of this document should take place on the content
negotiation and media feature registration mailing list hosted by
the Internet Mail Consortium (IMC):
Please send comments regarding this document to:
ietf-medfree@imc.org
To subscribe to this list, send a message with the body 'subscribe'
to "ietf-medfree-request@imc.org".
To see what has gone on before you subscribed, please see the
mailing list archive at:
http://www.imc.org/ietf-medfree/
1.4 Amendment history
00a  28-Sep-1998  This memo created to contain a description of the
syntax-related features from a previous.draft "An
algebra for describing media feature sets".
Theoretical background material is replaced by a
more practically oriented introduction to the
concepts, and references to ASN.1 representation
have been removed.
Revision history of "An algebra for describing media feature sets":
00a  11-Mar-1998  Document initially created.
01a  05-May-1998  Mainly-editorial revision of sections describing
the feature types and algebra.  Added section on
indicating preferences.  Added section describing
feature predicate syntax.  Added to security
considerations (based on fax negotiation scenarios
draft).
01b  25-Jun-1998  New Internet draft boilerplate in 'status'
preface.  Review and rationalization of sections
on feature combinations.  Added numeric
expressions, named predicates and auxiliary
predicates as options in the syntax.  Added
examples of text string predicate representation.
02a  08-Jul-1998  Added chapter on protocol processing
considerations, and in particular outlined an
algorithm for feature set matching.  Added
restrictions to the form of arithmetic expression
to allow deterministic feature set matching.
03a  27-Jul-1998  Simplified feature set handling by removing
options for expressions on the RHS of feature
comparison expressions.  Syntax elements have been
added as placeholders for possible future
extensions in this area;  examples have been
adjusted accordingly, and the feature set matching
algorithm greatly simplified.  Add simple unit
designations.
1.5 Unfinished business
.  Discuss determination of qvalues in the feature set matching
.  Use of unknown data types for feature values (section 5.3)
.  Add worked example and source code for feature matching
2. Content feature terminology and definitions
is a collection of different media features and
associated values.  This might be viewed as describing a
specific rendering of a specific instance of a document
or resource by a specific recipient.
Feature Set
is a set of zero, one or more feature collections.
Feature set predicate
A function of an arbitrary feature collection value which
returns a Boolean result.  A TRUE result is taken to mean
that the corresponding feature collection belongs to some
set of media feature handling capabilities defined by
this predicate.
Other terms used in this draft are defined in [2].
3. Media feature combinations and capabilities
3.1 Media features
This memo assumes that individual media feature values are simple
atomic values:
.  Boolean values.
.  Enumerated values.
.  Text string values (treated as atomic entities, like enumerated
value tokens).
.  Numeric values (Integer or rational).
These values all have the property that they can be compared for
equality ('='), and that numeric and ordered enumeration values can
be compared for less-than and greater-than relationship ('<=',
'>=').  These basic comparison operations are used as the primitive
building blocks for more comprehensive capability expressions.
3.2 Media feature collections and sets
Any single media feature value can be thought of as just one
component of a feature collection that describes some instance of a
resource (e.g. a printed document, a displayed image, etc.).  Such
a feature collection consists of a number of media feature tags
(each per [3]) and associated feature values.
A feature set is a set containing a number of feature collections.
Thus, a feature set can describe a number of different data
resource instances.  These can correspond to different treatments
of a single data resource (e.g. different resolutions used for
printing a given document), a number of different data resources
subjected to a common treatment (e.g. the range of different images
that can be rendered on a given display), or some combination of
these (see examples below).
Thus, a description of a feature set can describe the capabilities
of a data resource or some entity that processes or renders a data
resource.
3.3 Media feature set descriptions
A feature set may be unbounded.  For example, in principle, there
is no limit on the number of different documents that may be output
using a given printer.  But for practical use, a feature set
description must be finite.
The general approach to describing feature sets is to start from
the assumption that anything is possible;  i.e. the feature set
contains all possible document instances (feature collections).
Then constraints are applied that progressively remove document
instances from this set;  e.g. for a monochrome printer, all
document instances that use colour are removed, or for a document
that must be rendered at some minimum resolution, all document
instances with lesser resolutions are removed from the set.  The
mechanism used to remove document instances from the set is the
mathematical idea of a "relation";  i.e. a Boolean function (a
"predicate") that takes a feature collection parameter and returns
a Boolean value that is TRUE if the feature collection describes an
acceptable document instance, or FALSE if it describes one that is
excluded.
P(C)
P(C) = TRUE <- : -> P(C) = FALSE
+----------:----------+  This box represents some
|          :          |  set of feature collections (C)
| Included : Excluded |  that is constrained by the
|          :          |  predicate P.
+----------:----------+
The result of applying a series of such constraints is a smaller
set of feature collections that represent some media handling
capability.  Where the individual constraints are represented by
predicates that each describe some media handling capability, the
combined effect of these constraints is some subset of the
individual constraint capabilities that can be represented by a
predicate that is the logical-AND of the individual constraint
predicates.
3.4 Media feature combination scenario
3.4.1 Data resource options
The following expression uses the syntax introduced later to
describe a data resource that can be displayed either:
(a)  as a 750x500 pixel image using 15 colours, or
(b)  at 150dpi on an A4 page.
(| (& (pix-x=750) (pix-y=500) (color=15) )
(& (dpi>=150) (papersize=iso-A4) ) )
3.4.2 Recipient capabilities
The following expression describes a receiving system that has:
(a)  a screen capable of displaying 640*480 pixels and 16 million
colours (24 bits per pixel), 800*600 pixels and 64 thousand
colours (16 bits per pixel) or 1024*768 pixels and 256 colours
(8 bits per pixel), or
(b)  a printer capable of rendering 300dpi on A4 paper.
Note that this expression says noting about the colour or grey-
scale capabilities of the printer.  In the scheme presented here,
it is presumed to be unconstrained in this respect (or, more
realistically, any such constraints are handled out-of-band by
anyone sending to this recipient).
(| (& (| (& (pix-x<=640)  (pix-y<=480) (color<=16777216) )
(& (pix-x<=800)  (pix-y<=600) (color<=65535) )
(& (pix-x<=1024) (pix-y<=768) (color<=256) ) )
(media=screen) )
(& (dpi=300)
(media=stationery) (papersize=iso-A4) ) )
3.4.3 Combined options
The following example describes the range of document
representations available when the resource described in the first
example above is sent to the recipient described in the second
example.  This is the result of combining their capability feature
(& (dpi=300) (media=stationery) (papersize=iso-A4) ) )
The feature set described by this expression is the intersection of
the sets described by the previous two capability expressions.
3.5 Feature set predicates
There are many ways of representing a predicate.  The ideas in this
memo were inspired by the programming language Prolog [5], and its
use of predicates to describe sets of objects.
For the purpose of media feature description in networked
application protocols, the format used for LDAP search filters
[7,8] has been adopted, because it is a good match for the
requirements of capability identification, and has a very simple
structure that is easy to parse and process.
Observe that a feature collection is similar to a directory entry,
in that it consists of a collection of named values.  Further, the
semantics of the mechanism for selecting feature collections from a
feature set is in many respects similar to selection of directory
entries from a directory.
A feature set predicate used to describe media handling
capabilities is implicitly applied to some feature collection.
Within the predicate, members of the feature collection are
identified by their feature tags, and are compared with known
feature values.  (Compare with the way an LDAP search filter is
applied to a directory entry, whose members are identified by
attribute type names, and compared with known attribute values.)
Differences between directory selection (per [7]) and feature set
selection are:
.  Directory selection provides substring-, approximate- and
extensible- matching for attribute values.  Directory selection
may also be based on the presence of an attribute without regard
to its value.
.  Directory selection provides for matching rules that test for the
presence or absence of a named attribute type.
.  Directory selection provides for matching rules which are
dependent upon the declared data type of an attribute value.
.  Feature selection provides for the association of a quality value
with a feature predicate as a way of ranking the selected value
collections.
The idea of substring matching does not seem to be relevant to
feature set selection, and is excluded from these proposals.
Testing for the presence of a feature may be useful in some
circumstances, but does not sit comfortably within the semantic
framework.  Feature sets are described by implied universal
quantification over predicates, and the absence of reference to a
given feature means the set is not constrained by that feature.
Against this, it is difficult to define what might be meant by
"presence" of a feature, so the "test for presence" option is not
included in these proposals.  An effect similar to testing for the
presence of a feature can be achieved by a Boolean-valued feature.
The idea of extensible matching and matching rules dependent upon
data types are facets of a problem not addressed by this memo, but
which do not necessarily affect the feature selection syntax.  An
aspect which might have a bearing on the syntax would be a
requirement to specify a matching rule explicitly as part of a
selection expression.
4. Feature set representation
The foregoing sections have described a framework for defining
feature sets with predicates applied to feature collections.  This
section presents a concrete representation for feature set
Klyne                      Work-in-progress                  [Page 10]
4.1 Textual representation of predicates
The text representation of a feature set is based on RFC 2254 "The
String Representation of LDAP Search Filters" [8], excluding those
elements not relevant to feature set selection (discussed above),
and adding elements specific to feature set selection (e.g. options
to associate quality values with predicates).
The format of a feature predicate is defined by the production for
"filter" in the following, using the syntax notation and core rules
of [10]:
filter     =  "(" filtercomp *( ";" parameter ) )"
parameter  =  "q" "=" qvalue
/  ext-param "=" ext-value
qvalue     =  ( "0" [ "." 0*3DIGIT ] )
/  ( "1" [ "." 0*3("0") ] )
ext-param  =  ALPHA *( ALPHA / DIGIT / "-" )
ext-value  =  <parameter value, according to the named parameter>
filtercomp =  and / or / not / item
and        =  "&" filterlist
or         =  "|" filterlist
not        =  "!" filter
filterlist =  1*filter
item       =  simple / set / ext-pred
set        =  attr "=" "[" setentry *( "," setentry ) "]"
setentry   =  value "/" range
range      =  value ".." value
simple     =  attr filtertype value
filtertype =  equal / greater / less
equal      =  "="
greater    =  ">="
less       =  "<="
attr       =  ftag
value      =  fvalue
ftag       =  <Feature tag, as defined in [3]>
fvalue     =  number / token / string
number     =  integer / rational
integer    =  1*DIGIT
rational   =  1*DIGIT "." 1*DIGIT
token      =  ALPHA *( ALPHA / DIGIT / "-" )
string     =  DQUOTE *(%x20-21 / %x23-7E) DQUOTE
; quoted string of SP and VCHAR without DQUOTE
ext-pred   =  <Extension constraint predicate, not defined here>
(Subject to constraints imposed by the protocol that carries a
feature predicate, whitespace characters may appear between any
pair of syntax elements or literals that appear on the right hand
side of these productions.)
As described, the syntax permits parameters (including quality
values) to be attached to any "filter" value in the predicate (not
just top-level values).  Only top-level quality values are
recognized.  If no explicit quality value is given, a value of
'1.0' is applied.
The flexible approach to quality values and other
parameter values in this syntax has been adopted for two
reasons:  (a) to make it easy to combine separately
constructed feature predicates, and (b) to provide an
extensible tagging mechanism for possible future use (for
example, to incorporate a conceivable requirement to
explicitly specify a matching rule).
4.2 Named and auxiliary predicates
Named and auxiliary predicates can serve two purposes:
(a)  making complex predicates easier to write and understand, and
(b)  providing a possible basis for naming and registering feature
sets.
[[[TODO:  Decide how to treat named predicates.  Support
for named predicates in the capability syntax has not
(currently) been made a requirement.  However, its
inclusion as an option may be useful for publication
purposes, even if not used in actual protocol
elements.]]]
4.2.1 Defining a named predicate
A named predicate definition has the following form:
named-pred =  "(" fname *pname ")" ":-" filter
fname      =  ftag        ; Feature predicate name
pname      =  token       ; Formal parameter name
'fname' is the name of the predicate.
'pname' is the name of a formal parameter which may appear in the
predicate body, and which is replaced by some supplied value when
the predicate is invoked.
'filter' is the predicate body. It may contain references to the
formal parameters, and may also contain references to feature tags
and other values defined in the environment in which the predicate
is invoked.  References to formal parameters may appear anywhere
where a reference to a feature tag ('ftag') is permitted by the
syntax for 'filter'.
The only specific mechanism defined by this memo for introducing a
named predicate into a feature set definition is the "auxiliary
predicate" described later.  Specific negotiating protocols or
other memos may define other mechanisms.
There has been some suggestion of creating a registry for
feature sets as well as individual feature values.  Such
a registry might be used to introduce named predicates
corresponding to these feature sets into the environment
of a capability assertion.  Further discussion of this
idea is beyond the scope of this memo.
4.2.2 Invoking named predicates
Assuming a named predicate has been introduced into the environment
of some other predicate, it can be invoked by a filter 'ext-pred'
of the form:
ext-pred   =  fname *param
param      =  expr
The number of parameters must match the definition of the named
predicate that is invoked.
4.2.3 Auxiliary predicates in a filter
A auxiliary predicate is attached to a filter definition by the
following extension to the "filter" syntax:
filter     =/ "(" filtercomp *( ";" parameter ) ")"
"where" 1*( named-pred ) "end"
The named predicates introduced by "named-pred" are visible from
the body of the "filtercomp" of the filter to which they are
attached, but are not visible from each other.  They all have
access to the same environment as "filter", plus their own formal
parameters.  (Normal scoping rules apply:  a formal parameter with
the same name as a value in the environment of "filter" effectively
hides the environment value from the body of the predicate to which
it applies.)
Recursive predicates are not permitted.  The scoping
rules should ensure this.
4.3 Feature set definition examples
The following sub-sections give examples of feature predicates that
describes a number of image size and resolution combinations.
4.3.1 Single predicate
(| (& (Pix-x=1024)
(Pix-y=768)
(| (& (Res-x=150) (Res-y=150) )
(& (Res-x=150) (Res-y=300) )
(& (Res-x=600) (Res-y=600) ) )
(& (Pix-x=800)
(& (Res-x=600) (Res-y=600) ) ) ;q=0.9
4.3.2 Predicate with auxiliary predicate
(| (& (Pix-x=1024) (Pix-y=768) (Res Res-x Res-y) )
(& (Pix-x=800)  (Pix-y=600) (Res Res-x Res-y) );q=0.9
(& (Pix-x=640)  (Pix-y=480) (Res Res-x Res-y) );q=0.8 )
(Res Res-x Res-y) :-
Note that the formal parameters of "Res", "Res-x" and "Res-y",
prevent the body of the named predicate from referencing similarly-
named feature values.
5. Processing feature set descriptions
This section addresses some issues that may arise when using
feature set predicates as part of some content negotiation or file
selection protocol.
5.1 Matching feature sets
Matching a feature set to some given feature collection is
esentially very straightforward:  the feature set predicate is
simply evaluated for the given feature collection, and the result
(TRUE or FALSE) indicates whether the feature collection matches
the capabilities, and the associated quality value can be used for
selecting among alternative feature collections.
Matching a feature set to some other feature set is less
straightforward.  Here, the problem is to determine whether or not
there is at least one feature collection that matches both feature
sets (e.g. is there an overlap between the feature capabilities of
a given file format and the feature capabilities of a given
recipient?)
This feature set matching is accomplished by logical manipulation
of the predicate expressions as described in the following
For this procedure to work reliably, the predicates must be reduced
to a canonical form.  One such form is "clausal form", and
procedures for converting general expressions in predicate calculus
are given in [5] (section 10.2), [11] (section 2.13), [12] (chapter
4) and [13] (section 5.3.2).
"Clausal form" for a predicate is similar to "conjunctive normal
form" for a proposition, which consists of a conjunction (logical
ANDs) of disjunctions (logical ORs).  A related form that is better
suited to feature set matching is "disjunctive normal form", which
consists of a logical disjunction (OR) of conjunctions (ANDs).  In
this form, it is sufficient to show that at least one of the
disjunctions can be satisfied by some feature collection.
A syntax for disjunctive normal form is:
filter     =  orlist
orlist     =  "(" "|" andlist ")" / term
andlist    =  "(" "&" termlist ")" / term
termlist   =  1*term
term       =  "(" "!" simple ")" / simple
where "simple" is as described previously in section 6.1.  Thus,
the canonicalized form has at most three levels:  an outermost
"(|...)" disjunction of "(&...)" conjunctions of possibly negated
feature value tests.
NOTE (a theoretical diversion):
Is this consideration of "clausal form" really required?
After all, the feature predicates are just Boolean
expressions, aren't they?
Well, no.  A feature predicate is a Boolean expression
containing primitive feature value tests (comparisons),
represented by 'item' in the feature predicate syntax.
If these tests could all be assumed to be independently
TRUE or FALSE, then each could be regarded as an atomic
proposition, and the whole predicate could be dealt with
according to the (relatively simple) rules of
Propositional Calculus.
But, in general, the same feature tag may appear in more
than one predicate 'item', so the tests cannot be
regarded as independent.  Indeed, interdependence is
needed in any meaningful application of feature set
matching, and it is important to capture these
dependencies (e.g. does the set of resolutions that a
sender can supply overlap the set of resolutions that a
recipient can handle?).  Thus, we have to deal with
elements of the Predicate Calculus, with its additional
rules for algebraic manipulation.
This section aims to show that these additional rules are
more unfamiliar than complicated.  In practice, the way
that feature predicates are constructed and used actually
avoids some of the complexity of dealing with fully-
generalized Predicate Calculus.
5.1.1 Feature set matching strategy
The overall strategy for matching feature sets, expanded in the
following sections, is:
1. Formulate the feature set match hypothesis.
2. Replace "set" expressions with equivalent comparisons.
3. Eliminate logical negations, and express all feature comparisons
in terms of just four comparison operators
4. Reduce the hypothesis to canonical disjunctive normal form (a
disjunction of conjunctions).
5. For each of the conjunctions, attempt to show that it can be
satisfied by some feature collection.  Any that cannot be
satisfied are discarded.
5.1  Separate the feature value tests into independent groups,
such that each group contains tests involving just one
feature value.  That is: no group contains a predicate
involving any feature tag that also appears in a predicate
in some other group.
5.2  For each group, merge the various constraints to a minimum
form.  This process either yields a reduced expression for
the allowable range of feature values, or an indication that
no value can satisfy the constraints (in which case the
corresponding conjucntion can never be satisfied).
6. If the remaining disjunction is non-empty, then the constraints
are shown to be satisfiable.  Further, it can be used as a
statement of the resulting feature set for possible further
matching operations.
5.1.2 Formulating the goal predicate
A formal statement of the problem we need to solve can be given as:
given two feature set predicates, '(P x)' and '(Q x)', where 'x' is
some feature collection, we wish to establish the truth or
otherwise of the proposition:
EXISTS(x) : (P x) AND (Q x)
i.e. does there exist a feature collection 'x' that satisfies both
predicates, 'P' and 'Q'?
Then, if feature sets to be matched are described by predicates 'P'
and 'Q', the problem is to determine if there is any feature set
satisfying the goal predicate:
(& P Q)
i.e. to determine whether the set thus described is non-empty.
5.1.3 Replace set expressions
Replace all "set" instances in the goal predicate with equivalent
"simple" forms:
T = [ E1, E2, ... En ]  -->  (| (T=[E1]) (T=[E2]) ... (T=[En]) )
(T=[R1..R2])            -->  (& (T>=R1) (T<=R2) )
(T=[E])                 -->  (T=E)
5.1.4 Replace comparisons and logical negations
The predicates are derived from the syntax described previously,
and contain primitive value testing functions '=', '<=', '>='.  The
primitive tests have a number of well known properties that are
exploited to reach a useful conclusion;  e.g.
(A = B)  & (B = C)  => (A = C)
(A <= B) & (B <= C) => (A <= C)
These rules form a core body of logic statements against which the
goal predicate can be evaluated.  The form in which these
statements are expressed is important to realizing an effective
predicate matching algorithm (i.e. one that doesn't loop or fail to
find a valid result).  The first step in formulating these rules is
to simplify the framework of primitive predicates.
The primitive predicates from which feature set definitions are
constructed are '=', '<=' and '>='.  Observe that, given any pair
of feature values, the relationship between them must be exactly
one of the following:
(LT a b): 'a' is less than 'b'.
(EQ a b): 'a' is equal to 'b'.
(GT a b): 'a' is greater than 'b'.
(NE a b): 'a' is not equal and not related to 'b'.
(The final case arises when two values are compared for which no
ordering relationship is defined, and the values are not equal;
e.g. two unequal string values.)
These four cases can be captured by a pair of primitive predicates:
(LE a b): 'a' is less than or equal to 'b'.
(GE a b): 'a' is greater than or equal to 'b'.
The four cases described above are prepresented by the following
combinations of primitive predicate values:
(LE a b)   (GE a b) | relationship
TRUE      FALSE  | (LT a b)
TRUE       TRUE  | (EQ a b)
FALSE       TRUE  | (GT a b)
FALSE      FALSE  | (NE a b)
Thus, the original 3 primitive tests can be translated to
combinations of just LE and GE, reducing the number of additional
relationships that must be subsequently captured:
(a <= b)  -->  (LE a b)
(a >= b)  -->  (GE a b)
(a = b)   -->  (& (LE a b) (GE a b) )
Further, logical negations of the original 3 primitive tests can be
eliminated by the introduction of 'not-greater' and 'not-less'
(NG a b)  ==  (! (GE a b) )
(NL a b)  ==  (! (LE a b) )
using the following transformation rules:
(! (a = b) )   -->  (| (NL a b) (NG a b) )
(! (a <= b) )  -->  (NL a b)
(! (a >= b) )  -->  (NG a b)
Thus, we have rules to transform all comparisons and logical
negations into combinations of just 4 relational operators.
5.1.5 Conversion to canonical form
Expand bracketed disjunctions, and flatten bracketed conjunctions
and disjunctions:
(& (| A1 A2 ... Am ) B1 B2 ... Bn )
-->  (| (& A1 B1 B2 ... Bn )
(& A2 B1 B2 ... Bn )
(& Am B1 B2 ... Bn ) )
(& (& A1 A2 ... Am ) B1 B2 ... Bn )
-->  (& A1 A2 ... Am B1 B2 ... Bn )
(| (| A1 A2 ... Am ) B1 B2 ... Bn )
-->  (| A1 A2 ... Am B1 B2 ... Bn )
The result is a "disjunctive normal form", a disjunction of
conjunctions:
(| (& S11 S12 ... )
(& S21 S22 ... )
(& Sm1 Sm2 ... Smn ) )
where the "Sij" elements are simple feature comparison forms
constructed during the step at section 7.1.4.  Each term within the
top-level "(|...)" construct represents a single possible feature
set that satisfies the goal.  Note that the order of entries within
the top-level '(|...)', and within each '(&...)', is immaterial.
From here on, each conjunction '(&...)' is processed separately.
Only one of these needs to be satisfiable for the original goal to
be satisfiable.
(A textbook conversion to clausal form [5,11] uses slightly
different rules to yield a "conjunctive normal form".)
5.1.6 Grouping of feature predicates
NOTE: remember that from here on, each conjunction is
treated separately.
Each simple feature predicate contains a "left-hand" feature tag
and a "right-hand" feature value with which it is compared.
To arrange these into independent groups, simple predicates are
grouped according to their left hand feature tag ('f').
5.1.7 Merge single-feature constraints
Within each group, apply the predicate simplification rules given
below to eliminate redundant single-feature constraints.  All
single-feature predicates are reduced to an equality or range
constraint on that feature, possibly combined with a number of non-
equality statements.
If the constraints on any feature are found to be contradictory
(i.e. resolved to FALSE according to the applied rules), the
current conjunction is removed from the feature set description.
Otherwise, the resulting description is a minimal form of the
particular conjunction of the feature set definition.
5.1.7.1 Rules for simplifying ordered values
These rules are applicable where there is an ordering relationship
between the given values 'a' and 'b':
(LE f a)  (LE f b)      -->  (LE f a),   a<=b
(LE f b),   otherwise
(LE f a)  (GE f b)      -->  FALSE,      a<b
(LE f a)  (NL f b)      -->  FALSE,      a<=b
(LE f a)  (NG f b)      -->  (LE f a),   a<b
(NG f b),   otherwise
(GE f a)  (GE f b)      -->  (GE f a),   a>=b
(GE f b),   otherwise
(GE f a)  (NL f b)      -->  (GE f a)    a>b
(NL f b),   otherwise
(GE f a)  (NG f b)      -->  FALSE,      a>=b
(NL f a)  (NL f b)      -->  (NL f a),   a>=b
(NL f a)  (NG f b)      -->  FALSE,      a>=b
(NG f a)  (NG f b)      -->  (NG f a),   a<=b
5.1.7.2 Rules for simplifying unordered values
These rules are applicable where there is no ordering relationship
applicable to the given values 'a' and 'b':
(LE f a)  (LE f b)      -->  (LE f a),   a=b
FALSE,      otherwise
(LE f a)  (GE f b)      -->  FALSE,      a!=b
(LE f a)  (NL f b)      -->  (LE f a)    a!=b
(LE f a)  (NG f b)      -->  (LE f a),   a!=b
(GE f a)  (GE f b)      -->  (GE f a),   a=b
(GE f a)  (NL f b)      -->  (GE f a)    a!=b
(GE f a)  (NG f b)      -->  (GE f a)    a!=b
(NL f a)  (NL f b)      -->  (NL f a),   a=b
(NL f a)  (NG f b)      -->  (NL f a),   a=b
(NG f a)  (NG f b)      -->  (NG f a),   a=b
[[[TODO:  model the above system to confirm that it is complete and
does indeed work properly in all cases.]]]
5.2 Effect of named predicates
The preceding procedures can be extended to deal with named
predicates simply by instantiating (i.e. substituting) the
predicates wherever they are invoked, before performing the
conversion to disjunctive normal form.  In the absence of recursive
predicates, this procedure is guaranteed to terminate.
When substituting the body of a precdicate at its point of
invocation, instances of formal parameters within the predicate
body must be replaced by the corresponding actual parameter from
the point of invocation.
5.3 Unit designations
In some exceptional cases, there may be differing conventions for
the units of measurement of a given feature.  For example,
resolution is commonly expressed as dots per inch (dpi) or dots per
centimetre (dpcm) in different applications (e.g. printing vs
faxing).
In such cases, a unit designator may be appended to a feature value
according to the conventions indicated below (see also [3]).  These
considerations apply only to features with numeric values.
Every feature tag has a standard unit of measurement.  Any
expression of a feature value that uses this unit is given without
a unit designation -- this is the normal case.  When the feature
value is expressed in some other unit, a unit designator is
appended to the numeric feature value.
The registration of a feature tag indicates the standard unit of
measurement for a feature, and also any alternate units and
corresponding unit designators that may be used, according to [3].
Thus, if the standard unit of measure for resolution is 'dpcm',
then the feature predicate '(res=200)' would be used to indicate a
resolution of 200 dots-per-centimetre, and '(res=72dpi)' might be
used to indicate 72 dots-per-inch.
Unit designators are accommodated by the following extension to the
feature predicate syntax:
fvalue     /= number *WSP token
When performing feature set matching, feature comparisons with and
without unit designators, or feature comparisons with different
unit designators, are treated as if they were different features.
Thus, the feature predicate '(res=200)' would not, in general, fail
to match with the predicate '(res=200dpi)'.
A protocol processor with specific knowledge of the
feature and units concerned might recognize the
relationship between the feature predicates in the above
example, and fail to match these predicates.
This appears to be a natural behaviour in this simple
example, but can cause additional complexity in more
general cases.  Accordingly, this is not considered to be
required or normal behaviour.  It is presumed that in
general, the application concerned will ensure consistent
feature processing by adopting a consistent unit for any
given feature.
5.4 Unknown feature value data types
[[Discuss issues of specific features which may have feature-
specific comparison rules, as opposed to generic Booleans,
enumerations, strings and numbers which use comparison rules
independent of the feature concerned.]]
[[[TODO]]]
5.5 Worked example
5.6 Algorithm source code
Some security considerations for content negotiation are raised in
[1,2,3].
The following are primary security concerns for capability
identification mechanisms:
.  Unintentional disclosure of private information through the
announcement of capabilities or user preferences.
.  Disruption to system operation caused by accidental or malicious
provision of incorrect capability information.
.  Use of a capability identification mechanism might be used to
probe a network (e.g. by identifying specific hosts used, and
exploiting their known weaknesses).
The most contentious security concerns are raised by mechanisms
which automatically send capability identification data in response
to a query from some unknown system.  Use of directory services
(based on LDAP [7], etc.) seem to be less problematic because
proper authentication mechanisms are available.
Mechanisms which provide capability information when sending a
message are less contentious, presumably because some intention can
be inferred that person whose details are disclosed wishes to
communicate with the recipient of those details.  This does not,
however, solve problems of spoofed supply of incorrect capability
The use of format converting gateways may prove problematic because
such systems would tend to defeat any message integrity and
authenticity checking mechanisms that are employed.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain
it or assist in its implementation may be prepared, copied,
published and distributed, in whole or in part, without restriction
of any kind, provided that the above copyright notice and this
paragraph are included on all such copies and derivative works.
However, this document itself may not be modified in any way, such
as by removing the copyright notice or references to the Internet
Society or other Internet organizations, except as needed for the
purpose of developing Internet standards in which case the
procedures for copyrights defined in the Internet Standards process
must be followed, or as required to translate it into languages
other than English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on
an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET
ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
8. Acknowledgements
My thanks to Larry Masinter for demonstrating to me the breadth of
the media feature issue, and encouraging me to air my early ideas.
Early discussions of ideas on the IETF-HTTP and IETF-FAX discussion
lists led to useful inputs also from Koen Holtman, Ted Hardie and
Dan Wing.
The debate later moved to the IETF conneg WG mailing list, where Al
Gilman was particularly helpful in helping me to refine the feature
set algebra.  Ideas for dealing with preferences and specific units
were suggested by Larry Masinter.
This work was supported by Content Technologies Ltd and 5th
Generation Messaging Ltd.
[1]  "Scenarios for the Delivery of Negotiated Content"
T. Hardie, NASA Network Information Center
Internet draft: <draft-ietf-http-negotiate-scenario-02.txt>
Work in progress, November 1997.
[2]  "Requirements for protocol-independent content negotiation"
G. Klyne, Integralis Ltd.
Internet draft: <draft-ietf-conneg-requirements-00.txt>
Work in progress, March 1998.
[3]  "Media Feature Tag Registration Procedure"
Koen Holtman, TUE
Andrew Mutz, Hewlett-Packard
Ted Hardie, NASA
Internet draft: <draft-ietf-conneg-feature-reg-03.txt>
Work in progress, July 1998.
[4]  "Notes on data structuring"
C. A. R. Hoare,
in "Structured Programming"
Academic Press, APIC Studies in Data Processing No. 8
ISBN 0-12-200550-3 / 0-12-200556-2
[5]  "Programming in Prolog" (2nd edition)
W. F. Clocksin and C. S. Mellish,
ISBN 3-540-15011-0 / 0-387-15011-0
[6]  "Media Features for Display, Print, and Fax"
Larry Masinter, Xerox PARC
Dan Wing, Cisco Systems
Internet draft: <draft-masinter-media-features-02.txt>
Work in progress, January 1998.
[7]  RFC 2251, "Lightweight Directory Access Protocol (v3)"
M. Wahl, Critical Angle Inc.
T. Howes, Netscape Communications Corp.
S. Kille, Isode Limited
[8]  RFC 2254, "The String Representation of LDAP Search Filters"
[9]  RFC 2068, "Hyptertext Transfer Protocol -- HTTP/1.1"
R. Fielding, UC Irvine
J. Gettys,
J. Mogul, DEC
H. Frytyk,
T. Berners-Lee, MIT/LCS
January 1997.
[10] RFC 2234, "Augmented BNF for Syntax Specifications: ABNF"
D. Crocker (editor), Internet Mail Consortium
P. Overell, Demon Internet Ltd.
November 1997.
[11] "Logic, Algebra and Databases"
Ellis Horwood Series: Computers and their Applications
ISBN 0-85312-709-3/0-85312-803-3 (Ellis Horwood Ltd)
ISBN 0-470-20103-7/0-470-20259-9 (Halstead Press)
[12] "Elementary Logics: A procedural Perspective
Dov Gabbay
Prentice Hall, Series in computer science
[13] "Logic and its Applications"
Edmund Burk and Eric Foxley
10. Author's address
Graham Klyne
Content Technologies Ltd.        5th Generation Messaging Ltd.
Forum 1                          5 Watlington Street
Station Road                     Nettlebed
Theale                           Henley-on-Thames
Reading, RG7 4RA                 RG9 5AB
United Kingdom                   United Kingdom.
Telephone: +44 118 930 1300      +44 1491 641 641
Facsimile: +44 118 930 1301      +44 1491 641 611
E-mail: GK@ACM.ORG


Foolish, delicate, in the lower right-hand corner.
IN HER POEM "Two Views of a Cadaver Room," Sylvia Plath describes Bruegel's 16th-century plague painting, The Triumph of Death. In this painting, two lovers inhabit a small area in the corner of the canvas. Blind in their "little country" to the devastation the Black Death is wreaking all around them, these two have eyes only for each other, a love-awed blissful pair. In his heartbreaking new book, Say Her Name, Francisco Goldman and his young wife, Aura Estrada are, like the two lovers in Bruegel's painting, so enthralled by each other that they see little of the darkness in the world around them. Theirs is that love most of us long for — deep and passionate and playful, blind to everything around it; when death invades their idyll, it seems particularly devastating. For Goldman, everything is torn away.
In the work of art — not quite novel, not quite memoir — he made about the loss of his wife in a terrible swimming accident in Oaxaca, Mexico, Goldman is both the lover in Bruegel's painting and the painter. He is the blissful subject, but he is also the artist, in full creative command. His objective is to immortalize their love, even as death looms over every page. Goldman fully illustrates the scope and depth of his loss, publically prosecuting himself for Aura's death before partially exonerating his guilt — and he does all these things in a beautifully written, deftly playful literary work.
This book begins like the opening of a trial, "Aura died on July 25, 2007," and right away we feel that Goldman intends to hide nothing from us; he has us completely under his storytelling spell. The book is a gift to her memory as much as a reckoning of her death. That he is able to hit us with the shock of that loss again and again demonstrates his artistic control even in his deep desolation.
Goldman started writing Say Her Name only a few months after a freak wave took Aura's life in Oaxaca, an accident that, toward the end of the book, he finally describes with painful, clinical precision. Aura was 30, beautiful, and just embarking on a literary career. They had been together for five years, married for nearly two, and were on a much-needed vacation. She, a Fulbright scholar and Spanish-language literature PhD candidate at Columbia, had also enrolled in a graduate creative writing program in New York. She was simultaneously writing reviews and stories, researching and plotting a novel while chipping away at her dissertation. To get her through, Francisco would ask her to imagine the beach they had visited many times before. "This summer, mi amor, two weeks at the beach in Mazunte. We'll rent a beach house. Just three more months to go!" Only two days into this much anticipated vacation, the errant wave broke her spine.
In Goldman's hands, that wave takes on a life of its own, becoming a sentient and purposeful being, even exchanging identities with the author. "Am I the wave?" he repeatedly asks, the self really becoming liquid here, as the guilt of a man who has watched his wife die pours itself into that fantastical transmutation. "This is the moment that decided everything: if I am the wave, this is when I begin to crest, with an aching surge of love inside my chest." He blames himself for all of it — for falling in love with her, for allowing her to fall in love with him, for marrying her, for taking her to that beach, for teaching her to bodysurf, for allowing her to be the spontaneous, joyful person she was, for not being able to settle her, to calm her exuberance, to take care of her as he had promised her mother he would. When Aura's mother, Juanita, blames him for her daughter's death, we are shocked at the unfairness of the claim. When he blames himself, we understand it as his attempt to make sense of that which is senseless.
The beaches in Oaxaca, where the couple had previously rented a house with Aura's cousin, are in fact known for their wild surf. But not this beach, in Mazunte. They had chosen this beach because it was calmer than most in the area. No fatal accidents had ever been recorded here, a detail that underscores the freakish nature of the tragedy.
It was after the deep trauma of her death, and the painful and confounding attempts of Aura's incredibly protective mother to have him officially blamed and even arrested, that Goldman began the project of this book. He wrote it, he says, "as a way of keeping Aura near me." Time and again he throws into question the idea of writing as catharsis, as a way of moving through trauma. What he's attempting here is a calling up of his beloved through art, not only as some form of artistic spiritualism, but in order to actualize the real Aura — to bring her to life on the page. For Goldman, this book is a way of holding onto Aura's reality, the detailed specificity of her living being. As he moves through all the grief literature he can find, reading and rereading books on death as if a duty, Goldman asks the heartbreaking question, which goes against these books' central premise: what if you don't want to let go? What if you don't let go?
Goldman met Aura when he was 47 and she was 25 and a prospective graduate student at Columbia. On their first date they are in Mexico City and, in a quiet moment at her apartment, Goldman intuits that which is later confirmed: what Aura really wants is to be a writer — in strong defiance of her powerful mother's will. Juanita has plans for Aura: she will become the academic that Juanita, a single mother, was never able to be. Goldman encourages Aura to set her own goals even if they terrify her. With his support, and defying not just her mother but also Columbia's rule that students make a singular, full-time commitment to the university, Aura enrolls in a second graduate program in fiction writing at Hunter. And though pursuing the thing she most wants is often terrifying and exhausting for her, she is very happy. She writes short stories, many of them subsequently published, and is working on a novel about a Lacanian analyst when she dies.
Goldman's book is structured by emotion — he is building a case for his love — and the narrative moves fluidly through time. The book opens with Aura's death, but then we see her as a child in Mexico City, a sharp-tongued teenager in high school, a promising student at the UNAM (National Autonomous University of Mexico). Goldman touches on every chapter of her life to create "as beautiful a record as I could leave of who she was." When Goldman first meets her at a New York literary event, he says, "I really believed that this was the way it happened: at the most unexpected moment you met somebody, there was a magical connection, an instant complicity, and your life changed." At dinner that night, they are seated across from Salman Rushdie but are already cloistered in their intimacy and oblivious to him, and everyone else. "We sat close together at a corner of the table, knees touching, drinking wine, talking and laughing." Hours later, Aura recites George Herbert in a dive bar in Brooklyn, "A Mexico City girl standing in a Brooklyn bar reciting seventeenth-century English religious poetry. In the history of the borough, had that ever happened before?" And all this before their first official date.
You are so lucky, Francisco, she would say. You are the luckiest man on earth, to have a young and intelligent, talented wife who loves you the way I do. Do you know how lucky you are?
I know mi amor. I'm the luckiest guy alive.
You are, Francisco, you really are.
Often in the mornings, when Aura had just woken up, she would turn to me in bed and say, ¿Ay mi amor, que feo eres. Por qué me casé contigo?, her voice sweet and impish. Oh, my love, how ugly you are. Why did I marry you?
¿Soy feo? I'd ask sadly. This was one of our routines.
Si, mi amor, she'd say, eres feo, pobrecito. And she'd kiss me and we'd laugh.
Aura is so vibrant on these pages, that we are shocked afresh with each reminder of her death; and thus we feel an infinitesimal fraction of what Goldman must feel every time he is hit with the fact that she will not be coming home from school that day, that she will not again sit in the chair she has set up on the fire escape, at which she smokes her occasional cigarettes, and which he named her "Journey chair," that though he feels her there, she is not really in his bed.
He also takes up with Ana Eva, the young waitress who used to serve them Sunday brunch. Aura had tutored Ana Eva for her English exams, and helped her with a final paper. After Aura's death, Ana Eva tells Goldman that Aura has come to her: "Just a few days ago I felt her voice inside of me, asking me to take care of you, Francisco." Goldman soon decides he is in love with this young woman, but we readers see the darkness driving him; his need to replicate is worrisome. He lets Ana Eva into his life, but his and Aura's wedding rings, which he wears on a chain around his neck, fall onto Ana Eva's face as they make love.
He had wanted Ana Eva to eat with the same gusto as Aura, to be able to converse with him about literature, to understand him, as had Aura, when he became critical of his father. Here, with Nabokovian deftness, Goldman the artist shows us the heart-rending recklessness of Goldman the broken lover with his desperate need to replicate not only with Ana Eva, but subsequently with much younger women, including an art student in Berlin. "She was only twenty-five, the same age as Aura when we'd met, but now it was five years later… ." Like some Freudian repetition of the traumatic event (and which, Freud contends, is part of the death drive), he seems bent on replacing Aura. And in his desperation, he suggests, he turns into a Lothario.
Goldman searches for Aura in other, less obvious places as well. He sees her in the tree in front of his apartment, greeting it as if it is Aura, even kissing it before ascending the steps of his building. "Hello my love." When he forgets one evening, he runs out in the middle of the wintry night, and apologizes to the tree. On New Year's Eve, a year after Aura's death, while very drunk, he is hit by a car. Later, he falls, hard, on the stairs leading out of the subway; his inability to rise up and out of the subterranean darkness and into the light without first inflicting great pain upon himself seems a clear metaphor for his struggle. "What did it mean?" he asks. Survivor's guilt? A desire to externalize the pain he suffers? A wish to join his beloved? (He says that he is no longer afraid of death.) Goldman allows for the full, irreducible complexity of his grief.
All this reminds us that love is flawed, that the coming together of two people is a complicated affair, and that love is delicate partially because of all of these lines of fracture in a union that the couple must struggle to contain.
Say Her Name puts many things into question, including its very form: Is this a novel? A memoir? Some twisted version of both? This is a book of a life lost, but Goldman brings Aura back through the magic of storytelling, and with his own insistence that she is still there with him. In his shifting position as both subject and author, Goldman puts into practice one of our most liquid literary tropes, that of the unreliable narrator — and this is where Goldman as artist really takes over. It is in the interstice between the position of artist and subject that the magic of this book occurs. Francisco Goldman the subject is presented as completely vulnerable, overcome by anguish, unable to move forward as a result of his loss. But it is Francisco Goldman the artist who creates this unforgettable narrator, with all his grief, compulsions, case-building, and proclamations of enduring love. Is he not also the artist in complete control of his enterprise, and thus of our sympathy and emotion?
Goldman lures Aura back to life in these pages; we hear her voice, see her pixie eyes gazing back at us. He evokes their great companionable love, and courageously, meticulously describes Aura's terrible death. He both prosecutes himself and builds the case for his exoneration. This is no straightforward retelling of their story; our footing constantly slips on a shifting foundation, the unsure ground of mourning. Of the author's love, however, we are never in doubt; it never wavers and — given life by Goldman's consummate artistry — it drives the book.


text:
When are typefaces considered conflicting with each other?
I have been reading a lot about font pairing lately, but I'm still missing to identify when fonts don't complement and contrast with each other, instead they clash.
An example that I've read was about comparing a so-called blackletter with a roman serif. They had different proportions, one condensed with large x-height, the other more extended and taller. As they shared the same weight, size and decoration, they were considered too alike. Why was that so, if they had about the same contrast and similarities?
Could the overall thickness have something to do about it?
typefaces font-pairing
go-junta
Carla RaquelCarla Raquel
Alas, there are no hard and fast rules for this. Context is important. And opinion is important as well. At the end of the day, it comes down to a trained eye making the call more than it being a checklist. That said, the article you link to seems to cover things well at a high level--which is probably all you'll find. – DA01 Nov 5 '15 at 17:21
Note that Almendra (the upper font in the example) is not a blackletter font. It has a small number of stylistic elements that are more typical for blackletter than for roman fonts, but that's really it. – Wrzlprmft♦ Nov 5 '15 at 22:29
Just took a minute to scan the article you linked to. It's not the worst advice, but there are so many grievous errors (like IDing that font as blackletter) that I'd look for a better authority. That one will mislead you in too many finer points. – plainclothes Nov 6 '15 at 2:17
I figured there had to be something here: graphicdesign.stackexchange.com/q/11/4216 – plainclothes Nov 6 '15 at 2:20
If one of the excellent answers helped you, accept an answer by clicking the little diamond icon next to the answer you prefer! That's a nice way to also thank the people who spent time helping you. – go-junta Nov 17 '15 at 10:31
Subtle differences look like careless mistakes and sloppiness, not just in fonts but in all designs.
When things are just slightly off, its enough people notice, but not enough people think its a deliberate thought out decision.
Here is Arial Black with Source Sans Pro Semibold. They clash because they're both trying to be clean sans-serif fonts and in that sense have a lot in common. But then there's jarring differences when used together. Just look at those lowercase e's at the end and the angles don't match at all. the o's likewise are fairly different and that's really because they are very different.
Here they are in Regular weight and same size / kerning:
Take either one on its own and its fine. But when used together those little differences make it jarring to look at. Here we can demonstrate this by using both in a sentence. They are similar enough that its hard to tell which words are in which font, but different enough to see that something is off:
If we had instead used a more Contrasting font however it could work even within a sentence:
In some respects it is a matter of opinion, there are many fonts that can pair. But the reasons not to pair is a bit easier to pick out.
Can you easily tell the two fonts are different?
That's really all there is to it. And its important to note this is true of all areas of design. Its why in fashion when someone wears two close but not identical shades of a color its said to clash, why suits are made from the same fabric so the exact same shade is used on the jacket and pants. Or in spacing why it would be very strange if you had 3" then 2.8" then 3" then 3" then 3.1" or something like that.
As far as the exact fonts in your article are concerned. It does a pretty good job explaining it.
While not the worst pairing ever it does clash because they're similar enough that its not immediately apparent that they're different fonts. Especially (and this was probably deliberate in their example) when there is no lowercase a which is the greatest difference between them.
Ryan♦Ryan
I wish to note that the in "sick boy" example, the quality of the pairing is very difficult to assess as the first font is horribly rendered. It looks as if there are fringes or smeared ink all over the type. (I know that that's not your fault.) – Wrzlprmft♦ Nov 5 '15 at 22:34
The problem with this advice is that it reduces type pairing to simple in-line variation, which is rarely a requirement of a typographic exercise. In most cases, you can keep all the small type in one family. The question of pairing often centers on headings or some other device where size and weight contrast is part of the equation by definition. – plainclothes Nov 6 '15 at 1:24
You gave a good example when comparing pairing with fashion. Leopard print with a zebra print are terrible pairing and the logic is the same as with fonts! It's always a question of balancing one with the other, toning down one with the following, etc. There is some kind of movement in design and when you see it, it becomes easier to know what's matching well or not. And the best starting point is probably to not use 2 positive together.. 2 fonts that are too similar ;) – go-junta Nov 6 '15 at 2:39
Immensefuly helpful clarification!The Arial Black with Source Sans Pro Semibold example, with both in regular weight really gives the impression that they are almost the same font(if it wasn't for the minor differences referred), most probably because there is almost no variation in the stems thickness and on the bowl shapes. – Carla Raquel Nov 6 '15 at 11:27
I've been browsing a bit here and found a link that spiked my curiosity: graphicdesign.stackexchange.com/questions/35218/… – Carla Raquel Nov 6 '15 at 15:09
DA01 and Dom are pointing at the central problem:
They conflict when they don't look good together.
So how do you know what looks good? That's such an obnoxiously subjective thing. But, like so many areas of design, typography is subjective. You have to train your eye for this soft skill the hard way.
Go be a typographer
Set a lot of type
Let pros criticize your work
Fail miserably
Eventually (hopefully) you'll just know. And at some point, you'll be able to see the harmonies before you set a single line just by analyzing the structure of the faces.
Study the masters
You'll do yourself a great service to study the masters and the history of type design and typography.
Two books I consider required for any designer working with type:
The Elements of Typographic Style, by Bringhurst. This one is a virtual encyclopedia for typographers. Bringhurst has a lot to say about proper pairings.
The Form of the Book, by Tschichold. Unfortunately, this one has climbed dramatically in value. But this quick read will teach you some of the most minute intricacies of setting fine type. It's not so much about pairing but, understanding typographic detail and appreciation.
So this all begs the question, what qualities of type do you need to understand to build that typographic instinct? In short, everything. But it's a progressive subject.
Start with fundamentals
Stylistic categories. This happens to be anything but a settled subject, but there are generally accepted groups like Venetian, Garalde, Transitional, Modern, Scotch Roman, Grotesk, Geometric, Humanist, and so on.
Anatomy. Obviously, the structure of a face is the driver behind all classification. But beyond the hard lines of historical groupings, there are endless ways to combine of these features. The sum of the parts of two faces will dictate the personality and the potential harmony.
As you begin to understand how typefaces are built, you'll start to see why one pairing works and another doesn't. You'll be able to look at a face and say, "it's generally round proportions and angled terminals combined with a slightly tilted axis would make it a perfect partner for ...". That's when things get fun.
Context is everything
If you're setting two fonts at totally different scales with plenty of space between them, you'll be primarily concerned with "personality". The interaction of the details is less critical.
If you're looking for a section header face to pair within text or one face that will be used for in-line emphasis with another, the details become critical. At that point, you probably want to normalize their x-height (size them so their lower case characters line up), make sure their extenders are relatively close, and think about things like crossbar alignment and terminal positions. That's much harder to do well.
To illustrate the point, consider the different requirements between these two scenarios. In both cases, the pairing is Bell and Akzidenz.
Like any craft, typography and typographic pairing are skills built over time and experience. The good news is, just pursuing this in the first place means you're ahead of 80% of your peers.
Would the down-voter care to elaborate? Would you like a formula? – plainclothes Nov 6 '15 at 1:21
I didn't downvote you but if you feel you can add more to your answer such as adding a formula, that's a secret weapon you should really share because that's what the OP is after. "They conflict when they don't look good together" is like saying water is wet, but I'm not sure if it's worth a downvote and I do agree with some parts of your answer. – go-junta Nov 6 '15 at 7:00
I was planning to read "The Elements of Typographic Style" as i've heard lots of good recommendations about it.I guess i have now something to read on the weekend. :) – Carla Raquel Nov 6 '15 at 11:28
Bringhurst's book The Elements of Typographic Style is an excellent recommendation. I also would recommend it as a resource. – bemdesign Nov 6 '15 at 11:52
I fleshed out the answer a bit. I may have been a bit terse on the first round ( ◔_◔ ) – plainclothes Nov 6 '15 at 18:12
Make sure they aren't too similar.
Make sure they aren't too different.
Break both rules when necessary (at your discretion).
Not the answer you're looking for? Browse other questions tagged typefaces font-pairing or ask your own question.
What are best practices for choosing and pairing fonts?
is it okay to mix two font styles on the front page of a web site?
Critique: Typography combination for heading and subheading
How are Serif and Sans-serif fonts different, and when should one use one over the other?
What characters are good to start with when designing a typeface?
What are good sites for purchasing a bulk of typefaces?
Free, screen-suited roman font to match Unifraktur Maguntia
How should I approach designing special characters I am unfamiliar with when designing a typeface?
What is it called when all the characters are typed out for typeface examination?
Are there typefaces designed to fit inside one another?

redpajama_set_name: RedPajamaCommonCrawl


text:
Two community hospitals in Derbyshire to close?
Newholme Hospital, Bakewell.
Two community hospitals in Derbyshire could close under plans for a major shake-up of NHS care in the county.
Bakewell's Newholme Hospital and Bolsover Hospital could both be closed as part of the plans, which are designed to provide care closer to home for more older people.
A public consultation on the Better Care Closer to Home proposals, which are part of the 21C #JoinedUpCare programme, will start on Monday and run until October.
The aim of the plans is to provide care closer to home for older people receiving inpatient care in a community hospital or for older people with dementia who currently receive services from community hospitals.
Health bosses say that if the proposals were introduced, over time it will reduce the demand for community hospital beds. A total of 84 general community hospital beds won't be needed at Bolsover, Cavendish, Clay Cross, Newholme and Whitworth hospitals and a further 20 older people's mental health beds at Cavendish and Newholme hospitals won't be needed either.
This would then lead to the closure, over time, of Bolsover and Newholme hospitals, with remaining outpatient services being relocated locally, if the plans were to go ahead after the consultation.
Dr Ben Milton, Chair of NHS North Derbyshire Clinical Commissioning Group and a GP at Darley Dale Medical Centre, said: "My patients often tell me that they don't want to go into hospital and doctors now know that patients do better if they can avoid unnecessary hospital stays, which can lead to some older people never regaining their independence.
"Medicine has changed for the better over the years. This means much of the care traditionally provided in community hospitals is just as safe to give at home where many patients prefer to be.
"It means more older people can still receive the quality of care that they need, from an expert team based in the community, without the strain of travelling to a community hospital or an unnecessary admission."
No current service would stop until an alternative was in place, and a number of existing services would expand if the proposals were to go ahead.
Eleven public meetings are taking place between 6pm and 8pm at:
• Bolsover School, July 4
• Bakewell Agricultural Centre, July 7
• Whitworth Centre, Darley Dale, July 11
• Pavilion Gardens, Buxton, July 12
• New Mills Town Hall, July 14
• North Wingfield Community Centre, July 18
• Dronfield Civic Hall, July 20
• Chesterfield College Heart Space, July 21
• Bolsover School, July 25
• Bakewell Agricultural Centre, July 27
• Coney Green Business Centre, Clay Cross, July 28.
Dr Steve Lloyd, Chair of NHS Hardwick Clinical Commissioning Group who is a GP at St Lawrence Road Surgery, added: "The proposals in the consultation are the result of years of research and discussion with the public and colleagues in local health and social care services and the
voluntary sector.
"We've done a lot of work to understand people's needs. We've been told they want joined-up care closer to home because there's no bed like your own bed. Doctors, nurses, therapists and social care staff also agree it's best, where it's safe and possible to do so.
"Investing in community teams to provide more care closer to home would mean we won't need as many beds in our community hospitals. This will enable us to make necessary changes that will better equip us to meet the changing needs of the local population into the future.
"We would like to hear everyone's opinions about our plans."
More information about the proposals and the public meeting dates and venues is available here.


1. Walk in front of the former station building and down to a fingerpost sign on the trail. Turn right and follow the directions for Wye Dale.
Millers Dale Station was built in 1863 to serve the Midland Railway. It was one of the largest stations on the line and had the rare facility of a railside post office. Originally built with two platforms and one viaduct over the nearby river and gorge, the station became so popular with visitors that a second viaduct was constructed in 1905, along with three further platforms that could cater for the hordes of visitors arriving from nearby cities and towns who wanted to escape at weekends to the hills for the price of a cheap away-day return ticket. Millers Dale station closed in 1967 with the last train passing through in 1968. In summer, land around the station is rich with wild flowers providing a riot of colour. After 100 yards, turn left at a further fingerpost for Millers Dale and descend steps to the river level.
2. Go through a gap stile to access the riverside path and proceed upstream. Watch for dippers that appear like monochrome robins skimming above the surface and look for water voles, sadly now a rare sight. The path goes beneath a high arched bridge where water gurgles past at speed before calming down into deeper stretches and pools where trout may well linger.
3. Arriving at a metal footbridge over the river at the entrance to Chee Dale, turn right and go through a gate to follow the footpath uphill to Wormhill. Over time it has been eroded down to slippery limestone bedrock. The sides of the dale hereabouts are managed and conserved by occasionally allowing highland cattle to graze as they will eat away scrub and undergrowth whilst naturally manuring the ground. Look for wild flowers and keep glancing behind you as sweeping views emerge down the valley.
4. On reaching Chee Tor Cottage on the outskirts of Wormhill bear left and follow a short stretch of grassy track to avoid walking along the road where there is no footway. Notice Wormhill Hall nestling in a sheltered hollow on the other side of the road surrounded by trees. It was built in 1697 and is home to the Bagshawe family who have owned the manor of Wormhill since the middle of the 15th century.
5. Just before the sign to indicate that you are entering the village, go through a gated stile and cross an area of grass between the green shed on your left and Hassop farmhouse on your right. Go through a gateway between old buildings to a fingerpost sign and narrow gate in the wall beyond. Follow the sign for 'Public Footpath Meadow' heading diagonally right across fields and stiles.
6. After walking downhill in the third field you will come to a wooden stile by a gate. Now head down to a fence and then around to your right to descend a steep path which leads into Flag Dale. Ascend a path on the opposite side to a little set of stone stile posts and a gate at the top of the bank. Please be sure to keep dogs on leads as there are generally sheep grazing in these fields.
7. Head uphill and diagonally right across two fields to a gate and fingerpost sign. Continue ahead along a walled grassy path and then through a narrow gate at the entrance to the farm.
8. Walk directly through the yard of Mosley Farm to the far side where you will come to a sign for the Pennine Bridleway. Turn left and head steeply downhill to Chee Dale admiring the fantastic views as you go. Look to the skies to see buzzards soaring overhead and listen for the sound of the peregrine falcons which sometimes nest hereabouts.
Far below is a little cluster of properties at Blackwell Mill on the site of a medieval corn mill. Centuries ago pack ponies would have passed here by descending a little valley from the vicinity of what is now the lay-by at the side of the A6 opposite. They would have had to ford the river and then head off towards Buxton up Great Rocks Dale which leads up to Peak Dale.
Long exploited for its limestone, the top part of Great Rocks Dale now forms part of Tunstead Quarry, a 'super quarry' producing building stone, aggregates, lime and cement with a workforce of some 400 employees.
9. Go through a bridle-gate near the bottom of the path to access a stretch of redundant railway track bed and turn left. This will then unite with the main Monsal Trail.
10. Follow the signs for Bakewell and walk along the trail. As you go, marvel at the incredible engineering skills of the Victorian era that enabled this railway to be laid through an almost impenetrable gorge, resulting in high arched bridges and massive embankments being constructed along with a series of long tunnels that had to be driven through hard limestone. At times glance down to see moss-encrusted trees far below or look across to crags and buttress cliffs striped by minerals leeching out of the limestone.
11. You will pass through Rusher Cutting Tunnel first, which is not very long, then come to Chee Tor Tunnel No 2 – a short burst of shadow – before experiencing the main Chee Tor tunnel which is illuminated by a long line of lights that curve around a bend, enticing you to enter.
12. Emerging from the tunnel you will cross a viaduct which is often used for abseiling by organised groups. Beyond this you will pass huge redundant lime kilns supported by buttress pillars. These lime works were operated by the East Buxton Lime Firms – an amalgamation of a dozen small companies – and were in operation from 1880-1944. In their heyday they could produce some 50 tons of quicklime a day for use in the steel and chemical industries as well as for agriculture. This whole site is now a nature reserve and wildlife conservation area. Continue along the trail leading you directly back to Millers Dale Station car park.
Terrain: 7 gates, 6 stiles. Long descent of steps. Close proximity to deep water. Woodland paths and trip hazards. Fields with livestock grazing. Steep pathway down into Chee Dale. Section of walking along Monsal Trail used also by cyclists and horse riders. Long tunnel with lighting that goes off at dusk.
Description: Beginning with a riverside amble beside the Wye, this walk gently ascends to White Peak upland to enjoy far- reaching views over a truly magnificent landscape. After passing through a succession of fields and stiles, the route then zig-zags steeply down a section of the Pennine Bridleway to finish with a stretch of easy walking along part of the famous Monsal Trail.


Last weeks attempt at making fried chicken, and succeeding at it, influenced me to attempt another daunting dish. SCALLOPS.
I have read numerous times that is it so easy to overcook scallops and they can turn rubbery. Truthfully, overcooking might as well be my middle name. But, putting all fears aside and still living off the high from last week, I went to my bookshelf and found the scallop recipe I flagged months ago in the Chrissy Teigen's Cravings Cookbook.
Her recipe looked simple enough, it included all the guidance I needed to make perfectly seared scallops, and a warm corn salsa to go with it. For me that would have been enough food, but I knew my boyfriend would be starving 30 minutes after eating, so I added a Parmesan Risotto to the dish.
I looked at the timing of each dish, and determined that I should start the Risotto first, then the corn salsa, and once both were finished, I could cook the scallops without any distractions.
Before I started, I made sure I had all of my ingredients and they were all measured out. This weeks dish is all about timing and precision, so having everything laid out before I begin is critical.
I melted 2 Tbsp of butter in a high walled skillet. Then I sauteed diced up red onion.
Once the wine is absorbed, pour in half of the chicken broth and let it simmer until the rice has fully absorbed the broth. Mix occasionally so the rice doesn't burn on the bottom. This should take about 6-8 minutes. Then pour in the remaining broth and again, let the rice simmer with occasional mixing until it is fully absorbed.
Finally, pour in the Parmesan cheese and the remaining 1 Tbsp of butter and mix.
You will end up with a super creamy risotto, that you should season with some salt and pepper!
This portion of the meal was the absolute easiest. From above, I had already cut up all my ingredients, which included the scallions, red pepper and corn for this dish. So, making the salad was essentially 2 steps.
Melt 2 Tbsp of butter in a skillet.
Add the pepper, scallions and corn to the skillet and mix.
Here was the moment of truth. All of my side dishes had turned out perfectly, but that wouldn't matter if I overcooked my scallops.
Chrissy first recommended drying the tops of the scallops so they could get a better sear. So while I made the risotto and the corn salad, my little scallops sat with a paper towel on top of them.
Once it was time to cook I removed the damp towel and I made sure my butter, oil, salt and pepper were all next to me. I did not want to be running around looking for my ingredients while my scallops burned.
First, heat up your nonstick skillet and add 1 Tbsp of oil and then 1/2 Tbsp of butter.
While the butter melted, season the tops of your scallops heavily with salt and pepper.
Let them sit, DO NOT TOUCH THEM for about 2 minutes. (I imagined Chrissy yelling this at me in the kitchen, because it is so hard to not touch them) You might be able to see a little sear forming at the bottom of them.
Nearing your 2 minutes, take a paper towel and gently dry the tops of your cooking scallops. Then again heavily season with salt and pepper.
After your two minutes, add 1 Tbsp of oil and 1/2 Tbsp of butter and flip those babies over and admire your beautiful sear!
Let them sit for about another 1 -1 1/2 minutes. You should take them off immediately and there should be a beautiful sear on both sides.
In total, the entire meal took about 1 hour from preparing all of my ingredients until this beautiful masterpiece was on the plate.
The moment of truth was cutting into the scallops and they were the perfect consistency. Not at all rubbery and tasted great with the corn salad and risotto.
Pretty sure I won't be able to top this dish. It was absolutely amazing, and I can honestly say this is definitely not a dish to fear. Time management and not getting distracted are key!


Do you like knitting for your home? I keep seeing pretty home decor patterns but I haven't had time to make anything for my home yet. When I received a copy of The Knitted Home I wanted to change that. This book is gorgeous and contemporary. It's full of great textures and a mixture of classic and fun and quirky pieces.
I WANT that foot stool. The photography and styling in this book is beautiful too. This book is written/designed by Ruth Cross and whichever texture you like, there is something for you.
This lace sampler is perfect as a curtain and could also be adapted to be worn as a shawl. In fact, it's given me an idea for an alternative to curtains in my studio.
Most of the colours used in this book are fairly neutral but I think the designs would look fab in bright colours too. There are lots of great textures from knit and purl combinations, big cables and lace.
The book is well laid out with clear photos showing design details and well written patterns. In the back there is a how to section and some thoughts on adapting your own designs.
This book has all the basics you'd expect for a home decor book, like cushions and throws but it also has some unusual stuff like fruit bowls and vase covers.
The photography is outstanding. I'd love to keep this on my coffee table to flick through when I need some inspiration or something pretty to look at.
If you want to find out more about designer Ruth Cross, check out her website.
Although I'd love to cast on immediately for one of the cushions in this book, looking at my deadline list for the coming months, I know that's not going to happen but there is one idea I can implement straight away. I never know what to do with my zillions of swatches. Last year I gave a big bag to a friend who does yarn bombing but what about getting some pretty wooden frames and displaying my swatches? I think this is an idea I'll definitely be trying out. It'd look great in my office/studio. I may even persuade my family to let me display some in the lounge.
If you'd like a copy of this gorgeous book, then I've got a special offer for you - details below.
To order The Knitted Home (9781906417727) for £16.00 including p&p*, telephone 01903 828503 and quote offer code JS189.
Or send a cheque made payable to: Littlehampton Book Services Mail Order Department, Littlehampton Book Services, PO Box 4264, Worthing, West Sussex BN13 3TG. Please quote the offer code JS189 and include your name and address details. *UK ONLY - Please add £2.50 if ordering from overseas.
So what would you like to knit for your home?
I love your idea of a knitted curtain for your office. I'd like to have a go at knitting a lace blind for my craft den / study.
Great book ! Now i will knit for my home !


This series of worksheets is meticulously drafted to help students of Grade 5 to learn how to divide decimals using number lines. An array of worksheets will require learners to draw hops, write the division sentences, fill in the missing numbers and much more!
Observe the number line. Use the dividend as the starting point and hop backwards on the number line. The number of hops drawn will give you the quotient.
Read and interpret the number line to find the missing divisor, dividend or quotient for each of the division sentences featured here. Use the answer key to check your solutions.
Keenly study the number line to identify the interval, number of hops and the starting point. Then, frame the division sentence that best matches the corresponding number line.
Hop backwards on the number line to find the quotient. Then, complete the given division sentences. Worksheets are segregated into tenths and hundredths for easy downloads.
Complete the division sentence that describes each number line model. Both the divisors and dividends are decimals.
Based on the interval, number of hops, and starting point observed, write down the division sentence that best represents it.
The number lines in this batch of worksheets employs the ruler model. Pay close attention to the markings and frame the division sentences.


Delaware Park Blvd. Wilmington, DE 19804.
and enjoy up close and personal.
Baltimore, MD. Corvette Can Run.
If you're a car buff or just like fine automobiles, then you're in the right place. View great photos of C1, C2, C3, C4, C5, C6, C7, corvette stingray and increase your knowledge about them. Also the opportunity of participating in our upcoming events as a member of our club by joining or as a spectator of one of the nicest car shows around, We strive to provide a well organized event wherever we go. Everything you would expect to see and more, provided by us is always a team effort. When you go to a LTD Corvette Club event it's always a memorabilia and entertaining in the most positive way. There's great food, entertainment, tee shirts, memorabilia, souvenirs in a family atmosphere. Including informative history about the different generations of America's first sports car. Living The Dream Corvette Club wants to share their dream with you. Be sure to bookmark our Upcoming Events page.
Entering the 1950s, no corporation even came close to General Motors in its size, the scope of its enterprise or its profits. GM was twice as big as the second biggest company in the world. Standard Oil of New Jersey (forefather of today's Exxon/Mobil), and had a vast conglomeration of businesses ranging from home appliances to providing insurance and building Buick, Cadillacs, Chevrolet, GMC, Oldsmobile, Pontiac and locomotives. It was so big that it made more than half the cars sold in the United States and the U.S. Department of Justice's antitrust division was threatening to break it up. In the diversified 21st century, it's almost hard to imagine how overwhelmingly concentrated corporate power was in GM back then. But it didn't make a sports car. The idea of a car coming from stodgy GM that could compete with Jaguar, MG or Triumph was almost absurd. Still, there was room inside GM for dreams even if there wasn't any room for whimsy. Harley J. Earl, GM'S chief designer (formally the head of the Art and Color Section) and the man who invented the "concept car" with the 1938 Buick Y-Job, was in charge of the corporation's ambitious musings.
The second generation (C2) Corvette, which introduced Sting Ray to the model, continued with fiberglass body panels, and overall, was smaller than the first generation. It was designed by Larry Shinoda from a previous concept design called the "Q Corvette".
The third generation Corvette, patterned after the Mako Shark II concept car, was introduced for the 1968 model year and was in production until 1982. C3 coupes featured the first use of T-top removable roof panels.
The fourth generation Corvette was the first complete redesign of the Corvette since 1963. Production of the 1983 model year but quality issues & part delays resulted in only 43 prototypes for the 1983 model.
Production of the C5 Corvette began in 1997 and ended with the 2004 model year. The C5 had a top speed of 181 mph and was judged by the automotive press as improved in nearly every area.
The C6 Corvette retained the front engine and rear transmission design of the C5, but was otherwise all-new, including new bodywork with exposed headlamps (for the first time since 1962).
The next-generation (C7) Corvette had been in development since 2007. Originally set to be introduced for the 2011 model year, its introduction was delayed for 3 years. It was finally released for the 2014 model year.
The first 300 Corvettes were hand built at a plant in Flint, Michigan in 1953.
Living The Dream was founded by Brian K. Westmoreland in Harrisburg, PA. In 2007, Brian purchased his second corvette, a 2003 which inspired his vision of starting a Corvette Club. Brian had friends and neighbors who also owned corvettes and they'd get together at his home on weekends to barbeque, wash and wax their cars and talk shop about Corvettes. These get togethers' inspired other friends to purchase the American sports car.
The annual Corvette show, held in Carlisle, PA, the last weekend in August, is a big event for Brian and his enthusiastic friends. Brian held barbeques at his home after these shows. Many of his neighbors would come and look at the cars parked at the barbeque as they looked forward to this as an annual event. From these gatherings, discussions ensued around starting a club. Brian took the bull by the horns and started contacting friends and others local enthusiast with a love for "America's Sports Car".
Production was moved the next year to a facility in St. Louis, Missouri and then finally ended up in 1981 at the Bowling Green Assembly Plant.
C7 corvettes in production on the assembly line.


One day when he had gone forth because all the monks had assembled to him and asked to hear words from him, he spoke to them in the Egyptian tongue as follows: 'The Scriptures are enough for instruction, but it is a good thing to encourage one another in the faith, and to stir up with words. Wherefore you, as children, carry that which you know to your father; and I as the elder share my knowledge and what experience has taught me with you. Let this especially be the common aim of all, neither to give way having once begun, nor to faint in trouble, nor to say: We have lived in the discipline a long time: but rather as though making a beginning daily let us increase our earnestness. For the whole life of man is very short, measured by the ages to come, wherefore all our time is nothing compared with eternal life. And in the world everything is sold at its price, and a man exchanges one equivalent for another; but the promise of eternal life is bought for a trifle. For it is written, "The days of our life in them are threescore years and ten, but if they are in strength, fourscore years, and what is more than these is labour and sorrow. " Whenever, therefore, we live full fourscore years, or even a hundred in the discipline, not for a hundred years only shall we reign, but instead of a hundred we shall reign for ever and ever. And though we fought on earth, we shall not receive our inheritance on earth, but we have the promises in heaven; and having put off the body which is corrupt, we shall receive it incorrupt.


text:
Lord Music Academy founder and president dead at age 76
Legendary music academy founder and founder of the music academy Loyd Arlen Arlen died Sunday, according to his son.
Arlen was 78.
The cause of death was listed as congestive heart failure, his son, Chris Arlen, told the Washington Post.
Chris Arlens, a self-described music enthusiast, said the family was saddened to learn of his father's passing.
"It's really sad," Chris Arlan told the Post.
"Loyd's an incredible man.
He was an incredibly talented man.
His spirit is a testament to life. "
He made the world a better place.
His spirit is a testament to life.
He is one of the greatest musicians in history."
The family was notified of Arlen's death on Sunday afternoon, according, to the Post, which cited a statement from Loyd's son.
"The family is deeply saddened to hear of the passing of Loyd, his wife, Susan and son Chris," the statement read.
"They will be deeply missed."
Loyd was the founder of L&R, a music academy in Manhattan that was founded by his brother Charles and later merged with the Los Angeles County Music Center.
The L&amps are currently in their sixth year, according the Los Altos Times, with a total enrollment of 2,000 students.
The academy is also a center for music education in New York City, where students are required to complete a bachelor's degree.
Chris and Susan Arlen were inducted into the Rock and Roll Hall of Fame in 2014.
L&&amp=amp is an institution for a reason, Chris said.
"Our family's passion is music and the music that L&AMP teaches is beautiful.
Loyd gave a lot to the music world, and he's gone down in history as a great musician and a great man.
I'm very proud of his legacy and how we've been able to contribute to it," Chris said in a statement to the Associated Press.


Subscription management should be easy for your members, and this functionality built into AccessAlly gives members a lot of freedom.
If you're offering monthly and annual subscription options for your clients, you might have members asking to switch from one to the other. Allow members to initiate a switch, either from monthly to annual, or vice versa is helpful and will help you cut down on administration, too.
You might also have different levels or membership tiers, and want to make it easier for people to switch between tiers as their needs change throughout your membership's lifetime.
Please note: the ability to switch between offers is not available for PayPal subscriptions.
Not sure what you might want your subscription management section to look like? Here's an example from AccessAlly itself, which shows you the current plan you're on and gives you ability to choose between monthly or yearly plans for the two levels.
Designing such a subscription management section is a matter of setting up a new page on your site (or putting this section on an existing "my profile" page) and then embedding the correct shortcodes to show each section for only the members who need to see them.
Once someone clicks on the link for the subscription they want to switch to, it will take them to a single page with the order form for that plan… and since they are logged in, they will be "switched" to this plan without needing to enter their credit card details again.
This will happen on a pro-rated basis, so previous payments will count toward the new subscription.
Typically, you would have a "monthly subscription" product, and a separate "annual subscription" product set up.
You might also have different tiers of subscriptions, say an entry-level and a VIP level.
One offer for the monthly subscription, another for the annual subscription.
Lastly, embed the order form inside your membership site.
If you already have order form for this particular subscription, you can simply link to it from a "manage subscription" page, and if the member is logged in – they will be able to switch to it by clicking the "Pay Now" button.