swk's log 最新ページ / カテゴリ最新ページ / 前ページ 1 2 3 4 5 6 7 8 9 次ページ / page 2 (9)

tech - from swk's log

2007-02-06 Tue

* アイコンを「パンダ」にするウイルスが蔓延 [tech]

パンダ…,はっ,これか? (←違う

2007-02-02 Fri

* そろそろまたJavascriptオフの時代が来た [tech]

ちょっと前に大学時代の同級生からメールが来て,ここを見たらしく,「鏡 がJavaScript使っててビックリ」とか言われた.まあ 1 年前の自分ですら びっくりかもしれない.

とか書いてて,そのメールで「年賀状出すから住所教えろ」みたいなこと言 われてたのを今思い出した.うわー放置してた,ごめん.でもまあ年賀状も らってもたぶん返事出さないので,50円浮いてツイテル! ってことにしとい て下さい.


個人情報保護法とやらのせいで,同窓会の名簿が発行されなくなったり,職 員録が発行されなくなったり (あと,学校とかで連絡網とかも廃れつつある のだとか) でなかなか不便なのだけど,でもまあこれを機に年賀状っていう 文化が死に絶えてくれるならそれはそれで不便さというコストを払う価値は あるかなとかひどいことをわりと本気で思っていたりするのは秘密.

2007-01-27 Sat

* ニコニコ動画のおすすめ動画を貼っていくスレ [tech]

うわ,台無しwwwww


しかしこれって面白い試みかも.見ていると,まるで他の人がリアルタイム で書き込んでいるかのような錯覚に陥る.1 本の動画という基準座標によっ て全ユーザの時間軸が見かけ上同期されているという,ありそうでなかった システムかも知れない.

(追記) 元動画が削除されたので入れ換えて,ついでに新しい貼り付け方法 に変更 (2007-02-12)

関連記事:
[2007-01-28-1] YouTube にニコニコ動画へのリンクを追加する Greasemonkey スクリプト

2007-01-17 Wed

* 一般人は常に「お気に入り」を表示している! [tech]

な,なに───────!?



左側に表示するのは普通 bbs2chreader だろう常識的に考えて…

2007-01-16 Tue

* はてな,さくらインターネットへ移行 [tech]

ラックマウントってかっこいいよね.

ていうのに共感できるかできないかってのが一つの大きな分かれ目な気がす るな(←何のだ

2007-01-14 Sun

* ハッカー養成塾! -- ハック教を切り刻め [tech]

     普通のやつらの上を行け

この言葉は「私はLispが大好きだ」という意味であり、 Lisp系言語を愛用していない人に対する煽りです。

    本物のプログラマはPascalを使わない

この言葉はPascalを使わせたくない人による策略であり、煽りです。

2007-01-03 Wed

* 自作エフェクター製作記 [tech] 1 user

久しぶりに Marshall DRP-1 引っ張りだしてみたら壊れてたorz

2007-01-02 Tue

* Sorting Algorithms Demo [tech]

いろんなソーティングアルゴリズムをアニメーション (Java Applet) で表 示.

2006-12-30 Sat

* PlayStation3でNetBSDが始動し始めた模様 [tech] 1 user

やっとPS3買う理由ができた(マテ

これでPS3買う理由がなくなった、というのが正しい姿勢ですな。

「もう俺がやらなくてもいいから」という事か。漢だなw

そうではなく、「NetBSD が移植されたハードは廃れる」というジンクスがあるからです。

2006-12-29 Fri

2006-12-29 Fri

* 高速フーリエ変換ギター [tech] 1 user

わかるようなわからんような.

2006-12-27 Wed

* 四捨五入 [tech]

必要な桁だけを用い、それ以下の桁を省略したいとき、不要な桁の先頭の数 が4以下であれば切り捨て、5以上であれば切り上げる、という端数処理の方 法。とても一般的なものだと認識されているけれど、そんなに万能ではない。

なにしろ、自然数だけで考えると、1, 2, 3, 4の4つは0になり、5, 6, 7, 8, 9の5つは10になるのだから、どう見たって不公平である。このままでは 平均などに偏りが生じる。

MORI LOG ACADEMY: 四捨五入

いやそのりくつはおかしい(AA略

0, 1, 2, 3, 4 vs 5, 6, 7, 8, 9 だから,個数の比較では別に不公平はな い.そういう問題ではなくて,「0.5000000...」そのものを 1.0 に丸める か 0.0 に丸めるかで偏りが生じるのだと思う.

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [通りすがり] なるほど。わかりやすい説明ありがとうございます。問いを勘違いしておりました。 (2007-01-06 20:25:35)

* [かがみ] うまく説明できるかわかりませんが,このような説明ではどうでしょうか?本来やりたい... (2007-01-02 23:33:16)

* [通りすがり] 0.0〜0.4999999…が0に丸められ、0.5〜0.9999999…が1に丸... (2007-01-02 02:25:20)

2006-12-25 Mon

* IRSによるレスキューロボットデモ公開 [tech]

ただ、5年間の総まとめなのだから、“家一軒を丸ごと爆破して、その中に残っている被災者(を模した人形)を探索する”くらい派手なデモを見たかったのが正直なところだ。

無茶言うな.

2006-12-17 Sun

* タスクマネージャーを小さく表示−Tiny Footprintモード [tech]

そのままだと一定サイズ以下にリサイズできないタスクマネージャを,小さ くできるようにする.単に周辺の何もないところをダブルクリックするだけ.

こんな技どうやって見つけるんだろう.

2006-12-14 Thu

* h抜きリンクは間違っているか [tech] 1 user

ttp記法の場合でもFirefoxのTextLink拡張機能でダブルクリックするとリファ漏れるよ

http://b.hatena.ne.jp/entry/http%3A//d.hatena.ne.jp/NOV1975/20061213/p1

つ「ステルスモード」

(追記)

オレはステルスモードはあえて使わずにttp記法していても構わずリファで通知してるよ

http://b.hatena.ne.jp/entry/http://www.kagami.org/diary/2006-12-14-1.html

あ,そうか,ステルスモードを使わない人が存在するから「リファ漏れる よ」って話なわけですね.納得.失礼しました.

2006-12-10 Sun

* Go To Statement Considered Harmful [tech]

しかしそれにしても "Considered Harmful" という言い回しはよほど印象的だったのか,以後この言い回しはコンピュータ・サイエンスの分野において何らかの批判を展開する際に用いられる常套句となっている。まずは件のエッセイに対する反論からして "'GOTO Considered Harmful' Considered Harmful" (Rubin, Frank) ――「『GOTO は有害である』とは有害である」と来ている。それに対する更に反論として "''GOTO Considered Harmful' Considered Harmful' Considered Harmful?" (Moore et al.) ――「『『GOTO は有害である』とは有害である』は有害か?」などと続く。

「オリビアを聴きながらを聴きながら」とか.

2006-12-08 Fri

* 東芝のロボット研究 [tech]

東芝さんのロボット研究について講演をお聞きする機会がありました.いろ いろ思うところあって,大変勉強になったのですが,ここでは途中で気になっ たどうでもいいネタを 2 つほど:

1. ビーチバレーロボットの顔がモララー に見える件.

2. ApriAlpha の声を聞いていると,いつ「特技はイオナズンです」と言い出 すかとハラハラする件.

2006-12-08 Fri

* portal askul が Firefox で開けなくなっている件 [tech]

portal askul が Firefox で開けなくなっ ていることに気づいた.

サイトが Firefox で有効になっていないセキュリティプロトコルを使用しているため、portal.askul.co.jp と安全に通信できません。

らしい.なんだこれ.

SSL 2.0 を使っているせいらしい.むーん.

むむーん.

2006-12-01 Fri

* 隠れたウィンドウをちょこっと確認したい時に便利なツール2本 [tech]

Windows のウィンドウマネージャ(?)って,ウィンドウを前面に持って来な いままフォーカスするってことはできないのかな.X だと多用するんだけど.

2006-11-28 Tue

* XML/SWF Charts - 派手なグラフを生成するツール [tech] 1 user

PowerPointのアニメーション 機能を知ったばかりの人が作ったスライド のように派手に動き回るグラフを生成するツール.

Gallery に サンプルがいっぱいあって楽しい.アニメーション自体はすぐ飽きて鬱陶し くなりそうだけど,まあそれも一興かと.


PukiWiki から手軽に使うためのプラグイン charts.inc.php ってのも作ら れている.

基本的には PukiWiki 1.4.7 用らしく,手もとの PukiWiki 1.4.5_1 だと, 「Undefined class name 'auth'」とか言われまくって動かない.作者の方 のページを見て回ったところ,PukiWiki-1.4.6 でも同じようなエラーが出 まくるとのことなので (別のプラグインだけど,たぶん同じ現象だと思う),しかたないのだろう.

とりあえず charts.inc.php-0.8 から「auth::なんとか」が呼ばれていると ころ 3 ヶ所を単純にコメントアウトしたら動いた.たぶん auth_check_off オプションを使わないのならこれでいいのだろう.

その他にはまった点: PukiWiki の記法で表組みの記述をする際に,各セル の数字の後ろに空白があるとダメっぽい.数字の前なら大丈夫.あと,行末 に空白があるのもダメらしい.これはなんだろう.


というわけで,研究室内 Wiki にコピー機の課金額グラフを載せて「無駄使 いするなよ」圧力をかけてみるテスト.圧力に感度があるかどうかわからな いけど.

2006-11-26 Sun

* Amazon の画像の表示を自由に変更する方法? [tech]

おお,サイズ任意に変えられるのか!

と思ったら,写真自体の大きさはそのままで枠の幅が変わるだけ? ちょっと残念.

画像

画像

画像

画像

(追記) あ,小さくする方は縮んでくれるのか.

画像

画像

画像

画像

2006-11-26 Sun

* はてなブックマーク用 bookmarklet [tech]

正規のユーザでもないくせに「はてブコメント表示bookmarklet」をいつも 使っている私なのですが,

これって escape(location.href) を使っているから,Wikipedia みたいに URL に最初から「%」が含まれている場合に %25 に変換されちゃっておかし なことになってる気がするんですけど,そういうもんなんですか?

2006-11-23 Thu

* Let's Note CF-W4 用の AC アダプタまとめ [tech]

純正 CF-AA1625AJS: 8000〜9000円?

奥行88mm×幅39mm×高さ27mm、質量:約190g


◎ FILCO POWERLINK slim PLS162P: 3500〜4000 円?

長さ110×幅50×厚み20(mm) 140g(本体のみ)

軽くて薄いけど,長さと幅はむしろ純正より大きい.PC 側のプラグがスト レートなので使いにくい場合もあるとか (amazon の評価コメントより).こ れが本命かな.


サンワサプライ ACA-P10: 7000〜8000円?

本体サイズ:W98×D42×H29mm 重量:260g


アーベル AGP107MPN: 6000 円くらい?

118×38×40mm (重さ不明?)

2006-11-14 Tue

* Windowsスペック&起動音一覧集 [tech] 1 user

NTのって,ドラゴンボールZのオープニング曲かと思った.Sparking!

2006-11-14 Tue

* Windows Vista の起動音は Robert Fripp が作曲 [tech]

つうか Windows 95 の音は Brian Eno だったのか.まったく知らなかった.

しかし、フリップ先生も Vista チームを称えながらも、マイクロソフトか らのお金を何に使うか聞かれ、「新世代 iPod を買う」と答えるひねくれた ユーモアが健在で安心した。

http://d.hatena.ne.jp/yomoyomo/20061114/frippvista

2006-10-27 Fri

* Beamer - 時計プロジェクタ [tech]

画像

http://arcconcept.com/clock_n/wall_clock/beamer.htm

Google 流会議術↓に使えるかなとか思った.

会議をフォーカスしたものにするための小さなプレッシャーとして、Google での集まりには、いつも大きな時計が掲げられている。時計は、会議の残り 時間やそのトピックに当てられる残り時間が表示される。実際には、この時 計は、パソコン上で稼働している時計で、それを4フィート大(約1m20cm) の大きさでプロジェクターで映し出されている。

1週間に70もの会議をこなすGoogleのMarissa Mayerさん流会議術

「残り時間表示」はできないけど (それじゃ意味無いかも?).

それにしても 2万円弱は高い.

2006-10-25 Wed

* RubyのFasterCSVモジュールは速く,Pythonの標準csvはさらに圧倒的に速い [tech] 1 user

python すごいな.この違いはどこから? ネイティブコードで動いてるから とかいうそれだけの話?

2006-10-21 Sat

* tramp が遅すぎる [tech]

mhc-cvs を使うようにした [2006-10-15-1] のに引き続いて,日々のメモと いうか要するにこのページの抽出元になっているログを書く際にも emacs を X で飛ばさなくてもよいようにしたい,というわけで tramp を使いはじ めてみた.

結論から書くと,遅すぎてちょっと常用は無理かなという印象.

対象ファイルは 2006.txt みたいな名前で 1 年分が 1 個のファイルになっ ていて,サイズは 700 KB くらい.いろいろ試した結果,転送方法は (setq tramp-default-method "rsync") にするのが一番速いのだけど,それでも save するのに 3 〜 5 秒程度かかる.普段からわりとこまめに C-x C-s 叩 く方なのと,そうでなくても auto-save の度に数秒止まってしまうわけで, その度に思考が中断されてとても嫌な感じ.

正確には,save 中は完全に止まっているのではなくて,その間にタイプし た内容はちゃんと入力されていて,save 完了後に表示されます.しかし (特に日本語変換を含むような場合は) 視覚フィードバックがないとやっぱ りタイプしにくい.save はバックグラウンドで非同期に実行するような仕 組みにはできないものなのかなあとか思った.

何かいい方法はないものだろうか.

2006-10-21 Sat

* iRobot が戦闘用ロボットをデモ [tech]

かの Rodney Brooks 率いる iRobot の戦闘用ロボット.むー.

なんか唐突にどっかで見た研究室の話が出て来てワラタ.しかしあの技術は, むしろどこに行っても「これで追尾ミサイ(略」と言われてしまうのでアレ なのですが.

2006-10-15 Sun

* mhc-cvs [badinerie][tech][mhc]

今までは自宅の emacs の窓を職場の PC の X サーバで開いて,作業メモの 読み書きなりスケジュールの読み書き (mhc) をしていたりしていたのだけ ど,自宅の回線は普通の ADSL なのでちょっと無理を感じていた.

というわけで自宅 PC が逝ったのを機に (あまり関係ないけど,単にきっか けということで),まずは mhc の方は mhc-cvs を使ってみることにする.

自宅に repository を掘る.

% mkdir /home/swk/mhc-cvsroot
% cvs -d /home/swk/mhc-cvsroot init
% cd ~/Mail/schedule
% cvs -d /home/swk/mhc-cvsroot import -m 'Initial import' -I '.*' -I trash schedule name start
% cd ..
% mv -i schedule schedule.bak20061015/

で,.emacs に

(setq mhc-file-method 'mhc-cvs)
(setq mhc-cvs-repository-path "/home/swk/mhc-cvsroot")

な風に書く.リモート側の PC は,

(setq mhc-file-method 'mhc-cvs)
(setq mhc-cvs-repository-path ":ext:swk@host.example.com:/home/swk/mhc-cvsroot")

とする.もちろん CVS_RSH は ssh で,ssh-agent を使っている.

実は ssh のポートが標準の 22 ではないのだが,そこでちょっとはまった. 安直に CVS_RSH を "ssh -p 12345" とかにしてみたら cvs が

cannot exec ssh -p 12345: No such file or directory

とかいう素敵なエラーを吐いて失敗.結局

#!/bin/sh

ssh -p 12345 "$@"

なシェルスクリプトを作るという微妙な方法で回避した.

mhc-cvs 自体は,ひとまず快適に動いているっぽい.スケジュールを書き込 むと即時 commit されるようだ.それはよいのだが update がどういうタイ ミングで行われているのかよくわからない….しばらく使ってみます.

関連記事:
[2006-10-28-1] chalow に後づけカテゴリ
[2006-10-21-5] tramp が遅すぎる

2006-10-04 Wed

* インストラクターのネタ帳 [tech] 1 user

『インストラクターのネタ帳』では、ワード・エクセル・パワーポイント・アクセスなどのインストラクションをする中でよくご質問いただくことをベースに、使い方・FAQ・Tips・Q&A・裏技等を毎日ご紹介しています。

Excel の操作でこんなの↓を探しててたどりついた.助かりました.

連番が振りたい−メニューから:Excel エクセルの使い方

見出しを印刷する:Excel エクセルの使い方-印刷

2006-10-03 Tue

* iris - 「開く」「名前を付けて保存」のプレースバーをカスタマイズ [tech] 1 user

今回紹介するフリーウェアはiris、プレースバー (ファイルを保存、開くダ イアログの左側) のカスタマイズソフトウェアだ。

irisを起動すると、プレースバーの表示項目(最近使ったファイル、デスク トップ、マイドキュメント、マイコンピュータ、マイネットワーク)が並ん でいる。そこから自由に選択して配置を変えられる。

http://fw.moongift.jp/intro/i-2367.html

しばらく試してみているけど,とても便利.しかし,iris による設定が反 映されるソフトウェアと反映されないソフトウェアがあったりしません?

と思ったけど,どうも MS Office だけが反映されないようだ.

で,よくよく調べると,Office の場合は「開く」「保存」ダイアログの右 上に「ツール」というメニューがあって,その中に「マイプレースに追加」 という項目がある.これを使って,適当なフォルダを選択して追加できるら しい.つまり Office の「開く」「保存」ダイアログは標準的な部品じゃな いってことなんだな.

既存のものを削除できないのがいまいちだけど,並ぶ順序は変えられるので, 下の方に追いやってやればまあ悪くないかも.

2006-09-27 Wed

* ls -trl が超便利 [tech] 17 users

UNIX コマンドの使い方のクセを晒すのが最近の流行りのようですが(ほんと か),私の場合,

ls -trl

って打つのがほとんど手クセです (実際には alias l ls -l しているので l -tr が手クセなのですが).

-t と -r は,

   -t      Sort by time modified (most recently modified first) before sort-
           ing the operands by lexicographical order.

   -r      Reverse the order of the sort to get reverse lexicographical
           order or the oldest entries first.

なので,最近更新されたものが一番下に来ます.だから,だーーっとファイ ル名が流れて,最近いじったファイルが端末の画面に残ります.要するに超 整理法の一種かな.

私のホームディレクトリが雑多なファイルでごったがえしているのはこれの せいかも知れません.だって整理しなくてもあまり困らないんだもん.

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [Janus Benno] Ne nasovsem a navsegda (2007-04-10 18:47:00)

2006-09-22 Fri

2006-09-18 Mon

* NTT東西、固定電話版iモード撤退へ [tech]

Lモード撤退の話.突っ込みどころは大きく 3 点:

  • まだあったのかよ
  • 見出しに使ってもらえない「Lモード」という固有名詞の悲哀.日経容赦ナサス
  • 「ネット利用者のすそ野を拡大するという役割を終えたと判断した」 そもそもその役割は割り当てられていたのかという

2006-09-16 Sat

* Firefox で長いURLを折り返す [tech][logging][firefox][bloglines] 6 users

ソースコードなどを blog などに貼りつけるときにどうするのがよいか,と いう話がちょっと前に話題になっていたりして,その 論点の一つに「横に長すぎる場合」をどう扱うかが挙がっていたりするのだ けど,実は似たような問題はほかにもある.連続するASCII 文字列である.

典型的には,長ーい URL 文字列を表示した場合に,枠からはみ出したり, 枠自体がびろーんと伸びて見ずらくなったりする.といっても Firefox の 場合だけなのだけど.

対策法がこちらによくまとまっている:

ざっくり要約すると,まず Firefox ユーザ側の立場としては,

一方,Firefox を使っているかどうかに関らず,ウェブサイトの運営側の立 場としては,

  • 自分のところに来る Firefox ユーザ全員が url_breaker を使ってくれているとは期待できない
  • → 実は Greasemonkey 版の url_breaker は,ウェブページ側に仕込んでもうまくはたらくので,それを利用するとよい

ちょっとややこしいのは,url_breaker には「A要素のみを処理するもの」 と「全文を処理するもの」という 2 系統があり,さらに「xpi版 (つまり普 通の拡張機能)」と「Greasemonkey版」の 2 系統がある,のだが,それらが 直交していない.えーと,こんな感じ?

A要素のみ処理 全文を処理
xpi url_breakerの Ver.0.2.2以降 同左 (オプション設定)
Greasemonkey url_breakerの Ver.0.2.1 url_breaker_plus


というわけで,実はしばらく前からウェブページ側に仕込んでみている. url_breaker_plus の方です.各 HTML ファイルの body 要素の一番最後辺りに,

<script src="/js/url_breaker_plus.user.js" type="text/javascript">
</script>

と入れる. url_breaker_plus.user.js はこちら. オリジナルのままだと開き括弧 {, {, [ の直後でも改行しちゃって(個人的 に)気持ち悪いので,正規表現を以下のようにちょっと修正して使っている.

//      var regexp = new RegExp("([!-%'-/:=\\?@\\[-`\\{-~]|&amp;)");
      var regexp = new RegExp("([!-%'\\)-/:=\\?@\\\\-`\\|-~]|&amp;)");

さて,実は長い文字列が横に伸びちゃうのが一番うっとうしいと個人的に思っ ているのは bloglines なのけど,url_breaker の効果は有ったり無かった りでどうも挙動が謎である.bloglines の記事表示が table レイアウトな のが問題なのかも.

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [xuxkbgaayp] NEW DELHI: Investigators believe an e ma... (2007-11-26 08:48:20)

* [ldobiofzlo] 1 quarterback before suffering a knee in... (2007-11-25 12:50:35)

* [xyktjpawdx] Dick\'s Sporting Goods said Tuesday that... (2007-11-24 12:00:43)

* [ebpngyrvzl] Henning Solberg (Ford) retired from sixt... (2007-11-22 15:18:50)

* [mtijoofvrl] Citroen\'s Sebastien Loeb concluded the ... (2007-11-22 15:16:36)

* ...

2006-09-16 Sat

* 読みにくいソースコード [tech] 1 user

遥か昔,若気の至りでこんなシグネチャを使ってたことがあるのを思い出し た.

main(c,d/*     鏡  慎吾 (Shingo W. Kagami)  */){c=!printf(&01[
"csh"]);/*        東京大学工学部計数工学科  */while(putchar(c[
"in/out"/*               kagami@post.co.jp  */]-'+'+c["++c++"]
)!=111)c/*  t60685@hongo.ecc.u-tokyo.ac.jp  */++;puts("1"+1);}

(注: 上のメールアドレスはどちらも消滅してます)

メールアドレスから判断するに学部 3 年くらいの頃か.C を覚えたての頃 ですね.インスパイヤ元は明らかに Korn の作品と思われる.

2006-09-09 Sat

* MHC の小ネタ [tech][mhc]

スケジュール管理は相変わらず MHC でやっ てます.

いったん Mew のバッファに移ってから C-c.. するのが煩わしく感じて来た ので,.emacs で

(global-set-key "\C-c.." 'mhc-goto-this-month)

してみた.微妙に便利になった気がする.

関連記事:
[2006-10-28-1] chalow に後づけカテゴリ

2006-09-03 Sun

2006-08-21 Mon

* Molex の 5045,5046 は 2.5 mm ピッチである [tech]

ちょっとした回路の DC 電源コネクタとしてよく使うんだけど,今の今まで 2.54 mm ピッチだと思ってた….

2006-08-17 Thu

* USBで焼肉 [tech]

5ポート USB 1.1 カードを 6 枚差して 30 * 5 [V] * 0.5 [A] = 75 [W] で 焼肉.すばらしい.すばらしいけど,

お茶をそこに置くな

2006-08-17 Thu

* グーグル、「ググる」の使用に難色 [tech]

てっきり Bogusnews か虚構新聞だと思ったら本当なのか.



「セ○ムしてますか」という CM まで流したのに定着させられなかった会社 の立場はどうなる.(いや定着させたかったのかどうか知りませんが)

(追記) とか書いてたら早速 Bogusnews の記事が.仕事はやすぎ.

(追記) 日本語の「ググる」はOK?

2006-08-16 Wed

* 「無断リンク禁止」と「アダルトサイトの年齢確認」 [tech] 1 user

最近再燃している感のある無断リンク談義 [2006-06-29-1]ですが(もう下火 か?),関連してふと思ったこと.

いわゆるアダルトサイトって,トップページとかに「18歳以上ですか?」み たいな選択リンクがあるじゃないですか.No を選ぶと Yahoo! に飛んだり するやつ.あれって何なんでしょう? 「無断リンク禁止」がナンセンスなの と同等にナンセンス極まりないと思うんですけど.

と思ってちょっと調べてみると,風俗営業等の規制及び業務の適正化等に関 する法律の第31条の2あたりが根拠っぽい?

どうも解釈がいろいろ面倒くさそう.まともに読むと少なくとも有料サイト であればリンクを選ばせるだけじゃダメっぽいし,無料サイトにはそもそも 適用されるのだろうか.

というわけでさっぱりわかりません.教えて エロい人 エラい人. (← これが書きたかっただけちゃうんかと小1時間)

2006-08-16 Wed

* うっかり Flash Player 9 を入れてしまったので 8 に戻す [tech][firefox] 1 user

ふと Flash Player 9 を入れてみたら, Firefox からクリップボードへのコピー ができなくなった.が るる.常用している bookmarklet [2006-07-08-1] が動かなくて困るので, Flash Player 8 に戻すことにする.

この辺を参考にした.

まず 9 をアンインストールした方がよさそうだ.以下のページにある 「Flash Player 8 uninstallers」がそのまま使えた.IE とか Firefox を 起動したまま走らせるとちょっと厄介だったので,止めてからの方がよさげ.

過去のバージョンの Flash Player は以下のページにある.Flash Player 8 をダウンロード,展開して,インストール.

というわけで無事戻った.

2006-08-15 Tue

* pya! filter [tech] 7 users

pya! が大好きだ.でも全部見て回る体力はない.

というわけで,ざっと一覧を眺めて評価の高いものだけ拾い読みしていたり していたのだけど,いまいち幸せでない.評価の高いものだけ選んでフィー ドできればいいのになあ.

と思ったので作ってみました.

pya! の過去ログを 15 ページほど蓄えておいて,リクエストが来ると条件 に合致する記事一覧を RSS として吐く.デフォルトの条件は「プラス評価 が300以上」.

未読管理のできる RSS リーダで読めば,条件を満たした時点で新着として 現れることになります.

pya! のページ構成が変わったらきっと動かなくなるに違いないのは仕様で す.というかつまり無断でやってますので,怒られたらさっさと引き上げま す.

あとこれ plagger でできると思うので誰かよろしく.


フィルタ条件は,cond パラメータとして渡してやる.空白で区切られた(よっ てエンコードされた URL 上では + で区切られた) 文字列のリストで,スタッ クマシンよろしく条件を記述する.たとえば

で「プラス評価が300以上の記事を抽出」となる.これがデフォルト.他に は

で「プラス評価がマイナス評価に比べて相対500以上で,かつ(18+)でないも のを抽出」となる.たぶん.

リストの要素は以下の 3 種類:

  • 整数 ... スタックにその数を push する
  • 変数 ... スタックにその変数の内容を push する
  • 演算子 ... スタックから 2 個,または 1 個の値を pop して,それらに対する演算結果をスタックに push する

これらを順にすべて評価して,最後にスタックのトップに残った値が真だっ たらその記事はフィードに含める.偽だったら含めない.

変数はとりあえず以下の通り:

$good 「イイ」の数
$ero 「エロいな」の数
$bad 「ハゥ」の数
$positive $good + $ero
$negative $bad
$hit ヒット数
$pu PU 同意数
$over18 (18+) だったら 1,さもなくば 0

演算子には 2 項演算と 1 項演算がある.2 項演算 op は,pop した値を順 に x2, x1 として,x1 op x2 を計算する.op の種類はとりあえず:

ge >=
gt >
le <=
lt <
eq ==
ne !=
plus +
minus -
and &&
or ||

1 項演算 op は,pop した値 x に対して op x を計算する.op の種類はと りあえず:

not !


出力される RSS の description の部分には「(・∀・)イイ」とかの評価数 が表示されます.なので,記事内容に更新があったときに新着記事として扱 う RSS リーダを使っている場合は,一度読んだ記事が何度も何度も現れる ことになります.

例えば bloglines の場合は subscription の設定で Updated Items を ignore するように設定することができて,そうすればこの点は問題にはな りません.そのようなオプション設定のない RSS リーダを使っている場合 は,CGI に渡す hide_scores というパラメータを真にすることで, description が空の RSS を吐くようにすることができます:


過去ログを取って来る方のソース:

#!/usr/bin/env perl

use strict;
use LWP::UserAgent;
use Storable;

my $regexp1 = '<tr><td width.+?>(.+?)</td><td .+?><a href=\'pyaimg/pimg.php\?imgid=(\d+)\'.+?>(.+?)</a></td></tr><tr><td .+?>No\.(\d+)</td><td width.+?><SPAN CLASS.+?>(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}) :: .+?=(\d+).+?</td>(.+?)</tr>';
my $regexp2 = '<td .+?><Img Src=\'(.+?)\.gif\'.*?> : (\d+)</td>';

my $store_file = "/home/swk/pya_db/pya.stor";

&main;

sub main
{
    my $html_code = &get_pya();

    my @posts = ();

    while ($html_code =~ /$regexp1/g) {
        my %h = ();
        $h{type} = $1;
        $h{imgid} = $2;
        $h{title} = $3;
        $h{no} = $4;
        $h{date} = $5;
        $h{time} = $6;
        $h{hit} = $7;
        $h{counters} = $8;
        push(@posts, \%h);
    }

    foreach my $p (@posts) {
        $p->{title} =~ s/<b>//g;
        $p->{title} =~ s/<\/b>//g;

        while ($p->{counters} =~ /$regexp2/g) {
            my $ctype = $1;
            my $cval = $2;
            $p->{$ctype} = $cval;
        }
        undef($p->{counters});

        $p->{good} = $p->{ii1} + $p->{ii10}
                     + $p->{ii5} + $p->{ii6} + $p->{ii7};
        $p->{ero} = $p->{ero1} + $p->{ero2} + $p->{ero3} + $p->{ero4};
        $p->{bad} = $p->{ii2} + $p->{ii12};

        $p->{positive} = $p->{good} + $p->{ero};
        $p->{negative} = $p->{bad};

        $p->{pu} = $p->{p1} + $p->{p2} + $p->{p3} + $p->{p4} + $p->{p5};

        $p->{over18} = ($p->{title} =~ /^\(18\+\)/)? 1: 0;

        $p->{dcdate} = $p->{date} . 'T' . $p->{time} . ':00+09:00';
        $p->{permlink} = 'http://pya.cc/pyaimg/pimg.php?imgid=' . $p->{imgid};

        $p->{score} = join(', ', 
                           ("hit: $p->{hit}",
                            "(・∀・)イイ: $p->{positive}",
                            "(;´Д`)ハゥ: $p->{negative}",
                            "PU: $p->{pu}"));

        if ($p->{title} =~ /^(.+) \((情報:.+)\)\s*$/) {
            $p->{itemheader} = &html2xmlstr($1);
            $p->{itemauthor} = &html2xmlstr($2);
        } else {
            $p->{itemheader} = &html2xmlstr($p->{title});
            $p->{itemauthor} = 'pya';
        }
    }

    Storable::store(\@posts, $store_file . '.new');
    rename($store_file . '.new', $store_file);
}

sub get_pya
{
    my $page_max = 15;
    my $pya_str = "";
    my $pya_url = 'http://pya.cc/kako.php?genre=1&kakopage=';

    my $ua = LWP::UserAgent->new;
    for (my $i = 1; $i <= $page_max; $i++) {
        my $http_response = $ua->get($pya_url . $i);
        $pya_str .= $http_response->content;
        sleep(3);
    }

    return $pya_str;
}

sub html2xmlstr { # from chalow-1.0rc4
    local ($_) = @_;
    s/&nbsp;/ /g;
    s|<img.+?alt="(.*?)".*?>|[$1]|gosm;
    s/[\t\n]//g;
    s/[\x00-\x1f]+/ /g;
    s/\s\s+/ /g;
    s|<[^<>]+?>||gosm;
    s/&lt;/</go;
    s/&/&amp;/go; s/>/&gt;/go; s/</&lt;/go; s/\"/&quot;/go; # "いつもの4つ
    return $_;
}

CGI のソース:

#!/usr/bin/perl -T

use strict;
use POSIX qw(strftime);
use Template;
use Storable;
use CGI;
use Encode;

my $store_file = "/home/swk/pya_db/pya.stor";

my $rss_tt2 = << "RSS"
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
 xmlns="http://purl.org/rss/1.0/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:admin="http://webns.net/mvcb/"
 xml:lang="ja">
<channel rdf:about="[% self_url %]">
 <title>filtered pya</title>
 <link>http://pya.cc/</link>
 <description>filtered pya!</description>
 <dc:language>ja</dc:language>
 <dc:date>[% rss_dcdate %]</dc:date>
 <admin:generatorAgent rdf:resource="http://www.kagami.org/pya_filter/"/>
 <items>
 <rdf:Seq>
 [% FOREACH i = items -%]
  <rdf:li rdf:resource="[% i.permlink %]"/>
 [% END -%]
 </rdf:Seq>
 </items>
</channel>
[% FOREACH i = items -%]
<item rdf:about="[% i.permlink %]">
 <title>[% i.itemheader %]</title>
 <link>[% i.permlink %]</link>
 <description>
 ([% i.type %])[% UNLESS hide_scores %] [% i.score %] [% END %]
 </description>
 <dc:creator>[% i.itemauthor %]</dc:creator>
 <dc:date>[% i.dcdate %]</dc:date>
</item>
[% END -%]
</rdf:RDF>
RSS
        ;

&main;

sub main
{
    my $time1 = (times)[0];
    my $q = new CGI;
    print $q->header(-type => 'application/xml',
                     -charset => 'UTF-8');

    my $postsref = Storable::retrieve($store_file);
    my $cond = $q->param('cond') || '$positive 300 ge';

    my $filter = &mkfilter($cond);
    my @items = map &$filter($_), @$postsref;
    
    my $tt2 = Template->new();
    my $rss_out;
    $tt2->process(\$rss_tt2, {
        self_url => $q->url(-full => 1, -query => 1),
        hide_scores => $q->param('hide_scores')? 1: 0, 
        items => \@items,
        rss_dcdate => strftime("%Y-%m-%dT%H:%M:%S+09:00", localtime),
    }, \$rss_out);

    Encode::from_to($rss_out, 'euc-jp', 'utf8');
    print $rss_out;
    
    my $time2 = (times)[0];
    printf("<!-- time elapsed: %f (s) -->\n", $time2 - $time1);    
}

sub mkfilter
{
    my @cs = split(/\s+/, shift);
    my @fn = ();

    foreach my $c (@cs) {
        if ($c =~ /^(-?\d+)$/) {
            my $arg = $1;
            push(@fn, sub { push(@{$_[0]}, $arg); });
        } elsif ($c =~ /^\$([a-zA-Z_][a-zA-Z01-9_]*)$/) {
            my $arg = $1;
            push(@fn, sub { push(@{$_[0]}, ($_[1]->{$arg}) + 0); });
        } elsif ($c =~ /^([a-zA-Z_][a-zA-Z01-9_]*)$/) {
            my $arg = $1;
            push(@fn, sub { &op($_[0], $arg); });
        } else {
            return sub { return (); };
        }
    }

    return sub {
        my ($p) = @_;
        my @stk = ();
        foreach my $f (@fn) {
            &$f(\@stk, $p);
        }
        return pop(@stk)? $p: ();
    }
}

sub op
{    
    my ($s, $o) = @_;

    my %biop = ('ge' => sub { $_[0] >= $_[1]; },
                'gt' => sub { $_[0] > $_[1]; },
                'le' => sub { $_[0] <= $_[1]; },
                'lt' => sub { $_[0] < $_[1]; },
                'eq' => sub { $_[0] == $_[1]; },
                'ne' => sub { $_[0] != $_[1]; },
                'plus' => sub { $_[0] + $_[1]; },
                'minus' => sub { $_[0] - $_[1]; },
                'and' => sub { $_[0] && $_[1]; },
                'or' => sub { $_[0] || $_[1]; },
                );
    my %uop = ('not' => sub { !$_[0]; }
               );

    if (defined($biop{$o})) {
        my $b = pop(@$s);
        my $a = pop(@$s);
        push(@$s, &{$biop{$o}}($a, $b));
    } elsif (defined($uop{$o})) {
        my $a = pop(@$s);
        push(@$s, &{$uop{$o}}($a));
    }
}

作ってて思ったこと.ちゃんと評価したわけじゃないけど,上のプログラム で試した範囲では,

  • HTML::Template より Template Toolkit の方がちょっと速い.でも直書きする方がもっと速い (当り前?
  • Jcode より Encode の方がだいぶ速い.
  • 上の CGI では,リクエストが来ると最初に cond パラメータを解釈して条件判定関数を生成し,それを保存している記事リストに map で適用している.実は,これをやらずに記事の数だけ cond の解釈を繰り返しても,そんなに顕著には遅くならなかった.Perl の正規表現エンジンって優秀だなと思った.

(追記) hide_scores まわりの説明がわかりにくかったようなので書き直し ました.

関連記事:
[2007-06-12-2] ハイパー漢字検索を勝手に Ajax 化

2006-08-11 Fri

* 今日の敗北感 [tech]

UNIX 機で IP アドレスを確認しようと思って

ipconfig

と打鍵していたとき.

2006-08-07 Mon

* なんか bloglines が全然ダメな件 [tech][bloglines]

bloglines で keep new していた記事がいくつか行方不明になっている.左 側のフレームで keep new な記事数がかっこ表示されているのに,右側には 何も出てこなかったりする.出てこないから keep new の解除もできなくて かっこ表示残りまくり.気持ち悪い.というか,普段から keep new を酷使 しまくる人なので [2006-07-08-1],とても困る.

該当しそうなアナウンスが一応出ている.

これによると一時的なもので,データのロスはないという.メンテナンス前 のデータが新しいデータベースに移行されていないってことか? …と思って いたら,ついさっき keep new した記事がまた消えている.なんだこれ?

そろそろ livedoor reader 辺りに乗り換えろということだろうか.

2006-08-03 Thu

* w3m は実はタブブラウザだった [tech]

って常識ですかそうですか.私はついさっき知りました.偶然 T を押した らタブ出現! すげー驚いた.

C-t               リンクが指す先の文書を新しいタブで開きます (TAB_LINK)
T                 新しいタブを開きます (NEW_TAB)
C-q               現在のタブを閉じます (CLOSE_TAB)
}                 次のタブに移動します (NEXT_TAB)
{                 前のタブに移動します (PREV_TAB)
ESC-t             タブ選択メニューを立ち上げます (TAB_MENU)
<NOT ASSIGNED>    現在のタブを右に移動します (TAB_RIGHT)
<NOT ASSIGNED>    現在のタブを左に移動します (TAB_LEFT)

2006-07-24 Mon

* Collatz 予想 - ピタゴラ機械もどき版 [tech]

前回の素数列挙 OpenGL 版 [2006-06-27-1] に引続き,「Collatz 予想の h(n) を求めるピタゴラ機械もどき」という色物ネタを考えていたのだが, 時間がないのと,いざ実装しようと思うとあまり面白くなさそうだったので やめた.そのうち気が向いたら書くかも.

2006-07-18 Tue

最終更新時間: 2008-04-23 08:48


Shingo W. Kagami - swk(at)kagami.org