今更ながらバッジ作成サービスの Shields.io を使ってみた

Shields.io: Quality metadata badges for open source projects

Windows で Sphinx ドキュメントを書くぞと思って Python をダウンロードした際にどっかで見つけた。
GitHub の README に載っている風のアイコン、この画像どこから来てんのかなと思って URL を調べてみたら以下のような感じだった。

https://img.shields.io/badge/ipv6-go!-green.svg

https://img.shields.io/badge/html2-go!-green.svg

調べたらよく GitHub の README に記述されるバッジは Shields.io を使っているらしい。

SVG 形式で、こいつを HTML でマークアップするならこんな感じになる。
彼女ステータスと肝臓のステータスを表すバッジを記述するとするなら、

<img src="https://img.shields.io/badge/girlfriend-absent-red.svg" />
<img src="https://img.shields.io/badge/liver-caution-orange.svg" />

HTML5でのSVGファイル操作のおさらい – Qiita

で、表示は以下のような感じ

面白いね。

チェックボックス一括チェック機能のないクソサイトで手動で一括チェックをする方法

Chrome の Developer Console を開きます。
インスペクタで要素を選択して名前やクラス名を確認した上でコンソールに以下のような jQuery コードを入力する。
あら不思議、全部にチェックがつきました。

name タグ指定なら

$("input[type=checkbox][name=delete]").attr('checked', 'check');

CSS クラス指定なら

$("input[type=checkbox].delete").attr('checked', 'check');

まあ、こんなような感じで CSS セレクタを記述します。
詳細はこちらを参照。

最近は Angular.js やら React.js やらモダンで高度に抽象化された JavaScript フレームワークが登場しているので jQuery の位置づけはもう少しレイヤーの低い言語で言えば C 言語でわざわざ CGI を作っているようなもんでしょうか。
生の JavaScript を書くのはアセンブリ言語を自力で書くような変態行為に近いものか。

時代はどんどん高度に抽象化されていくねえ。

シリアルインターフェイスのコントローラタイプを確認する

Router#sh controllers serial 0/0/0
Interface Serial0/0/0
Hardware is GT96K
DTE V.35 clocks stopped.
idb at 0x66C2C7E0, driver data structure at 0x66C33FFC
wic_info 0x66C34628
Physical Port 0, SCC Num 0
MPSC Registers:
MMCR_L=0x00030400, MMCR_H=0x00000000, MPCR=0x00000000
CHR1=0x00FE007E, CHR2=0x80000000, CHR3=0x0000064A, CHR4=0x00000000
CHR5=0x00000000, CHR6=0x00000000, CHR7=0x00000000, CHR8=0x00000000
CHR9=0x00000000, CHR10=0x00000003
SDMA Registers:
SDC=0x00002201, SDCM=0x00000000, SGC=0x0000C000
CRDP=0x15BD6FA0, CTDP=0x15BD71E0, FTDB=0x15BD71E0
Main Routing Register=0x0003FFF8 BRG Conf Register=0x00490013
Rx Clk Routing Register=0x76543218 Tx Clk Routing Register=0x76543210
GPP Registers:
Conf=0x430002  , Io=0x464050  , Data=0x7F5FFFAF, Level=0x0
Conf0=0x430002  , Io0=0x464050  , Data0=0x7F5FFFAF, Level0=0x0
0 input aborts on receiving flag sequence
0 throttles, 0 enables
0 overruns
0 transmitter underruns
0 transmitter CTS losts
0 rxintr, 0 txintr, 0 rxerr, 0 txerr
0 mpsc_rx, 0 mpsc_rxerr, 0 mpsc_rlsc, 0 mpsc_rhnt, 0 mpsc_rfsc
0 mpsc_rcsc, 0 mpsc_rovr, 0 mpsc_rcdl, 0 mpsc_rckg, 0 mpsc_bper
0 mpsc_txerr, 0 mpsc_teidl, 0 mpsc_tudr, 0 mpsc_tctsl, 0 mpsc_tckg
0 sdma_rx_sf, 0 sdma_rx_mfl, 0 sdma_rx_or, 0 sdma_rx_abr, 0 sdma_rx_no
0 sdma_rx_de, 0 sdma_rx_cdl, 0 sdma_rx_ce, 0 sdma_tx_rl, 0 sdma_tx_ur, 0 sdma_tx_ctsl
0 sdma_rx_reserr, 0 sdma_tx_reserr
0 rx_bogus_pkts, rx_bogus_flag FALSE
0 sdma_tx_ur_processed

tx_limited = 1(2), errata19 count1 - 0, count2 - 0
Receive Ring
rxr head (0)(0x15BD6FA0), rxr tail (0)(0x15BD6FA0)
  rmd(15BD6FA0): nbd 15BD6FB0 cmd_sts 80800000 buf_sz 06000000 buf_ptr 15BD7A80
  rmd(15BD6FB0): nbd 15BD6FC0 cmd_sts 80800000 buf_sz 06000000 buf_ptr 15BD80E0
  rmd(15BD6FC0): nbd 15BD6FD0 cmd_sts 80800000 buf_sz 06000000 buf_ptr 15BD8740
  rmd(15BD6FD0): nbd 15BD6FE0 cmd_sts 80800000 buf_sz 06000000 buf_ptr 15BD8DA0
  rmd(15BD6FE0): nbd 15BD6FF0 cmd_sts 80800000 buf_sz 06000000 buf_ptr 15BD9400
  rmd(15BD6FF0): nbd 15BD7000 cmd_sts 80800000 buf_sz 06000000 buf_ptr 15BD9A60
  rmd(15BD7000): nbd 15BD7010 cmd_sts 80800000 buf_sz 06000000 buf_ptr 15BDA0C0
  rmd(15BD7010): nbd 15BD7020 cmd_sts 80800000 buf_sz 06000000 buf_ptr 15BDA720

よーし、おじさん iperf3 でネットワークの帯域測定しちゃうぞー(上り編)

iperfの使い方 | CCNA対策から学ぶネットワーク運用ガイド

$ iperf3 -v
iperf 3.1.3
Darwin Wataru-no-MacBook-Air.local 15.6.0 Darwin Kernel Version 15.6.0: Mon Aug 29 20:21:34 PDT 2016; root:xnu-3248.60.11~1/RELEASE_X86_64 x86_64
Optional features available: sendfile / zerocopy

上り側(サーバー)

その前に F/W のポートをあけておく。

別に永続的に開けたいわけではないので --permanent はつけない

firewall-cmd --zone=public --add-port=5201/tcp
# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

iperf3 ではデフォルトリッスンポート 5201/tcp なのだろうか。

下り側(クライアント)

iperf3 -c 192.0.3.4
Connecting to host 192.0.3.4, port 5201
[  4] local 192.168.0.2 port 63051 connected to 192.0.3.4 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  10.9 MBytes  91.6 Mbits/sec
[  4]   1.00-2.00   sec  11.1 MBytes  93.3 Mbits/sec
[  4]   2.00-3.00   sec  9.70 MBytes  81.4 Mbits/sec
[  4]   3.00-4.00   sec  11.4 MBytes  96.0 Mbits/sec
[  4]   4.00-5.00   sec  11.2 MBytes  93.7 Mbits/sec
[  4]   5.00-6.00   sec  11.3 MBytes  94.7 Mbits/sec
[  4]   6.00-7.00   sec  11.3 MBytes  94.5 Mbits/sec
[  4]   7.00-8.00   sec  11.0 MBytes  92.7 Mbits/sec
[  4]   8.00-9.00   sec  11.4 MBytes  96.0 Mbits/sec
[  4]   9.00-10.00  sec  11.3 MBytes  95.2 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec   111 MBytes  92.9 Mbits/sec                  sender
[  4]   0.00-10.00  sec   110 MBytes  92.5 Mbits/sec                  receiver

iperf Done.

上り側では次のような結果が出ている

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.0.2.123, port 63050
[  5] local 192.0.3.4 port 5201 connected to 192.0.2.123 port 63051
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-1.00   sec  10.4 MBytes  87.2 Mbits/sec
[  5]   1.00-2.00   sec  11.2 MBytes  93.8 Mbits/sec
[  5]   2.00-3.00   sec  9.68 MBytes  81.2 Mbits/sec
[  5]   3.00-4.00   sec  11.3 MBytes  95.1 Mbits/sec
[  5]   4.00-5.00   sec  11.1 MBytes  93.4 Mbits/sec
[  5]   5.00-6.00   sec  11.3 MBytes  95.0 Mbits/sec
[  5]   6.00-7.00   sec  11.3 MBytes  94.5 Mbits/sec
[  5]   7.00-8.00   sec  11.2 MBytes  93.7 Mbits/sec
[  5]   8.00-9.00   sec  11.3 MBytes  94.9 Mbits/sec
[  5]   9.00-10.00  sec  11.3 MBytes  95.0 Mbits/sec
[  5]  10.00-10.01  sec   112 KBytes   102 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  5]   0.00-10.01  sec  0.00 Bytes  0.00 bits/sec                  sender
[  5]   0.00-10.01  sec   110 MBytes  92.4 Mbits/sec                  receiver

用が済んだら Ctrl+C でプロセス殺す。

ポートも閉じる。

firewall-cmd --zone=public --remove-port=5201/tcp

Server was too busy and OOM Killer fired

昨日からサーバーに繋がりにくくなっていた。
サーバーに繋がらなくなった。
大方 php-fpm のプロセスがたくさん増えて swap 発生しまくってるんだろうと思った。

1vCPU に 512MB しかない VM にそんなに多くを期待してはいけない。

IP アドレスでアクセス制限かけてたからどうせ外出先からじゃアクセスできないし、戻ったら直そうと思っていた。
メールを確認しようとしたらいよいよ認証も通らなくなったので OOM Killer 発動したかと思ってさくらの VPS のコンソール上からシリアルコンソール接続して
今つないでいる IP のアクセス許可して top を見てみた。

見事に殺されている。
yum-cron のプロセスが死んでるのはいいが、 mysqld (中身は MariaDB )のプロセスまで殺されるのは勘弁してほしい。

[root@mx1 ~]# grep "Out of memory" /var/log/messages
Oct  9 07:10:09 mx1 kernel: Out of memory: Kill process 7192 (yum-cron) score 77 or sacrifice child
Oct  9 08:05:56 mx1 kernel: Out of memory: Kill process 7354 (yum-cron) score 82 or sacrifice child
Oct  9 09:17:09 mx1 kernel: Out of memory: Kill process 7493 (yum-cron) score 73 or sacrifice child
Oct  9 10:07:45 mx1 kernel: Out of memory: Kill process 6905 (mysqld) score 52 or sacrifice child

圧倒的 php-fpm のプロセス数。

OOMKillerTop

圧倒的メモリ不足。

[root@mx1 ~]# vmstat -aS m
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 2  0   1059     70    223    140    0    0  3632    28   19   14  0  1 99  0  0

ひとまず静かにデーモンリスタート

[root@mx1 ~]# systemctl restart php-fpm

余裕が出てきた。

free

[root@mx1 ~]# vmstat -aS m
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 2  0     70    342     87     26    0    0  3632    28   19   14  0  1 99  0  0

おしまい。