200kbps程度の低速回線を使いこなす方法
はじめに
常時最大200kbpsに制限されているモバイル回線をなんとか使いこなす方法です。 ここに書かれている方法を使うことによって何らかの不利益や被害を被ったとしても当方は一切関知しません。自己の責任で行ってください。
具体的な方法
Youtubeをブラウザで安定的に再生できるようにする
再生の設定から画質を144pにすればおそらく止まらずに再生はできるはずですが、毎回するのは面倒ですので自動化します。 ブラウザにTampermonkey拡張(または同類の拡張)をいれてから、Youtube HDをインストールします。 TampermonkeyのダッシュボードからYoutube HDのソースコードを開き、
const targetRes = "hd1080";
を以下のように書き換えます。
const targetRes = "tiny";
これで画質は最低(144p)になりますが、かろうじて再生はできると思います。 より高画質で再生をしたい場合は、設定から 240p等にしてみてください。 240pで安定して再生ができるならtinyをsmallにしてみましょう。
最低画質でもYoutubeの再生できない、または止まってしまう場合
解像度を最低にしても止まってしまうまたは、より高画質で見たい場合は、youtube-dlというPythonで作られたソフトを使いましょう。 具体的な使い方は他のサイトを参考にしてください。
wgetを使って大きなファイルをダウンロードする
大きなファイルのダウンロードが途中で止まってしまう場合は、wgetコマンドを使いましょう。
wget -c -t inf --max-redirect=5 --waitretry=0 --no-check-certificate URL
Windows版よりはLinux版のほうが安定しているようです。出力ファイル名を指定したい場合は-O filenameを使ってください。--dns-timeoutを使うと失敗時に中止されてしまうので注意してください。証明書(certificate)云々でエラーが出る場合は--no-check-certificateを付けてみてみる。転送レートを制限したほうがよい場合は--limit-rateを使ってください(バイト単位のほかに20kなど指定もできます) 念の為、ダウンロード終了後ハッシュが一致するか確認してください。 なお、curlはリトライ時のレジュームに対応していないのでおすすめできません。(shellのwhileと組み合わせれば可能)
追記 wgetでリトライオプションを付けていても、リトライせずに終了する場合があるので、shellのwhileとの併用が不可欠のようです。なのでwgetでもcurlでも好きな方を使えばいいと思います。
while ! wget -t inf --max-redirect=5 --no-check-certificate --continue --limit-rate=20k URL; do :; done
while ! curl --remote-name --globoff --fail --location --insecure --continue-at - --limit-rate 20k URL;do :; done
Slackを使う方法
残念ながら一部の回線では、クライアントアプリやブラウザどちらでも「何らかの理由により、Slack を読み込めませんでした 」となって接続できない。何度リロードしてもそうなる場合は他のクライアントを試してください。
"third party"|"3rd party"|"Unofficial" slack client - Google 検索
Twitterを使う方法
デフォルトの設定のままだと重すぎてとても使用に耐えないので、データセーバーと動きを減らすを有効、自動再生をオフの設定にしてください。それでもかなり重いですが。
IRCの利用
FacebookやTwitter,Slackが使えないまたは重すぎる場合はIRCを使いましょう。IRCでも接続がすぐに切れる場合はpongを60秒ぐらいに設定しましょう。 頻繁に切れて使いもにならない場合は、ZNCやWeechatなとのIRC BouncerをVPSやCloudサービスで動かしましょう。
VPSやCloud Computingの利用
git clone(fetch,pull)が途中で失敗する場合には、AWSやGCP等のVPSやクラウドコンピューティングを使う以外に方法はないようです。現状では途中で切断された場合にリトライ・レジューム等はできないようです。GCPのCloud Shellがおすすめ。
VPNの利用
VPNを使うと通信が高速化する場合がある。ただ、Windows環境でVPNを使うと接続時(再接続時)にルーティングが変化し、すべての接続が一旦切られてしまうので問題が生じることがある。非VPN経路で接続を維持するようにするにはインターフェースにバインド可能なポートフォワーダーまたはSOCKSプロキシを併用する必要がある。
さらなる速度制限(規制)を回避するには
業者やプランによりますが、おおむね一日あたり100MBを超えるとさらなる速度制限(規制)が行われるようです。ファイルのダウンロードや動画サイトは注意して利用しましょう。
その他
隠し玉はあるんですが晒すといろいろ問題が起きそうなので、親しい人だけに教えようと思います。
GoogleとAmazonの主要なクラウドサービスの小規模プランの料金(2018年8月25日版)
小規模プランの料金のみです.。価格や数値は間違いがあるかもしれませんので使用する場合は各自公式サイトで確認してください。 0.01USD未満は四捨五入してあります。
Google Cloud Platform(GCP)の料金
詳細 https://cloud.google.com/pricing/
GCE インスタンスタイプ毎のリソース
Type | vCPU | RAM |
---|---|---|
GCE F1-micro | shared | 0.60 GB |
GCE g1-small | shared | 1.70 GB |
GCE n1-standard-1 | 1 | 3.75 GB |
GCE n1-standard-2 | 2 | 7.50 GB |
1アカウントに付きGCE F1-microインスタンス1つが無料。
GCEの時間毎 の料金(一部GCP料金計算機から算出)
Type | Tokyo | Oregon |
---|---|---|
GCE F1-micro | 0.0092 USD/hour | 0.0076 USD/hour |
GCE g1-small | 0.033 USD/hour | 0.027 USD/hour |
GCE n1-standard-1 | 0.0610 USD/hour | 0.0475 USD/hour |
GCE n1-standard-2 | 0.1220 USD/hour | 0.0950 USD/hour |
GCEの月毎の料金(一部GCP料金計算機から算出、730時間、継続利用割引適用済)
Tokyo | Oregon | |
---|---|---|
GCE F1-micro | 4.70 USD/mon | 3.88 USD/mon |
GCE g1-small | 16.45 USD/mon | 13.80 USD/mon |
GCE n1-standard-1 | 31.17 USD/mon | 24.27 USD/mon |
GCE n1-standard-2 | 62.34 USD/mon | 48.5500 USD/mon |
GCE LocalSSDの料金(GCP料金計算機から算出)
Size | Tokyo | Oregon |
---|---|---|
375 GB | 39 USD/mon | 30 USD/mon |
GCE Persistent Diskの料金
Size | Tokyo | Oregon |
---|---|---|
10 GB | 0.52 USD/mon | 0.40 USD/mon |
100 GB | 5.20 USD/mon | 4.00 USD/mon |
1アカウントに付き30GBまで無料。
Google Kubernetes Engineの料金
詳細 https://cloud.google.com/kubernetes-engine/pricing?hl=ja
Kubernetes Engine では、Google Compute Engine インスタンスはクラスタ内のノードとして使用されます。
ノードを削除するまでは、Compute Engine の料金設定に基づいて、これらのインスタンスごとに課金されます。
Compute Engine リソースは秒単位で課金され、最小使用料金は 1 分間分です。
Google Cloud Storageの料金
詳細 https://cloud.google.com/storage/pricing?hl=ja
Type | Asia | US |
---|---|---|
Multi-Regional Storage | 0.026 USD/GB/mon | 0.026 USD/GB/mon |
Regional Storage | ||
Nearline Storage | 0.01 USD/GB/mon | 0.01 USD/GB/mon |
Coldline Storage | 0.007 USD/GB/mon | 0.007 USD/GB/mon |
GCP ネットワークの料金
詳細 https://cloud.google.com/compute/pricing?authuser=2&hl=ja#network
上り(イン)はすべて無料。
Google のサービス(YouTube、マップ、ドライブなど)への下り(アウト) は無料。
インターネット下り(アウト)料金
Transfer | Tokyo | Oregon |
---|---|---|
0~1 TB | 0.14 USD/GB | 0.12 USD/GB |
1~10 TB | 0.14 USD/GB | 0.11 USD/GB |
10 TB~ | 0.12 USD/GB | 0.08 USD/GB |
1アカウントに付き下り1GB/月まで無料。
GCE継続利用割引
https://cloud.google.com/compute/docs/sustained-use-discounts?authuser=2&hl=ja
GCE確約利用割引
https://cloud.google.com/compute/docs/instances/signing-up-committed-use-discounts?authuser=2&hl=ja
Amazon Web Services(AWS)の料金
クラウドサービスの料金 – アマゾン ウェブ サービス (AWS)
AWS簡易見積りツール(最新の料金やプランではない可能性あり)
Amazon Elastic Compute Cloud(EC2)の料金
詳細 https://aws.amazon.com/jp/ec2/pricing/on-demand/
Amazon EC2インスタンス毎のリソース
Type | vCPU | RAM |
---|---|---|
t3.nano | 2 | 0.5 GiB |
t3.micro | 2 | 1.0 GiB |
t3.small | 2 | 2.0 GiB |
t3.medium | 2 | 4.0 GiB |
Amazon EC2 オンデマンドインスタンスの1時間料金
Type | Tokyo | Oregon |
---|---|---|
t3.nano | 0.0068 USD/hour | 0.0052 USD/hour |
t3.micro | 0.0136 USD/hour | 0.0104 USD/hour |
t3.small | 0.0272 USD/hour | 0.0208 USD/hour |
t3.medium | 0.0544 USD | 0.0416 USD/hour |
Amazon EC2 オンデマンドインスタンスの一ヶ月(730時間)料金
Type | Tokyo | Oregon |
---|---|---|
t3.nano | 4.96 USD/mon | 3.80 USD/mon |
t3.micro | 9.93 USD/mon | 7.59 USD/mon |
t3.small | 19.86 USD/mon | 15.18 USD/mon |
t3.medium | 39.71 USD/mon30.37 USD/mon |
Amazon EC2 リザーブドインスタンス料金表
詳細 https://aws.amazon.com/jp/ec2/pricing/reserved-instances/pricing/
Amazon EC2 リザーブドインスタンス スタンダード 1年分全額前払い時の一月分(12分の1)の料金
Type | Tokyo | Oregon |
---|---|---|
t3.nano | 3.17 USD/mon | 2.25 USD/mon |
t3.micro | 6.33 USD/mon | 4.42 USD/mon |
t3.small | 12.67 USD/mon | 8.92 USD/mon |
t3.medium | 25.33 USD/mon | 17.75 USD/mon |
Amazon EC2 データ転送料金
詳細 https://aws.amazon.com/jp/ec2/pricing/on-demand/#Data_Transfer
インターネットから Amazon EC2 へのデータ転送受信 (イン) は無料。
Amazon EC2 からインターネットへのデータ転送送信 (アウト)
Out Data Transfer | Tokyo | Oregon |
---|---|---|
1 GB /月まで | 0.00 USD/GB | 0.00 USD/GB |
その後 9.999 TB /月まで | 0.140 USD/GB | 0.09 USD/GB |
その後 40 TB /月まで | 0.135 USD/GB | 0.085 USD/GB |
その後 100 TB /月まで | 0.130 USD/GB | 0.07 USD/GB |
150 TB/月を上回る場合 | 0.120 USD/GB | 0.05 USD/GB |
Amazon Simple Storage Service(S3)の料金
詳細 https://aws.amazon.com/jp/s3/pricing/
Amazon S3 標準ストレージの料金
Transfer | Tokyo | US |
---|---|---|
最初の 50 TB/月 | 0.025 USD/GB | 0.023 USD/GB |
次の 450 TB/月 | 0.024 USD/GB | 0.022 USD/GB |
500 TB /月を超える分 | 0.023 USD/GB | 0.021 USD/GB |
Amazon S3 標準 - 低頻度アクセス (S3 標準 - IA) ストレージ
Type | Tokyo | US |
---|---|---|
すべてのストレージ | 0.019 USD/GB | 0.0125 USD/GB |
Amazon S3 1 ゾーン - 低頻度アクセス (S3 1 ゾーン - IA) ストレージ
Type | Tokyo | US |
---|---|---|
すべてのストレージ | 0.0152U SD/GB | 0.01 USD/GB |
Amazon S3 Glacier ストレージ
Type | Tokyo | US |
---|---|---|
すべてのストレージ | 0.005 USD/GB | 0.004 USD/GB |
Amazon S3 データ転送料金
EC2と同じ
Amazon Elastic Block Store(EBS)の料金
詳細 https://aws.amazon.com/jp/ebs/pricing/
Type | Tokyo | US |
---|---|---|
SSD(gp2) | 0.12 USD/GB/mon | 0.10 USD/GB/mon |
HDD(st1) | 0.054 USD/GB/mon | 0.045 USD/GB/mon |
Amazon Lightsail (VPS)の料金
詳細 https://aws.amazon.com/jp/lightsail/pricing/
英語ページを見たほうが良い。日本語ページは最新でない時がある。
Fee | Memory | Processor | Disk | Data transfer |
---|---|---|---|---|
3.5 USD/mon | 512 MB | 1 | 20 GB SSD | 1 TB |
5 USD/mon | 1 GB | 1 | 30 GB SSD | 2 TB |
10 USD/mon | 2 GB | 1 | 40 GB SSD | 3 TB |
20 USD/mon | 4 GB | 2 | 80 GB SSD | 4 TB |
40 USD/mon | 8 GB | 2 | 160 GB SSD | 5 TB |
Amazon Lightsail 超過アウトバウンドデータ転送料金
詳細 https://aws.amazon.com/lightsail/faq/ What types of data transfer do I get charged for?
Plan | Tokyo | US |
---|---|---|
All | 0.14 USD/GB | 0.09 USD/GB |
記述中…
TwitterへのリンクをクリックするとTwitterアプリが起動する現象をどうにかする
Microsoft StoreにあるTwiterアプリをインストールすると、ブラウザ等でTwitterへのリンクをクリックした際にTwitterアプリが起動してしまう。
便利な人もいるだろうが、現在のTwitterアプリは出来が悪く、当方は使う気になれない(モバイル通知を受け取るためだけ使っている)。
Windows 10の設定の「プロトコルごとの規定のアプリを選ぶ」に、URL:Twitterというのがあるので、これを変更または削除できると思ったのが全然方法がわからない。
仕方ないのでレジストリをいじった。以降の作業は各自の責任で行ってください。失敗してシステムが壊れても当方は責任を負いかねます。
まず下記のレジストリ(9E2F88E3やwgeqdkkx372wmの部分は場合によって変わるかもしれない)を必ずバックアップしてから、配下の"twitter.com"を含むキー をすべて削除します。
HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\9E2F88E3.Twitter_wgeqdkkx372wm\AppUriHandlers
削除したら、ブラウザ等でTwitterへのリンクをクリックしてTwitterアプリが起動しないか確認してください。
下記のレジストリにも同じキーがあるのですが、こちらは影響していないようです。
HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\PackageRepository\Extensions\windows.appUriHandler
以上です。関係のないレジストリを削除したり、変更しないよう気をつけて行ってください。
【追記】
最近、アプリ側で対策されてしまったようで、レジストリを消しても復活してくるようになってる。レジストリ内のAllowedPathsの値を*から適用な文字列に変えることで抑止はできるようだが、いつまで持つか不明。
WindowsのERRORLEVELにハマった
以下のようなコードを含んだバッチファイルが期待どおりに動かなくて悩んだ。
DIR /0 2>NUL
IF %ERRORLEVEL% NEQ 0 (ECHO Error) ELSE (ECHO Ok)
DIR /0は必ずエラーになりERRORLEVELが1になり"Error"と出力されるはずであるが、テストしていたコマンドプロンプトでこのバッチファイルを実行するとはなぜか必ず"Ok"と出力されてしまう。
色々ネットを徘徊するとERRORLEVELという環境変数が上書きで設定されていて、本来のERRORLEVELが見えなくなっていることがわかった。コンソールで色々コマンドをテストしていたときに"SET ERRORLEVEL=0"としていたので、それがずっとが悪さをしていた。
テストしていたコマンドプロンプトで"SET ERRORLEVEL="してから、バッチファイルを実行したら正常に動いた。
SET コマンドのヘルプ より
コマンド拡張機能が有効な場合、SET によって表示される変数の一覧には
現れないいくつかの動的な環境変数があります。
これらの変数の値は、変数の値が展開されるときに
動的に計算されます。
ユーザーがこれらの名前の変数を明示的に定義する場合、
その定義は下記の動的な定義を無効にします。%CD% - 現在のディレクトリ文字列に展開します。
%DATE% - DATE コマンドと同じフォーマットで現在の日付に展開します。
%TIME% - TIME コマンドと同じフォーマットで現在の時刻に展開します。
%RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します。
%ERRORLEVEL% - 現在の ERRORLEVEL の値に展開します。
%CMDEXTVERSION% - 現在のコマンド プロセッサ拡張機能のバージョン番号に
展開します。%CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンド ライン
に展開します。%HIGHESTNUMANODENUMBER%
- このコンピューター上の最大の NUMA ノード番号に展開します。
Windowsのバッチファイルやコマンドプロンプトでは、これらの特殊な環境変数はSETで変更してはいけない。
過去に書いた記事(batファイルで多重起動(二重起動)を防止する )のコードも修正しました。
参考にしたページ
終了コード errorlevel の考え方について -こんばんは。OSはWindowsXP - その他(プログラミング・Web制作) | 教えて!goo
ERRORLEVELは、一般の環境変数と異なり、SET で値を代入してはいけません。(参考: set /? で表示される最終ページ)
SET を使うと一般の環境変数となってしまい、次にSETするまで値は変わりません。コマンドの実行結果と切り離されると言うことです。
ERRORLEVELについてのメモ (1) - とあるソフトウェア開発者のブログ
ERRORLEVELについてのメモ (2) - とあるソフトウェア開発者のブログ
X-Frame-Optionsによるページ内フレームの制限を回避して一定間隔でリロードするBookmarklet
はじめに書いておきますが、このページはX-Frame-Options制限を回避してクリックジャッキングを可能にするものではありません。X-Frame-Options制限がかかったページでBookmarkletからフレームを操作して一定間隔でページのリロードを行うものです。
また、ここで紹介するリロードするBookmarkletはリロードに時間がかるので同様の機能を持ったアドオンの利用をおすすめします。
試行錯誤の末、以下のような奇っ怪なBookmarkletになりました。1時間の間、1分おきにリロードします。おそらくFirefoxでしか動きません。
javascript:(function(){I=60,T=3600,M=T/I;D=document;D.write('<html><script>C='+M+';X=new%20XMLHttpRequest();X.onreadystatechange=function(){if(X.readyState==4&&(X.status==200||X.status==304)){G=frames[1].document;G.open();G.write(X.responseText);G.close()};};function%20R(){X.open("GET",location,false);X.send();X.abort();if(C<=0)clearInterval(T);F=frames[0].document;F.open();F.write("<html><body%20style=\\"margin:0;\\">Auto%20reload%20at%20'+I+'%20seconds%20interval.%20"+(C--)+"%20times%20left.</body></html>");F.close();};T=setInterval("R()",'+I*1000+');setTimeout("R()",50);</script><frameset%20rows="20,*"><frame><frame></frameset></html>');D.close();})();
ページの文字コードがUTF-8でない場合は文字化けするので以下ようにしてみて下さい。
javascript:(function(){I=60,T=3600,M=T/I;D=document;D.write('<html><script>C='+M+';X=new%20XMLHttpRequest();X.overrideMimeType("text/html;%20charset='+document.characterSet+'");X.onreadystatechange=function(){if(X.readyState==4&&(X.status==200||X.status==304)){G=frames[1].document;G.open();G.write(X.responseText);G.close()};};function%20R(){X.open("GET",location,false);X.send();X.abort();if(C<=0)clearInterval(T);F=frames[0].document;F.open();F.write("<html><body%20style=\\"margin:0;\\">Auto%20reload%20at%20'+I+'%20seconds%20interval.%20"+(C--)+"%20times%20left.</body></html>");F.close();};T=setInterval("R()",'+I*1000+');setTimeout("R()",50);</script><frameset%20rows="20,*"><frame><frame></frameset></html>');D.close();})();
以上、あくまでお遊び&実験です。実用にはなりません。
現在のページを1時間の間、一定間隔でリロードするBookmarklet
それだけですが、実はこれをBookmarkletでやろうとするとちょっと難しいのです。リロードさせること自体は簡単ですが、ページをリロードするとそのページで動いているBookmarkletのスクリプトが止まってしまうため、2回目以降のリロードができません。なのでフレームを作って行うことになります。完成したBookmarkletは以下のようになります。1時間の間、1分おきにリロードします。おそらくFirefoxでしか動きません。
javascript:(function(){I=60,T=3600,M=T/I;document.write('<html><script>C='+M+';function%20R(){if(C=='+M+'){frames[1].location="'+location+'"}else{frames[1].location.reload()}if(C<=0)clearInterval(T);var%20D=frames[0].document;D.write("<html><body%20style=\\"margin:0;\\">Auto%20reload%20at%20'+I+'%20seconds%20interval.%20"+(C--)+"%20times%20left.</body></html>");D.close();};setTimeout("R()",50);T=setInterval("R()",'+I*1000+');</script><frameset%20rows="20,*"><frame><frame></frameset></html>');document.close();})();
ページが更新されないときは frames[1].location.reload(true) としてみて下さい。なお、スクリプトでフレームを操作している関係上、X-Frame-Options制限がかかったページはまったく表示ができません。同様の機能を持ったアドオンがあるのでそちらの利用をおすすめします。