憂鬱な午後のひととき


10月31日_
ubuntuの入ったノートパソコンがハングアップ. 電源長押しでも切れない. しかたがないのでバッテリーを抜いて強制切断. ハードの不調かな.
10月30日_
Project Euler 146
結構悩んだ. 結局素数判定の前にできるだけ不要なnを振るい落とすことを考えた. Haskellで10秒(Core2Duo 1.8GHz).
Project Euler 154
情けないことに3項展開の係数の式を失念してた. Haskellで最初7分. ちょっといじって120秒. C++で10秒.
10月29日_
会社のサーバの引っ越し作業. 人数が少なくても意外に多いケーブルと重たいサーバ. 明日は筋肉痛かも. で, お腹も減ったし西尾さんが「坦々麺フェアやってますけどどう?」というので会社出てすぐの店に行ってみた. これがまた恐ろしく辛い. 二人とも涙目に凄い汗. 半ば後悔しつつ, 少なくとも今まで食べた中で一番辛いことで合意(というほど坦々麺を食べたことないけど). ただ食べ終わってみると不思議なことにスープを飲んでみたくなる. ということはおいしいのかな.
10月27日_
健康診断で胃の検査をしてからおなかが痛いので眠れない. しかたがないのでProject Eulerをしてる.
10月21日_
近くでお昼の無料コンサートやってるというので同僚達と行ってみた. パイプオルガンって(電気の無い)昔はふいごみたいに踏んでたんだろうかという話になった. そういや小学校の音楽の教室にあったオルガンって足で踏まないと音でなかったよねと言うと西尾さんがそんなの見たことないというので意外だった.
10月20日_
n_shuyoさんにProject Euler 126の問題をどう解いた?と聞かれて, 面倒だったのでC++で解いたと答えたら「駄目やん」と言われたのでHaskellで解き直した. 最初listやarrayを使ったら話にならないぐらい遅かったので(C++で解いてしまった)しかたなくSTArrayを使った. そうなるとCの方が読みやすいやんと思うのは私だけ? Cの方が10倍ぐらい速いし. もっと簡単に(そして速い)かける方法あればどなたか教えてください.
# maxN = 100000にするとHaskellはメモリ不足で落ちる. なぜだろう.

追記
eagletmtさんにwriteArray ary pos $! (v+1)したらと教えていただいた. maxNでも落ちなくなりました. ありがとうございます. $!は何カ所にはつけてみたのだけど駄目だった. 前回のときもそうだけど, どうもどこにつけていいのかよく分からない. うまく行ってもちょっとコード変えたら挙動が変わるし, 基本的な関数も自分で再定義しないといけなくなるし(適当につけてるからや>自分). うーん. ちなみにmaxN = 100000にしたときの速度はHaskellがCの57倍ぐらい遅い. 中で何やってるのかな. またGC系?

// C++版
#include <stdio.h>
#include <algorithm>

const int N = 50000;
const int limit = 1000;

static int countTbl[N];

int main()
{
    for (int a = 1; a <= (N - 2)/4; a++) {
        for (int b = 1; b <= std::min(a, (N/2 - a)/(a+1)); b++) {
            for (int c = 1; c <= std::min(b, (N/2 - a*b)/(a+b)); c++) {
                int p = a + b + c;
                int q = a * b + (a + b) * c;
                int n = 1;
                for (;;) {
                    int s = 2 * q + 4 * (n-1) * (p + n - 2);
                    if (s >= N) break;
                    countTbl[s]++;
                    n++;
                }
            }
        }
    }
    const int *pos = std::find(countTbl, countTbl + N, limit);
    if (pos != countTbl + N) {
        printf("found %d\n", (int)(pos - countTbl));
    } else {
        puts("none");
    }
}
// 0.41秒
Haskell版
import Control.Monad.ST
import Data.Array.ST
import Data.List

maxN::Int
maxN = 50000
limit = 1000

ls = [(a,b,c)|a<-[1..quot (maxN-2) 4],
              let maxN2 = quot maxN 2, b<-[1..min a (quot (maxN2 - a) (a+1))],
              c<-[1..min b (quot (maxN2 - a * b) (a+b))]]

genPos (a,b,c) = takeWhile (<maxN) [2 * q + 4 * (n-1) * (p + n - 2)|n<-[1..]]
 where p = a + b + c
       q = a * b + (a + b) * c

inc ary pos = do v <- readArray ary pos
                 writeArray ary pos (v+1)

count = do
  ary <- newArray (0,maxN-1) 0 :: ST s (STArray s Int Int)
  mapM_ (inc ary) $ concatMap genPos ls
  getElems ary

main = print.findIndex (==limit).runST $ count
// 15.97秒
10月19日_
pclmulqdqってどれくらい
instruction_tablesを見るとlatencyが12とありますね. 自分でも試そうかと思ったが, その前にXbyakを対応させる必要があった. pclmulqdqやaesの説明はcarry-less multiplicationadvanced encryption standard new instructionsを来週読んでみる.
#しかしなんだよaeskeygenassistって. とてもCPU命令の名前とは思えないな. pclmulqdqも説明にGF(pk)とか出てるし.
10月18日_
同僚と, 彼と大学の同期だった方(というか私の先輩でもある)の3人で食事. 私は先輩には研究集会とかでちょくちょく会ってたけど, 同僚は15年振りぐらいだそうな. こういう普通の飲み会(と言っても飲んでないけど)はあんまししないので逆に新鮮でとても楽しかった.
10月16日_
魚を食べたくなって, ちょっと遠いけどぎょれん市場というのに行ってみた. 11時ちょっと前に着いたらまだ空いてなくて, 待ってたらどんどん人が並んでくる. お店はプレハブな割に綺麗で(あとで見たらまだ開店して数か月だった), お店も騒々しくなくてよい. 毎日変わるメニューの中でてんぷら定食にした. 最初だったので料理もすぐ. お刺身があまくて, てんぷらもからっとしておいしかった. また行きたい. ただ, 周囲に観光できるところが全く無い. 道路際で車も多いので散歩する気にもなれず, そのまま帰って来てしまった. 食べるだけにいくのはちょっと辛いな.
10月9日_
有界の会
目的がkikxさんにCoqの話を聞くことで, それができたので満足である. 楕円曲線のミーハー勉強会ってあったらうれしい人いるのかな. あとProject Eulerのためにx^2 = a mod pを解く関数をHaskellで書いたけど, 結局C++(というかXbyak)を使ってしまった.
10月7日_
『日本人はなぜ無宗教なのか』(阿満利麿)

目茶目茶おもろかった. つい言ってしまう「私は無宗教です」の意味を考える. 著者によると「無宗教」とは「無神論者」ではなく「特定の宗派の信者ではない」という意味にすぎないという.

なるほど, 特定の既成宗教の枠にはめられるのが嫌だからそう言ってるというのは当たってる気がする. 私は初詣も墓参りもお盆も葬式も普通にするしね.

まず著者は「創唱宗教」と「自然宗教」という言葉を定義し区別する. 前者はいわゆるキリスト教やイスラム教を指し, 教祖, 教典, 教団などで成り立っているもの. 後者は特定の教祖によるものではなく, 自然発生的に現れ, 無意識のうちに受け継がれてきたものとする. そして, 日本人の大多数は「自然宗教」の「信者」であると主張する.

では何故, 普通「自然宗教」, つまり神前結婚式や地鎮祭, 葬式仏教などの風俗や習慣を「宗教」とみなさないのか, それがどういう問題を起こすかという議論に移る.

中世に遡り, 当時の考え方を考察する. 死んだらホトケの「ホトケ」の意味, 死者の霊魂はカミサマなのか. 本来の仏教と日本に元々あったケガレの概念, 中国の「考」やインドのしきたりなどがごちゃまぜ(?)になっていくところなどのトピックも興味深い.

三章では, 脈絡と受け継がれてきたその「自然宗教」が, 明治以降どのようにおとしめられたかを考える. 明治時代は天皇を中心とする中央集権的国民国家を作る必要があった. そのため本音はキリスト教を禁止し, 「神道」を国教にしたかった(このあたりはこないだ読んだ『武士道の逆襲』の話と関連するなあ).

だが, 欧米の手前もあるし「信教の自由」を認めるも必要もあるのでそれができない. そこで「(キリスト教などを)信じることは許す」が「布教や礼拝などの社会的行為を禁止」し, 「神道」を「宗教」とみなさないことにした(これは物凄い論理だな). 「政教分離」が難しいわけだ.

ちなみに「宗教」という用語はキリスト教などのものを扱う概念としてこのとき作られたそうな. 最初から「自然宗教」は考慮外だった.

さて古来の日本の伝統的な信仰は, 身の回りのものそれぞれにカミがいて, 仏壇もあって, その外側により強いカミ(神社)がいるという構造だった.

そこに「天皇崇拝」が降りてきた上, 神道の儀礼が「宗教でない」となったのでワケワカメになってしまった. そんな中では「無宗教」は身の安全を保証する方便だった. うむ, 恐ろしい.

後半は「平凡指向」, ムラの知恵, 沖縄の大神島の祭りの話になる. 最後の方はいまいち散漫でよく分からないところもあった. でもまあ, 「自分は無宗教」と言ったことがある人, 読んでみたらいいと思う.

10月6日_
カップリング
炭素をつなぐ最良の方法・鈴木カップリングの説明が分かりやすかった.
10月5日_
10/5の朝日新聞の「異議あり」で坂本龍馬の人気に関して野田正彰さんへのインタビュー. なかなか辛辣なことが書いてあった. 経営者が青春象にしがみつくのは「人格的に未熟だから.」 龍馬に憧れるのは「幼稚さの現れ.」 あと史実に基づかない「勝手な使い方はいいかげんにしてくれと」とのこと.
10月4日_
暗号検定の答え
>百人一首は「定家の暗号」という「歌織物」説に基づき、その配列の横に「漢数字」、縦に「いろは」を振る。
なんだよその歌織物って. 合わせ言葉表の右上, 「古き軒ば」の「のき」と, 「ひさかたの光どけ」の「のき」を関連づけてるのか? 他にも"みかきもり"と"短き"を隣に置いてるし. そんなトンデモっぽいのを符号表に使うなよ. 知的財産教育協会は誰も反対しなかったのか.
まあ, 「この説の主張が正しいか正しくないかはこの「暗号」を解く上では検討の必要がない」て書いてるので仕方ないか. いずれにせよつまらない問題だったと思う
10月3日_
肩こりのせいか, (比喩ではなく)首が回らなくなったので, ちょうど初めてキャンペーンをやってた整体院に行くことにした. 中国の人で, 日本語が苦手らしく電話予約してもそっけない. 予約で名前を聞かれなかったのは初めてだ. 行ったら, 女の人が(名前も聞かず)まず寝てと言うなり, いきなり肩とか腰を揉み始めた. とてもしっかりとしたマッサージで上手なんだけど飛び交ってることばがずっと中国語なのが若干不安だ. 全然言葉は分からないなりにも, なんとなく聞いてると同じく隣の中国人のマッサージしてる人に日本語の数字の読み方を教えてもらいながら揉んでるんじゃないかと. 本当にきっちり1時間してもらった. ただ言葉が通じないと細かい場所の指定ができないなあ. 揉み返しが不安である. 首を曲げられないのはあんまし変わらなかった.
10月2日_
空飛ぶ人間 | NHK ワンダー×ワンダー
番組予告見て思わず録画してしまった. あまりの凄さに笑ってしまう. ガッチャマン(ふっ古い…)みたいなひらひらしたスーツを着て1000m級の崖から飛び下りて空を飛ぶ人たち. 上級者は200km/hの速度で崖すれすれに飛ぶらしい. 他には飛行機と一緒に並走(?)する人もいた.

御意見は光成滋生<herumi@nifty.com>までお願いします