前まで webp のアップロードはできなかった気がするんだけど、最近試したらできるようになっていた。

Google Photos はいつからかブラウザによって webp が落ちてくるように変わったけど、そのタイミングでアップロードも変わったのかな?

ちなみに JPEG 2000 や JPEG XR はあいかわらずアップロード不可能

  1. トップ
  2. tech
  3. Google Photos の webp 対応

いままでハマったことがなかったのだけど、ついにハマってしまった。
補助グループ権限もつけてくれるsetuidgidのようなもの - (ひ)メモ を読んで、どうするかな〜と思いつつsetusergroupsを試してみたが、Unix::Groups がデフォルトで入っておらずちょっと困ったので python で以下のようにした。

#!/usr/bin/python

import os
import sys
import pwd

if len(sys.argv) < 3:
    print >> sys.stderr, 'Usage: setusergroups user program'
    sys.exit(1)


pw = pwd.getpwnam(sys.argv[1])
pw_name = pw[0]
pw_uid = pw[2]
pw_gid = pw[3]
pw_home = pw[5]

os.environ['HOME'] = pw_home
os.initgroups(pw_name, pw_gid)
os.setgid(pw_gid)
os.setuid(pw_uid)
os.execvp(sys.argv[2], sys.argv[2:])

エラると例外で落ちてトレースバックがでて十分なので特にエラー処理してな

備考

ハマったのは Raspberry Pi の pi ユーザで i2c を触るようなデーモンを作るケースで、この場合 pi ユーザに i2c グループ権限がついてないとダメなのでこういうのが必要になる。

依存なしでどうにかしたかったのは、cpanm が ansible の Core Modules に入ってなくてめんどかったから

  1. トップ
  2. tech
  3. daemontoolsのsetuidgidが補助グループ (supplementary groups) 権限をつけてくれない問題 (python)

ありがとうございました。

聞いたトークで印象に残ったもの

OSS は Windows で動いてこそ楽しい - builderscon tokyo 2016

mattn さんが思ったより全くオッサン感なくてビビった。。。挨拶しようと思ったけどできなかったので、いつか(いつ?)挨拶したい。発表もおもしろかった。

動け!Golang 〜圧倒的IoTツール開発へようこそ〜 - builderscon tokyo 2016

IoTツール開発は生産管理ツールについてで、ものすごく貴重な話だと思った。懇親会でももうちょっと聞いたりした。

The Open Beer Server - theory and the implementation - builderscon tokyo 2016

今回のゲラゲラ枠っぽいが、ものすごい金かかっててやばかった……

C 言語で行う Web フロントエンドプログラミング - builderscon tokyo 2016

Emscripten の話とか。ブラウザって VR もサポートする予定なのか!と思った。あと Emscripten が頑張って OpenCL を WebGL に変換するとか知らなかった。

「片手間JavaScripter」にも知ってほしい、Vue.jsで実現するMVVMパターン、Fluxアーキテクチャとの距離 - builderscon tokyo 2016

Flux 触ったことなかったのでわかりやすかった。

そろそろプログラマーもFPGAを触ってみよう! - builderscon tokyo 2016

FPGA の話とても聞きやすくて解りやすくてよかった。

一から始めるJavaScriptユニットテスト - builderscon tokyo 2016

JS のテスト、闇雲にググっても萎えるだけなので、こういうまとまった資料ってほんとまじで大事

  1. トップ
  2. tech
  3. builderscon tokyo 2016 で「 Bluetooth キーボードの作りかた」を喋りました

16:40〜 自作キーボードの話を1時間ぐらいする予定です。なんか1日の最後なのでゆるめでやりたいという気持ちはあります。

おおむね、事前のトーク概要と変わらない内容で話せそうです。

資料つくってます…… 話がまとまらない……

ref. builderscon - Discover Something New

  1. トップ
  2. tech
  3. builderscon tokyo 2016 でしゃべります

帰宅してから急激に体調が悪化し、悪寒がひどくて眠れないぐらいに。体温を計る余裕がなかったけど、38度〜 ぐらいは出ていた気がする。1時間ぐらい悪寒と戦ったあと、どうしよもないので家で余っていたロキソニンを飲んだら急激に楽になって寝れた。朝には熱はひいたが頭痛がひどかったので病院に。

熱の原因はよくわからなかった。ここ数週間地味に頭痛があったり体調が思わしくないけど、とりあえず緊張性頭痛だろうと言われた。熱にも頭痛にも効くからと葛根湯が処方された。

いろんな都合により最新のvimにした。

http://www.vim.org/git.php に従い git の master HEAD を入れる

git clone https://github.com/vim/vim.git
cd vim
cd src
./configure --prefix=$HOME/app/vim --enable-multibyte --enable-gpm --enable-cscope --with-features=huge --enable-fontset --disable-gui --without-x --disable-xim --disable-perlinterp
make
make install

vim-go がうまく動かなくて入れたんだけど、結局 gocode がなんか変になってたみたいで以下をした。

go get -u github.com/nsf/gocode
gocode close


これで動いてくれた。mattn さんに教えてもらいました。

  1. トップ
  2. tech
  3. vim8 というか github の master HEAD をいれた

火曜日の午後ぐらいからちょっとダルくて、とはいえすぐさま早退するほどでもない (というか早退を告げて帰宅開始するほうがストレス高い) ので普通に帰ってから熱を計ったら 37.4 ぐらい。あんまり食欲もなくてさっさと寝た。

水曜日は休みだったのでちょうどよかった。熱は朝の時点で下がってた。

勇者ヨシヒコと魔王の城【テレビ東京オンデマンド】 - 福田雄一

福田雄一

5.0 / 5.0

勇者ヨシヒコと悪霊の鍵【テレビ東京オンデマンド】 - 福田雄一

福田雄一

5.0 / 5.0

勇者ヨシヒコと導かれし七人 - 山田孝之

山田孝之

5.0 / 5.0

今期なんか見るアニメねーな!と思ってうっかりシーズン1をプライムビデオで見始めたらハマってしまった。すぐシーズン2まで見終わった。

シーズン3が放送中で、6話からは録画開始したが、1〜5話は Amazon のレンタルに手を出してしまった。1話あたり324円、1クリックで支払いできるので危険。

スマホの爆発を防止できるか? GoogleによるUSB-Cの新規格 | ギズモード・ジャパン この記事

まずタイトルおかしいよね。。USB-C の新規格の話なんてどこにもない。Android の互換性定義の話。

それはともかく

Type-Cデバイスは、Type-Cレジスター基準に則って1.5Aと3.0Aのチャージャーを識別し、電流アドバタイズメントの違いを検知しなければなりません。

つまり、どれだけの電流が流れ込んでいるかをUSB-Cデバイスは検知しなければならないということです。

http://www.gizmodo.jp/2016/11/google-usb-c-recommend.html

って書いてあってげんなりする。

デバイスが検知しなければならないのは、充電器の供給容量(最大電流)であって、流れ込んでくる電流量ではない (バッテリ充電回路で電流制御はしているだろうが、それは USB Type-C の抵抗設定とは関係ない)。

「流れ込んでくる電流量」って言い方がなんか変。デバイスにとって自分に流れる電流量は自分のことなので、こんな他人事みたいな言い方だと違和感がある。充電器はデバイスが消費するだけの電流を供給するだけで、別に無理矢理デバイスに電流を押しこんだりしない。

ここの「チャージャーを識別する」ってのがどういうことを意図しているかというと、充電器が供給容量を超えた電流をデバイスが使おうとすると、充電器にとっては過負荷になり最悪発火するからちゃんとしてくれってこと。あくまで充電器の過負荷に対する問題であって、これはデバイスの発火の話ではない。

Android 7.0 CDD の原文

ところで CDD の原文か以下のようになっている。

Type-C devices MUST detect 1.5A and 3.0A chargers per the Type-C resistor standard and it must detect changes in the advertisement.

Android 7.0 CDD

訳がまず明らかにおかしい。。「Type-C デバイスは、Type-C 抵抗標準によって 1.5A と 3.0A の充電器を識別し、またその通知の変更を検知できなければならない」ぐらいかな?


そういえばと思い Google Translate で試したけどこっちのほうが優秀だ。

タイプCのデバイスは、タイプCの抵抗規格ごとに1.5Aと3.0Aのチャージャを検出しなければならず、広告の変化を検出する必要があります。

備考:USB Type-C のスペック

ちゃんと調べたことがなかったので改めて調べてみた。USB Type-C Specification Release 1.2.pdf の 4.6.2.1 USB Type-C Current あたりかな。

Source はチャージャ側のこと。Sink は基本的にデバイス側のこと。

  • Type-C では CC pin を使って、電源の供給量を通知する
  • 電流量には3種類定義されている
    • Default (500mA for USB 2.0 / 900mA for USB 3.1)
    • 1.5A
    • 3.0A
  • 1.5A や 3.0A を使うデバイスは CC ピンをモニタして消費電流を調整しなければならない (ただし USB PD の接続が確立されている場合はモニタする必要はない)
  • 充電側はデバイス側が過剰に電流消費している場合に自身を保護すること (保護回路をつけろってこと)

CC ピンの回路

Source 側は Rp でプルアップ、Sink 側の Rd でプルダウンしている。それぞれ必要な値は表になっている。

でもって、Sink 側はどのようにして供給電流量を判別するかといえば、Rp と Rd で分圧された部分の電圧を見ろと書いてあり、表になっている。

ためしに Rp=56kΩ Rd=5.1kΩ で計算してみると vRd は 0.42V で、vRd-USB の範囲に入る。同じように Rp=22kΩ Rd=5.1kΩだと0.94V で v-Rd-1.5、Rp=10kΩ Rd=5.1kΩ で 1.56V で vRd-3.0。

変換ケーブルについて

変換ケーブルでは CC ピンは常に 56kΩ でプルアップされなければならない。つまり Default にしとけってこと。

Default は 500mA for USB 2.0 / 900mA for USB 3.1 ってことになっているが、今まで使われてきた USB-BC も有効なため D+/D- を 200Ω でショートするアレとかで 1.5A まで流せる。

ref

Type-C の規格。zip で全部落とさないと見れない。面倒ですね。

  1. トップ
  2. tech
  3. 「スマホの爆発を防止できるか? GoogleによるUSB-Cの新規格」っていう記事がひどくて爆発する