And now for something completely different, Wolverhampton v-c decides
3 September 2010
The vice-chancellor of the University of Wolverhampton is to retire next summer as she feels it is “time to do something else” after 40 years of full-time work.
![]() |
Sign InEnter your username and password to sign in:
DEECD Staff Forgot/Change Password | Students & Parents Forgot/Change Password | About the Ultranet |
I believe that the time is ripe for significantly better documentation of programs, and that we can best achieve this by considering programs to be works of literature. Hence, my title: "Literate Programming."
Let us change our traditional attitude to the construction of programs: Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.
The practitioner of literate programming can be regarded as an essayist, whose main concern is with exposition and excellence of style. Such an author, with thesaurus in hand, chooses the names of variables carefully and explains what each variable means. He or she strives for a program that is comprehensible because its concepts have been introduced in an order that is best for human understanding, using a mixture of formal and informal methods that reinforce each other.
The philosophy behind CWEB is that an experienced system programmer, who wants to provide the best possible documentation of his or her software products, needs two things simultaneously: a language like TeX for formatting, and a language like C for programming. Neither type of language can provide the best documentation by itself; but when both are appropriately combined, we obtain a system that is much more useful than either language separately.
The structure of a software program may be thought of as a "WEB" that is made up of many interconnected pieces. To document such a program we want to explain each individual part of the web and how it relates to its neighbors. The typographic tools provided by TeX give us an opportunity to explain the local structure of each part by making that structure visible, and the programming tools provided by languages like C make it possible for us to specify the algorithms formally and unambiguously. By combining the two, we can develop a style of programming that maximizes our ability to perceive the structure of a complex piece of software, and at the same time the documented programs can be mechanically translated into a working software system that matches the documentation.
Besides providing a documentation tool, CWEB enhances the C language by providing the ability to permute pieces of the program text, so that a large system can be understood entirely in terms of small sections and their local interrelationships. The CTANGLE program is so named because it takes a given web and moves the sections from their web structure into the order required by C; the advantage of programming in CWEB is that the algorithms can be expressed in "untangled" form, with each section explained separately. The CWEAVE program is so named because it takes a given web and intertwines the TeX and C portions contained in each section, then it knits the whole fabric into a structured document.
A traditional computer program consists of a text file containing program code. Scattered in amongst the program code are comments which describe the various parts of the code.
In literate programming the emphasis is reversed. Instead of writing code containing documentation, the literate programmer writes documentation containing code. No longer does the English commentary injected into a program have to be hidden in comment delimiters at the top of the file, or under procedure headings, or at the end of lines. Instead, it is wrenched into the daylight and made the main focus. The "program" then becomes primarily a document directed at humans, with the code being herded between "code delimiters" from where it can be extracted and shuffled out sideways to the language system by literate programming tools.
The effect of this simple shift of emphasis can be so profound as to change one's whole approach to programming. Under the literate programming paradigm, the central activity of programming becomes that of conveying meaning to other intelligent beings rather than merely convincing the computer to behave in a particular way. It is the difference between performing and exposing a magic trick.
The key features of literate programming are the organization of source code into small sections and the production of a book quality program listing. Literate programming is an excellent method for documenting the internals of software products especially applications with complex features. Literate programming is useful for programs of all sizes. Literate programming encourages meaningful documentation and the inclusion of details that are usually omitted in source code such as the description of algorithms, design decisions, and implementation strategy.
Literate programming increases product quality by requiring software developers to examine and explain their code. The architecture and design is explained at a conceptual level. Modeling diagrams are included (UML). Long procedures are restructuring by folding portions of the code into sections. Innovative ideas, critical technical knowledge, algorithmic solutions, and unusual coding constructions are clearly documented.
Literate programs are written to be read by other software developers. Program comprehension is a key activity during corrective and perfective maintenance. High quality documentation facilitates program modification with fewer conceptual errors and resultant defects. The clarity of literate programs enables team members to reuse existing code and to provide constructive feedback during code reviews.
Organization of source code into small sections. The style of literate programming combines source code and documentation into a single source file. Literate programs utilize sections which enable the developer to describe blocks of code in a convenient manner. Functions are decomposed into several sections. Sections are presented in the order which is best for program comprehension. Code sections improve on verbose commenting by providing the ability to write descriptive paragraphs while avoiding cluttering the source code.
Production of a book quality program listing. Literate programming languages (CWEB) utilize a combination of typesetting language (TeX) and programming language (C++). The typesetting language enables all of the comprehension aids available in books such as pictures, diagrams, figures, tables, formatted equations, bibliographic references, table of contents, and index. The typographic processing of literate programs produces code listings with elegantly formatted documentation and source code. Listings generated in PDF format include hypertext links.
Remember the Basics. There are many factors involved in developing excellent software. Literate programming is just a single technique to be used along with all the other well established software engineering practices. Here are some software practices related to program documentation:
Some of my favorite tools are CWEB and Leo for source code outlining, doxygen for API documentation, CCCC and LocMetrics for source code metrics, PC Lint for static error analysis, and cppunit for automated unit testing.
I am a performance analyst, algorithm designer, and software developer. My business is named Parzall.
For fantasy football fans I have written a book on draft strategy, Fantasy Football Draft Satisfaction 2010: Prepare for Draft Day, and developed software for value based drafting, FFDS 2010 VBD Engine (fantasyfootballds.com)
Writing a literate program is a lot more work than writing a normal program. After all, who ever documents their programs in the first place!? Moreover, who documents them in a pedagogical style that is easy to understand? And finally, who ever provides commentary on the theory and design issues behind the code as they write the documentation? All of that is here in the pages that follow.
This book presents a selection of modern rendering algorithms through the documented source code for a complete rendering system. The system, pbrt, is written using a programming methodology called literate programming that mixes prose describing the system with source code that implements it. We believe that the literate programming approach is a valuable way to introduce ideas in computer graphics and computer science in general. Often, some of the subtleties of an algorithm can be unclear or hidden until it is implemented, so seeing an actual implementation is a good way to acquire a solid understanding of that algorithm's details. Indeed we believe that deep understanding of a small number of algorithms in this manner provides a stronger base for further study of computer graphics than does a superficial understanding of many.
This book is a long literate program. This means that in the course of reading this book, you will read the full implementation of the pbrt rendering system, not just a high-level description of it. The literate programming metalanguage provides two important features. The first is the ability to mix prose with source code. This feature makes the description of the program just as important as its actual source code, encouraging careful design and documentation. Second, the language provides a mechanism for presenting program code to the reader in an entirely different order than it is supplied to the compiler. Thus the program can be described in a logical manner.
In some sense, the literate programming system is just an enhanced macro substitution package tuned to the task of rearranging source code. This may seem like a trivial change, but in fact literate programming is quite different from other ways of structuring software systems.
The fundamental logic of the WEB system encourages "top-down" programming and "structured" design. Quoting from Kernighan and Plauger, 'Top-down design and successive refinement attack a programming task by specifying it in the most general terms, then expanding these into more and more specific and detailed actions, until the whole program is complete. Structured design is the process of controlling the overall design of a system or program so the pieces fit together neatly, yet remain sufficiently decoupled that they may be independently modified. ... Each of these disciplines can materially improve programmer productivity and the quality of code produced.' The WEB system encourages you to work top-down by giving you the ability to break up your code into independent segments (called "sections").
I use the following list of requirements to imply a definition of a literate program and the minimum set of tools which are needed to prepare, use, and study the resulting code.
WEB's design encourages writing programs in small chunks which Knuth called modules (he also used the term sections). Modules have three parts: documentation, definitions, and code. At least one of these three parts must be non-null.
The documentation portion is often a verbal description of the algorithm. It may be any textual information that aids the understanding of the problem. It is not uncommon for a WEB to have a number of `documentation only' modules. These usually describe the problem independent of the chosen language for implementation. For example, a WEB for a subprogram that solves the linear equation, Ax = b, could have discussion of singularity, condition numbers, partial pivoting, the banded nature of the expected coefficient matrices, etc. It should be an unusual but not exceptional case when a module contains no documentation.
Listings generated by the WEB system are unlike any other form of program listings in existence. They resemble programs from computer science textbooks rather than listings from executable programs. WEB utilizes the TeX document compiler, which includes a typesetting command language capable of tremendous control over document appearance. Even if the author of a WEB program does not directly utilize TeX capabilities in the source code, the combined efforts of WEB and TeX will create beautiful documents on their own. TeX automatically handles details such as microjustification, kerning, hyphenation, ligatures, and other sophisticated operations, even when the description part of the source is simple ASCII text. WEB adds functions which are specific to computer programs, such as boldface reserved words, italicized identifiers, substitution of true mathematical symbols, and more standard pretty-printer functions such as reformatting and indentation.
The whole concept of code sections, indeed structured programming, is to reduce the amount of text that must be read in order to determine what a piece of code is doing. The code section is a form of data reduction in that the section name is a placeholder representing the code contained in that section. Anything that is logically part of the section should be moved into it, thereby reducing the complexity of the code where it is referenced.
The presentation is engaging and clear. In WEB one deliberately writes a paper, not just comments, along with code. This of course helps readers. I am sure that it also helps writers: reflecting upon design choices sufficiently to make them explainable must help clarify and refine one's thinking. Moreover, because an explanation in WEB is intimately combined with the hard reality of implementation, it is qualitatively different from, and far more useful than, an ordinary "specification" or "design" document. It can't gloss over the tough places.
Literacy in programming means different things in different circumstances. It's not a matter of artistry or efficiency alone; it's more a question of suitability in context. Knuth's expository gem will teach future readers about programming style and data structures, whether they use the code or not. McIlroy's six liner is not itself an enduring piece of work, but it is a clear example of how to use enduring tools. Hanson's real-world code, then, must be evaluated according to whether it is robust, flexible, and easy to maintain. Despite roughness in low-level style, the program meets these goals well. Hanson demonstrates that "literate programming" is a viable approach to creating works of craft as well as works of art.
The basic idea of literate programming is to take a fundamentally different starting point for the presentation of programs to human readers, without any direct effect on the program as seen by the computer. Rather than to present the program in the form in which it will be compiled (or executed), and to intercalate comments to help humans understand what is going on (and which the compiler will kindly ignore), the presentation focuses on explaining to humans the design and construction of the program, while pieces of actual program code are inserted to make the description precise and to tell the computer what it should do. The program description should describe parts of the algorithm as they occur in the design process, rather than in the completed program text. For reasons of maintainability it is essential however that the program description defines the actual program text; if this were defined in a separate source document, then inconsistencies would be almost impossible to prevent. If programs are written in a way that concentrates on explaining their design to human readers, then they can be considered as works of (technical) literature; it is for this reason that Knuth has named this style of software construction and description "literate programming".
The documentation parts of the program description should allow for the same freedom of expression that one would have in an ordinary technical paper. This means that the document describing the program should consist of formatted text, rather than being a plain text file. This does not exclude the possibility that the source is written as a plain text file, but then it should undergo some form of processing to produce the actual program description. The document should moreover contain fragments of a program written in some traditional (structured) programming language, in such a way that they can be mechanically extracted and arranged into a complete program; in the formatted document on the other hand layout and choice of fonts for these program fragments should be so as to maximize readability.
Parts of the program that belong together logically should appear near to each other in the description, so that they are visible from the part of the documentation that discusses their function. This means that it should be possible to rearrange program text with respect to the order in which it will be presented to the computer, for otherwise the parts that deal with the actions at the outer level of a subroutine will be pushed apart by the pieces specifying the details of inner levels. The most obvious and natural way to do this is to suppress the program text for those inner levels, leaving an outline of the outer level, while the inner levels may be specified and documented elsewhere; this is a bit like introducing subroutines for the inner levels, but without the semantic implications that that would have. There should be no restrictions on the order in which the program fragments resulting from this decomposition are presented, so that this order can be chosen so as to obtain an optimal exposition; this may even involve bringing together fragments whose location in the actual program is quite unrelated, but which have some logical connection.
Obviously there should be a clear indication of where pieces of program have been suppressed, and which other program fragments give the detailed specifications of those pieces. From the programming language point of view the most obvious method of identification would be to use identifiers, resulting in a simple system of parameter-less macros, with as only unusual aspect that uses of the macro are allowed to precede the definition, and indeed do so more often than not. Actually, literate programming uses a method that differs from this only trivially from a formal standpoint, but has a great advantage in practical terms: identification is by means of a more or less elaborate phrase or sentence, marked in a special way to indicate that it is a reference to a program fragment. This description both stands for the fragment that is being specified elsewhere, and also serves as a comment describing the function of that fragment at a level of detail that is appropriate for understanding the part of the program containing it. In this way several purposes are served at once: a clear identification between use and definition is established, the code at the place of use is readable because irrelevant detail is suppressed, with a relevant description of what is being done replacing it, and at the place of definition a reminder is given of the task that the piece of code presented is to perform. The documenting power of such a simple device is remarkable. In some cases the result is so clear that there is hardly any need to supply further documentation; also it can sometimes be useful to use this method to replace small pieces of somewhat cryptic code by a description that is actually longer than the code itself.
If his attention to the minutiae of programming has earned the annoyance of a younger generation of programmers, though, Knuth remains the minence grise of algorithm analysis, and one of the leading thinkers on programming in general.
Of course, other computer scientists have made contributions to the field that are every bit as substantial (most notably Edsger Dijkstra, Charles Hoare and Niklaus Wirth). But Knuth's work brings to life the complex mathematical underpinnings of the discipline, and deals with the logistics of programming on all levels, from the conceptual design of solutions to the most intimate details of the machine. The fundamental elements of any computer program are, perhaps not surprisingly, time and space. (In programming terms, time describes the speed with which a program accomplishes its task, while space refers to the amount of memory a program requires both to store itself -- i.e. the length of the code -- and to compute and store its results.) But Knuth is concerned not only with bytes and microseconds, but with a concept that has come to be known in coding circles as "elegance," and that applies to programming at any level.
Elegance takes in such factors as readability, modular coding techniques and the ease with which a program can be adapted to other functions or expanded to perform additional tasks. (Knuth's broader ideas about documentation and structured programming are laid out in his 1992 book, "Literate Programming.") Though rarely mentioned, "sloppy coding" often costs companies a great deal in terms of time and money; programmers brought in to update the code of consultants gone by must spend hours or days deciphering a poorly documented program, or hunting down bugs that might have been caught easily had the initial programmer simply been a bit more conscientious in the practice of his craft.
Besides demonstrating the techniques of clear, efficient coding, Knuth has sought to bring a deeper sense of aesthetics to the discipline. "You try to consider that the program is an essay, a work of literature," he says. "I'm hoping someday that the Pulitzer Prize committee will agree." Prizes would be handed out for "best-written program," he says, only half-joking. Knuth himself has already collected numerous awards, including the National Medal of Science from then-President Jimmy Carter and Japan's prestigious Kyoto Prize.
I was talking with Tony Hoare, who was editor of a series of books for Oxford University Press. I had a discussion with him in approximately 1980; I'm trying to remember the exact time, maybe 1979, yes, 1979, perhaps when I visited Newcastle? I don't recall exactly the date now. He said to me that I should publish my program for TeX. [I looked up the record when I returned home and found that my memory was gravely flawed. Hoare had heard rumors about my work and he wrote to Stanford suggesting that I keep publication in mind. I replied to his letter on 16 November 1977-much earlier than I remembered.]
As I was writing TeX I was using for the second time in my life ideas called "structured programming", which were revolutionizing the way computer programming was done in the middle 70s. I was teaching classes and I was aware that people were using structured programming, but I hadn't written a large computer program since 1971. In 1976 I wrote my first structured program; it was fairly good sized-maybe, I don't know, 50,000 lines of code, something like that. (That's another story I can tell you about sometime.) This gave me some experience with writing a program that was fairly easy to read. Then when I started writing TeX in this period (I began the implementation of TeX in October of 1977, and I finished it in May 78), it was consciously done with structured programming ideas.
Professor Hoare was looking for examples of fairly good-sized programs that people could read. Well, this was frightening. This was a very scary thing, for a professor of computer science to show someone a large program. At best, a professor might publish very small routines as examples of how to write a program. And we could polish those until ... well, every example in the literature about such programs had bugs in it. Tony Hoare was a great pioneer for proving the correctness of programs. But if you looked at the details ... I discovered from reading some of the articles, you know, I could find three bugs in a program that was proved correct. [laughter] These were small programs. Now, he says, take my large program and reveal it to the world, with all its compromises. Of course, I developed TeX so that it would try to continue a history of hundreds of years of different ideas. There had to be compromises. So I was frightened with the idea that I would actually be expected to show someone my program. But then I also realized how much need there was for examples of good-sized programs, that could be considered as reasonable models, not just small programs.
I had learned from a Belgian man (I had met him a few years earlier, someone from Liege), and he had a system-it's explained in my paper on literate programming. He sent me a report, which was 150 pages long, about his system-it was inspired by "The Ghost in the Machine". His 150-page report was very philosophical for the first 99 pages, and on page 100 he started with an example. That example was the key to me for this idea of thinking of a program as hypertext, as we would now say it. He proposed a way of taking a complicated program and breaking it into small parts. Then, to understand the complicated whole, what you needed is just to understand the small parts, and to understand the relationship between those parts and their neighbors. [Pierre Arnoul de Marneffe, Holon Programming. Univ. de Liege, Service d'Informatique (December, 1973). ]
In February of 1979, I developed a system called DOC and UNDOC ... something like the WEB system that came later. DOC was like WEAVE and UNDOC was like TANGLE, essentially. I played with DOC and UNDOC and did a mock-up with a small part of TeX. I didn't use DOC for my own implementation but I took the inner part called getchar, which is a fairly complicated part of TeX's input routine, and I converted it to DOC. This gave me a little 20-page program that would show the getchar part of TeX written in DOC. And I showed that to Tony Hoare and to several other people, especially Luis Trabb Pardo, and got some feedback from them on the ideas and the format.
Then we had a student at Stanford whose name was Zabala-actually he's from Spain and he has two names-but we call him Inaki; Ignacio is his name. He took the entire TeX that I'd written in a language called SAIL (Stanford Artificial Intelligence Language), and he converted it to Pascal in this DOC format. TeX-in-Pascal was distributed around the world by 1981, I think. Then in 1982 or 1981, when I was writing TeX82, I was able to use his experience and all the feedback he had from users, and I made the system that became WEB. There was a period of two weeks when we were trying different names for DOC and UNDOC, and the winners were TANGLE and WEAVE. At that time, we had about 25 people in our group that would meet every Friday. And we would play around with a whole bunch of ideas and this was the reason for most of the success of TeX and METAFONT.
3-1 Open subroutines. The simplest form of subroutine consists of a sequence of orders which can be incorporated as it stands into a program. When the last order of the subroutine has been executed the machine proceeds to execute the order in the program that immediately follows. This type of subroutine is called an "open" subroutine.
3-2 Closed subroutines. A "closed" subroutine is one which is called into use by a special group of orders incorporated in the master routine or main program. It is designed so that when its task is finished it returns control to the master routine at a point immediately following that from which it was called in. The subroutine itself may be placed anywhere in the store.
The "Holon" concept has been introduced in biological and behavior sciences by Koestler. This concept proceeds from the work of Simon. It is used for instance to analyze complex living organisms or complex social systems. This neologism is from Greek "holos", i.e., whole, and the suffix "-on" meaning "part". A holon is a "part of a whole". The reader is forewarned to not mix up the holon concept with the "module" one.
"Hierarchy": Each holon is composed by other holons which are "refinements" of the former holon. These holons are submitted to some rigid rules; they perform the "detail" operations which, put together, compose the function of the former holon.
"Tendency to Integration": The holon integrates with other holons in the hierarchy according to a flexible strategy. This integration must be understood as a will to close cooperation with the other holons for the emergence of a "tougher" and more efficient component.
Many programming environments are completely controlled by specific vendors, who may well choose to switch from flat text to rich markup for their own reasons. If Microsoft had made source files XML, tens of thousands of programmers would already be putting pictures and hyperlinks in their code. Programming on the universal canvas is one revolution that can't possibly arrive too soon.
Read your first page: YOU GOT IT TOTALLY WRONG. Literate programming is NOT about documentation in the first place. All quotes you tore out speak of literate programming as if it's just a documentation system. While it is not.
Literate programming is a PROGRAMMING PARADIGM, or if you wish a "META-LANGUAGE", on top of machine-coding language, which was created with the purpose of: a) allowing humans to create abstractions over abstractions over abstractions with macros (which are phrases in a human language and if you wish are precise "new operators" in that meta-language, created on the fly). b) this system of macros can be created not in machine demanded order, but as need for logical thinking. Later it is reshuffled ("tangled", i.e. convoluted, scrambled) from the natural into the inhuman machine codes.
You totally missed the idea, and in the case of blind leading the blind quote scores of other misreaders. Literate programming is not a documentation system per ce, it's a programming paradigm.
| Counters (since June 2000) |
| www.literateprogramming.com | 333641 |
| CWEB User Manual (cweb.pdf) | 20995 |
| CWEB Win32 Port (cweb.exe) | 8013 |
| CWEB Source Code (cweb.tar.gz) | 5020 |
Advertisement
Advertisement
Advertisement
BREAKING NEWS
3 September 2010
The vice-chancellor of the University of Wolverhampton is to retire next summer as she feels it is “time to do something else” after 40 years of full-time work.

2 September 2010
Many universities set to lose income overall if cap is lifted, researcher warns. Simon Baker reports

2 September 2010

2 September 2010

2 September 2010

2 September 2010
COVER STORY

2 September 2010
As graduates struggle to find employment, universities are having to think more creatively about how to prepare them for the workplace, says Rebecca Attwood

2 September 2010
Employability is about more than skills: it is about cultivating the independence, imagination and rigour to take on any task
READERS' REACTIONS
THE
Have your say on graduate preparation for the workplace, our upcoming World University Rankings release and the potential impact of uncapped tuition fees
ONLINE COLUMNISTS

2 September 2010
Your chance to advise on academic dilemmas. Each week, Dr Margot Feelbetter poses a dilemma and offers advice for readers to respond to online. This week: Let the new era of austerity commence?

26 August 2010
Each week, Dr Margot Feelbetter poses a dilemma and offers advice for readers to respond to online. This week: More smoke than fire?
25 August 2010

19 August 2010
18 August 2010
17 August 2010
PEOPLE

2 September 2010
A leading figure in the planning and funding of the Irish university sector has died.
RESEARCH

2 September 2010
Royal Astronomical Society's new chief calls for farsighted and bold research funding. Paul Jump reports

2 September 2010
2 September 2010

26 August 2010
BOOKS

2 September 2010
Alex Danchev takes a thrilling ride that immerses the reader in the work of Caravaggio but bypasses his infamous personal life

2 September 2010
When people joke about the meaning of life, it is a sure sign they are fretful. Is life driven by point and purpose, or is it a chaotic, rudderless and aimless flux? Was Shakespeare's ruminating Macbeth right - is life "a tale/Told by an...

2 September 2010

2 September 2010

2 September 2010

2 September 2010

2 September 2010

2 September 2010

2 September 2010

2 September 2010
OPINIONS AND LEADERS

2 September 2010
If Lord Browne uncaps fees, the Golden Age of the English university may well come to an unseemly end, writes Paul Benneworth
NEW WORLD UNIVERSITY RANKINGS FOR 2010
THE
Since their first appearance in 2004, Times Higher Education’s global university league tables have been recognised as the most authoritative source of broad comparative performance information on universities across the world. As nations...
THE
Times Higher Education has ended its arrangement with its former data provider, QS. From this year, Thomson Reuters, the world’s leading research-data specialist, will provide all the data and analysis for the annual Times Higher Education...
THE CONFERENCES
LAURIE TAYLOR COLUMN

2 September 2010
Advertisement
The table below shows the 104 elements currently in the HTML5 working draft and two proposed elements (marked with an asterisk).
|
html
|
col
|
table
| |||||||||||||||
<head>First element of the HTML document. Contains document metadata. head
|
span
|
fieldset
|
form
|
body
|
h1
|
<section>Contains of elements grouped by theme, for example a chapter or tab box. section
|
colgroup
|
tr
| |||||||||
|
title
|
a
|
meter
|
select
|
<aside>Content related to surrounding elements that doesn't belong inline, such as a advertising or quotes. aside
|
h2
|
<header>Navigation or introductory elements for the current section. header
|
caption
|
td
| |||||||||
<meta>Document metadata that can't be represented with other elements. meta
|
rt
|
dfn
|
em
|
<i>Text in a alternate voice or mood, such as a technical term. i
|
small
|
ins
|
hr
|
p
|
div
|
blockquote
|
legend
|
optgroup
|
address
|
h3
|
nav
|
menu
|
th
|
|
base
|
<rp>Contains semantically meaningless markup for browsers that don't understand ruby annotations. rp
|
abbr
|
time
|
<b>Stylistically separated text of equal importance, such as a product name. b
|
strong
|
del
|
br
|
figcaption
|
ol
|
dl
|
label
|
option
|
datalist
|
h4
|
<article>Section of the page content, such as a blog or forum post. article
|
<command>Command the user can perform, such as publishing an article. command
|
tbody
|
|
link
|
<noscript>Contains elements that are part of the document only if scripting is disabled. noscript
|
q
|
var
|
sub
|
mark
|
kbd
|
<wbr>Opportunity for a line break. wbr
|
<figure>Contains elements related to single concept, such as an illustration or code example. figure
|
ul
|
dt
|
input
|
output
|
keygen
|
h5
|
footer
|
summary
|
thead
|
|
style
|
script
|
cite
|
samp
|
sup
|
<ruby>Contains text with annotations, such as pronounciation hints. Commonly used in East Asian text. ruby
|
bdo
|
code
|
pre
|
li
|
dd
|
textarea
|
button
|
progress
|
h6
|
<hgroup>Collection of headings for the current section. The highest ranked heading repesents the group in the document outline. hgroup
|
<details>Contains additional information, such as the contents of an accordian view. details
|
tfoot
|
Professor Eric Faden of Bucknell University created this humorous, yet informative, review of copyright principles delivered through the words of the very folks we can thank for nearly endless copyright terms.
View (streaming) or download (mp4) the whole film or watch it on YouTube.
This work is licensed under a
Creative Commons Attribution-Noncommercial-Share Alike 3.0 License
Distributed on DVD by The Media Education Foundation.
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.375em | 37.5% | 5pt |
| 7px | 0.438em | 43.8% | 5pt |
| 8px | 0.5em | 50% | 6pt |
| 9px | 0.563em | 56.3% | 7pt |
| 10px | 0.625em | 62.5% | 8pt |
| 11px | 0.688em | 68.8% | 8pt |
| 12px | 0.75em | 75% | 9pt |
| 13px | 0.813em | 81.3% | 10pt |
| 14px | 0.875em | 87.5% | 11pt |
| 15px | 0.938em | 93.8% | 11pt |
| 16px | 1em | 100% | 12pt |
| 17px | 1.063em | 106.3% | 13pt |
| 18px | 1.125em | 112.5% | 14pt |
| 19px | 1.188em | 118.8% | 14pt |
| 20px | 1.25em | 125% | 15pt |
| 21px | 1.313em | 131.3% | 16pt |
| 22px | 1.375em | 137.5% | 17pt |
| 23px | 1.438em | 143.8% | 17pt |
| 24px | 1.5em | 150% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 1em | 100% | 5pt |
| 7px | 1.167em | 116.7% | 5pt |
| 8px | 1.333em | 133.3% | 6pt |
| 9px | 1.5em | 150% | 7pt |
| 10px | 1.667em | 166.7% | 8pt |
| 11px | 1.833em | 183.3% | 8pt |
| 12px | 2em | 200% | 9pt |
| 13px | 2.167em | 216.7% | 10pt |
| 14px | 2.333em | 233.3% | 11pt |
| 15px | 2.5em | 250% | 11pt |
| 16px | 2.667em | 266.7% | 12pt |
| 17px | 2.833em | 283.3% | 13pt |
| 18px | 3em | 300% | 14pt |
| 19px | 3.167em | 316.7% | 14pt |
| 20px | 3.333em | 333.3% | 15pt |
| 21px | 3.5em | 350% | 16pt |
| 22px | 3.667em | 366.7% | 17pt |
| 23px | 3.833em | 383.3% | 17pt |
| 24px | 4em | 400% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.857em | 85.7% | 5pt |
| 7px | 1em | 100% | 5pt |
| 8px | 1.143em | 114.3% | 6pt |
| 9px | 1.286em | 128.6% | 7pt |
| 10px | 1.429em | 142.9% | 8pt |
| 11px | 1.571em | 157.1% | 8pt |
| 12px | 1.714em | 171.4% | 9pt |
| 13px | 1.857em | 185.7% | 10pt |
| 14px | 2em | 200% | 11pt |
| 15px | 2.143em | 214.3% | 11pt |
| 16px | 2.286em | 228.6% | 12pt |
| 17px | 2.429em | 242.9% | 13pt |
| 18px | 2.571em | 257.1% | 14pt |
| 19px | 2.714em | 271.4% | 14pt |
| 20px | 2.857em | 285.7% | 15pt |
| 21px | 3em | 300% | 16pt |
| 22px | 3.143em | 314.3% | 17pt |
| 23px | 3.286em | 328.6% | 17pt |
| 24px | 3.429em | 342.9% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.75em | 75% | 5pt |
| 7px | 0.875em | 87.5% | 5pt |
| 8px | 1em | 100% | 6pt |
| 9px | 1.125em | 112.5% | 7pt |
| 10px | 1.25em | 125% | 8pt |
| 11px | 1.375em | 137.5% | 8pt |
| 12px | 1.5em | 150% | 9pt |
| 13px | 1.625em | 162.5% | 10pt |
| 14px | 1.75em | 175% | 11pt |
| 15px | 1.875em | 187.5% | 11pt |
| 16px | 2em | 200% | 12pt |
| 17px | 2.125em | 212.5% | 13pt |
| 18px | 2.25em | 225% | 14pt |
| 19px | 2.375em | 237.5% | 14pt |
| 20px | 2.5em | 250% | 15pt |
| 21px | 2.625em | 262.5% | 16pt |
| 22px | 2.75em | 275% | 17pt |
| 23px | 2.875em | 287.5% | 17pt |
| 24px | 3em | 300% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.667em | 66.7% | 5pt |
| 7px | 0.778em | 77.8% | 5pt |
| 8px | 0.889em | 88.9% | 6pt |
| 9px | 1em | 100% | 7pt |
| 10px | 1.111em | 111.1% | 8pt |
| 11px | 1.222em | 122.2% | 8pt |
| 12px | 1.333em | 133.3% | 9pt |
| 13px | 1.444em | 144.4% | 10pt |
| 14px | 1.556em | 155.6% | 11pt |
| 15px | 1.667em | 166.7% | 11pt |
| 16px | 1.778em | 177.8% | 12pt |
| 17px | 1.889em | 188.9% | 13pt |
| 18px | 2em | 200% | 14pt |
| 19px | 2.111em | 211.1% | 14pt |
| 20px | 2.222em | 222.2% | 15pt |
| 21px | 2.333em | 233.3% | 16pt |
| 22px | 2.444em | 244.4% | 17pt |
| 23px | 2.556em | 255.6% | 17pt |
| 24px | 2.667em | 266.7% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.6em | 60% | 5pt |
| 7px | 0.7em | 70% | 5pt |
| 8px | 0.8em | 80% | 6pt |
| 9px | 0.9em | 90% | 7pt |
| 10px | 1em | 100% | 8pt |
| 11px | 1.1em | 110% | 8pt |
| 12px | 1.2em | 120% | 9pt |
| 13px | 1.3em | 130% | 10pt |
| 14px | 1.4em | 140% | 11pt |
| 15px | 1.5em | 150% | 11pt |
| 16px | 1.6em | 160% | 12pt |
| 17px | 1.7em | 170% | 13pt |
| 18px | 1.8em | 180% | 14pt |
| 19px | 1.9em | 190% | 14pt |
| 20px | 2em | 200% | 15pt |
| 21px | 2.1em | 210% | 16pt |
| 22px | 2.2em | 220% | 17pt |
| 23px | 2.3em | 230% | 17pt |
| 24px | 2.4em | 240% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.545em | 54.5% | 5pt |
| 7px | 0.636em | 63.6% | 5pt |
| 8px | 0.727em | 72.7% | 6pt |
| 9px | 0.818em | 81.8% | 7pt |
| 10px | 0.909em | 90.9% | 8pt |
| 11px | 1em | 100% | 8pt |
| 12px | 1.091em | 109.1% | 9pt |
| 13px | 1.182em | 118.2% | 10pt |
| 14px | 1.273em | 127.3% | 11pt |
| 15px | 1.364em | 136.4% | 11pt |
| 16px | 1.455em | 145.5% | 12pt |
| 17px | 1.545em | 154.5% | 13pt |
| 18px | 1.636em | 163.6% | 14pt |
| 19px | 1.727em | 172.7% | 14pt |
| 20px | 1.818em | 181.8% | 15pt |
| 21px | 1.909em | 190.9% | 16pt |
| 22px | 2em | 200% | 17pt |
| 23px | 2.091em | 209.1% | 17pt |
| 24px | 2.182em | 218.2% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.5em | 50% | 5pt |
| 7px | 0.583em | 58.3% | 5pt |
| 8px | 0.667em | 66.7% | 6pt |
| 9px | 0.75em | 75% | 7pt |
| 10px | 0.833em | 83.3% | 8pt |
| 11px | 0.917em | 91.7% | 8pt |
| 12px | 1em | 100% | 9pt |
| 13px | 1.083em | 108.3% | 10pt |
| 14px | 1.167em | 116.7% | 11pt |
| 15px | 1.25em | 125% | 11pt |
| 16px | 1.333em | 133.3% | 12pt |
| 17px | 1.417em | 141.7% | 13pt |
| 18px | 1.5em | 150% | 14pt |
| 19px | 1.583em | 158.3% | 14pt |
| 20px | 1.667em | 166.7% | 15pt |
| 21px | 1.75em | 175% | 16pt |
| 22px | 1.833em | 183.3% | 17pt |
| 23px | 1.917em | 191.7% | 17pt |
| 24px | 2em | 200% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.462em | 46.2% | 5pt |
| 7px | 0.538em | 53.8% | 5pt |
| 8px | 0.615em | 61.5% | 6pt |
| 9px | 0.692em | 69.2% | 7pt |
| 10px | 0.769em | 76.9% | 8pt |
| 11px | 0.846em | 84.6% | 8pt |
| 12px | 0.923em | 92.3% | 9pt |
| 13px | 1em | 100% | 10pt |
| 14px | 1.077em | 107.7% | 11pt |
| 15px | 1.154em | 115.4% | 11pt |
| 16px | 1.231em | 123.1% | 12pt |
| 17px | 1.308em | 130.8% | 13pt |
| 18px | 1.385em | 138.5% | 14pt |
| 19px | 1.462em | 146.2% | 14pt |
| 20px | 1.538em | 153.8% | 15pt |
| 21px | 1.615em | 161.5% | 16pt |
| 22px | 1.692em | 169.2% | 17pt |
| 23px | 1.769em | 176.9% | 17pt |
| 24px | 1.846em | 184.6% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.429em | 42.9% | 5pt |
| 7px | 0.5em | 50% | 5pt |
| 8px | 0.571em | 57.1% | 6pt |
| 9px | 0.643em | 64.3% | 7pt |
| 10px | 0.714em | 71.4% | 8pt |
| 11px | 0.786em | 78.6% | 8pt |
| 12px | 0.857em | 85.7% | 9pt |
| 13px | 0.929em | 92.9% | 10pt |
| 14px | 1em | 100% | 11pt |
| 15px | 1.071em | 107.1% | 11pt |
| 16px | 1.143em | 114.3% | 12pt |
| 17px | 1.214em | 121.4% | 13pt |
| 18px | 1.286em | 128.6% | 14pt |
| 19px | 1.357em | 135.7% | 14pt |
| 20px | 1.429em | 142.9% | 15pt |
| 21px | 1.5em | 150% | 16pt |
| 22px | 1.571em | 157.1% | 17pt |
| 23px | 1.643em | 164.3% | 17pt |
| 24px | 1.714em | 171.4% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.4em | 40% | 5pt |
| 7px | 0.467em | 46.7% | 5pt |
| 8px | 0.533em | 53.3% | 6pt |
| 9px | 0.6em | 60% | 7pt |
| 10px | 0.667em | 66.7% | 8pt |
| 11px | 0.733em | 73.3% | 8pt |
| 12px | 0.8em | 80% | 9pt |
| 13px | 0.867em | 86.7% | 10pt |
| 14px | 0.933em | 93.3% | 11pt |
| 15px | 1em | 100% | 11pt |
| 16px | 1.067em | 106.7% | 12pt |
| 17px | 1.133em | 113.3% | 13pt |
| 18px | 1.2em | 120% | 14pt |
| 19px | 1.267em | 126.7% | 14pt |
| 20px | 1.333em | 133.3% | 15pt |
| 21px | 1.4em | 140% | 16pt |
| 22px | 1.467em | 146.7% | 17pt |
| 23px | 1.533em | 153.3% | 17pt |
| 24px | 1.6em | 160% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.375em | 37.5% | 5pt |
| 7px | 0.438em | 43.8% | 5pt |
| 8px | 0.5em | 50% | 6pt |
| 9px | 0.563em | 56.3% | 7pt |
| 10px | 0.625em | 62.5% | 8pt |
| 11px | 0.688em | 68.8% | 8pt |
| 12px | 0.75em | 75% | 9pt |
| 13px | 0.813em | 81.3% | 10pt |
| 14px | 0.875em | 87.5% | 11pt |
| 15px | 0.938em | 93.8% | 11pt |
| 16px | 1em | 100% | 12pt |
| 17px | 1.063em | 106.3% | 13pt |
| 18px | 1.125em | 112.5% | 14pt |
| 19px | 1.188em | 118.8% | 14pt |
| 20px | 1.25em | 125% | 15pt |
| 21px | 1.313em | 131.3% | 16pt |
| 22px | 1.375em | 137.5% | 17pt |
| 23px | 1.438em | 143.8% | 17pt |
| 24px | 1.5em | 150% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.353em | 35.3% | 5pt |
| 7px | 0.412em | 41.2% | 5pt |
| 8px | 0.471em | 47.1% | 6pt |
| 9px | 0.529em | 52.9% | 7pt |
| 10px | 0.588em | 58.8% | 8pt |
| 11px | 0.647em | 64.7% | 8pt |
| 12px | 0.706em | 70.6% | 9pt |
| 13px | 0.765em | 76.5% | 10pt |
| 14px | 0.824em | 82.4% | 11pt |
| 15px | 0.882em | 88.2% | 11pt |
| 16px | 0.941em | 94.1% | 12pt |
| 17px | 1em | 100% | 13pt |
| 18px | 1.059em | 105.9% | 14pt |
| 19px | 1.118em | 111.8% | 14pt |
| 20px | 1.176em | 117.6% | 15pt |
| 21px | 1.235em | 123.5% | 16pt |
| 22px | 1.294em | 129.4% | 17pt |
| 23px | 1.353em | 135.3% | 17pt |
| 24px | 1.412em | 141.2% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.333em | 33.3% | 5pt |
| 7px | 0.389em | 38.9% | 5pt |
| 8px | 0.444em | 44.4% | 6pt |
| 9px | 0.5em | 50% | 7pt |
| 10px | 0.556em | 55.6% | 8pt |
| 11px | 0.611em | 61.1% | 8pt |
| 12px | 0.667em | 66.7% | 9pt |
| 13px | 0.722em | 72.2% | 10pt |
| 14px | 0.778em | 77.8% | 11pt |
| 15px | 0.833em | 83.3% | 11pt |
| 16px | 0.889em | 88.9% | 12pt |
| 17px | 0.944em | 94.4% | 13pt |
| 18px | 1em | 100% | 14pt |
| 19px | 1.056em | 105.6% | 14pt |
| 20px | 1.111em | 111.1% | 15pt |
| 21px | 1.167em | 116.7% | 16pt |
| 22px | 1.222em | 122.2% | 17pt |
| 23px | 1.278em | 127.8% | 17pt |
| 24px | 1.333em | 133.3% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.316em | 31.6% | 5pt |
| 7px | 0.368em | 36.8% | 5pt |
| 8px | 0.421em | 42.1% | 6pt |
| 9px | 0.474em | 47.4% | 7pt |
| 10px | 0.526em | 52.6% | 8pt |
| 11px | 0.579em | 57.9% | 8pt |
| 12px | 0.632em | 63.2% | 9pt |
| 13px | 0.684em | 68.4% | 10pt |
| 14px | 0.737em | 73.7% | 11pt |
| 15px | 0.789em | 78.9% | 11pt |
| 16px | 0.842em | 84.2% | 12pt |
| 17px | 0.895em | 89.5% | 13pt |
| 18px | 0.947em | 94.7% | 14pt |
| 19px | 1em | 100% | 14pt |
| 20px | 1.053em | 105.3% | 15pt |
| 21px | 1.105em | 110.5% | 16pt |
| 22px | 1.158em | 115.8% | 17pt |
| 23px | 1.211em | 121.1% | 17pt |
| 24px | 1.263em | 126.3% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.3em | 30% | 5pt |
| 7px | 0.35em | 35% | 5pt |
| 8px | 0.4em | 40% | 6pt |
| 9px | 0.45em | 45% | 7pt |
| 10px | 0.5em | 50% | 8pt |
| 11px | 0.55em | 55% | 8pt |
| 12px | 0.6em | 60% | 9pt |
| 13px | 0.65em | 65% | 10pt |
| 14px | 0.7em | 70% | 11pt |
| 15px | 0.75em | 75% | 11pt |
| 16px | 0.8em | 80% | 12pt |
| 17px | 0.85em | 85% | 13pt |
| 18px | 0.9em | 90% | 14pt |
| 19px | 0.95em | 95% | 14pt |
| 20px | 1em | 100% | 15pt |
| 21px | 1.05em | 105% | 16pt |
| 22px | 1.1em | 110% | 17pt |
| 23px | 1.15em | 115% | 17pt |
| 24px | 1.2em | 120% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.286em | 28.6% | 5pt |
| 7px | 0.333em | 33.3% | 5pt |
| 8px | 0.381em | 38.1% | 6pt |
| 9px | 0.429em | 42.9% | 7pt |
| 10px | 0.476em | 47.6% | 8pt |
| 11px | 0.524em | 52.4% | 8pt |
| 12px | 0.571em | 57.1% | 9pt |
| 13px | 0.619em | 61.9% | 10pt |
| 14px | 0.667em | 66.7% | 11pt |
| 15px | 0.714em | 71.4% | 11pt |
| 16px | 0.762em | 76.2% | 12pt |
| 17px | 0.81em | 81% | 13pt |
| 18px | 0.857em | 85.7% | 14pt |
| 19px | 0.905em | 90.5% | 14pt |
| 20px | 0.952em | 95.2% | 15pt |
| 21px | 1em | 100% | 16pt |
| 22px | 1.048em | 104.8% | 17pt |
| 23px | 1.095em | 109.5% | 17pt |
| 24px | 1.143em | 114.3% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.273em | 27.3% | 5pt |
| 7px | 0.318em | 31.8% | 5pt |
| 8px | 0.364em | 36.4% | 6pt |
| 9px | 0.409em | 40.9% | 7pt |
| 10px | 0.455em | 45.5% | 8pt |
| 11px | 0.5em | 50% | 8pt |
| 12px | 0.545em | 54.5% | 9pt |
| 13px | 0.591em | 59.1% | 10pt |
| 14px | 0.636em | 63.6% | 11pt |
| 15px | 0.682em | 68.2% | 11pt |
| 16px | 0.727em | 72.7% | 12pt |
| 17px | 0.773em | 77.3% | 13pt |
| 18px | 0.818em | 81.8% | 14pt |
| 19px | 0.864em | 86.4% | 14pt |
| 20px | 0.909em | 90.9% | 15pt |
| 21px | 0.955em | 95.5% | 16pt |
| 22px | 1em | 100% | 17pt |
| 23px | 1.045em | 104.5% | 17pt |
| 24px | 1.091em | 109.1% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.261em | 26.1% | 5pt |
| 7px | 0.304em | 30.4% | 5pt |
| 8px | 0.348em | 34.8% | 6pt |
| 9px | 0.391em | 39.1% | 7pt |
| 10px | 0.435em | 43.5% | 8pt |
| 11px | 0.478em | 47.8% | 8pt |
| 12px | 0.522em | 52.2% | 9pt |
| 13px | 0.565em | 56.5% | 10pt |
| 14px | 0.609em | 60.9% | 11pt |
| 15px | 0.652em | 65.2% | 11pt |
| 16px | 0.696em | 69.6% | 12pt |
| 17px | 0.739em | 73.9% | 13pt |
| 18px | 0.783em | 78.3% | 14pt |
| 19px | 0.826em | 82.6% | 14pt |
| 20px | 0.87em | 87% | 15pt |
| 21px | 0.913em | 91.3% | 16pt |
| 22px | 0.957em | 95.7% | 17pt |
| 23px | 1em | 100% | 17pt |
| 24px | 1.043em | 104.3% | 18pt |
| Pixels | EMs | Percent | Points |
|---|---|---|---|
| 6px | 0.25em | 25% | 5pt |
| 7px | 0.292em | 29.2% | 5pt |
| 8px | 0.333em | 33.3% | 6pt |
| 9px | 0.375em | 37.5% | 7pt |
| 10px | 0.417em | 41.7% | 8pt |
| 11px | 0.458em | 45.8% | 8pt |
| 12px | 0.5em | 50% | 9pt |
| 13px | 0.542em | 54.2% | 10pt |
| 14px | 0.583em | 58.3% | 11pt |
| 15px | 0.625em | 62.5% | 11pt |
| 16px | 0.667em | 66.7% | 12pt |
| 17px | 0.708em | 70.8% | 13pt |
| 18px | 0.75em | 75% | 14pt |
| 19px | 0.792em | 79.2% | 14pt |
| 20px | 0.833em | 83.3% | 15pt |
| 21px | 0.875em | 87.5% | 16pt |
| 22px | 0.917em | 91.7% | 17pt |
| 23px | 0.958em | 95.8% | 17pt |
| 24px | 1em | 100% | 18pt |
Wikipedia puts it well: “An em is a unit of measurement in the field of typography, equal to the size of the current font.”
If your font-size is at 16 pixels, then 1em = 16px
For more information visit Wikipedia and W3Schools.
Pixels and points are static measurements. 1 pixel is always 1 pixel. 1 point is always 1 point. Points are a little different because they change size based on DPI. On paper, with its higher DPI, 12 point text is actually more pixels that 12 point text on a computer monitor, which has a lower DPI than paper.
Percent and EMs on the other hand are relative measurements. The size of EM or percent-based text depends on its parent. If body text is sized at 12 pixels, then text set at 120% or 1.2 EM inside the body will be 1.2 * 12, or 14.4 pixels.
Assuming you aren’t using PXtoEM.com to keep it simple, here’s the formulas PXtoEM.com uses.
Note:16px is used as the body text size in all conversions because that is the browser default on today’s browser. You will change 16px to your base text size.
Style sheets that use EMs are easier to maintain for the designer (especially with PXtoEM.com at your side) and more accessible to end-users.
Style sheets become easier to maintain because all text set in EMs scale to the body font-size. Only one element’s font-size needs to change instead of individually changing the font-size of each element.
Accessibility is increased for end-users because text is scaled based on their preferences rather than set statically in pixels. Additionally, end-users can use hot keys to scale the text in all browsers. Many people have difficulty reading small text on a computer screen.
For more information visit A List Apart, informIT, Jon Tan’s Blog, and this SharePoint Blog.
This site uses Blueprint CSS to generate your yummy CSS.
PXtoEM.com is px to em conversion made simple. Choose your body font size in pixels (px)and out comes a complete pixel (px) to em conversion table, making elastic web design with CSS a snap. The once daunting challenge of converting pixels (px) to the elusive em has now been reduced to a booger eating pipsqueak. Thanks, PXtoEM.com!
PXtoEM.com takes it a step further and gives CSS to start with! After you select your body font size, go to “Get CSS” and there you go!
PXtoEM.com was created by Brian Cray
14 |
Adult Content Notice |
| The content that you are about to view could contain adult concepts which may not be suitable for minors. To continue, you must confirm that you are at least 14 years of age. | |
Cloud Zoom is a jQuery image zoom plugin, a comparable alternative to products such as Magic Zoom. Compared to the popular jQZoom plugin, Cloud Zoom is smaller, has more features and more robust compatability across browsers.
Add a tint of any colour (including black or white) to the small image. The intensity of tint is fully customisable, shown here in red at 50%.
In this example, the movement smoothness is set to a higher value for a gentle drifting effect.
Zoom position can be inside the smaller image, useful if you would rather not obscure any other content.
Apply a subtle soft-focus effect to the small image.
In this example, the zoom window position is specified as a div target which can be positioned anywhere. The movement smoothness is set to a lower value for a snappier feel.
Useful website? You can donate to support it. Thanks.
Nick Thompson has kindly provided this Drupal module.
I use Host Gator for this site, and have found them to be good value and very reliable. Sign up now and use coupon code professorcloud to receive a $9.95 rebate.
The professional way to manage all your multimedia files.
Download Razuna for free. More than 30.000 downloads as of May 2010.
Have a look at our Support Plans - We help with any kind of deployment.
![]()
You wish that we take care of all the technical aspects of Razuna? Enjoy the benefits of a hosted digital asset management system.
Sep 2nd 2010

FIFTY years ago, in the glorious age of three-martini lunches and all-smoking offices, America’s car companies were universally admired. Everybody wanted to know the secrets of their success. How did they churn out dazzling new models every year? How did they manage so many people so successfully (General Motors was then the biggest private-sector employer in the world)? And how did they keep their customers so happy?
Today the world is equally in awe of American universities. They dominate global rankings: on the Shanghai Ranking Consultancy’s list of the world’s best universities, 17 of the top 20 are American, and 35 of the top 50. They employ 70% of living Nobel prizewinners in science and economics and produce a disproportionate share of the world’s most-cited articles in academic journals. Everyone wants to know their secret recipe.
Which raises a mischievous question. Could America’s universities go the way of its car companies? On the face of it, this seems highly unlikely. Student enrolments are higher than ever this year, as Americans who cannot find jobs linger or return to education. Cambridge, Massachusetts, shows no outward sign of becoming Detroit. Yet there are serious questions about America’s ivory towers.
Two right-wing think-tanks, the American Enterprise Institute (AEI) and the Goldwater Institute, have both produced damning reports about America’s university system. Two left-wing academics, Andrew Hacker and Claudia Dreifus, have published an even more damning book: “Higher Education? How Colleges are Wasting Our Money and Failing Our Kids and What We Can Do About It”. And US News & World Report, a centrist magazine, says in its annual survey of American colleges that: “If colleges were businesses, they would be ripe for hostile takeovers, complete with serious cost-cutting and painful reorganisations.”
College fees have for decades risen faster than Americans’ ability to pay them. Median household income has grown by a factor of 6.5 in the past 40 years, but the cost of attending a state college has increased by a factor of 15 for in-state students and 24 for out-of-state students. The cost of attending a private college has increased by a factor of more than 13 (a year in the Ivy League will set you back $38,000, excluding bed and board). Academic inflation makes medical inflation look modest by comparison.
As costs soar, diligence is tumbling. In 1961 full-time students in four-year colleges spent 24 hours a week studying; that has fallen to 14, estimates the AEI. Drop-out and deferment rates are also hair-curling: only 40% of students graduate in four years.
The most plausible explanation is that professors are not particularly interested in students’ welfare. Promotion and tenure depend on published research, not good teaching. Professors strike an implicit bargain with their students: we will give you light workloads and inflated grades so long as you leave us alone to do our research. Mr Hacker and Ms Dreifus point out that senior professors in Ivy League universities now get sabbaticals every third year rather than every seventh. This year 20 of Harvard’s 48 history professors will be on leave.
America’s commitment to research is one of the glories of its higher-education system. But for how long? The supply of papers that apply gender theory to literary criticism remains ample. But there is evidence of diminishing returns in an area perhaps more vital to the country’s economic dynamism: science and technology. The Kauffman Foundation, which studies entrepreneurship, argues that the productivity of federal funding for R&D, in terms of patents and licences, has been falling for some years. Funding is spread too thinly. It would yield better results if concentrated on centres of excellence, but fashionable chatter about the “knowledge economy” stirs every congressional backwoodsman to stick his fingers into the university pie.
The Goldwater Institute points to a third poison to add to rising prices and declining productivity: administrative bloat. Between 1993 and 2007 spending on university bureaucrats at America’s 198 leading universities rose much faster than spending on teaching faculty. Administration costs at elite private universities rose even faster than at public ones. For example, Harvard increased its administrative spending per student by 300%. In some universities, such as Arizona State University, almost half the full-time employees are administrators. Nearly all university presidents conduct themselves like corporate titans, with salaries, perks and entourages to match.
At least the Naval Academy is free
Given the size and competitiveness of America’s higher-education system, you might expect these problems to be self-correcting. Why don’t some universities compete by hiring teaching superstars? And why don’t others slash prices? The big problem is that high-status institutions such as universities tend to compete with each other on academic reputation (which is enhanced by star professors) and bling (luxurious dormitories and fancy sports stadiums) rather than value for money. This starts at the top: Yale would never dream of competing with Harvard on price. But it also extends to second-division universities: George Washington University has made itself fashionable by charging students more and spending lavishly on its facilities.
This luxury model is unlikely to survive what is turning into a prolonged economic downturn. Parents are much less willing to take on debt than they were and much more willing to look abroad for better deals. The internet also poses a growing threat to what Bill Gates calls “place-based colleges”. Online, you can listen to the world’s best lecturers for next to nothing.
America’s universities lost their way badly in the era of easy money. If they do not find it again, they may go the way of GM.
Business
Advertisement
Over the past five days
Over the past seven days
Advertisement
Subscribe to The Economist's free e-mail newsletters and alerts.
Subscribe to The Economist's latest article postings on Twitter
See a selection of The Economist's articles, events, topical videos and debates on Facebook.
Advertisement
everytime I click on the download link it just opens it in stream view, it does not download. I want to use it in a classroom setting but I can't if I can't get it onto my computer.
Superb piece of work.
Couldnt get the stream to work with my player but the MP4 download worked a treat. Nice project Eric very well thought out and excellent use of the different films :)
This is absolutely brilliant! I just embedded the youtube clip at http://blog.ninapaley.com/2008/09/01/a-fairy-use-tale/
As an animator, I am particularly thrilled by it. Bravo!
As a 'vidder' who creates "Transformative Artwork" from pieces of popular culture, I advocate the broadest possible definition of "Fair Use" as a necessary protection for freedom of expression.
Is a transcript available of the spoken text?
I would also like to know if it is available?
Mike
pit bike and bikes
I've used this video in classes in the past, but something keeps bugging me. Isn't one of the basic limitations of educational fair use a requirement not to distribute the work on an open network (like YouTube or the internet if it's not part of a restricted environment)? Fair use allows portions of copyright protected works to be used under certain circumstances, but I didn't think posting to YouTube was one of those circumstances. Aren't I correct that educational fair use would allow, for example, a teacher or student to use a copyright-protected image or video clip in a PowerPoint show played in class, but it would prohibit them from displaying the same work on a web page that was published for anyone to view on the WWW?
As a university administrator and Disney fanatic, I found this to be simply incredible! You can bet I will be using it with my honors students. THANK YOU for this work!
I liked the film. I think copyrights should only last until the death of the author unless the work is somehow willed to someone. Say your Dad is an author and dies partly through the completion of his second book in a series. I think you as family should have the option of releasing that copyright or keeping it.