ありものの BigQuery プロジェクトで定義されているビュー群を素朴に Dataform の sqlx ファイル化する

(Dataform とは https://dataform.co/ のことです)

要件

  • ref() を使ったテーブル間参照についてはとりあえず考えないことにする
  • BigQuery の dataset 名と、Dataform の definitions/ 内のディレクトリ構成をなんとなく一致させたい

ってことで、Ruby でこういうかんじでできると思う。google-cloud-bigquery gem とかですらなくて bq CLI を叩いてるだけであまりに素朴だけど、まあふつうに出来てしまうわけだからいいかという気持ちです

require 'json'
require 'fileutils'

target_project = 'super-gcp-bigdata-project'
target_datasets = %w{nantoka__mart nantoka__warehouse}

dataform_repo_root = '/path/to/dataform-linked-repo-root/'

target_datasets.each do |dataset_name|
  FileUtils.mkdir_p File.join(dataform_repo_root, "definitions/#{dataset_name}")
  res = JSON.parse(`bq query --format prettyjson --location asia-northeast1 --use_legacy_sql=false 'SELECT * FROM #{target_project}.#{dataset_name}.INFORMATION_SCHEMA.VIEWS;'`)
  res.each do |table|
    table_name = table["table_name"]
    query = table["view_definition"]

    path = "definitions/#{dataset_name}/#{table_name}.sqlx"
    dest_path = File.join(dataform_repo_root, path)

    File.open(dest_path, "w") do |f|

      f.write(<<EOF
config {
  type: "view",
  schema: "#{dataset_name}",
}

#{query}
EOF
             )
    end
  end
end

これを実行すると '/path/to/dataform-linked-repo-root/'ディレクトリ下に sqlx ファイルがだかだか発射されるということになるので、それを目視で軽く確認しながら手でコミット & master ブランチ的存在にマージ、とするとよい、という想定。

ミソ

2020 年刺さった曲

f:id:polamjag:20201215230012p:plain

良かった曲、とかだとなんか客観的な評価っぽい感じがしてちょっと違うよな〜とか考えながらいい表現ないかと思ってたんだけど、刺さった だとしっくり来たのでそれでいきます。順番とかにはあんまり意味はなくて実質順不同です


優勝: 罰と罰

罰と罰

罰と罰

順不同とか言いつつ、優勝したのは問答無用でこの曲なのは間違いない。今年一番リピートしたし、なんなら 2015 年からずっと維持してる iTunes ライブラリの中でもぶっちぎりで再生回数が多い曲になってしまった!y0c1e さんも田中秀和さんも好きすぎるし、鹿乃さんの声もよい……。アルバム自体も 2020 年優勝ディスクという感じなんだけど、この曲のわけわからなさは本当にびっくりした。まじでなんなんだ??

lichtung.hateblo.jp

今年は DJ 行為をするチャンスが激減してしまったけど、最後の最後にねじ込めて本当によかった。y0c1e さんが BUGLOUD 名義で出してるこの曲を聞いてもらえると言いたいことが伝わるんじゃないかと思う、というか伝わるなら友だちになってくれ

Gamer

Gamer

  • Bugloud
  • ハウス
  • ¥255

鹿乃さんの曲だとこれもよかった:

I am who I am

I am who I am


準優勝: 電音部

全体的に助かったとしか言いようがない

いただきバベル

いただきバベル

  • 黒鉄たま (CV: 秋奈)
  • エレクトロニック
  • ¥255

秋奈さんボーカルでケンモチヒデフミプロデュースはズルくない??秋奈さんの声、こういう曲のがめっちゃ好きだったので非常に助かりました

Winning Day

Winning Day

  • KARAKURI
  • アニメ
  • ¥255

はい最高

good night baby (feat. Moe Shop)

good night baby (feat. Moe Shop)


ミラーボール・ラブって 2020 年の曲なんだっけ……

ミラーボール・ラブ (M@STER VERSION)

ミラーボール・ラブ (M@STER VERSION)


曲も当然めっちゃ好きなんですが、歌詞に「クロール」っていう単語が出てくるのでめっちゃ笑顔になった


Lone x Kettama、秋奈さんボーカル x ケンモチヒデフミプロデュース に匹敵する衝撃を感じたと思う

The Way You Feel

The Way You Feel

  • Lone & Kettama
  • エレクトロニック
  • ¥255


KiNK のことは常に好きです

Call Nasco (feat. Rachel Row)

Call Nasco (feat. Rachel Row)

  • Kink
  • テクノ
  • ¥153

これなんだよな (これは去年の曲だけど……)

The Sun

The Sun

  • Kink
  • テクノ
  • ¥153

そしてこれはだいぶ前の動画だし 2020 年は全然関係ないけどまじでやばいとおもう


マルチネ枠。DZZ 前から好きだったけど hirihiri やばいすね……

sunscreen (DZZ Remix)

sunscreen (DZZ Remix)

  • hirihiri & DZZ
  • エレクトロニック


今年ベストハウス (主観) です

A Body Thing

A Body Thing

  • DeMarzo
  • ハウス
  • ¥255


最後に全部持っていったで賞

なんなんだ!!!!!!!


2021 年も曲を買っていくぞ!!!

飲み会を録音するとおもしろい

iPhone のボイスメモをなどを使うと、飲み会の様子を手軽に録音できる。

飲み会の様子を録音すると何が嬉しいのかというと、別に大したことはないのだけれど、この 2020 年のように困難な状況においては、しょうもないゴミとしか思っていなかった音声ファイルさえも愛おしく感じられる……というのは言い過ぎだろうけど、とはいえ写真では残らないなにかを残せるのは間違いないと思う。

動画を撮影したら完全上位互換じゃんって感じではあるんだけど、カメラに写っていると思うのとそのへんにマイクが転がっているのとでは気の持ちようが変わってくる気がするし、酔っ払ってたらどっちも変わらないような気もする。

ポッドキャストをやれというような話ではなく、完全に普通の会話を録音して、忘れた頃に聞き直すと面白い、という話でした。


さて、酔っ払った人間はそのへんの物体を楽器にすることがあることが知られている。そのへんの物体に衝撃を与えることで打撃音を発生させることで打楽器に見立てる、というのがもっともオーソドックスな発現だろうか。ボイスメモを使えば、そこから偶発的に生み出される音楽も収録できる。打楽器といえばダンスミュージック、ダンスミュージックといえば Ableton Live。断続的に打楽器の音がしているような音声ファイルは、Simpler のスライス機能を用いることで単音ごとに演奏できて非常に便利。

www.youtube.com

こうじゃ

f:id:polamjag:20201221232356g:plain

これに、2018 年の忘年会の N 次会 *1 のときに id:masawada さんが MacBook Pro の Touch Bar を使って演奏したシンセサイザーの音を重ねる。

これを masawada.fm テーマソング (仮) として提案させていただきます。


このエントリは、masawada Advent Calendar 2020 22 日目のエントリです。

昨日は id:koudenpa さんの「masawada Advent Calendar 2020 予定地 - koudenpaのブログ」でした。明日は id:stefafafan さんです。

*1:飲み会をボイスメモで録音すると面白いという事実はこのときに発見された

#密閉型イヤホン以外でWeb会議アドベントカレンダー: Plantronics M70 の巻

AirPods Max 高すぎるけど密閉型イヤホン以外での Web 会議を模索したいアドベントカレンダー N 日目 (数えるのをやめた) です。

#密閉型イヤホン以外でWeb会議アドベントカレンダーですが、ここまで多くの皆様にご参加頂いていることに心より感謝いたします。

もうちょっと続けるかと思いつつ、これ以上紹介できるグッズがないんだよな〜と考えていたんですが、ありました。コレ。

ある意味 Bluetooth ヘッドセットの原点かつ頂点みたいな形をしているこちら、Plantronics M70 です。

Plantroncisプラントロニクス というブランドには馴染みがない方も多いのではないかと思うのですが、NASAアポロ計画で使われたヘッドセットを供給していた歴史があったりと、老舗のヘッドセット屋 (?) と言えるようなメーカーです。

Plantronics - Wikipedia

Plantronics M70 の話に戻ると、Bluetooth イヤホンというものがこんなに市民権を得る前 (AirPods 前史の時代) の Bluetooth ヘッドセットといえばこういう形だよね〜、というようなイメージドンピシャじゃないかなと思います。だいぶ前に運転中の携帯電話操作が明に違法化?厳罰化?された瞬間があったと思うのですが、その頃に運転しながら通話をしたいドライバー向けみたいな感じで売られてた *1 みたいなアレです。

M70 は通話専用ではなく、オーディオ再生用の Bluetooth プロファイル (A2DP) にも対応しているので、音楽とかポッドキャストの音声なんかも普通にこれで聴くことができます。

良い

  • 3,000 JPY くらいで買える。安い
  • バッテリーめっちゃ長持ち。公称通話時間は 最大約 11 時間
  • イヤーチップ的な部分はシリコンでできているので馴染みやすい
    • 密閉型 (カナル型) じゃないの?と思うかもしれないけど、オープン型イヤホンのガワ部分がシリコンになっただけみたいな感じです
  • イヤーフックもついているので、だいたいどんな形の耳に対しても固定しやすい
    • 自分は耳の形がおかしい??のか、イヤホンの形をかなり選ぶ方なのでこれはうれしい

いまいち

  • 片耳だけで使うタイプなので、慣れるまでちょっと違和感があるかも
    • まあ慣れる
  • いまいちな点そんなにない気がする
    • microUSB 充電なので USB-C に統一したい人は困るかもしれないけど、個人的には今の所どうでもいい
    • イヤホンの音質はほどほど……だと思う。悪いと感じたこともないけど、まあ音質を期待して買う製品ではなさそう

引き続きこのネタのエントリを募集しています。#密閉型イヤホン以外でWeb会議アドベントカレンダー タグをつけてエントリを (勝手に) 書いてもらえると嬉しいです (アドベントカレンダー名乗りサービスみたいなのは使ってないですし、そもそも 24 日間埋めるつもりもとくにない)。

*1:今もコンビニとかでも売ってますよね

#密閉型イヤホン以外でWeb会議アドベントカレンダー 1 日目: AfterShokz Aeropex の巻

AirPods Pro を数時間連続で装着すると耳垂れがめちゃくちゃ出るのでカナル型イヤホン以外で Web 会議とかをやりたいアドベントカレンダー (そんなものはない) 1 日目です。

AfterShokz Aeropex というのは、Bluetooth を搭載したいわゆる骨伝導型イヤホンです。マイクも搭載していて HFP / HSP に対応しているので、通話とか Web 会議 (広義の Zoom) にも使うことができます。

良い

  • 骨伝導型イヤホンなので耳が塞がれない
    • 当然外の音も聞こえる
    • Web 会議だけでなく、ジョギングとかするときに便利だと思う、というか本来はそういうのを狙った製品なんだけど
  • バッテリーが長持ち (公称 8 時間)
    • 実質 1 営業日持つ
  • マイクの音質はまあ普通っぽい
    • 音量の設定とかちゃんとしてれば普通っぽいです
  • なんかプルプルしたりしないんだろうか、と思うんだけど、意外としない。するのはする

いまいち

  • 充電が独自の MagSafe 的端子なのでケーブルに汎用性がない
    • 最近出た AfterShokz OpenMove ってやつは USB-C 端子になってた
    • それを見越して?なのか、同じケーブルが最初から 2 本付属してるのは丁寧な感じがする
  • 2 デバイス同時にペアリングできるという設定なんだけど、挙動が全体的に不穏
    • 2 デバイス同時に掴んだ状態になったあとに片方のデバイスとの通信が途切れると、ポポッ というビープ音がそこそこの音量で永遠に鳴り続けてめちゃくちゃ鬱陶しい
    • 回避法
      • そういうシチュエーションが発生しそうなときは、先に 1 デバイスしか電波の届かない範囲まで移動したあとに電源を入れる
      • そもそもこのマルチペアリング機能を使わず、デバイスの切り替えは都度ペアリングし直すことでやることにする
  • 頭の後ろにループ状の物体が配置されることになるので、椅子の背もたれや首部分に配置されるサポーター的オブジェクトとの相性がわるいがち
    • 具体的にはゲーミングチェアにありがちな首部分のミニ枕みたいな形のやつと完全に干渉するので Aeropex 使うときだけそれを外してます

悪いことばっかり書いてるように見えるかもしれないけど、全体的な満足度は非常に高いです。ずっと使ってるので細かいところが気になってきているみたいなところはある。

明日以降は id:kiyo-shit さんから AfterShokz OpenComm や Anker PowerConf について書いていただけることと期待しています。というか誰でも良いからこのネタで書いてほしいと思っていて、#密閉型イヤホン以外でWeb会議アドベントカレンダー タグをつけてエントリを書いてもらえると嬉しいです。

Apple Silicon 搭載 MacBook Pro 買った日記

Apple Special Event とかいう通販番組を見てたらテンションが高まってしまってうっかり 20 万円くらいの構成のやつを買ってしまったけど、全然後悔してない。

総評

まだ mature じゃない、みたいな話は当然あるけど、そんなんわかっとるんや……。

ウェブブラウザが世界一快適に動く、のソースは Benchmarks: Whatever Is Available - The 2020 Mac Mini Unleashed: Putting Apple Silicon M1 To The Test

各論

3 週間くらい前に Intel 物理 8 コア/ 32GB RAM みたいな構成の仕事用 16 インチ MacBook Pro をセットアップしたときの記憶との比較です

Adobe CC のアプリインストールってこんな早かったっけ、っていうレベルで終わってたという話もあった。ちなみに Adobe Creative Cloud アプリ (親玉的コンパニオンアプリ、虹色アイコンのあれ) も Apple SIilicon ネイティブ対応のベータ版が出てました

Learn about compatibility between Photoshop, Apple Silicon, and Big Sur | macOS 11



すぐに対応できないのはわかるんだけど Rosetta 2 で遊ばせてくれてもええやん……という感じがする。移行アシスタントとかでまるごと環境持っていったらどちみち Apple Silicon 下で動いてしまうだろうし、こういうのやってもあんまり意味ないのではという気もする。気持ちはわかるんですが……

2020/12/20 追記: MASSIVE X 以外 Rosetta 2 で動くようになったようです、動いたぞ

10 万円のパソコンでもこの速度で動くんだったら何も困らんじゃんって感じで恐ろしい!!


Always on ってやつ!!!これだいぶビビった、カチカチするかどうかで OS 生きてるか判断するのをたまにやってたけどできなくなったので困る



Music.app は Apple Music を完全に切って使ってる。なんというか結構バギーなんだけど、見つけてるバグは iTunes 時代からほぼ全部そのままになっている *1。ライブラリ 4 万曲くらいあって、Intel 時代はなにか操作するとスマートプレイリストの再計算が走って *2 メインスレッドが秒単位で固まる (メインスレッドでいろんな文字列比較とかが延々走っている) という感じで最悪だったんですが、なんと M1 チップで相当ましになってしまった、普通に使う気になれる!!!革命!!!!

10 万円のパソコンでもこの速度で以下略

SIGMA Photo Pro は Intel マシンでもだいぶ遅いので今のところあんま変わらない、くらいのアレ。

ソフトウェアエンジニアっぽいベンチマーク (適当な OSS のテスト完走時間とか) を取ったりしてドーンといきたかったけど、今日はパソコン大好き人間として触ってるだけでとにかく面白すぎたのでそのへんは宿題とします。

*1:iTunes から Music アプリにリブランドされたけど中身はそんなに変わってないものと思われる

*2:スマートプレイリスト多すぎなのが悪いという話はある

ISUCON 10 本戦で 28,628 点を獲得して 7 位だったふりかえり

チーム「ヌルポインターマリアユニバース」として id:wtatsuru id:Pasta-K と出てきました。最終スコアは 28,628 点で、fail してない中では 7 位。ISUCON にちゃんと出場したのは前回が初めてで、そのときは予選でボコボコにされて終わってしまったんだけど、今回はそれなりの結果 *1 を残せたのは嬉しい、嬉しいが、もっとうまくやれたことはいくらでもあったな〜〜という感じはする……。日々精進です。

isucon.net

wtatsuru.hatenadiary.com


おさらいすると、本戦の問題は ISUCON 風コンテストのポータルが題材であった。

白金動物園が出題ということで、サービスメッシュ的なサムシング (マイクロサービス + Envoy / Istio)、そのサービス間通信に REST API 以外の何か (gRPC / GraphQL)、まさかのパターンとして k8s の何らか (何だろう……)、みたいなのが出現することはなんとなく予想はしていた。

し、予選の段階でポータルのフロントエンドが各種 API コールに protobuf を使っていることに気づいたりもしていたんだけど (言い訳)、ここまで直球でいろいろ出てくるとさすがに笑うしかなかった……。10 回目というキリのいいタイミングで、こんなめちゃくちゃ面白い問題が出てくるタイミングで本戦に参加できてよかったと心から思う。

今気づいたけど XSUCON の X って 10 回目の ISUCON であることとかかっているのか??


  • 時間内にチームでやったことの流れは、だいたい id:wtatsuru さんが書いてくれていたとおり
  • 後半に id:Pasta-Kペアプロをやってアプリケーション側の作業をいろいろやった、というのがだいたいの成果
    • id:wtatsuru さんがなんとなく司令塔という感じで、タスクの優先度判断などやりつつ進めた
      • タスクの優先度判断: alp でエンドポイントごとの総リクエスト時間順にボトルネックを探していって潰していく
    • 途中からはずっと Go でウェブアプリケーションを書くのに慣れている自分がコードを書く役 + レギュレーションやルール、用意されている実装の全体の雰囲気を把握していて何をどういう雰囲気で書いたらいいのか高速に答える役が id:Pasta-K という感じで動いていた
      • やったこと自体にそんなに大玉感はない気がしていて、できそうなところを簡単そうな順につぶしていった、という感じがする
      • 午前中に時間を使っただけあってか id:Pasta-K がめちゃくちゃ細かく網羅的にルール類を把握していて、「ここはこういうレスポンス返して良いもんなんだっけ」みたいな問いがどんどん解決していくので、変なところであまりハマらずにススっと実装を進めていけるという感じでめっちゃ体験がよかった
  • 予選で中途半端に実施していた 15 分スプリントをわりとガッツリ使ったのが技術面じゃないハイライトで、これは完全に良かった
    • スプリント会 · Issue #11 · tatsuru/isucon10-final · GitHub
    • スクラム開発のスプリントみたいなやつを 15 分単位で回し、15 分ごとに進捗報告とごく簡単な振り返りを実施、最後に次の 15 分でやることを調整する、というやつ
    • 予選のときは正直面白半分でやっていた感じもあったけど、今回はチームワークを発揮する上でかなりレールになった感覚がある
      • 次やることを調整する段階で「インフラ作業したいのでベンチ回せないかも」「ちょっと時間かかりそうな実装タスク掴むのでたぶん影響ない」みたいなすり合わせができていた
      • ポモドーロテクニック的なやつと融合させることで、15分 * 3 セットごとに全員で強制的に休憩を取るようにしたこともあり、作業がノッてきてからもベロシティはほとんど落ちなかった感じがする
    • ISUCON 全く関係ない文脈で短時間スプリントに関するエントリを見ていたのも少し影響している気はする
  • 微妙に緊張していて寝起きのコンディションがいまいちだったのが心残りその1
    • 今思うと、そういう状態であることを強くアピールして目が覚めるような施策をチームで打ってもらったらよかった、即ペアプロとか
  • 全体的に超大玉っぽい施策は打てなかったというのが心残りその2
    • サービス間でポーリングしている部分があり、Redis とか入れて PubSub にしたらええんちゃう、みたいなのは話してはいたけど、コスパ以前になんとなく無意識に避けてしまっていた部分がある
      • 今もベンチ投入できる延長線状態なので普通に書いてみたらいいかという気がしてきた
    • スコアボード用に長大な SQL が使われている部分なども途中からは無視していた
  • 全体的に書き込み操作をするタイミングでやや長めのトランザクションが貼られていたが、これを不要そうなところでは剥がすのをシュッとやれてたら少し違ったのかもしれないな〜という気持ちもある

本来なら本戦は LINE 社のオフィスで開催されているところ、今回はリモートでの開催だったので、グッズやノベルティが詰まった箱が開催前に送られてきたのもめちゃくちゃよかった。ちゃんとTシャツや名入りネームプレート (!) も入っていて、こういうのが手元に残るだけでも参加した実感みたいなのがぐっと湧いてくるので面白い。

競技時間中の YouTube Live も結構おもしろそうな話をしていたようなので、アーカイブが復活したら見ておきたいなと思う。スライド 1 枚でチーム紹介をやるというコーナーがあり、少なくとも身内にはスベらず面白がってもらえたのはよかった……。

こちらからは以上です。運営の皆さん本当にお疲れ様でした、ありがとうございました!!!!来年はヌルポインターマリアユニバースじゃなくて「チーム究極のピルスナー組合」で出たい


予選のエントリはこれ: #isucon #isucon10 予選参加記: 決勝行けましたの巻 - polamjaggy

*1:ボコボコでは?という説はある、、