わふぅ。

わふです。

最近買って幸せになれたもの (2016/4〜2017/4)

この 1 年間で買って良かったなと思ったものについてつらつらと書いていきます。

Sony DSC-RX100M3

もともと都会の夜景などが好きで、適当なところにのぼって夜景を撮影するのがちょっとした楽しみだったのですが、 手持ちのスマートフォン (Xperia Z3 Compact) で適当に撮るだけでは細部まで綺麗に撮れずにモヤモヤしていました。 ただあまり大きなカメラを持ち歩くのも厳しいので、高画質なコンデジを買おうと思って色々と検討していました。

適当に Google で検索したり、Twitter でプロの方々から アドバイスを募った ところ、 DSC-RX100M3 を買うのが良いというアドバイスを複数の方 (鳥さん など) から頂いたので、これに決めました。

他のカメラを持っているわけではないので、画質がどうとか細かいことはなにも言えないのですが。

こういう写真などを撮影して楽しんでいます。 Twitter にアップロードしているので画質が落ちていますがスマホよりはずっと綺麗に撮れます。 カメラから直接 SNS へ投稿する機能などはついていませんが、 NFC 機能付きのスマホなら専用アプリを入れることでスッと写真が転送できるのであまり不便は感じていません。

夜景もごはん画像も綺麗に撮影できるようになったのでかなり満足しています。

GIANT ESCAPE R3 2016

クロスバイクを買いました。

いわゆる普通の自転車と比べて重量がだいぶ軽く、ひょいっと持ち上げられる程度の重さです。 漕ぎ出しが軽くてスピードも出やすいので、街の中をかなり軽快に動けるようになりました。

カメラを持って自転車で出かけて適当に写真を撮ったりして帰ってくるのは楽しいです。

(長距離を走ろうと思うとロードバイクが欲しくなってくるのかも……)

DELL U2515H

25インチ, 薄型ベゼル, WQHD (2560x1440).

絵描きでもデザイナーでもないので発色の良さはよくわからないのですが綺麗な方だと思います。 Twitter が捗るようになりました。 DP などのインターフェースの調子が若干悪いようなのが玉にキズですが……。

(特に書くことがない)

エムピウ ストラッチョ

https://m-piu.com/catalog/straccio-goat

とても小さな財布です。キャッシュカードをすこし大きくしたくらいのサイズ。

最近はだいたいどこでも Suica で決済できるようになっているので、 少額決済のほとんどを、財布に入れている Suica (オートチャージ付与済み) に頼って生活しています。 すると小銭を扱うことがあまりないので、取り出しやすさなどを重視した小さめの財布に変えたほうが嬉しいかな、と思って買いました。

お札が謎の 3 つ折になるという欠点はありますが、カード・小銭・紙幣がそこそこ収納できるのにサイズがとても小さいので気に入っています。 最初は「ふにゃふにゃだし使いにくそう」「中身を落としたりしないかな」などと思っていたのですが、 ここ数ヶ月使ってみたところとくに気にならなかったです。

蔵前にあるエムピウの 実店舗 に行くと実物が置いてあるので気になるひとは行ってみるといいと思います。 他の取扱店だとストラッチョは置かれていないことが多くて残念だったので……。 直営店以外では東銀座にある藤巻百貨店にもストラッチョが置かれていました。


(2018/05/04 追記) ゴート革のものは 在庫限りで販売終了 だそうです。 他の素材でほぼ同じ財布を作っているようなので買うならそちらの方になるかも。

Withings Activité Pop

なぜか Pop のほうのページにアクセスしようとすると Steel のほうのページに飛ばされるのでリンク先は Steel のほうになっています。

"睡眠をトラッキングしたい" + "充電は面倒なのでなるべく避けたい" という条件のもとで検索したら Activité になりました。 睡眠が可視化できて嬉しいです。(嬉しいだけ)

Raspberry Pi で動いている Docker の中から PulseAudio 経由で音を鳴らす

環境

たぶんホストが Arch Linux ARM ではなくても pacmanapt-get に変わるとかそれぐらいだと思います。 コンテナも ARM 版 Ubuntu である必要はないはずです。保証はしませんが……。

ホストの設定

PulseAudio のインストール

pacman 経由で PulseAudio をインストールします。

pulseaudio --start で PulseAudio のデーモンが立ち上がり、 /run/user/$uid/pulse/native というファイルができます ($uid はデーモンを起動したユーザーのユーザー ID です)。 このファイルは Unix ドメインソケットになっていて、ここにデータを書き込むことで音声を再生できるようになります。 また、pulseaudio --kill でデーモンを終了させることができます。

基本的にソケットファイルはデーモンが動いている間だけ存在しますが、 systemd のソケットアクティベーションという機能を使うと、 /run/user/$uid/pulse/native にアクセスがあった場合に自動で PulseAudio を立ち上げることができるらしいです。 systemctl --user start pulseaudio.socket でこの機能を有効化できて、 systemctl --user enable pulseaudio.socket でこの機能を永続化できます。

クッキーの設定

デフォルトでは /run/user/$uid/pulse/native への書き込みの際にクッキー (?) を用いた認証機能がついています。 この認証によって、音声を再生するためにはソケット (/run/user/$uid/pulse/native) への書き込み権限のほかに、 クッキー (/home/$user/.config/pulse/cookie) の読み込み権限が必要になります (/home/$user はデーモンを立ち上げたユーザーのホームディレクトリです)。

/etc/pulse/default.pa をいじることで、この機能を無効にできます。 load-module module-native-protocol-unix という行を load-module module-native-protocol-unix auth-anonymous=1 に変更することで達成できます。

認証が有効なままでもクッキーをコンテナへとマウントしてしまえばほとんど問題はないので、 以降は無効化しないときの設定方法を記述します。 無効化すると以降の記述で /home/$user/.config/pulse/cookie および $SERVER_COOKIE に関する 設定をスキップできます。

コンテナの設定

ソケット・クッキーのマウント

docker run でコンテナを作成するわけですが、 その際に以下の 2 つを -v オプションなどを使ってコンテナ内部にマウントします。

  • /run/user/$uid/pulse/native
  • /home/$user/.config/pulse/cookie

$user$uid は適切なものに置き換えておいてください。 また、マウントしようとしているファイルがきちんと存在することも確認してください。

環境変数の設定

以下の環境変数をコンテナ内で設定します。

  • PULSE_SERVER=unix:/path/to/native
  • PULSE_COOKIE=/path/to/cookie

/path/to/native および /path/to/cookie はそれぞれ /run/user/$uid/pulse/native/home/$user/.config/pulse/cookie のマウント先のパスを指定してください。

PulseAudio のインストール

apt-get install pulseaudio するだけです。

こうすることで、コンテナ内のプログラムたちは PulseAudio を通じてホスト側に音声を送ることが可能になります。

[ユーザープログラム] → [PulseAudio in Docker] → [Unix ドメインソケット] → [PulseAudio in Host] → [スピーカーなど]

おそらくこういう経路で音声が送られるはずです。

mpg321

音声を再生するプログラムとして今回は mpg321 を使います。 apt-get 経由でコンテナ内にインストールしてください。 あとは設定がうまくいっていれば mpg321 test.mp3 で音声が再生できていると思います。

デフォルト設定では mpg321 は ALSA を使って音声を再生しようとします。 これはコンテナ側の Ubuntu では (たぶん apt-get install pulseaudio のときに ALSA から PulseAudio へのリダイレクトが自動で設定されるので) 問題ないですが、ホスト側の Arch Linux で mpg321 を用いて音声の同時再生をしようとすると問題になります。

ホスト側では /etc/libao.conf の中身をすべて削除して default_driver=pulse と書くことで解決できます。 pulseaudio-alsa パッケージをインストールして ALSA から PulseAudio へのリダイレクトを設定すると解決するのかもしれませんが、そちらの解決方法はよくわからなかったのでやめました。

参考資料

感想

Ubuntu と Arch Linux でいろいろ違うから困る (それはそう)。

GTX970 を買いました

概要

前回の構成でそこそこ満足していたわけですが Cities: Skylines というゲームを高画質な感じでプレイしたくなったのでケースを買い替えて dGPU を載せることになりました。

いい感じのケースが Lian Li から出ていたのですが 日本では未発売だったので ebay で適当に買いました。送料高かったです……。

dGPU は迷いに迷って結局 GTX970 になりました。

構成

  • CPU: Intel - Core i7 6700K
  • M/B: ASRock - Z170M-ITX/ac
  • Memory: UMAX - DCDDR4-2133-16GB HS
  • GPU: Gigabyte - GV-N970IXOC-4GD [New]
  • Case: Lian Li - PC-Q04 [New]
  • PSU: SILVERSTONE - SST-SX500-LG [New]
  • CPU Cooler: GELID Solutions - SlimHero CC-Shero-01-A
  • Case Fan: GELID Solutions - Silent14 PWM [New]

感想

ケースの大きさがけっこうギリギリだったので GPU の装着に苦労しました。

Ubuntu 14.04.3 を使っているのですが nouveau ではなぜか壊れたので仕方なく いったん iGPU からの出力で画面を映してプロプラドライバをインストールしました。 その後はとくに問題なく動いているように見えます。

アイドル時の消費電力が 20W → 30W となったのでもうちょっと nVidia には頑張ってもらいたいところです。

エアフローが悪化したためかすこし作業をするだけでわりと CPU のファンが回るようになりました。 そんなにうるさいわけではないですがやはり気になります。うにゃうにゃ。

(追記: PSU の騒音が気になったので SST-ST45SF-G から SST-SX500-LG に買い換えたところアイドル時の騒音はそこそこ静かになりました)

FPGA ことはじめ

経緯

大学の課題で「FPGA を使ってデジタル時計を作る」というものが出たのでそのときに試行錯誤した記録を適当に残しておこうと思います。

使った FPGA 開発ボードなど

まずは FPGA 開発ボードを買ってくる必要があります。

kivantium プロの記事 に載っていた Papilio One 500K を買おうと思って秋月に行ったのですが売り切れていたので仕方なく Cmod S6 Kit というものを買いました。web で検索してもこのボードに関する日本語な記事はほとんど出てこなかったのできちんと使えるのか不安でしたが、結果としてはあまり苦労せずにプログラムを書き込んで動かすことができました。専用のソフトウェアを用いて USB 経由で書き込めるので手軽に FPGA で遊べて良いと思います。

あとは適当にブレッドボードとか 7 セグメントの表示器とか抵抗とかを買ってつなげました。ボタンは面倒だったので Cmod S6 Kit についていたものを使いました。チャタリング対策をどこかでしておかないとボタンの挙動がおかしくなるのですが面倒だったのでなにも対策しませんでした。

実際に配線などをするには digilent のウェブサイトに載っている 基板の概要基板の配線図 を頑張って読み解く必要があります。

開発環境のインストール

kivantium プロの記事 を参考にしました。 http://cellspe.matrix.jp/parallella/inst_ise.html に載っている手順に従って ISE Design Suite をインストールしてガチャガチャしました。

ISE Design Suite をインストールしただけでは USB 経由でボードに書き込みをすることはできません。Gentoo Wiki に載っている適当な記事 を参考にしてプラグインなどを入れておくと iMPACT から直接書き込みを実行できるようになります。

けっこう前だったので細かいことは忘れました……。

VHDL を書く

基本文法

kivantium プロが学科 slack にあげてくれた資料を見て適当に雰囲気をつかみました。 ここに上げておくといろいろダメな気がするのでどうにかしてその資料を手に入れるかネットで入門記事を漁るかしてください……。

テスト

levelfour 先輩の記事 を参考に GHDL を入れてテストを書いて手で回しました。

成果物

github にあげました。あとは察してください。面倒なので……。ちなみに元の課題では「1 秒間隔で DP などが点滅」という指定があったのですが頭が悪かったので 2 秒間隔で点滅するようなコードになっています。

実際に動作しているところを撮った動画はどこかに消えてしまいました。

PowerPC64 アセンブリ課題がつらい

なにこれ

大学の課題で PowerPC64 のアセンブリを書く必要があったけど浮動小数点数の扱いでつらい気持ちになったのでそのときの気持ちを書いた記事です。

適当に書いたので間違ってそう……。

レジスタ幅の確認

  • GPR (整数とか扱うやつ) → 64bit
  • FPR (浮動小数点数とか扱うやつ) → 64bit

GPR から FPR への転送

直接転送できなさそうなのでメモリを経由するしかなさそうです?

  • std rA, d(rM)
    • rA の値を d(rM) から d+7(rM) に書き込む
  • stw rA, d(rM)
    • rA の下位 32bit の値を d(rM) から d+3(rM) に書き込む
  • lfd fA, d(rM)
  • lfs fA, d(rM)
    • d(rM) から d+3(rM) を単精度浮動小数点数とみなして読み込む
    • 適当に倍精度に変換したあと fA に格納される

r3 の下位 32bit に単精度っぽいデータが入っているとして std r3, 0(r1) したあと lfs で読み込もうとするときは、バイトオーダーの関係で lfs f1, 0(r1) ではなく lfs f1, 4(r1) としないと壊れるので注意が必要です。まぁひっかかるひとはそんなにいなさそう……。

定数表現 (がんばるやつ)

FPR に適当な即値を突っ込みたいことがあります。このときも GPR に適当に即値を入れてからメモリ経由で渡すことで実現できます。直接突っ込む方法があるのかもしれないですが調べてないです。

そもそも命令長が 32bit 分しかないので即値として入れられるものは 16bit 幅のものだけです。シフト命令とかを使ってわいわいすることで倍精度 (64bit) とかそこらへんの定数を表現できます。

li %r3, 16384
sldi %r3, %r3, 48

とすると %r3 には倍精度浮動小数点数で 2.0 を表すデータが入るのであとは転送すれば良いです。

定数表現 (data セグメント使うやつ)

data セグメントで

.data
pi:
    .double 3.14

と書いておいてプログラム中で

lis %r4, pi@highest
ori %r4, %r4, pi@higher
sldi %r4, %r4, 32
oris %r4, %r4, pi@h
ori %r4, %r4, pi@l

とすることで %r4 に data セグメント中の pi の先頭アドレスが入るので lfd %f1, 0(%r4) で転送できるというテクニックもあるらしいです。

定数表現 (fcfid するやつ)

  • fcfid fA, fB
    • fB にある値を符号付き整数とみなして double に変換したあと fA に代入する

こういう強い命令があるらしいのであとは上で使っていたメモリ転送などを用いて適当な FPR にいい感じの値を入れておくだけでよさそうです。

参考文献

ふぇぇ

この記事で触れてない色々なことは kivantium プロの活動日記を見るとだいたいなんとかなります。

Raspberry Pi 2 Model B に GW-USEco300 をさして無線 LAN で通信するはなし

前提

前提として手元には ARM 版 Arch Linux が入った Raspberry Pi 2 Model B があるものとします。入ってないひとは Arch Linux の公式ページ を参考にして入れてください。MicroSD カードに書き込むだけでインストールできるので楽です。

不安定だったというはなし

Raspberry Pi 2 Model B を無線 LAN につなぎたくなったのですが、電源周りが貧弱っぽいので省電力っぽさそうな無線 LAN アダプタとして GW-USEco300 を買いました。

http://www.amazon.co.jp/dp/B00ESA34RO

これをらずぱいに挿すとなにもしなくても認識されるので嬉しい……かと思いきや、なんだか通信が不安定です。ネットで適当に検索して色々試してみるもダメ。通信がいきなり途切れてしまったりで正直使い物になりません。

解決策

どうもカーネルに組み込まれている RTL8192CU 向けのドライバがダメみたいです。Yaourt 入れて AUR にある 8192cu-dkms というドライバをインストールすることで解決しました。

以下は長々とした手順です。

Yaourt のインストール

下準備

yaourt などを自分でビルドしてインストールすることになります。 まずは下準備として

$ pacman -S base-devel

でビルド用ツールをインストールします。

package-query のインストール

AUR の package-query のページ に載っている Download snapshot というリンクから package-query.tar.gz をダウンロードします。あとはビルドしてインストール。

$ curl -O https://aur.archlinux.org/cgit/aur.git/snapshot/package-query.tar.gz
$ tar xvzf package-query.tar.gz
$ cd package-query
$ makepkg -si

yaourt のインストール

package-query のインストールと同様に AUR の yaourt のページ から yaourt.tar.gz をダウンロードして以下略。

8192cu-dkms のインストール

$ yaourt -S 8192cu-dkms

ヘッダファイルについていろいろと聞かれるのですがそれっぽいものを選べば OK です。 (忘れた)

$ systemctl enable dkms

で dkms サービスを有効化すればカーネルがアップデートされても自動でモジュールもアップデートされます。

たのしいたのしい ICPC つくば大会

概要

sigma 氏, wo 氏と一緒に "sleep 18000" というチームを組んで 9 位を取ってきました。以下は適当な感想文です。

1日目

到着まで

わざわざチームメンバーと待ち合わせするのも面倒なので直接つくばに集合ということにしたら現地で「会場に入るためにはチームメンバーが全員揃っていないといけない」という制約を初めて聞かされて待ちぼうけしてました。

あと sigma 氏が当日朝に「誤って消費期限切れの牛乳を飲んでしまった」と発言していたのでかなり心配でした。結局大丈夫だったっぽいので良かったのですが……。

Practice など

Practice ではお菓子をたくさん食べました。おいしいお菓子が大量に用意してあったのでとても良かったと思います。

コンテスト用のキーボードは大会側が用意したものしか使えない、という話だったのですが、実際にコンテスト会場に行くと珍しいキー配置をしたキーボードが置かれていました。「これを本番でも使わないといけないのか……」と少し気が滅入りました。ちなみに Amazon でもそれほど 評価 が高くなさそうな感じでした。エンターキーのさらに右側に一列ぐらいいろいろなキーが配置されていてそこら辺のキーの感覚が完全崩壊して本番でも入力ミス頻発だったので実際かなり厳しかったです。

Practice のあとに Java チャレンジがあったのですがサーバーが重すぎてうーんという感じでした。最後の 10 分ぐらいになってからまともな AI を書こうと頑張ったのですが提出が 10 秒ほど間に合わずけっきょくサンプル AI を提出しただけになりました。

夕食パーティー

とても豪華な食事だったのでびっくりしました。唐揚げなどをたくさん食べてぽよ活しました。

チーム紹介の時間があったのですが、チーム Cxiv-Dxiv のスライドがとてもおもしろくていろいろ吹っ飛びました。

宿泊施設

壁が薄いし雨漏りみたいな音が聞こえてくるし 23 時頃は暴走族がうるさかったしあんまり環境としては良くなかった気がします……。

緊張のせいか環境のせいかよくわからないのですが結局寝付けたのが 2 時頃だった気がします。

2日目

コンテスト

後述。

表彰式

とにかく待たされたような気がします……。順位はあまりよくなかったことが事前にわかっていたのでもにょもにょ。

夕食パーティー

ごはんをたくさん食べて知り合いの人々とわいわいしていました。

コンテスト

簡単な問題しか解いてないのにバグを無限に出してしまい戦犯でした。人権を得られず終了です。

A 問題

めんどくさいだけ。

C 問題

やるだけなのに無限にバグらせてしまい戦犯に……。けっきょくコードを印刷してチームメイトにバグ取りしてもらいました……。

F 問題

やるだけなのに無限にバグらせてしまい終了。

総評

キーボードと宿泊施設の件を除けばとても楽しかったです。 コンテスト自体はとくに問題なく終わって、懇親会などでは普段なかなか会わない人々と楽しくわいわいできたので、行ってよかったと思っています。

チームメイトに迷惑かけてばかりだったのでもうすこし精進しておくべきでした……。