投稿

11月, 2020の投稿を表示しています

Type 3 フォントが埋め込まれた古い PostScript データになっている論文をそこそこ綺麗な PDF にする

これを使う。 CTAN: Package pkfix 以下利用例(論文ではないけれど) $ pkfix-helper Lions\ -\ 1977\ -\ Lions\'\ Commentary\ on\ UNIX®\ 6th\ Edition.ps lions-helper.ps Reading Lions - 1977 - Lions' Commentary on UNIX® 6th Edition.ps ... done. Total number of Type 3 fonts encountered: 16 Bitmapped fonts are typeset at 300 DPI. Finding character widths ... done. Reading TFM files ... done (103 TFMs in 193 scaling variations). Matching fonts: Processing Fn ... done (cmsl10 @ 1X, mismatch=0.53898). Processing Ff ... done (cmtt10 @ 1X, mismatch=0.19819). Processing Fg ... done (cmbx12 @ 1X, mismatch=0.36583). Processing Fi ... done (cmbx10 @ 1X, mismatch=0.42627). Processing Fk ... done (cmti10 @ 1X, mismatch=0.20169). Processing Fj ... done (cmbx12 @ 1.2X, mismatch=3.41283). pkfix-helper: Best match for Fj is rather poor Processing Fe ... done (cmssi10 @ 1X, mismatch=0.37342). Processing Fo ... done (cmr17 @ 1X, mismatch=0.12955). Processing Fb ... done (cmsl10 @ 1.2X,

時刻取得・時間計測

イメージ
本稿では,Linux カーネルで扱える時計のうち,PTP(Precision Time Protocol)という IEEE 1588 で策定されている高精度な時計をクロックソース[1]にする場合について追っていこうと思います。 Linux における時刻同期:NTP と PTP Linux や Windows,macOS といった現在の OS のシステムクロックは,一般的にはインターネットを通じて NTP(Network Time Protocol)が同期するようになっています。 NTP を使っていればインターネットに接続されている際には大きく時刻がズレることはなく,たまにネットワーク接続が失われていてもクォーツ時計は安物の振り子式ほど時間はズレません。 では,NTP は設計としてどのくらいの誤差が考えられているのでしょうか。NTP の設計者 David L. Mills 博士は自身が実装した PDP-11 向けの OS「Fuzzball」上の実験でそれを示しており,答えは数十ミリ秒です[2]。現代のマシンと OS ならば数ミリ秒までは迫れるかもしれません。ちなみにこの論文が発表された翌年には NTP version 2 が RFC から発行されています[3]。(現在は version 4。) NTP は日常的な利用には十分な精度があります。しかし,マイクロ秒やナノ秒といった単位での高精度さが目的ではありません。日本の NTP のサーバーとして有名な NICT(情報通信研究機構)は日本標準時の決定をしており原子時計も所有していますが,インターネットを介して NICT などのサーバーにアクセスしている時点でミリ秒やひどいときは数秒の遅れが発生するでしょう。LAN に NTP サーバーがあったとしても,アルゴリズムとして数ミリ秒の遅延を許容しています。そこで高精度な時刻同期のために存在するのが PTP です。 PTP とは PTP とは,ネットワークデバイス内の時計を高精度に同期する仕組みです。グランドマスタークロックと呼ばれる時計をマスターとして設置し,LAN の NIC たちがそれを元に同期するといったような仕組みになります。これによって,パケットのタイムスタンプをハードウェアで高精度に打つことが可能になったり,この PTP をクロックソースとし

コードカヴァレッジ計測

イメージ
コードカヴァレッジとは あるプログラムコードについて実行した際に、実際にコード中の命令を何割実行したかを数値に表したものを言う。 計測手法 方法は様々である。たとえば、Linux kernel の fuzzer である Google の syzkaller を用いれば、ユーザーアプリケーションへの入力を自動で変化させつつコードカヴァレッジを確認させてくれる。また、Linux kernel のコンフィグ自体にもカヴァレッジについてのコンフィグが存在する。これは masami256 さんのブログなどが詳しい 。 今回は gcc に組込みの手法でカヴァレッジテストを実行する手法についてメモをする gcov gcov がカヴァレッジ情報を .gcov という拡張子でダンプすることでカヴァレッジを確認できる。このコマンドは gcc に附属している。 使い方を見ていく このようなソースコードを用意し、次のようにコンパイルする。 $ gcc -fprofile-arcs -ftest-coverage -o cov_test cov_test.c すると次のようなファイルが用意されるはずだ。 $ ls cov_test cov_test.c cov_test.gcno これでカヴァレッジテストの準備は完了した。では、実際にカヴァレッジテストを行なってみよう。まずは、何も引数を与えずコンパイルしたコードを実行する。 $ ./cov_test ./cov_test: you need to pass arguments at least 1 $ ls cov_test cov_test.c cov_test.gcda cov_test.gcno .gcno に加えて .gcda が追加されている。このファイルがカヴァレッジテストの結果を格納している。ここで、 gcov コマンドを用いてみよう。 $ gcov cov_test.gcda File 'cov_test.c' Lines executed:38.89% of 18 Creating 'cov_test.c.gcov' cov_test.c というコード全体が 18 行で、そのうち 38.89% が実行されたということを物語っている。また、