技術書典で出会った良書:12月21日

Microsoft Excel

みなさんはMicrosoftの作っている、Excelというソフトを知っていますか?
そう、皆さんの大好きなスクリプティングエンジンですね。おまけの機能として表計算を行うことも出来るそうですが、そちらに関してはあまり詳しくないため解説を割愛致します。

Microsoft Excel の スクリプティングエンジンとしての優秀なところは:

  • クライアントパソコンに入っていることが多いです。Python3で作業を行いたい気持ちは分かりますが、それを実現するにはたくさんの会議と何人ものハンコが必要となります。少なくともうちはそうです。
  • ネットワーク閉鎖環境でも動きます。pip install xxxやnpm install xxxが恋しくなるかもしれませんが我慢です。電子カルテの動作する環境など、ネットワーク接続されていない環境でも作業を行うことが出来ます。
  • バージョン間の互換性が高く、一度作ってしまえば割と長い間変更なしに動かすことが出来ます。
  • 動作を変えたければ、ソースコードをその場で直して再実行できます。
  • 行える作業の範囲が限定されますが、簡単な作業であればmacOSと兼用で動作するコードを作成することが出来ます。

Excel 裏リファレンス

そんなMicrosoft Excelのスクリプティングエンジンとしての真価を発揮するための最強の一作が、Southern ParadiseさんのExcel 裏リファレンスです!

表紙

内容

Excelの伝統的関数・VBの機能・Excel VBAの機能などの情報が分かりやすく乗っています。

公式なヘルプによっても乗っていますが、最近のExcelのヘルプはオンラインになっており、ネットワーク閉鎖的な環境では、こういった内容が見通しよく一覧になっているのがすごく助かります。スマホで無理すれば探すことは出来ますが、この辺の内容に関しては書籍の方がだいぶ楽です。

後半はもっと高度な内容で、オブジェクトを駆使してExcel VBAだけでは行えない作業が紹介されています。

ここまでExcelのスクリプティングエンジンを極めた書籍があっただろうか……

ここまで行えるのか!とびっくりするほど多岐にわたる作業が乗っています。
より高度な作業を求める方にも、Windows APIでの作業例も載っているためぴったりです。

ご購入はとらのあな通販で行えるようです!
不思議なダイアログが出てきますが、おそらく素人が触ると危険な内容だからでしょう。

見たことのないダイアログ

おまけ

ぼくのExcelテンプレートファイル。ExcelはRPAとしても優秀なソフトなんですよ。

Universal Serial Bus (USB)

この記事は、 Programmer’s Pocket Reference から内容を抜粋して再度編集したものです。

概要

USBはコンピューターに簡単に、そして様々な機器を接続できるようにするために作られた規格である。最新のUSB 3.2 + USB PDでは、20Gbps ・20V 5A(100W)にまで対応している。互換性が保たれており、USB 1.0 のキーボードはUSB 3.2対応のポートでも問題なく使用することができる。

詳細

現在接続されている機器の詳細を調べたい時

Windows

Microsoftによって公開されているUSBViewが便利である。

macOS

$ ioreg -p IOUSB -l -w 0
$ system_profiler SPUSBDataType

Ubuntu

$ lsusb -v # see bDeviceClass

デバイスクラス

機器の機能を識別するためにデバイスクラスが使用される。よく使われるデバイスクラスはOSによりサポートされており、標準ドライバが準備されている。

コネクタとケーブル

USB 3.0ではMini端子はdeprecatedとなり、端子を増やしてSuperSpeedに対応したA/B端子と横長のMicro B(SS)端子が登場した。2014.08にはUSB Type-Cが規格制定され、今後主流になっていく。USB延長 ケーブル(Cオス-Cメス)や、USB Aオス-USB Type-Cメスなどは市販はされているが、規格上禁止されているものであり注意が必要である。

Battery Charge

USBでは、標準では5V 500mA(USB 2.0)まで給電が可能であった。USB BC 1.2では5V 1.5Aまでの給電に対応している。その他、同様の目的のものに Quick Charge (Qualcomm)があるが、こちらは標準規格ではない。

USB 3.0/3.1/3.2

現在は、USB3.0/3.1は USB 3.2 Gen nxn (下表参照)という名称になっている。Enhanced SuperSpeedという用語が使われることがあるが、こちらは旧USB 3.0の SuperSpeed(Gen1x1) と、旧3.1以降の SuperSpeedPlusの両方を合わせたものである。

技術書典 7 (2019/09/22) に出展しました – 感想と次回に出典される方に向けて

技術書典に初めて出展できました。おかげさまで売れ行きも良く、完売することが出来ました。

今後の技術書典に出展されるサークルの方々のためにも、初参加で気がついた点を書いておこうと思います。

今回販売したもの

Programmer’s Pocket Referenceというプログラマ向けの情報を集めたA5サイズのマニュアル本です。

何回やっても毎回ググってしまう内容や、ググってもなかなか正しい情報が出ないものを中心に、約200ページ書き下しています。

形態としては、電子版 + 印刷版 あわせて 1000円、という形で販売し、200部すべてを完売致しました。(ありがとうございます!)

原稿

今回200ページ超の原稿となりましたが、第1部は以前から書きためたメモ類があったことからそこまで時間はかかっていません。どちらかというと時間がかかっているのは第2部で、こちらは仕様を確認しながらになるので、だいぶ時間がかかりました。
書いてて思ったのは、Googleは便利だが、一次情報にあたるのは大事、という事です。

表紙はUnsplashの写真を使用しました。これは非商用/商用問わず、著作権表記や許可申請なしで、編集・使用・再配布が自由に使用できる、1,000,000以上の写真を集めた素材サイトです。

“Computer”で検索してみたところ

デザインセンスがあれば良い物が出来るのかもしれないですが、良い写真はそれだけでもあなたの本の見栄えを良いものにしてくれます。

印刷

原稿を書くのと並行して決めていかないといけないのが印刷所をどこにするかです。

選択肢として考えたのは

の、3カ所です。

上の2カ所は技術書典のバックアップ印刷所になっていることあり、技術書印刷になれているだろう&搬入などもスムーズだろう、ということで候補に入れました。

OneBooksさんは、ちょっと毛色が違って、1冊でも100冊でも、モノクロでも全ページ フルカラーでも1冊当たり単価が変わらない、というおもしろい設定です。
ただ、書いているうちにページ数が増えたことと、そこそこの部数を出せそうな目星がついて単価が高くなってしまうことから候補から外れることになりました。
今後、100ページくらいで少部数のフルカラー本を書くことがあれば、こちらにお願いしたい、と思っています。(例えば、A5 100ページ 全ページ フルカラーで単価675円)

最終的に印刷は、日光企画さんにお願い致しました。設定のミスで裁ち切りが足りないとか、表紙やXXページのここは大丈夫ですか?とわざわざご確認を頂き、こちらに頼んで良かったな、と思っています。

最終的な価格は 204ページ x 200部(表紙のみフルカラーのスタンダードフルカラーセット + マットPP)で、107,640円でした。

これで、技術書典自体の参加費 7000円も併せて、1冊当たりの単価が約570円となります。

印刷代を安くするためには

  • 印刷の質を下げる (例えば、カラーを諦めてモノクロにする、一回り小さい紙のサイズにする、紙の種類を変える、ページ数を減らす)
  • 部数を増やす

この二つがすぐに思いつく方法ですが、もっと効果的な方法として、早く入稿して早割を受けるという方法があります。僕は無理でしたので通常価格です。技術書典などのイベントは通常とは違う締め切りが設定されることもあるので気をつけましょう。

部数

なにしろ初出典ですので何部刷って良いのか全く見当が付きません。

少なく見積もりすぎて、単価が高くなって全部売れても採算ギリギリの上に、欲しいと思って来てくれた人に行き渡らないというのも困ります。

かといって、多く見積もりすぎて、売れ残った上に赤字、というのは避けたいです。

「技術書典 部数」でGoogle検索する日々が続きますが、なかなか部数の決断が出来ません。

最終的に部数を決めるのに大いに役に立ったのが、以下の3つです。

運営レポートでは、新刊持ち込み 中央値 100部 という記載があります。「持ち込み」ですので、販売とは違いますが、売れ残った物は少しであれば”BOOTH”や”とらのあな”に委託をすることが出来ますし、会場にはヤマト運輸が来ているので、最悪の場合でも着払いで家に送ることが出来ます。

被チェック数は、技術書典のマイページから確認できます。僕の被チェック数は、@yagitchさんの被チェック数予想の200のラインを少し超えているところでちょうど推移していました。

被チェック数

ただ、印刷所の締め切りの9月17日の時点では被チェック数は100にも到達していません。上のグラフを見てもらって分かるとおり、17日の時点までの推移で、最終的に200に到達するのか確信がもてず、この時点で部数を決めないと行けないのはだいぶ勇気が要りました。

あとは、印刷価格との兼ね合いです。

仮に100部印刷(204P x 100 + マットPP)だと88,680円です。1冊1000円で売るなら、これだとサークル参加費を考えて96部売れて採算が取れる計算です。見本誌2冊と立ち読み本2冊、自分用にも1冊確保したいと考えると、完売しても黒字になりません。

200部印刷した場合の印刷費用は、上記の通り107,640円でした。このラインなら、同じ値段で売るとしたら、サークル参加費を考えても115部売れれば採算が取れることになります。

100部だろうが200部だろうが、あまり売る必要の部数は変わらないな…と思ったところで、迷ったのですが、200部印刷することにしました。

もちろん、単価を上げて1500円にする、電子版に内容を回して印刷するページ数を減らす、という方法もありです。

当日のブースの設営

あって良かったもの

A4クリアファイルに入れた見所シート と 100円均一のイーゼル

これはあって良かったです。事前チェックなしで歩いていると思われる方が、このシートを見て立ち止まって見本誌を手に取って頂きました。

もちろん、サークル名や書名から内容が分かるのなら良いのですが、「Nanoseconds Hunter」の「Programmer’s Pocket Reference」なんて聞いても何を売っているのか分かりません。ふと立ち止まって「見てみようかな」と思えるようになるものは必須です。

反省するとしたら、立ち止まらなくても通りすがりに気が引けるようもっと大きな文字で印刷をすれば良かった。ただ、A3だとさすがに邪魔だったかな…。

ちなみに裏はこうなっています。

値札 (カードスタンド)

これもあって良かったと思います。 “簡単後払い”のQRコードを付けておいたので、複数の方が同時に購入を希望されたときにも対応できました。

反省点としたら、QRコードはできるだけ上に付ければ良かった。机の上に立ててある物の下部にQRコードがあってもスマホからはすごく読み込みにくいです。

「見本誌」と書いたシール

表紙が白ならマジックで書けば良いのですが、黒の表紙にしたのでシール必須でした。名刺サイズのシール(プリンタに差し込むやつ)があれば便利かも。

あの布」というのが人気らしいけど理由が分かった。100円均一のポーチに1000円札を入れてたんですけど、机の上に置いておくのは危険だし、かといっていちいちカバンにしまうのも手間だし、あのポケットにはそういう意味があるんですね。あとは、前から在庫が丸見えなのもちょっと恥ずかしかったです。

写真では、布を敷いているように見えますが、これは実は100円均一のカーテンです。机にちょうどのサイズだったので、これに滑り止めをホッチキスで何カ所か留めて、くるくるとして持っていきました。

あとあって良かったもの

  • お札入れるB5位のポーチ
  • A4の普通のコピー用紙
  • マジック・ボールペン
  • モバイルバッテリー
  • A5透明ブックカバーを見本誌に付けようと思ってたけど持っていくの忘れた
  • 凍らしたお茶
  • カロリーメイト ウェダーインゼリーの方がよかったかも
  • 持って行ってなかったけど、レジ袋みたいなの1枚あればゴミを入れるのにちょうど良かったはず!

電子版 (ダウンロード版)

今回、書籍 + 電子でのセットを基本としました。というのも、こういうアンチョコ本は是非卓上において欲しいな、と思ったからです。もちろん、セカンドディスプレイやiPadのSidecarに表示してもらうのもうれしいし、今後はアップデートもして行きたいので電子版もセットにしています。

電子版で多いのが、書籍にパスワードを記載 → BOOTHで暗号化zipにデータを入れて配布、という方法かと思います。これでも良かったのですが、アップデートを自分で管理したいので、自分のウェブサイトにへのリンクを書籍の最終ページに記載することにしました。もちろん、簡単後払いのかたはDLCとしてダウンロードすることも出来ます。

認証は懐かしのマニュアルプロテクトでのダウンロードです。あまり最近使われてない方法なので一応説明すると、アプリのインストールの途中で「説明書 10ページの一番下に並んでいる記号を左から順番に入力してください」とか出て、入力しないとそこから進まない、ってのが昔のゲームとかであったのです。

pdf自体にDRMを掛けたくなかったのと、共通パスワードだと万が一漏れてしまったときに対応が難しくなること、アップデートをしたいので簡単後払いのDLCだけだと対応が難しいこと、冊子ごとに違うシリアルを記載するのは手間すぎる、ということで採用致しました。

冊子が売り切れで、電子版のみで同価格となっているにもかかわらず御購入して頂いた方、本当にありがとうございます…。よろしければ、ダウンロードカードを大切に持っておいてください。今後も技術書典に出展出来たら、何らかの形で埋め合わせが出来れば…。

購入者詳細

購入頂いた人数は、現金払いで101名、簡単後払いで111名で、ほぼ1:1の割合でした。

200人を超えていますが、前述の通り電子版のみを御購入頂けた方がいらっしゃるのと、日光企画から頂いた分に予備分が含まれているからです。何冊予備があるのか、箱を開ける前に確認しておけば良かった…。

購入頂いたタイミングですが、14時までが圧倒的に多かったです。あと、15:30からは書籍版が売り切れたので、一気に見てくれる人も少なくなりました。そして、Cブースの立ち読み本コーナーで見て、わざわざこちらまで来て頂いたのに売り切れだった方、申しわけありませんでした……。

violin plot: V1は時間です。

技術書典の後

売り切れとなったことや、遠方で技術書典に来れなかった方のためにBOOTHに出すか、次の技術書典はどうするべきか、いろいろ考え中です。ホントは早い内に色々やった方が良いと思うのですが、本業がもうちょっと落ちついたらまたアクションを起こそうと思います。

技術書典 7 (2019/09/22) に出典致します。

池袋サンシャインシティで2019年9月22日に行われる、技術書典 7に出展致します。

サークル名「Nanoseconds Hunter」で、「し22D」に配置されます。

頒布情報:Programmer’s Pocket Reference

 プログラマー・エンジニア向けの情報を見開きサイズに情報を凝縮して、内容をまとめています。

第1部: コーディング



 第1部では、プログラミング言語同士を比較できる形で、文法・仕様やイディオムをまとめました。
 いままでの書籍にはあまりない、それぞれの言語の特徴や違いをつかむことができる書き方になっています。また、多くのプログラマー・エンジニアは精通している言語をお持ちだと思いますが、慣れていない言語でどう書けばいいのかを調べたい時や、いつも使用しない言語のアプリケーションのコードを読む必要ができた時にも役に立つことと思います。



第2部: 開発のメモ

 第2部では、コンピューターを使用する際に知っておくと便利な知識・必要な情報を見開き形式でまとめました。
 インターネットを調べると旧仕様の内容が検索で上位に出たり、Googleで検索しにくい単語(例: 正規表現で「+」の意味するところは?)を確認する時にも便利だと思います。また、ネットワークが繋がらない状態で作業をしないといけない時や、トイレでの読み物にも役になってくれると思います。

体裁と価格

紙の本(表紙のみカラー、A5 白黒を予定) と 電子版 (PDF) を 併せて配布できたらと思っています。価格は、印刷部数をまだ検討中ですので決まり次第記載致します。(紙 + 電子セットで1000円よりは高くならないはずです。)

是非チェックのほどよろしくお願い申し上げます。

Arduinoで温度計を作ってみた

Arduinoの登場のおかげで、電子工作の敷居がぐっと下がりました。
今回、Arduinoで温度計を作ったので、メモ代わりに経過を記載しておきます。

注意:この記事では、私が初めて行った電子工作について、困った点・分かり難かった点を備忘録がわりに書いているものです。

プロトタイプ作り

まずは、ブレッドボードとArduino Mini (正確にはその互換品)でプロトタイプを作成します。作成に当たって必要と考えた機能は以下の通りです。

  • 現在の温度・湿度を表示する機能
  • 気温の経過をグラフで表示させる機能
  • 上記を、ボタンで切り替えを行える

この機能を実現するために、まず以下の部品を準備しました。

  • Arduino Nano または 互換品
  • DHT-11
    • 温度を測るのに使います。
    • モジュール化されている物(抵抗がすでについている物)でも、そのままの物でもかまいません。
    • Amazonで購入(173円)することもできますし、秋月電子(Web, 実店舗)などでも購入することができます。
  • I2Cで接続するディスプレイ
    • 3.3V-5Vで動作する物を選ぶと後から便利です。
    • Amazonでこちら(1個440円)を購入しました。
  • ブレッドボード・ケーブル・コンデンサ・抵抗・スイッチ

これを用いての、ブレッドボードでの組み立てとコードの作成を行いました。
(コードは、この記事の最後に記載しています。)

  • 注意点
    • DHT11は、モジュール化している物を使用しないのであれば、シグナルピンを4.7KΩ(推奨)でプルアップします。4つのピンは、左からVCC(3.3-5.5V), シグナル, 未使用, GNDとなっています。
    • I2CはNano, UnoではSDA->A4, SCL->A5です。
    • 2番ピン(モード切替スイッチ)は内部プルアップ(INPUT_PULLUP)を使用しています。

プロトタイプの問題点:チャタリングへの対策

実際に動かしてみると、温度は出るのですが、なんだかちょっと動きが変です。ボタンを押してみるとうまくモードが切り替えられる時もあれば、そうでもないこともあります。

原因はチャタリングです。ソフトウェアだけ考えていると気が回らないのがおもしろい点です。

ボタンを押したときのD2の部分の電圧を測るとこのようになっています。

ボタンを押す前は、内部プルアップ(INPUT_PULLUP)により5Vとなっていますが、ボタンを押すとGNDレベルになった…あとに、また5Vになって、再度GNDレベルになってます。
そのため、1度の押下で、2度の割り込みが発生してしまっています。

ソフトウェアで処理を行って回避することもできますが、今回はコンデンサを配置してハードウェア的に対処してみます。
実際に取り付けてみたところ:

急な電圧変化が抑制されており、チャタリングでの反応が抑制されていることが分かります。

余談ですが、Arduinoの割り込みルーチン内でのチャタリングへのソフトウェアでの対応は、delay関数が使えないこともありやや面倒です。

プロトタイプから完成品へ

いちおうこれで使用できるものができました。が、ブレッドボードのままでは少し使うのには不便です。
ケースに入れて使用できるようにしましょう。

手に入りやすく大きさの手頃なケースとして、FRISKのケースを使用することにします。ケースに入れるにはArduino Nanoだとやや難があります。理由は:

  • 価格的にややもったいない
  • ピンヘッダが邪魔をして、高さ的に収まらない
  • Mini USBであり、Micro USBとくらべるとややケーブルの汎用性が下がる

そのため、今回はATMEGA328Pをそのまま使用することにします。

生のATMEGA328PをArduinoとして使用できるようにしてプログラムを焼きこむのには、手元にあるArduinoをISPとして使用してもいいのですが、今回はUSBaspを使用しました。
5V, 8MHzの設定で書き込みを行なった後、水晶振動子を最終的に使用しなくて良いようfuseを変更します

USBaspの使用で困った点として、最初の書き込みはJP3をショートさせて低速モードを使用しないと書き込みができませんでした。なかなかうまくいかず調べたところ、ATMEGA328Pは内部クロック1MHz相当で出荷されるとのことです。

秋月電子通商で購入したフリスクケースサイズの基盤に半田付けを行い、USB-microでの給電でどこでも使用できるように致しました。

やってみて思ったこと

  • コンデンサと抵抗はあらかじめ何種類もを組み合わせている物を買っておくと便利です。電子部品取扱店であれば、言えば奥から出てくると思います。ほかにもスイッチやLEDなど一通りセットになったものもAmazonで購入できます。
  • 都内の方は秋月電子通商での買い物を行うのが良いと思いますが、私は神奈川なのでサトー電気 横浜店・町田店が便利でした。

ソースコード

技術書典6に参加申し込みしました→残念ながら落選でした…

当選したら、プログラマー向けのポケットリファレンスマニュアルを出したいと思います。

プログラマー向けのポケットリファレンスマニュアルで、多岐にわたる内容を、スーツのポケットに入るサイズにまとめて1冊にしたものです。

ネットワークがつながらない場所での調べ物、内容の復習、自分用メモの書き込み先、ググラビリティの低い単語の意味の確認など、様々な用途に使用できると思います。

紙書籍の配布ですが、購入いただいた方には電子版を無料でおつけしようと思います。

詳細をまた記載致しますので、是非チェックください。

残念ながら落選でした。抽選率も高かったようですね。

原稿もあるので、また次の技術書展に申し込みたいと思います。

本当にサッカー選手には4月生まれが多いか

早生まれは小学校までの運動能力において、どうしても不利になることが多いです。実際に、その傾向は成人になるまで続くのでしょうか。Wikipediaの日本のサッカー選手一覧より、プロサッカー選手の誕生日をまとめてみました。

目的

出生月とサッカー選手になれるかについて関連があるかを検討する。

対象

対象は、上記のページに載っている日本のサッカー選手4117人です。Wikimedia APIを用いてデータを取得致しました。

  • 除外対象
    • 生年月日の記載がWikipediaにない
    • 出生国が日本でない (海外の学校は3月開始でないことがあるため)

結果

対象のうち、生年月日の記載があり、出生が日本であると思われたのは3916人でした。
月別のグラフを下に示します。

4月生まれが最も多く、3月生まれは少ない、という事が分かります。

考察

思ったより大きな差がありました…。月別の出生数はそこまで大きく変わらないので、入学のタイミングによる差であると思います。

てことは、アメリカではやっぱり9月生まれが有利なんですかね。機会があれば調べてみたいと思います。

RをJavaScript(Node.js)から使ってみる +α:R Advent Calendar 2017 day 7

この記事は、Japan.R 2017での講演内容を再編成した物です。

Node.jsで作られたアプリケーションや、Electronアプリケーションを、Rと連携させたいと思ったことはありませんか?

JavaScriptとRの連携

Rで統計処理をしているときに、JavaScriptでインタラクティブなビジュアライゼーションを行いたい、ということはあると思います。この目的であれば、shiny (Winston Chang et al.)という便利なパッケージがあります。htmlwidgets(JJ Allaire et al.)も便利なパッケージで、threejsbokehなどの連携を行うことができます。

では、逆は、というとあまり決定的なアプリケーションはありません。npmをみてみると、controlr, r-script, computerというパッケージがありますが、どのパッケージもRをspawnしてstdin/stdout経由でアクセスしているだけであり、すこし物足りません。

そこで、勉強がてら自前ですこし作ってみることにしました。

libr-bridge

libr-bridgeはlibr(WindowsではR.dll)と連携して、Node.js環境からRを使用するパッケージです。

libr-bridgeを利用することで、Rの関数にアクセスすることが出来ます。eval関数も備えていますので、とりあえずデータだけ渡してしまって、凝った作業をRスクリプトで行い、結果を受け取ることも出来ます。

まだまだfactorやdata.frame, S3/S4クラスなど対応しないと行けないことは山積みですが、Node.jsで出来る作業の幅を広げてくれます。

どうやって実現しているの?

ぜひ、ソースコードを見ていただきたいですがlibRのAPIをゴリゴリに呼び出して動作を行っています。Rの内部挙動を理解するのにも役に立ちました。

小ネタ

Rでは倍精度浮動小数点(double9は他言語と同じようにIEEE 754に従って、実装されています。これは、1bitの符号と、11bitの指数部、52bitの仮数部で数値を表す方式です。

NaNはこの決まりに含まれており、指数部のbitがすべて1であり、仮数部が0以外のもの、と定められています。これは他の言語も共通です。

しかし、 NAはR独自の表現であり、この決まりの中には含まれていません。

Rでは、少し特殊な仕組みでNAを実現していて、仮数部が1954(R言語設計者の一人のRoss Ihakaの誕生年)のNaNをNAとして区別して扱っています。

今回、libr-bridgeを作るのに、Rの内部を調べていくうちにこういった小ネタをいくつか見つけたので、また次の機会にでも記事にしたいと思います。

Electronドキュメントの翻訳 (Crowdinへの移行) : Electron Advent Calendar 2017 day 4

Electronの多言語ドキュメントが最近Crowdinへ移行し、翻訳作業が大変やりやすくなりました。

ここでは、その経緯と使い方について説明しています。

なぜCrowdinに移行したの?

もともとは日本語など、英語以外のドキュメントもelectronレポジトリの中に含まれており、翻訳を行う際にはdocs-translationsを編集してpull requestを送る、という方法で行われていました。

しかし、この方法には

  1. ドキュメントがなかなか英語の最新版に追いつかない
  2. Pull requestの処理が大変

という問題がありました。

一点目の「ドキュメントがなかなか英語の最新版に追いつかない」ですが、docs(英語版)のドキュメントが編集され、新しいメソッドの追加やメソッド名の変更があったり、書かれていた方法がDeprecatedになっていても、なかなか翻訳版のほうがそれに追いつかなかったり、またたくさんの言語があるために言語ごとにバラバラの作業で一貫性が保てていないという状態になっていました。

二点目の「Pull requestの処理が大変」ですが、electronリポジトリには、たくさんのPull requestが送られていますが、動作に関わるもの多くなかなか大変そうです。それにもかかわらず、細々したドキュメントの翻訳などのmerge作業もCheng ZhaoさんZekeさんをはじめとしたElectronの開発コアメンバーが行うことになってしまっていました。

そこで、翻訳の作業の効率化と質の向上のためCrowdinに移行することになりました。

doc-translationsディレクトリは、Deprecate /docs-translations #11039をもって削除されて空になっています。

Crowdinってなに?

CrowdinはWebから使用できる翻訳プラットフォームです。Githubとの連携がとてもしやすく、またオープンソースソフトウェアの開発には無料で使用できるという大きなメリットがあります。

一度翻訳した言葉をドキュメント内で一貫性を保つためにシソーラスを作ったり、機械翻訳を参考にしたり、複数人での作業のために投票機能があったりと、さまざまな機能があります。

どうやって使うの?

まずはCrowdinのユーザー登録を行います。登録にはGithubやTwitterのアカウントを利用することが出来ます。登録後、Electronドキュメント翻訳のプロジェクトを開きます。

言語の設定を行っているためJapaneseが一番上にあがっています。翻訳を行う言語をクリックします。

クリック後は、ドキュメントに含まれるファイルが出てきます。右の青いバーが翻訳率で、こう見ると日本語はほとんど翻訳されていないファイルも多いのが分かります。

今回は、翻訳が全くされていないinstallation.mdを翻訳することにしてみます。ファイルを開くと下のような画面が表示されます。

左側に翻訳文書全体が表示されます。赤がまだ作業を行っておらず未翻訳の部分、黄色が現在編集中の部分、緑が翻訳済みの部分です。

右側で実際の翻訳作業を行います。場合によっては下の機械翻訳や、過去に翻訳したドキュメントに同じ文章があれば表示されますので、それを参考にします。タグは<0></0>といった形で原文の物を引用できます。

翻訳の都合上、タグの順番が変わったり、括弧の対応が減ったりすると警告が表示されますが、わかりやすい翻訳にするためにあえて文書を構成した場合は気にしなくてかまいません。

翻訳されたドキュメントはどこから見るの?

翻訳されたドキュメントは、Crowdinからしばらくするとelectron-i18nリポジトリに取り込まれ、Electronのウェブサイトから見ることが出来ます。数日以上かかることもあるので気長に待ちましょう。

ffmpegをGoogle Compute Engine経由で使ってみた

ffmpeg、便利ですよね。ただ、どうしてもエンコード作業という物はCPUパワーと時間を消費します。

背景

つい最近、Panasonic の4Kビデオカメラ VX980Mを購入しました。画質もよく、大変満足しているのですが、4K画質はとにかくファイルサイズが大きくて大変です。10分程度の動画でも約5GBになってしまい、普段の取り回しにはやや不便です。

そこで、もともとの4K動画は将来使用できるようにクラウド上へとバックアップし、ローカルには960×540 30fpsにエンコードしたものを置いておくことにしました。

しかし、僕のメインマシンはMacBook Pro 12″ (1.3 GHz Intel Core m7)なので、どう考えても本格的なエンコード作業には向いていません。

そこで、ffmpegをGoogle Compute Engineで動かし、クラウドでのエンコードを行ってみたので、引っかかった点も踏まえて、ここに報告させていただきます。

方法

まず、Google Compute Engineが使用できるようになっているのが大前提です。まだの人は導入を済ませてください

まずは、インスタンスを作ります。今回はエンコード作業が目的ですので、CPUを強化した設定として、n1-highcpu-8を使用します。また、ちょっとお高いですが、近い方が通信コストも少ないでしょうから、asia-northeast1-cを選ぶことにしてみました。

もちろん、UbuntuやCentOSを選んでも良いですが、Dockerを使った方が後々の取り回しも楽だと思いますので、Container-Optimized OSを選ぶことにします。

まずは、dockerでffmpegを動かすのを試してみましょう。イメージは人気のあるjrottenberg/ffmpegを選ぶことにします。

これでffmpegを動かすことができました。ここまではスムーズ。

と言うわけで、stdinとstdoutを用いてエンコード作業ができないかを試してみます。

どうやらだめなようです…。調べてみると、パイプを使った場合は、MPEG-PSでの出力はできないことが分かりました。ので、残念ながら、そのままmp4にはできないようです。

MPEG-TSならパイプへの出力にも対応しているので、こうすれば大丈夫です。

これでクラウドでの変換はうまいこといきました!

ただ、tsファイルのままだと、取り回しがまた面倒なので、こちらもローカルで再変換しましょう。

これで取り回しのしやすい小さいサイズのmp4ファイルのできあがり、です。

ただ、tsファイルをローカルにいったん保存するのは美しくない……。そう思うようであれば下記を試しましょう。zshが必要です。

環境とバージョンによっては、inの方もMPEG TSである必要があるようです。その場合は残念ながら、さらに入れ子にして、

これで、input.mp4 -> TS -> cloudのffmpeg -> TS -> output.mp4と変換することができます。

結果

肝心の性能です。

まずはlocalで実行している場合。

うーん、0.547x, 16 fpsと出ています。10分の動画の変換に約20分かかることになります。

それではクラウドではどうでしょう。

リアルタイム変換より速い速度で変換できています。4K動画の変換なので、Uploadが速度のボトルネックになる場合もあるかもしれませんが、ローカルの2.3倍の速度でエンコードできたようです。

注意点

Google Cloud Computingなので、料金がかかります。また、リソースの割当量にも注意が必要です。

MacBookやその他のNetBookなどでも、この方法なら動画のエンコードを行うことができます。ただ、巨大なファイルをアップロードする必要もあり、思ったより速度がかせげない、というのが正直な感想です。今後H.245/HEVCなどさらに負荷のかかる動画形式が一般的になってくれば、有用になるかもしれません。