The Way of the great learning involves manifesting virtue, renovating the people, and abiding by the highest good.

2009年2月28日星期六

Google Summer of Code 2009

Knuth 教圣经

在听说 Donald E. KNUTH (中文名字叫高德纳) 的 The Art of Computer Programming 以前, 我曾悲观地怀疑朗道 (Лев Давидович Ландау) 或许是我们这个时代最后一个百科全书式的学者(如果能这么说的话).

高德纳的《计算机程序设计艺术》計劃出版七卷,该书自第三卷于二十世纪七十年代初版以来,一直沒有下一卷的進展。因此他自1990年起就停止使用电子邮件(高德納自1975年就開始使用電子郵件[3])以专心撰写余下的四卷。最新消息是,第四卷將至少出成4A、4B、4C三本,目前已有部分草稿釋出。

在计算机科學以外,高德纳亦著有關於聖經的書藉 3:16 Bible Texts Illuminated (1991), ISBN 0895792524 。被視為计算机科學家少有的作品。

Source: Wikipedia.

这就是 Knuth 的那本 3:16 Bible Texts Illuminated:

是 Knuth 业余在查经小组教学的成果. 要在几个月的时间里, 学习一本圣经自然不是什么容易的事情, 要系统地研读每一卷恐怕时间上并不允许, 而如果只是摘寻章句, 又如何统其大义? 作为一个数学家, Knuth 把整本圣经当作母体, 采取分层抽样(stratified sampling)的方法, 把每一卷的第3章16节作为样本. 第一次看到这本书的时候我以为题目里少了个“John”, 其原因就是约翰福音 3:16 太有名了, Knuth 写道:

My proposal was to study Chapter 3, verse 16 of every book in the Bible. Of course, I have to admit that this suggestion loaded the dice a bit, since John 3:16 is perhaps the most famous verse of all. You might say that my choice of verse 3:16 revealed a certain lack of faith, since I enriched the sample by making it better than truly random selection. Perhaps I was secretly afraid that the whole Bible class would turn out to be a dud, so I needed to make sure that I could at least get the Gospel message across. On the other hand, my choice of 3:16 affected only one data point; the 3:16 rule didn’t cause any significant bias at all, except with respect to the study of John’s gospel. And the fame of John 3:16 is actually a plus, because it makes the selection rule easy to remember.

. . .

Chapter-and-verse designations weren’t part of the Bible until long after the words were written, and no theological significance was attached to the numbers when they were assigned. Therefore verse 3:16 has no special reason (except, of course, in the gospel of John). That is exactly what we want, for stratified sampling. . . . (Foreword)

在旧约 39 卷, 新约 27 卷中, 一共有 59 节 3:16, 所以掐头去尾, 全书一共由 59 个部分组成, 每部分四页, Knuth 先用一页的篇幅介绍书卷的背景, 紧接着是一页经文的书法, 然后就是两页经文的解说. 据他在前言里说, 这次树木森林兼顾的尝试在查经班取得了意想不到的成功.

本书由 Knuth 的 TeX 和 METAFONT 排版.

Update: 3:16 Bible Texts Illuminated 主页

The text found in chapter 3, verse 16, of most books in the Bible is a typical verse with no special distinction. But when Knuth examined what leading scholars throughout the centuries have written about those verses, he found that there is a fascinating story to be learned in every case, full of historical and spiritual insights. This book presents jargon-free introductions to each book of the Bible and in-depth analyses of what people from many different religious persuasions have said about the texts found in chapter 3, verse 16, together with 60 original illustrations by many of the world's leading calligraphers.

The result is a grand tour of the Bible -- from Genesis 3:16 to Revelation 3:16 -- a treat for the mind, the eyes, and the spirit. 

2009年2月27日星期五

Super Mario Kart: Most Influential Video Game in History


Super Mario Kart has the longest legacy and the biggest impact on video games in history, according to Guinness World Records which compiled a list of the top 50 consoles games of all time.

Tasked with selecting the best console games of all time, contributors of this year's Gamer's Edition reviewed hundreds of releases to compile a list of the top 50 titles ranked on their initial impact and lasting legacy.

Tetris ranks in at number two, according to the list, and the original Grand Theft Auto is in the number three spot. Where does Super Mario Bros. turn up? Way down at number 17, beneath Grand Theft Auto: San Andreas.

Guinness World Records Editor-in-Chief, Craig Glenday, said of the selection process: "We knew this would be a complex task so we invited a crack team of industry experts to form a judging panel - and the result is a "top 50" list of games ranked both on their importance and on how fun they are to play."

I would love to know who was on their team, because their picks are just friggin insane.

The team said they picked Super Mario Kart for the top spot because it is the best-selling racer on the SNES, the GameCube and the DS. Tetris, a good choice for number two, was selected because it is available on at least 50 different gaming platforms. And Grand Theft Auto holds the record for the most controversial series of games.

The full list, shown here, appear in the newly-released Guinness World Records 2009 Gamer's Edition.

Look over that list and then tell us what your top ten picks would have been. Keep in mind this is being judged on a game's initial impact and lasting legacy, not necessarily how fun they were.

1. Super Mario Kart
2. Tetris
3. Grand Theft Auto
4. Super Mario World
5. Zelda Ocarina of Time
6. Halo
7. Resident Evil IV
8. Final Fantasy XII
9. Street Fighter II
10. GoldenEye
11. Super Mario 64
12. Tomb Raider
13. Metal Gear Solid
14. Call of Duty 4
15. Sonic the Hedgehog 2
16. GTA San Andreas
17. Super Mario Bros
18. Zelda: A Link to the Past
19. Gran Turismo
20. Final Fantasy VII
21. Pro Evolution Soccer 4
22. The Orange Box
23. Lego Star Wars Complete Saga
24. Tekken 2
25. Wii Sports
26. Pokemon Red/Blue
27. Guitar Hero
28. Project Gotham Racing 4
29. Super Mario Galaxy
30. Resident Evil
31. Ico
32. Chrono Trigger
33. Gunstar Heroes
34. Soul Calibur
35. Advance Wars
36. Ridge Racer
37. Super Metroid
38. Castlevania: Symphony of the Night
39. GTA Vice City
40. BioShock
41. Star Wars: Knights of the Old Republic
42. The Legend of Zelda: Link's Awakening
43. God of War
44. Sega Rally Championship
45. Starfox 64
46. Elder Scrolls IV: Oblivion
47. WarioWare Inc
48. Saturn Bomberman
49. Crash Bandicoot
50. Outrun 2

Emacs as Your IDE

This is a no-frills listing towards using Emacs as a development environment. C-x means CTRL-x. M-x means ALT-x (or ESC and then x).

You can press the TAB key almost anywhere for autocompletion. Wherever you input text, use M-p and M-n to traverse up and down the history list.

C-u is the numeric-prefix operator. To go up by 10 lines, for example, one would say C-u 10 C-p.

Stuck!

  • Exit Emacs: C-x C-c
  • Cancel command: C-g

File Handling

  • Open a file: C-x C-f (Remote file: /user@host:path/to/file via ftp)
  • Change to a directory: C-x d
  • Save file: C-x C-s
  • Save as: C-x C-w
  • Close a file (kill buffer): C-x k
  • Reload file: C-x C-v
  • Change to another open file: C-x b
  • List all open files (buffers): C-x C-b
  • Maximise a window: C-x 1
  • Switch to the other window: C-x o

Editing

  • Start marking: C- (Use arrow keys to select region)
  • Cut: C-w
  • Copy: M-w
  • Paste: C-y (previous: M-y)
  • Undo: C-x u
  • Delete word: M-d
  • Complete word: M-/
  • Open a new line: C-o
  • Kill upto end of line: C-k (Is appended to clipboard)
  • Indent current line to GNU C standard:
  • Toggle read-only: C-x C-q
  • Paragraph-ise current region: M-q
  • Spell-check current word: M-$ (whole file: M-x ispell)

Search/Replace

  • Search forward: C-s (Press C-s to search again)
  • Search backward: C-r
  • Search and replace: M-%
  • List occurrences: M-x occur
  • Run grep: M-x grep
  • Reg-ex search: C-M-s

[XKCD pays tribute to Emacs]

Navigation

  • Beginning of file: M-<
  • End of file: M->
  • Beginning of line: C-a
  • End of line: C-e
  • Previous word: M-b
  • Next word: M-f
  • Previous matching bracket: C-M-b (if it doesn't work, try ESC followed by C-b)
  • Next matching bracket: C-M-f (or ESC C-f)
  • Outline mode: C-u 1 C-x $ (C-x $ to revert)
  • Go to line: M-g (or M-x goto-line)
     
    The arrow area is so far away!?
  • Previous line: C-p
  • Next line: C-n
  • Previous character: C-b
  • Next character: C-f
  • Page Up: M-v
  • Page Down: C-v

Vertical Copy

Sometimes you will need to copy a vertical patch of data, e.g. one column in a table. First press C- where you want to start copying. Then go to the end of the column and press C-x r k. To paste the column press C-x r y. (If you don't want to delete original column, just press C-_ there once to restore it and then press C-x r y at target.)

Registers

  • To save the current location in register a: C-x r a
  • To jump to the location in register a: C-x j a
  • To list saved registers: C-x r l

Symbol Lookup

Assuming CODEDIR to be the top-level source directory, first update your ~/.bashrc like so:
alias mktags='cd $CODEDIR && etags `find $CODEDIR -name "*.[h|c]"` && cd -' 

Then run:

source ~/.bashrc mktags 

When Emacs asks for the TAGS file, specify $CODEDIR/TAGS.

  • Go to function/variable definition: M-. (M-* to return)
  • Next definition of the tag: C-u M-. (e.g. same method in multiple classes)
  • Search for occurrences of symbols: M-x tags-search (M-, to search forward)
  • Find symbols as reg-exps: M-x find-tag-regexp
  • Autocomplete symbol: M-
Re-run mktags when the codebase has changed drastically.

Compilation and Debugging

  • Compile: M-x compile
  • Stop compilation: C-c C-k
  • Go to next error: C-x `
  • Go to source line giving the error: C-c C-c
  • Debug with GDB: M-x gdb
  • Insert breakpoint: C-x
  • Run a shell command: M-! (C-u M-! to insert output)
  • Open a shell: M-x shell
To change the default string for M-x compile, edit your ~/.emacs file:
(setq compile-command "gmake -f Makefile.gnu all") 

Comparing Two Files

  • Start a diff session: M-x ediff
  • Next match: n
  • Previous match: p
  • Copy from file A to B: a
  • Copy from file B to A: b
  • Save file X: wX
  • See diff output: D
  • Ignore whitespace differences: ##
  • Compare directories: M-x ediff-directories

Keyboard Macros

  • Begin recording: C-x (
  • End recording: C-x )
  • Execute macro: C-x e
Example: Add 'extern' before all function protoypes in a file.

Go to the first prototype, and say:

    C-x (     C-a     extern     C-n     C-x ) 
Then say C-u 50 C-x e to replace 50 prototypes.

Perforce CVS Integration

Get p4.el and then follow these steps.
$ emacs -batch -f batch-byte-compile p4.el 

Put the p4.el in some directory, say /home/foo/bar. Then edit your ~/.emacs as follows:

(setq load-path (cons "/home/foo/bar" load-path)) (load-library "p4") 

You should see a P4 menu in Emacs, and you can do CVS operations from within Emacs now.

Symbol Lookup with cscope

Download cscope program, and xcscope.el and cscope-indexer from an OSS repository. Save the xcscope.el onto some directory in Emacs' load-path. Edit your ~/.emacs as follows:
(require 'xcscope) 
To add a directory ~/foo to your load-path, use the following directive in .emacs file, making sure it appears before the "require xcscope" directive:
(setq load-path (cons "~/foo" load-path)) 

Place cscope-indexer in your $PATH. You can then use these keystrokes while browsing C source code:

  • Index files: C-c s I
  • Find global definition: C-c s d
  • Find symbol definition: C-c s s
  • Find this file: C-c s f
  • Find functions calling this function: C-c s c
  • Find functions called by this function: C-c s C
  • Find this pattern: C-c s e
  • Find this text string: C-c s t
  • Find files including this file: C-c s i

Java

cscope can be used to browse Java symbols too. Use these commands at the top-level directory to create the index:
find . -name "*.java" > cscope.files cscope -b  
Then add this line at the bottom of xcscope.el to load cscope-mode whenever a Java file is opened:
(add-hook 'java-mode-hook (function cscope:hook))  

File Operations

Operations such as move, copy, delete etc. are available in the directory editor: M-x dired

Calculations

  • Built-in calculator: M-x calculator
  • Change input base: i (b | o | h)
  • Change output base: o (b | o | h)

More Help

  • Built-in tutorial: C-h t
  • Info reader: C-h i

Nervous Breakdown

Get therapy from a psychiatrist: M-x doctor

2009年2月26日星期四

LinuxDNA Supercharges Linux with the Intel C/C++ Compiler

Exciting news from the LinuxDNA project, which earlier this month successfully compiled a recent Linux kernel with the Intel C/C++ compiler (ICC). This is not just a compile without errors, this is — for the most part — a fully bootable, compatible Linux kernel that can boot into a full Linux system. The full system is based on Gentoo Linux, and utilizes kernel version 2.6.22.

The project's goal is to be able to maintain an Intel-compiler-compatible kernel source along side the current kernel. A few remaining issues that need to be resolved before moving to 2.6.23 and beyond are under investigation.

One might ask: Why compile the kernel with something besides gcc?

The answer: Performance.

Earlier work at compiling the Linux kernel with ICC found that ICC provided up to a 40% boost in performance. Ingo A. Kubblin, a German developer that worked on the original ICC porting project in 2004, gave the following quote:

"... boost up to 40% for certain kernel parts and an average boost of 8-9% possible"

This early work was based on version 8 of ICC; current efforts are using versions 10.1 and 11.

The Intel compiler often produces faster code as the result of two major optimizations: IPO (Inter Procedural Optimization) and PGO (Profile Guided Optimization). IPO is a heuristics based optimization mechanism, while PGO uses several code stages, first to build code with special modifications that analyse code use, and then a recompile of the code for better execution based on that usage. As PGO is based on usage patterns, it can custom design an optimized kernel for a specific purpose: HPC, DCC, gaming, servers, etc. Although, PGO is also available in gcc, ICC is generally regarded as producing a superior result.

Among the contributors to LinuxDNA are:

  • LuYi Cheng: A Chinese kernel hacker responsible for the code becoming fully operational.
  • Feilong H: An Intel employee who laid the groundwork for needed patching.
  • An unnamed kernel hacker at Broadcom who contributed advice and technical assistance.
  • Claude Tyler McAdams: Hacker & spokesperson.

Currently, closed source drivers will not install out of the box, though the developers believed this issue should be easily fixable.

LinuxDNA is an Open Source project that aims to bring a compatible, current kernel source to the high-performance Intel Linux compiler.

2009年2月25日星期三

Comeau C/C++TM 4.3.10.1 Compiler

Online DocumentationOnline documentation for Comeau C++ and Comeau C is now available. To see this information, "click" on the respective chapter:
Command Line Options
Templates
Using export'd Templates
Namespaces
"Environment" Issues
Predefined Macros
Pragmas
Pre-compiled Headers
Language Dialects
C++ Dialects
Features Accepted
Anachronisms
Normal Extensions
cfront 2.1 Extensions
cfront 2.1/3.0 Extensions
C Dialects
ANSI C
K&R/pcc
SVR4 Extensions
MS (C and C++) Extensions
A word about dialects and modes
Download docs as compressed cpio file or as zip file file. (c)© 1988-2008 Comeau Computing, EDG. All rights reserved. Comeau Computing91-34 120th StreetRichmond Hill, NY 11418-3214http://www.comeaucomputing.comsupport@comeaucomputing.com/* the end */

Free, as in Virtual Infrastructure

If you're reading this, you already know the news: XenServer, our enterprise virtual infrastructure platform is now free (including resource pooling and live relo), and we have announced Citrix Essentials for XenServer, and Citrix Essentials for Hyper-V as our virtualization management portfolio that offers a rich set of automated functions that drive the compatible virtualization layers beneath - the free Hyper-V hypervisor from Microsoft, and the free XenServer Enterprise virtual infrastructure platform from Citrix. Finally, and most importanly, we announced a powerful go-to-market roadmap with Microsoft.
Response to our announcements has been extremely positive, from our partner Microsoft to our channel partners and resellers, and many many customers and users. There are the expected nay-sayers too, but someone had to drink the only thing that you get free from our competitor - VMware koolaid.
That said, I wanted to explain why we've made this change and why it is so important for Citrix and the XenServer crew:
Times are tough, and they are probably going to get tougher. Now is a good time to dramatically ease the cost of adoption of virtualization, and a good time for Citrix to make a very significant contribution to the well-being of its customers.
There are about a million servers running XenApp / Terminal Services. With the incredible work that the XenServer team has put in optimizing for this workload, we can state with great confidence that just about every one of those workloads is a good candidate for consolidation. We want to help our customers save money and gain agility. Including XenServer as a supported component of the XenApp product, and therefore as an entitlement for our 220,000+ XenApp customers is the best way to accelerate this trend.
The Xen footprint in the enterprise to date has been predominantly delivered as a component in Enterprise Linux. But the Linux management tools for Xen are pretty weak or non-existent. We want anyone using Xen in Linux in the enterprise to start using XenServer instead. You'll get better performance, greater reliability and fantastic management, with full Linux and WIndows support, absolutely free
We know that when we get into deals head to head with VMware, we tend to win. XenServer's reputation for performance, ease of use and functionality at an incredible price, has led us to victory recently in major enterprise accounts such as Tesco PLC, where XenServer runs complex mission critical software systems. To grow the XenServer business faster, we want to get more value to customers, sooner, and get them to demand fulfillment of the upgrade functions in Citrix Essentials, in a more scaleable fashion. Hence, having the complete resource pooling, shared storage and dynamic infrastructure control in the free platform allows us to make the product that much more compelling out of the box, and encourages customers to want to purchase both support and additional features
There is a wealth of cloud/MSP vendors that today use Xen in Linux to virtualize their infrastructures and enable them to become VM-agile. There is no reason why every such cloud should not use XenServer, and in so doing also offer hosted Windows VMs, with all the features of dynamic hot-plugging etc.
Simplifying the XenServer product line with XenServer and Essentials allows us to develop a powerful market partnership with Microsoft for server virtualization - framing a key aspect of our ongoing partnership in virtualization
That's about it really. Changing the dynamics, adjusting to the reality of the market. Aiming to win more share with a direct appeal to our end cutomer, and strong value propositions for our channel partners to deliver.
See you in Cannes

citrix宣布它的企业虚拟化平台XenServer将免费供用户使用,包括其中的所有工具。XenServer的最大亮点是XenMotion,允许用户将虚拟机从一台机器实时迁移到另一台机器,无需让服务器下线;它的多服务器管理功能也相当出色。VMware中的相同功能可是要价五千美元的。Citrix还宣布了新的产品:Citrix Essentials for Hyper-V和Citrix Essentials for XenServer。在Citrix宣布免费声明之后,VMware将如何回应值得关注。

Windows Live SkyDrive (initially Windows Live Folders)

Windows Live SkyDrive (initially Windows Live Folders) is part of Microsoft's Windows Live range of online services. SkyDrive is a file storage and sharing service that allows users to upload files to the computing cloud, then access them from a web browser. It uses Windows Live ID to control access to the user's files, allowing them to keep the files private, share with contacts, or make the files public. Publicly-shared files do not require a Windows Live ID to access.
The service currently offers 25 GB of free personal storage, with individual files limited to 50 MB.[1] Optionally, an ActiveX-based tool can be installed to allow drag-and-drop uploading from Windows Explorer. Up to five files can be uploaded each time if the tool has not been installed.
Contents[hide]
1 History
2 Features
2.1 Windows Live Photos
2.2 Favorites sharing
2.3 Windows Live Spaces integration
2.4 RSS feeds
3 See also
4 References
5 External links
//

[edit] History

On its launch, Windows Live Folders (as it was then) was provided as a limited beta available to a few testers in the United States.[2] On August 1, 2007, the service was expanded to a wider audience. Shortly after, on August 9, 2007 the service was renamed Windows Live SkyDrive and made available to testers in the United Kingdom and India.[3] As of May 22, 2008, Windows Live SkyDrive is available to 62 countries and regions.[4][5]
In late 2008 the capacity of an individual SkyDrive account was upgraded from 5 GB to 25 GB.

[edit] Features

[edit] Windows Live Photos
Main article: Windows Live Photos
Windows Live Photos is a part of SkyDrive that allows users to upload photos and let other users access them via a web browser. It displays the user's uploaded photos in albums (folders in SkyDrive). It provides the same basic functionality as SkyDrive such as the ability to move, copy and delete files and folders and uses SkyDrive's storage space.
Additionally, Windows Live Photos allows users to add "People tags" to their photos, integrating with Windows Live People. Stored photos can be downloaded into Windows Live Photo Gallery or as a ZIP file, while retaining the "People tags" metadata in the images. Users may also view the EXIF metadata such as camera information for the photos. Photos can be viewed in a full-screen slide show using Silverlight.

[edit] Favorites sharing
SkyDrive integrates with Windows Live Toolbar to enable the sharing of bookmarked web links between users. Links to websites are stored in a folder within SkyDrive. It is expected that this feature will replace the existing Windows Live Favorites.

[edit] Windows Live Spaces integration
SkyDrive provides integration with Windows Live Spaces to allow users to add a module to their space displaying their publicly shared folders. Windows Live SkyDrive also displays navigation links to different parts of Windows Live Spaces, including Windows Live Events.

[edit] RSS feeds
It is possible to subscribe to RSS feeds of the content of public folders. The feeds contain preview images of the added files — either a thumbnail of an image or an icon representing the file type — and links to the file download pages.

[edit] See also
Windows Live Sync (formerly Foldershare)
Windows Live

2009年2月23日星期一

VimIM

VimIMVim 的一个插件,可作为系统内置中文输入法

VimIM —— Vim 中文输入法

—— 子曰:“工欲善其事,必先利其器。”

2009年2月22日星期日

Making TeX Work

Making TeX Work

by NormanWalsh
ISBN: 156592-051-1 (out-of-print)
Version 1.0.1
Updated: Fri, 23 Aug 2002



Table of Contents

Forward to the SourceForge Edition
Acknowledgments
Preface
Why Read This Book?
Scope of This Book
Conventions Used in This Book
How to Get TeX
Where Are the Files?
Getting Software Without FTP
Getting Examples From This Book
Versions of TeX
Implementations and Platforms
UNIX
MS-DOS
OS/2
Macintosh
We'd Like to Hear From You
Acknowledgments
I. An Introduction to TeX
1. The Big Picture
What Is TeX?
TeX for Beginners
Boxes and Glue
Control Sequences
Special Characters
Text Formatting Versus Word Processing
What About Desktop Publishing?
What About troff?
What About SGML?
How TeX Works
TeXing a Simple Document
TeXing More Complex Documents
Building a Table of Contents
Figure References
Indexes and Glossaries
Bibliographies
Special Things
2. Editing
What Can an Editor Do?
Quoting Automatically
Matching Braces
Inserting Common Control Sequences
Running TeX Automatically
GNU Emacs
Starting TeX Mode
Typing in Emacs
Running TeX Automatically
aucTeX
Starting aucTeX
Typing in aucTeX
aucTeX Outline Mode
Intelligent Paragraph Reformatting
Multi-file Documents
Running TeX
Finding Errors
Multi-Edit
Setting Up TeX Support
Typing in Multi-Edit
Running TeX
Brief
MicroEMACS
epm: OS/2's Enhanced Editor
Other Tools
TeX as a Compiler
Processing a Document
Spellchecking
ispell
amSpell
Revision Control
TeX Shells
TeXShell
TeXPert
4TeX
PMTeX
TeXit
3. Running TeX
What Do You Run?
What Files Does TeX Need?
Pool Files
Format Files
User Files
The Command Line
Command-line Options
Command-line Cautions
TeX Without Options
What About Errors?
Log Files
Interpreting TeX Error Messages
Naming a File TeX Cannot Find
Misspelling a Control Sequence Name
Failure to Close an Environment
Math Outside of Math Mode
Missing Fonts
Everything Else
The Question Mark Prompt
4. Macro Packages
Installation: Making Format Files
Hyphenation Patterns
General-purpose Formats
Plain TeX
Extended Plain TeX
LaTeX2e Versus LaTeX
LaTeX2e
LaTeX
AMSTeX
AMSLaTeX
Lollipop
TeXinfo
Other Formats
Special-purpose Formats
SliTeX
FoilTeX
Seminar
TeX in Color
Setting Up Color
Using Color
Now I've Got Color, but I Need Black and White!
Color Under LaTeX2e
Color Is Subtle
Further Reading
II. Elements of a Complex Document
5. Fonts
What TeX Needs To Know
Selecting a Font in TeX
Which Character Is Which?
The Issue of Size
Expressing Design Size in TeX
Expressing Magnification in TeX
Standard Magnifications
Where Do TFM Files Come From?
The New Font Selection Scheme
Selecting Fonts with the New Font Selection Scheme
Defining Fonts with NFSS2
Storing Font Definitions
Changing the Defaults
NFSS Pitfalls
PostScript Fonts Under NFSS
Adjustments to Scale
When Things Go Wrong
When TeX Complains
When the DVI Driver Complains
Encoding Vectors
Virtual Fonts
Automatic Font Generation by DVI Drivers
Math Fonts in TeX
Concrete Examples
MetaFont Fonts
PostScript Type 1 Fonts
HP LaserJet Softfonts
TrueType Fonts
6. Pictures and Figures
Different Kinds of Images
Bitmapped Images
Scalable Images
Device Independence Revisited
Using Only TeX
Plain TeX
LaTeX
PiCTeX
XYPic
DraTeX
Using a Little Help
MFPic
Fig2MF
MetaFont
Using a Little More Help
PSTricks
TeXdraw
tpic
Using a Lot of Help
Electronic Cut-and-paste
Scalable Image Formats
Bitmapped Image Formats
Inserting PostScript Images into TeX
Manipulating Images
Image Magick
PBMplus
xv
xloadimage
Image Alchemy
ColorView
Jpeg4
pmjpeg
txt2pcx
Ghostscript
GoScript
hp2xx
Image Editors
xfig
idraw
tgif
bitmap/pixmap
Other Bitmap Editors
texcad/xtexcad
Screen Dumps
7. International Considerations
Typesetting in Any Language
Reading Input Files
Changing the Rules
Printing the Result
The Babel Styles
Building Multilingual Babel Formats
TeX Pitfalls
Very Complex Languages
Japanese
Chinese
Arabic
Hebrew
8. Printing
Printing Fonts
Built-in Fonts
External Fonts
Bitmapped Fonts
Scalable Fonts
Font Printing Pitfalls
Printing Pictures and Figures
Unsolvable Problems
Solvable Problems
Pictures Using Only TeX
MetaFont Figures
Scalable Images
Bitmap Images
Selected Drivers
emTeX Drivers
dvilj2
dvips
DVILASER/HP
DVILASER/PS
PTI Laser/HP and PTI Jet
PTI Laser/PS
dvipsone
9. Previewing
Previewing Under X11
Previewing with xdvi
Previewing with \xtex
Previewing with Ghostscript
Previewing with emTeX
Previewing with dvivga
TeX Preview
dvideo
PTI View
Previewing Under Windows
dvimswin
dviwin
wdviwin
DVIWindo
Previewing on a TTY
dvi2tty
dvgt/dvitovdu
crudetype
10. Online Documentation
Something Is Lost
TeXinfo
\LaTeX2HTML
LameTeX
latex2hy
detex
dvispell
11. Introducing MetaFont
What to Run?
What Files Does MetaFont Need?
Pool Files
Base Files
MetaFont Programs
Command-line Options
Building a Base File
Running MetaFont
Picking a Mode
Selecting a Size
Making a GF Font
Making a PK Font
What About Errors?
Other Errors
Output at Very High Resolutions
Output at Very Low Resolutions
12. Bibliographies, Indexes, and Glossaries
BibTeX
How BibTeX Works
Building a Bibliography Database
Bibliography Styles
Bibliography Database Tools
Tib
Making Indexes
Index Entries
Index Format
Special-purpose styles
Making Glossaries
III. A Tools Overview
13. Non-commercial Environments
Web2C
emTeX
Where to Start
Unpacking the Archives
Setting Up the Environment
Testing the Installation
Installing Fonts
Making emTeX Smaller
Basic Customization
Installing the Beta Test Versions of emTeX
Running emTeX 386 in Windows
Automatic Font Generation with emTeX
Installing emTeX on a Network
texas
sbTeX
gTeX
14. Commercial Environments
µTeX by ArborText
\yyTeX
Textures
TurboTeX
PCTeX
PCTeX For Windows
Scientific Word
15. TeX on the Macintosh
CMacTeX
DirectTeX
OzTeX
Textures
Other Tools
Alpha
BBEdit
BSR Font Tools
Excalibur
HyperBibTeX
MacGS
dvidvi
MacDVIcopy
MacBibTeX
MacMakeIndex
16. TeX Utilities
List of Tools
A. Filename Extension Summary
B. Font Samples
Font Encodings
Font Samples
C. Resources
TUG: The TeX Users Group
Other User Groups
TeX Software
TeX Shells
Editors
Macro Packages (Formats)
Styles and Macros
Styles That Produced This Book
Utilities
Miscellaneous
D. Long Examples
E. GNU Free Documentation License
0. PREAMBLE
1. APPLICABILITY AND DEFINITIONS
2. VERBATIM COPYING
3. COPYING IN QUANTITY
4. MODIFICATIONS
5. COMBINING DOCUMENTS
6. COLLECTIONS OF DOCUMENTS
7. AGGREGATION WITH INDEPENDENT WORKS
8. TRANSLATION
9. TERMINATION
10. FUTURE REVISIONS OF THIS LICENSE
How to use this License for your documents
Bibliography

List of Figures

1.1. The Letters g and h inside their boxes.
1.2. Example figure produced by both TeX and troff
1.3. A high-level view of TeX
1.4. High-level view of TeX including more detail
1.5. TeXing a More Complex Document
2.1. Extension setup in Multi-Edit
2.2. LaTeX as a compiler in Multi-Edit
2.3. Editing a file with MicroEMACS
2.4. Microsoft Windows online help for LaTeX
2.5. Editing a TeX document with epm under OS/2
2.6. Edit settings control word delimiters
2.7. Spellchecking a document with amSpell
2.8. TeXShell
2.9. TeXPert
2.10. 4TeX
2.11. PMTeX
2.12. TeXit
4.1. Sample page
4.2. Plain TeX Input
4.3. LaTeX2e Input
4.4. LaTeX Input File
4.5. AMSTeX Input File
4.6. AMS sample page
4.7. Lollipop Input File
4.8. TeXinfo Input
4.9. TeXinfo sample page
4.10. Online documentation produced by MakeInfo
4.11. Caffeine by ChemTeX
4.12. The ChemTeX Source for Caffeine
4.13. A lithium cation rendered by ChemStruct
4.14. The ChemStruct Source for the Lithium Cation
4.15. A little Mozart…
4.16. The MusicTeX Source for Figure
5.1. fi as two characters and as a ligature
5.2. We unkerned and kerned
5.3. The Computer Modern Roman letter R at 150pt: (a) from a 5pt design; (b) from a 17pt design
5.4. How TeX uses a virtual font
6.1. An example diagram in Plain TeX
6.2. A parallelogram in LaTeX
6.3. A figure created with (a) epic, and (b) eepic
6.4. Several bezier curves created with the LaTeX bezier style
6.5. Sample diagrams using PiCTeX
6.6. An XYPic diagram
6.7. An DraTeX diagram
6.8. A PostScript bounding box example
6.9. An example of an encapsulated figure
6.10. Another example of an encapsulated figure (resized and rotated)
6.11. Editing an image with xfig
6.12. Editing an image with idraw
6.13. Editing an image with tgif
6.14. An example of bitmap editing an icon
6.15. A text mode screen dump.
7.1. Character mapping example
7.2. Poor Man's Japanese
7.3. \jemtex sample
7.4. Arabic text typeset with ArabTeX
7.5. Hebrew
8.1. Resolution of the bitmap and the device changed simultaneously
8.2. Resolution of the bitmap changed while device held constant
8.3. Previewing and printing with emTeX
9.1. How Previewing with xdvi Works
9.2. Previewing with xdvi
9.3. How Previewing with xtex Works
9.4. Previewing with xtex
9.5. Previewing with Ghostview
9.6. Previewing with emTeX's dviscr
9.7. Previewing with emTeX's dvipm
9.8. Previewing with dvivga
9.9. Previewing with ArborText's Previewer
9.10. Previewing with TurboTeX dvideo (using limited selection of fonts)
9.11. Previewing with Personal TeX's Previewer
9.12. Previewing with dvimswin
9.13. Previewing with dviwin
9.14. Previewing with TurboTeX's wdviwin
9.15. Previewing with Y&Y's DVIWindo
9.16. DVIWindo preview much enlarged
9.17. Previewing with dvgt under Tektronix 4010 emulation
10.1. TeXinfo sample page
10.2. Online documentation produced by MakeInfo
11.1. A figure eight created with MetaFont
12.1. Editing an article entry with \program{bibview}
12.2. Editing an article entry with \program{xbibtex}
12.3. Editing an article entry with \program{bibdb}
14.1. The PCTeX menu system
14.2. PCTeX For Windows editing and previewing a LaTeX document
14.3. PCTeX For Windows TrueType font metric builder
14.4. Editing a document with Scientific Word
14.5. Preview of the Scientific Word document shown in Figure
15.1. Editing, previewing, and typesetting in Textures
15.2. Alpha editing the fonts chapter from this book
15.3. \program{BBEdit} editing the fonts chapter from this book
15.4. \program{Excalibur} spellchecking the fonts chapter from this book
15.5. The \program{Hyper\BibTeX} view of a bibliographic database

List of Tables

1.
1.1. Special Characters in Plain TeX
1.2. How to Typeset Special Characters
2.1. aucTeX Math Operators in Mathematics Minor-mode
2.2. TeX Modes of Interaction
3.1.
5.1. Standard Weight and Width Designations
5.2. Weight and Width Are Combined to Form Series
5.3. Standard Abbreviations of Font Shape
5.4. User-level Font Selection Control Sequences in NFSS2
5.5. Encoding Schemes Supported by NFSS2
5.6. Default Fonts
5.7.
6.1. Graphics Manipulation Packages
6.2. Graphics Editing Packages
7.1. Standard Control Sequences for Symbols from Other Character Sets
7.2. New Control Sequences Proposed by TWGMLC
7.3. Language Switch Macros Proposed by TUG
8.1. Common DVI Drivers
8.2. Other \protect\dvilaserhp Utilities
8.3. Other \protect\dvilaserps Utilities
8.4. Other dvipsone Utilities
9.1. Common Previewers
9.2. TeX Preview Utilities
9.3. DVIWindo Utilities
11.1. Some Popular MetaFont Fonts on the CTAN Archives
12.1. Types of Entries with Required and Optional Fields
13.1. Summary of the \protect\emTeX Distribution
13.2. Fonts Libraries Available for \protect\emTeX on CTAN
13.3. Other \protect\emTeX Executables
13.4. The Beta Test Files for \protect\emTeX
14.1. TurboTeX Programs
14.2. Turbo\protect\TeX \protect\MF Programs
15.1. Summary of the \protect\cmactex Distribution at CTAN
15.2. Summary of the \protect\oztex Distribution at CTAN
15.3. Font Tools in the BSR package
16.1. The Public Doman DVI Driver Family
16.2. RTF Translators
16.3. Additional Scripts in PS Utils
B.1. The Computer Modern Roman Font Encoding
B.2. The Computer Modern Math Italic Font Encoding
B.3. The Cork Font Encoding
B.4. The Adobe Standard Font Encoding

计算机图书排版的八卦

Source: http://blog.youxu.info/2008/10/13/trivia-about-computer-typesetting/

大 家都知道, 计算机科学家超级爱动手自己开发工具, 而且对美有超乎常人的需求. Knuth 爷爷当年觉得自己辛辛苦苦的好书被排版成地摊上的厕纸一样, 一怒之下自己搞出了红遍大江南北的 TeX. 从此整个世界都清净了. 排版是计算机科学家研究的一个很好玩的领域, 这篇文章就谈谈我所知道的关于排版的八卦.

先说 Knuth 爷爷的吧. 首先, 是在设计 TeX 的过程中, 这位老爷爷研究了很多著名的字体, 成了名动一时的字体专家, 据说和乔布斯并称为加州最懂字体设计的两个搞IT的 (我瞎说的). 研究字体之余, 他就研究收集各大书法家的作品, 然后这位老爷爷又是一个基督教徒, 所以干脆用它的收藏出了一本书, 叫做 <3:16>. 这本书特别牛逼, 是一本用计算机科学研究上帝存在的. 而且发挥计算机科学的小幽默, 取圣经每章的第3节第16小句, 还证明了这个和随机一样好.

还是克爷爷, 写完TeX之后不过瘾, 要写本书来冲冲喜, 于是写出了极其牛B名字的 The TeXbook. 一语双关, 表现了牛人一贯的狂妄. 写完这个他又想写写自己的字体和绘图系统设计(metafont 系统) 所以干脆出了五卷书, 行话称作ABCDE, 也是用名字来表明: 看, 基本的入门书, 你非看不可.

跑题一下: Knuth 爷爷最喜欢让人家看到他提出的名字就腿发软. 比如他提出了一个叫做 Literate Programming 的东西, 并且很不怀好意的对 Dijkstra 说, 小样, 当年你说 structured programming 的时候我非要用 goto, 结果人家都说我是 unstructured programming (没结构的编程), 现在我要提出一个叫做 literate programming 的东西, 你要是不跟着我混, 人家就会叫你 illiterate programming (没文化的编程). 在这么邪恶的名字下, 全世界程序员只好个个听这个老头的话, 乖乖的使用文档和程序融为一体的”有文化的”编程习惯.

其实克爷爷属于斯坦福家族的. 在70-80年代, 世界上还有一个NB的研究机构: 贝尔实验室. 贝尔实验室自己也开发了自己的排版工具: Troff. 开发者是著名的K, 就是 K&R 里面的那个K. 这个 Troff 也是一个牛到极点的排版软件, 比如说, 当年那些科学家都对出版社的排版不满意, 所以都威胁出版社说: 我自己来排版, 你们只管印刷就行了. 就是因为这帮科学家开了这个传统, 所以后来出版商遇到想自己排版的, 都用巨崇拜的眼光打量着你.

说到 troff, 以下大名鼎鼎的书都是用 troff 排版的:

Advanced Programming in the UNIX Environment
The AWK Programming Language
The C Programming Language
Compilers: Principles, Techniques, and Tools
Computer Networks, 3rd Ed.
Computer Networks And Internets, 3rd Ed.
The Design and Implementation of the 4.4BSD Operating System
Effective TCP/IP Programming
The Elements of Programming Style, 2nd Ed.
Internetworking With TCP/IP Volume 123
More Programming Pearls
The Practice of Programming
Software Tools
Unix Network Programming
The UNIX Programming Environment
Programming in C++

所以说, troff 排版的无烂书. 当然, TeX 家族也不是吃素的, SICP, TAoCP, CLRS 都是用 TeX 搞出来的. 陶哲轩也说, 鉴别民科文章第一步就是看是不是用TeX排版的. 可见排版排得专业, 也是好文章的一个先决条件.

我觉得可以把以上的结论概括成 徐氏排版定理, 如果一本书, 不是以上所说两个软件排版的, 又不是 O’Relly 出版的, 那是好书的概率也就不怎么大了. 作为一个作者来讲, 一定要记得用 troff 或者 latex 排版 :)

troff 和 latex 都是一脉相承的, 理念也差不多, 所以牛B的开发人员两头都在玩, 比如一个叫做 Werner Lemberg 的牛人, 就是 troff 的开发人员, 同时还跑到 TeX 那里开发了支持中日韩的 CJK 包. (大家都知道, 软件的中文支持从来都不是中国人开发的)

史上最牛的程序员 Bill Joy 同学据说用了一个周末就写出了 vi, 所以大家都怀疑, 他用了半个小时的时间写了 BSD 上的 troff. 他写的这个程序, 被SUN用着, 一直用到今天.

最 后强行插播一条广告: 我最近要写一本小册子, 叫做 Motifs in Computer Science (原名叫 Meta Ideas in Computer Science). 一定保证用 LaTeX+Troff+reStructuredText 排版, 按照我的 Troff/Latex 排版无烂书结论, 这本书也不是太烂. 欢迎捧场.

再补充一则八卦: 话说当年 PDP-11小型机特别贵, 但是贝尔实验室的科学家又想要用. 怎么办呢? 于是, 他们发挥了科学家爱忽悠的能力, 去和经理说: 你看, 我们文档的排版很烂吧(当年还是打字机时代), 你们投资一下搞一个小型机回来, 我们保证给你们开发一个在这个机器上用的文档排版系统. 经理一听, 大笔一挥说: 买之!. 科学家一听都乐了, 哈哈, 我们有新玩具了. 然后, 他们就开始在 PDP11 上开发 UNIX 了. 经理也不懂, 看他们搞的好玩, 就不时来问问: 老大们, 排版系统怎么样了? 贝尔的科学家一边敷衍敷衍, 一边继续搞 UNIX 和 C 语言. 等这两样都搞好了, 瞬间就写了一个排版软件, 就是 nroff. 经理可乐了, 说, 哎, 我们终于投资有回报了啊. 科学家也乐了, 因为若干年之后, C 和 UNIX 红遍大江南北, 因此两人拿下图灵奖. 所以说, 做研究这东西, 一定要先把基金忽悠过来, 然后想干啥干啥, 最后结果反而超出预料. (贝尔实验室的人居然研究宇宙背景辐射拿诺贝尔奖, 这种宽松宽容的基础研究在其他地方是很难遇到的). 

The Multi-Principal OS Construction of the Gazelle Web Browser

Web browsers originated as applications that people used to view static web sites sequentially. As web sites evolved into dynamic web applications composing content from various web sites, browsers have become multi-principal operating environments with resources shared among mutually distrusting web site {\it principals}. Nevertheless, no existing browsers, including new architectures like IE 8, Google Chrome, and OP, have a multi-principal operating system construction that gives a browser-based OS the exclusive control to manage the protection of all system resources

among web site principals.

In this paper, we introduce Gazelle, a secure web browser constructed as a multi-principal OS. Gazelle's Browser Kernel is an operating system that exclusively manages resource protection and sharing across web site principals. This construction exposes intricate design issues that no previous work has identified, such as legacy protection of cross-origin script source, and cross-principal, cross-process display and events protection. We elaborate on these issues and provide comprehensive solutions.

Our prototype implementation and evaluation experience indicates that it is realistic to turn an existing browser into a multi-principal OS that yields significantly stronger security and robustness with acceptable performance and backward compatibility.

gazelle.pdf

Publisher: Microsoft