class属性の難読化をされても狙ったElementを駆逐したい(できそうにない)

要約すると、クラス名ではなく、CSSセレクタ:nth-childを使って階層の位置で表現すれば、削除したいElementを特定できるんじゃないかな、と思ってやってみたが、しんどくて諦めてます、という感じです。

続きを読む

RAID1の片方が逝ったのでストレージを差し替えた

久々にまともなネタが出来た。

以前、NASのためにRAID1を組んだが、とうとう壊れた模様。差し替え作業は初めてかもしれない。

mdadmを使っているが、これはオンラインのまま差し替えができるはず。やっていきましょう。

行ったストレージ交換の要点

  • cat /proc/mdstatmdadm --detail RAIDデバイス名 で faulty なストレージデバイスがないか確認する
  • mdadm --remove RAIDデバイス名 ストレージデバイス名RAIDバイスの構成から切り離す
  • echo 1 > /sys/block/ストレージデバイス名/device/delete でストレージデバイスを削除してLinuxの管理から外す(?)
  • ストレージデバイスを物理的に差し替える
  • fdiskなどで新たなストレージデバイスが認識したことを確認する
  • mdadm --add RAIDデバイス名 ストレージデバイス名RAID構成に戻す
  • cat /proc/mdstat でちゃんと同期していることを確認する

マシンを止めることなくできた。

今回はRAIDバイス名が/dev/md1、ストレージデバイス名が/dev/sdd(sdd)です。

以下は作業ログとか駄文。

続きを読む

文字列に含まれる複数の数値を考慮したソート

ディレクトリとファイルの整理をすることになって、ファイル名に基づいて連番を振るリネーム作業が必要になった。 2_0001.dat10_0001.dat10_0002.dat だとか、10_aa.dat10_ab.dat、といった感じのファイルをいい感じに並び替える必要があった。

見ての通り、ファイル名は複数の数値を含んでいたり、ゼロ埋めだったり、文字の連番('aa', 'ab)もあった。なので、これを考慮して並び替えたい。 (要はWindowsのファイル名の昇順と概ね同じ並びにしたい。)

GNU CoreUtilssortではできないっぽいので、perlでこう書いた。

sub is_number {
    return $_[0] =~ /^\d+(?:\.\d+)?$/;
}

sub by_number{
    my $pattern = qr/(\d+(?:\.\d+)?|\D+)/;
    my @a = ($a =~ /$pattern/g);
    my @b = ($b =~ /$pattern/g);
    for(my $i=0; $i<@a&&$i<@b; ++$i){
        my $cmp = (is_number($a[$i]) && is_number($b[$i])) ? $a[$i] <=> $b[$i] : $a[$i] cmp $b[$i];
        if($cmp){
            return $cmp;
        }
    }
    return scalar(@a) <=> scalar(@b);
}

# 使用例
my @sorted_datalist = sort by_number @datalist;

で、クソコード書き終えてから気付いた。 数値は先頭ゼロを含めて同じ桁なら、文字比較でもうまくいくはずなので、「数値を0埋めして、後は文字比較する」でよい気がする。

sub by_number{
    my $ta = $a;
    my $tb = $b;
    $ta =~ s/(\d+)/sprintf("%010d",$1)/eg; # 数値10桁を越えそうなら書き換える
    $tb =~ s/(\d+)/sprintf("%010d",$1)/eg;
    return $ta cmp $tb;
}

で、これぐらいならワンライナーに落とせそうだったので落とした。入力は1行1ファイル名。

# `#`区切りで`ゼロ埋め文字列#元文字列`に変換して出力して、並び替えたら元の文字列の部分だけをして出す。
cat "target.txt" | perl -ne 'chomp; $t=$_; s/(\d+)/sprintf("%010d",$1)/eg; print "$_#$t\n"' | sort | cut -d '#' -f 2

もっと簡単な方法はありそう。

再帰的に子プロセスをkillする

あるプロセスが長期間放置しているとOutOfMemoryで死ぬので、OutOfMemoryで死ぬ前にkillして起動しなおすと言う事をやりたい。

あるプロセスはそこそこな数の子・孫プロセスを作るので、子プロセスを全部辿ってkillしたい。

ただし、実行元の親プロセスは残す。

cronはなんとなく使わない。kill後の生死は問わない。

#!/bin/bash
色々やる &

# 時が来るまで待つ
sleep 86400

# 再帰的に子を辿る
function rpgrep(){
  local ppid=$1;
  for pid in $(pgrep -P $ppid); do
    echo $pid
    rpgrep $pid;
  done
}

# $$=自身のPID
kill $(rpgrep $$)

# 自分自身を起動するコマンドとか。 exec "$@" とか
exec bash test.sh

しばらく運用してみる。

はてなブログに移行した

はてなダイアリーが閉鎖すると聞いて。

記事を消しちゃうのはなんとなくもったいない気がしたので、とりあえず移行を済ませました。

元々Markdownが使えるはてなブログには移行したいと思っていて、色々やってたのだけど、idを気にし始めてしまった。 この id:ryousanngata は今のHNになる前に取ったヤツだし、古すぎるよなぁって思っていた。

そこで別アカウント id:ryozi_tn でblogを作っていたりしたけど、はてなブックマークは古いidのままにしておきたいし、色々面倒になっちゃってなーなーになってた。

しかし今回のはてなダイアリーがなくなると聞いて、消すのが嫌なら移行先としてはてなブログになるわけで、そうなると前のblog要らないな?となった。

ということでなので、id:ryozi_tn は無かったことにしてこのidでやっていこうかな、と。

でもid変えたいなぁ。あと広告の主張が強くなったなぁ。

Microsoft de:code 2017 1日目

仕事で「今日もつまんないな」と元気なさそうにしてたら「de:codeあるし参加費負担するから行ってきてもええんやで」と言われた。
朝早い電車は人が混んでて辛い。みんなこの生活をあと何十年もやるつもりなの?って思っちゃう。


というわけで行ってきました。一部セッションは動画に残り、この辺りに集まるようです。

https://channel9.msdn.com/

技術に理解があるのだけど活用出来ない現場なので辛い・・・導入していくためにどうすれば良いかなーとか説明できるための知恵を漬けたいなーと思っていたら、DevOps系のトークばかり聞きに行ってた。de:codeとは一体・・・

以下、参加した感想

続きを読む

父親がダメ

ここ2,3日で父親についていろいろうんざりしたので。

私から見た父親は、パチンコなどのギャンブルで生活費を使い込んだり、ギャンブル絡みで金銭トラブルによる夫婦喧嘩もしばしばやってたし、治る見込みがなく死ぬことが分かった母親の保険金のために離婚を辞めて死ぬのを待ったようにしか見えなかったり、8年以上ロクに働かずに過ごしたり、金とギャンブルのためにいきてるんだろうという認識。ダメな親だと思ってる。こんなダメな親だけど育ててもらった以上、その恩は感じてる。

しかし、ここ2か月で130万の使い込みをしていたことが分かり、その立て替えをすることになり、いよいよ早く死んでくれないな、という感じ。

続きを読む