CentOS7で、 anacron をはじめとした cron のメール通知を全て抑止し、内容をsyslogに出力するようにする

CentOS7で、あまりにも anacron に書いたスクリプト ( /etc/cron.weekly/ 以下のスクリプトとか) の出力がローカルのメールにたまっていた。普段はローカルのメールなんか読まないので、さすがに対応した。
続きを読む CentOS7で、 anacron をはじめとした cron のメール通知を全て抑止し、内容をsyslogに出力するようにする

メタプログラミングRuby第2版を読んだ

前の版のメタプログラミングRubyは読んでいたが、Ruby1.8時代の本なので、人におススメするには今となっては少し古いなぁと思っていたところ、タイムリーな感じで第2版を見つけたので読んでみた。

内容自体は第1版で読んでいたり、その後、実際に使っていたものだったので、個人的には難しくは感じなかったが、まぁまぁ読みやすくまとまっているかな、という感じ。
続きを読む メタプログラミングRuby第2版を読んだ

btrfs ファイルシステムをほかのデバイスにコピーする。

サーバのbtrfsボリュームのバックアップ用ドライブを新しくしたが、バックアップ用ドライブもbtrfsで用意すると、初回データコピーとかが楽という話。

ネタは https://wiki.archlinuxjp.org/index.php/Btrfs に書いてあるが、読み込み専用サブボリュームはどうやって作るんだっけ、と毎度調べているような気がするので、メモ。
続きを読む btrfs ファイルシステムをほかのデバイスにコピーする。

「あらかじめご承知おきください」は失礼?

https://nanapi.com/ja/98876
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13121366068

「ご承知おきください」は、承知が謙譲語だから誤った表現で失礼らしい。ありえん。
合点承知の助みたいな言い方が謙譲語なのかいな。汚名挽回や全然+否定に通じる言葉狩り的なにおいを感じた。
こういうのの特徴はたぶん、明確にある種の用語法を誤りと決めつけることだと思う。

PayPalで本人確認をしてみた。

海外通販(つうか、aliexpress)でちょっとしたトラブルがあり、クレームをつけたところPayPalに返金するからアカウントを教えろ、といわれた。

PayPalで送金を受けるためには、PayPal上で本人確認をしなければならず、若干面倒だったので、ここにメモ。

続きを読む PayPalで本人確認をしてみた。

sonyreader prs-t3s が買えなくなってしまったようだ。

sony reader をもう一台買い足そうと思って調べたりしていたところ、先々月くらい?からもうsony storeでも出荷終了で、変えなくなってしまったようだ。
もう中古でしか買えなくなってしまったようで、結構残念。ちょっと悔しいな。

reader storeで結構買っちゃったので、いまさらほかのものに乗り換えるのもなんだし、物理キーがついてるやつとなると、あまり選択肢がない。
うーん。これからどうしようか悩む。

帰国した

しばらく間があいてしまったが、先日やっとフランスから帰国した。
その後、また家を探して借りて、仕事も戻って、落ち着いてきた感じ。
またぼちぼち再開します。

フランスに行っている間は、まぁフランス語は話せるようにはならなかったけど、いろいろと観光できたのはよかったかな。
フランス国内のほか、イギリス、イタリア、ポルトガル、スイス、スペイン、オランダ、ベルギー、ドイツに行った。
そのうち旅行に行った記事を書くかも。

btrfsでCentOS7のルートディレクトリにしていたUSBメモリが壊れた。。。。

以前から調子が悪く、だましだまし使っていたCentOS7のルートディレクトリを入れていたUSBメモリがついに壊れた。

昨日btrfsが急にreadonlyでのマウントになっていた。

ログを見たりしたが、原因がわかるはずもなく、とりあえずカーネルが新しければなんとかなるかもしれんと思って、fedora23のモノにさしてみて、btrfs checkしてみたら、3つのスナップショットのツリーが壊れているようだったので、そのスナップショットを削除してみようとしたところ、削除できず(正確には30分ほど待ってもなんとも反応がなかった)。

もうこれはUSBメモリが壊れたんだろうなあと踏んで、USBメモリのファイルシステムを消したうえでchkflshで確認してみたところ、最後まで読み込めずにエラーで終了。その後、USBメモリはどうやっても認識させられなくなってしまった。(あ~あ)

もうしょうがないので、別のUSBメモリを用意して、ファイルシステムを作成。バックアップから復旧して、grub2-install やら kernel の reinstall やら grub2-mkconfig やらをして、復旧させた。

この別のUSBメモリというのも、windows8でReadyBoost用に使っていたものなので、耐久性にはおそらく難があって、また近々似たようなことが起こるかもしれない。
続きを読む btrfsでCentOS7のルートディレクトリにしていたUSBメモリが壊れた。。。。

AliExpress で PRS-T3S の交換用スクリーンを購入した

壊れたSONY READER PRS-T3Sのスクリーンの代わりを探して、ALiExpressで購入した。

届くかどうか不安ではあったが、とりあえず2週間ほどで到着。

会員登録やクレジットカードでの購入手続きはさして難しいことはなく、まぁまぁ普通な感じ。
(日本語訳はいまいちなので、英語で読む方がよいかと。)

出品者によるのかもしれないが、支払いの際に通貨が選択でき、このとき米ドル以外の通貨でも特に手数料が上乗せされているようには見えなかったので、日本円でそのまま購入。

とりあえずは届いたので、お次はスクリーンの交換・修理だ。

SONY READER PRS-T3Sの画面が壊れた。。。

先日 sony reader を持ち歩いていたところ、画面が正常に更新されなくなってしまい、画像のようにスクリーン上側が切れてしまったようになってしまった。。。

これはたぶんスクリーンが壊れてしまったのだと判断して、いろいろ探してみると、iFixitの記事があった。

現在代替品を買うのも大変な状況で、仕方ないのでこれを真似してみるべくhttp://www.aliexpress.com/でスクリーンを注文した。送料込み3900円くらい。

中国の問屋か何かに直接発注できる楽天みたいな感じのサイトだったけど、今は到着するのを待っているところ。ちゃんと届くのだろうか、、、。

sony reader のスクリーンが正常に更新されない画像

有川浩「県庁おもてなし課」(角川文庫)を読んだ

有川浩といえば、図書館戦争は1巻だけ読んでいまいち合わなかったので、先は読んでいない。
塩の街も読んだはずだけど、もう中身は覚えてないなぁ。

「県庁おもてなし課」は、以前話題になったのと、なにより電子書籍の安売りがあった時に買っていたので読んだ。

全体的には、軽くて読みやすい感じ。あっさり読めるので、移動の暇つぶしくらいにはちょうどいいのかも。

話は嫌いじゃないけど、恋愛要素よりも観光や役所の部分をもっと膨らませてくれればさらに良かったかなぁ。

前半は、県庁勤めの主人公が「民間感覚」というカルチャーショックを受けながら成長していく、というくだりが中心だった。この辺りをもう少し読みたかったような気がする。役所の中で、おもてなし課で、新しいことをやるのは大変なんだっていうことを期待してこのタイトルの小説を買ったと思うんだけど、後半だんだんと恋愛話じみてきて、あれれ?となる。

後半の、特に作家先生のくだりはちょっと、、。
確かに物語的な必然を整えたあとではああなるのはわかるんだけど、話としてそれいるか?と、あとから考えるとそんな気もする。

でもまぁ、基本的には読みやすいので、読んでいる途中ではすらすらと流れる感じで、気にしなければ気にならない、ということかもしれない。

codeiq @riverplus さんの「コード・トライアスロン2」問題をrubyで解いた

作題者によるまとめはhttp://togetter.com/li/971415から。
問題解説はhttps://codeiq.jp/magazine/2016/05/40858/から。

問題の概要はこちら。

■ 1 ■
四角形ABCDについて、∠ABD=a,∠CBD=b,∠ACB=c,∠ACD=d とおきます。
∠ADB を求めることを考えましょう。
さて、a,b,c,d の値(単位は度)に対し、∠ADB の値(単位は度)を 10^6 倍したものの整数部分を F(a,b,c,d) と定義します。
F(a,b,c,d) を求めるプログラムを書いてください。

■ 2 ■
自然数 n に対し、次の性質をもつ自然数 d の総和を G(n) と定義します。
  n を d で割った余りが 1 に等しい。
G(n) を求めるプログラムを書いてください。

■ 3 ■
先頭にゼロを持たない自然数であって、逆から読んでも同じ数になる数を回文数と呼びます。
自然数 m に対し、m 以下の回文数の総和を H(m) と定義します。
例えば、H(20)=56 です。20 以下の自然数では 1~9 と 11 が回文数だからです。

H(m) を求めるプログラムを書いてください。

■ 問 ■
標準入力から、半角空白区切りで自然数 a,b,c,d(a+b+c < 180 かつ b+c+d < 180)が与えられます。
標準出力に H( G( F( a,b,c,d ) ) ) の値を出力してください。

rubyで書いて提出した回答は下記の通り。

最初に提出したものでは f の計算で数値誤差があって間違った。この手の話は久々。
下のコードでは、切り捨て前に十分小さい値として0.00001をたしている。
この手の問題は整角四角形問題というらしい。学生の頃、三角関数なしでどうやって解くんだと悩んだ記憶がある。

h の計算では、1ケタの数は別に足しておいてから、11 から順に、回文数をひたすら小さい方から生成して順にたしているだけ。数値を文字列にしてひっくり返して足して、、と、手抜きだけど通ったのでまぁいいや、という感じ。

# 正弦定理で等しい辺の長さを探してごにょごにょいじると計算できる。
def f(_a,_b,_c,_d)
  include Math
  a=_a*PI/180
  b=_b*PI/180
  c=_c*PI/180
  d=_d*PI/180
  s=sin(b)*sin(d)*sin(a+b+c)/sin(a)/sin(c)/sin(b+c+d)
  ret = atan(sin(b+c)/(s+cos(b+c)))/PI*180*(10**6) + 0.00001
  ret < 0 ? (180000000 + ret).to_i : ret.to_i
end
# ナイーブに全通り1からnまで探索すると時間切れなので、少し工夫。
# n=(n-1)/d * d + 1 なので、nをdで割った余りが1のときは、
# (n-1)/dで割った余りも1になる。
# これを使って、1 から sqrt(n)までしか探索しない。
# また、nをdで割った余りが1でないときは、d*i(i>1)で割った余りも
# 1でないということを利用して、判断する回数を減らす。
def g(n)
  res=n-1
  max=Math.sqrt(n).to_i
  arr=Array.new(1+max, false)
  (2..max).each{|d|
    next if arr[d]
    if n%d == 1
      res+=d+(n-1)/d
    else
      (1..(max/d)).each{|i| arr[d*i] = true }
    end
  }
  res
end
# 回文数を小さい方から全通り生成して、mより小さければ結果に足す。
def h(m)
  i=1
  tmp=-1
  len = m.to_s.length
  if len == 1 # 1桁のときは別処理。
    return (1..m).reduce(&:+)
  else
    res=45
  end
  while tmp != res
    tmp=res
    str=i.to_s
    if str.length * 2 == len
      wk=(str+str.reverse).to_i
      res+=wk if wk < = m
    else
      ([""] + %w(0 1 2 3 4 5 6 7 8 9)).each{|sp|
        wk=(str+sp+str.reverse).to_i
        res+=wk if wk <= m
      }
    end
    i+=1
  end
  res
end

a,b,c,d=gets.chomp.split.map(&:to_i)
puts h(g(f(a,b,c,d)))

CentOS7 で logwatch の出力を抑制

CentOS7 で logwatch を導入したが、毎日メールが送られてきてつらいので、メールの出力を抑制してみた。

毎日メールを送る原因になっているのは以下の二つ。

  • postfix
  • zz-disk_space

というわけで、それぞれ /etc 以下にファイルを作って対策した。
続きを読む CentOS7 で logwatch の出力を抑制

CentOS7 の btrfs 領域でチェックサムエラーが出始めたので、ファイルを復旧して暫定対策した話

https://ttandai.info/archives/1894に書いた通り、btrfsではfsckしなくていいよ、ということだが、1か月ほど使ってから btrfs scrub したら、checksum error が /var/log/messages の中にいくつも出てきたので、とりあえず不良ファイルをバックアップから戻したあと、 logwatch の導入と btrfs scrub の定期実行で対策した話。

続きを読む CentOS7 の btrfs 領域でチェックサムエラーが出始めたので、ファイルを復旧して暫定対策した話

codeiq @riverplus さんの「ディビジョン・ナイン問題」をrubyとschemeで解いた

回答まとめはこちら

問題は下記。

1 から 4 の数字を使って作る n 桁の整数のうち、9 の倍数となるものの個数を F(n) と定義します。例えば、F(1) = F(2) = 0、F(3) = 10、F(4) = 40 となることが確かめられます。

標準入力から、自然数 n(1 ≦ n ≦ 20)が与えられます。標準出力に F(n) の値を出力するプログラムを書いてください。

1111…から4444…まで全通り生成して数えていては終わらないので、9の剰余で分類します。すなわち、1から4の数字を使って作るn桁の数字のうち、9で割ったあまりがrになるものの個数をF(n,r) とすると、
 \displaystyle F(n+1,r) = \sum^4_{i=1}F(n,r-i)
の漸化式になります。

これをrubyで計算し、F(n,0)を出力するコードが下記。Hashの引数が9で割ったあまりになっています。

n=gets.to_i
h={}
h[1]=h[2]=h[3]=h[4]=1
(1...n).each{|m|
  tmp=Hash.new{|h,k| h[k]=0 }
  h.each{|k,v|
    (1..4).each{|i|
      tmp[(i+k)%9]+=v
    }
  }
  h=tmp
}
puts h[0]

最近始めたschemeで書いたのはこちら、末尾再帰といえば聞こえはいいけど、ループを再帰にして、状態を関数の引数で覚えている、というだけ。もっとスマートに書けると思うんだけど、引数10個くらいだしまぁいいよね、ということで。

(use-modules (ice-9 rdelim))
(define (solve i a0 a1 a2 a3 a4 a5 a6 a7 a8)
    (if (= i 1)
        a0
        (+ (solve (- i 1)
                  (+ a5 a6 a7 a8)
                  (+ a6 a7 a8 a0)
                  (+ a7 a8 a0 a1)
                  (+ a8 a0 a1 a2)
                  (+ a0 a1 a2 a3)
                  (+ a1 a2 a3 a4)
                  (+ a2 a3 a4 a5)
                  (+ a3 a4 a5 a6)
                  (+ a4 a5 a6 a7)))))
(display (solve (string->number (read-line)) 0 1 1 1 1 0 0 0 0))
(newline)

なんかふつふつとやる気がでてきたので、ドメインとってブログのアドレス変えた。

なんかうりゃーっとやる気が出てきたので、サーバ業者が提供していた今までのドメインをやめて、新しくドメインとってWordPressのアドレスを変えてみた。

WordPress内部のアドレスを変えるのは、基本は「設定→一般」の設定項目でアドレスを変えるだけで、WordPress的には全く問題なくできる。
今までのサイトの方からは、一応301で新しい方にリダイレクトするようにしておいて、検索エンジン対策をしておく。(.htaccess で Redirect permanent な感じ)
(同じファイルを見るようにすれば手間はかからないが、新しい方のサイトがなかなかインデックスされないというはめになってしまうと考えた。)

WordPress自体はポータブルにできているようで、ディレクトリごとmvしてしまってもそのまま動いてくれたので、ありがたい。
あとは、いろいろなところのアドレスを直せばおしまい。よそからリンクしてもらってくれていたところは、この機会に直してもらおうかなぁ。
いまだにgooブログの方にちょこちょこと飛んでくる分があるので、なかなかgooブログをたためない、、、