おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google してもらう


2017年12月09日(Sat) 早起き、晴れ [同日]

ノイズキャンセリングヘッドホンを買った

リモート生活、ビデオ会議の時にラップトップと有線ヘッドホンでつながれるのがつらくなってきました。インナーイヤのブルートゥースヘッドセットも試したのですが、耳の穴が小さすぎたり、頭越しのブルートゥースの接続が安定していないようだったり*1。一念発起して、SonyのWH-1000XM2を買いました。Amazonで$298.00(Thanksgiving直後で値引きされていたのか今みてみたら$349.99)。

これ、すごいっすね。キャリブレーションを済ませると金属どうし接触するような高音以外はまったく聞こえなくなる。人間の感覚というのは定価$350くらいの製品にだまされちゃうものなんだ。だまされちゃうというか、マイクとAD変換器とDSP(なのかな?)ががんばって反位相の音を出してるわけなんだろうけど、$350程度で量産できる技術で実現できるくらいの精度なわけよね。

音楽が鳴っていない時にはホワイトノイズが多少聞こえるのが残念といえば残念だけれど、音楽を聴いている時の音質も申し分ありません。

会議に使うだけじゃなくてまた音楽を聞くようにしようかな。

きっと最新のVRゴーグルは視覚についてもだましてくれるようになってるんだろうな。デジタルたいしたもんだ。

*1 マイクロフォン側だけ切れるので自分ではわからない


2017年09月08日(Fri) 遠方に見えた雨雲は来なかった [同日]

[tDiary] CGIからホームディレクトリにインストールされたGemを使うにはGem.use_paths

CGIからGemに依存するRubyスクリプトを起動するとrequireできないGemがあるのに気づきました。どうもCGI中ではHOME環境変数が設定されていないのが問題のようで、ローカルに起動する場合にも再現できました。

HOME= ./index.rb 
/usr/pkg/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- bundler/setup (LoadError)
        from /usr/pkg/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from ./index.rb:3:in `<main>'

rubygems.rbをつらつらと眺めると、Gem.find_homeHOME環境変数からロードパスを作っている部分がありました。このファイルはRubyの起動時に読まれちゃうので後からHOME環境変数を変えることはできない、と思ったら、Gem.use_pathsというメソッドを見つけました。これを使おう。

#!/usr/pkg/bin/ruby23
Gem.use_paths('/home/zunda/.gem/ruby/2.3.0', Gem.path)
require 'bundler/setup'
require 'netbsd_sysinfo'

puts "Content-type: text/plain\n\n"
puts "Load averages: #{NetbsdSysinfo.loadavg}"
puts "Number of processes: #{NetbsdSysinfo.nprocs}"

これでやっとこgem23 install bundle --user-installしたbundler/setuprequireできました。むふふ。


2017年09月06日(Wed) 朝からちゃんとした雨 [同日]

[tDiary] 自作のネイティブRubyライブラリをCGIから使う

このtDiaryはNet BSD上で動いていて、ここのところコードの更新ができていません。更新を妨げている原因のひとつが、ホストに負荷をかけすぎないためにCPU負荷や自ユーザーのプロセス数をプロセスを起動せずにシステムコールだけで取得できるようにした自作のRubyライブラリでした。CGIから起動されるRubyスクリプトはまずこのライブラリを読んでシステムの負荷を測定し、問題がなければtDiaryの処理を始めます。これをなんとかモダンなエコシステムに乗せて更新を簡単にしたい。

というわけで、まずはsetup.rbではなくgemspecからビルドするようにしました。さて。次はCGIから起動されるスクリプトからこれを読めるようにになくちゃ。試行錯誤の結果、下記のようになりました。

Rubyの環境。このホストには、ruby 2.3.4p301/usr/pkg/bin/ruby23としてインストールされています。これを使うようにします。

$ gem23 install bundle --user-install

PATHの最初に$HOME/.gem/ruby/2.3.0/binを追加しました。

Gemfile。ローカルな変更を使ってしまわないよう、GitHubにpushしたものを使うようにします。

gem 'netbsd_sysinfo', :github => 'zunda/netbsd_sysinfo'

このライブラリをローカルから参照できるようにします。

$ bundle install --path=vendor/bundle

CGIスクリプトは下記のような感じ。

#!/usr/pkg/bin/ruby23
require 'rubygems'
require 'bundler/setup'
require 'netbsd_sysinfo'

puts "Load averages: #{NetbsdSysinfo.loadavg}"
puts "Number of processes: #{NetbsdSysinfo.nprocs}"

これをローカルから実行すると、Content-typeレスポンスヘッダと共に端末に結果が表示されます。もうひといき。

Content-type: text/plain

Load averages: [0.466796875, 0.37451171875, 0.34228515625]
Number of processes: 2

さて。Apacheから実行しますよ。

.htaccess

Options +ExecCGI
AddHandler cgi-script .rb
DirectoryIndex index.rb

これがHTTP/1.1 500 Internal Server Errorになるんだな。CGIスクリプトを書き換えてエラーの内容を確認する。

#!/bin/sh

echo Content-type: text/plain
echo

/usr/pkg/bin/ruby23 <<_END 2>&1
require 'rubygems'
require 'bundler/setup'
require 'netbsd_sysinfo'

puts "Content-type: text/plain\n\n"
puts "Load averages: #{NetbsdSysinfo.loadavg}"
puts "Number of processes: #{NetbsdSysinfo.nprocs}"
_END

RubyからのstderrもApacheに渡るようになります。

/usr/pkg/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': can
        from /usr/pkg/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `
	from -:2:in `<main>'

うーん。bundler/setup~/.gem/ruby/2.3.0/gems/bundler-1.15.4/lib/以下にあるのです。下記ならApacheからでも実行できる。

#!/usr/pkg/bin/ruby23 
$:.unshift("/home/zunda/.gem/ruby/2.3.0/gems/bundler-1.15.4/lib/")
require 'rubygems'
require 'bundler/setup'
require 'netbsd_sysinfo'

puts "Content-type: text/plain\n\n"
puts "Load averages: #{NetbsdSysinfo.loadavg}"
puts "Number of processes: #{NetbsdSysinfo.nprocs}"

どこかで誰かがこのパスを特別扱いしてるんだなあ…


2017年07月28日(Fri) 3日間の出張おしごとおしまい [同日]

今回も初めてお目にかかる同僚にたくさん会えました。顔おぼえられないよ!

YYZ

アメリカ入国の機械に指紋を読んでもらえない。

安心のティムホルトン。

YYZ-ORD B737

温かいぞ。また。

ORD

走ったはしった。くるちー

ORD-LAX B737

となりのおばさん、Androidの電話とiPadとWindows 10のLenovoのラップトップ(画面が裏にぺったりひっくり返るタイプ)を持ってて楽しそうだ。

UnitedWiFiもDNSは通るなあ。

LAX

食べ物とか微妙にがっかりなんだよなあ…

LAX-ITO

Switchでスブラトゥーンやってる子かいたよ。


作り手とその取り巻きだけが楽しんでる間は本物じゃない。その中身が理解できない人々の生活を変えてこそ本物だ


zunda <zunda at freeshell.org>