歩いたら休め

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

【Python】ジェネレーターをn個ずつに分割する実装

「巨大なテキストファイルをジェネレーターとして読み込み、100万行ごとに分割し、別々のファイルに保存する」という処理を書いてました。

数百行ごとに分けるのならリストにして分割するのですが、今回は分ける単位が1000万行ごとなので一度にメモリに載せたくありません。遅延評価を保ったまま、以下のようにファイルを分けるコードを書こうと考えていました。

要するにnumpy.array_splitの入力値も出力もgenerator版です。

numpy.array_split — NumPy v1.14 Manual

from pathlib import Path

path = Path("/tmp/example/")

# tableは巨大なテキストファイルを一行ずつ読み込んだgenerator

for i, rows in enumerate(split_generator(table, 1000000)):
    filepath = path / f"output{i}.txt"
    with filepath.open("w") as f:
        for row in rows:
            f.write(row)

しばらく悩んでいたのですが、一応、以下のようにitertoolsを駆使して実装することができました。

from itertools import islice, chain

def split_generator(iterator, n):
    while True:
        each = islice(iterator, n)
        first = next(each, None)
        if first is None:
            break
        yield chain([first], each)

ただ、ジェネレーターが先頭から評価されなかった場合にどうなるのかとか、そもそも本当に1行ずつメモリに載ってんのとか、ちゃんと見ていかないと安心して使えなさそうなコードになってしまいました。もっと安心して使えそうな実装を思いついた(知ってる)方はコメントください。

「この問題についての正しい回答はおそらくPythonではなく適切なデータ処理基盤を使うことだ」と思っているのですが、今回はデータ元が特殊(記事ではテキストファイルとしてしまいましたが)だったのでそれも難しいです。

エンジニアリングって難しいですね。

【メモ】「買ってよかったもの」と「Strikingly」を使い始めてみました。

知り合いが薦めていた「買ってよかったもの」ってサービスを使い始めました。

katteyokatta.morishin.me

morishin.hatenablog.com

「毎回ブログを書くのもダルい」「でもツイートするだけは流れちゃうのでアレ」と感じてたのでちょうどいいサービスだと感じました。

あと自分のブログ横に表示するパーツがあれば個人的には嬉しいです。もしやったら一気にアフィリエイトサイトっぽくなっちゃいますがw

また、ポートフォリオサイト的なのも欲しかったのでStrikinglyってサービスを無料プランで使ってみています。

www.strikingly.com

自前でHTML書くのはメンテが面倒で放置しそうだし、かといってJekyllやPelicanで生成するのはオーバースペックだし、って悩んでいたのでこれもちょうどいいです。こちらはイラストレーターの方が使ってました。今後、作ったものはこっちにまとめていこうと思います。

http://takeshi0406.strikingly.com/takeshi0406.strikingly.com

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

ゲームボーイで曲を作ってミキサーに繋いでDJしたい」というコーナーです。

本当はWAVやMP3等の形式で出力し、Sound Cloudあたりに耳コピした曲をアップするところで記事にしたかったのですが、ちょっと問題があってまだアウトプットできていません。

耳コピした曲

はじめてのおいしゃさん」というゲームの『恋のしょほうせん』という曲をカバーしました。

www.youtube.com

理由は2つあり、chibi-techさんの夏休みとお兄ちゃん♪』という曲のカバーに感動し、私も可愛い曲をカバーしたいと思っていたこと、基本的に単純な4つ打ちでchiptuneによくある「キックの音とベースの音を1トラックに収める」という手法で作りやすそうだったからです。

まだきちんとwav等の形式でアウトプットはできていませんし、この後も手直ししているのですが、だいたいこんな感じでできあがりました。

SNSに継続的にアップしてモチベーションを保つ

他のことにも言えるのかもしれませんが、自分一人でモチベーションを保つのはけっこう大変です。少しずつTwitterにアップしていいねでモチベーション保ってました。

また、たまに「音、ズレてないですか?」みたいなツッコミが入るので修正できます。その節はありがとうございました。

思い通りの音が出せないときに調べる方法

chipmusic.org

このときはベースの音の高さ変わってないのに「おーわおわおわおわ」って感じに音が変化している箇所があり、「多分ワウ(wah)のエフェクトみたいなものだろう」と当たりを付けて検索しました。

このときは「LSDj + wah」で検索し、英語のフォーラムサイトを参考にして「ワウは高周波数帯(高音を追加する)エフェクト」「高周波数帯を追加するのは波形にノイズを入れればいい」と推論して実装しました。

また、音のおおまかな周波数(?)特性を知るのに「あいうえお」で真似してみるのはけっこう有効な手段だという気がします。これまでにシンセサイザーの本で多少なりともエフェクトの名前を勉強しておいたのが役に立ちました。

LSDjのデータはよく消えるので注意

エミュレータを使って曲を作る人もいますが、私は結局ゲームボーイ実機でLSDjを動かして曲を作っています。

ただ、この方法だとLSDjの「演奏中に電源が落ちるとセーブデータが壊れる」という仕様に苦しめられることになります。まさか2018年に1ヶ月間こつこつ進めたセーブデータが飛んで泣くとは思いませんでした。

こまめにPCにセーブデータを移すようにし、ついでにLSDjのバージョンを4.9→5.8(stable版の最新)にバージョンアップしました。gitみたいなバージョン管理ツールも欲しいですね…。

録音について

せっかくなので録音してMP3等の形式にしたいと思っています。

私はMac用のKiGBというエミュレータを利用しており、そちらの録音機能を使おうと思っていたのですが、なぜかLSDjの音がバグってしまって正常に再生できませんでした。今のところ原因は不明です。

www.soundhouse.co.jp

ひとまず、知り合いのバンドをやっている方に「数千円程度で録音する方法はないか」と質問し、SOUNDHOUSEというメーカーのオーディオインターフェースを注文しています。

もしかすると、ゲームボーイの出力ではゲインが足りず、ちょっとしたマスタリングの処理みたいなのも必要かもしれません。

感想

ゲームボーイ2台でDJっぽくしたいのですが、およそ1分半の楽曲を1曲耳コピするのに1ヶ月かかっているので頭を抱えています。ひとまず、無理なく続けられるようにしたいです。

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

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