@kyanny's blog

My thoughts, my life. Views/opinions are my own.

ワタリドリ

AWA で適当なプレイリスト選んだら流れて気に入って Apple Music で今日一日中ほぼこれだけ聴いてた。イントロのアイリッシュっぽい感じとサビ全部の裏声なメロディがすごく好きだ。

ワタリドリ

ワタリドリ

  • [Alexandros]
  • J-Pop
  • ¥250
  • provided courtesy of iTunes

ワタリドリ

ワタリドリ

  • [Alexandros]
  • J-Pop
  • ¥250
  • provided courtesy of iTunes

PV はそこまででもなかった。同じバンドの別の曲のやつのほうがかっこよかった。サビの入りの半身ジャンプして弾き下ろすところは躍動感があって疾走感ある曲に合っててすごくよかった。


[Alexandros] - ワタリドリ (MV) - YouTube

ghn を Go で書いてみる

いま ghn には二つ不満があって、ひとつは新しいバージョンの Ruby をインストールするたびに gem install ghn しないといけないのがちょっとだけ面倒くさく、もうひとつは Notification API の結果 JSON から issue/pull request 等の permalink を取得する部分の実装が妙に複雑になってしまっている。

で、せっかくなら Go で書き直してみたらどうなるか試してみようと思って基本的なところだけ書いてみた。

gist.github.com

いくつか学びがあった。

  • Ruby 版のほうのいまの実装は /notifications の結果 JSON を文字列操作して無理やり permalink を組み立てており、なんでそうしたのか覚えてないが、それ API 用の URL にもう一回リクエストして html_url をとればいいだけじゃん、そこはスレッドとかで並行処理できるから遅くもならないはずだよね、と、よりスマートな解に気づけた
  • Go で並行処理といったら goroutine というのを使うのだろ?と思っていろいろなブログ記事とかをコピペしながらどうにか動作させることはできたが、 Mac OSX の open コマンドのなんか制約で、短時間のうちに呼び出しすぎるとエラーがでてしまうので sleep 1 しているので、結局 URL 取得部分を並行処理してもコマンド全体の実行速度にたいして影響なくて意味なかった

理解できてないところ

  • for ループの中で goroutine を呼び出し?て channel に string を入れて、ループが終わった == すべての URL への GET が終わったあとで channel にメッセージを送った? string を全部取り出したい、というとき、一つ目の for ループの外に <-ch を一行書いただけだと URL が一個しかとれず、配列の要素全部とるみたいなことも channel にたいしてできるものなのかわからなかったので、同じ回数 for ループを回して一個ずつとりだす、ということをやったが、これが正解とは到底思えない

音楽ストリーミングサービス

最近話題の音楽ストリーミングサービス、日本でローンチしたやつ三つを試しに使ってみている。 Spotify を日本から頑張って使おうという気概はなかった。四月にマニラに行ったとき試せばよかったと後悔(そのときは考えもしなかったが)

まず AWA を二週間くらい使っている。「インターフェースにこだわった」とか堂々と言われるとむしろ引くわ...みたいな感じもあるが、でも言いたいことは伝わっていて、彼らは「音楽という体験」をこういう風に感じていて、だからこういう表現なんだね、っていうのはユーザーとして評価できる。

LINE MUSIC は、まぁ無料のうちに試すだけ試そう、と思ってちらっと見てみたが、無難で面白みがないなぁ、と感じた。 LINE の世界観にはおそらくうまくマッチしているのだと思うが、 LINE のフレンドリストに奥さん一人しか登録していないような人間が LINE の世界観を心地よいと感じるわけもなく、予想通り合わないわー、という感じだった。

そして Apple Music だ。 iOS と iTunes をアップデートして、パッと見は「なんかフツーだな」と、 AWA のほうが比較的長く使って慣れてきていて愛着も出つつあるしなー、なんて思っていたのだが、ストリーミング再生した曲と元々ローカルの iTunes ライブラリにあった曲がまったく同列に並んで表示される様子をみて衝撃を受けた。これがクラウドか!と冗談ではなく思った。これまでどんなサービスを使っていても、データの実体がどこにあるかを意識しないことはなかったが、初めて「データがどこにあるかなんて問いは無意味だ」と感じた。

AWA は日本の企業がやっているから応援したいという気持ちはあるのだが(しかし自分は政治的にはナショナリズム大嫌いなので我ながらアンビバレントだなと思うが)、やはり Apple Music がけっこう先を行っているんじゃないかなぁという気がするし、消費者としての自分は「最初から Mac でも聴けるし、なんかファミリーアカウントだと奥さんが使うぶんが安上がりっぽし、プレイリストの面白さとかは AWA のほうが現時点では上に感じられるけど、まぁもう Apple Music でいいんじゃねーの」と思い始めてしまっている。


そんなこんなで「音を楽しむ」習慣が乏しかった自分でも、おずおずとブームの波のうねりの周辺をうろうろしながらけっこう楽しんでいる。

せっかくだから自宅でもうちょっといい音で聴きたいと思い、 Bluetooth スピーカーを新調した。いままでは何年か前に買った SONY の SRS-BTV5 というのを使っていて、丸くて小さくてかわいいから気に入っていたけど、いかんせん音はイマイチで、 iPhone 6 のほうが良いくらいだった。

せめてテレビ並に鳴るものが欲しいと思っていろいろレビューを読みふけったりした結果、 JBL CHARGE2 というやつにした。買う前に視聴もしたりして、これくらいなら満足できそうだと納得して買って、実際部屋で聴いてみてなかなか満足できている。

300,000 Views / 300 Days 突破

f:id:a666666:20150630023216p:plain

30万ページビューと言われても全然ピンとこないし、300日書いたと言われてもやはりあまりピンとこない。30万ページビューなんて、人気のあるブログやメディアとかでは1日で稼ぐんじゃないの?自分の4年は誰かの1日分の価値しか生まなかったのか、とか考えだすと落ち込むのでこういう数字を気にするのはよくない。かたや日数のほうは、100%自分が積み上げたものなのだから自信を持っていい。

はてなダイアリーのほうでは905日書いていて、はてなブログにインポートしていないので合計で1200日以上書いたことになる。毎日その日に書いたものばかりじゃないから厳密な数字ではないけど、1200日という数字をみるとさすがにけっこう達成感がある。ブログはまだダイアリーの1/3しか書いていない。ダイアリー偉大だ。

合計したら1,000日(4桁)超えてたので、5桁(10,000日)は何年くらいなんだろう?と思って調べてみたら27年くらいらしい。いま35歳なので、毎日書いたとすると62歳か63歳で達成可能。毎日は書けないので実際にはもっとかかるはずだが、平均寿命まで18年くらい猶予があるので、ぎりぎり届きそうではある。それまではてなブログ、というかブログというものが続きますように。まぁブログという形態がなくなってもどこかにテキストエリアさえあれば書き続けることはできるが。

Go の []byte がわからない

JSON のパースとかをやってみようと思ってドキュメントを読むと byte とか出てきて、 byte ってなんだよ文字列とどう違うんだよ C も Java もやったことないから意味わかんねえよ、と思って go string byte difference とかでぐぐって出てきた記事を少し読んだ。

Strings, bytes, runes and characters in Go - The Go Blog

こっちは、文字列と文字を扱うのは難しいんだよ、的なことを言っているのだな、ということはわかったが、 string と byte がどう違うのかという知りたかったことはイマイチ解決できなかった。

Arrays, slices (and strings): The mechanics of 'append' - The Go Blog

こっちは長くて半分も読めなかった。そもそも slice について知りたかったわけじゃないんだ。

こういうプリミティブな部分で詰まると、おそらく勝手がわかってないから適切な検索キーワードを思いつけずに、探し物をしても正解にたどり着けず挫折する、という流れでだいたいいつも終わる。こういうの自分は非常に多くて、何か新しいことに挑戦すると10回やって10回はこうなるのだが、世間一般にみんなそんなに失敗ばかりしているとはとても思えなくて、一体どうしてみんな行き詰まらないんだろうと心底不思議だ。自分が人の数倍バカで要領が悪いのだとしか考えられない。

結局、現時点では、「string と byte は型が違うデータで、それぞれを必要とする関数には型の合ったデータを渡さなければいけないから、そういうものだと思って黙ってその通りにするしかない。いつ string が必要でいつ []byte が必要なのかは、おそらく何かしら一貫性のある法則があるのだろうがいまは理解できないので、都度ドキュメントを読むか丸暗記するしかない。なぜそうなっているのか?という理由をいま考えても無意味なので、考えないようにする」と考えることにしたが、わからないことをわからないままとりあえず先に進むというやり方は気持ち悪くて嫌だ。