ひまつぶし雑記帖

おひとり様ActivityPubサーバーにタイムライン追加

2023/8/30 [14:11:40] (水) 天気

発信専門でいいかと思ってた「おひとり様APサーバー」をしばらく使ってて、やっぱりタイムラインが欲しくなった。フォローしたひとの投稿を表示する、Mastodonでいうところのホームタイムライン。
結局、投稿を閲覧するのにあっちのMastodonこっちのfirefishと行ったり来たりするのが面倒くさくなった、ということもあって、ここだけで完結できればそれに越したことはない。

とはいえ、要求される機能を満たすのはなかなかしんどいので、ここも必要最小限で追加してみた。
たぶん、すぐ忘れるのでメモ。5分以上前の自分なんてあかの他人だしなあ。

表示させるのは「to」に「Public」の指定のあるもの=全公開OKなものだけ(公開範囲がいろいろあって、全部を振り分けするのは面倒くさいし事故の元)
そして保持するのは1日だけ、最大個数20個まで(設定ファイルで制御)
データベースは使わない。ログファイルを振り分けて保存して、規定の期間個数に達したら古いものから削除する。

自分以外のひとのデータを持つのはいろいろ考えなきゃいけなくて、削除してしまうのは、そのリスク回避もある。データベースでも同じことだけど、ただのファイルだと、何かあったらFTPでログインしてその場で削除すればいいしね。慌ててデータベースにdeleteを投げるのは事故の元。

フォロー数が増えたら、この程度のデータ保持数だと見られない投稿の方が全然多くなる。
でもSNSなんて「袖すり合うも他生の縁」その時その場での関わりでいいと思ってるんで問題はない。むしろ本来こういうカタチが正しいと思ってる。

Mentionだけは別扱い。「連絡先はこちら」というのでこれまでtwitterのアカウントを使ってたんだけど、twitterがなくなったのでどうしたもんかと思ってたところ。今後は「連絡先はこちら」におひとり様APサーバーを使う。

「@t2aki@tokoroten.doncha.net」

↑これを検索してもらえれば、おひとり様APサーバーのアカウントが表示されて、そこにメッセージを飛ばしてもらえればわたしに届く。
もちろん、MastodonやMisskeyなんかにログインしている・アカウントが必要となる。twitterやfacebookと違ってハードルは高い。これについてはそのうちMastodonなんかが当たり前になればハードルは下がるし、そもそも、公開する連絡先なんて多少ハードルがあるぐらいでちょうどいい。

MentionはNoteの中のtag配列に「type:Mention」のブロックがあったらそこに宛先も記載されている。それで判定できる。
Mentionは、ログインしてないと見られない=見られるのはおひとり様サーバーのわたしだけ。

自分の投稿に対するLikeや、自分の投稿をブーストされたら、それらもリクエストが飛んでくる。
ご褒美とか承認欲求という言葉になるんだろうけど、ここは割りとどうでもいいので、それらのリクエストは受けた時点で破棄。
だいたい、こんなのはサイトのアクセスログを見ればわかることで、そっちの数字の方が確実だ。
本や雑誌でいうと、評価よりも実売部数、というのを肌身に染みて思い知らされてきたしね。

どうでもいいごたくを並べたけど。
こういったフロント側、閲覧側はかなりうっとーしーことがいろいろ。
タイムラインというからにはリアルタイムで表示を更新するのが当たり前。だけど、同期にしろ非同期にしろJavascriptなんかを使って閲覧してる裏でデータを確認取得しなきゃいけない。
飛んでくるリクエストを捌く、入口で門番をしてるスクリプトがあるのでデータが来たことはそれこそリアルタイムで検知している。
でもJavascriptは触りたくない。メンテが大変なのだ。どこが原因なのか特定するのにこっちまで見なきゃいけないのは労力に見合わない。
てことで、リアルタイム更新は却下。手動F5にした。

そんなオレオレAPサーバーは
「ため池」https://tokoroten.doncha.net/tameike.pl
絶賛壁打ち中です。
image

Noteの公開範囲についてはfedibird管理人ののえるさんの投稿
https://fedibird.com/@noellabo/110573926847901369
「ToにPublicが指定されていれば『公開』」
を参考にさせていただきました。ありがとうございます。

»電子書籍制作代行についてはこちら

HTTP Signatureをlolipopレンタルサーバーで作成

2023/8/22 [09:42:59] (火) 天気

ActivityPubでPOSTするには電子署名が必要。
というエントリを書いたけど、WEBでサーバー同士でやりとりしたり、WEBサービスのAPIを利用したり、電子署名が必要なのはActivityPubに限らず。

ちらほら書いてきたように、lolipopレンタルサーバーにはperlで電子署名をする時によく使われるモジュール「Crypt::OpenSSL::RSA」がインストールされていない。
ということは。lolipopではHTTP Signatureを作ることができない「Cryptが使えないんじゃ話にならない」ということになる。

しょうがないんで、ローカルにcpanから「Crypt::OpenSSL::RSA」をインストールして、ActivityPubにPOSTする時はローカルのスクリプトを使う、という急場しのぎ。
これはこれで、投稿するのにひと手間あった方が事故も起こさなくていいかな、と思ってやってたんだけど、やっぱりサーバー上だけでやれるならラクちんなことは確か。

なもんで、グーグル先生にお願いしてみたら
「Crypt-Perl-0.38」https://metacpan.org/pod/Crypt::Perl
↑pure perlのCryptモジュールがあった。

インストール時にコンパイルが必要なモジュールはOSやファイル構成、環境に依存するけど、PurePerlというのはperlだけで作られているので、perlさえあればサーバーにそのままアップロードして使える。

さっそくダウンロードして展開。テストスクリプトで試したところ、依存関係で必要なモジュールがあったのでそいつらもダウンロードして展開。

Class-Accessor-0.51
Bytes-Random-Secure-Tiny-1.011
Convert-ASN1-0.34
Crypt-Format-0.12
(あと、たぶん以前amazonのAPIがらみでインストール済みのpure perlのDigest::SHAも必要)
当然ながら(?)これらのモジュールもpure perlなので、コンパイル不要、展開するだけで使える。

サーバーの適当なところ、例えば「lib」というディレクトリを作って展開したファイル群をアップロードするだけ。
lib/Bytes/
lib/Class/
lib/Convert/
lib/Crypt/ 
スクリプトで use lib 'lib' などとやればlolipopレンタルサーバーでもCrypt RSAが使えるようになる。

いや。ぶっちゃけ。これらモジュールの作者のみなさんには大感謝。大袈裟じゃなく狂喜乱舞小躍りだった。ほんとうにありがとうございます。
マジperl使いすげー。perl話者が減ってるだろう昨今、凄腕のperl使いはワシントン条約で保護すべき存在。

使い方は「 RSAモジュールで公開鍵と秘密鍵 」とほぼ同じ。

秘密鍵を使う
my $privatekey = Crypt::Perl::RSA::Parse::private($private-pem);
公開鍵を使う
my $publickey  = Crypt::Perl::RSA::Parse::public($public-pem);

Signatureを作る。

my $sign = $privatekey->sign_RS256($sign-str);
encode_base64($sign, "");


Signatureを検証する。

my $decoded = decode_base64($sign);
$publickey->verify_RS256($sign-str, $decoded);



あとは。
こうすると、思いつきから投稿放流までが直結するので、事故を起こさない自制心が必要となるです、はい。
image

»電子書籍制作代行についてはこちら

ActivityPubサーバの終わらせ方

2023/8/15 [10:29:00] (火) 天気

おひとり様ActivityPubサーバーというか、最低限のオレオレAPサーバーを立ち上げた、のはいいけど、これの終わらせ方も調べないとダメ。
どんなアプリも起動方法と終了方法はマニュアルに必須の情報。

もうこのサーバーは終了しましたというお知らせを出せばいい、とのこと。

サーバー(サイト)へのアクセスに対して
「410 gone」(もう存在しません)を返す。

.htaccess

RewriteEngine On
RewriteRule .* - [G]


これで、サーバー(サイト)は終了しました、というお知らせになる。

いつまでこのお知らせを出せばいいのか。

特に決まりごとはない。
原則、サイトがある限りこの状態にすればいいということだけど。
このサイトはもう存在しませんよ、というのが周知されればOK…いや、周知されたかどうか知る方法はない。なので、根拠なく数ヶ月ぐらいでいいんじゃないか、とも言われている。

DNSの反映にしてもすべて行き渡るのにどのぐらいかかるのか知るよしもなしで、ネットがからむといきなり運任せというか神さまだけが知っている、という状態なのがメタな話で閑話休題(それはさておき)

サーバーのドメインを維持し続けるならともかく、サーバーもドメインも削除することもあるだろうし、その場合はその削除までのお知らせ掲載期間として数ヶ月もあればいいということかな。

サーバー(サイト)終了のお知らせが必要な理由は。

おひとり様APサーバーといっても、Fediverseに繋がることになる。
一度なんらかのアクションを起こすと、おひとり様APサーバーが、他のサーバーからリクエスト先として認識される。そうすると投稿やフォローはもちろん、各種Activityのために他のサーバーはリクエストを飛ばしてくる。

ところが、サーバー(サイト)をお知らせなしに終わらせると。
他のサーバーは存在しないサーバーがメンテで落ちてるのか本当になくなってるのかわからない。しょうがないんで、リクエストを再送しようとする。これが負荷になる。ネット全体に悪影響となる大きな負荷ではないんだろうけど、それでもチリツモ。
なので、ちゃんと終了のお知らせ掲載は必要。

どれだけの数のサーバーに繋がるのかは、それこそ神のみぞ知る領域。気軽手軽におひとり様APサーバーだっ!とか言ってもひとはひとりで生きるわけじゃない、とも。ActivityPubで繋がることの魅力でもあるし、そこに生じる責任とか、やらなければならないことの自覚も促されるところ、だ。
わたしみたいにミーハーな勢いだけでおひとり様オレオレAPサーバーとか言ってはしゃぐだけじゃダメです(自戒)
始めたものを終わらせる準備はしておく。

お盆だしね。
image

参考にさせていただいたサイト。
いつかサーバーを閉じるとき 〜お金をかけずに 410 を返す方法〜
あまり手間も費用もかけずに410 Goneを返してみる
RewriteRule Flags
サイトを完全に削除する方法

»電子書籍制作代行についてはこちら

夏風邪

2023/8/12 [21:10:31] (土) 天気

相変わらず、というかコロナの感染状況が酷いことになっている今日このごろ。体調不良で転がっていた。

8/3ぐらいから喉のイガイガと咳が始まり、8/8夜ぐらいから熱が出始めて、咳き込むと喉に焼けるような痛み。
去年コロナに罹患した時と症状はそっくり。その時と比べると。
喉の痛みは焼けるような感じだけで外傷で掻きむしられるような感じはなくなって、熱は38度弱から37.5前後と、レベルは下がった体感。
そもそも7/27にワクチン接種したばかり。まさかなあ、と思いながらも熱が37.5ぐらいまで上がると、身体がかなり「しんどい」

8/10にかかりつけ医に電話して診察してもらった。
体調不良を訴える患者さんは11:00から受付で15分刻み。対コロナ完全防備の看護師さんに酸素濃度や血圧など測られつつ問診票に記入後診察となる。
コロナとインフルの検査は陰性。葛根湯、痰を抑える薬、炎症を抑える薬、頓服のカロナールを処方されて終了。待合室を見ると患者さんがひっきりなしだった。
薬局の外から電話を入れて薬を出してもらって帰宅後薬の服用を始めた。けど、熱が下がらずしんどい。カロナールは38度ぐらいになったら使ってね、と薬剤師さんだったけど、痛いのとかつらいのには人一倍弱いので、とりあずカロナールを1錠だけ。
さすがに熱が少し下がってラクになった。

だけど8/11は相変わらず。熱が出てしんどいし、咳き込むと喉の痛みも酷い状態が続く。
抗原検査の精度は落ちるという話もあり。先生も気になるようだったらPCR検査しますけど、時間もかかるし、症状が出てから時間も経ってるので仮にコロナだとしても収束する時期、ということで昨日はスルー。
とはいえ、休むと連絡したらくそシフト仕事のリーダーから再検査するようにとSMSが飛んできてるし、しんどいのは続いてるので再検査をすることにした。自分の感覚でもコロナ濃厚だったし。

前回コロナの検査をしてもらった近くの発熱外来もある医者で8/12 12:30からの枠が空いてたので予約。ここはかかりつけと違って新しくできたところでしっかりネット対応。アプリまである。

ところが行ってみると廊下のパイプ椅子までいっぱいに埋まっている混み具合。実際に検査室に入ったのは13:15ぐらいだった。
検査となって抗原検査にします?PCR検査にします?と。あれ?時間がかかるんじゃなかったけ、と思ったけど15分ほどで結果は出るらしいんで、PCR検査をお願いした。さすがは発熱外来というところかな。
結果。こちらも陰性。

抗原検査でも別の日のPCR検査でも陰性となれば、さすがにコロナを疑うわけにもいかない。今日は熱も平熱まで下がっていて、身体がずいぶんラクになったということもあって、夏風邪ということで落ち着いた。
エアコンで肌寒く感じたり、焼き殺されるような陽射しにくらくらしたり、寒暖差のストレスに身体が負けたな。老人にはついていけない。

にしても、コロナが酷いな。
病院ふたつに行って、目撃したことに改めてビックリさせられた。どちらも患者さんが行列待機状態じゃないか。

image

»電子書籍制作代行についてはこちら

映画『海街diary』

2023/8/11 [20:50:35] (金) 天気

アマプラでなんとなく観始めた『海街diary』がびっくり。目が離せず、じんわり染み込んできて涙腺がいたるところで決壊してしまった。

派手な事件、出来事は何もないのに画面に釘付け。丁寧な人と人の距離感がめちゃくちゃ優しくてじわじわ涙腺に迫ってくる。役者も全員キャラ立ち。綾瀬はるか、長澤まさみ、夏帆、広瀬すずの目の高さが揃ってる。どの目線も、とにかく優しい、のひと言。

画面の絵面も優しさに溢れている。
伏線も細かい。

事件らしい事件も起こらない、家族の日常。少しずつ重なるキャラたちの背景。それだけ。家族は物語になるんだなあ。ていうかどんな出来事も事件てことか。

半村良の葛飾物語も同じく。法要の度に集まる親族のエピソード。これも事件らしい事件も起こらない。親族、各家族の近況報告。
これもしみじみ泣ける。

もちろん。家族だけど、血の繋がりは関係ない。海街diaryは異母妹を引き取って家族になる話だ。

共同体というのともビミョーに言葉のニュアンスが違うと思っていて。だからといって父母がいて血の繋がりのあることが前提とも違う。

一緒に過ごした時間だけじゃなくて、一緒に過ごさなかった時間も共有できるひとたち。
家族、疑似家族ものには、わたしの涙腺は抵抗力がないんだ。

 

»電子書籍制作代行についてはこちら

ツイッター後のSNS事情

2023/8/8 [19:40:52] (火) 天気

ツイッターが亡くなったんで、あちこち模索しつつ、今までのほかのSNSも整理整頓。
いや、お前のSNS事情など知ったこっちゃない、というのはもっともだけど、ここはわたしのあんなことやこんなことの垂れ流しの場所なので、知ったこっちゃないのは承知のネタ。今回はほんとただの備忘録。

まず最初に、Facebookとinstgramはアプリ削除。
もともと、ザッカーバーグというやつのソフビ人形みたいな顔が気に入らないのはともかく、メタのやってるSNSは、フィードの表示基準がまったく理解できなくて論外。なんで今、その投稿が最初に表示されてる?とか、マッチングで表示するとかいってる広告もハゲだの大人の出会いだの、いくらなんでもクソすぎて見るに堪えない。
ハゲは病気じゃないし恥じることでもない(ちょっとかっこ悪いだけだろ)大人の出会いってシモの世話も視野に入ってくる還暦はそっちのシモの話じゃない。
まあ、ありていにいってfacebookもinstagramもクソ。

facebookはリアル知人たちがいる、instagramは亡くなったみけさんの写真だらけ、ということでアカウント削除まではできないんで、アプリ削除で勘弁してやる。

さて、Xこと元ツイッターだ。
(旧)ツイッターのAPIを使って公開しているWEBサービスについては、サービス終了や一部機能の停止をアナウンスしたのでこっち側の手当はした、つもり(ずいぶんいろいろなところでツイッターのAPIを利用してたなあ…)
なので、ツイッターを使い続けるメリットはもはやどこにもない。
…メリットはないんだけど、わたしが見たいアカウント、ツイッターでしか見ることができないアカウントがいる。具体的には、猫アカウントのひとたちなんだけど、わたしが見てるひとたちは、本当に猫が好きだし、猫との距離感もいい感じだし、いちいちコメントも頷けることばかり。
なので、Xについては、アプリ削除すると困る。
非公開リストを作って、猫アカウントのひとたちを登録。Xにログインしたらそのリストを見る、だけにする。
ちなみにリストの名前は「twitter」にした。
(こっちは、かなりイケてる猫アカウントばかりを厳選してるので、興味のあるひとがいたら連絡ください。こっそり共有します)

そして「ツイッター後」の今日時点でいうと。
Mastodonに軸を移した。
この雑記帖でもここんとこのネタはActivityPubばかりなのはそのへんのことがあったから。
ザッカーバーグやマスクのところに依存することがない、誰かやどこかに依存することのないFediverse、連合空間に魅力があったから。

今のところ、以下の4つのサーバーにアカウントがある。
https://bookwor.ms
https://fedibird.com
https://himagine.club
https://mstdn.jp
2017年、6年ぐらい前に登録してる「本の虫」https://bookwor.ms 以外はつい最近。ActivityPubのテストも兼ねて登録したところ。どのサーバーもオススメできると思う。

この中で一番(旧)ツイッターっぽいところは「fedibird」かな。
「himagine」はちょっとオタク臭が強いので、わたしは平気だけど、抵抗のあるひともいるかもしれない。
「mstdn」は登録者数も多くてそのボリュームがいいところだろうと思いつつ、おひとり様APサーバーのテストでしか使ってないので、ここの傾向と対策は不明、だ。

で、Mastodonというかそっち系は、Facebookやtwitterとは違って、複数のサーバーの集まった連合集団。
1つのアプリで見るものを共有できる、というものではないのがボトルネックになる。
PCのブラウザで見ればいいんだろうけど、SNSの利用状況は、スマホファースト。となったときに、スマホでブラウザで、というのは老眼老人には厳しいんで、アプリを探すんだけど決定打がない。オススメされたアプリで見たんだけど、たぶんサーバーごとに実装が違うところがあって、同じ操作で同じ表示になっていないっぽい。

ひらたく例を探すと。
医者の待合室。おばあさん、おじいさんたちが、テレビのニュースやワイドショーにいちいち頷き、ツッコミを入れながら知り合いのおじいさん、おばあさんとあれはねえとか共有する世界があって、(旧)ツイッターはそこにちゃんとあったんだけど、今のツイッターもマストドンも、あっちこっちのテレビの言うことが違うんで、そんなん聞いてへんで、という齟齬がでてくる、ということになってる。てな感じかな。

そのあたりの状況をちょっと把握する必要があるかもだけど、Mastodon系はツイッター後のSNSとしては面白いんじゃないかと思ってる。

で、んなことを踏まえつつ。
そのマストドンと繋がるおひとり様サーバーというかオレオレサーバーも最低限のActivityPubを実装できたんで、SNSはマストドンだけでいいんじゃないかという今日このごろです。はい。

»電子書籍制作代行についてはこちら

profile

profile

 
doncha.net
contact:
»運営者
@t2aki@tokoroten.doncha.net

ため池

[2024/10/09 23:24]
ActivityPub Implementations
https://syobon.notion.site/a5e9e010575f499fb9f1520436ac2d75
ActivityPubサーバーもいろいろあるんだ。てか、こんなにいろいろあるのはいいなあ。

以前も投稿したEpicyonのスクショはなかなか衝撃的なので再掲。
No timeline algorithms.
No javascript.
No database. Data stored as o ...

[2024/10/09 17:58]
「ちっこい」「オモチャみたいな」
ノパソがほんと欲しいんだけど、需要がないのかなあ。大艦巨砲主義的なゲーミングPCは、わたしは必要ない。

[2024/10/09 17:51]
縦軸:弱い↓↑強い
横軸:馬鹿←→賢い

…ううう、どうやら左下っぽいなあ。せめて左上になりたい人生だった。

@t2aki@tokoroten.doncha.net

検索
<<2023/08>>
  12345
6789101112
13141516171819
20212223242526
2728293031

リンク

WINDOWS版サウンドノベル
おかえりください PC WINDOWS版サウンドノベル
『おかえりください』体験版

[1 Page]

TOTAL:2991

2024 (14)
1 (2)
2 (2)
3 (1)
5 (1)
7 (2)
8 (2)
9 (3)
10 (1)
2023 (53)
1 (1)
2 (5)
3 (1)
4 (1)
5 (3)
6 (9)
7 (9)
8 (6)
9 (5)
10 (3)
11 (2)
12 (8)
2022 (16)
1 (1)
3 (2)
6 (2)
7 (1)
8 (4)
9 (2)
10 (1)
11 (2)
12 (1)
2021 (12)
1 (3)
2 (1)
6 (1)
8 (2)
9 (1)
10 (1)
11 (2)
12 (1)
2020 (18)
1 (2)
2 (6)
4 (1)
6 (1)
7 (2)
8 (2)
12 (4)
2019 (17)
1 (3)
2 (4)
3 (2)
4 (2)
5 (1)
6 (1)
8 (1)
10 (1)
12 (2)
2018 (21)
1 (3)
2 (2)
3 (2)
4 (1)
5 (1)
6 (6)
8 (1)
9 (1)
10 (2)
12 (2)
2017 (32)
1 (2)
2 (1)
4 (2)
5 (1)
6 (6)
7 (3)
8 (5)
9 (3)
10 (2)
11 (2)
12 (5)
2016 (41)
1 (5)
2 (5)
3 (2)
4 (3)
5 (4)
6 (6)
7 (2)
8 (2)
9 (3)
10 (1)
11 (4)
12 (4)
2015 (99)
1 (11)
2 (12)
3 (9)
4 (6)
5 (8)
6 (8)
7 (3)
8 (5)
9 (16)
10 (6)
11 (1)
12 (14)
2014 (112)
1 (16)
2 (5)
3 (6)
4 (12)
5 (16)
6 (19)
7 (9)
8 (6)
9 (4)
10 (8)
11 (6)
12 (5)
2013 (145)
1 (24)
2 (15)
3 (18)
4 (23)
5 (14)
6 (11)
7 (7)
8 (11)
9 (5)
10 (4)
11 (6)
12 (7)
2012 (103)
1 (1)
2 (1)
3 (4)
4 (3)
5 (7)
6 (26)
7 (17)
8 (5)
9 (8)
10 (10)
11 (11)
12 (10)
2011 (54)
1 (4)
3 (7)
4 (4)
5 (14)
6 (6)
7 (3)
8 (3)
9 (1)
10 (4)
11 (2)
12 (6)
2010 (70)
1 (12)
2 (7)
3 (6)
4 (6)
5 (3)
6 (10)
7 (6)
8 (4)
9 (3)
10 (4)
11 (3)
12 (6)
2009 (144)
1 (15)
2 (12)
3 (12)
4 (6)
5 (15)
6 (6)
7 (10)
8 (9)
9 (17)
10 (12)
11 (14)
12 (16)
2008 (148)
1 (10)
2 (6)
3 (10)
4 (11)
5 (13)
6 (10)
7 (13)
8 (19)
9 (18)
10 (12)
11 (13)
12 (13)
2007 (106)
1 (7)
2 (5)
3 (3)
4 (7)
5 (5)
6 (9)
7 (8)
8 (13)
9 (18)
10 (11)
11 (8)
12 (12)
2006 (158)
1 (28)
2 (28)
3 (25)
4 (7)
5 (9)
6 (7)
7 (12)
8 (13)
9 (10)
10 (7)
11 (6)
12 (6)
2005 (350)
1 (31)
2 (26)
3 (26)
4 (27)
5 (29)
6 (30)
7 (32)
8 (30)
9 (30)
10 (32)
11 (29)
12 (28)
2004 (292)
1 (24)
2 (24)
3 (29)
4 (27)
5 (28)
6 (25)
7 (26)
8 (24)
9 (12)
10 (19)
11 (26)
12 (28)
2003 (318)
1 (22)
2 (25)
3 (21)
4 (28)
5 (28)
6 (28)
7 (28)
8 (29)
9 (26)
10 (29)
11 (28)
12 (26)
2002 (317)
1 (29)
2 (26)
3 (26)
4 (25)
5 (28)
6 (30)
7 (27)
8 (21)
9 (25)
10 (27)
11 (28)
12 (25)
2001 (277)
1 (17)
2 (21)
3 (23)
4 (20)
5 (31)
6 (18)
7 (26)
8 (25)
9 (29)
10 (19)
11 (24)
12 (24)
2000 (53)
6 (9)
7 (4)
8 (2)
9 (3)
10 (1)
11 (15)
12 (19)
1999 (3)
7 (1)
10 (2)
1998 (18)
9 (9)
10 (7)
11 (2)