歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【本】新年になってからいろいろ読んだ本

読んだ本をまとめつつ、アフィリエイトで小銭を稼ぐための記事です。もちろん書籍代のほうがかかるので赤字ですがw

集中力はいらない

西尾泰和さんが話されていた本。

scrapbox.io

私自身は「(著者の性格だと)1つの作業は途中で飽きるので、複数の仕事をConcurrentにこなしたほうが楽」「一つのことに集中しすぎると偶然必要な要素が手に入る、セレンディピティが無いので、いくつか関心のある物事を持ち続けてるほうがいいアイデアが見つかるよ」って意味合いだと理解しました。落合陽一さんが「百姓になろう」って言ってたのと似た感じ。

自分自身の生存戦略を考える際には、時間スケールが数時間~1日なら「集中」を、数日~数年なら分散(自分のテーマを元にいろいろ手を出す)を中心に考えたほうがいいかも。(急に生存どうこうってどういうことって思われた方、WEBエンジニアは生存戦略って言葉が好きなんです!)

Effective Java

全体的にいい本で、Javaプログラマーでなくても参考になります。

個人的にはHaskellの例外について調べていた時に見つけた例外安全性のスライドでExceptional C++とともに勧められていて、そちらはまだ私には難しかったので読みました。「例外を起こしたときにオブジェクトや変な状態にしたり、変な参照を残すな」、そのために「実際に使う前に、先にオブジェクトの状態をチェックして例外を投げる」とか「例外が起きた場合にロールバックする」ということまでは理解しました。

並列・並行処理の章はちゃんと読めてませんが、必要ないときに読んでもピンとこないので、きちんと取り組む必要が出てきたら読もうと思います。

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

ナリワイをつくる

Kindle Unlimitedでタダで読めましたw

エンジニアリング組織論への招待

最近やけに話題になってますね。エンジニアリングの仕事を「不確実性を下げる行為」と言っているのはスタンド能力っぽくてかっこいい分かりやすいし、ある本質をついていると思います。

あとハンロンの剃刀として「相手が嫌なことをしてきても、無能で説明が付く場合は悪意を見出してはならない」って身も蓋もないこと書いてたのも印象に残ってます。西海岸のハッカー文化など、エンジニアの文化的な話も多いので、そういうの興味ある人にもいいかもしれません。

恋する文化人類学

この記事が素晴らしかったので、著者の本も読んでみました。

文化人類学の入門書としても個人的な異文化交流の事例としても読めるようにした」ものらしいです。

現地の引き出物や結婚式の変わった風習に面食らいつつも、いちいち冷静に立ち止まって「これは親族の基本構造で言われた~」とか「贈与論の~」とか冷静な目で分析を始めるのでかっこいいです。ただ、資料収集時の癖が出てしまい、奥さんに「あなたの撮った結婚式の写真は誰が来てたのかわかりづらいよ」って言われてしまったというエピソードは職業病っぽくて笑ってしまいましたw

恋する文化人類学者

恋する文化人類学者

西太平洋の遠洋航海者

『恋する文化人類学者』で勧められてた本の一冊です。こういう本もKindleで売ってるのでいい時代ですね。

西太平洋の遠洋航海者 (講談社学術文庫)

西太平洋の遠洋航海者 (講談社学術文庫)

ガベージコレクションアルゴリズムと実装

社内チャットでJavaのstop the worldの話が出ていて、「Pythonだとどうなんだろう」と興味持っていたときにちょうどブックオフで見かけたので買いました。でもちゃんと理解してません😢

私が普段使っているのPythonでは、参照カウントがメインで、循環参照の処理に他のGCを使い分けている。そのため「(stop the worldのように)GC実行中にアプリケーションが完全に止まる」ってことは考えにくいが、循環参照のGC実行中はその可能性があるかもね。もしあったらgcモジュール試してねってある意味当たり前のことが書いてました。

また、そもそもGCアルゴリズムはおおまかに分けて3種類あるらしい。他のアルゴリズムもだいたい得意分野の組み合わせで考えられるそうです。

  • 参照カウント
  • マーク・アンド・スイープ
  • コピーGC

世代別GCみたいに言われているものは、これらのアルゴリズムにプラスαで工夫する感じみたいです。だいたいこの3種類の特性と、世代別GCみたいなよくある工夫まで知っていれば最初のひとまず自分の疑問には答えられそうです。

ガベージコレクションのアルゴリズムと実装

ガベージコレクションのアルゴリズムと実装

超AI時代の生存戦略

なかなかいい本で、「進化した機械学習やグローバルな競争には勝てないから、自分ならどうやってコモディティ化したものに対して+αできるかを考えればいい」「競争自体を避けよ」みたいな主張です。

あと「ローカルなコミュニティで1位になるところを作り、それをグローバルな文脈に持っていく→またローカルで…」みたいなサイクルで勉強できるといいよね、みたいな話もありました。

超AI時代の生存戦略 ―― シンギュラリティ<2040年代>に備える34のリスト

超AI時代の生存戦略 ―― シンギュラリティ<2040年代>に備える34のリスト

お金2.0

けっこう話題になってたので読みました。「誰もが自分の都合のいい経済圏や思想を選び、分断された社会が来る」って話はポスト真実社会的な話は面白いです。

細かい話ですが、「ベーシックインカム(BI)があればお金がボトルネックにならなくなる」という主張があり、そもそも「なぜBIが導入されるのか」「そもそもBIを導入するインセンティブあるのってそもそも誰なの?」って根拠が書かれてなかったのがちょっと残念でした。そこだけでもけっこう面白い話できそうですし。

お金2.0 新しい経済のルールと生き方 (NewsPicks Book)

お金2.0 新しい経済のルールと生き方 (NewsPicks Book)

増補改訂版Java言語で学ぶデザインパターン入門

「そういえば今までちゃんとデザインパターン勉強したことないな」と思って読みました。

いい本だとは思いますが、やっぱりこういうものって必要あって産まれてきた概念だと思うので、何もない時期に勉強するのはモチベーション上がりませんでした。でも後々リファレンス的に使うかもしれません。

Haskell等だと数学の概念を援用するけど、Javaだと工場とか人の喩えを使うのが文化の違いっぽくて面白いです。

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

僕たちのインターネット史

ゆるい本です。「西海岸っぽい考え方に影響された人は技術に夢見がちで大仰な警告出したがるけど、山形浩生さん(伽藍とバザールとか、ローレンス・レッシグのCODEとかを翻訳した人)はいい感じに東海岸(現実的)っぽくてバランス取れてていいよね」って書いてたのを覚えてます。あと、日本のインターネットって、2ちゃんねるニコニコ動画で「思想は無くても盛り上がればいいや」カウンターカルチャーっぽさが薄まってるよねって話とか。

「WEB時代になって(サイトが公開されている一方、裏側のコードはクローズドだから)オープンソースの考え方って薄まったよね」って書いてたけど、ここにはちょっと疑問があった。有名な企業はだいたいオープンソースにもコミットしているので、変容はしてるけど薄まってはいないと思う。って話を先輩としたら、「OSS自体でマネタイズしようとした企業はほとんどいなくなったよね(Mozillaみたいなもの?)」って話をされました。

あと伺か(with 任意)の話とかありました。えんいー。

僕たちのインターネット史

僕たちのインターネット史

プロカウンセラーの共感の技術

これもKindle Unlimitedでタダで読めました。いい時代です。

以前読んだ『医療とコミュニケーション』という本では合理的な議論では良いのですが、「共感」という視点は欠けていたと思います。その場合、こちらの本が参考になるかもしれません。

kiito.hatenablog.com

プロカウンセラーの共感の技術

プロカウンセラーの共感の技術

時間の言語学

時間は抽象なので、私たちが時間を認識するとき、なにかに「見立て」るしかない。この「見立て」つまりメタファーを分析することで、“時間”を具体的に意識化することができる。近代において最も強固な「見立て」は〈時は金なり〉のメタファー。コーパスや、具体的なテキスト(「吾輩は猫である」「モモ」等)を探り、私たちが縛られているさまざまな時間のメタファーを明らかにした上で、新しい時間概念(「時間は命」)を模索したい。

近代になってから「Time is money」のメタファーで「時間は浪費するもの」「管理するもの」ってイメージが出来たって話が面白かったです。

人はなぜ物語を求めるのか

この本を読んでたら「筆者は人生に期待するのを止めたら生きるのがラクになった」って書いててブッダかと思いました。「一切皆苦」って言葉の「苦」は、苦しみだけじゃなくて思い通りにいかないこと全般を表しているそうです。

人は真実を手に取ることができない。ましてやその手触りを他者と共有することは不可能である。そこで、思考の枠組みとして導入されるのが「物語」だ。そう、本書の指す「物語」はしばしば「演劇」や「小説」ではなく、事実の羅列に因果関係を見いだそうとする人間の思考癖についてである。

こういうのって、例えばデータ分析のとき、分析者が意識してないとまずいことかもしれませんね。

Hit Refresh(ヒット リフレッシュ) マイクロソフト再興とテクノロジーの未来

最近、マイクロソフトのプロダクトがイケてる(例えばVS Code等)のは、この人のおかげなのかもしれません。

Hit Refresh(ヒット リフレッシュ) マイクロソフト再興とテクノロジーの未来

Hit Refresh(ヒット リフレッシュ) マイクロソフト再興とテクノロジーの未来

SM調教師瞳 と同人ハードの夜明け

同人誌です。スーパーファミコンをハックして任天堂非公認のゲームを作る(作った人へのインタビュー)内容です。芸能活動する前の桃井はるこのバイト先の話もあって、技術以外でもかなり濃い内容でした。

ソーシャルメディアと公共性

kiito.hatenablog.com

こっちに書きました。

【本】『ソーシャルメディアと公共性』感想まとめ

最近読んだ『ソーシャルメディアと公共性』という本が面白かったのですが、インターネット上で誰もブログ等を書いておらず、悲しかったのでおすすめする記事です。

大震災・原発事故やテロリズムなど様々な社会的リスクへの対応が求められる今日,一方でSNSなどのソーシャルメディアが日常のリアリティを変えつつある.世界秩序を揺るがす脱真実の時代がくるのか,新たな公共性と社会関係資本の構築は可能か.第一線の研究者たちが課題に挑む.

ソーシャルメディアと公共性 - 東京大学出版会

学習院大学の教員紹介ページに編者の遠藤薫さんの紹介がありました。本全体を通してこの問題意識で議論されています。

現代、メディアが急激に発展しています。メディアは、コミュニケーションを媒介し、世界を認識する基盤となります。メディアの変化は世界を変えます。

TwitterFacebook、LINE、instagramといった新しいメディアを皆さんも日常的に使っていることでしょう。

1990年代から広く使われるようになったソーシャルメディアは、誰でも自由に発言し、膨大な情報にアクセスできることから、表現の自由を最大限に保証し、少数者の意見にも耳を傾ける、民主主義のプラットフォームになると期待されました。

マンガやアニメ、観光などの日本文化も、ソーシャルメディアを媒介にして世界への発信力を高めています。

しかし、ソーシャルメディアが普及するにつれ、副作用も目立つようになっています。

一部の過激な発言が、ネガティブな感情と共に、増殖・感染し、あたかも多くの人に共有される意見であるかのように拡散します。それが政治や選挙にも影響し、偏狭なナショナリズムや他者に対する不寛容が秩序を揺るがしています。テロや国際対立を助長しているケースさえあります。

問題が山積するなか、メディアの発達はさらに続きます。ロボットや人工知能が、私たちの日常に組込まれつつあります。社会はこれからどのように変化していくのでしょう? 私たちはメディアをうまく使いこなすことができるのでしょうか?

WEB企業のプログラマーである私も、「ITやソーシャルメディアが無ければ知り合えなかった友達ができたことがある」一方で「検索サイトやFacebookフェイクニュースが多いけど大丈夫なのか」、「自分自身も技術・科学のニュースで情報をどうやって取捨選択すればいいか分からない」「一昔前より裏付けをしっかり探さなきゃいけなくなった」と感じているのですが、「post-truth」というキーワードで議論されていて興味深かったです。

また、『偶然の科学』でワッツが書いていたような、SNSのコミュニティ分析もあり、個人的にネットワーク科学を勉強していた時期があったので懐かしくなりました。

「細かいコミュニティに分断されていて、そこをつなぐ橋は作れるのか」という話は、落合陽一さんの本に書いていたような「ローカルなコミュニティで自分らしさを発揮せよ」「そこからグローバルに持っていってもいい」みたいな話を思い出しました。あと『分断』というキーワードはポール・グレアムのエッセイで始めて見たのですが、ちゃんとした社会科学の文脈で話されていたのを見たのは始めてです。

【LSDj】ゲームボーイでDJをする(PDCA編)

ゲームボーイで曲を作ってミキサーに繋いでDJしたい」というコーナーです。これまでの記事で、「改造ゲームボーイ実機を用意する」「耳コピを始める」ところまで来ていました。

最初に私自身は当初、「ピアノを習っていたことがあり、楽譜やコードもある程度わかる」「DJも一応できる」「作曲や楽器のことは分からない」という状態でした。今でもまだ勉強中で「途中経過を記録」しているだけなので、数週間後には言ってることが全然変わってるかもしれません。

また、一応「(自分の興味のある分野で)新しい分野に取り組むときに必要な勉強方法を学ぶ」という真面目な動機もあります。

コードに代わるものを求めて

通常、作曲ならコード理論を学べと言われることが多いと思うのですが、ゲームボーイファミコンは3和音(+ノイズ)しか使えないため、コードを覚えてそのまま使うことはかなり辛いです。(実は高速アルペジオでコードを表現する方法はあるものの、個人的に「ちょっと違うかな」と思ってやっていません)

また、なんとなくですが「楽曲をチップチューンアレンジするにしても、そのままコピーするのではなく対応できる音でデフォルメする必要があるんじゃないか」と感じています。

そこで今は「(一音しか出せない)管楽器三重奏アレンジの楽譜を見て打ち込む」という方法で感覚を掴もうとしています。ブックオフで良い本が無いか探しました。

トロンボーン デュオでも! トリオでも! 楽しくアンサンブル

トロンボーン デュオでも! トリオでも! 楽しくアンサンブル

ピタゴラスイッチの曲です。元々リコーダーの音で作られた曲なので、音数が少なく自然に響きます。

逆にギターやピアノ等のアレンジはあまり参考にならないようです。個人的にピアノに親しみがあるんですが、「今左手で3音出してるけどその音出せないんだよ」と悲しくなることが多いです。

ちゃんと理論を学ぶなら和声学や対位法と呼ばれるジャンルになるようです。ドラクエのBGMを作曲したすぎやまこういちさんが「3トラックあれば充分」と言っていたそうですが、それは彼がクラシック出身だからかもしれません。

一応、対位法の入門書も買ってみました。とはいえ、本をめくりながら気になった曲を打ち込んでみているだけですが。

名曲で学ぶ対位法 書法から作編曲まで

名曲で学ぶ対位法 書法から作編曲まで

音作りはシンセサイザーの本で

前回の記事で「国内外のLSDjミュージシャンのYouTube動画を見ながら勉強している」と書いたのですが、「たしかにこのパラメータにするといい音になる」「ただ、自分で音を調整したいときにどうすればいいか分からない」ような状態でした。

このような悩みはシンセサイザーの本を読むことである程度解決しました。松前公高さんの本など、Kindle Unlimitedに登録していれば無料で読めるのでありがたいです。

「20年後でも通用する内容を目指した」と書いてあり、機材に囚われない内容です。矩形波三角波、ノイズなど各波形の特徴や、エンベロープADSRで音を調整するノウハウは、LSDjでTableを操作するときにも使える知識でした。

こちらの本では、「テクノの各サブジャンルに特有な音色をどう再現するか」ということに特化しています。名盤紹介のコラムも充実しているので、少しずつ掘っていこうと思います。

今自分がLSDjで悩んでいることも、シンセサイザーを使うテクノミュージシャンが何十年前かに通った道なのかもしれません。それを押さえた上で、チップチューン特有の工夫を学ぶのが良さそうだと感じています。

gigantext: 少ない音数で頑張る方法(chiptune)

作ったもの

とりあえずSUUMOの曲を耳コピ(というのは大げさですが…)しました。まだまだですが、しばらくは短い曲をガンガンコピーしてレベル上げていきます😆

勇気をくれたもの

必須ではないですが、チップチューン関連で勇気をくれるのでおすすめしたいものです。

Silver Surfer

NES(海外版ファミコン)のクソゲーとして有名なソフトです。いろいろと詰まった時プレイすると、素晴らしいBGMと理不尽な殺し方してくれるのでちょうどいい気分転換になります。

sakana38.hatenablog.com

Psycho Somatic Generation

ファミコンチップチューンで有名なchibitechさんの最新アルバムです。ファミコン時代のいろいろなゲーム会社の音楽をオマージュして作られたアルバムで、「シンプルな音でも良い音楽が作れる」と教えてくれます。

chibitech.bandcamp.com

ギャル電

電子工作ギャルユニットです。ゲーム機を修理して「こんな雰囲気ではんだ付けしていいんだろうか」って悩んでいるとき、野生のPDCAというワードに大いに勇気づけられました。

careerhack.en-japan.com

【プログラミング】私がGo言語を使わない唯一の理由

マスコットキャラクターのGopherくんを見るとチェコのロックバンドHentai CorporationのPVを思い出すからです。森で襲われる…。

www.youtube.com

こちらのアルバムに収録されています。

Tsocsssaaagtmwhvahhh

Tsocsssaaagtmwhvahhh

  • アーティスト: Hentai Corporation
  • 出版社/メーカー: Bandzone Records (digi distributed by Prodejhudbu.cz)
  • 発売日: 2013/12/23
  • メディア: MP3 ダウンロード
  • この商品を含むブログを見る

あと、Octo Gatoというバンドの猫ロゴも既視感あって最高ですw ステッカー欲しいですね。

f:id:takeshi0406:20171230125322j:plain

www.youtube.com

関連記事(?)

mt.orz.at

【Game Boy Advent Calendar】PythonプログラマーがGBでチップチューンを始めて変わったこと・驚いたこと

これはGame Boy Advent Calendar 2017の15日目の記事です。遅くなってしまいすみません。

クラウド環境(AWS)やスクリプト言語Python)を使うWEBプログラマーが、ゲームボーイというレトロな環境に触れて驚いたこと」をまとめた記事です。

私は仕事で、PythonRubyを主に使って、AWS/GCP上でのシステム開発やちょっとしたデータ分析を行っています。また、『抽象度の高いプログラミング』をするために、クラス設計や(使いこなしているとは言えませんが)Haskell等の関数型言語も勉強しています。

本当は、ファミコン(正確にはNES)でのチップチューンで有名なchibi-tech先生に「矩形波で人間の声を再現して歌わせる方法」について質問することができ、GBでどの程度再現できるのか実験しようと考えていたのですが、正直時間が足りずにできませんでした。機会があったらまとめておきます。

「なぜGBでチップチューンを始めようと思ったのか」については、以前書いた記事を読んでください。一言で説明すると「TORIENAさんの曲にいい感じにノイズ乗っててかっこよかったから」です。

kiito.hatenablog.com

メルカリやヤフオクに抵抗が無くなった

私は大量生産・大量消費の経済社会に産まれ、Amazonで技術書を買って暮らしています。そのため、メル×リやヤフ×クなどは下賤の者が使うものだと思いこんでました。

ところが実機でチップチューンを始めるとすると、『ゲームボーイというハードを(中古で)買う』ほうが予算が抑えられる場合があります。特に、ハードがジャンク品として売られていることが多く、その場合には複数台のまとめ売りを買ってリスクを抑えるのは有効な戦略です。

メルカリも使ってみると意外に便利なのと、「案外値段が適当に決められていること」「届いてみるまで実際の状態は分からないこと」「『〇〇さん専売』みたいなオレオレルールを導入してくる奴がいること」などバザール的なやりとりが面白く、ちょっとしたギャンブル感もあって燃えます。 私は「裏に名前が書かれているカセット」を引き、「多分カーチャンが独立した息子のゲームボーイを処分したのだろう」と分かってエモい気持ちになりました。

一部のレトロゲーマーは「大量出品されたジャンクハードを買って修理すること自体が趣味になってしまう」「どこも壊れてないと逆に萎える」と聞きましたが、それも納得です。

私も「せっかくだから音楽の評価が高いファミコンゲームもやっておくか」と思ってファミコン7台セットを購入してしまいました。そして友達に「Motherめっちゃ面白いよ!」って話をしたら、「懐かしい!GBAの再録版でやったよ!」って話をされてジェネレーションギャップを感じました。

マザー

マザー

改造やはんだ付けに抵抗が無くなった

AWSというクラウド上開発することが多いので、ハードを見ることはほとんどありません。一度、インフラチームの先輩に連れられてデータセンターでブレードサーバの中身を交換しに行った程度です。

そのため、「既存のハードに手を加える」ことには抵抗があったのですが、実際の初代ゲームボーイにはバックライトが無く、時間帯によってはメルカリで買った時に付いてきたメトロイド2をプレイするLSDjで曲を作るのにも少し苦労しますし、暗いライブ会場で演奏することもできません。

これに対処するため、昨年のGame Boy Advent Calendar 2016のch3cooh393さんの記事などを参考にして改造しました。その過程で海外通販(Hand-Held Legend)を使ったことも新しい経験です。

blog.ch3cooh.jp

ただ、今から始める人には、GBA SPを勧めると思います。それは、デフォルトの状態でも音が太く、画面もカラーでバックライトも付いており、メモリも豊富で処理落ちしづらい(らしい)ので、すぐに音楽に集中できるでしょう。

手続き型プログラミングへの抵抗が無くなった

多くのPython言語のプログラマーは、Haskell等の抽象的な言語を学び、標準ライブラリのitertoolsをいかに美しく使えるかを競っています。さらにもう少しHaskellに慣れると、中二病で「副作用(I/O等)使用罪」「変数の破壊的変更は悪」などのHaskell共和国のお題目を唱え始めるようになります。

ただ、LSDjで表現したいものはI/O(=音を鳴らす)が本質的な世界です。実際LSDjに限らず、トラッカーソフトは「音符を配置したサブルーチンを並べる」し音色の操作にgoto文のようなコマンドを使うこともあります。

そもそも、ゲームボーイはメモリ資源が少ないハードなので、「サブルーチンを分けすぎるとスタック領域を使ってメモリの効率が悪い」「ガベージコレクションはメモリを使いすぎる」「クロック周波数を意識して命令数を抑える必要がある」など、Linuxサーバー上では意識しないレイヤーの話が出てきます。後から会社の先輩に聞いたのですが、現代でも組み込み領域だと割と意識されてることだそうです。

ファミコンの驚くべき発想力 ?限界を突破する技術に学べ? (PCポケットカルチャー)

ファミコンの驚くべき発想力 ?限界を突破する技術に学べ? (PCポケットカルチャー)

後から知ったのですが、そもそも関数型言語の最右翼であるHaskellでもIO a型を使う必要があり「可能な限り参照等価な関数とI/Oを伴う手続き型的な処理を分けよう(do記法で手続き型っぽく書くこともできます)」と主張しているだけだし、高速化のためにST s型として破壊的操作のできる配列などの変数を使うこともできます。

つまり、私が不勉強だっただけで、実際には「自分が表現したいものに適切な言語を選ぶことが大切」だということに気が付きました。

もっと低レイヤーの知識が身についたら、「処理落ちしやすいLSDjのコマンドを調べて、内部的な挙動を推測する(例えばサブルーチン呼び出しでメモリを食ってるんじゃないかとか)」みたいなことができたら面白そうです。

hyksln.jugem.jp

OSや高級言語への感謝が産まれる

LSDjを使っていると、すぐにセーブデータが壊れることに気づきます。特に「音楽を再生しっぱなしにして電源を落とすとぶっ壊れる」仕様のせいで、LSDjをいじっている間に寝落ちしてセーブデータが壊れ、悲しい気持ちになります。

そんなときに、Linux等のOSへの感謝が産まれるのでおすすめです。また、ハードごとの命令の違いをAPIとして抽象化して吸収してくれるとかヤバすぎます。

オペレーティングシステム (未来へつなぐ デジタルシリーズ 25)

オペレーティングシステム (未来へつなぐ デジタルシリーズ 25)

公式ドキュメント < 実地の経験

私は先輩からは「問題が起こったらまずは公式ドキュメントに立ち返れ」と教わっています。Qiita等の記事を見ても、同じように教わっている人が多く、プログラミングや開発では正しいと思います。

qiita.com

ただし、音楽になると話は別だと思います。もちろんLSDjの公式ドキュメントを見てコマンドの説明を読むことは大事ですが、「どのように使えばカッコイイ音になるのか」などは別に学ぶ必要があります。そして、それは上手くいってないです…。

それは元々「ゲームハードやホビーPCをハッキングして、本来とは違う使い方(音楽)をする」というコミュニティの発祥まで繋がるのかもしれません。

英語への抵抗が無くな…ってないw

Square Sounds Tokyo 2017というチップチューンにイベントを見てきて、お客さんの半分強が海外の方だったのでビックリしました。

誘ってもらったのですが、私は英語が苦手なので全然会話できない…と思ってたら、日本人の偉い(偉いって表現はアレかもしれないけど)人もかなりブロークンな英語(Your performance was cool!みたいな感じ)で喋ってて「あ、これでいいんだ」って思いました。ただ、持って生まれた性格がシャイなのでそもそも初対面での会話は苦手ですw

英語とは関係ありませんが、Chip Tanakaこと田中宏和さんの曲がすごい異世界でやばかったのを覚えています。

Django

Django

Q. ふ〜ん、で、チップチューンは作れるようになったの?

うるせえ!

やっぱり音楽自体が難しいのと、どのように作り始めたらいいか分からない→どうしても自分にとって分かりやすいファミコンとか技術とかに逃げちゃうので作れるようになってはないです。

生活スタイルはだいぶ変わりました。具体的には、過去の技術者やミュージシャンへの感謝と敬意(こんな難しいことやってるなんてすげえ!)が産まれたことと、ゲームボーイファミコン、分解用のドライバーが散乱して部屋が汚くなりましたw

「私はこういう風に作れるようになったよ」って話があったら教えてください。

最後に、Game Boy Advent Calendar 2017も引き続きご注目ください。

【雑記】新人プログラマーになる妹へのアドバイス

妹からプログラマー職として就職するという連絡が来ました。この妹が実在するかどうかは皆様のご想像に任せます。

他の職も含めていろいろと悩んだそうなのですが、おそらく私の影響でこういう職種に親しみがあった(というか抵抗感が少なかったというほうが正確?)なのでしょう。ひとまず、おめでとうございます。

プログラミングの経験があるわけじゃなく、テクノロジーよりも、文化や歴史のほうが好きなタイプです。そのためいろいろ苦労すると思いますが、「この職種を選んで良かった」と言ってもらえるように(もしくは私のせいでひどい道を選んだと思われないようにw)、最初はいろいろ手引きを残しておこうと思います。

とは言っても、私の言いたいようなことは既に書籍やインターネットでいろいろな人が言い尽くしています。ひとまず@shyouheiさんの優秀なプログラマーになるためのコツあたりがオススメです。

「問題を解決すること」を忘れないで

これで終わるのも味気ないので、いくつか簡単なアドバイスをします。

プログラマーの仕事は「技術を使うこと」ではなく、「問題を解決すること」です。素晴らしい技術を使っても、きちんと使われて利益を生み出せないと意味がありません。

問題に向き合うことを忘れて、安直に「この××を導入すれば楽になるんだ!」「最近話題の超イケてるプログラミング言語を使おう」って飛びついてしまうと、大抵時間やお金を払って不便な思いをするだけです。それぞれの道具が、何を目的に作られたものなのかちゃんと見定めましょう。

逆に、ニュース通知などの単純なプログラムでも、問題を大きく外してなければ喜んでもらえます。そして、問題の解決は新しい問題を生む(エラー通知はどうしよう、コードのメンテナンスがつらい等)ので、「これってショボいんじゃないかな?」って思っている問題でも、それを問いていく過程で新しい発想や技術に触れられると思います。

ライト、ついてますか』という本にこういう例がよくまとまっていたので、一度読んでみてほしいです。

ライト、ついてますか―問題発見の人間学

ライト、ついてますか―問題発見の人間学

大事なのは「問題の本質を見つけること」「それに合った解決策を出せること」ですが、「これってどうやればうまくいくの?」を説明できるほどの実力はまだ私にはありません。ただ、シリコンバレー流の「早めにリリースして修正する」方針は参考になるかもしれません。

www.slideshare.net

ここまで大げさじゃなくても、関係する人に早めに見せると、自分の間違いが早く修正できて楽になります。

「楽をする方法」をまず考えてね

「勤勉なこと」はもちろん良いことですが、今の情報化社会では勉強しなければいけない分野が多すぎるので、真面目にやると疲れます。

例えばネットワークで問題が起こった時、いろいろな解決方法があると思います。

  • 自力で勉強して解決する
  • 先輩に泣きつく
  • (一旦)放置する
  • ...

この中から「自分やチームを総合的に見て、一番楽で時間のかからない方法を選ぶ」ゲームだと思うと良いです。上のような場合、「先輩に泣きついた後に、怒られながら勉強する」スタイルが一番効率が良かったですw

また、スクリプト言語Python, Ruby...)を一つ学ぶと、ボタンひとつで終わらせる定型作業が案外多いことに気づくと思います。余った時間はこっそりネットサーフィンしましょう。

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

ルールを守った上なら悪人になっていいよ

打ち合わせや交渉する場も少なからずあると思います。そういうときは、相手に気を遣うよりできるだけ自分の主張をハッキリとしたほうが、自分も相手も困らないことが多いです。というか、自分は気を遣ってるつもり(あの人時間なさそうだし…)でも、相手はそうじゃない(実は今は重要じゃない仕事ばかり)ってことが多いです。

残念ながら、自分のことを「私は悪いことしてないのに報われない」と思っているときほど、おそらく周囲からは迷惑な存在として思われています。

以前も紹介しているのですが、『医療とコミュニケーションについて』という本がこの点良かったです。

「『悪い人』は目的が決まっており、適切に対処すれば撤退してくれるからある意味付き合いやすい。『いい人』は目的がはっきりしないし、一方的に期待を積み上げてくるので交渉の余地がない」という話にも考えさせられました。

自分のことをクソ野郎だと思っていると、「こんなこと質問するとダメなヤツだと思われるんじゃないか」みたいな変な躊躇が無くなるのでオススメです。

レジデント初期研修用資料 医療とコミュニケーションについて

レジデント初期研修用資料 医療とコミュニケーションについて

また、『人を動かす 文庫版』も同じような文脈でいい本でした。あまり関係ないのですが、『7つの習慣』はやりがい搾取感が拭いきれず好きではないのですが、カーネギーとは友達になれそうな感じがします。

もちろん、違法なことをやれという意味ではないので、ルールとマナーは守ってくださいw あと度胸と愛嬌もあると尚良いです。

毎日勉強する習慣をつけるといいよ

数ヶ月経つと周囲が「毎日勉強する人(さらにアウトプットも出す人)」「全然勉強しない人」に2分されてることに気づくと思います。というわけで、「毎朝30分必ず本を読む」程度でいいので、インプットする習慣をつけると良いです。

私の同僚のエキスパートは「インプットするだけでは無駄。技術的にアウトプットも含めないと勉強にならない」と言っており、彼の言うことも正しいのですが、まあ気持ちが落ちてる時期もあるので無理なく続く程度にしてください。

snowlong.hatenablog.com

もちろん、「Write Code Every Day」と言って実践している方もいるので、もしかしたら参考になるかもしれません。

おそらく性格的に本を買いまくると思うので、早めに電子書籍リーダーを買うと良いです。私はiPad mini + Kindleアプリを使っていて、今のところ不便は感じてません。

iPad mini 16GB Wi-Fiモデル ホワイト&シルバー MD531J/A

iPad mini 16GB Wi-Fiモデル ホワイト&シルバー MD531J/A

スキルを言語化する努力をしよう

上手く言えないのですが、特にプログラミング言語は技術を説明するための言葉で、適切な概念を知っていれば驚くほど簡単に問題が解けることがあります。また、(今は縁遠いと思うかもしれませんが)数学も似たような性質のものです。

同僚のコードレビューで「こういう書き方するのはなぜですか?こうした方が楽じゃないですか?」と訊かれることが多く、その度に自分の暗黙知をきちんと言語化して(もしくは私のほうが間違っていて)意識的に使いこなせるようになることもあります。

…やっぱり上手く説明できないです。このあたりの本をおすすめします。

一人称研究のすすめ: 知能研究の新しい潮流

一人称研究のすすめ: 知能研究の新しい潮流

メンターを見つけよう

いろいろ書籍や記事はあるのですが、悩みや強み弱みは人それぞれで、自分の問題からは少しずつハズレていることも多いので効率は良くないです。

例えば、この記事でも「問題をちゃんと定義する」みたいな面を強調しがちですが、会社に入った後で「私が悩んでるのはそこじゃなかったわ」「セクハラ係長うざい」って思ってしまってるかもしれません。

こんなとき信頼できる先輩を見つけられると、もう少し客観的で的確なアドバイスを貰えると思います。

運動しよう

座りっぱなしだと正直気が参ってくるので、適度に身体を動かしましょう。これは私もできてないので、良いスポーツの趣味が見つかったら教えてくださいw

【LSDj】ゲームボーイでDJをする(音作り編)

こちらの記事で、LSDjというゲームボーイ用のトラッカー・ソフトを導入し、ゲームボーイを楽器として演奏する準備は整いました。

kiito.hatenablog.com

しかし、「仏作って魂入れず」ということわざの通り、楽器があっても曲を用意しなければ意味がありません。私は作曲自体の経験が元々ないのと、音の制約の中で理想に近い音を出さなければいけないことで躓いており、何か曲を作れる状態にはまだまだほど遠い状態です。

本当は『曲作り編』というタイトルで一度まとめたかったのですが、中途半端な状態ながら、一度ブログ記事の形で情報を整理する必要を感じたので書いています。

まあ難しいながら、音が出るだけで今は楽しいんですけどね!

暫定の目標

とはいえ趣味でやっているので、少しずつ大きな目標を立ててモチベーションを保ちながら勉強する必要があります。

ちょうどchibi-tech先輩に会う機会があったのでどうやって曲作りを勉強すればいいのか質問したところ、「オレたちストリート系耳コピで勉強するもんだぜ」というアドバイスを頂きました。

そこで私は「chibi-techさんの巫女みこナースカバー風で、けものフレンズ主題歌『ようこそジャパリパークへ!』をカバーする」という目標を立てました。

www.youtube.com

(※後で気づいたのですが、この曲はベースの音程が難しいのと、chibi-techさんの技術をLSDjで再現できるのかどうかそもそも分からないのとで、けっこう無謀な目標を立ててしまっていました)

バンドマンの知り合いからは「パンクバンドは楽曲が比較的単純なものが多いから、コピーしたいならそういうのがいいんじゃない?」というアドバイスを頂けたので、挫折したらそうします。

曲の要素を分解する

LSDjに触る前に、ちょうど無料の音楽学習サイト『Learning Music』の案内が流れてきたので、2~3日こちらのサイトで遊んでいました。

こちらのサイトで良かったのは、「ドラム」「ベース」「コード」「メロディー」の4要素のチャプターがあり、「ドラム」から勉強が始まることです。作曲のノウハウ本は大抵「コード」の説明から始まるため、音数の制限がある実機のチップチューンを作りたいというニーズからは外れるように感じていたので。

また、だいたいこの4要素で曲を捉えればOKというのが分かったのも良かったです。…たまにこれに当てはまらないスゴい音楽があるようにも思うのですが、最初からそんなのを目指しているわけではないので一旦考えないようにします。

ベースを耳コピする

こちらの本の、特に実践編の『バンドスタイルの曲の耳コピ』が役に立ちました。

耳コピ力アップ術 〜理論と実践と聴き分けのコツ

耳コピ力アップ術 〜理論と実践と聴き分けのコツ

  • ベースまたはドラムからコピーすると良い
  • ベースが聞き取れない場合は、低音を強調すればいい
  • ベースの音があるのか無いのか分からない場合もあるが、最後は「自分だったらこの音を演奏するかどうか」という観点で決める

聞き取れない場合も多いので「弾いてみた」やカバー曲の動画等も参考になるのですが、自分の担当楽器がかっこよく魅せるアレンジしていたり、自分が聞いても音が間違っていたりする場合もあるので、あくまで参考程度かなと思います。

私は低音を強調するためにPCDJで使っているTraktorを利用しているのですが、もっと良い方法がある気はしています。キューやループの機能は便利なんですけどねw

また、WaveToneという耳コピ支援フリーソフトも、知り合いに教えてもらいました。

forest.watch.impress.co.jp

音声をスペクトル解析し、強く出ている音の音程をピアノロール風に表示できる耳コピ支援ソフト。音程をピアノロール風に表示するだけではなく、曲のテンポや鳴っているコードを自動で解析可能。

LSDjの音作りを勉強する

LSDjはデフォルトの楽器音源は殆ど無く、自分自身で工夫して理想の音を作る必要があります。 特に今後は迫力のあるキック(ドラム)の音を作る方法を勉強する必要を感じています。

他人の.savファイル(GBのセーブデータ)が公開されている例があるので、そちらを元に勉強しています。

esctrax.bandcamp.com

また、ここ数日はYouTubeの動画も見ています。実際に音を聞きながらチュートリアルできるので良いです。

www.youtube.com

また、LSDjは4系から5系になる際にキック音の迫力が失われる変更があったそうで、こちらの記事も参考になるそうです。というのを@to6okegaoさんのツイートで見ました。

chiptuneswin.com

PWMの波形で声を作る

私はchibi-techさんの音色に憧れているので、日本語のボーカル音声をゲーム機の音で再現したいと思っています。特に「うー!がおー!」という声を作りたいです。

www.nicovideo.jp

ただ、チップチューン・ミュージシャンの中にも他に同様の音を指向している人はほとんど見かけず、方法も分からなかったのですが、ニコニコ大百科の懐音ミオの記事に参考になりそうな記述を見かけました。

矩形波によるボーカル再現:Chibi-Tech氏のお家芸といえるテクニックである。矩形波のduty比を細かく変更することにより、ボーカルを再現させる。ドッP氏の「FC音源による護法少女ソワカちゃんショートメドレー」が公開されるまで、謎の技術とされてきた。(ねここ氏による考察)例:FAMCOMPO Entry No.10 「Miko Miko Nurse」 - Chibi-Tech

d.hatena.ne.jp

上の記事ではファミコン用のチップチューン制作ソフトのFamiTrackerのコマンドで説明されていますが、以下のFamiTrackerとLSDjの対応表を参考になんとか進められそうです。

LSDj - FamiTracker Command list

ただし、この記事を参考にしてもchibi-techさんのような鮮やかな音は出せていません。

ひとまず.nsfファイル(ファミコンで再生できる形式)を.gbファイル(ゲームボーイ用ソフトの形式)に変換するツールで、ゲームボーイカラーエミュレータ上で巫女みこナースを再生できたので、原理的に不可能ではないと踏んでいます。ただし、細かく矩形波を制御しているせいか、ボーカル音声の出る部分では再生がやや遅くなっていました。

もしLSDjで再現することが難しいことが分かれば、プログラミングをがんばってゲームボーイ上で音を再生するソフトを書こうと思います。実用的なものが作れるかは分からないですが。

C言語超入門―Windowsでゲームボーイのプログラムを作ろう! (CompuBooks)

C言語超入門―Windowsでゲームボーイのプログラムを作ろう! (CompuBooks)

シンセサイザーやゲーム機の構造を勉強する

先輩に質問すると「この音はNES(海外版のファミコン)のDPCM音源で作っていて、GBの波形メモリ音源ならクオリティ落ちるかもしれないができると思う」というような返答をもらいます。そのため英語の他に、一般的なシンセサイザーの知識や、ゲームボーイファミコンの音声処理の知識が必要です。

一般的なシンセサイザーの知識は、『シンセサイザーの全知識』という本が役に立ちました。ただし、これ以上は「アナログシンセサイザーを作る」みたいなことをしないと分からない気がしていて、さすがにyak shavingなんじゃないかと悩んでいます。

シンセサイザーの全知識 本格派を目指すキミに!

シンセサイザーの全知識 本格派を目指すキミに!

ゲームボーイファミコンについては、いろいろ探しましたが、結局はニコニコ大百科の記事が一番まとまっているように思います。

dic.nicovideo.jp

dic.nicovideo.jp

つまり、ファミコンの音源と比べるとどこが違うのか。大きな違いは以下の通り。

  • ステレオである。(ファミコンはモノラル)
  • 波形メモリ音源があり、その音量も変えられる。(ファミコン三角波・音量固定)
  • PCM関連の音源が無い。(ファミコンDPCMがある)
  • 全体の出力が左右別々に調整できる。これにより、曲のフェードアウトなども容易に。(ファミコンにはない)

まとめ

道のりは遠いですが、無理せずやっていきます。