http://www.youtube.com/watch?v=pj2WS_vZJoY
----
話をしよう。
彼女と最初に出会ったのは今から9年・・・
いや、10年前だったか・・・まあいい。
私にとってはつい昨日の出来事だが。
彼女には72通りの名前があるから
なんて呼べば良いのか・・・
たしか最初に会ったときは・・・「(新婦の名前)」
まあ、良いヤツだよ。
そんなウェディングドレスで大丈夫か?
(新婦)一番いいのを頼む
人が持つ唯一絶対の力――
――それは自らの意思で進むべき道を選択することだ。
お前は常に人にとって最良の未来を思い、自由に選択していけ。
(新婦の名前)よ、さあ、行こう。
----
ということで、明日結婚式と披露宴です。
上記は披露宴のウェルカムスピーチとなる予定でしたが、相方に殴られて敢え無くボツになりました。
皆様、私と相方を末永く宜しくお願いします m(_ _)m
2010/11/12
2010/11/11
introspection(2)
どこに行っても焼け野原でそれなりに苦労するなら、自分を一番強く描ける場所を選ぶべきである。そうできるかを確かめるために自分を表現し、自分をぶつける毎日。けど今日は消化不良だったかも。リカバー可能ではあるが(一行独白
Tags:
monologue
2010/11/09
/etc/cron.daily/tmpwatch
Red Hat系ディストリビューション限定の話だが、/tmp ディレクトリに削除されては困るファイルを放置してはいけない。10日アクセスがないと削除されるのに全く気付いてないぬるぽな人は割といるかもしれない、、と推測してこのエントリを記す。
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix 240 /tmp
/usr/sbin/tmpwatch "$flags" 720 /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 720 "$d"
fi
done
上記は CentOS 5.4(final) の /etc/cron.daily/tmpwatch の中身だが、/tmp からは一部のソケットファイルを除いて10日間アクセスがないものを削除している。その他 /var/tmp/ は30日。/var/ 以下の一部のディレクトリも同様である。
----
詳しくは man 8 tmpwatch であるが、一定時間アクセスがないものを削除、というのは割と使えるかもしれない。キャッシュファイルとか、ね。
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix 240 /tmp
/usr/sbin/tmpwatch "$flags" 720 /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 720 "$d"
fi
done
上記は CentOS 5.4(final) の /etc/cron.daily/tmpwatch の中身だが、/tmp からは一部のソケットファイルを除いて10日間アクセスがないものを削除している。その他 /var/tmp/ は30日。/var/ 以下の一部のディレクトリも同様である。
----
詳しくは man 8 tmpwatch であるが、一定時間アクセスがないものを削除、というのは割と使えるかもしれない。キャッシュファイルとか、ね。
2010/11/02
2010/10/20
[PATCH] Auto/FetchTitle.pm default configuration changes
http://coderepos.org/share/changeset/38602
IRCで http URL が貼られたときにタイトルを自動表示するという処理はよく行われていて、IRCプロキシ tiarra にもそのためのプラグインが実装されている。だがそのいくつかのパラメータが今風じゃないなと思ったのでpatchを当ててコミットした。
- タイムアウト値のデフォルトを3秒から10秒にした
- 取得するHTMLのバイト数を最大4Kから64Kにして、その値を recv_limit として設定可能にした。全部 amazon.co.jp が悪い
ひとつめの変更は、リダイレクトを行うサイトも珍しくないので、3秒では貼られるサイトによってはタイムアウトが頻発するために行った。ふたつめの recv_limit の変更については、回線が細い人にとっては過剰な変更であろう。だからこの値は変更できるようにしておいた。
IRCで http URL が貼られたときにタイトルを自動表示するという処理はよく行われていて、IRCプロキシ tiarra にもそのためのプラグインが実装されている。だがそのいくつかのパラメータが今風じゃないなと思ったのでpatchを当ててコミットした。
- タイムアウト値のデフォルトを3秒から10秒にした
- 取得するHTMLのバイト数を最大4Kから64Kにして、その値を recv_limit として設定可能にした。全部 amazon.co.jp が悪い
ひとつめの変更は、リダイレクトを行うサイトも珍しくないので、3秒では貼られるサイトによってはタイムアウトが頻発するために行った。ふたつめの recv_limit の変更については、回線が細い人にとっては過剰な変更であろう。だからこの値は変更できるようにしておいた。
Tags:
perl,
programming
2010/10/13
mumumu++
http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001767
俺は「何かを残す」ために技術を使うんで、10年後もそういうことをしていると思う。
家族を幸せにしつつそんなことができれば最高です。ハイ。
・・・ただ、それがプログラムを書くことだけで成り立っているとは思わない。それだけで食える人ってこの世界ではほんの一握りだと思います。
----
家族できました。職も変わる。変化をプラスに変える一年にしたい。
俺は「何かを残す」ために技術を使うんで、10年後もそういうことをしていると思う。
家族を幸せにしつつそんなことができれば最高です。ハイ。
・・・ただ、それがプログラムを書くことだけで成り立っているとは思わない。それだけで食える人ってこの世界ではほんの一握りだと思います。
----
家族できました。職も変わる。変化をプラスに変える一年にしたい。
2010/10/12
Tamagawa BBQ 2010

多摩川で elfさん 主催のバーベキュー会が行われたので行ってきた。総勢20人強の方々が集まり、食ったり喋ったりしまくった。基本的にウチの業界の集まりだったわけだが、フリーの方も多く、いろいろ興味深い話を聞かせて頂いた。
・写真にうつっているステーキうます
・クラウドの概念は曖昧なので好き放題に拡張すると面白いことになる。分散してインターネット上に置いてあれば皆クラウドになりかねない
・htairaさん がファイルシステムのスナップショットをとるfsfreezeコマンドを作った。util-linux-ng-2.18 に入った形で既にリリースされている。ソースみるみる。
・XXさんがあそこに転職しました。今こうしていますよ。等近況を聞けた。中にはサプライズも!(`ー´)
・フリーな立場で活動するのに必要なことってなんですかね、という話になり、「やりたいことがあること」と「信用(信頼)を繋げていくこと」などじゃね、という話になった
----
入籍して以降、いろいろとバタバタしていて PHPCon2010 をはじめとする様々なイベントへの出席予定が全部潰れていたので、こういう場は久しぶりだ。
リア充してんぢゃん!とか一部からは叩かれたものの、やはりこういう場に定期的に出ることは悪くない。
SAMSUNG BX2250

http://www.amazon.co.jp/dp/B003NAZZHW/
引越しに伴ってディスプレイを新調した。今まで最大 1280x1024 の環境しか触れたことがない自分にとっては、1920x1080 の解像度は正直鮮烈に映った。相方は特に気に入ってしまってノートパソコンの環境にほぼ戻れなくなってしまっている。
以前買った Dell Inprison と組み合わせて立派に使えるので満足している(*´~`)
ディスプレイなにがいいだろう? と tweet したときこれの類似品を教えてくれた wozozo ありがとう!
Tags:
hardware
2010/10/10
x * log(x)

【注意】:このエントリは数学的な意味で全くもって厳密ではないし、筆者は数学の世界の慣習にも無頓着である
x * log(x) って(※1)、グラフ的にどういう形になるのかな、と思ってふと gnuplot(※2) でグラフにしてみた。 x が十分に大きいと、 log(x) > 1 になるんで、グラフは右上がりになる。これはOK。
問題は x が十分に小さくなった時である。 log(x) は x が十分小さくなると0を超えて無限に小さくなるはず。んで、x は正の範囲でどんどん0に近づいていく。なんで、0をわずかに下回るが、0に近づいていく、という感じかな、と理解した(※3)。
----
(※1) gnuplot が出力するグラフは底が e だと思われるが、本エントリの本文中では筆者の理解の都合上底を 2 として考えている。
(※2) gnuplot って、gnuとかついてるけど実際 GNU のソフトウェアじゃないのね。その点は再配布や改変に当たって特殊な条件を付けているからなのだが、その点は FAQ と ライセンスを参照のこと
(※3) 「0に近づいていく」という部分は、全くもって筆者の感覚的な書き方で、当然数学的に厳密ではない。
2010/10/07
search via google on Konvi
https://bugs.kde.org/show_bug.cgi?id=229589
I want this feature to be added, anyone working on this?
----
この機能は Limechat にはまさに搭載されている。誰もやってなかったらこれは是非俺がやりたいところだ。
[ Update October 7th 18:56 JST by m ]
「That's already implemented in the development version and will be available for the next release: http://bit.ly/dvDMjj 」とのこと。流石 Hein。仕事が早いべ(わら
I want this feature to be added, anyone working on this?
----
この機能は Limechat にはまさに搭載されている。誰もやってなかったらこれは是非俺がやりたいところだ。
[ Update October 7th 18:56 JST by m ]
「That's already implemented in the development version and will be available for the next release: http://bit.ly/dvDMjj 」とのこと。流石 Hein。仕事が早いべ(わら
Tags:
development,
misc,
software
2010/10/06
"share" button test
Twitter 経由で Bloggerによる人様のブログ を徘徊していると、いつの間にやら Blogger にも「共有」ボタンがついたらしく、こんな努力 やあんな努力は既にしなくてよくなった件を発見してしまった....
嬉しいのやら悲しいのやら(´ー`; )
----
Googleオフィシャルではないものの、Bloggerカスタマイズ情報ブログも結構役立つにょ(*´~`)
嬉しいのやら悲しいのやら(´ー`; )
----
Googleオフィシャルではないものの、Bloggerカスタマイズ情報ブログも結構役立つにょ(*´~`)
2010/10/04
windows.kde.org

(※ 上記は Windows 7 上のものです。)
普段 Linux、そして KDE をこよなく愛する自分にとって、**やむなく使っている** Windows でお気に入りのKDEアプリケーションが動いたらどんなに素敵だろう、と以前から思ってはいた。けど、今やそれは絵空事ではなくなっている。
まだ個々のアプリのインストーラーを配布するという形にはなっていないが、windows.kde.org(※1) には cygwin のインストーラーのような形でアプリケーションを選ぶことができる KDEのインストーラーが提供されている(※2)。しかも、KDE全体をインストールする必要すらない。上記の画像のように Konversation のみを選ぶことも可能になっていた。自分が試したところでは、 KDE 4.4.4 ベースでコンパイルされたアプリが選べるようになっていた。
不安な方は、スクリーンショット と KDE Techbase のドキュメントを見てからチャレンジするとよいだろう。
もう自分には Limechat はいりませんっ!(`ー´)
----
※1 え、windows.kde.org なんて知らなかったって? どれくらい前からあったんでしょうね。僕も昨日知りましたから(藁
※2 cygwin で X を入れればWindows上でKDEも動かすことはできていた。ただ、この状態では X や KDE を入れずに個々のアプリをインストールできる状態ではなかった(はず
2010/09/22
Reading LGPL v2.1
http://www.gnu.org/licenses/lgpl-2.1.html
「java-ja 第1.9.2回 チキチキ ライセンスって何ですか?」ってのに参加してみて、LGPL v2.1 を改めて読み直す気になった。御存知の通り、LGPL および GPL の最新バージョンは 3 である。なぜ今 version 2.1 なのかといえば、これが LGPL v3 を理解する助けになるからである。
僕の理解を要約すると以下の通りである
- 「ライブラリを改変して再配布する」場合はGPLまたはLGPLで公開する必要がある
- 静的リンク、または(LLのような)リンク不要なライブラリの組み合わせを再配布する場合は、ソースコードまたはオブジェクトコードを公開する必要がある
- 動的リンクの場合は組み合わせたものを同時に配布しない限りLGPLの埒外である。同時に再配布する場合は 6. にある諸条件を守ること(ライブラリと組み合わせたソフトのソースコードを公開する必要はない)
----
以下はそのメモであるが、僕は法律家ではないので、勝手な個人の解釈であることをお断りしておく。また、本エントリの内容にはいかなる保証もしない。
----
- Preamble(はじめに)の部分
殆どはLGPL v2 の哲学についての宣言的な部分である。一応ちゃんと読もう。しかし、「ライブラリを基にした著作物」と「ライブラリを利用する著作物」の区別を述べた以下だけは滅茶苦茶重要である。日本語訳の該当部分を引用する。
・「ライブラリを基にした著作物」と「ライブラリを利用する著作物」の違いによく注意してください。前者はライブラリから採られたコードを含んでおり、一方 後者は実行するためにライブラリと結合されなければならないということを意味しています。
----
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION(複製、頒布、改変に関する条件と制約) の部分
0. 「ライブラリ」と「ソースコード」の定義、およびこのライセンスの適用範囲について述べている。『複製や頒布、改変』に適用されることが重要
1. コピーの配布条件。以下の二つを両方満たす必要がある
-- 適切な著作権表示と無保証であることを目立つよう適切に記載する
-- LGPL v2および無保証に触れた告知すべてをそのまま残す。つまり、LGPL v2 全文の複製物を『ライブラリ』と共に頒布する
2. 「ライブラリを基にした著作物」の配布条件。ライブラリを改変したり、ライブラリを取り込んだコードを作成した場合すべてに当てはまる。以下をすべて満たす必要がある
-- 上記 1. を守ること
-- 改変されたものをソフトウェアライブラリの状態にすること
-- 改変されたファイルに改変した旨を示すこと
-- LGPL v2 を適用すること
-- 改変した部分がアプリケーションのコードを含んでいた場合、それがなくても動くように努力すること
3. 「ライブラリ」には GPL を適用してよい
4. ライブラリ単体のオブジェクトコードの配布条件。以下の二つを両方満たす必要がある。
ライブラリとリンク・組み合わせ・結合された結果生成されるものについては、5. と 6. で述べられている
- 上記 1. と 2. の条件を両方満たすこと
- ソースコードを添付するか、そのありかを示すこと
5. 「ライブラリを利用する著作物」の保護範囲
ライブラリとリンクすることによって動作するプログラムは「ライセンスを利用する著作物」と呼ばれ、それ単体では LGPL は適用されない。しかし、LGPLが適用されるプログラムと組み合わせて **一緒に** 著作物を再配布する場合は、静的・動的リンクを問わず 以下 6. の適用を受ける
ただし、以下の場合は除く
- ライブラリの「数字のパラメタやデータ構造のレイアウト、アクセス機構または小さなマクロや小さなインライン関数(長さが 10行かそれ以下)のみ」を利用している場合
※この条項だけだといかにもリンカがリンクした場合のみに以下の 6. が適用されるかのように読めるが、6. では「結合(Combine)」とも書いているので、それに限らない。つまり、LGPLな PHP のライブラリをアプリケーションと混ぜる場合も以下の 6. が適用される(と勝手に解釈している)
6. ライブラリと結合(リンク、または組み合わせた)した著作物の配布条件
LGPLで保護されたライブラリと組み合わせて著作物を一緒に配布する場合には、(静的・動的リンクであるかどうかを問わず)以下をすべてを守る必要がある
- 配布する著作物の改変およびリバースエンジニアリングを禁止してはいけない
- ライブラリが著作物の中で用いられていることと、それがLGPLで保護されていることを告知する
- LGPLライセンスのコピーを一部提供する
- 著作物が実行時に著作権表示を表示するならば、その中にライブラリ』の著作権表示を含め、そのうえでこのライセンスのコピーの在処を示す参照文も含める
かつ、以下のうちの **いずれか** を満たす必要がある
-- ライブラリの(改変点をすべて含めた)完全なソースコードか、オブジェクトコードを出すことで、実行形式が再生成できるようにする。(静的リンク、またはLLのライブラリとの組み合わせの場合はここが該当する)
-- 著作物に上記で指定されたものを、手数料と引き換えに提供することを書面で知らせる
-- 上記で指定されたものへの適切なアクセス手段を提供する
-- 上記で指定されたものをユーザーに適切に送ったか、受け取っていることを確認する
--『ライブラリ』とのリンクに適切な共有ライブラリ機構を用いる(動的リンクの場合の配布条件)
「ライブラリを利用する著作物」は、それから実行形式を複製する際必要なデータまたはユーティリティプログラムをすべて含めた形で頒布されなければならないが、その中に、実行形式が実行されるオペレーティングシステムの主要な部分(コンパイラやカーネル等)と通常一緒に(ソースかバイナリ形式のどちらかで)頒布されるものすべてを含んでいる必要はない
7. ライブラリを基にした著作物(ライブラリから採られたコードを含んだもの)と組み合わせた場合の配布条件
- それぞれを分離した配布を許可すること
- ライブラリを基にした著作物の完全なコピーを同じ条件で添付する
- ライブラリを基にした著作物であるという事実と、それのありかを知らせる
8. このライセンスに定めた行為以外の複製や改変、サブライセンス、リンク、あるいは頒布を禁止する
9. このライセンスによって保護されたライブラリを改変、再配布することは、このライセンスを受け入れたことと同等と見なす
10. コピーレフト規定。再配布するたびに、それを受け取った人はこのライセンスで得られる権利と同等の権利を得る(強制する必要はない)
11. 特許侵害があった場合でもこのライセンスの制約は免除されない。
12. 他の著作権や特許によってこのライセンスと矛盾する制約を加えている地域を排除して配布できる
13. FSF は新しい LGPL を発表できる。その場合でも、バージョン指定か、or later を選択できる
14. LGPL と矛盾するライセンスを持つソフトと統合したい場合は、作者に連絡して許可を求めること
15. 16. 無保証について
「java-ja 第1.9.2回 チキチキ ライセンスって何ですか?」ってのに参加してみて、LGPL v2.1 を改めて読み直す気になった。御存知の通り、LGPL および GPL の最新バージョンは 3 である。なぜ今 version 2.1 なのかといえば、これが LGPL v3 を理解する助けになるからである。
僕の理解を要約すると以下の通りである
- 「ライブラリを改変して再配布する」場合はGPLまたはLGPLで公開する必要がある
- 静的リンク、または(LLのような)リンク不要なライブラリの組み合わせを再配布する場合は、ソースコードまたはオブジェクトコードを公開する必要がある
- 動的リンクの場合は組み合わせたものを同時に配布しない限りLGPLの埒外である。同時に再配布する場合は 6. にある諸条件を守ること(ライブラリと組み合わせたソフトのソースコードを公開する必要はない)
----
以下はそのメモであるが、僕は法律家ではないので、勝手な個人の解釈であることをお断りしておく。また、本エントリの内容にはいかなる保証もしない。
----
- Preamble(はじめに)の部分
殆どはLGPL v2 の哲学についての宣言的な部分である。一応ちゃんと読もう。しかし、「ライブラリを基にした著作物」と「ライブラリを利用する著作物」の区別を述べた以下だけは滅茶苦茶重要である。日本語訳の該当部分を引用する。
・「ライブラリを基にした著作物」と「ライブラリを利用する著作物」の違いによく注意してください。前者はライブラリから採られたコードを含んでおり、一方 後者は実行するためにライブラリと結合されなければならないということを意味しています。
----
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION(複製、頒布、改変に関する条件と制約) の部分
0. 「ライブラリ」と「ソースコード」の定義、およびこのライセンスの適用範囲について述べている。『複製や頒布、改変』に適用されることが重要
1. コピーの配布条件。以下の二つを両方満たす必要がある
-- 適切な著作権表示と無保証であることを目立つよう適切に記載する
-- LGPL v2および無保証に触れた告知すべてをそのまま残す。つまり、LGPL v2 全文の複製物を『ライブラリ』と共に頒布する
2. 「ライブラリを基にした著作物」の配布条件。ライブラリを改変したり、ライブラリを取り込んだコードを作成した場合すべてに当てはまる。以下をすべて満たす必要がある
-- 上記 1. を守ること
-- 改変されたものをソフトウェアライブラリの状態にすること
-- 改変されたファイルに改変した旨を示すこと
-- LGPL v2 を適用すること
-- 改変した部分がアプリケーションのコードを含んでいた場合、それがなくても動くように努力すること
3. 「ライブラリ」には GPL を適用してよい
4. ライブラリ単体のオブジェクトコードの配布条件。以下の二つを両方満たす必要がある。
ライブラリとリンク・組み合わせ・結合された結果生成されるものについては、5. と 6. で述べられている
- 上記 1. と 2. の条件を両方満たすこと
- ソースコードを添付するか、そのありかを示すこと
5. 「ライブラリを利用する著作物」の保護範囲
ライブラリとリンクすることによって動作するプログラムは「ライセンスを利用する著作物」と呼ばれ、それ単体では LGPL は適用されない。しかし、LGPLが適用されるプログラムと組み合わせて **一緒に** 著作物を再配布する場合は、静的・動的リンクを問わず 以下 6. の適用を受ける
ただし、以下の場合は除く
- ライブラリの「数字のパラメタやデータ構造のレイアウト、アクセス機構または小さなマクロや小さなインライン関数(長さが 10行かそれ以下)のみ」を利用している場合
※この条項だけだといかにもリンカがリンクした場合のみに以下の 6. が適用されるかのように読めるが、6. では「結合(Combine)」とも書いているので、それに限らない。つまり、LGPLな PHP のライブラリをアプリケーションと混ぜる場合も以下の 6. が適用される(と勝手に解釈している)
6. ライブラリと結合(リンク、または組み合わせた)した著作物の配布条件
LGPLで保護されたライブラリと組み合わせて著作物を一緒に配布する場合には、(静的・動的リンクであるかどうかを問わず)以下をすべてを守る必要がある
- 配布する著作物の改変およびリバースエンジニアリングを禁止してはいけない
- ライブラリが著作物の中で用いられていることと、それがLGPLで保護されていることを告知する
- LGPLライセンスのコピーを一部提供する
- 著作物が実行時に著作権表示を表示するならば、その中にライブラリ』の著作権表示を含め、そのうえでこのライセンスのコピーの在処を示す参照文も含める
かつ、以下のうちの **いずれか** を満たす必要がある
-- ライブラリの(改変点をすべて含めた)完全なソースコードか、オブジェクトコードを出すことで、実行形式が再生成できるようにする。(静的リンク、またはLLのライブラリとの組み合わせの場合はここが該当する)
-- 著作物に上記で指定されたものを、手数料と引き換えに提供することを書面で知らせる
-- 上記で指定されたものへの適切なアクセス手段を提供する
-- 上記で指定されたものをユーザーに適切に送ったか、受け取っていることを確認する
--『ライブラリ』とのリンクに適切な共有ライブラリ機構を用いる(動的リンクの場合の配布条件)
「ライブラリを利用する著作物」は、それから実行形式を複製する際必要なデータまたはユーティリティプログラムをすべて含めた形で頒布されなければならないが、その中に、実行形式が実行されるオペレーティングシステムの主要な部分(コンパイラやカーネル等)と通常一緒に(ソースかバイナリ形式のどちらかで)頒布されるものすべてを含んでいる必要はない
7. ライブラリを基にした著作物(ライブラリから採られたコードを含んだもの)と組み合わせた場合の配布条件
- それぞれを分離した配布を許可すること
- ライブラリを基にした著作物の完全なコピーを同じ条件で添付する
- ライブラリを基にした著作物であるという事実と、それのありかを知らせる
8. このライセンスに定めた行為以外の複製や改変、サブライセンス、リンク、あるいは頒布を禁止する
9. このライセンスによって保護されたライブラリを改変、再配布することは、このライセンスを受け入れたことと同等と見なす
10. コピーレフト規定。再配布するたびに、それを受け取った人はこのライセンスで得られる権利と同等の権利を得る(強制する必要はない)
11. 特許侵害があった場合でもこのライセンスの制約は免除されない。
12. 他の著作権や特許によってこのライセンスと矛盾する制約を加えている地域を排除して配布できる
13. FSF は新しい LGPL を発表できる。その場合でも、バージョン指定か、or later を選択できる
14. LGPL と矛盾するライセンスを持つソフトと統合したい場合は、作者に連絡して許可を求めること
15. 16. 無保証について
2010/09/07
2010/09/01
Tweet This! button on blogger
http://thoughtsomething.blogspot.com/2009/01/understanding-blogger-template-2.html
Blogger の欠点の一つは、何か細かいカスタマイズを加えようと思ったときに Blogger のXHTMLにある名前空間の内容を多かれ少なかれ把握しないといけない点である(本当に把握したいと思った暇人は上記のリンクを見ると良いよ!)。このブログには はてなスター や はてなブックマーク、Delicious のボタンがついているが、はじめのボタンをつけるときは御多分に漏れずやたら苦労した。
Tweet This! ボタンを付けるには、以下の手順を踏むと良い。
※ クラシックテンプレートでは動作しないので注意!
1. blogger にログインする
2. ページ右上の「デザイン」リンクをクリック
3. 「HTMLの編集」リンクをクリック
4. 「ウィジェットのテンプレートを展開」のチェックボックスにチェックを入れ、テンプレートの全ソースを展開する
5. 以下のタグを適度に埋め込む。style や img タグの src 部分、そしてtwitterへのリンク先の文言は適度に調整すると良い
※ 大した内容なんてありゃしないのに Tweet This! ボタンをつけようと思ったのはこの記事がきっかけである。
[ Update September 20th 16:06 JST by m ]
img タグに width と height が指定されていなかったのでアイコンが巨大になっていたのを修正
Blogger の欠点の一つは、何か細かいカスタマイズを加えようと思ったときに Blogger のXHTMLにある名前空間の内容を多かれ少なかれ把握しないといけない点である(本当に把握したいと思った暇人は上記のリンクを見ると良いよ!)。このブログには はてなスター や はてなブックマーク、Delicious のボタンがついているが、はじめのボタンをつけるときは御多分に漏れずやたら苦労した。
Tweet This! ボタンを付けるには、以下の手順を踏むと良い。
※ クラシックテンプレートでは動作しないので注意!
1. blogger にログインする
2. ページ右上の「デザイン」リンクをクリック
3. 「HTMLの編集」リンクをクリック
4. 「ウィジェットのテンプレートを展開」のチェックボックスにチェックを入れ、テンプレートの全ソースを展開する
5. 以下のタグを適度に埋め込む。style や img タグの src 部分、そしてtwitterへのリンク先の文言は適度に調整すると良い
6. 「プレビュー」ボタンを押してエラーが出ないことを確認したら、「テンプレートを保存」をクリックする
<a expr:href='"http://twitter.com/home?status=「" + data:post.title +
"%20" + data:post.url + "」%20via%20@mumumu"'><img alt='Tweet This!'
src='http://twitter.com/favicon.ico' width='20' height='20' style='margin:0;padding:0;border:none;' title='Tweet this!'/></a>
※ 大した内容なんてありゃしないのに Tweet This! ボタンをつけようと思ったのはこの記事がきっかけである。
[ Update September 20th 16:06 JST by m ]
img タグに width と height が指定されていなかったのでアイコンが巨大になっていたのを修正
Naoya Ito left Hatena
http://d.hatena.ne.jp/naoya/20100831/1283249089
はてなCTOの伊藤さんが退職された。暫くは「えええー」という驚きだけしかなかった。
『退職の理由を聞かれます。しかし、これといって"これが退職の理由"という主だったものはありません。』と述べておられるが、はてなが成長して「組織になった」(これにも複数の意味が含まれるとは思うが)という部分が一番大きいんだろうなと勝手に思い、大規模システムの屋台骨を支えてきたエンジニアが様々なところから去っていく理由に思いを致す次第である。
これまで積み上げたものをひっ下げて彼がどこに向かうのか、非常に楽しみだ。自分にとって心からそう思える人は多くない。
ともあれ、本当にお疲れ様でした。
はてなCTOの伊藤さんが退職された。暫くは「えええー」という驚きだけしかなかった。
『退職の理由を聞かれます。しかし、これといって"これが退職の理由"という主だったものはありません。』と述べておられるが、はてなが成長して「組織になった」(これにも複数の意味が含まれるとは思うが)という部分が一番大きいんだろうなと勝手に思い、大規模システムの屋台骨を支えてきたエンジニアが様々なところから去っていく理由に思いを致す次第である。
これまで積み上げたものをひっ下げて彼がどこに向かうのか、非常に楽しみだ。自分にとって心からそう思える人は多くない。
ともあれ、本当にお疲れ様でした。
2010/08/28
HTML5 de face recognition
https://developer.mozilla.org/ja/Canvas_tutorial
タイトルだけ書いて、とてつもなく大仰なタイトルだよなオイと思った(藁
要するに下記のようなことをJSでできないの? と聞かれてHTML5(っぽいもの。validではない)でやってみただけです。ハイ。

canvasって HTML5 の丁度いい入門だと思う。何ができるのって人はこのエントリのはじめに張った MDCのリンクを是非見ると良いと思います。また、IE で下記のコードを動かすには explorercanvas が必要です。
タイトルだけ書いて、とてつもなく大仰なタイトルだよなオイと思った(藁
要するに下記のようなことをJSでできないの? と聞かれてHTML5(っぽいもの。validではない)でやってみただけです。ハイ。

canvasって HTML5 の丁度いい入門だと思う。何ができるのって人はこのエントリのはじめに張った MDCのリンクを是非見ると良いと思います。また、IE で下記のコードを動かすには explorercanvas が必要です。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<script type="text/javascript" | |
src="http://code.jquery.com/jquery-1.4.2.min.js"></script> | |
<!-- | |
<script type="text/javascript" src="./excanvas.js"></script> | |
--> | |
<script type="text/javascript"> | |
jQuery(document).ready(function() { | |
var canvas = document.getElementById('aoi_miyazaki_canvas'); | |
if (canvas.getContext) { | |
var img = new Image(); | |
img.src = | |
'http://img.f.hatena.ne.jp/images/fotolife/g/geinou_pics/20080106/20080106234351.jpg'; | |
img.onload = function() { | |
var ctx = canvas.getContext('2d'); | |
ctx.drawImage(img, 0, 0); | |
ctx.strokeStyle = "#ff0000"; | |
ctx.beginPath(); | |
ctx.moveTo(100, 20); | |
ctx.lineTo(300, 20); | |
ctx.lineTo(300, 280); | |
ctx.lineTo(100, 280); | |
ctx.lineTo(100, 20); | |
ctx.stroke(); | |
} | |
} | |
}); | |
</script> | |
</head> | |
<body> | |
<div id="aoi_miyazaki"> | |
<canvas id="aoi_miyazaki_canvas" width="372" height="450"></canvas> | |
</div> | |
</body> | |
</html> |
Tags:
programming
2010/08/26
Naritake
http://twitter.com/mumumu/status/21906944299
http://r.tabelog.com/chiba/A1202/A120204/12000153/

錦糸町に新しくできたラーメン屋が俺的にヒットだったので暫く通う予定と呟いたら、どこだよそれ的な反応がいくつかあったので記録しておく。
「なりたけ」というラーメン屋で、津田沼と本八幡に既にチェーンがあり、新たに最近出店したらしい。物凄くこってり味なので、それ系が好みの人は行ってみると良い。
自分は味噌味が好きなのでみそネギラーメンを頼んでいる(写真)。だが、大抵の人には味が濃いはずなので調整スープが無料で提供されている。この店で食べるときは一口味見してみて濃いようならそれを使うことを考えた方が良い。
場所は以下の通り。JR総武線錦糸町駅北口から徒歩2分。営業時間:11:30~14:30 and 17:30-21:30
定休日:水曜日、第3火曜日。
大きな地図で見る
http://r.tabelog.com/chiba/A1202/A120204/12000153/

錦糸町に新しくできたラーメン屋が俺的にヒットだったので暫く通う予定と呟いたら、どこだよそれ的な反応がいくつかあったので記録しておく。
「なりたけ」というラーメン屋で、津田沼と本八幡に既にチェーンがあり、新たに最近出店したらしい。物凄くこってり味なので、それ系が好みの人は行ってみると良い。
自分は味噌味が好きなのでみそネギラーメンを頼んでいる(写真)。だが、大抵の人には味が濃いはずなので調整スープが無料で提供されている。この店で食べるときは一口味見してみて濃いようならそれを使うことを考えた方が良い。
場所は以下の通り。JR総武線錦糸町駅北口から徒歩2分。営業時間:11:30~14:30 and 17:30-21:30
定休日:水曜日、第3火曜日。
大きな地図で見る
Tags:
gourmet
2010/06/10
mystery program
Perlって何でもできるよね。いわゆる6曜を計算してくれる実装があったのがPerlだけだったんだよね。DateTimeも便利だよね。モダンPerlには必須だよね (一行独白
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
# | |
# marriage paper submit date calculation program. | |
# usage: perl marriage_date_calc.pl [year] [month] [date] | |
# | |
use strict; | |
use warnings; | |
# | |
# 6-you calc program | |
# get it from http://www3.biwako.ne.jp/~nobuaki/qreki/ | |
# | |
use qreki; | |
use DateTime; | |
use utf8; | |
my $year = $ARGV[0]; | |
my $month = $ARGV[1]; | |
my $day = $ARGV[2]; | |
my $from = DateTime->now( time_zone => 'Asia/Tokyo' ); | |
my $to = DateTime->new( | |
time_zone => 'Asia/Tokyo', | |
year => $year, | |
month => $month, | |
day => $day, | |
hour => 0, | |
minute => 0, | |
second => 0, | |
); | |
my $taian_days = []; | |
my $count = 0; | |
while (1) { | |
my $tmp_year = $from->year; | |
my $tmp_month = $from->month; | |
my $tmp_day = $from->day; | |
if (qreki::get_rokuyou($tmp_year, $tmp_month, $tmp_day) eq 0) { | |
$taian_days->[$count] = [$tmp_year, $tmp_month, $tmp_day]; | |
$count++; | |
} | |
last if ($tmp_year eq $year | |
&& $tmp_month eq $month | |
&& $tmp_day eq $day); | |
$from->add(days => 1); | |
} | |
my $random_count = int(rand($count)); | |
print "marriage paper submit date is .... "; | |
print $taian_days->[$random_count][0] . "/"; | |
print $taian_days->[$random_count][1] . "/"; | |
print $taian_days->[$random_count][2] . "\n"; |
Tags:
programming
2010/06/05
migration from ftp to [sftp|scp]
俺は自宅で運用しているサーバを数人の友人に貸しているのだが、その一部のユーザのWeb更新用にFTPを開放していた。
そのユーザのひとりがいわゆる Gumblar にやられてWebスペースが汚染される事態が起きた。FTPユーザはchrootされていたとはいえ、流石にこれ以上FTPを開放し続けるのはユーザの便宜にならんだろうと考え、scp|sftp に移行することにした。
サーバの運用ポリシーから導き出された彼らに対する要件は以下の3点である
1. FTPを使っていたユーザーに SSH のシェルログイン権限は与えるわけにいかない
2. 1. のユーザには chroot は必須
3. SSH 経由でログインするにはSSH2の公開鍵を必要とするが、FTPを使っていたユーザにこの方式は合わないのでパスワード認証を使う必要がある
これらの要件と、SSHのシェルログイン権限があるユーザーを両立させなければならない。はたと困った末、rssh を使い、シェルログイン権限があるユーザとFTPを使っていたユーザーは別々のsshdを起動して区別することにした。
----
rssh のインストールは非常に簡単で、Debian lenny なら以下のコマンドでよい。
# aptitude install rssh
インストールしたら mkchroot.sh を chroot先のルートのパスを指定して実行する。ここでは /home/chroot をユーザのchroot先として指定している。実行するとchroot先で必要な必要最小限のファイルがコピーされる
# cd /usr/share/doc/rssh/examples
# chmod +x mkchroot.sh
# ./mkchroot.sh /home/chroot
次に /etc/rssh.conf を編集する。先頭が # になっていない部分はすべて重要である。user= の行で、実際に rssh が許可するコマンドをユーザーごとに編集できる。ここでは scp と sftpを許可し、chroot_path で、mkchroot.sh で指定したパスを指定する user= の行では、実際に scp, sftp でchrootさせるユーザの設定を行う。詳細はマニュアルおよび /etc/rssh.conf のコメントを参照のこと
rssh は rssh_chroot_helper と呼ばれるヘルパを通してアクセスをコントロールしている。よってrsshユーザーがこれをroot権限で一時的に実行できる必要がある。よって以下のコマンドでsetUIDする。こうしないと ログインが失敗し、syslogには "Operation not permitted" というログが残る
# chmod u+s /usr/lib/rssh/rssh_chroot_helper
chroot先には /home/chroot を指定したが、ここにはユーザー情報を格納した passwd ファイルが必要だ。それを /etc/passwd から /home/chroot/etc/passwd にコピーし、最低限のユーザーに絞る。今回は例として以下のような感じにした。chroot のホームディレクトリは、以下の指定だと /home/chroot/home/chrootuser となる。あらかじめ作成しておくこと。
rssh:x:1003:1003::/home/rssh:/bin/false
chrootuser:x:508:508::/home/chrootuser:/usr/bin/rssh
そして /etc/passwd のchrootuser の中身を以下のように指定する。最後のシェルのパスが通常のユーザーでは /bin/bash 等となっているところを、 /usr/bin/rsshに変更していることと、ホームディレクトリを /home/chroot 以下の /home/chrootuser、つまり「/home/chroot/home/chrootuser」としていることに注意
chrootuser:x:508:508::/home/chroot/home/chrootuser:/usr/bin/rssh
あとは、この chrootuser が sshd からアクセスを許可されていれば sftp, scp ができるようになるはずだ。俺の場合はこのユーザーがパスワード認証できる必要があったので、/etc/ssh/sshd_config ファイルを /etc/ssh/sshd_config_passauth ファイルにコピーし、ポート番号や認証の変更などを行い、以下のようにして起動した
# /usr/sbin/sshd -f /etc/ssh/sshd_config_passauth
その際、sshd_confg_passauth には、以下の設定を記して他のユーザーと隔離するのが重要である
AllowUsers chrootuser
----
以上の作業を経て、ようやく vsftpd を止めることができた。ある意味面倒だが、既存の公開鍵認証とそれ以外のユーザーを隔離できただけでも十分な意義があると言えよう。
そのユーザのひとりがいわゆる Gumblar にやられてWebスペースが汚染される事態が起きた。FTPユーザはchrootされていたとはいえ、流石にこれ以上FTPを開放し続けるのはユーザの便宜にならんだろうと考え、scp|sftp に移行することにした。
サーバの運用ポリシーから導き出された彼らに対する要件は以下の3点である
1. FTPを使っていたユーザーに SSH のシェルログイン権限は与えるわけにいかない
2. 1. のユーザには chroot は必須
3. SSH 経由でログインするにはSSH2の公開鍵を必要とするが、FTPを使っていたユーザにこの方式は合わないのでパスワード認証を使う必要がある
これらの要件と、SSHのシェルログイン権限があるユーザーを両立させなければならない。はたと困った末、rssh を使い、シェルログイン権限があるユーザとFTPを使っていたユーザーは別々のsshdを起動して区別することにした。
----
rssh のインストールは非常に簡単で、Debian lenny なら以下のコマンドでよい。
# aptitude install rssh
インストールしたら mkchroot.sh を chroot先のルートのパスを指定して実行する。ここでは /home/chroot をユーザのchroot先として指定している。実行するとchroot先で必要な必要最小限のファイルがコピーされる
# cd /usr/share/doc/rssh/examples
# chmod +x mkchroot.sh
# ./mkchroot.sh /home/chroot
次に /etc/rssh.conf を編集する。先頭が # になっていない部分はすべて重要である。user= の行で、実際に rssh が許可するコマンドをユーザーごとに編集できる。ここでは scp と sftpを許可し、chroot_path で、mkchroot.sh で指定したパスを指定する user= の行では、実際に scp, sftp でchrootさせるユーザの設定を行う。詳細はマニュアルおよび /etc/rssh.conf のコメントを参照のこと
logfacility = LOG_USER
# Leave these all commented out to make the default action for rssh to lock
# users out completely...
allowscp
allowsftp
# set the default umask
umask = 022
# If you want to chroot users, use this to set the directory where the root of
# the chroot jail will be located.
#
# if you DO NOT want to chroot users, LEAVE THIS COMMENTED OUT.
#
# You can quote anywhere, but quotes not required unless the path contains a
# space... as in this example.
#chrootpath = "/usr/local/my chroot"
chrootpath = /home/chroot
##########################################
# EXAMPLES of configuring per-user options
#....
user=chrootuser:022:00011:"/home/chroot" # scp, sftp with chroot
rssh は rssh_chroot_helper と呼ばれるヘルパを通してアクセスをコントロールしている。よってrsshユーザーがこれをroot権限で一時的に実行できる必要がある。よって以下のコマンドでsetUIDする。こうしないと ログインが失敗し、syslogには "Operation not permitted" というログが残る
# chmod u+s /usr/lib/rssh/rssh_chroot_helper
chroot先には /home/chroot を指定したが、ここにはユーザー情報を格納した passwd ファイルが必要だ。それを /etc/passwd から /home/chroot/etc/passwd にコピーし、最低限のユーザーに絞る。今回は例として以下のような感じにした。chroot のホームディレクトリは、以下の指定だと /home/chroot/home/chrootuser となる。あらかじめ作成しておくこと。
rssh:x:1003:1003::/home/rssh:/bin/false
chrootuser:x:508:508::/home/chrootuser:/usr/bin/rssh
そして /etc/passwd のchrootuser の中身を以下のように指定する。最後のシェルのパスが通常のユーザーでは /bin/bash 等となっているところを、 /usr/bin/rsshに変更していることと、ホームディレクトリを /home/chroot 以下の /home/chrootuser、つまり「/home/chroot/home/chrootuser」としていることに注意
chrootuser:x:508:508::/home/chroot/home/chrootuser:/usr/bin/rssh
あとは、この chrootuser が sshd からアクセスを許可されていれば sftp, scp ができるようになるはずだ。俺の場合はこのユーザーがパスワード認証できる必要があったので、/etc/ssh/sshd_config ファイルを /etc/ssh/sshd_config_passauth ファイルにコピーし、ポート番号や認証の変更などを行い、以下のようにして起動した
# /usr/sbin/sshd -f /etc/ssh/sshd_config_passauth
その際、sshd_confg_passauth には、以下の設定を記して他のユーザーと隔離するのが重要である
AllowUsers chrootuser
----
以上の作業を経て、ようやく vsftpd を止めることができた。ある意味面倒だが、既存の公開鍵認証とそれ以外のユーザーを隔離できただけでも十分な意義があると言えよう。
2010/06/01
Realforce 91UBK

東プレのRealforce 91UBKを買った。「HHKは煩いし強い打鍵にも弱い」とのたまう変わり者の私が今度はこれに挑戦する。
恐ろしく打鍵感が軽く、気持ちよい。よって強く打つ必要がない。よって、しばらくは俺の打鍵圧力の下でもこいつは生きていけるだろう。ただ、重い(1.2kg)のだけは如何ともし難いところか。
雷のような打鍵音からさざ波のような打鍵音へ!(`ー´) と言ったら皆さん信じるだろうか。
Tags:
hardware
2010/05/27
nearly eat and run
危うく食い逃げするところだった。経緯は以下の通りである。
----
某所で外食していた。席は自動ドアのすぐそばである。食い終わった後、キャパシティプランニングを読みつつ10分くらい考え事をしていた。頭が一杯になっていたのかそのまま自動ドアを開けて出ようとして店員に呼び止められてしまった。勿論料金は払ったのだが、バツが悪すぎる。しばらく某所には行けそうにない。
----
教訓:考え事をしながら外食するのはやめましょう<自分
おまけ:キャパシティプランニングはちゃんとやったことがない人には良本だと思います。まる。
----
某所で外食していた。席は自動ドアのすぐそばである。食い終わった後、キャパシティプランニングを読みつつ10分くらい考え事をしていた。頭が一杯になっていたのかそのまま自動ドアを開けて出ようとして店員に呼び止められてしまった。勿論料金は払ったのだが、バツが悪すぎる。しばらく某所には行けそうにない。
----
教訓:考え事をしながら外食するのはやめましょう<自分
おまけ:キャパシティプランニングはちゃんとやったことがない人には良本だと思います。まる。
2010/05/26
Konversation 1.3 beta1
http://konversation.kde.org/
私がお気に入りのKDE向けIRCクライアントである Konversation のベータ版がリリースされた。1.2.3 からはDCC周辺の改善やnotification向けの機能が加わっているのが大きなところだが、KDE 4.3 と Qt 4.5 が required となったことで、名実ともにKDE4向けのアプリケーションとなった。
Kubuntu 10.04 でgit版をビルドしたところ、概ね支障なく機能しているようだ。
ただ、Heinがリリースして3分で気付いたというバグ がこのベータ版には含まれている。「タブを閉じる」ボタンの設定が反映されず常に有効になってしまうというものだが、これを避けたい人はgitからソースコードを持ってきてビルドした方が良いだろう。
----
mumumu_n< 1.3beta1 works fine for me.
mumumu_n< look forward to finding a new bug. :)
Sho_> mumumu_n: I found one like three minutes after releasing the beta
Sho_> you can imagine how that annoyed me
mumumu_n< Sho_: is it already fixed? I got konvi's source from git three hours ago.
Sho_> yeah
mumumu_n< lol. I can't find the fixed one.
Sho_> mumumu_n: http://gitorious.org/konversation/konversation/commit/aa233e3b66b675c62a03f1bce793e67b87b732b9
mumumu_n< Sho_: That's annoying. I could find it if i did not use git master.
Sho_> really stupid bug
私がお気に入りのKDE向けIRCクライアントである Konversation のベータ版がリリースされた。1.2.3 からはDCC周辺の改善やnotification向けの機能が加わっているのが大きなところだが、KDE 4.3 と Qt 4.5 が required となったことで、名実ともにKDE4向けのアプリケーションとなった。
Kubuntu 10.04 でgit版をビルドしたところ、概ね支障なく機能しているようだ。
ただ、Heinがリリースして3分で気付いたというバグ がこのベータ版には含まれている。「タブを閉じる」ボタンの設定が反映されず常に有効になってしまうというものだが、これを避けたい人はgitからソースコードを持ってきてビルドした方が良いだろう。
----
mumumu_n< 1.3beta1 works fine for me.
mumumu_n< look forward to finding a new bug. :)
Sho_> mumumu_n: I found one like three minutes after releasing the beta
Sho_> you can imagine how that annoyed me
mumumu_n< Sho_: is it already fixed? I got konvi's source from git three hours ago.
Sho_> yeah
mumumu_n< lol. I can't find the fixed one.
Sho_> mumumu_n: http://gitorious.org/konversation/konversation/commit/aa233e3b66b675c62a03f1bce793e67b87b732b9
mumumu_n< Sho_: That's annoying. I could find it if i did not use git master.
Sho_> really stupid bug
Not PCI2USB but USB2PCI ?
http://earthsoft.jp/PT/index.html
最近TVキャプチャボードである PT2 を手に入れた。Linuxでのハックには丁度いいおもちゃである。
それをPCIに挿してLinuxドライバ入れてわーいってやったところまではいいのだが、いかんせんこれだと家でしか作業ができない。
このとき、ノートにUSB経由でPCIバスを増設できるハードとかないかなぁ、と一瞬思い立った。
世の中には PCIカードからUSBのポートを増設する拡張ボードは星の数ほど存在する(一例)のに、その逆はないのね、と思ったり。
※ そもそも PCI-Express な御時勢の今、PCIなんて(ry というツッコミは禁止
最近TVキャプチャボードである PT2 を手に入れた。Linuxでのハックには丁度いいおもちゃである。
それをPCIに挿してLinuxドライバ入れてわーいってやったところまではいいのだが、いかんせんこれだと家でしか作業ができない。
このとき、ノートにUSB経由でPCIバスを増設できるハードとかないかなぁ、と一瞬思い立った。
世の中には PCIカードからUSBのポートを増設する拡張ボードは星の数ほど存在する(一例)のに、その逆はないのね、と思ったり。
※ そもそも PCI-Express な御時勢の今、PCIなんて(ry というツッコミは禁止
Tags:
hardware
2010/02/26
Remember, Devfest 2010
http://sites.google.com/site/devfest2010japan/
Googleが公開しているあらゆるソフトウェアスタックを扱うイベント。参加機会を貰ったのでいかなくちゃね。と Reminder。この日については昨今の忙しさを度外視するつもりである。
Googleが公開しているあらゆるソフトウェアスタックを扱うイベント。参加機会を貰ったのでいかなくちゃね。と Reminder。この日については昨今の忙しさを度外視するつもりである。
2010/02/17
2010/01/13
pgrep, pkill
http://www.freebsd.org/cgi/man.cgi?query=pgrep&apropos=0&sektion=0&manpath=FreeBSD+8.0-RELEASE&format=html
http://www.linux.or.jp/JM/html/procps/man1/pkill.1.html
その昔、俺が大学に入って間もないときは「名前にマッチするプロセスに対して一気にシグナルを送る」というのは意外に大変だった。当時は以下のような長ったらしいことをしていたので、今でもそうする癖がついている
しかし今やこんなことは無用だ。以下のように1コマンドで可能だ。名前にマッチするプロセスIDを探すのだってpgrep一発である。良い時代になったものだ(´ー`; )
ただ、pgrep, pkill ともに環境依存ではある。Solaris, Linux, FreeBSD にあることは確認しているが、drryたんによると標準の Mac OS X には存在しないようだ。
#どうも未だに癖が抜けないのでjournal
#killallはどうなのって言われそうだけど、、
http://www.linux.or.jp/JM/html/procps/man1/pkill.1.html
その昔、俺が大学に入って間もないときは「名前にマッチするプロセスに対して一気にシグナルを送る」というのは意外に大変だった。当時は以下のような長ったらしいことをしていたので、今でもそうする癖がついている
ps -wef | grep i-want-to-kill-this-process | awk '{print $2}' | xargs -n 1 kill -9
しかし今やこんなことは無用だ。以下のように1コマンドで可能だ。名前にマッチするプロセスIDを探すのだってpgrep一発である。良い時代になったものだ(´ー`; )
pkill -u mumumu i-want-to-kill-this-process
ただ、pgrep, pkill ともに環境依存ではある。Solaris, Linux, FreeBSD にあることは確認しているが、drryたんによると標準の Mac OS X には存在しないようだ。
#どうも未だに癖が抜けないのでjournal
#killallはどうなのって言われそうだけど、、
2010/01/02
poss-ja support page added
http://producingoss.com/ja/ja-support.html
「オープンソースソフトウェアの育て方」のサポートページ作りたいね、と高木さんと話しつつ放置していたら、Karlから案内のメールが来た。丁度いいタイミングなので追加しておいた(一行独白
「オープンソースソフトウェアの育て方」のサポートページ作りたいね、と高木さんと話しつつ放置していたら、Karlから案内のメールが来た。丁度いいタイミングなので追加しておいた(一行独白
Tags:
memo,
monologue,
translation
2010/01/01
[memo] Looking up the past timeline
Twitterのタイムラインを調べて、ちょっとしたワードにマッチしたものを削除する処理が必要になった。さすがにWebインターフェイスから手動で調べるのはやってられない。
Net::Twitter楽だよね。例外処理が微妙にダサイと感じるのはPerlそのものの問題なので置いといて、と。ひっかかったのは マルチバイト文字の正規表現を書くときは、Perlの内部フォーマットである UTF-8フラグが立った状態にしないといけない、という点くらいだろうか。
俺別にPerlが嫌いなわけじゃないんだね、と改めて再認識した。
[ Update January 2nd 20:36:55 JST by m ]
例外処理がちょっとダサイ点については Try::Tiny がちょっとカッコいい!(`ー´)
tokuhirom さめ情報ありがちょーヽ(´ー`。)ノ
Net::Twitter楽だよね。例外処理が微妙にダサイと感じるのはPerlそのものの問題なので置いといて、と。ひっかかったのは マルチバイト文字の正規表現を書くときは、Perlの内部フォーマットである UTF-8フラグが立った状態にしないといけない、という点くらいだろうか。
俺別にPerlが嫌いなわけじゃないんだね、と改めて再認識した。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use strict; | |
use warnings; | |
use Net::Twitter; | |
use Encode; | |
binmode(STDOUT, ":utf8"); | |
my $ng_word_regex = decode("utf-8", "XXXXX"); | |
my $sleep_time = 60; | |
my $nt = Net::Twitter->new( | |
traits => [qw/API::REST/], | |
username => 'username_or_mail_address', | |
password => 'user_password' | |
); | |
foreach my $i (1 .. 255) { | |
eval { | |
my $result = $nt->user_timeline({ page => $i }); | |
print "digging my timeline page $i ....\n\n"; | |
sleep($sleep_time); | |
foreach my $tweet (@$result) { | |
if ($tweet->{text} =~ /$ng_word_regex/) { | |
print "\n"; | |
print "NG Word Detected! Do you want to delete this tweet? \n"; | |
print "detected tweet is ... -> " . $tweet->{text} . " (y/n):"; | |
if (<STDIN> =~ /y/i) { | |
eval { | |
my $status = $nt->destroy_status($tweet->{id}); | |
}; | |
if (my $err = $@) { | |
print "error occured deleting tweet ... " . $err->error . "\n"; | |
} else { | |
print "deleted statues " . $tweet->{id} . "\n\n"; | |
sleep($sleep_time); | |
} | |
} else { | |
print "inputted 'N' ... ignoring. \n\n"; | |
} | |
} | |
} | |
}; | |
if (my $err = $@) { | |
print "error occured when getting user timeline ... " . $err->error . "\n"; | |
} | |
} |
[ Update January 2nd 20:36:55 JST by m ]
例外処理がちょっとダサイ点については Try::Tiny がちょっとカッコいい!(`ー´)
tokuhirom さめ情報ありがちょーヽ(´ー`。)ノ
use Try::Tiny;
try {
die "error occured!";
} catch {
warn "caught error: $_";
}
Tags:
memo,
programming
Default answer 'yes' in CPAN?
http://d.hatena.ne.jp/Craftworks/20090415/1239762931
Perl のCPANモジュールをインストールするときに非常にうざいと感じるのが、依存モジュールをインストールする場合に以下のように聞かれる場合があることだ
これにデフォルトで 'yes' と答える方法がはじめのリンクでは複数紹介されているが、PERL_AUTOINSTALL='--defaultdeps' は効かなかったので、結局 yesコマンドを使っている。Perl Wizardの方々はこうしてらっしゃるのかしらん(´ー`; )
[ Update January 2nd 20:21:33 JST by m ]
sudo perl -MCPAN -e shell
CPAN> o conf prerequisites_policy follow
CPAN> o conf commit
tokuhirom さめの教えに従って上記を実行したら自動で入ったす!
これからはこうしておこう(`ー´)
Perl のCPANモジュールをインストールするときに非常にうざいと感じるのが、依存モジュールをインストールする場合に以下のように聞かれる場合があることだ
---- Unsatisfied dependencies detected during ----
---- MIYAGAWA/XML-Atom-0.37.tar.gz ----
XML::LibXML [requires]
XML::XPath [requires]
Shall I follow them and prepend them to the queue
of modules we are processing right now? [yes]
これにデフォルトで 'yes' と答える方法がはじめのリンクでは複数紹介されているが、PERL_AUTOINSTALL='--defaultdeps' は効かなかったので、結局 yesコマンドを使っている。Perl Wizardの方々はこうしてらっしゃるのかしらん(´ー`; )
[ Update January 2nd 20:21:33 JST by m ]
sudo perl -MCPAN -e shell
CPAN> o conf prerequisites_policy follow
CPAN> o conf commit
tokuhirom さめの教えに従って上記を実行したら自動で入ったす!
これからはこうしておこう(`ー´)
Tags:
perl,
programming
New Year 2010
あけましておめでとうございます! 本年も宜しくお願い致します。
今年は迷いをなくし、もっと低レベルなコードで成果を出せたよと言える年にしたいです。それだけですね(`ー´)
今年のタグ: code, C, C++, assembler, life, marriage, hardware, translation, etc
今年は迷いをなくし、もっと低レベルなコードで成果を出せたよと言える年にしたいです。それだけですね(`ー´)
今年のタグ: code, C, C++, assembler, life, marriage, hardware, translation, etc
Tags:
life,
programming
登録:
投稿 (Atom)