トップ 最新 追記

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2018-10-01(Mon) 晴れやかな青空

例えばBOM

Win10のメモ帳で書いて、"UTF-8"で保存。

$ cat bom_python3_hello.py 
#!/usr/bin/env python3
 
print("世界にこんにちは。")$ #ファイル末尾に改行なし
$ file bom_python3_hello.py 
bom_python3_hello.py: Python script, UTF-8 Unicode (with BOM) 
text executable, with CRLF line terminators

python3自体は何も文句を言わない。

$ python3 bom_python3_hello.py 
世界にこんにちは。

が、shellは拒否。

$ ./bom_python3_hello.py 
./bom_python3_hello.py: 行 1: #!/usr/bin/env: そのようなファイルやディレクトリはありません
./bom_python3_hello.py: 行 2: $'\r': コマンドが見つかりません
./bom_python3_hello.py: 行 3: 予期しないトークン `"世界にこんにちは。"' 周辺に構文エラーがあります
./bom_python3_hello.py: 行 3: `print("世界にこんにちは。")'
 
$ ls env
/usr/bin/env

nkf -w8 -d とかでCRを抜いて(BOM維持)も、エラーメッセージ('\r')がひとつ 減っただけ。
zsh環境で実行しても、基本的に変らない。

頭と紙で、どうしても解けなかった

覆面算の古典問題。といっても試したのは中学生の頃だったはず。
python3に解かせてみた。例によって長大なループになった。
違う文字が違う数字になる(同じ数字にならない)ようにする、 手っ取り早い方法が浮かばなかったので、集合型に放り込んで数を 数えることにする。
当初のバージョンはかなり遅かった。Core 2 Duo 2GHz の Stretchで

$ time python3 send_more_money.py
9 5 6 7 + 1 0 8 5 = 1 0 6 5 2
s e n d + m o r e = m o n e y
 
real    1m56.945s
user    1m56.812s
sys     0m0.064s

かかった(python2だと1分17秒ほど)。
しかも、解が出力された後、探索が終わるまで しばらくかかる。

もう少し速くする。繰り上がり最高位が1であることは分かっていたので、それが 先頭になるように書き換え、ひとつ解けると終了するように書き換える。
すると、

$ time python3 send_more_money.py
9 5 6 7 + 1 0 8 5 = 1 0 6 5 2
s e n d + m o r e = m o n e y
 
real    0m7.710s
user    0m7.692s
sys     0m0.004s

2018-10-02(Tue) 涼しく晴れていたはず

8段のループを廃したが

ずっと複雑になり、かつ遅くなった。
Corei3 3.4GHzのbionic(send_more_money.pyが3.2秒)で、

$ time python3 s2.py
9567 + 1085 = 10652
 
real    1m10.397s
user    1m10.392s
sys     0m0.004s

で、これも、答えを見て 少し変えた(ループ回数が大きく減少する)。
すると、

$ time python3 s2.py
9567 + 1085 = 10652
 
real    0m0.560s
user    0m0.548s
sys     0m0.012s

2018-10-03(Wed) 眠いのになぜ

覆面算もう一発

やり方は昨日と似たようなものになった。
流石に桁ごとの数をつまみ出すのが面倒になったので、 あっさり文字列に変えてインデックスにする。

$ time python3 '6+7+7=20.py'
S I X + S E V E N + S E V E N = T W E N T Y
6 5 0 + 6 8 7 8 2 + 6 8 7 8 2 = 1 3 8 2 1 4
 
real    2m10.381s
user    2m10.296s
sys     0m0.008s

ファイル名に"="など使うべきではなかったかも。


2018-10-04(Thu) 次の台風はまだ

a * a = b

かなり前に、算数の教科書かなにかで見かけた覆面算。
ただし、解は1つに定まらなかったはず。

    ピヨ
  + ピヨ
-------------
   ヒヨコ

頭で解いてから、 python3で実装して みた。
1段ループで桁の数字全部の異同をチェックする方法と、 ひと桁の変数4つを4段のループで回す方法と 。
この場合、後者のほうが少し遅いようだった。

$ time for x in `seq 500`; do python3 a+a_b.py > /dev/null; done
 
real    0m10.039s
user    0m8.673s
sys     0m1.394s
 
$ time for x in `seq 500`; do python3 a+a_b_2.py > /dev/null; done
 
real    0m11.170s
user    0m9.633s
sys     0m1.566s

micro:bit版も書いてみた。最初のイメージは一瞬だけ見えた。
計算時間は感じられなかった。

割り算と剰余より

文字列にしてインデックスを切り出したほうが明快で、 しかも速いようだ。
この場合のみ、かもしれないが、 前回の半分の時間で終わっている。

$ time python3 s2.py
9567 + 1085 = 10652
 
real    0m0.246s
user    0m0.234s
sys     0m0.012s

2018-10-06(Sat) 台風は既に去った模様

ブラウザベースのpythonでも試す

microbit python

四隅を回るだけの他愛ないスクリプト。
隅に着くたびに一瞬止まって見えるのは何故か。

現在の環境でmu-editorが動くようになったので以後こっちで。
光らせるLEDの数を間違えた結果、4隅の座標が重複してしまい、そこに来るたびに 2回sleep()してしまったことが敗因だった。
あーでもなくこーでもなく突っつきまわした末、 比較的無難と思えるところに落ち着く。

逆回転もやってみた。ただ、 左端から始めるのは ちと面倒

隅を通らないようにしてみたり、 ついでに尻尾をつけたりもしてみた。

真ん中を光らせるバージョン。そろそろ違うものを考えるとするか。

muでいくらか。

インストール時、pip3 install mu-editor だけでは 駄目だった。
pip3でPyQt5も入れないと起動しなかった。

mu-editorで書き込みがコケた。どうしてもうまくいかなかった。
ログを見ると、/dev/ttyACM0への書き込みに失敗していた。
/etc/group の dialout にユーザーを追加。面倒なので再起動。

ランダムに一つずつ点灯

micro:bitスクリプト もう一点
同工異曲と思いながら。

あとは適当なタイミングで音でも入れられれば。


2018-10-07(Sun) だいたい上天気

ランダム音楽再生

audio cables

チュートリアルを頼りに 前に作ったものをgithubに上げると同時に、 曲名を出力するようにしてみた(実はオブジェクトから 曲名を抽出する方法がわからないのでベタなコードになった)。
全部終わったらにっこりと。

今日買ってきた「フォーンケーブル」(とか呼ぶらしい)に ICクリップをはんだ付けして接続。白線(チップ)とスリープとを グランドに接続していいのか、よくわからない。
スリープを繋がないとノイズが出たり、音が小さかったりする。
白線は繋がなくても鳴っていた(音がモノラルだから?)。

ワニよりバナナ

モノによるが、繋ぎにくかったりずれたり部材を傷めたりする ことを考えると、micro:bitの5箇所に限ってはバナナプラグを 繋いで、その先でなんとかしたほうがいいように思えた。


2018-10-09(Tue) はれ

MicroSD壊れてきたかも

$ sudo poweroff
[  868.352560] EXT4-fs (mmcblk0p2): pa d3def9c0: logic 328, phys. 13492, len 184
[  868.362938] EXT4-fs error (device mmcblk0p2): ext4_mb_release_inode_pa:3871:
 group 0, free 184, pa_free 179

shutdown時の端末表示全部を ここに置いた。

1から9まで、がいくつあるか

前に少し凝ったことの続き。
たとえば合計が97になる組み合わせは9通り。

$ python3 d2.py `seq 9 ` 97
1 + 2 + 3 + 4 * 5 + 6 + 7 * 8 + 9  =  97
1 + 2 + 3 + 4 * 5 + 6 - 7 + 8 * 9  =  97
1 + 2 + 3 - 4 + 5 * 6 + 7 * 8 + 9  =  97
1 + 2 + 3 - 4 + 5 * 6 - 7 + 8 * 9  =  97
1 + 2 / 3 + 4 * 5 / 6 * 7 + 8 * 9  =  97.0
1 * 2 * 3 + 4 * 5 + 6 + 7 * 8 + 9  =  97
1 * 2 * 3 + 4 * 5 + 6 - 7 + 8 * 9  =  97
1 * 2 * 3 - 4 + 5 * 6 + 7 * 8 + 9  =  97
1 * 2 * 3 - 4 + 5 * 6 - 7 + 8 * 9  =  97

それを1から300まで試してみた。
グラフにもしてみた。

$ for x in `seq 100` 
> do
>    echo -n ${x} " "
>    python3 d2.py `seq 9` $x | wc -l 
> done > total_n.txt

最大は362880(1*2*3*4*5*6*7*8*9)だけど、その次は何かしら。 181439かも(1-2+3*4*5*6*7*8*9)。

数えるのとグラフ化は、 前にやってた らしいことを すっかり忘れてる不思議。


2018-10-11(Thu) 地面は濡れているが、まだ傘は使ってない

マルチキャストを試す

LANの全ノードにpingする。

$ ping -c 3 -6 -I NIC ff02::1
PING ff02::1(ff02::1) from fe80::NODE_A%NIC enp2s0: 56 data bytes
64 bytes from fe80::NODE_A%NIC: icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from fe80::NODE_B%NIC: icmp_seq=1 ttl=64 time=0.213 ms (DUP!)
64 bytes from fe80::NODE_C%NIC: icmp_seq=1 ttl=64 time=0.225 ms (DUP!)
64 bytes from fe80::NODE_C%NIC: icmp_seq=1 ttl=64 time=0.376 ms (DUP!)
64 bytes from fe80::NODE_D%NIC: icmp_seq=1 ttl=64 time=0.554 ms (DUP!)
64 bytes from fe80::NODE_E%NIC: icmp_seq=1 ttl=64 time=0.661 ms (DUP!)
64 bytes from fe80::NODE_F%NIC: icmp_seq=1 ttl=64 time=1.00 ms (DUP!)
64 bytes from fe80::NODE_G%NIC: icmp_seq=1 ttl=64 time=2.72 ms (DUP!)
64 bytes from fe80::NODE_H%NIC: icmp_seq=1 ttl=64 time=3.41 ms (DUP!)
64 bytes from fe80::NODE_I%NIC: icmp_seq=1 ttl=64 time=6.15 ms (DUP!)
// 略
64 bytes from fe80::NODE_A%NIC: icmp_seq=3 ttl=64 time=0.084 ms
 
--- ff02::1 ping statistics ---
3 packets transmitted, 3 received, +18 duplicates, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.037/2.974/33.384/7.064 ms

LAN内のルータ限定でマルチキャスト。

$ ping -c 3 -6 -I enp2s0 ff02::2
PING ff02::2(ff02::2) from fe80::HOST%enp2s0 enp2s0: 56 data bytes
64 bytes from fe80::R_1%enp2s0: icmp_seq=1 ttl=64 time=0.242 ms
64 bytes from fe80::R_2%enp2s0: icmp_seq=1 ttl=64 time=0.561 ms (DUP!)
64 bytes from fe80::R_1%enp2s0: icmp_seq=2 ttl=64 time=0.251 ms
64 bytes from fe80::R_2%enp2s0: icmp_seq=2 ttl=64 time=0.565 ms (DUP!)
64 bytes from fe80::R_1%enp2s0: icmp_seq=3 ttl=64 time=0.284 ms
 
--- ff02::2 ping statistics ---
3 packets transmitted, 3 received, +2 duplicates, 0% packet loss, time 2026ms
rtt min/avg/max/mdev = 0.242/0.380/0.565/0.151 ms

クラウドではどうなるんだろうか。
なんか凄そうなんだけど。

$ ping -q -c 3 -6 -I eth0 ff02::1
PING ff02::1(ff02::1) from fe80::HOST%eth0 eth0: 56 data bytes
 
--- ff02::1 ping statistics ---
3 packets transmitted, 3 received, +525 duplicates, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.067/1.666/18.495/1.298 ms
$ ping -q -c 3 -6 -I eth0 ff02::2
PING ff02::2(ff02::2) from fe80::HOST%eth0 eth0: 56 data bytes
 
--- ff02::2 ping statistics ---
3 packets transmitted, 3 received, +8 duplicates, 0% packet loss, time 2003ms   rtt min/avg/max/mdev = 0.494/12.406/39.883/15.911 ms

2018-10-15(Mon) 朝ちょっと雨

「ます」がiPhoneのSafariで「〼」になった

dlig test

少し調べてみたら、スタイルシートに

  font-feature-settings: "dlig"

を指定していると、 合字 とみなされて、 「 〼(枡記号)」と表示される模様。
以下、検証。

<p>
でき
<span style="font-feature-settings:'liga'">
ます
</span>
(化けない)。
</p>
<p>
でき
<span style="font-feature-settings:'dlig';color:red">
ます
</span>
(化ける)。
</p>

でき ます (化けない)。

でき ます (化ける)。

以下、書きかけで撮った スクリーンショット


2018-10-21(Sun) 今日も秋晴れで涼しい風

Ubuntu(たぶんDebianも)固定IP

検索が面倒になってメモ。これはLXC環境下のxenial。

$ grep -v "^$\|^#" /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
address $IP
  mask $MASK
  gateway $GW
  dns-search $DOMAIN
  dns-nameservers $NS1 $NS2

2018-10-22(Mon) 涼しすぎる晴れ

Raspbian(2018-10-11版)

何か変わったとか聞いてインストールしてみた。
ファイルシステムをf2fsに変更してからMicroSDに焼く。
ここでresizeしておけばよかったのだけど。

起動時にresizeする(f2fsはできなかった)のは以前からかも。
国とか地方とかの設定の前か後に ユーザpiのパスワード入力(たぶん変更)を促される。
アップデートと再起動、オートログイン。
デフォルトではsshは開いてないようだ。

$ uname -a
Linux $HOST 4.14.71-v7+ #1145 SMP Fri Sep 21 15:38:35 BST 2018 armv7l GNU/Linux

rpi-updateかけようとしてパーティション満杯に気づく。一旦PCでresize。

$ uname -a 
Linux $HOST 4.14.77-v7+ #1154 SMP Fri Oct 19 16:01:02 BST 2018 armv7l GNU/Linux

2018-10-28(Sun) 涼しく晴れて過ぎてゆく

ビットコインで払え、というメールが届いた

書いてあった BTC wallet で検索したら、既に 前例あり。内容も同じと見た。
853ドルってどんなものかしら。


2018-10-29(Mon) 朝方はちょっと曇っていたが、昼前に日差しが

auth-nocache

がないとOpenVPNに注意されるので追記。

cipher AES-256-CBC
secret static.key
port 51194
dev tun0
ifconfig $LOCAL $REMOTE
comp-lzo
ping-timer-rem
persist-tun
persist-key
auth-nocach

cipher が無視されている 様子が少々気になった。

$ sudo openvpn --config openvpn.conf
Mon Oct 29 09:27:19 2018 disabling NCP mode (--ncp-disable) because
 not in P2MP client or server mode
Mon Oct 29 09:27:19 2018 OpenVPN 2.4.6 x86_64-pc-linux-gnu
 [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD]
 built on Jul 30 2018
Mon Oct 29 09:27:19 2018 library versions: OpenSSL 1.1.0h
  27 Mar 2018, LZO 2.10
Mon Oct 29 09:27:19 2018 TUN/TAP device tun0 opened
Mon Oct 29 09:27:19 2018 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Mon Oct 29 09:27:19 2018 /sbin/ip link set dev tun0 up mtu 1500
Mon Oct 29 09:27:19 2018 /sbin/ip addr add dev tun0 local $LOCAL
 peer $REMOTE
Mon Oct 29 09:27:19 2018 Could not determine IPv4/IPv6 protocol. Using AF_INET
Mon Oct 29 09:27:19 2018 UDPv4 link local (bound): [AF_INET][undef]:51194
Mon Oct 29 09:27:19 2018 UDPv4 link remote: [AF_UNSPEC]
Mon Oct 29 09:27:35 2018 Peer Connection Initiated with
 [AF_INET]126.172.141.172:51194
Mon Oct 29 09:27:36 2018 Initialization Sequence Completed

2018-10-30(Tue) 日向はまだ暖かいが、風は冷たい

4年前に齧ったJavaScriptなんて覚えてない

仮想環境に Node.jsをぶちこむ。

$ sudo curl -sL https://deb.nodesource.com/setup_11.x | bash -
$ sudo apt-get install -y nodejs

を少しめくって、とりあえずこれだけ。

> var myFunction = new Function("x", "y", "return x * y");
undefined
 
> myFunction(2,3)
6
 
> myFunction.constructor
[Function: Function]

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。