僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
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
かなり前に、算数の教科書かなにかで見かけた覆面算。
ただし、解は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
四隅を回るだけの他愛ないスクリプト。
隅に着くたびに一瞬止まって見えるのは何故か。
現在の環境でmu-editorが動くようになったので以後こっちで。
光らせるLEDの数を間違えた結果、4隅の座標が重複してしまい、そこに来るたびに
2回sleep()してしまったことが敗因だった。
あーでもなくこーでもなく突っつきまわした末、
比較的無難と思えるところに落ち着く。
隅を通らないようにしてみたり、 ついでに尻尾をつけたりもしてみた。
真ん中を光らせるバージョン。そろそろ違うものを考えるとするか。
インストール時、pip3 install mu-editor だけでは
駄目だった。
pip3でPyQt5も入れないと起動しなかった。
mu-editorで書き込みがコケた。どうしてもうまくいかなかった。
ログを見ると、/dev/ttyACM0への書き込みに失敗していた。
/etc/group の dialout にユーザーを追加。面倒なので再起動。
チュートリアルを頼りに
前に作ったものをgithubに上げると同時に、
曲名を出力するようにしてみた(実はオブジェクトから
曲名を抽出する方法がわからないのでベタなコードになった)。
全部終わったらにっこりと。
今日買ってきた「フォーンケーブル」(とか呼ぶらしい)に
ICクリップをはんだ付けして接続。白線(チップ)とスリープとを
グランドに接続していいのか、よくわからない。
スリープを繋がないとノイズが出たり、音が小さかったりする。
白線は繋がなくても鳴っていた(音がモノラルだから?)。
モノによるが、繋ぎにくかったりずれたり部材を傷めたりする ことを考えると、micro:bitの5箇所に限ってはバナナプラグを 繋いで、その先でなんとかしたほうがいいように思えた。
$ 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時の端末表示全部を ここに置いた。
前に少し凝ったことの続き。
たとえば合計が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)。
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
少し調べてみたら、スタイルシートに
font-feature-settings: "dlig"
を指定していると、
合字
とみなされて、
「
〼(枡記号)」と表示される模様。
以下、検証。
<p>
でき
<span style="font-feature-settings:'liga'">
ます
</span>
(化けない)。
</p>
<p>
でき
<span style="font-feature-settings:'dlig';color:red">
ます
</span>
(化ける)。
</p>
でき ます (化けない)。
でき ます (化ける)。
以下、書きかけで撮った スクリーンショット。
検索が面倒になってメモ。これは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
何か変わったとか聞いてインストールしてみた。
ファイルシステムを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
がないと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
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。