M.C.P.C. (Mamesibori Creation Plus Communication)

印刷屋から五反田のWeb屋に転職したCLのブログです。

漢字ROM代わりにnode.jsのCanvasで字形を取得

Qiitaのほうで、Raspberry Piのnode.jsで画像加工するためにnode-canvasを入れるっていうのを書いた。

qiita.com

なので、今後はインストールのところはすっ飛ばしコードばかり書く。

せっかくなので、Qiitaのほうで書いた漢字をバナーとして描画するコードに改良を加え、任意のフォントが指定できるようにしてみます。

作例に使ったmigu-1mは

Miguフォント : M+とIPAの合成フォント

より入手のこと。コンソール表示用日本語等幅フォントです。

'use strict';

// kanji.js:
// node.jsでテキストバナーを表示します。

// use libs;

var Canvas = require('canvas');

// Const

var WIDTH = 80;
var THRESHOLD = 0;

// 描画

var Image  = Canvas.Image;
var canvas = new Canvas(WIDTH, 16);
var ctx    = canvas.getContext('2d');

ctx.antialias = 'none';
ctx.textBaseline = 'top';
//ctx.font = '16px Sans-serif';
var Font = Canvas.Font;
var myFont = new Font('MyFont', 'migu-1m-regular.ttf');
ctx.font = '16px MyFont';
ctx.fillText("漢字ROM", 0, 0);
ctx.stroke();

// ピクセル走査

var imageData = ctx.getImageData(0, 0, WIDTH, 16);

for (var y = 0; y < 16; y++ ) {
  var text = '';
  for (var x = 0; x < WIDTH; x++) {
    // RGBa
    text += (imageData.data[(x + y * WIDTH) * 4 + 3] > THRESHOLD ? '0' : ' ');
  }
  console.log(text);
}

実行例はこちら。

pi@raspberrypi ~/test3 $ node kanji.js
 
       0    0          00
  0  0000000000  00000000000000     000000            0000         0        0
   0   0    0    00          00     0    000        00    00       00      00
     0000000000  00          00     0      0       00      00      00      00
 0   00  00  00  00000000000000     0      0       0        0      000    000
 00  00  00  00           00        0      0      00        00     000    000
   000000000000          00         0     0       00        00     0  0  0  0
         00             0           000000        00        00     0  0  0  0
     0000000000  00000000000000     0    00       00        00     0   00   0
   0     00      00000000000000     0     0        0        0      0   00   0
   000000000000         0           0     00       00      00      0        0
  0     0000            0           0      0        00    00       0        0
  0    00  00           0           0      0         000000        0        0
 0   00      00     00000
 
pi@raspberrypi ~/test3 $

Qiitaに書いたときの出力よりローマ字の形がよい。

指定するフォントファイルですが、鬼のようにセンシティブな取り扱いである商用DTPの世界のOpenTypeフォント群をしり目に、フォント・ドライバともに謎発展しているので、ともかく手持ちの日本語フォントで表示できるかどうか指定してみて、その後ライセンスを確認してがっかりしたりうれしがったりするって感じになると思います。

ピカリ館の単色LEDマトリクスパネルをRaspberry Piで光らす

akibaLEDピカリ館のLEDマトリクスパネルが2,380円で割とでかいのですが、

www.akiba-led.jp

これをRaspberry Piを使って光らす。(前回のArduinoでやったやつはこちら。)

使ったRaspberry Piは、Raspberry Pi B+、プログラミング環境はnode.jsです。ほら、node.jsにしておけば、サーバにしたりWebSocketで通信したりしやすいでしょ……

ハードウェア

f:id:C_L:20150823221733p:plain

注意ですが電源はしっかりアンペアの大きい5Vスイッチング電源を用意して、電源からRaspberry Piの5Vとパネルの5Vに分岐させるように。一応Raspberry PiをUSBにつないだときの5V端子からパネルにつないでもパネル1枚くらいなら光るけれども、パネル3枚全点灯でテストしたら、5V・4.6A位になったので、マジにやるなら30W級の5Vスイッチング電源を用意しましょう。パネル自体は全点灯時の消費電力は公称10Wで、パネル3枚の点灯時は5V/50Wのスイッチング電源を推奨しています。

仮配線にはこちらが便利。

akizukidenshi-ogp-injector.dtpwiki.jp

akizukidenshi-ogp-injector.dtpwiki.jp

akizukidenshi-ogp-injector.dtpwiki.jp

3.3V→5Vレベルシフトについて(後日談:このパネルではいらないことが判明)

あと、信号線がRaspberry Piから出る分は3.3V、LEDマトリクスパネルの仕様は5Vなので、途中に汎用ロジックICの74HC4050を入れて電圧を合わせてあげましょう(レベルシフタ)。ちょうど3.3Vの信号線が6本なので都合がよい。74HC4050は秋葉原に行ける人なら、鈴商とかマルツにあります。単一方向の電圧レベルシフタでいいのなら、74HC4050が便利です。(追記:鈴商の店舗が2015/11末に閉まると エルミタージュ秋葉原 – 電子部品パーツの老舗、「鈴商」が11月末に閉店)

akizukidenshi-ogp-injector.dtpwiki.jp

(後日談)パネルを入手して一度光らせてから、あらためて実装部品のラインを追っていったところ、コネクタのすぐ後に74HC245(Octal bus tranceiver; 3-state)が入っていることに気づきました。これはパネルを連結したときに信号線の電圧が下がっている場合電圧を上げてあげるためのものですが、結局低電圧→5Vへのレベルシフタとしても動作します。 データシートでは入力の電圧は最大Vccまでを入れても良いとなっているので、Raspberry Piの3.3VのGPIO出力をそのままパネルの入力に入れてみましたがちゃんと光るし、次のパネルの接続用端子の出力も5V近くまで上がっていましたので、正直74HC4050は不要でした。 74HC4050は、今回のパネルに使われていた74HC245などのバスバッファのような低電圧系→高電圧系の機能に加え、高電圧系の信号ピン出力から低電圧系の入力へ橋渡しすることができるので、単一方向レベルシフタとしては使いまわしが効く便利なICです。

ピカリ館単色LEDマトリクスパネル(HUB12規格)について

f:id:C_L:20150825013241p:plainf:id:C_L:20150825013252p:plain

このパネル、まずはA,B,LAT,CLK,DAT,OEが汎用ロジックICの74HC245(8チャンネルトランシーバ)を通ります。

コネクタABのラインが(74HC245を通った後)汎用ロジックICの74HC138(3 to 8 デコーダ)の入力につながり、出力側でソースドライバのFETを駆動するのに利用されています。また、DATラインとCLKLATが74HC595(シフトレジスタ)につながっていて、シンクドライバとして利用されています。入力データはDAT仕様書では/DATと書いてある)と負論理になっているのは、74HC595の端子が0Vになった時に、ソースドライバ側との電位差により吸い込みが発生し、LEDが点灯するからなのでした。

f:id:C_L:20150825185901p:plain

Raspberry Piで3線式シリアル通信(DAT,CLK,GND)をする場合、SPIインタフェースを利用できます。DATMOSI,CLKSCKに割り当てます。また、高級言語での実装を生かし多bitのデータ送信が一気にできる場合があります。今回利用したnode.jsのpi-spiは、node.jsの組み込みオブジェクトのBufferオブジェクトに構築したbit列をまとめて同期出力することが可能です。

パネルの表示シーケンスとしては、node.jsのpi-spiのコールバックにピン操作を固める都合上、

init {
    OE: L       // パネル消灯
}
loop {
    SPI転送(DATとCLKを使い128個データを転送)
    OE: L       // パネル消灯
    A  :L
    B  :L       // A=0, B=0 →ライン0を指定
    LAT:H       // ラッチ解除(シフトレジスタの出力ピン電圧反映)
    OE :H       // パネル点灯
    LAT:L       // ラッチ(シフトレジスタの出力ピン電圧固定)

    SPI転送(DATとCLKを使い128個データを転送)
    OE: L       // パネル消灯
    A  :H
    B  :L       // A=1, B=0 →ライン1を指定
    LAT:H       // ラッチ解除(シフトレジスタの出力ピン電圧反映)
    OE :H       // パネル点灯
    LAT:L       // ラッチ(シフトレジスタの出力ピン電圧固定)

    SPI転送(DATとCLKを使い128個データを転送)
    OE: L       // パネル消灯
    A  :L
    B  :H       // A=0, B=1 →ライン2を指定
    LAT:H       // ラッチ解除(シフトレジスタの出力ピン電圧反映)
    OE :H       // パネル点灯
    LAT:L       // ラッチ(シフトレジスタの出力ピン電圧固定)

    SPI転送(DATとCLKを使い128個データを転送)
    OE: L       // パネル消灯
    A  :H
    B  :H       // A=1, B=1 →ライン3を指定
    LAT:H       // ラッチ解除(シフトレジスタの出力ピン電圧反映)
    OE :H       // パネル点灯
    LAT:L       // ラッチ(シフトレジスタの出力ピン電圧固定)
}

こんな感じ。

ソフトウェア

OSとしては、Raspbian(wheezy)、プログラムは、node.jsで作りましたので、事前にraspi-configでSPIが使えるkernelドライバを有効にしておくこと、node.jsをインストールすること、npmでpi-spiとonoffをインストールすること、更にrootでの実行が必要となります。

node.jsのインストールは、OSのものはv0.6なので古すぎで、最低でもv0.10が欲しいところです。node.jsのサイトでは、v0.10がパッケージされて置いてあり、nodebrewとかnodeenvとかでインストールできるわけですが、せっかくなのでnode-armから入手できるv0.12.6(node_archive_armhf.deb)を入れます。

pi@raspberrypi ~ $ curl -LO http://node-arm.herokuapp.com/node_archive_armhf.deb
pi@raspberrypi ~ $ sudo dpkg -i node_archive_armhf.deb
(データベースを読み込んでいます ... 100%
(データベースを読み込んでいます ... 現在 77859 個のファイルとディレクトリがインストールされています。)
(node_archive_armhf.deb から) node を展開しています...
node (0.12.6-1) を設定しています ...
man-db のトリガを処理しています ...
pi@raspberrypi ~ $ node -v
v0.12.6
pi@raspberrypi ~ $

ライブラリのインストールはこんな感じ。

pi@raspberrypi ~ $ mkdir test
pi@raspberrypi ~/test $ cd $_
pi@raspberrypi ~/test $ npm install onoff pi-spi
\
> pi-spi@1.0.0 install /home/pi/node_modules/pi-spi
> node-gyp rebuild

make: Entering directory '/home/pi/node_modules/pi-spi/build'
  CXX(target) Release/obj.target/spi_binding/spi_binding.o
  SOLINK_MODULE(target) Release/obj.target/spi_binding.node
  COPY Release/spi_binding.node
make: Leaving directory '/home/pi/node_modules/pi-spi/build'

> epoll@0.1.13 install /home/pi/node_modules/onoff/node_modules/epoll
> node-gyp rebuild

make: Entering directory '/home/pi/node_modules/onoff/node_modules/epoll/build'
  CXX(target) Release/obj.target/epoll/src/epoll.o
  SOLINK_MODULE(target) Release/obj.target/epoll.node
  COPY Release/epoll.node
make: Leaving directory '/home/pi/node_modules/onoff/node_modules/epoll/build'
pi-spi@1.0.0 ../node_modules/pi-spi
└── nan@1.9.0

onoff@1.0.2 ../node_modules/onoff
└── epoll@0.1.13 (bindings@1.2.1, nan@1.8.4)
pi@raspberrypi ~/test $ 

プログラムはこちら。

gist.github.com

www.youtube.com

んで、node.jsなんですが、非同期処理・シングルスレッドがウリのnode.jsで同期処理やるためにコールバックで自分自身を再帰呼び出しするように作ってみましたが、Raspberry PiのOS自身の処理とかネットワークIO処理とかに巻き込まれループが一定の間隔で動くわけがなく、4ライン毎のダイナミック点灯の間隔が一定にならないのでした。

ピカリ館の単色LEDマトリクスパネルをArduinoで光らす

akibaLEDピカリ館のLEDマトリクスパネルが2,380円で割とでかいのですが、

www.akiba-led.jp

これをArduinoを使って光らす。

使ったArduinoは、Arduino Duemilanove、Arduino IDE は1.0.6です。うちはArduinoは基本的にあとでATmega328Pで動かせるようにするので割と古いArduino使っています……

ハードウェアについて

注意ですが電源はしっかりアンペアの大きい5Vスイッチング電源を用意して、電源からArduinoの5Vとパネルの5Vに分岐させるように。一応ArduinoをUSBにつないだときの5V端子からパネルにつないでも光るけれども、LEDが最大128個同時に点灯する可能性があり(ダイナミック点灯だから512個全部は点灯しない)、最悪時は数字的に無理をしているのでやめよう。

f:id:C_L:20150809023929p:plain

仮配線には以下があると便利です。

akizukidenshi-ogp-injector.dtpwiki.jp

akizukidenshi-ogp-injector.dtpwiki.jp

ピカリ館単色LEDマトリクスパネル(HUB12規格)について

f:id:C_L:20150825013241p:plainf:id:C_L:20150825013252p:plain

このパネル、コネクタABのラインが汎用ロジックICの(74HC245 を通った後)74HC138(3 to 8 デコーダ)の入力につながり、出力側でソースドライバのFETを駆動するのに利用されています。また、DATラインとCLKLATが74HC595(シフトレジスタ)につながっていて、シンクドライバとして利用されています。DAT仕様書では/DATと書いてある)と負論理になっているのは、74HC595の端子が0Vになった時に、ソースドライバ側との電位差により吸い込みが発生し、LEDが点灯するからなのでした。

Arduinoで3線式シリアル通信(DAT,CLK,GND)をする場合、SPIインタフェースを利用できます。DATMOSI(pin11),CLKSCK(pin13)に接続します。ArduinoのSPIは、1回につき8bitの転送が可能で、それ以上のビット列を送る必要がある場合は、複数記述、またはループで実現します。ビット列が細切れに送信されることになりますが、3線式シリアル通信はSCK(クロック信号)による同期式なので問題はありません。

ソフトウェアについて

gist.github.com

LAT下げておいて、シフトレジスタに8bit値を16回転送してOE下げてLAT上げてOE上げてLAT下げる。

4ライン毎のダイナミック点灯になっているので頑張って切り替えるっつーかんじでした。

シャッタースピード適当だったのでご覧の有様だよですが人間の目レベルの動画では普通に均一に光りました。

当然次に進むのは表示部をタイマ割り込みにしてVDP化するっていうことだと思うけれどもVRAM操作時ちらつかないようにするために裏VRAMとかいう話になるし、回転とかいうとアフィン変換の話になって深みにはまりそう。

なお、お店に行けばWindowsで制御できるコントローラ基板売っているのでそっちの方がArduino買うより安い。まあなあ。

実は、アリババに鬼のように安価でたくさん同じ規格のLEDパネルが出ているのだけれども($5とか)、中国通販で買う手間と時間を考えると、ピカリ館に行ける人はお店で買えばいいし、国内でも通販で買えるので、急にLEDをペカペカしたくなった場合、思い立ったが吉日なのでいいのではないかと思います。中国通販だと、外国の方と英語でクレーム伝えて処理してもらうのけっこう疲れるし、香港で謎の渋滞とかわけわからんしな。

Adobe Creative Cloudオンライン販売は2015年10月から消費税課税になると思うよ

Amazon Kindle電子書籍の消費税不課税が2015年10月より課税になると今年初めにニュースが出ていたやつがどうなったのかなーと探していたがおそらくこのPDF資料で国外企業のデータ販売ビジネスにおける徴税のガイドラインが出ている。

消費税のあらまし/平成27年6月国税庁

f:id:C_L:20150727234555j:plain

ということで、法律だから平等に適用されるとすると、アドビストアのオンライン販売は、アイルランド法人が販売するってことで、パッケージ製品は消費税課税、ダウンロード販売製品は消費税不課税っていう現状から2015年10月以降は両方とも課税に切り替わると思われます。

実はアドビに消費税上乗せで振り込んじゃって不課税ってなにねっていうことで調べた。

(2015-07-27 23:57追記)

アドビに不課税の根拠をメールで聞いたら、上記の資料と、アドビの「特定商取引に関する法律に基づく表示」のページのURLをつけて、丁寧な説明をしていただきました。

特定商取引に関する法律に基づく表示

2015年10月になったら改訂されそうなので、改訂前はこうだったんだよ、ていう資料になると思うので画像で置いておきます。

f:id:C_L:20150728001524p:plain

Pentium G3258とH81/H87/H97チップセットマザーボードでWindows 10 Insider Preview 10162がブートできない

追記:正式版までには修正されたようです(うちの環境では直ってる)

普段使いのマシンのダウンサイジングを画策していて、とりあえずMicroATXでH87マザーボードPentium G3258で組んだシステムをMiniITXのH81マザーボードPentium G3220にしたのですけれども、もとのマシン(つまりH87+Pentium G3258)に折角だからWindows 10を入れてみようと思ったら、Windows 10 Insider Preview ビルド 10162 ISOだとUSBフラッシュからブートしない。CD-Rからもブートしない。

しゃーないので、MiniITXのマシンのほうでUSBフラッシュとHDDをつなぐと、普通にブートして、インストールできる。このHDDをMicroATXのマシンにつなぐと、ブートしない。

「ありゃあ、マザボ壊したかな?」と思い、ドスパラからH97マザーボードを調達して、MicroATXの筐体に組み込んだのだけど、ブートしない。

「???」となって、UbuntuとかCD-Rに焼いてブートさせると、普通に起動する。

ここで、海外のサイトをあたると、どうもブートできないといっている人たちがみな「Pentium G3258」を使っているっぽい印象を受ける。マザボじゃないのか!

これを受けて、MiniITXのマシンのPentium G3220をひっぺがして、MicroATXのH97マザーボードに組み込みなおしたら、ブートした!

マザーボード チップセット CPU Win10 10162ブート可
ASRock H81-ITX H81 Pentium G3220
ASRock H81-ITX H81 Pentium G3258
ASRock H87M H87 Pentium G3220
ASRock H87M H87 Pentium G3258 ×
ASRock H97M-Pro4 H97 Pentium G3220
ASRock H97M-Pro4 H97 Pentium G3258 ×

○:ブート可 ×:ブート不可 -:試してない

マザボ買わなくてもよかった。メモリスロット増えたのでそういう方向で納得しよう。

それにしても、Adobe Creative Suite CS4の開発途中でPentium 4以降でしか動かなくなって、PentiumIIIのマシンだとベータ番号の途中でベータテストに参加できなくなったとかいう聞いた話を思い出した。

今回のWindows 10とPentium G3258の組み合わせは、定格周波数で使っていてブートしないっていうのだから、さすがに直ってくれるとは思います。

G3258(Anniversary Edition 3.20GHz) LGA1150

G3258(Anniversary Edition 3.20GHz) LGA1150

追記:

追記:

LGA1150対応H81/H87/H97/B85チップセットマザーボードでは、通常は倍率変更可能CPUのオーバークロックができないのですが、一部の製品では、メーカー独自機能としてオーバークロックができるようになっています。この機能が、「Windows 7 for x64-Based Systems 用更新プログラム (KB3064209) 」により無効になるとのことです。Windows 10 IPでの更新では、ブートアップ中にリスタートの動作になるということのよう

ソースは2ch

コメントでいただいた情報の通り、ASRock H97M-Pro4マザーボードで、Pentium G3258のコア使用を1にすることで起動できています。

タイトルを変更 「Pentium G3258(オーバークロック用CPU)でWindows 10 Insider Preview 10162がブートできない」→「Pentium G3258とH81/H87/H97チップセットマザーボードWindows 10 Insider Preview 10162がブートできない」

(2015-07-28 01:21追記)

Windows 10 TH 10240にいくつかのhotfixが適用された状態(msinfo32では"10.0.10240.16392"となっている)で、G3258での2コア&オーバークロック設定でブートできてます。正式版までに直ったね!

Linuxの/tmpディレクトリをリアルタイム監視(Perl使用)

Linuxの /tmp ディレクトリには様々なアプリケーションやデーモンが一時ファイルを格納する場所として使うわけで、ここへの書き込みや読み取りが頻繁だとシステムのスループットが下がったりします。

いまどきは、/tmpをLinuxのRAMディスクファイルシステムであるtmpfsに割り当てたり、システムディスク自体をSSDの様な高速なストレージにするみたいな方法でアプリケーション側の改変をせずに高速化できたりしていますが私の目の前にあるのはメモリ的に余裕がなく、なおかつディスクのIOPSがあまりよくない残念なサーバだったりするわけで、あろうことか/tmp に300MBも一気に書き込む奴がいるのでそのタイミングでシステム全体のパフォーマンスが落ちてヤバイ、ていうことになり、犯人捜しをするための、/tmp を監視するスクリプトを作りました。

github.com

実行すると、こんな感じになります。

$ carton exec perl watchtmp.pl
2015-06-28T06:46:44     access  /tmp/#sql_4da_0.MYI     1024    1024.000B
2015-06-28T06:46:44     access  /tmp/#sql_4da_0.MYD     43410900        41.400MB
2015-06-28T06:46:46     access  /tmp/#sql_4da_0.MYD     33128   32.352KB
2015-06-28T06:46:51     access  /tmp/#sql_4da_0.MYI     1024    1024.000B
2015-06-28T06:46:51     access  /tmp/#sql_4da_0.MYD     929760  907.969KB
2015-06-28T06:46:51     access  /tmp/zbxTMP21327        2384    2.328KB
2015-06-28T06:47:01     access  /tmp/#sql_4da_0.MYI     1024    1024.000B
2015-06-28T06:47:01     access  /tmp/#sql_4da_0.MYD     39427836        37.601MB
2015-06-28T06:47:05     access  /tmp/#sql_4da_0.MYI     1024    1024.000B
2015-06-28T06:47:05     access  /tmp/#sql_4da_0.MYD     2097152 2.000MB
2015-06-28T06:47:05     access  /tmp/#sql_4da_0.MYI     1024    1024.000B
2015-06-28T06:47:05     access  /tmp/#sql_4da_0.MYI     1024    1024.000B
2015-06-28T06:47:05     access  /tmp/#sql_4da_0.MYD     1351680 1.289MB
2015-06-28T06:47:05     access  /tmp/#sql_4da_0.MYI     1024    1024.000B
2015-06-28T06:47:06     access  /tmp/#sql_4da_0.MYI     1024    1024.000B
2015-06-28T06:47:06     access  /tmp/#sql_4da_0.MYI     1024    1024.000B
...

PHPのイベント駆動よくわからんかったので慣れたPerlで作ってしまった……

一時ファイルは、生成されてから消えるまでが鬼のように短時間なので、/tmp を watch -n 1 ls -al /tmpで1秒ごと監視していてもテンポラリファイルが観測されることが稀ですが、今回作ったのは、Linuxのinotifyでファイルシステムの変更時にイベントを取るようにしているので、割と引っかかってきます。

アプリケーションによっては、テンポラリの生成のアルゴリズムが違うので調整が必要。具体的にはmodifyで徐々にファイルサイズが成長してきた直後にaccessがくるタイミングを見て表示しています。ですが他のタイミングで見たいならスクリプトの中でいじればいいと思います。

今回は、MySQLが巨大テンポラリファイルを生成しているのが観測されました。そのタイミングでMySQLのPROCESSLISTで怪しいSQL文が特定できたので、それを修正することで対応ができたとさ。

それにしても、巨大テンポラリをHDDのようなストレージに書き出すとどんだけストールするか実感してもらいたいと思って具体的な数字をもって見せてみたのですが、今どきの子は、パソコンを自作していないからHDDの転送速度に関する規模感を持っておらず、何も効果が無かったのでした。

Chefのntp cookbook使っている人はpull&再適用しなくていいんですかね

前回のうるう秒挿入があった2012年7月1日は、私はまだ失職中(失業保険切れる寸前)だったため「うるう秒かぁ、NTPとかでなんとかなるのかなー」とか眺めていたら全国あちこちでサーバ不調が出てきてビビった。

で、今回は2015年7月1日9:00なんですが、ntpdの設定って割と簡単なのでさすがに自分でやることもあるまいとChefのopscode-cookbooksのntp Cookbookを使っていた人もいるかもしれません。

qiita.com

さて、ntp Cookbookには、「うるう秒ファイルが内包されている」っていう問題がありまして、これは原子時計由来の時刻と地球の運動との誤差を測定した結果その都度新しく配布されるものだからさすがに勝手に更新してくれないファイルなので、うるう秒ファイルが更新されたCookbookを調達して再適用しなくてはならないのです。

もっとも、CentOSの標準のntpdインストール時のデフォルトのconfだとleapfile指定は書いていないし、

ConfiguringNTP < Support < NTP

によればNTPサーバがうるう秒フラグを配信してくれない場合の予防線のような気がしますけれども、兎に角、opscode-cookbooksのCookbookとして提供されていたリポジトリでは2015年5月15日にntp.leapsecondsが更新されているっつーのは事実ですね。

ntp/ntp.leapseconds at master · gmiranda23/ntp · GitHub

ところで、その2012年のうるう秒から1か月後に入社した会社は、サーバ管理者が夜逃げしちゃった会社だったのですが、残された管理者メモには割と作業ログが詳しく書かれていたのに2012年7月1日の出来事には何も書かれていなかった……

2015年7月1日 9:00を何とか乗り切ろう!