動かざることバグの如し

近づきたいよ 君の理想に

JavascriptのencodeURIComponent()した文字をRubyでデコード

結論

javascriptエンコード

encodeURIComponent('ニンテンドースイッチ')
// => "%E3%83%8B%E3%83%B3%E3%83%86%E3%83%B3%E3%83%89%E3%83%BC%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81"

Rubyデコード側

require 'uri'
URI.decode_www_form_component("%E3%83%8B%E3%83%B3%E3%83%86%E3%83%B3%E3%83%89%E3%83%BC%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81")
# => "ニンテンドースイッチ"

これなんの形式なの

URL-encoded form dataググるとちゃんと出てくる。最初全然違うメソッドでデコードしようとしてバグり???????ってなってた。

100均でライトニングケーブル買うならダイソーが最強

経緯

iPhoneとパソコンの通信をさせたくて、ライトニングケーブルが欲しくなった。

今回は短くていいのと、一時的に使うだけなので純正とかじゃなくても安く手に入れたかった。

で、色々100円均一見に行った結果、最強のコスパの100円ライトニングケーブルが見つかったのでメモ。

必要条件

100均すらたくさん種類があるのに、その中の1つであるダイソー1つとっても10種類くらいケーブルがあって困惑する。

正直どれも同じように思えるが、仕様をよく見るとできないことがあったり不足成分がある。

充電専用ケーブル

100円のケーブルだとこのタイプが多い。充電はできるが、データ転送ができない、ってやつ。つまりパソコンに接続しても曲の転送とかはできない。

今回はPCと繋ぐ目的なので今回は充電専用はアウトオブ眼中

高速充電

安いケーブルでありがちなのが、充電はできるが充電スピードが遅いってやつ。

充電スピードは電流の量によって決まるが、ヘボいやつだと1Aしか流せない。最近のiPhoneでは2Aは必須なので、最低でも2Aは対応してほしい。今回は充電目的ではないが、このご時世でわざわざ1Aのケーブル買っても仕方ないので2A以上で探すことに。

答え

上の条件で探した結果、1つだけ見つかった。それがこれ

充電・通信ケーブルiPhoneAndroid用これ1本で充電・通信OK

f:id:thr3a:20201227035449j:plain

である。この製品の特徴として、

  • 充電だけでなく、データ通信にも対応
  • 2.4A充電対応
  • しかもさらにMicro USBに対応している

というぶっ壊れ性能をしている。これで100円は普通に安い。

使い方

iPhoneAndroid両方に対応しているってのがどういうことかと言うと、片面はライトニングケーブル(iPhone用)でもう片面がMicroUSB(Android用)仕様になっている。

例えばiPhoneiPadに接続したい場合は、ケーブルの「i」が上に来るようにして接続すればよい。

f:id:thr3a:20201227035405j:plain

Androidに接続する場合は、逆面の「A」が上に来るようにして接続する。ただしAndroidの場合は機種によってケーブルの上下が異なるため、必ずしも「A」が上に来ない場合もあるらしい。

f:id:thr3a:20201227035414j:plain

使用感

実際このケーブル買って1ヶ月近く経つが、全く問題なく使えている。

データの転送速度も純正のライトニングケーブルと謙遜ない。

強いて言うなら弱点はApple MFi認証済みでないのでApple側がOSアップデートと共に対策してきた場合、いつか使えなくなってしまうかもしれない点が1つ。ただこれは100円なので文句は言えない。

とりあえず純正でなくていいので1本ほしい人にはおすすめのケーブル。

bilibili動画をダウンロードするならannieがベスト

youtube-dl消されて以降の方がプロジェクト活発で草

bilibili動画とは

ニコニコ動画の中国版、以上

動画をダウンロード

まあ滅多に無いけどbilibiliの中国動画をダウンロードしたい場合

真っ先に出てくるのは、一度消されたアプリこと「youtube-dl

実はyoutube-dlもbilibili動画に対応しており、ダウンロードすることができる。

しかし、1つ欠点があってbilibili独自の仕様に対応できていないこと

bilibili動画では動画によってはプレイリスト形式になっており、GETパラメーターで動画が変わる

が、youtube-dlはこれに対応していないので、GETパラメーターを渡してもプレイリストの1番最初の動画しかダウンロードすることができない。。

結構昔から指摘されているが、直る気配はなさそう

github.com

よって今回はyoutube-dlではなくannieを使う

ダウンロード

Releases · iawia002/annieから最新版のバイナリファイルをダウンロード

Goで書かれているが、バイナリ化されているファイルを使う場合は環境にGo langがインストールされてなくても動く。

Macの場合は brew install annie が早い気がする。

また、映像と音声の別々ファイルでのダウンロードになってしまい、最後結合するのにffmpegもインストールしておく必要がある。

ダウンロード

引数にダウンロードしたいURLを渡すだけ

annie -i https://www.bilibili.com/video/av21877586

で、プレイリストの中の特定の動画だけインストールしたい場合は以下のオプションを活用する。

-start
        Playlist video to start at (default 1)
-end
        Playlist video to end at
-items
        Playlist video items to download. Separated by commas like: 1,5,6,8-10

例えば

annie -i -items 2 https://www.bilibili.com/video/av21877586

だと2番の動画だけダウンロードできる。

Docker化した

手元にffmpegインストールして環境汚したくなかったので、雑にDockerイメージ作った

docker run --rm -w /app -v $(pwd):/app amanekey/annie 'https://www.bilibili.com/video/BV1Ct411L7Kd'

で使える。

github.com

ArmbianでWIFI接続と固定IP設定

環境

  • Armbian 20.11.3 Focal

概要

ArmbianというARMアーキテクチャシングルボードコンピューターに専用のOSがある。

このOSのいいところはRaspberry Piとかと違って多種多様な機種に対応されているところ。

あと、扱いやすいので今回はTinkerBoardに入れて使ってみた。

が、まずはネットに繋げないと始まらないということで無線LANで接続して固定IPにするところまでやってみたメモ

まずは無線LANに接続する

今回のTinkerBoardは無線LANアンテナが内蔵されており、Linuxからもwlan0で認識できていたのでドライバ周りは割愛する。

まずは固定IPとかそのへん抜きにしてそもそもWIFIに接続できることを確認する。

wpa_passphraseはデフォルトでインストールされているので、

wpa_passphrase <myssid> <password> >/etc/wpa_supplicant.conf

WIFI用の設定ファイル作成

には自分のSSID には接続するためのパスワードを入れる。

すると以下のような設定ファイルが生成されるはず

network={
        ssid="hogehoge-networkl"
        #psk="xxxxxxxx"
        psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}

このファイルを使って接続テスト

root@orangepilite:~$ wpa_supplicant  -iwlan0 -c/root/wpa_supplicant.conf
Successfully initialized wpa_supplicant
wlan0: Trying to associate with 4c:e6:76:58:74:15 (SSID='XXXXXXX' freq=2457 MHz)
wlan0: Associated with 4c:e6:76:58:74:15
wlan0: WPA: Key negotiation completed with 4c:e6:76:58:74:15 [PTK=CCMP GTK=TKIP]
wlan0: CTRL-EVENT-CONNECTED - Connection to 4c:e6:76:58:74:15 completed [id=0 id_str=]

最後に completed って出れば接続成功

固定IP設定 方法1

古の/etc/interfacesをいじる方法

まずはちゃんと接続できるか確認するために、固定IPではなくDHCPでの接続を確認する

/etc/network/interfaces.d/wlan0を作成し、以下

auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant.conf

設定反映

systemctl restart netwoking

これで接続できていれば、今度は固定IP化する

auto wlan0 
allow-hotplug wlan0
iface wlan0 inet static
address x.x.x.x
netmask 255.255.255.0
gateway x.x.x.x
dns-nameservers x.x.x.x
wpa-conf /etc/wpa_supplicant.conf

本来ならこれで接続できるようになる。が、自分の場合、再起動すると自動接続してくれない問題が発生した。。。。

一応、自動起動にデフォルトでなってない場合もあるのでこれも設定必要かも

systemctl enable netwoking

ので下記の方法2を使うことにした。

固定IP設定 方法2

NetworkManagerを使う方法

まず方法1のnetworkingと競合するので完全に無効化する

systemctl stop networking
systemctl disable netwoking

まずはNetworkManagerからWIFIが見えているのか確認する

nmcli device wifi list

ここにSSID出なかったらそもそも何かがバグってる

NetworkManagerの設定

nmtui

おわり、というかこれを起動するとGUIが出てくるので、後はそれに従ってポチポチ設定するだけ

設定反映

systemctl restart NetworkManager

自動起動有効化

systemctl enable NetworkManager

参考リンク

docker内でcurlしたときにSSL certificate problemエラーになる問題

状況

debian系のdockerでhttpsのURLをcurlで叩くと以下のようなエラーになって死ぬ

SSL certificate problem: unable to get local issuer certificate

Dockerfileはこんな感じ

FROM debian
RUN apt-get update \
  && apt-get install -y --no-install-recommends curl
  && curl -L https://github.com/ > index.html

理由

CA証明書がインストールできてないので、「ca-certificates」を追加でインストールする必要がある

apt-get install -y --no-install-recommends ca-certificates

参考リンク