aachyeeのブログ

備忘録的メモ。主にIT(プログラミング、電子工作)、DIY、アウトドアネタ。詳細はaboutを。

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の利用

FacebookTwitter,Slackが使えないまたは重すぎる場合はIRCを使いましょう。IRCでも接続がすぐに切れる場合はpongを60秒ぐらいに設定しましょう。 頻繁に切れて使いもにならない場合は、ZNCやWeechatなとのIRC BouncerをVPSやCloudサービスで動かしましょう。

VPSCloud Computingの利用

git clone(fetch,pull)が途中で失敗する場合には、AWSGCP等の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/

Google Cloud Platform 料金計算ツール

Google Compute Engineの料金

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 ServicesAWS)の料金

AWS の料金モデルとクラウドによるコスト削減

クラウドサービスの料金 – アマゾン ウェブ サービス (AWS)

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制限がかかったページはまったく表示ができません。同様の機能を持ったアドオンがあるのでそちらの利用をおすすめします。