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サイズのマニュアル本です。

続きを読む

技術書典 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円)を購入しました。
  • ブレッドボード・ケーブル・コンデンサ・抵抗・スイッチ
続きを読む

技術書典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などさらに負荷のかかる動画形式が一般的になってくれば、有用になるかもしれません。

Pocket C.H.I.P. が届いた

Pocket C.H.I.P.が届きました。2016年5月に申し込みをしているので、実に半年かかったことになります。(当時はまだ49$でした)

プチプチに包まれたPocket C.H.I.P.

こんな感じのプチプチに包まれて香港からやってきました。

C.H.I.P.とPocket C.H.I.P.

Pocket C.H.I.P.にあわせて、C.H.I.P.とHDMI DIPを購入。こちらもおいおい触って行きたいです。 続きを読む