この記事はmis.w 53rd Advent Calendarの19日目の記事です。
レガシーなシステムには積極的に抗っていこうな
ALCとかいう講義が必修でありますがあれの音源がCourse N@viとかいう早稲田大学のクソサイトに動画で上がっています。
音源しかいらないのに動画で上がっているの、控えめに言って意味がわからないのでダウンロードして音声データに変換したいですよね?
最初は、Chromeで動画再生中にコンソール開いてネットワークのタブからm3u8リンクコピーしてffmpegに投げる等をしていた(それで十分すぎたので)んですが折角なのでツール化するか、という気持ちになりました。
そんな語るほど何をやったわけでもないですが一応。
最終的にはGo on Heroku +Bookmarklet[^1] という形に落ち着いたのですがそれまでいくつか検討しました。
[^1] Bookmarklet: JavaScriptのスクリプトをブックマークにjavascript:なんとか
という形式で保存しておき使う時にそれを開くことで気軽に実行できるやつのことです。ブラウザ拡張作るほどじゃないけど何かをしたい時によく使われる。またモバイル端末でも使える。
できればサーバ側のコードを書きたくなかったのでダウンロードまでJavaScriptで終えたかったのですがm3u8のパースから暗号化解除等まで(ライブラリ異存なしで)フロントエンドでやるのは厳しいという気持ちになったので諦めました。あとブラウザ拡張にするとスマホから使えないのもありました。ブックマークレット用のスクリプトにはググると出てくる適当なサービスで変換できます。
まぁ言語は当然Goなんですけどもどこで動かすかを結構悩みました。最初はAWS Lambdaにしちゃおうかなぁと思ったんですが通信料を見てビビったのでやめました。試しにHerokuの無料枠にあげて見たところそれなりに普通に使えたのでもうこれでいいやという気持ちになりました。
ブラウザ側でJavaScriptを実行すると動画ダウンロード用のtokenを取得し、それをherokuに投げるとheroku側でダウンロードしてそれをクライアント側に返却してます。Course N@viの動画はHTTP Live Streamingという形式です。詳しくは省略しますが動画が細かく分割されており、最初にプレイリストを落としてきてそれをみて個々の動画ファイルをダウンロードする感じ。以前も同じようなのをGoで実装したことがあったのでそれをみて酷いコードだなぁとか思いながら実装しました。
より技術的なネタを話すと、HLSにははっきり言って(普通の使い方では)何の役にも立たない暗号化機能があるのですが、通常AES128が使われます。AES128ではkeyとivが使われますが今回のプレイリストにはivが入っていませんでした。じゃあ何を使うのかと調べていたら仕様書っぽい何かに辿り着きどうやらシーケンスナンバー(その分割された動画ファイルに割り当てられた(多分)インクリメンタルなID)をビッグエンディアンで128bitで表せばいいらしいです。
ついでに余談ですが、春学期、私のCプロ入門の教師が「Course N@viはHLSを使っているからクソ、時代はMPEG-DASH」(要約)みたいなことを仰っていたのですが(まぁ気持ちはわかるんですが)、まだMPEG-DASHはライブラリも事例も少なく(また、iOSアプリとかにしようとすると規約でHLS以外は弾かれるため)導入に踏み切るには大学のシステム程度じゃ厳しいのかな、という気がします。機能的にもおそらくHLSで事足りそうですし。個人的にはMPEG-DASHは規格が複雑すぎて追うのがめちゃくちゃめんどくさいのでダウンローダが書きづらく、HLSを使ってくれた方が楽で嬉しいです。
大学内のネットワーククソすぎない?快適なネットワーク環境を手に入れようぜ、という話です。
(eduroamの存在を知らなければ)多くの人がWi-FiのSSID一欄をみて最初に繋ごうとしたWi-Fiではないでしょうか。My Wasedaと同一のID/PWで手軽に使えます。また、学内ネットワークという扱いのため大学が契約している電子ジャーナルが見られたりします。ですが、HTTP、HTTPS、SSHなど以外のプロトコルは弾かれて使えないサービスとかもまぁまぁあります。また、いわゆる「ID/PWでログインするWi-Fi」は802.11x認証と呼ばれますが、これに対応していないデバイスも存在します。
eduroamをどう説明すれば良いのかよくわからないのですが、世界中の学術機関で提携し、その学術機関に所属する人は他の場所に行っても同一ID/PWを利用してインターネットが利用できる仕組み、というところですかね…?(間違っていたらご指摘ください)つまりは早稲田大学の学生が他の大学に行っても同じeduroamというWi-Fiがありそれを利用できるということです。ただし、他の大学に行った時、ログイン用IDがメールアドレスではなく単なるIDになっているとログインできないためご注意ください。
eduroamはプロトコルに対する制限がかかっていないため非常に自由度の高いWi-Fiです。ですが、学外アクセスという分類のため、大学のサービス等を利用したい場合は大学図書館の学外アクセスや学外アクセス用VPNを利用する必要があります。これは自宅やスマホの回線からでも同じです。
2つのWi-Fiをあげましたがこれらはどちらも理工キャンパス全域で使えるようです。詳細はここら辺を見てください。ですが、こいつらは速い時は100Mbpsぐらい出る(休日や1限)のですが平日のお昼頃になると本当に遅くなって使い物にならなくなります。pingが10秒20秒とかになります。
ここまでは大学が普通に提供しているWi-Fiでしたがこれは大学以外でも普通に使えるやつです。
KDDIが提供している全国にも多くのアクセスポイントが存在するWi2というサービスです。本来は有料ですが早稲田の理工学生は無料で利用できます。私はMy Wasedaが使えるようになるや否や申し込みました。キャンパス内では51、55、63号館で利用できるようです。ただし1年おきに更新する必要があります。
詳しくは公式の案内を見てください。
身もふたもない話ですがようは自分で契約してるスマホの回線です。なんだかんだ一番安定して速度が出ますが通信量の問題があってそんなに使えませんけどね。私は春までソフトバンクでその後NTT DoCoMoにMNPしたのですが私の体感ではソフトバンクの方が速かったような気がします。実測ではないのでなんとも言えませんが。
ただこれも人が多い教室とかだとかなり遅くなることがあります。でも秋学期になってから教室内の密度が下がって安定するようになりましたね、よかった(白目)
理工キャンパス内には(それ以外は知りません。申し訳ねぇ)何箇所か有線LANが利用できる場所があります。有線は安定して速度が出るため使える時は割と使った方が良いです。ただし接続後にauth63.net.waseda.ac.jpにアクセスして学籍番号とPWでログインが必要な場所もあります。また、有線では接続しただけでは全くインターネットに接続できず、プロキシや学内むけVPNを利用する必要があります。詳しくはプロキシサービスのページとかを見てください。Webページを見るだけならHTTPプロキシで十分ですが他にも色々したい場合はVPNの方を使った方が良いです。ただしこのVPNはiOS、Android、Mac、Winでは使えますがLinux向けのバイナリを大学側が配布してくていないためLinuxでは利用できません(多分。利用できたら教えてください)。また、汎用プロキシは速度が100Mbpsすら出ない貧弱な感じで残念です。
ポートが存在する場所をそれぞれあげていきます
さすがというべきかめちゃくちゃ快適です。壁側にあるポートか備え付けのPC用のポートを奪って利用しましょう。接続後ログインは不要です。
毎週金曜のこの時間はスピードテストをしています(まだ2回目)
— Tsuzu (@Wp120_3238) 2018年10月19日
一瞬1Gbps越えたしすごい pic.twitter.com/b2cutqsNrJ
これはHTTPプロキシなんですが、めっちゃ速くない???家の回線の倍ぐらい出てテンションあがりました。
コンピュータルームの目の前の4人掛けの机が並んでいるあたりにも有線ポートがあった気がしますが未計測です。
MIS.Wの活動場所でもある52号館の教室には各座席にLANポートがついています。こいつらは接続後ログインが必要ですが実測で350Mbpsぐらいは出たので結構いい感じです。
有線使えますよ〜みたいなことが書いてあるところがあって机の上から簡単に繋げて良いのですが途中にギガビットでないハブがあるようであまり速度が出ません。また、治安が悪いせいで内部配線のケーブルが抜けていて使えないことが結構ザラにあります。個人的には常にカップラーメンの匂いがしていたり空気が悪いので嫌いです。
窓際の座席にこっそりLANポートがある座席があるのですが使えた試しがありません。接続してもランプが光らないのでそもそも繋がっていないのでは、と思っています。
微妙に壁際にLANポートがあるのですが通行の妨げになり邪魔なので使えていません。
他にもあれば情報お待ちしております。
有線の安定した回線で、もっと自由度の高い環境を使いたいという方のためのアドバイスです。そんな人いるんですかね。
私は最近自分のサーバ(と言ってもConoHaに借りてる最低プランの安いやつですが)にVPNを建てました。Softether VPNというやつです。
Virtual Private Networkです。仮想的なプライベートのネットワークです。これを使うと何ができるかというと、VPNサーバに接続しているコンピュータ・スマホなどのデバイスは同じLAN内に接続しているかのように相互に接続できるようになります。家に置いてあるサーバに外から同じLANに繋いでいるかのような感覚で接続できるのです。
まず、学内の有線からインターネットに接続するためにはCisco VPNまたはHTTPプロキシに接続する必要があります。今回は自前のVPNを使うために前者のVPNは使いません。よってHTTPプロキシ経由で自分のサーバに接続する必要があるのです。
普通に考えるとHTTPプロキシ経由でVPN接続なんてありえんやろ、という気持ちになるのですがどうやらSoftether VPNが対応しているプロトコルの一つであるOpenVPNはHTTP Proxy経由での接続に対応しています。
よってOpenVPNクライアントを各デバイスにインストールし、OepnVPN設定ファイルの*.ovpnに
http-proxy www-proxy.waseda.jp 8080
を追記しましょう。これでめでたく学内でも快適なネットワーク環境が得られます・・・。と思いきやあんまりネットワークスループットが出ませんでした。やはりHTTP Proxy経由での接続はオーバーヘッドが大きいようで1/2~2/3ぐらいの速度しか出ません。まぁVPNサーバをConoHaのような帯域が100Mbpsしかない環境ではなく1Gbps出せる場所でサーバを立てればもっと高速になると思います。
というわけで、大学内でのQoLをあげるライフハックをしていこうな、というお話でした。
ここまで書いてきましたがこんなもの誰が読むんでしょう。需要は全くないだろうな、と理解しつつどっかには書きおこしておきたいと思い今回アドカレの場を借りて書かせていただきました。
明日の記事は53代の葵さんです!