ヘッドホン買った

JBLのS400BTという機種。 f:id:joe-re:20150317065518j:plain

JBLには思い出が少しある。学生時代に入ってた軽音楽サークルのスピーカーがJBLだった。

僕はPAというセクションで学内ライブとかの音響を担当していたので、スピーカーケーブル作ったりしてた。懐かしい。

一番の購買動機はbluetooth対応の機種が欲しかったというところ。

今まで有線のイヤホン使ってた。コーディングに夢中になってくるといつのまにかケーブルがキーボードに浸食してきてたりするのが非常にうざかった。(iMacだとヘッドホン後ろに刺すので特に。)

通勤の時も線がやっぱり邪魔。なくせるなら線はない方がいい。

一応バンドマンなので音にもこだわりみたいなのはあって、やたらと重低音推しなものは買わないようにしている。

1万円付近かそれ未満の安いものには、重低音推しなものが多くて、それは重低音強めにすればなんとなく良い音に聞こえるからだ。(と勝手に思っている。)

それはそれで間違ってないような気もしていて、確かにお店で聴く限りでは満足できる。

けどずっと使っていると、一音一音がはっきり分解して聞こえないのが気になってきてしまう。このギターもっと際立ってるはずなのに!!とか感じてしまう。

重低音推しでも高いものであればまた違うのかも知れないけど、僕は買ったことないので分からない。

あんまり高いものも買えないので、2万円代ぐらいのものを沢山試したのだけど、この機種が一番音がクリアに聞こえた。

こういうヘロヘロな音楽が好きなのも、重低音軽視の原因になってる可能性はある。 www.youtube.com

やっぱりbluetoothだと音は若干劣化する感はあって、有線とくらべて音の深さみたいなものが消える。具体的には、多分低音がなくなってる。

それでも線ないのはやっぱりいい。結構bluetoothもしっかり繋がってて、家でタバコ吸うときはPCから5mぐらい離れた台所に行くんだけど、それぐらいなら余裕で維持するのでストレスレス。

つらいところ

iPhoneiMacとで、ペアリングの切り替えが若干面倒(ボタン一つでやりたい)

締め付け軽めを選んだつもりだったけど、それでもメガネと併用すると痛い(慣れでどうにかしたい)

yeoman-generatorでRailsアプリケーションのためのAngularJSのGeneratorを作りかけた

途中で飽きてしまった。

joe-re/generator-angular-rails · GitHub

Railsは一切のHTMLを返さないAPIサーバにして、フロントのソースコードRailsのディレクトリに一切置かない、みたいな構成が僕は好きだ。

リポジトリを完全に分けてもいいんだけど、初期段階では2つリポジトリがあるのが大仰だし、Rails書くのとフロント書くのも同時にやることが多いので、あまり違うリポジトリであることを意識したくない。

それならgulpfileをRailsのアプリケーションルートに置いて、railsコマンド叩くのと同じ感覚でフロントのビルドやらテストやら叩ければいいなー、と思ってて、そういうgeneratorが見当たらなかったから作ってみようとした。

これを使うとRailsのルートディレクトリにgulpfileやらpackage.jsonやら、わらわらできる。

ngapp、ngtestというディレクトリも作られて、これがそれぞれAngularのアプリケーション用のディレクトリとunitテストのディレクトリになる。

gulp buildすると、もともとあるRailsのPublicディレクトリは消しとばして、Agnularのアプリケーションに置き換わる。

generator-angulardependencyに入れていて、generatorのサブコマンドとして使える。(つまりこいつは最初のセットアップしか仕事しない。)

gulpあんまり触ったことなかったので使ってみたり、yeoman-generatorの仕組み知れたりして結構楽しかった。

けど、他の優秀なgenerator読んでると、対応してるオプションとか至れり尽くせりですげーな、今はここまでやる気力ないなー、って思ってしまったりして、ちょっとモチベーションがなくなってしまった。そのうちやる気取り戻して完成させたい。

とにかくこういう構成にしたい!みたいな気持ちぐらいはなんとか形になった気がする。

npmとして公開もしてないけど、自前でシンボリックリンク貼ったりすれば一応使えます。

もし興味がある方は試してみてください。

gulpとかyeoman-generatorとかまだまだちゃんと書けてないと思いますので、ご指導ください。

SeleniumWebDriverを使ってつまらない作業を駆逐してやる!!というLTをした

会社のLT大会で発表した。

スクショ撮る作業つらすぎる!Selenium Web Driverって使い捨てのスクリプト的にも使えるんだよ!そんなクソみたいな作業自動化しようよ!

という内容。

このLTのために簡単なデモアプリケーションを作った。

これを使うと、↓なことができる。

f:id:joe-re:20150117152734g:plain

少し分かりづらいけど、shot.rbを実行するとfirefoxが起動が起動して4人のユーザでログインして、それぞれスクリーンショットを撮ってsnapshotsディレクトリに格納する。

スクリーンショットを撮るコード

selenium-webdriverを使って、4人のユーザでそれぞれログインしてスナップショットを撮 ...

資料

ざっくりした例は↓を見るとわかりやすい。

RubyBindings - selenium - Ruby bindings - Browser automation framework - Google Project Hosting

もっと詳細が知りたければリファレンスが良い。

http://selenium.googlecode.com/svn/trunk/docs/api/rb/frames.html

解説

エレメントの操作

このコードの

driver.find_element(:id, 'user_email').send_keys(user[:email])

みたいなところは、id属性が'user_email'のエレメントに、user[:email]の値を入力する、みたいな意味。

ここでは:idを指定してるけど、:csscssセレクタを指定することもできる。(jQueryっぽい。)

その場合には配列でエレメントオブジェクトが返却される。

:xpath指定でXPathも使える。

send_key以外にも、clearで入力値を消す、clickで押下する、などなどできる。(詳細はリファレンス見るのが良いです。)

スクリーンショットを撮る

このコードでは

driver.save_screenshot("screenshots/#{username}.png")

でやっている。

screenshots/username.pngスクリーンショットを撮って保存する。見たままの動作をするので目に優しい。

スクリーンショットを撮るときは、必ずアクティブウィンドウになる。(firefoxchromeで確認。)

OSの操作をするから?なのか?よくわからないけどそういう仕組みっぽい。

まぁそれで困ることはほとんどない。

本当に困るのはスクリーンショットの挙動がブラウザによって異なること。

具体的にはfirefoxはちゃんとページ全体を撮れるけど、chromeは表示領域しか撮れない。

Issue 294 - chromedriver - ChromeDriver2 take screenshot is not full page - WebDriver for Google Chrome - Google Project Hosting

他にもブラウザごとに挙動は違うことは多分結構あると思う。

このあたりは遭遇する度になんとかしていくしかないかな。

ちなみに僕はchromeの場合は、

driver.find_element(:id, 'some-contents').location_once_scrolled_into_view

みたいにして、スクロールしてもう一枚撮ることで対応していた。

location_once_scrolled_into_viewメソッドは、自分自身(エレメントオブジェクト)が画面内に表示されるように画面スクロールをしてくれる。

ピクセル指定するとかそういう面倒なことしなくていいので便利。

LTやってよかったこと

明日からやってみます!みたいなポジティブなメッセージを貰えた
Seleniumバリバリな人も中にはいるらしいことが分かった(そういう人には物足りない内容だったかも?)

残念だったこと

デモをプロジェクターに写せなかった。

マシントラブルで自分のPCからプロジェクターに写せなかった。

仕方ないのでスライドだけ別PCで写して、デモは自分のPCを前に置いて見える人だけ見てって感じでやった。

明らかな準備不足だった。悲しい。次はちゃんとやりたい。

でもSeleniumのテスト書くのもめんどいよ、みたいなメッセージもあった

確かにSelenium環境組んででがっつりやっていると、メンテが大変、みたいな話は聞いていて、多分そういう経験をした人なんだと思う。

このLTでは使い捨てのスクリプトを気軽に書いて自動化もできるよ!みたいな趣旨だったので、そういう感覚も払拭できたらなーと思っていたんだけど、そこまでには至らなかったらしい。残念。