ここは俺の備忘録だ

少なくとも日本語での言及が少ない話をするつもりです

大学生時代に聴いていた音楽を振り返る

こちらは TUT Advent Calender 7日目の記事です。6日目は @akahana_1 氏の「そのフォントサイズほんとに9pt?―jsclassesのフォントサイズ指定について」でした。彼のような殆ど居ないけれど1人は必要な編集勢が居るおかげでTUTの技術誌は成り立っております。それを慮るに、是非報われて欲しいものです。(人生とか?)

前置き

さて、技術ネタを既にQiitaに2本投稿予定であるため、こちらではB3編入から現在まで聴いていた音楽について垂れ流そうと思う。 今回は卒論修論その他作業に役立てば良いと考えて早めにエントリーした。しかしわりかし良い曲をチョイスしたつもりであるし、何より刺激が強い物が多々混じっているから役に立たないかもしれない。

B3

どうやら最初は AOKI takamasa だったらしい。アルバムRV8から2曲。

soundcloud.com

soundcloud.com

こういうズンドコミニマルも好きだが、個人的にはもう少し(ノイズにしろ)色気がある辺りが好きだ。 同氏のPARABOLICAが一番好きなアルバム。

https://www.amazon.co.jp/PARABOLICA-AOKI-takamasa/dp/B000ICLZ8Q/

AOKI takamasa のRemixだと、このMADに用いられた WAR & PEACE AOKI takamasa REMIX が印象的だ。

www.nicovideo.jp

その頃やってたニンジャスレイヤーフロムアニメイションで知ったのがMelt-Banana。 結構長らく活動しているらしいけど知らなかった。貼れるものが無かったのでamazonで失礼。

https://www.amazon.co.jp/Fetch-Melt-Banana/dp/B00ESPGN3G

ポップなものも売りがあれば良く聴く。次は吉田一郎

www.youtube.com

ZAZENBOYSのベース(3代目だっけ?)だったが、最近になって辞めたらしい。私はZAZENBOYSのファンでもあるから、このベースの才能が抜けるのは結構悲しい出来事だった。 まぁこれ以前から個人で作曲していたのは知っているし、今後の彼も追いかけたいと思う。 アルバムは最近疲れ気味の少しひねくれたおっさん(つまり弊大の学生とか)におすすめ。

Amazon CAPTCHA

高専時代からずっと聴いている気がするのがMermonte。

www.youtube.com

フランスのレンヌと言う街に集った複数のアーティストから瞬間的に構成されたバンド。2アルバム出してもう解散済み。

www.youtube.com

マイナーだし枚数も少ないので気に入った方は是非購入しておこう。視聴環境レベルを上げて殴れ。

音ゲーにありそうな感じになってたSquarepusher君。

www.youtube.com

続いて PaRappa the Rapper の Romantic Love Remix も良かった。ニコニコにもオリジナルや初音ミク含め優れた方が沢山居るのは知っているから、それなりに探している。

www.nicovideo.jp

カタカナ英語の良さを感じる。Youtubeを覗くと英語圏の人にもウケが良いようだ。

Mouse on MarsグリッチノイズましましなIDMも好きだ。特にParastrophicsのCriket。以下で視聴できる。SoundCloudは基本中の基本。

soundcloud.com

Bonoboの電子音楽。Cyriakは珍妙な電子音楽界隈に合いすぎる。こういったえげつない映像を作る人を追いかけるのも楽しみの一つだ。

www.youtube.com

とはいえ他の映像作家なんて詳しくない。僕が良く聴く warp records に顔を出す面子くらいだ。 Chris Cunningham とか jesse kanda とか。

www.youtube.com

www.youtube.com

(ただjesse kandaは映像というか FKA twigs とか Arca のジャケットとかで評価されている感有るが…)

8割くらい作業させる気の無いラインナップですがそうでないと記憶に残らない… 例えば、基本は環境音楽でありながらもたまに前衛的になるようなグループだと Penguin Cafe Orchestra もおすすめしたい。

この頃のジャズだと Yusef Lateef の Love Theme From Spartacus (1961) をヘビーローテーションしていた。

www.youtube.com

最初の20秒で購入が決定した。

Jamie XXはThe XXのメンバーだが、 The XX より彼個人の方が圧倒的に好みである。

www.youtube.com

www.youtube.com

新譜下さい。

どうやら日付を見たら元旦も音楽を聴いていたらしい。 それはそれとして METAFIVE はライブ版の音響が非常に良い。これに比べるとCDは平たい印象で、少し残念。

www.youtube.com

ここでヘッドホンがレベルアップ。Fidelio X2が届く。開放であるのに重低音がしっかりしており、そつなく必要なものを揃えている感じがゴールデンイヤー監修という感じ。 しかし側圧が強く、頭が大きめの私には長時間使えないという悩みから、次の年には家族に譲ってしまう。

ジャズというと古い物ばかり漁っていたが、Robert Glasper のおかげで現代ジャズもよく聴くようになる。 なにより現代は録音が良い…

www.youtube.com

www.youtube.com

アルバムは Black Radio がおすすめだ。

なお、色んなジャンルを高音質高画質で視聴したい方に Full Performance (Live on KEXP) は宝の山だったりする。

続いて Oneohtrix Point Never を聴く。天才というか、人類とのクオリアの剥離が凄そうな人。

www.youtube.com

www.youtube.com

実際に子供時代は所謂ポップでメジャーなものがサイケだったりグロテスクに見えていたそうで、 この次に作られたアルバム GARDEN OF DELETE はその感覚を着想としたらしい。ここには載せないが、えげつない電子音が好きな人にはおすすめしたい。

唐突ですがインダストリアル・ノイズのお時間です。

vimeo.com

ノイズの音作りにさえ拘りを持ってくれれば、マクロな構図が素朴なミニマルであっても最高だ。

左右。インディーズというか、かなりマイナーですが偶然引っ掛かった。 歌詞が良い。

www.youtube.com

静かすぎる昼下がりの住宅街を歩きつつ、神経質な妄想に取り憑かれる…物語性だなぁなど。

B4

一発目はBattles。昔聴いた時は正直よく分からなかったが、ここにきて私の中で謎の再評価が行われていた。

www.youtube.com

www.youtube.com

ただやっぱり最近のアルバムの曲はよく分かっていない。お客様の中にマスロックの詳しい方はいらっしゃいますか?

日本語ラップも全然いける。金と自身の成功と女以外を歌うラッパーは良い物だ。

www.youtube.com

映画の切り抜きで構成されているが、これらの元ネタも割とおすすめできる。友人と映画を見まくりたい。

レベルアップ。アンプが付く。バランスなんて気休めと考えて身の丈に合わせたつもりである。

非常に申し訳ないが、最新作を聴いてもClarkはやっぱりこの頃の世界観が好きだ。 タンザニアオオヤスデが可愛く見えてくる。

www.youtube.com

www.youtube.com

indigo jam unitもまた、気が付いたら解散していた枠…

www.youtube.com

大学生の間はこれ以上投資しないと決め最終形態をセレクト。 「低音の立体感」という表現が今までよく分からなかったが、このヘッドホンを使ってみると本当に立体的に出てくるから驚きだ。 それなりの重さなものの、装着感も良い。良い買い物をした。

Hiatus Kaiyoteはグラミー賞とってるし言うまでもないかもしれない。 (Robert Glasperも取ってる。念の為。)

www.youtube.com

www.youtube.com

これが合うなら Choose Your Weapon はアルバム通して本当に最高だから是非勧めたい。

ねこ of 2016

注目ポイントは胸毛

M1

Ben frost。エレクトロ・ノイズの天才。bandcampにて視聴と購入が可能。 やっぱり作者やレーベルに直接金を払った方がWin-Winである。(なんと言ってもflacが安く買える)

benfrost.bandcamp.com

豪雪地帯における吹雪に見舞われる主観をノイズによって表現する手法は見事で、狼の弦のような唸り声のノイズ表現も生命的な険しさを良く表せている。

冷徹な電子音に外観を寄せつつ、なおエッセンスはドラマチックなアルバム Aurora も素晴らしい。

www.youtube.com

これ以降の最新盤もあるものの、いまだ追えていない…ノイズは休憩時間が必要(˘ω˘)

どうやらポストダブと呼ばれる辺りが自分にとって気楽に飽きの来ない音楽を聴けるジャンルとして機能しているらしい。Mount Kimbeもその一例だ。 彼らがダンスミュージックを意識してない所もプラスに働いている。

www.youtube.com

www.youtube.com

水曜日のカンパネラはざっとしか聴いてなかったので、コミカルだったりポップさがある所にシリアスに振った曲があって耳に留まった。 歌詞も良い。

www.youtube.com

Louis ColeはThundercatのインタビューを読んでいる時に名前を見掛けたんだけど、面白い人だった。

www.youtube.com

www.youtube.com

www.youtube.com

変人感演出もさることながら、タイトな音作りが結構好み。

Clams Casino は飽きずに聞けて良い。ジャンルはえーっとウィッチハウスだろうか、正直この辺は詳しくない。

www.youtube.com

皆さんにはずっと頭の中でランダムに鳴る割には名前が思い出せず、煩わしい1曲があったりしないだろうか? んでこの頃ようやく思い出したらしい。M83である。

www.youtube.com

こういう高音のテーマには弱い。他には Oneohtrix Point Never の Zebra や、The Chemical Brothers の Swoon とかも名曲だ。

www.youtube.com

www.youtube.com

Blue man group は名前だけ知ってたけどまともに聴いたことが無かった枠である。 真面目に聞いてみたら普通に良かった。反省している。

www.youtube.com

彼らが参加している NPR Music Tiny Desk Concert も宝の山。

Brian Blade はかなり好きなドラマーである。ブラストビートなんて気にしないし、音の配置で空間を作るような彼のスタイルが非常に耳に合う。

www.youtube.com

www.youtube.com

取り敢えずここに上げた2曲は何度も繰り返し聴いていた記憶がある。

ラストは今イチオシのビートメイカー BINKBEATS だ。

www.youtube.com

www.youtube.com

www.youtube.com

作曲センスは勿論の事、使う楽器も何でもありだし(紙コップを砕く音をその場でサンプリングしたり)、色々自作しているのも面白い。才能まで含めて心技体がビートメイカーという感じだ。 個人的にはbandcampやらで金を払いたいのに新作EPをyoutubeに公開してしまうなどの大盤振る舞いをしていることが気になってしまう…対価を払わせて欲しい。

www.youtube.com

気に入ったらBoiler Roomの方もどうぞ。

www.youtube.com

Boiler Room は作業音楽を探すのにうってつけである。ジャンルも幅広い。

その他

出所が不明な音源へのリンクは控えたかったので載せなかったが、Steamのゲーム、 Lisa シリーズの音楽にも大分はまった。 久々に時間を忘れて夢中になった良いゲームだった…音楽では既存のゲーム音楽を超え、電子音楽の枠ですら独創性が垣間見える程だと思われる。 是非探してみて欲しい。

またNicolas JaarのSirensも良かった。多様でマイナーなジャンルを血肉とし独自性を追求している人物は大概良い音を出す。

私は皆様のおすすめの音楽を随時募集しております。

明日はmaggyotomo氏の「乗り鉄拠点としての豊橋の優位性」。なんか書いてくれる皆様のおかげで今日も健やかに眠れるのであります。

Created docker images to build a static binary for Haskell/GHC8

そろそろ現代人にならないとまずいのでDockerを覚えることに。 タスクとしてこの前話題になった「Haskell/GHCにおける正しいstatic binaryのビルド方法」を実践するイメージを作りました。 個人的な用事でGHC8のllvmバックエンド版も用意しています。macOSのリンカはappleのお気持ち上-staticができないようになっているので諦めるか頑張ってビルドして下さい。

https://hub.docker.com/r/nnwww/haskell-stack-link/

Alpine-linuxのパッケージマネージャにおいてGHCはほとんど特定ユーザの好意によってメンテナンスされている雰囲気です。(GHC 8.0.2だけがある状態) 従ってもう少しOSのサイズを増やしてでもStackの推論が聞く環境に移すべきかもしれません。

GHC 8.0.2を使っている方はCIサーバなどにどうぞ。

(というか今の今までまともに静的バイナリをビルドする簡素な手段が広まってなかった事に驚きである…)

(注: GHC8が用いるライブラリにはlibgmp(LGPL)が含まれるため、静的バイナリを配布する際にはご注意下さい)

Nix上のhaskellをビルドする際、zlibが見つからずリンクエラーになる問題

経緯

これまでmacOSでhomebrewを使用していたが、ライブラリにおける環境変数の衝突にはいい加減飽き飽きしていた。

しかしサーバでも無いのにDockerというのは大げさだろう。パッケージマネージャレベルで複数バージョンを上手く切り替えてくれれば良いのだ。

そのためmacOS上でNixを使ってみようと思い立った。

問題

題名のまま。

ワークアラウンド

これが実はcabalとnixの(そしてどちらかと言えばcabal側の)問題であるのが重要なポイントだ。 nix開発者曰く、cabal側での内部の取り扱い方が特殊であるらしく、includeファイルとlibファイルを個別に認識させてやらないといけないらしい。 従って以下のissue commentの方法で解決できる。

Stack + nix error · Issue #2130 · commercialhaskell/stack · GitHub

しかし、nix拡張を使用するとnixを使っていない人向けに公開するのが面倒になる。 従ってdefault.nix(shell.nix)に記述しよう。GHC 8.0.2を使う stack --nix プロジェクトにて、zlibを用意する最小設定が以下になる。

{nixpkgs ? import <nixpkgs> { }, ghc ? nixpkgs.ghc}:

with nixpkgs;

haskell.lib.buildStackProject {
  name = "somesome";
  buildInputs = [ zlib.dev zlib.out pkgconfig ];
  ghc = haskell.compiler.ghc802;
 }

nixの所感

使って一週間だが正直分かりづらく、現状他人にはお勧めできない。

まず公式ドキュメントが中途半端というか、丁度欲しい所が載ってないことがちらほらあり、結構苦戦する。 例えば、まずnix本体のドキュメントでは nix-env -i でパッケージをインストールすると教えられる。 しかしnixを用いたstackの開発ではsystem-ghcが強制されるため、 開発だと nix-env -f "<nixpkgs>" -qaP -A を用いて haskell.compiler 下のコンパイラバリアントを選択しなければならない。 そういった記述はnixpkgs側、つまりリポジトリのマニュアルの言語毎の仕様を頭に入れる必要が生じる。

https://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure

というか各種attribute setの名前空間は一体どうなっているんだろう?少なくとも早見表、できればnix自体に一覧表示や検索機能が欲しい所だ。

またdefault.nixを書く際、環境を導出する関数が言語毎に異なる。上述のように、haskellを使ったプロジェクトでstackを用いるなら buildStackProject を用いる。 そのため一括のリファレンスが欲しくなるが、これが現状何処にあるかわからないという問題もある。 (先程のnixpkgs manualにユースケース毎の代表的な方法は記述されているため、一応使えはするが…)

以上、始めようとした瞬間にマニュアルを隅々まで眺める作業が必要になるため、それなりにしんどい。 一方で、プロジェクトの名前空間では言語関係なく再現可能な環境を作成でき、 マシン全体の名前空間では雑な運用をしても不整合に対してロールバックできるのは魅力的だ。 そのため知見が溜まったら「ここを見ろ」集を作りたいのだが…果たして適応できるだろうか?

突っ込める所があれば色々教えていただけると非常に助かります。

runSTにおける関数合成の失敗—Higher Rank Typesにおける型推論の落とし穴

余談

2つの事柄を題に要約する言い回しとして「あるいは」以外を見つけないとブログの題があるいはだらけになってしまう…

本題

より高ランクな型を低いランクの型パラメータで表すことはできない。 従って通常のランク1であるような関数somethingについて、something . runSTのような関数合成は上記ツイートのようなエラーを起こす。 しかしそのままだとrunST $ doが使えず非常に不便であるため、GHC7から$について推論する特殊ルールが追加されている。

これもまたHaskellに数多ある知っていれば当然であるが、知らねば型エラーから類推するのは難しい一例と言える。 まぁともあれ、ランク2の型はSTのスコープ制限は勿論のこと、 AllowAmbiguousTypes拡張と組み合わせてfromIntegralした数値を使い回すのに非常に便利だったりする(申し訳程度の擁護)。

関数適用演算子$は空気の如く重要であるため、色々特別扱いを受けている。 例えばLevity Polymorphismが知られている。 Levity Polymorphismはhaskellの意味論でいうボトムに持ちあげられている型(Lifted)と持ちあげられていない型(UnLifted)の間で多相性を行う実装だ。 意味論についてはここで概観が読める。

Haskell/Denotational semantics - Wikibooks, open books for an open world 詳細と論文へのリンクはこちらを参照されたし。 stackoverflow.com

Haskell/GHCスクリプティング時の実行ファイルパス取得、あるいはGHCが公開するC言語APIは何処にあるか?

問題

runhaskell/runghcを用いることにより、Haskell/GHCではshebangを書き込んだスクリプティングが可能である。 特にStackの登場以降、依存性の解決も容易となり非常に気軽に扱えるようになった。

github.com

個人的にシェルスクリプトは避けていきたいため、これは渡りに船だ。しかし基準となる実行ファイルのパスが取得できないという問題があった。 System.EnvironmentのgetExecutablePath関数だとビルドツールの作業ディレクトリを見に行ってしまうのである。

解決策

FindBinパッケージのgetProgPath関数はスクリプティング時に実行ファイルのパスを取得し、コンパイルするプログラムであれば実行するバイナリのパスを取得する。一見その古さに驚くがlts-8.21(GHC 8.0.2)にて動作を確認した。

FindBin: Locate directory of original program

この実装が以下となる。

github.com

さて、ここでヘッダファイルの読み込み無しにforeign import ccallされているgetProgArgv関数らは一体何者だろうか? (なおgetProgArgvはSystem.Environmentでも使われている)

これらの正体はGHCghc/includes/RtsAPI.hにて公開している関数である。詳細は以下が詳しい。 この疑問はHaskell-jpのSlackにて@hiratara氏に答えをいただいた。

Commentary/SourceTree/Includes – GHC

実際のコードはgithubの方が見やすい。

github.com

そろそろ象牙の塔の外側が見えてきたようだ。

Haskell/GHCでプロジェクト上のデータファイルのパスを取得する

近況

GHCでWord2Vec(fasttextベース)を実装しており、詰まりと知見獲得を繰り返している。 新機能に関する言及は多いのに実際の開発知見となるとヒット率が目減りしてしまうのは苦しい所であるが、 現代ではStack OverflowやHaskell-jpという素晴らしい集まりがあり、ハードルも随分下がったと言えるだろう。 この詰まりはそのままネット上の情報の薄さでもあるため、これをブログに残していくことでコミュニティへの還元とする。

仮定

(間接的にでも)Cabalの使用を仮定する。現代的な環境であるStackを用いている人が殆どであるから問題無いだろう。

解決策

cabalのdata-filesフィールドを用いる。詳細は以下。

Cabal User Guide: Developing Cabal packages

data-filesフィールドにパスを記述するとPaths_<パッケージ名>モジュールにてgetDataFileName関数が使えるようになる。hpackでも同じフィールドが利用可能。 stackから入ったユーザ(私)はcabalで一回は躓くのでマニュアルはしっかり読んでおきたい。

Rustのreference/dereferenceまとめ

この記事は TUT Advent Calendar 2016 - Adventar 5日目の記事です.

3日目の記事: 5mmくらいわかる競馬講座~国庫から出金~(CC他 - 自分用

(@naruhodo2015さんへ: Rustは関数型プログラミング言語では無いですよ ><)

最近,友人et al.と適当な映像を垂れ流しながらもくもくと作業する会が不定期で開かれる様になりました.そこでRustを書いていた友人曰く「Rustのreference/dereferenceの対応とその演算子がわかりにくい」との事で,まとめてAdCに貼ることに.

f:id:Nnwww:20161205002404j:plain

(mut &になってるのは徹夜で脳死していた影響です (´・_・`))

一番わかりにくいのはLHSとRHSに現れる&の役割が異なる事です.LHSで登場する「パターン」では参照の付加をrefパターンで行えるようになっており, let ref x = ...等とすると右辺の評価結果に参照を付加した物をxとして束縛します.一方でdereferenceを行うのが&xパターンで,これはref xと比べれば自然な使われ方でしょう. ある値xの参照が入ってくるので,&xに分解されると考える訳です.

RHSで登場するのは単項演算子である事に注意します.するとこれがC/C++に由来するreference/dereferenceの記法である事が分かると思います.

構造体に結び付くメソッド構文の場合,参照を打ち消すようにdereferenceが行われます*1.実用では参照が付加される関数がどれなのか(iterなど),ライフタイムがある場合はどの引数に基づくのか*2,use after freeが起きる場合スコープをどう限定するかなどなどを気にしつつreference/dereferenceの対応を取っていく必要があります.コンパイラと協力しながらdata race安全なコードを詰めていくプログラミングがRustの醍醐味でありつらみでもあるわけですね.

filterのように,イテレータには二重に参照を付加して述語へ渡してくるものが幾つかありますが,この理由は分かっていません.詳しい型がいらっしゃったら是非コメント宜しくお願いします.

それでは,皆さん良いRustプログラミングを!

6日目は @jp3cyc さんの Ogaki Mini Maker Fairに行ってきた | jp3cyc's blog です.

*1:`Deref` による型強制

*2:HashMap等,使い回しが起きる所で重要になります.e.g. コンテナの値を取って→入れて→エラー (lifetimeとかの話) - Qiita