2005年11月

結城浩の日記

目次

2005年11月30日

原稿出し この記事(2005年11月30日22:29)を含む「はてなブックマーク」    

うう。 やっとC MAGAZINEの原稿(2006年2月号向け)が書けましたのです。 例によって分量オーバーしているような。すみませんすみません。

feedback | top

2005年11月29日

セキュリティシステム、テクノロジー、プラクティスを分析・評価する5つのステップ この記事(2005年11月29日14:00)を含む「はてなブックマーク」    

「大阪府など、ICタグ利用した学童の安全確保システム実証実験」という記事を読んで思ったこと。

こういうセキュリティシステムが出てくるときには、 ぜひ「執拗な悪意を持った人の気持ちになれる検証者」 が安全性の検証をしてほしいと思います。

素人的に気がつくポイントとしては:

などです。

これはいま10分くらいで思いつくまま書いたものですから、 専門家が真剣に考えれば、おそらく数百から数千のチェック項目(もっとかも)が出てくると思います。

この類のシステムが出てきたときに、一般の父兄でも「突っ込み」が入れられるような、 汎用に使える「システムチェックリスト」のようなものは公開されていないのだろうか。 …とここまで書いてきて、シュナイアーの Beyond Fearに一般的な話題が出てきていたことを思い出しました。

これですね。

「セキュリティシステム、テクノロジー、プラクティスを分析・評価する5つのステップ」

"five-step process to analyze and evaluate security systems, technologies, and practices" (by Bruce Schneier, Beyond Fear, p.14)

かなり意訳すると、こうなります。

結城は、 このステップ1〜5をステップ・バイ・ステップで考えることは大事だと思います。 セキュリティの専門家でなくても、 業者の宣伝文句に惑わされずにセキュリティシステムを分析・評価する「とっかかり」に なってくれるように思います。

多くのセキュリティシステムの宣伝文句は、 ステップ1〜3を雰囲気で語り、 ステップ4と5について語らないのではないでしょうか。 特に、そのセキュリティシステムが「新たに生み出す危険」 について語る宣伝文句を私は見たことがありません (もしもあったら教えてください)。

feedback | top

仕事 この記事(2005年11月29日11:05)を含む「はてなブックマーク」    

プログラム書いて… φ(._.)

図を描いて… φ(+_+)

文章を書いて… φ(@_@)

なかなか進まん。

ぷぎぃ!

feedback | top

『暗号技術入門 ―― 秘密の国のアリス』増刷 この記事(2005年11月29日04:47)を含む「はてなブックマーク」    

11月は小の月だから「月末」が早いんだよう…。ふみー。

それはさておき。

編集部から『暗号技術入門 ―― 秘密の国のアリス』の増刷のお知らせをいただきました。 ご愛読してくださっている読者のみなさん、ありがとうございます。

そういえば、こういうのもありましたね。 何だか懐かしいな。

feedback | top

2005年11月26日

高橋メソッドのプレゼンテーションをflashのローカルファイルとして作るには? この記事(2005年11月26日21:47)を含む「はてなブックマーク」    

みなさんにお尋ねです。 いわゆる 高橋メソッドでプレゼン資料を作りたいとします。 flashのローカルファイル(*.swf)として作りたいとすると、 もっともよい方法は何でしょう。 できれば、フリーソフトだけで作れればよいのですが。

高橋メソッド反応リンク集からたどれるような、JavaScriptベースならローカルファイルとしてすぐに作れます。 ただ、flashのほうが見栄えがよいように思います (縦方向のセンタリングの問題なのかな? フォントなどを調整すればよくなるのでしょうか…)。

高橋メソッドBBSを利用すれば、 数学物語 ミルカさんシリーズの紹介ページ のようにflashで作ることもできますが、これはローカルファイルにはなりません。

flashを作るフリーソフトウェアとしては、 ParaFla!が有名/良さげなのですが、 どなたかParaFla!で「高橋メソッドテンプレ」とか作っている方はいませんでしょうか (むちゃくちゃ他力本願で恐縮です)。

何か良いアイディアなどがありましたら、 フィードバックから情報をいただければ感謝です。

追記1) さっそく「OpenOffice.orgのpresentationでswf出力が可能です」という情報をいただきました。感謝です。今度試してみます。

追記2) 「 Flashなら Winkはご存知でしょうか? 動画にできるのが有名ですが、ご希望のようなFlashもつくれたと思います 」

追記3) 「 Winkはどうでしょう。もともとチュートリアル作成用のソフトですが、flashに吐き出せます。 画面自体は自分の好きなように作って、そこからflashにできる……はずです。 少ししか使ったことがないのですが 」

追記4) 結城です。みなさん情報ありがとうございます。 OpenOffice.orgとWinkを試してみましたが、 今のところ「惜しい」という感じでした。 もう少しいろいろ試してみます。 作成の手間と美しさのバランスでは、現在のところ 高橋メソッドBBSが一番でした。でも、ローカルファイルにならない。うーん。 (なんだか頭がループしている……あっ、きっと年末進行逃避モードなのだのかもしれないわたし。あうあう)

追記5) laszlo.jpな十河 学さんから 「高橋メソッドonLaszlo」のお知らせをいただきました。感謝です! 以下引用。

こんにちわ。十河と申します。
いつも結城さんの書籍やブログ楽しみにさせていただいています。
本日のブログエントリを読んで「高橋メソッドonLaszlo」を作成してみました。

<takahashimethod>
    <page>高橋メソッドonLaszlo</page>
    <page>入力はXML</page>
    <page>出力はFlash</page>
</takahashimethod>

という形式で書かれたXMLファイルからフラッシュファイルswfを出力します。
swfをこちらにおいていますのでよろしければご覧ください。
http://laszlo.jp/wiki/index.php?plugin=attach&pcmd=open&file=takahashiMethodPresentator.lzx.swf&refer=TakahashiMethodOnLaszlo
まだまだ不十分な点もありますが、とりあえずver0.1.0として公開してみました(^^;
ご意見・ご感想をいただけると幸いです。

結城:うー、かっこいいなあ。 〆切前でなければいろいろやりたいところ…うう。 高橋メソッドBBSのように、フォントサイズを画面サイズに追従させる(画面が大きいときにはフォントも大きく)というのは できるんでしょうか(と言いたいことだけ書いて仕事に戻ります…)。

追記6) さばぞうさんから 「 テキストデータを読み込んで表示する 『高橋メソッドマシーン』ってのがあるようです 」 という情報をいただきました。 ふむふむ…。おお、ここにある「あじびつ」さんによる Flash/高橋メソッドマシーンは、まさに、求めていたものでは…! 感謝です! (あなたは仕事をしていたはずでは?>自分)

追記7) というわけで、 Flash/高橋メソッドマシーンを使って作ってみました(だから、あなたは仕事をしていたはずでは?>自分)

feedback | top

2005年11月25日

日記ダイジェスト更新 この記事(2005年11月25日00:01)を含む「はてなブックマーク」    

「日記ダイジェスト」を更新しました。 ふと「日記ダイジェスト」は、すでに600ページ以上あることに気がつきました。 「日記ダイジェストダイジェスト」が必要そうですね(^_^;

追記: まったく同じセリフを昨年も書いていた…。

feedback | top

2005年11月23日

よかった探しリース この記事(2005年11月23日12:00)を含む「はてなブックマーク」    

左手よかった探しリース右手

結城浩の2005年「よかった探し」です。

feedback | top

打ち合わせ この記事(2005年11月23日11:32)を含む「はてなブックマーク」    

昨晩は新しいお仕事の打ち合わせに出かけました。 具体的なアクションはおそらく来年ということになるでしょう。 また新しい世界が開かれることを期待しつつ、 祈りつつ、仕事をしていきたいと思っています。

feedback | top

2005年11月22日

「テトラちゃんと相加相乗平均」のLaTeXファイル公開 この記事(2005年11月22日14:40)を含む「はてなブックマーク」    

「テトラちゃんと相加相乗平均」のLaTeXファイルを公開しました。

feedback | top

気持ちのよい朝 この記事(2005年11月22日10:36)を含む「はてなブックマーク」    

今日は少し暖かい。朝日の中、木々に包まれた歩道を歩く。 住宅地の中なので、車も通らない、静かないい道だ。

私はiPod shuffleでバッハの「フーガの技法」を聴きながら、満ち足りた気持ちで歩く。 どうやったらこんなに素晴らしい作品を生み出すことができるんだろう。 数学的なバッハの曲。規則的なようだが、規則的ではない。 機械的なようだが、機械的ではない。非常に複雑に入り組んでいるように感じるのだが、 シンプルで美しいテーマが繰り返し聞き取れる。

…そんな音楽を楽しみながら、私はゆっくりと道を歩いていく。 落ち葉を踏む、さくさくという感触もどこか楽しい。 私は、レオンハルトのハープシコードにあわせて軽くハミングしていたかもしれない。

そのとき、コートを着た一人の会社員が、私を早足で追い越していく。

タバコの煙がやってくる。

タバコの煙は、ふわっと顔にかかり、私は咳き込んで立ち止まる。 タバコを手にした会社員は特に気にせず、早足のまま過ぎていった。

私は、咳が収まってからも、道の傍らに立ったまま、しばらく考えた。

あの会社員は、自分のタバコの煙が私にかかったことなど全く知らない。 気持ちのいい朝が、タバコの臭いで一度にだいなしになったことも知らない。 ここは外だし、特に禁煙にする必要もないくらいにオープンな空間だし、 私だって、自分に煙がかかりさえしなければ、特に文句もつけない。 でも。けれども。うーん。 こういう気持ちはどこに持っていけばいいんだろう。

……日記に書いてみよう。

で、いまこの日記を書いていて思ったのだけれど、 あの会社員は、私に不快な気持ちを与えたことなど知らないだろう。 だったら、もしかしたら(いや、もしかしなくても)、 私自身も、私が気づかないところで同じように不快な気持ちを誰かに与えているのかもしれない。

だからどう、と何か主張があるわけではないけれど。

feedback | top

2005年11月21日

年末進行 / お仕事メールとWebサイト この記事(2005年11月21日14:34)を含む「はてなブックマーク」    

あーうー。 この時期「年末進行」という単語にはどきどきしますね。 とりあえず淡々とがんばるのであった。

ところで、ある方から、お仕事のご依頼メールをいただきました。 そのメールには「結城がどういう仕事をして来たか・ 現在どういう活動をやっているか・また何に興味があるか」 などが、きちんとサマライズされておりました。 でも、単に要約したわけではなく、文章中に自然に内容が織り込まれています。 失礼ながら「す、すごい…」と感嘆しつつ読みました。 また良いお仕事ができるといいなあ。

その方は、結城のWebサイトをごらんになったわけですが、 Webサイトというものが重要な営業ツールになっていることを今更ながら感じました。

feedback | top

2005年11月20日

日曜日 / 数学ガール この記事(2005年11月20日20:42)を含む「はてなブックマーク」    

午前中は礼拝。お昼は久々に美味しいイタリアンで外食。帰ってきてからお昼寝。いつもの日曜日。

ある読者さんからフィードバック。 メールアドレスがわからないので、こちらでお返事。

「テトラちゃんと相加相乗平均」、興味深く読ませていただきました。

ちょっとだけ気にかかったのは、 8ページの「2数を乗じて平方する」という箇所で、 これだと、(xy)^2になりませんか?

おお、確かにそうですね。 「平方する」ではなく「平方根をとる」ですね。 「僕」に伝えておきます…というか、修正しておきます。 ご指摘ありがとうございます。

feedback | top

2005年11月19日

おせんべいの対話 この記事(2005年11月19日22:23)を含む「はてなブックマーク」    

ちょっと風が冷たいけれど、良い天気なので次男とお散歩。

私「そろそろおうちに帰っておやつ食べよう」

次男「おやつ、何?」

私「うーん…おせんべ」

次男「おせんべ、ないよ」

私「なんで? あるよ」

次男「ないよ」

私「あるよ」

次男「ないよ」

私「あるよ」

次男「もう食べちゃったもん。ないよ」

私「それ、ごませんべいでしょ。ごませんべいじゃなくってえ」

次男「なくって?」

私「ごませんべいじゃなくってえ、ごませんべいじゃなくってえ、ごませんべいじゃなくってえ、ごませんべいじゃなくってえ、ごませんべいじゃなくってえ」

次男「きゃはは。なーにぃ?」

私「ごませんべいじゃなくって、塩せんべい。それから、柿の種。それに、えびせんべい」

次男「えびせん、って言うんだよ」

私「えびせんべい」

次男「なにぃ? えびせんろ? 線路で電車が通ったら、えび折れちゃう」

私「じゃあ、えびせんせい。えびの先生」

次男「きゃはは」

私「えびの先生、えび先生。Rubyの線路、Ruby on Rails」

次男「?」

家についてから、二人で塩せんべいと柿の種とえびせんを食べました。

feedback | top

2005年11月18日

Tropy: 2005年11月のアクセス数推移 この記事(2005年11月18日11:15)を含む「はてなブックマーク」    

参考までに、2005年11月のアクセス数推移を。 11月3日の後の急上昇の部分が、Tropyによるものですね(Tropyの公開は11月5日の真夜中まで)。

[グラフ]

といっても、ページ数は増えていますが、ユーザ数や転送量は増えていませんね。 まあ、Tropyの使われ方を考えると当然ですかね。

feedback | top

はてなブックマーク数と閲覧数に関する素朴な疑問 この記事(2005年11月18日04:39)を含む「はてなブックマーク」    

feedback | top

2005年11月16日

テトラちゃんと相加相乗平均 この記事(2005年11月16日16:00)を含む「はてなブックマーク」    

ミルカさんシリーズ第4弾、「テトラちゃんと相加相乗平均」を公開します。 ぜひ、ご感想をお寄せください。

これまでのミルカさんシリーズは「数学ガール」のページからどうぞ。

feedback | top

2005年11月14日

名前を...で省略する この記事(2005年11月14日08:42)を含む「はてなブックマーク」    

Nikesと名前推論を読んでいて思ったのですが、 Knuth先生の Literate ProgrammingツールであるWEBには、 既出のセクション名を ... で省略できるっていう機能がありますね。 たとえば、

@<Program to print the first thousand prime numbers@>

というセクションが出てきていたら 次からは、

@<Program to print...@>

のように省略できます。

説明文は、 Literate Programming (knuthweb.pdf)のp.7, p.8あたりにあります。 以下引用。

> Since the names of sections tend to
> be rather long, it is a nuisance to type them in full each
> time; WEB allows you to type ‘...’ after you have given
> enough text to identify the remainder uniquely.

関係あるかどうかわかりませんが、ご参考まで。

feedback | top

2005年11月13日

いつもの日曜日 この記事(2005年11月13日18:55)を含む「はてなブックマーク」    

午前中は礼拝。 帰って来てからぐっすり昼寝。 いつもの日曜日。

feedback | top

2005年11月12日

小さなHTTPサーバ(その2) この記事(2005年11月12日09:59)を含む「はてなブックマーク」    

Javaのコードをいじっているうちに、こんな感じになりました。

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.*;

class Server implements Runnable {
    private static final String HEADER = "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n";
    private static final String FORM = "<form action='/'><textarea name='m'></textarea><input type='submit'></form>";
    private final ServerSocket _serverSocket;
    private final ExecutorService _executorService;

    public Server() throws IOException {
        _serverSocket = new ServerSocket(8888);
        _executorService = Executors.newFixedThreadPool(5);
    }

    public void run() {
        try {
            while (true) {
                final Socket socket = _serverSocket.accept();
                _executorService.execute(new Runnable() {
                    public void run() {
                        try {
                            String request = new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine();
                            String response = HEADER + "<html><pre>" + request + "</pre>" + FORM + "<hr>" + Thread.currentThread() + "</html>";
                            socket.getOutputStream().write(response.getBytes());
                            socket.close();
                            // throw new IOException("IOException from run");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });
                // throw new IOException("IOException from while");
            }
        } catch (IOException e) {
            e.printStackTrace();
            try {
                _serverSocket.close();
            } catch (IOException ex) {
                e.printStackTrace();
            }
        } finally {
            _executorService.shutdown();
        }
    }
}

public class Main {
    public static void main(String[] args) throws IOException {
        new Server().run();
    }
}

feedback | top

2005年11月11日

Railsアプリに挑戦 この記事(2005年11月11日21:47)を含む「はてなブックマーク」    

10分で作るRailsアプリ for Windowsを見て感動し、私もRailsを試してみようと思いました。 実は先日一回トライしたのですけれど、最後の最後でエラーが出て放置していたのでした。 調べてみると「クライアントをアップグレードしなさい」というエラーになっていました。 もう一度上のflashを見直すと、MySQL Serverのバージョンが4になっているのに、 私がインストールしたのはMySQLの5でした。あれれ。 そこで一度全部アンインストールして、再挑戦。 今度はうまく行きました。 以下は、私のメモ。

feedback | top

小さなHTTPサーバ この記事(2005年11月11日18:42)を含む「はてなブックマーク」    

何となく、役に立たないプログラムをJavaで書きたい気分になった (役に立たないプログラムではあんまりなので、「小さなHTTPサーバ」とタイトルを変えました)。

import java.io.*;
import java.net.*;

class Server {
    static String HEADER = "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n";
    static String FORM = "<form action='/'><textarea name='m'></textarea><input type='submit'></form>";
    public static void main(String[] args) throws Exception {
        ServerSocket server = new ServerSocket(8888);
        System.out.println("http://localhost:" + server.getLocalPort());
        while (true) {
            Socket socket = server.accept();
            String request = new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine();
            socket.getOutputStream().write((HEADER + "<html><pre>" + request + "</pre>" + FORM + "</html>").getBytes());
            socket.close();
        }
    }
}

ほぼ同じコードをPerlでも(perldoc perlipc参照)。

use strict;
use Socket;

my $HEADER = "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n";
my $FORM = "<form action='/'><textarea name='m'></textarea><input type='submit'></form>";
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die;
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) or die;
bind(SERVER, sockaddr_in(8888, INADDR_ANY)) or die;
listen(SERVER, SOMAXCONN) or die;
while (accept(CLIENT, SERVER)) {
    my $request = <CLIENT>;
    print CLIENT "$HEADER<html><pre>$request</pre>$FORM</html>";
    close(CLIENT);
}

書いて、眺めているうちに、何か作れそうな気分になるから面白い(作らないけど)。

追記

KIDO Sadayoshiさんから「なんとなくRuby版」を送っていただきました。 ありがとうございます!

require 'socket'

header = "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n"
form = "<form action='/'><textarea name='m'></textarea><input type='submit'></form>"

server = TCPServer.open(8888)
while true
  socket = server.accept
  request = socket.readline
  socket.write "#{header}<html><pre>#{request}</pre>#{form}</html>"
  socket.close
end

feedback | top

RSA-640 is factored! この記事(2005年11月11日11:43)を含む「はてなブックマーク」    

RSA-640 is factored!ということで、さっそく検算。

use bigint;
my $p = 1634733645809253848443133883865090859841783670033092312181110852389333100104508151212118167511579;
my $q = 1900871281664822113126851573935413975471896789968515493666638539088027103802104498957191261465571;
my $N = 3107418240490043721350750035888567930037346022842727545720161948823206440518081504556346829671723286782437916272838033415471073108501919548529007337724822783525742386454014691736602477652346609;
if ($p * $q == $N) {
    print "Factored!";
} else {
    print "?";
}

この機会に拙著も宣伝しておこう。

feedback | top

数当てクイズ (解答編) この記事(2005年11月11日06:50)を含む「はてなブックマーク」    

数当てクイズへの解答や反応をありがとうございます。 以下、結城および他の方々の解答(抜粋)を記載します。

クイズに挑戦したい方は、 先を読み進める前に、 問題編をお読みください。

結城の解答

問題Aの解答

0, 1, 10, 2, 100, 11, 1000, 3, 20, 101, 10000, 12, 100000, 1001, 次の数は?

この数列は、 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14を それぞれ素因数分解したときの、素因数の指数を並べた数の列です。 つまり、 5a×3b×2cの形に 素因数分解したときのabcです。 14の次の数である15を素因数分解すると、 51×31×20になるので、 問題Aの答えは110になります。

答え:110

問題Bの解答

1, 11, 2, 12, 111, 21, 3, 13, 121, 1111, 112, 22, 211, 31, 4, 14, 131, 次の数は?

この数列は、 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17を それぞれ2進法で表記したときの、同一数字の連続数の列です。 つまり、2進法で表記したとき最上位の1からはじめて、 1がa個連続、0がb個連続、1がc個連続、0がd個連続しているときのabcdです。 17の次の数18を2進法で表記すると10010になるので、 問題Bの答えは1211になります(1が1個連続、0が2個連続、1が1個連続、0が1個連続)。

答え:1211

注意

問題A, Bともに、現れる数が9を越えると一意性は失われます。

id:kkkkkkkkさんの答え

matarilloさんの解答

グループ化すると解ける問題が多いのでそうする。

A

(0), (1, 10), (2, 100, 11, 1000), (3, 20, 101, 10000, 12, 100000, 1001, ?), ... とグループ化できそう。グループnには2^(n-1)個のメンバーが存在する。
そう考えるとグループ4の先頭は4になりそうだが、残念ながら出題はそこではない。
次に1, 10, 100, 1000, 10000, 100000の出方からパターンを類推できるかと思ったが、どうもうまくない……あれ、これ素数?
a_2=1, a_3=10, a_5=100, a_7=1000, a_11=10000, a_13=100000
そう考えるとa_17=1000000になりそうだが、残念ながら出題はそこではない。
素数が出てくるなら、次は合成数と素因数分解を考えるのだろう。と、ここで素因数分解にたどり着いた時点でパターン発見。
a_4 = a_(2^2) = a_2 * 2 = 2
a_6 = a_(2 * 3) = a_2 + a_3 = 11
a_8 = a_(2^3) = a_2 * 3 = 3
a_9 = a_(3^2) = a_3 * 2 = 20
a_12 = a_(2^2 * 3) = a_2 * 2 + a_3 = 12
a_14 = a_(2 * 7) = a_2 + a_7 = 1001
a_15 = a_(3 * 5) = a_3 + a_5 = 110
答えは110。

素因数分解なんだから、書き方を変えたほうがきれいですね。

 2 =                   2^1 ->    1
 3 =             3^1 * 2^0 ->   10
 4 =                   2~2 ->    2
 5 =       5^1 * 3^0 * 2^0 ->  100
 6 =             3^1 * 2^1 ->   11
 7 = 7^1 * 5^1 * 3^0 * 2^0 -> 1000
 8 =                   2^3 ->    3
 9 =             3^2 * 2^0 ->   20
10 =       5^1 * 3^0 * 2^1 ->  101

のように。 もちろん初項は 1 = ... * 5^0 * 3^0 * 2^0 -> 0 ですね。

B

(1), (11, 2), (12, 111, 21, 3), (13, 121, 1111, 112, 22, 211, 31, 4), (14, 131, ...)とグループ化できる。グループnには2^(n-1)個のメンバーが存在する。
n番目のグループは、各桁の合計がnになることがわかり、[n個のものを1つ以上のグループに配分したときのパターン]とわかる。
グループ内の並びのパターンだが、グループ3と4をにらんできたら見えてきた。
グループn+1の前半は、グループnのメンバーを逆順にして、先頭に1を追加。グループn+1の後半は、グループnのメンバーの先頭桁に1を足す。これでどうだ。
ちなみにグループの最後のメンバーを除けば、そこまでの並びは左右対称になっている。
グループ5の前半はグループ4のメンバーを逆順にして先頭に1を追加。
なので(14, 131, 1211, 122, 1112, 11111, 1121, 113)と並ぶだろうから、答えは1211。

id:Horiuchi_Hさんの答え

まちよさんの答え

まちよ と申します。僭越ながら数当てクイズの問題Aの回答を投稿させていただきます。
数字の出現順がキーになる。
・1番目は 0 に設定
・n番目の数字が素数の場合は、10のm乗 とする。mはそれまでに素数の出てきた数。素数でない場合は、素因数分解して得られる数字に設定した値を足した値。例えば 6番目の数字の場合 2x3 なので、2番目の数字に設定した値と、3番目に設定した値の和。

これでつじつまが合うはずだと思います。

15番目の数字なので 15 = 3 x 5 で
3番目の数字→10
5番目の数字→100
により、答えは 110 です。

notogawaさんの答え

どばいさんの答え

問題Bの答え:1,2,3,4、、、それぞれを分割する組み合わせを網羅する数列ではないでしょうか。
例えば3の場合、
○ ○ ○
と3つの要素の間を、仕切る/仕切らないの組み合わせになっていると考えます。

○|○ ○   12
○|○|○   111
○ ○|○   21
○ ○ ○   3

ここで、仕切りの部分のみに着目すると 10,11,01,00 となっておりこれはグレーコードの遷移です。ですから5の分割について同様に考えると

1000  14
1001  131
1011  1211
1010  122
1110  1112
1111  11111

という遷移ではないでしょうか。

unyaさんの答え

問題Aは多分,110
問題Bはおそらく,1211
なんとなく

西尾さんの答え

feedback | top

2005年11月10日

淡々と仕事 この記事(2005年11月10日09:54)を含む「はてなブックマーク」    

最近は秋晴れでとても気持ちが良い。 今日はJavaでプログラムを少し書いた。 Perlもいいし、C#もいいけれど、Javaもなかなかいいよね。 そういえば、Java SE 6ではfriendが入るんでしたっけ。 friendよりもuintを入れてほしいなあ。

feedback | top

2005年11月9日

数当てクイズ (問題編) この記事(2005年11月9日22:55)を含む「はてなブックマーク」    

問題A

0, 1, 10, 2, 100, 11, 1000, 3, 20, 101, 10000, 12, 100000, 1001, 次の数は?

問題B

1, 11, 2, 12, 111, 21, 3, 13, 121, 1111, 112, 22, 211, 31, 4, 14, 131, 次の数は?

解答は、以下のフィードバック欄からどうぞ。 解答は、日記などで公開させていただくかもしれませんので、そのおつもりで。Enjoy!

feedback | top

2005年11月8日

仕事 この記事(2005年11月8日20:38)を含む「はてなブックマーク」    

ずっと仕事。

feedback | top

2005年11月7日

Tropy設計判断 この記事(2005年11月7日09:27)を含む「はてなブックマーク」    

Tropy設計判断を忘れないうちにメモ。

feedback | top

2005年11月6日

駆け抜けたTropy この記事(2005年11月6日22:26)を含む「はてなブックマーク」    

この数日、頭の中はTropyでいっぱいでした。

「名前のない実験ページ」として開発をはじめたTropyを、 日記やtextfile.orgで紹介してから、 あちこちからリンクしていただき、アクセスが急上昇しました。 普段でも個人サイトとしてはアクセス数はそれほど少なくないのですが、 その数が文字通り倍増しました(特に11月4日は数倍増し)。 Tropyの性格上それは当然のことですよね。

動作チェックのため、Tropyで書き込みをすると結城あてにメールが来る設定にしていました。 わたしはいままで自分のメールボックスにあんなにメールが高速に溜まるのを見たことがありません (^_^;

急激なアクセス上昇に対処するため、CGIの改良を常時続けました。 HTMLのキャッシュ化をしたり、 Randomの連打を防ぐためアンカー表示を遅らせたり、 Random先のページをHTMLに埋め込むということもやりました (詳しくは公開している Tropyのスクリプトを参照。整理されていないのはご容赦)。

パフォーマンスの改良とともに、Tropyへの書き込みやWebでの反応を参考に、 「Tropyらしさを失わないようにしながら、どの機能が削れるだろう?」 ということを考えていました。 その心的密度の高さは、YukiWiki・声のかけら。・はてダラなどを作っていたときの感触と似ていました。 言うなれば「駆け抜けてみるか今夜!」が数日続いた感じですね(微妙に意味不明)。

ページが生まれては書き換わり、削除されていくTropyを見ていると、 スピードをむちゃくちゃ上げたインターネット、 という感じがします。 本当にエキサイティングでした。 貴重な体験です。

さて。

昨晩も、 わけもわからずドキドキしながらTropyのことを考えていました。 夜中のリビングをうろうろ歩きながら、 「現在のCGI負荷がこれ以上続くとまずいから、何とか分散させる方法はないか」 と考えていたのです。 そろそろ本来の生活ペースに戻さなければならないので、 どういう改良をしたら安定するか、に心を砕いていました。 明日の日曜は礼拝なのに、 その間もTropyの改良を考えるはめになりそうです。 それは正しいことではない。

そのとき、ふと「自分ひとりで抱えるのは良くない」という思いが心に浮かびました。 Tropyという興味深い「何か」を自分だけで抱え、ちまちました改良を考えるのは良くない。 動いているTropyをいったん停止しよう。 そして現在の時間を、スクリプトを公開できる形にまとめるために使おう。 スクリプトを公開すれば、クローンだって作りやすいし、 スクリプト中に込められた結城の工夫(や失敗)がはっきり他の人に伝わる。 そうだ、それが有効な時間の使い方だ。

こんな風に気持ちが切り替わりました。 そう決めてから約1時間半で、スクリプトを公開できる形にし、 Tropyはお休みですというページを作りました。 この作業のおかげで、 今日は心安らかな日曜日を送ることができました。 感謝です。

ともあれ、この数日間、ネットのみなさんの反応は、 大いに結城の気持ちを支え、後押ししてくれました。 メールでも、多くの方から情報や意見、それに「おもしろい!」という感想をいただきました。 心から感謝します。 以下に、結城が読んだもののほんの一部ですけれど、 感謝しつつリンクします。

上のリストの最後のリンクは田崎先生のページです。 田崎先生の 「どうか、ご無理をなさらないように、結城さん」 という優しいお言葉は、とてもうれしかったです。

Tropyの再開は未定。 生活ペースを取り戻してから、また考えます。

Tropyを楽しんでくださった・くださっているみなさんに感謝します。

feedback | top

Tropyお休み中です この記事(2005年11月6日00:32)を含む「はてなブックマーク」    

Tropyの負荷があまりにも高いので、しばらくTropyをお休みします。 楽しみにしてくださった方、申し訳ありません。 Tropyのスクリプトを公開しますので、ご利用ください。

feedback | top

2005年11月5日

随時更新、いろんなTropyたち この記事(2005年11月5日20:30)を含む「はてなブックマーク」    

Tropyクローン(Tropyエンジン)たちです。 他にもありましたらここに追記していきますので、 フィードバックからお知らせください。

feedback | top

Web 0.5としてのTropy (追記あり) この記事(2005年11月5日06:31)を含む「はてなブックマーク」    

先日公開した、 Tropy(とろぴぃ)というページは、 一日にしてとんでもない量のアクセス数をたたき出してしまいました(大汗)。 ユーザによって作られたページ数もすごいことに。 これはとてもまずいので、いくつかの負荷対策を行いました。

それはさておき、 昨日の解説と重複する部分もありますが、 Tropyを公開して思ったことを少し書きましょう。

感覚的にいえば、TropyはWeb 2.0ならぬ「Web 0.5」ですね(Web 2.0-1と呼んでもよい)。 ええと、Web 0.5というのは「Webの常識的な便利機能をできるだけ入れないようにしている」というほどの意味です。 たとえば、検索, What's newやRSS, URLの自動リンクやWikiNameなどですね。 それから、むやみに制限を入れています。 行数の制限、1ページの分量制限、そして、1ページに表示される書き込み数は1つだけ。

Web 0.5というとWeb 2.0に対抗しているようですが、もちろんそんなことはありません。 実際Tropyは、Web 2.0のパターンのいくつかは踏襲しているように思います。 たとえば、以下はTropyに当てはまりますね (パターン名の翻訳は、 minfish.jpさんから)。

Tropyのユーザは「全貌をつかめない」ことに軽い不安のようなものを感じます。 自分が作ったページを見失ってとまどったり、 特定の語を含んだページを探せないことにいらだったりします。 普通なら「ユーザはこういうことをしたくなるから、それを機能として追加しよう」と思いがちですが、 Tropyはその逆を行ってみました。 つまり「ユーザがそういうことをしたくなっても、機能として追加しない」という方針です。

現在のTropyのユーザに提供されている機能は、Edit, Create, Randomだけです。 現在のページを編集する、新しいページを作成する、そしてランダムジャンプ。 EditとCreateを1つのコマンドにまとめられないことはないと思いますが、 そこまではシンプルにしませんでした(なんとなく)。 他のページに行く手段は、ランダムジャンプだけ。 Randomをなくすこともできるのですが(たとえばタイマで自動ジャンプさせる)、 それはしませんでした。

そのほか、検討したけれど入れなかった(少なくともいまは入れていない)機能の1つは 「完全ランダムエントリ」です。 これは、URL指定もできない、ランダムでしか見つからない、絶対捕まえられないページです。 それから「URLシャフリング」も入れませんでした。 これはURLを定期的にシャフリングしてブックマークを無意味にする機能です。

Tropyのユーザは「何がTropy的であるか」についてのイメージをすでに持っているようで、 あちこちに「こういうのはTropy的だ」とか「いや、こういう行動はTropy的ではない」などと書かれていました。 何がTropy的なのか、というのは考えると面白いですね。

TropyはPerlで書かれています。 いまは公開する予定はありませんけれど、 Webアプリを作れる人なら簡単に作れますよね。 他のサイトにも作ってください。そして負荷分散を(苦笑)。 APIを考えれば「分散Tropy」もできるかもしれませんね。

追記(2005-11-05 16:45)

PythonによるTropyクローン!

feedback | top

2005年11月3日

Tropy(とろぴぃ)というCGIを作りました(追記あり) この記事(2005年11月3日18:33)を含む「はてなブックマーク」    

Tropy(とろぴぃ)というCGIを作りました。どうぞ遊んでみてください。

Tropyの特徴を挙げてみましょう。 まずは基本。

でも、Wikiとはまったく異なります。 というか、通常のWebページとはまったく異なる方向性を持ちます。 特徴を列挙しますね。

さらに。

ランダムジャンプしかないので、 あるページを見つけ出すのは偶然に頼るしかないということになります。 大げさに言えば、一期一会のページ巡回。 自分が書いたページといえども、 URLを記録してなければ、そのページに再度めぐり合うには偶然だけが頼り。

そして最後に、極めつけ。

つまりTropyの各ページは対称であって、どこにも中心はないのです。 FrontPageやIndexやTable of Contentsはない。

Tropyでは、 書かれたページの全貌や関係を、できるだけ把握させないように工夫されています。 できるだけランダムに、できるだけバラバラに。

このような、Webの慣習に逆行しているようなページに、 いったいどんな意味があるのでしょうか。

結城自身にも、まだよくわかっていません。

でも、あなたには、わかるかも。

ちなみに、 Tropy(とろぴぃ)という名前について。

このCGIは、ここ数日「実験ページ」という形で公開していました。 まだ名前がない状態でバグ取りをしたり、ユーザさんの意見をもらったりしていました。 そんな中、どなたかが「名前募集中」のページに、

randomをクリックしていたら、 なぜかエントロピーという言葉を思い出したので、「とろぴ」。

と書き込みをしてくださいました。 Tropy(とろぴぃ)という名前はここからいただきました。 エントロピーを思い出してくださったこの方に感謝します。 実験ページで応援してくださったみなさんにも感謝します。

追記(2005-11-04)

一日足らずのうちに、アクセス数が大変なことに (^_^; 。 とりあえず、HTMLファイル化の対策をした。 自分がwatchしているページがある人は、以下のような変更をお願いします。

http://www.hyuki.com/tropy/?12345678
↓
http://www.hyuki.com/tropy/12345678.html

Tropyがこれほど受けるとは驚きです。 感覚的にいえば、Tropyは「Web 0.5」ですね(Web 2.0-1と呼んでもよい)。

feedback | top

2005年11月2日

なか見!検索 この記事(2005年11月2日06:23)を含む「はてなブックマーク」    

アマゾンで、書籍の中まで検索できる「なか見!検索」がはじまりました。 たとえば、 「結城浩」を含んでいる本などを検索することができます。 結城自身の本が見つかるのは(著者名なので)もちろんですけれど、 『WEB+DB PRESS』の参考文献のところや、 『XPエクストリーム・プログラミング適用編』の謝辞のところに私の名前が出てくることがわかります。

サインインしなくても、目次・はじめの数ページ・索引などを読むことができますし、 サインインすれば、検索で見つかった前後のページを読むことができます。

これは画期的なできごとだと思います。 本を買うかどうかの判断をするとき、 「中身をぱらぱら見る」ことができるようになったわけですから。 いくら良さそうな本でも、 本文をぱらぱら見て「自分がほしい本とは違うなあ」と思うことがあります。 また逆に「あ、こういう感じなら良いかも」と思う場合もあります。 これまでは、 書店に行かなければ「中身をぱらぱら見る」ことはできませんでしたが、 「なか見!検索」で出来るようになった、と。 自分と相性が良いことを確かめて買うのは大事ですよね。

結城の本はすべて「なか見!検索」対応になっていますので、 ぜひ、中身をぱらぱら見て、 相性が良いかどうかを確かめてご購入ください。 よろしくお願いいたします。

…と書いてから、 まだ対応していない本が何冊かあるのに気づきました (たとえば『改訂第2版Java言語プログラミングレッスン』はまだですね)。 申し訳ありません。 できるだけ早く対応できるように出版社さんにお願いしておきます。

feedback | top

ぜひ、感想をお送りください

あなたのご意見・感想をお送りください。 あなたの一言が大きなはげみとなりますので、どんなことでもどうぞ。

お名前:
メール:
学年・職業など: 年齢: 男性女性
(上の情報は、いずれも未記入でかまいません)

お手数ですが、以下の問いに答えてから送信してください(迷惑書き込み防止のため)。
今年は西暦何年ですか?

何かの理由でうまく送れない場合にはメールhyuki dot mail at hyuki dot comあてにお願いします。

過去日記の一覧

豊かな人生のための四つの法則