読者です 読者をやめる 読者になる 読者になる

欧文フォントインパーフェクトコレクション

はじめに

 あればあったで嬉しいけれど、しかしプロでもない身分で、業務に使うわけでもない、1ファミリー揃えれば計算機が買えてしまうような値段の製品を購入する、その支出を正当化できるほどの用途があるわけでもない。
 それがフォントですね。
 本稿は、欧文フォントに関し、合法的、かつフリーまたは格安で入手する方法について述べるものです。必ずしもメトリック互換ではない旨ご了承ください。

調査対象

PostScript

 PostScriptにはコアフォントが定義されており、PostScript Level 2では35フォント、PostScript 3では136フォントが挙げられています。

PostScript fonts - Wikipedia

『少女と活字 プラチナ・コレクション』

 私がフォントに興味を持つきっかけになった素敵な同人誌です。

16の有名な欧文書体たちを、女の子のイメージに投影しつつ解説した本。

heikinritsu.com

www.youtube.com

入手元

 元ネタはこれです。

Metric-compatible fonts - ArchWiki

TrueTypeフォントパーフェクトコレクション

改訂6版 TrueTypeフォントパーフェクトコレクション (デジタルBOOK)

改訂6版 TrueTypeフォントパーフェクトコレクション (デジタルBOOK)

 買いましょう。わずか3000円強で問題の大部分は解決する……と思っていたら!!

 ウワーッ!
 マジでか……超ショックだ……。
 既に丸善ジュンク堂では店頭在庫もないので、見つけたら極力確保しましょう。

TeX Gyre

TeX Gyre フォントは,Times や Helvetica などの Adobe 基本 35 書体に対応する,高品質でオープンなフォントです.PostScript Type 1 形式と OpenType 形式で配布されています.

TeX Gyre - TeX Wiki

The TeX Gyre (TG) Collection of Fonts — GUST Web Presence

URW++ Fonts

ghostscript - Revision 12425: /trunk/ghostpdl/urwfonts

 GhostScriptに入っているURW++のフォントが使える、らしい。

Ghostscript - Wikipedia

 ただGhostScriptから抜き出して単体で使えるのかはよくわからない……。

 基本35フォントはGPL。Classico、GaramondなどはNon-Commercial用途では使用可能。
 フォントが埋め込まれたPDFの販売はどうなんだろう……。

CTAN: /tex-archive/fonts/urw

MgOpen Fonts

Debian -- wheezy の fonts-mgopen パッケージに関する詳細

 Magenta Inc.のフォント、らしい。debianだからライセンス的には大丈夫でしょう。
 一応ライセンス全文へのリンク。

Licensing:Fonts/MgOpen - FedoraProject

Fira Sans

 FF Metaのデザイナーが作ったMozillaのフォント。
 完全に同一ではないけれど、雰囲気は似ているということで。

github.com

Core fonts for the Web

https://webhttp://mozilla.github.io/Fira/.archive.org/web/20020124085641/http://www.microsoft.com/typography/fontpack/default.htm

 かつてMSが配布していたインターネット用のコアフォント。
 公式サイトでの配布は終了しているのでInternet Archiveから。
 これは果たしてセーフなのか? Wikipediaが言うにはEULA的に改変なし再配布はセーフらしいけど……。

Core fonts for the Web - Wikipedia

調査結果

 サイトからリストをコピペしてむりやりCSVの体裁にして、Excelのフィルター機能とVSCodeの正規表現置換でgfm tableの形に仕立て上げたのがこちらです。
 ありがとうMicrosoft

PS2 PS3 T&Ds フォント名 Bitstream TeX Gyre URW++ その他 結果
Albertus A028
Antique Olive Antique Olive
Apple Chancery ×
Arial A030 MS Arial
Bodoni Bodoni
Carta ×
Caslon Caslon Old Face
Chicago ×
Clarendon Clarendon Clarendon URW Bold Condensed
Cooper Black Cooper Cooper Black Italic
Copperplate Gothic Copperplate Gothic
Coronet Ribbon 131 Coronet
Courier Cursor Nimbus Mono
Eurostile Square 721
Frutiger Humanist 777 Bitstream Vera Sans, DejaVu Sans
Futura Futura
Garamond Garamond Garamond No.8
Geneva ×
Gill Sans Humanist 521
Goudy ×
Helvetica Swiss 721 Heros Nimbus Sans L
Hoefler Text Hoefler Ornaments
ITC Avant Garde Gothic Adventor URW Gothic
ITC Bookman Bonum Bookman URW
ITC Lubalin Graph ×
ITC Mona Lisa Recut ×
ITC Zapf Chancery Chorus Chancery URW, Z003
ITC Zapf Dingbats ×
Joanna ×
Letter Gothic Letter Gothic 12 Letter Gothic
Marigold Mauritus
Meta Fira Sans
Monaco ×
New Century Schoolbook Schola Century SchoolBook URW, C059
New York ×
OCR-B OCR-B OCR-B
Optima URW Classico MgOpen Cosmetica, Epigrafica
Oxford ×
Palatino Pagella Palladio URW, P052
Rotis ×
Shelley ×
Symbol ×
Tekton ×
Template Gothic ×
Times Dutch 801 Termes
Times New Roman Nimbus Roman No9 L MS Times New Roman
Trajan ×
Univers Zurich U001
Wingdings MS Wingdings

 とまあ、結構な数のフォントが揃えられることがわかった。『TrueTypeフォントパーフェクトコレクション』さえ入手できれば……。
 BodoniHelvetica、Universはどうにかできるだろうけど、Frutiger、Futura、Gill Sansが手に入らなくなるのはあまりにも痛い。特にFrutigerはMacを買っても手に入らないので。いちおうBitstream Vera SansDejaVu Sansが雰囲気は似てるけど。

 ちなみにリストに入っていないフォントでもBaskerville、Franklin GothicはBitstream版があり、BemboはCardo / ET Book、DidotはGFS Didot、InterstateはOverpassという名前で入手できるみたいだ。
 さすがにAkzidenz-GothicとかAvenirとかGothamとかRockwellとかは無理だけど、AvenirとRockwellMacを買えばついてくるし……。

 Optimaに関してはURW Classicoの方がMgOpen Cosmeticaよりオリジナルに近い。特にOとか。ただそれでも完全に同一というわけではなくて、たとえばaとかが違う。ただしURW Classicoはたとえばフォントを埋め込んだPDFを有償配布する際にライセンス違反とならないだろうか。わからない……われわれは法律家ではないので……。
 EpigraficaGPLかつOptimaにより近くていいのかもしれない。

結び

 『TrueTypeフォントパーフェクトコレクション』が絶版になったショックで動けない。もうおしまいだ。冬の時代の到来……。

TeX Live 2016とLuaTeX-jaに関する備忘録

久しぶりにTeXの環境構築を行ったのでそのメモ。

W32TeXからTex Live 2016への移行

 前回はTeXインストーラ3で環境構築を行ったが、今回はTeX Live 2016を用いることにする。
 なお、Tex Live 2017が2017-05-01にリリース予定であり、そちらではLuaTeXが1.0になるようなので、急ぎでないならそちらを待ってからインストールするのがいいかもしれない。

 Installing TeX Live over the Internet - TeX Users Groupからinstall-tl-windows.exeをダウンロードしてインストール。時間はかかるけど詰まるところはない。

LuaTeXでの日本語環境

 pTeXと同等(互換ではない)の環境を目指して、LuaTeX-ja環境が整備されつつある。

\usepackage{luatexja}

ja.osdn.net

 LuaTeXではjsclasses文書クラスは利用できないので、代替としてltjsclassesが利用できる。
 また、確認していないがBXjsclsBXjscls - TeX Wiki)も利用できるようだ。

 フォントについてはluatexja-fontspecを利用して、英文、和文のそれぞれについて指定できる。

\usepackage{luatexja-fontspec}

\setmainfont[Ligatures=TeX]{TeXGyreTermes}
\setsansfont[Ligatures=TeX]{TeXGyreHeros}

\setmainjfont[BoldFont=IPAexGothic]{IPAexMincho}
\setsansjfont{IPAexGothic}

 プリセットも用意されていて、latexja-presetから利用できる。

\usepackage[ipa]{luatexja-preset}

 ルビ、傍点はluatexja-rubyパッケージ。

\usepackage{luatexja-ruby}

LuaTeX-ja環境での縦書き

 縦書きの文書クラスとして、ltjtarticle.clsltjtreport.clsltjtbook.clsが利用できる。

fugenji.org

 ところでluatexja-presetexpertオプションを設定してもダブルクオーテーションはダブルミニュートにならないのだけど、これはどうすればいいのだろうか。

PDF出力時の見開き方向

 Acrobat Readerで見開き表示をするときの綴じ方向を指定するためにはhyperrefパッケージを使う。

\usepackage[pdfdirection=R2L]{hyperref}

個人的な規約

 バックノウハウ感しかない。

------ %ダーシ
\vspace{1em} %空行

% 上下余白調整
\usepackage[top=20truemm,bottom=10truemm]{geometry}

% openright時用の綴じ側余白調整
\setlength{\oddsidemargin}{-1in} %  set real left margin 0pt
\setlength{\evensidemargin}{-1in} % do
\addtolength{\oddsidemargin}{15mm} % odd page 25mm left margin   
\addtolength{\evensidemargin}{25mm}% even page 15mm left margin

\noindent「行頭の括弧はnoindentで対処する」

TrueTypeフォントパーフェクトコレクション』

改訂6版 TrueTypeフォントパーフェクトコレクション (デジタルBOOK)

改訂6版 TrueTypeフォントパーフェクトコレクション (デジタルBOOK)

 有名どころのフォントが破格値で手に入るすぐれものです。詳しくはリンク参照のこと。
 ちなみに好きな字体はFrutiger、Avenir、Optima、Palatino、Gothamあたりです。Macintoshがほしい。

blog.bi3.jp

 このフォントをTeXで使うにはTrueType Fonts Perfect Collectionの指示に従えばいい、はずなのだけれど、前の環境でうまくいったこれが今回の環境だとうまくいかない。
 サンプルファイルをplatexにかけてdviファイルを作った後、dvipdfmx -f bitstream.map filenameすればpdfはできるのだけれど、何が悪いのだろうか。

カシオ MQ-24-1E

 一時期、BRAUNの腕時計が欲しかった。

 BRAUNというのはあの髭剃りや電動歯ブラシで有名なドイツの家電メーカーのBRAUNで、かつては目覚まし時計や腕時計を作っていた。目覚まし時計ではAB1、腕時計ではAW10(初代MR2ではない)が最も知られているだろうか。

Braun AG Armbanduhr.jpg
By Banffy - Own work, CC BY-SA 3.0, Link

 正確に言えば、今もBRAUNブランドの時計は売られている。でもこれはライセンスを受けた別の企業が作っているものだ。

BRAUN(ブラウン)公式サイト|腕時計・クロック

 オリジナルを買い逃した私は、数年越しのBRAUNブランド復活に大いに喜んだ。でも、アキヨドのショーケースを何度も眺めたにも関わらず、私がそれらを買い求めることはなかった。
 現代風にアレンジされたコレクションは全体的に大きくなっていた。デザインに関しても、どこか好みから外れてしまったという思いが拭えなかったのだ。


 話は変わって。最近、腕時計を買った。
 買ったのはカシオのMQ-24-1E。好みを優先して国内モデルにない色を選んだけど、それでもAmazon.co.jpから簡単に入手できる。

 そうして思ってしまったのだ。腕時計、これでいいのでは?

 確かにこの時計には高級感のかけらもない。
 ケースもバンドもただの樹脂だ。タイマーも時報もストップウォッチもカレンダーさえついてない。ただの3針時計。精度に関しても、セイコーシチズンが誇る年差クォーツのようにはいかないだろう(ところでこの時計はシチズン系列であるミヨタのムーブメントを使っているらしい。サプライチェーンは複雑怪奇なり)。
 でもそれは当たり前だ。なにせ2000円でお釣りがくる値段しかついていないのだから。 

 私は腕が細い。腕周りで言うとおそらく15 cm程度しかない。一般的な38 mmの腕時計でさえ大きすぎる。近年の主流である40 mm以上なんてもってのほか。そのような人間にとって、直径33 mmに過ぎないケースは小さすぎる、という批判はまったく当てはまらない。
 小さい、薄い、軽い。一応防水していて、なにより壊しても惜しくない、使い捨ててしまってもいいんじゃないかと思えるくらいの気楽さ。
 そして、何よりこれ以上切り捨てることも難しいほどにシンプルなミニマルデザイン。この時計を眺めていると、BRAUNの時計でなくても、これでいいんじゃないかって思ってしまう。そんなデザイン音痴なことを言ってるとDietrich LubsやDieter Ramsに殴られるのでは?

 そういうわけで私は最低クラスの価格帯で売られているこの時計を結構気に入ってしまったのだ。
 使い捨てだなんてとんでもない、壊れるまでは付き合ってみたいと、今のところは思っている。
 でもまあ、5万円以上する腕時計なんて持ったことがないし、持ったら持ったで、またその時にこの気持ちはいとも簡単に変わってしまうのだろう。

広告を非表示にする

CUDAスタート以前いろいろ

つまらないことしか書いてないです。

Windows PC編

CUDA SamplesをビルドするためにVisualStudioをインストールするとき

 調子こいてVS2017をインストールしてはならない。現時点ではVS2015までがサポート対象。

Installation Guide Windows :: CUDA Toolkit Documentation

VisualStudioでCUDA Samplesをビルドするとき

 プロジェクトのプロパティからターゲットをReleaseにすることを(必要であれば)忘れないようにする。

Jetson編

JetPack 3.0でflash-OSができないとき

 調子こいてホストにUbuntu 16.04 LTSなどをインストールしてはならない。現状14.04 LTSだけがサポート対象。

NVIDIA JetPack Documentation - JetPack L4T

 ただし、OSのflashをしなければ、ホストが16.04 LTSであっても、CUDAなどの転送は可能。

JetPack 3.0でCUDA Samplesがmakeできないとき

 現時点ではcommon/inc/helper_gl.hを下記のように変更する。

- #if !defined(GLX_EXTENSION_NAME) || defined(__arm__) || defined(__aarch64__)
+ #if !defined(GLX_EXTENSION_NAME) || !defined(GL_VERSION_1_3)

JetPack - Compiling oceanFFT on TX2 - NVIDIA Developer Forums

EliteBookとUbuntu 16.04 LTS

HP EliteBook 820 G1にUbuntu 16.04 LTSをインストールした。

precondition

EliteBook 820 G1 F9D92PP#ABJ

めちゃくちゃ安いときに買ったのでメモリ増設費用込でも10万円は超えてない。

  • Core i5-4300U
  • 4 GB SO-DIMM DDR3L-1600 -> 8 GB x 2 SO-DIMM DDR3L-1600
  • 256 GB SSD
  • 12.5 inch LCD, 1366×768

pre-install

Ubuntu Desktop 日本語 Remixのisoをダウンロードし、rufusUSBメモリに書き込み。
UEFI(w/o Legacy)/Secure Boot環境のまま、デフォルト設定でインストール

post-install

 することがない。Wi-Fiもホットキーの類もほとんどデフォルトで動作する。
 apt installで好きなアプリをインストールしていけば良い。

# homeフォルダ内のフォルダ名を英語に変更する
LANG=C xdg-user-dirs-gtk-update
# 電源管理 
sudo apt install tlp-rdw
# gitとJDKは入ってなかったようなので入れた
sudo apt install git default-jdk
# Noto Sans CJKを入れた
sudo apt install fonts-noto-cjk
# アプリケーションのメニューを常時表示するように設定した 
gsettings set com.canonical.Unity always-show-menus true

 Chromebookを使ったことがあればわかるように、消費することしか能のないインターネッターにとって、モダンなウェブブラウザーさえあれば他に必要なものはほとんどない。故に、FirefoxGoogle Chromeがあれば日常生活で不便することはそうない。
 足が短い、液晶の質が低いなどの欠点はあるが、これはWindowsの時と変わりない。
 あまりにスムーズに進みすぎて書くことがない記事になってしまった。

reference

Make: AVR Programming pt.04

squeuei.hatenablog.com

Chapter 10

タイマを使うときのチェックリスト

  1. どのタイマを使うか決める。8bitでよければTimer 0か2、16bitが必要ならTimer 1。
  2. どのモードが必要なのかを決める。TCCRnAのWGMn0とWGMn1、TCCRnBのWGMn2をセットする。
    1. 数えたかったりタイミングを作りたいのならNormalモード(設定の必要なし)
    2. 時間の基準や周波数を作りたいのならCTCモードを使う。WGMn1をセットする。
    3. PWMを使いたいならfast PWMモード。WGMn0とWGMn1をセットする。PWM周波数を変えなくてもいいならWGMn2もセットする。
  3. 直接出力するならTCCRnAのCOMxAとCOMxBをセットする。
  4. 分周を決めたらTCCRnBのCSnxビットをセットする。
  5. 比較する数値を使うならOCRnAやOCRnBにデフォルトの値を設定する。PWMを使うならDDRの出力設定も忘れないこと。
  6. タイマで割り込みを使う?
    1. Normalモードならカウンタオーバフロー割り込みを有効にするため、TIMSKnのTOIEnをセットする。
    2. PWMやCTCモードなら比較での割り込みを有効にするため、TIMSKnのOCIEnAとOCIEnBをセットする。
    3. sei()するのを忘れないように。

Chapter 11

サーボのようなデバイスとAVRの電源はなるべく分けた方がいい。AVRの動作が不安定になる恐れがあるから。

Chapter 12

高い電圧を高分解能で取得したいときは、分圧とオーバーサンプリングを使う。 また、AVRの場合はADC以外のクロックを停止することでノイズを低減するADCノイズリダクションスリープモードがあるので、活用すると良い。

オーバーサンプリング

オーバーサンプリングは中心極限定理に基づいていて、たとえば10ビットADCで16個のサンプルを取得した後、4で割る(=2ビットシフトする)ことで12ビットの結果が得られる。 nビット余計に欲しいときは、{2^{2^n}}回のサンプリングと{2^n}回の割り算(=n回のビットシフト)が必要。

オーバーサンプリングは、サンプリング周波数よりもゆっくり変化する信号に対して適用する。 速度、精度、コストはトリレンマだ。 16回のオーバーサンプリングは16倍遅くなるけど2ビット分の精度をただで手に入れられる。 高速で正確なADCが欲しいなら良いADCを買えばいいけど、それにはお金がかかるのだ。

0~5V以外の信号を計りたいときは

1V以下のものを計りたいときはAREFを内蔵の1.1Vリファレンス電源にすればよい。 1V~5Vのものを計りたいときはAREFを内蔵の1.1Vリファレンス電源にして、その上で信号を分圧すればよい。 5V以上のものを計りたいときは信号を分圧すればよい。

スリープ

avr/sleep.hをインクルードして、set_sleep_mode(SLEED_MODE_ADC);(実はSMCR |= (1 << SM0);するのと同じ)と、ADCSRA |= (1 << ADIE);(ADC割り込み有効化)、sei()をすればよい。ただし、sleepが終わるときにISRが呼ばれるので、EMPTY_INTERRUPT(ADC_vect);なりしておく必要がある。

EWMA(Exponentially Weighted Moving Averages)

ふつうの移動平均では移動平均する数だけメモリを消費する。 また、C言語の除算では切り捨ての問題があるから、なるべく除算の階数を減らしたい。 EWMAなら2つの変数、現在の値{x_t}と過去の平均値{y_{t-1}}だけでいい。

{\displaystyle y_t=\frac{1}{16}x_t+\frac{15}{16}y_{t-1}}

また、EWMAは最後に一回だけ除算をすればいいので、除算の問題が少ない。 除算するときの一つのテクニックは、割る数の半分を事前に足してから除算を行うこと。

(16+4)/8 = 2
(20+4)/8 = 3

これらを考慮したときのEWMAの式は下記の通り。

{\displaystyle 16y_t=x_t+16y_{t-1} -\frac{(16y_{t-1}-\frac{16}{2})}{16}}

Make: AVR Programming pt.03

squeuei.hatenablog.com

Chapter 8

割り込みを扱うときはISR()を使う。厳密に言うところは関数じゃなくてマクロ。 引数として割り込みベクタを与える。割り込みベクタの定義はio.hに書いてある。

外部割り込み

外部割り込みを有効化するときは、2段階ある事を忘れないようにする。

  1. 使いたい割り込みベクタを有効化する
  2. 割り込みシステム全体をsei()で有効化する。

普通は割り込みに入るときにglobal interrupt enableがオフになるので、割り込み中に更なる割り込みが発生することは無い。それを許可したい場合は、ISRのなかでsei()を呼ぶか、ISR_NOBLOCKでISRを定義するかのどっちかにする。

割り込みを生じさせたくない場合はcli()を使ってglobal interrupt enableをオフにする。再開したいときはsei()を。

ピン変化割り込み

Pin-Change InterruptではPxyPCINTxが対応する。ただしxはアルファベットと数字で対応してるのでややこしい。PByはPCINT0,PCyはPCINT1、PDyはPCINT2みたいに。 割り込みベクタは全部のピンで共通なので、ISRの中でどのピンからの割り込みなのかを判定して処理しないといけない。

  1. 制御レジスタ(PCICR)で使いたい割り込みを有効化する。
  2. 使いたいピンをピンマスクレジスタで設定する。
  3. global interrupt enableをsei()で有効化する。

割り込みを受けるときは

  1. 同じバンクの複数のピンからトリガを受ける場合にはbit_is_clear(BUTTON_IN, BUTTON)のようにどのピンからの割り込みなのかを調べる。
  2. 同じバンクに一つしかトリガを受けない場合には、立ち上がりと立ち下がりの両方に反応することに注意。どちらなのかを確認する必要がある。

ISRで変数を操作したいとき

ISRは引数を取れないので、mainからもISRからもアクセスできるグローバル変数を宣言する。 ただし、その変数はvolataileを付けること。つけないと、一度もmain内で変更されない変数とみなされて、コンパイラが定数に変更してしまうことがある。 空のforループを回すときにも同じ事をする。

Chapter 9

タイマ

タイマにはノーマルモードとCTCモードがある。 ノーマルモードではカウンタがオーバフローするまで動作する。タイマの種類にもよるが255あるいは65535。 CTCモードではOCRnAレジスタで指定した値までカウントする。 ATMega168の場合はTimer1が16bit、そのほかは8bit。現在のタイマーの値はTCNTxに格納されている。

CTCモードの場合はTCCRxAレジスタWGM01を設定する。また、outputモードにする場合はTCCRxAレジスタCOMxA0を設定する。また、outputモードにする場合は Output Compare Resister OCRxAビットに

どのモードにせよ、プリスケーラを設定しなければ、タイマは動作しない。CSx2CSx1CSx0の値を、データシートの表にしたがって設定する。

CPUスピード

CPUスピードを変える方法には“ヒューズ”を書き換える方法と、ソースコードの中で設定する方法の2つがある。

この本のサンプルコードに付属するMakefileではmake set_fast_fuseすることで8MHz動作に変更される。戻すときはmake set_default_fuses。 そのほかにもAVRDUDEで設定変更ができるけど、例えばSPIEN-enable fuse bitを変更してしまうとSPIでのプログラミングができなくなったり(設定を戻すこともSPIではできない!)、CPUクロックソースを外部クロックに設定してしまったり(こっちはクロックや他のマイコンから1MHzの信号を印可してやればよいので、まだ対処しやすい)するので、注意が必要。

ソースコードで設定する場合には、Clock Prescalar Change Enableビットをセットしてから4クロック以内にプレスケーラの値を変更しないと行けない。これはけっこうやっかいなので、avr/power.hにクロック変更用のマクロがすでに用意されている。

#include <avr/power.h>
clock_prescale_set(clock_div_1);

などとすればよい。 power.hにはAVRに内蔵されている特定のモジュールの電源を落とすマクロなども用意されているので、省電力化したい場合には活用すると良い。