Tech系サービスやガジェットの使い心地、自分の作業環境、資産運用について気が向いたときに記録を残しています。

記事内のAmazonアソシエイト適格販売及び、Google Adsenseでお小遣いを得ています。

Google Play MusicからiBroadcast向けにライブラリをエクスポートするスクリプト書いた

GPMの代わり、存在しない問題

自前で手に入れた音源をクラウド上にアップロードし、マルチデバイス(PC、スマートフォンのみならずスマートスピーカーや自動車まで)で再生できるGoogle Play Musicがサービス終了してしまうというGPM愛好家には由々しき事態が起きている。

サブスクリプションストリーミングサービスを契約せず、買い切りの音楽データを買うか、CDのリッピングのみで視聴していた一部のユーザーには大打撃。なんせ世の中はサブスクリプション全盛期なので、ストリーミングをしないという選択肢がGPM以外のサービスにはほぼないのだ。 もちろん、未だにこんな古臭い仕草をして音楽データを貯めこんでいるのはストリーミングサービスに乗らないマイナーな音楽を聴いているからであるので、ストリーミングサービスは代替たりえない。

後継を名乗っているYouTubeMusicは、月額980円のお布施なしには自前の音源をAndroidAutoで聴いたりプレイリストを予めDLしておいたりすることすらできない産廃なので論外。

救世主iBroadcast、だけど…

www.ibroadcast.com

そんな世の中でも、ミュージックロッカー単体サービスをしているiBroadcastというサービスがある。できることはおおよそミュージックロッカーとしてのGPMと一緒だ。 UIやレスポンスにはまだまだ改善点があるが、機能があるだけありがたい。

Alexa, google home, Chromecastに対応しておりAndroid/iOSアプリもあり、AndroidAutoにも対応している。 ストリーミング音質は128kbpsと貧弱めだが、プレミアムプラン(現在開発中)は320kbpsだ。

サービスそのものについては、自分と同じくお試ししている人の優秀な記事を見つけたので、こちらを参考にどうぞ。

applecom.blog.jp

そのほかの仕様

大体ここを参照してほしい。今のところ、ビットレート以外に制限らしい制限はない模様。 フィードバックの送付先も書かれている。

www.ibroadcast.com

移行手順

  1. GPMの全ライブラリ(もしくはアップロード前のローカルファイル)をダウンロードするなりして用意する
  2. MP3 Tagなどでタグ情報を整理する
  3. MusicSyncLiteを使いアップロード
  4. 分割されたアルバムをマージする
  5. プレイリストをエクスポート・インポートする

1. GPM全ライブラリをダウンロード

解説は省きます。さすがにもう終わってるよね?

2. MP3 Tagなどでタグ情報整理

これも解説は省略。ポイントは以下の2点。

  • アルバムアーティストを必ず付与する
  • 古いID3タグは削除しておかないと文字化けするので注意。v2.3以降だけにしておく

f:id:gensobunya:20201003014030p:plain

3. ファイルアップロード

f:id:gensobunya:20201003013318p:plain

何パターンか手段が用意されているので、好きなものを。アップロードは遅めなので気長に待つ。

4. アルバムのマージ

なぜか、末尾にハイフンがついていたり一部のアルバムで2枚に分かれてしまうことがある。

f:id:gensobunya:20201003014641p:plain

f:id:gensobunya:20201003014650p:plain

タグの問題ではないので、iBroadcastに実装されているLibrary Editorを使って修正する。ドラッグアンドドロップでアルバムをマージできるので、目視で手作業。 タグ情報はすべて変更できる…みてるかYTM、これが当たり前なんだぞ。

f:id:gensobunya:20201003014824p:plain

5. プレイリストの移行

最大の難関。iBroadcastにはtxtファイルで作成したプレイリストをインポートする機能があるが、GPMにはエクスポート機能がない。 そこで、GitHubに転がっていたGPMのプレイリストをcsvに変換するスクリプトをfolkして、iBroadcast変換用に書き換えた。

gist.github.com

使い方は、プレイリストのページにアクセスしたあと、Gistのスクリプトを開発者ツールのコンソールにコピペして実行するだけ。 そうするとプレイリスト名のtxtファイルが落ちてくる。

iBroadcastは以下の形式で書かれたテキストをプレイリストとして読み取って、ライブラリ内の曲名とマッチングしてくれる。

[count]. [track title] by [artist name]
[track title] by [artist name]
[track title]

ただ、現在は日本語を含むアルバム名の曲ではマッチングが正常に機能しないという不具合があり、インポートはうまくいっていない…洋楽ライブラリならば問題ないが。 修正にいつまでかかるかわからないが、ひとまずプレイリストのバックアップという意味でエクスポートしておくに越したことはない。

自分はもう不具合フィードバックを送ったが、困っている人はどんどんフィードバックメールを送って改善を促してほしい(レスポンスは速い)

修正されていました。 それと、このスクリプト! など一部の文字エスケープできていませんでした…適宜手動でマッチングしてください

Terraformのlookup()は引数内のモジュールoutputを解決する前に動く

起きたこと

利用しているAWS WAFv2の社内モジュールでは、変数に応じてマネージドルール or IPset or regexルールをACLに登録する仕組みにしています。 ipsetやregexのルールはまた別のモジュールで指定しているので、WAFモジュール側でどのルールを渡されたかlookup()を用いて判定しようとしています。

# ipruleモジュール
resource "wafv2_iprule" {
    ...
    output = {
        name = this.name
        arn = this.arn
    }
}

# WAFv2モジュール
resource "wafv2_webacl" {
 for_each = lookup(var.iprule, "arn", false) == false ? [] : [""]
 ....
 for_each = lookup(var.regex, "arn", false) == false ? [] : [""]
 ....

こんな感じで使っています

module "huga"{
  source = "hogehoge"
...
  iprule = { # ここをregexとかmanagedに変更すると指定ルールに応じた実装になる
    rule_arn = ""
  }
}

この実装だと、managedruleのようなarnがあらかじめ定まっている場合を除き、うまく動作しません。 ipruleとregexどちらも存在するかのように判定してしまい、変数のobject構造がmoduleの期待とズレてしまいます。

原因

lookup()は引数の対象オブジェクト内にある変数の解決を待たずに動作する(undefind状態のまま評価してしまう)ので、lookup(var.regex, "arn", false) がエラーを返しており、デフォルト値であるfalseを返さないことが原因です。

map内部の変数は全部解決してから評価してほしいのに…

解決策

lookup()ではなくmoduleで変数の存在確認をするにはtry()を使いましょう。

モジュールをいじれない場合はruleのモジュールを先にapplyすると、tfstateからarnを引っ張ってきて式を評価するのでワークアラウンドとしては -target を使ってapplyするのも一つの手です。

github.com

Gatsbyで運用しているサイトのビルドをVercelからGatsby Cloudに変えてみたら爆速になった

10分くらいかかってたビルドが3分になった、催眠術とか超スピードとかそんなチャチなもんでは(ry

超技術に感動したので、自分がホストしているGatsby Webサイトのビルドを全部任せることにしました。

なお、ファイル数多いリポジトリの場合、Vercel無料プランの5000アップロード/day 制限に引っかかります。(Vercel内でビルドする場合はビルド前ファイルが1万ファイル上限) このため画像の多いブログはVercelではなくFirebase hostingへ移行することになりましたが、サークルサイトは以下の方法でサクッとビルド環境のみを移行できました。

移行手順

Vercelでのリダイレクト設定やキャッシュ設定は維持したまま、5分でビルド環境のみをGatsby Cloudへ移行できます。

  1. VercelプロジェクトのGitHubリポジトリ連携を切る
  2. Gatsby Cloudでプロジェクトを作成して、使っていたGitHubプロジェクトを連携する
  3. Hosting先としてVercelを選択して連携する
  4. プロジェクトルートにあったvercel.json/static/以下に移動して、ビルド後のルート直下に配置されるようにしてPush

3の時点で1回ビルドが走り、プレビュー用URLが発行されるのでそこで動作確認できます。

メリット

Lighthouse CIを回せる

Gatsby Cloudはビルド後に自動的にLighthouseCIを回してスコア算出してくれます。せっかくGitHub Actionsで実装したのに…

f:id:gensobunya:20200918090524p:plain

ありえんくらいビルドが速い

Vercelのビルドは下記記事参照。これはサークルサイトなので2~3分で終わっていますが…

gensobunya-tech.hatenablog.com

Gatsby Cloudでは1分です。

f:id:gensobunya:20200908233036p:plain

※追記、10000以上のサムネイルを生成するブログをGatsby CloudでビルドしてFirebase Hostingにデプロイしました

f:id:gensobunya:20200918090524p:plain

ホスティング先を気軽に変更できる

NetlifyやVercelはビルド+ホスティングでしたが、Gatsby Cloudを間に挟むことでビルドとホスティング疎結合な構成になりました。

Gatsby Cloudでビルド先設定を変更することで、FirebaseでもS3でもGCSでも好きなホスティングさきにいつでも変更できます(DNSレコードの変更が必要ですが)

プレビュー環境にアクセス制限がかけられる!(無料

シンプルなパスワード制限やGatsby cloudのログイン状態などで制限がかけられます。 仕事で使うときによく出る要件なので、嬉しいですね

もちろんPRプレビューもあるぞ!

特定Branchを常にビルドするオプションは、個人プランでは無いみたいですね。VercelやNetlifyの方が一枚上手。

f:id:gensobunya:20200918090947p:plain

まとめ

これまで、ホスティングサービスはビルドとホスティングがセットになっていましたが、Gatsby Cloudはビルドのみを最適化するため、「リポジトリ」「ビルド」「ホスティング」全てを疎結合に構成することができるようになりました。 静的サイトで回すテストは、機能面以外だとLightHouseCIが鉄板だと思うので、そこがビルトインされているのも非常にうれしいですね。

当面カード経由送金できなさそうなkyashの代わりにRevolutをテスト

kyashの資金移動業登録に伴い、今までkyashを使う2大理由だった「経由するだけで還元率UP、QUICPayとタッチ決済対応」「クレジットカードから送金できてシームレスに割り勘した後バーチャルカード経由で集金を消化」という内の片方が崩れ去った。

Twitterを漁ったところ、代替サービスとしてRevolutなるものが挙げられていたので普段送金しあう友人とまとめてトライアルをすることに。 サービスの概要としては下記の機能が目立つところ。

  • 銀行口座orデビット経由入金残高の送金・出金
  • 両替
  • 複数通貨ウォレット
  • 銀行口座への出金
  • サブスクリプションプランによる各種特典や制限解除

サブスクリプション特典には空港ラウンジ利用や保険があったりとゴールドカードのようなものが目立つ。

本日ようやく待ちが終わったので登録してみた。登録した時点で5400人待ちで紹介すれば1700番程度づつ繰り上がって1番になったのだが、結局同じタイミングで登録した人は同時に利用開始できたので招待に意味があったのかどうか…

とりあえず所感と今後の想定についてメモ。なおスクショはありません。

UXが最強

シームレスなGPay対応

登録からリアルカード発行依頼をすると、自動的にGoogle Payアプリに遷移して非接触決済としてRevolutカードの登録まで終了する。 何を言っているかわからないがあまりにシームレスすぎて本当に登録できたのか確認したほど。QP plusとかiDはなんだったのか…

マイナンバーカードの本人確認がスムーズ

裏表撮影のガイドと、不鮮明な状況の場合は自動的に弾いてくれる仕組みを導入している。撮影後、本人確認処理そのもの金曜深夜にもかかわらず5分ほどで完了。オペレーターがいるのかいないのかは不明だが、持ち歩いていないマイナンバーカードを撮影するのに腰を上げたあとそのままのモチベーションでサービス利用を開始できた。

バックエンドのカード登録に非接触決済を活用

チャージ用カード(自分の場合はkyash)を登録する際、非接触決済対応カードの場合はNFCリーダーでカード番号を読み取って自動入力してくれる。これまでもカード表面を撮影して番号認識してくれるサービスは多々あったものの、このアプローチは初めてだ。

番号の読み取りミスを確認する必要もなく、CVC入力だけでカード登録が完了。素晴らしいUX。

Kyashの代替たりえるか?

正直、この点においては不安があるというのが正直な感想。

Revolutも資金移動業としての規制を受けるサービス(リアル口座への出金)があるので、本来クレジットカードからチャージした残高を送金することはできない旨記載されている。なぜKyash経由でチャージした残高が送金できたのかというと、デビットカードからチャージした残高は送金可能となっているサービス仕様によるもの。

現時点でKyashの残高は前払式支払手段によるものなので、問題はないとおもうが9/7以降はどうなるのかちょっと自信がない。この辺は、PayPayと同様にクレジット経由の残高は送金可出金付加にすることでクリアできると思うので、2者のどちらがこの方式を実装するかで今後の利用サービスが決まると思う。

ORICO MC-U111P 11-in-1 Type-C ドッキングステーションレビュー

T14 Gen1 AMDで安定動作するType-Cハブを求める旅がようやく終わりました。

以前購入したLENTION製ハブでは、高負荷がかかってくるとLANが使えなくなるという不具合に2製品で見舞われてしまったので、メーカーを変更。

様々なアクセサリーと、T14のSSD交換でもしっかり動作した実績のあったORICOから購入。今回は目当てのスペックのものがAmazon.co.jpのストア内になかったので、Aliexpressから購入しました。

s.click.aliexpress.com

ポートは下記の通り。

  • 100W PD3.0*1
  • USB3.0*4
  • TF3.0/SD3.0*1
  • VGA*1
  • HDMI*1
  • RJ45*1
  • 3.5mm Audio*1

VGAは特に必要ではありませんが、USB typeAポートも4つあって普段使うUnifyingレシーバーとZwift用のANT+レシーバーをつけっぱなしでもまだ2ポート余っています。

f:id:gensobunya:20200828220042j:plain

この製品もディスプレイやLANは後ろ側に配置して、全面はUSBのみにすることができるので卓上で使いやすいです。

さすがに据え置き利用だと縦型ハブに収まりの良さでかないませんが、許容範囲。

耐久テスト

中華製品は使いはじめはよくても、ある程度使って不具合が出ることが多いのですが、この製品は3週間使っていまだに不具合らしい不具合はありません。

かなり発熱していることもありますが、動作には問題なく発火を警戒するほどの温度ではないので入出力パワーの割に頑張っていると言えるでしょう。ここまで持ったらおそらく安心。

LENTION USB type-C ドッキングステーション CB-D53 / C69

T14 Gen1を買って、USB 3.1 Gen2ポートがメインPCにできたので、ドッキングステーションで卓上構成をひとまとめにできるようにした。

いくらThinkPadインターフェイス多めと言っても、今までデスクトップでやっていたことを代替するにはちょっと心もとない(というか既に足りない)

今回の要件は下記の4点。

  • USBポート4以上
  • 65W電源入力、45W以上をPCに給電
  • HDMI
  • R45J(LAN)

もちろんなるべく机上の収まりがいいほうが嬉しい。怪しい中華製品が跋扈するなかで、そこそこ信じられそうな下記の製品を買ってみた。Typc-Cドッキングステーションは有名メーカーのものでも安定しているとは限らない修羅の製品なので、ハズレを引いた際のダメージはなるべく少ないほうがいい。中華業者なら駄目な個体引いた際にすぐ代替品送ってくれそうだし…

選定理由

縦置きで必要十分なポートだったから。DVIポートやカードリーダーのついているモデルも沢山あったが、USBポートが少なめになってしまうのと、見た目のスマートさを優先した。

あとはUSBポートの転送速度が明記されていることとか、給電に関する仕様がちゃんと書いてあることあたりが信頼度につながった。

f:id:gensobunya:20200724092713j:plain

f:id:gensobunya:20200724092730j:plain

f:id:gensobunya:20200724092743j:plain

パッケージはしっかり今風のもの。内容物はPC↔ドック用のDP alt対応ケーブルと本体・スタンド。ケーブルとドックが別体なのでレイアウトに自由度がある上、一体型と違ってノートPCスタンドから本体が垂れ下がることもない。

取り付け・起動

f:id:gensobunya:20200724092911j:plain

LAN, HDMI, Uniying, 電源のUSB Type-Cケーブルとを取り付けてPCと接続。初回はうまく行かなかったが、何回か抜き差ししたら認識した。ひとまず全ポートの機器は認識してディスプレイ出力OK、インターネットもV6プラス込で300Mbpsオーバー出ているし。基本スペックは問題なさそう。

若干LANが不安定なのか時々ネットワークが途切れる。それとPC再起動したときに自動で全デバイス認識してくれるわけではなく抜き差しが必要なので、あんまり製品として完成度は良くないかな…USB Type-C特有のマスタースレイブ関係のゴチャゴチャなのか電源ケーブルやPCとドッキングステーションの接続ケーブルを抜き差ししてるうちにいい感じになる。1週間ほど治らなければ返品か。

追記:メーカーに問い合わせたところ、相性問題のようで保証を利用した返金となりました。商品説明にもThinkPad X1 Carbonは非対応とあるので最近のThinkPadは駄目なのかもしれませんね

CB-C69

X1 Carbon対応が1つの目安になりそうなので、同じくUSBポート多めのCB-C69を購入してみました。

駄目ならまた保証で返金される確信もできたので、やや高めですが安心して購入。

結果、PC起動時の挙動は改善されました。縦置きではないのでスタンドに載せたPCから垂れ下がってしまいやや不格好ですが機能的には充足。

f:id:gensobunya:20200726125307p:plain

PDも52W入力されていて必要十分です。 やっぱり見た目が悪いので対応していそうな縦型スタンドが出たらそっちを購入したいところですね

追記

一週間程度でLAN端子経由の通信が不安定になり度々切断、無線への自動切り替えが起こるようになったのでメーカー交換となりました。

追記の追記

またも1週間で壊れる…返金しました。別途ORICOのハブをレビュー予定。

T14 Gen 1 AMD を買った(メモリ換装・ベンチ編)

増設用メモリ届きました

dショッピングデーに合わせてCrucialの16GBメモリを購入。増設する場合と同じDDR4 PC4-25600規格。

Amazon.co.jp: Crucial CT16G4SFD832A 16 GB(DDR4、3200 MT/秒、PC4-25600、CL22、デュアルランクx 8、SODIMM、260ピン)メモリ、グリーン: パソコン・周辺機器

f:id:gensobunya:20200724091354j:plain

SSDと同じく、高速スタートアップを無効にしてBIOSに入り内部電源を無効にしてシャットダウン、その後裏蓋をあけてアクセス。

メモリスロットは1つだけ、真ん中の絶縁フィルムの下に配置されていた。前回記事で中の写真を上げたので画像略。

ベンチ

電源オプションをパフォーマンスに振って、CINEBENCH20を走らせた。

f:id:gensobunya:20200724091402p:plain

強すぎる。メモリ32GBもあればそうそう不足することはないし、長い付き合いになってくれそうだ。