Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2007-08-30 (Thu)

かがみ越しにページを見るときのブックマークレット

床屋にある時計と同じです。

javascript:(function(){document.body.innerHTML=document.body.innerHTML.replace(/>/g,">\u202E")})()

2007-08-28 (Tue)

でかいタッチパッド

こんなの。

f:id:hirose31:20070828024507j:image

全面、タッチパッド。どどーんと。

ここに両手をおいて、マウスジェスチャー的、iPhoneのフィンガーなんとか的に指先を動かして、つまんだり、わきにどけたり、はじっこにつきとばしたり。

小指ではじっこをタップすると、キーボードモードになる。キーボードモードになると、発光してキー配列がでてくる。投影式のバーチャルキーボードみたいな感じで。

どうだろ。MATRIXに出てきたアレみたいな感じ。体感的に気持ち良さそうな気がするなー


あと、キーの隙間にねこの毛が入り込まないのが◎

2007-08-27 (Mon)

ことえりが学習しない

  • ~/Library/Preferences/com.apple.JapaneseAnalysis/LearningDictionary.dict

を削除して再起動した。ら、とりあえず直ったぽい。

参考:

2007-08-26 (Sun)

今日の頭の体操

「隣り合う二項の差」のお題のdiffのメモ。

/diff {
                          % [3 1 4 1 5 9 2 6 5]
  dup                     % [3 1 4 1 5 9 2 6 5] [3 1 4 1 5 9 2 6 5]
  length                  % [3 1 4 1 5 9 2 6 5] 9
  /n exch def             % [3 1 4 1 5 9 2 6 5] 9 /n -> [3 1 4 1 5 9 2 6 5] /n 9 -> [3 1 4 1 5 9 2 6 5]
  aload pop               % 3 1 4 1 5 9 2 6 5 [3 1 4 1 5 9 2 6 5] -> 3 1 4 1 5 9 2 6 5

  n 1 sub {               % 8回繰り返す
    exch                  %% 3 1 4 1 5 9 2 5 6
    dup                   %% 3 1 4 1 5 9 2 5 6 6
    3 1 roll              %% 3 1 4 1 5 9 2 6 5 6
    sub                   %% 3 1 4 1 5 9 2 6 -1
    n 1 roll              %% -1 3 1 4 1 5 9 2 6
  } repeat
                          % -2 3 -3 4 4 -7 4 -1 3
  pop                     % -2 3 -3 4 4 -7 4 -1

  n 1 sub array astore    % [ -2 3 -3 4 4 -7 4 -1 ]
} def

あ、最初のdup要らないじゃん。。。

2007-08-25 (Sat)

Mac OS X版LimeChatの「Mark Scrollback」がすこぶる便利な件

現在、0.9がリリースされているMac OS X 版のLimeChatなんですが、

からダウンロードできるさきっちょ版に、「Mark Scrollback」という機能がつきました。(あと、ちょっと前のさきっちょ版からきれいなアイコンもつきました)

どんな機能かというと、

f:id:hirose31:20070825002258p:image

のように、メッセージウィンドウに横線をひっぱってくれます。話が盛り上がってるんだけどちょっと席を外すときとか本業に戻るときとかに、「ここまで読んだ」的な印としてつかうと便利そうです。

実はColloquy(いま見に行ったらColloquy for iPhoneというのがあってびっくり)に同じ機能があって、id:Psychs さんにリクエストしたら機能追加していただいた次第。どもっす!

個人的には、昼=Windows版、夜=Mac OS X版のLimeChatユーザなので、Windows版にもこの機能がつくといいなぁーと重いマッス。

2007-08-23 (Thu)

proxy.pacでのmyIpAddress()

Firefox 1.0だったか1.5だったかのときに、myIpAddress()が127.0.0.1しか返さなくなって、それ以来ションボリンヌだったんですが、昨日、となりのとなりの人にいわれて試してみたら、またちゃんと自分のIPアドレスが取れるようになってたす。

WindowsのFirefox 2.0.0.6。

ただ、about:configでnetwork.dns.disableIPv6がfalseになってると、常に「::1」(IPV6のループバックアドレス)が返ってくるようなので、trueにする。

これで、自分のIPアドレスを元につながってるネットワークを判別して、今いるネットワークに応じてproxyを自動設定可能になったす。さようなら、Switch Proxy。

function FindProxyForURL(url,host) {
  var myipaddr = myIpAddress();
  var proxy    = 'DIRECT';

  if (isInNet(myipaddr, "10.6.25.0", "255.255.255.0")) {
    // Home
    proxy = findProxyHome(url,host);
  } else if (isInNet(myipaddr, "10.10.0.0", "255.255.0.0")) {
    // Achi
    proxy = findProxyAchi(url,host);
  } else if (isInNet(myipaddr, "10.11.0.0", "255.255.0.0")) {
    // Kochi
    proxy = findProxyKochi(url,host);
  } else {
    proxy = 'DIRECT';
  }

  return proxy;
}

function findProxyHome(url,host) {
  var proxyLocal   = "proxy localhost:8888"
  var proxyExample = "proxy proxy.example.jp:8888"

  if (host.indexOf("irori.org") >= 0) {
    return proxyLocal;
  } else if (host.indexOf("example.jp") >= 0) {
    return proxyExample;
  }
  return "DIRECT";
}

function findProxyAchi(url,host) {
  //...
}

function findProxyKochi(url,host) {
  //...
}

thx >rigarashi

あと、proxy.pacの中で出したalert()は、FirebugのConsoleには出なくて、標準のError Consoleの方に出るので注意。

2007-08-21 (Tue)

MySQL + DRBDってヤバい気がするんだけどどうなんざんしょ?

MySQL ABのリファレンスマニュアルに、

なんてセクションができてたのに今さっき気がついた。(結構前からあった?)

よく読んでない(すんまそん)んすけど、万が一、mysqldが生きている状態でDRBDのfail overが起こってしまうと、mysqldが開いている/書いてる途中の状態でブロックデバイスが切り替わる訳で、これはちっと危険(データの破損や巻き戻りの可能性)な気がするんですけどどうなんざんしょね?

mysqldがSIGKILLで殺された場合と同じ状況になると思うんすけど、それは、InnoDBのリカバリ機能やmyisamchkで(データの破損や巻き戻りの可能性はあるけど)MySQL的には整合性がとれた状態に修復できるからおkという判断なんすかねー

2007-08-20 (Mon)

WEB+DB PRESS Vol.40に寄稿しました

今回はトピックは「監視」です。

  • 監視={異常を検知する,変動を観察する}

という切り口で、現場で実際に行っていることを書きました。細かいところ(実際に使っているスクリプトのコードとか)は出せなかったものもあるのですが、考え方やヒントなど、運用の現場の方の参考になれば幸いです。

監視にまつわるエトセトラ

  • はじめに
  • なぜ監視をするか?
    • 監視の目的
      • 異常を検知する
      • 変動を観察する
  • 監視項目を概観
  • 異常の通知
    • 通知の手段
    • 通知のコツ
      • レベルをわける
      • 不必要な通知はしない
      • 通知の間隔
      • 通知メールの文面
  • 監視の具体例
    • hdmond
      • 閾値の設定方法
    • Ganglia
      • グラフ化ツールいろいろ
      • 大量ノード向けのグラフ化ツール
    • apmond
  • おわりに
  • 今回のまとめ

そのほかぐっときた記事

[定番] Linux開発環境

id:naoya 氏の開発環境話。coLinux, Emacs, GNU screen, zsh

予想される反応:

  • 空前のdot-file公開ブーム到来
    • Social Dotfile Network - おらの.emacsをみてくんろ!!
  • それ、vimでもでk
  • それ、bashでもd
データセンタに学ぶ/サーバの消費電力問題とは何か

さくらインターネットの田中氏による記事。

サーバがいっぱいになってくると、キモになってくる電力とかエアフローの問題について。このへんのノウハウはまとまったものがあまりみかけないので、とても貴重な記事だと思いまっす。

Recent Perl World

これもid:naoya氏。Test::Base++

記事中で過去の記事

をご紹介あずかりましたなんですが、「Klab」じゃなくて「KLab」です。仏の顔も二度までと広報がいってますので、次からはよろしくお願いします。

News Hot Line

先日行ったKLab勉強会についてのレポート記事です。あざーっす>技評さま

こっちは今回はちゃんと「KLab」と書いていただいたので、仏の顔もセフセフです。

小飼弾のAlpha Geek に逢いたい

f:id:hirose31:20070814170345j:image:right:w320

あの『達人プログラマー』のDave Thomas氏でっす。

抽選でサイン入りTシャツがもらえるそうです。寄稿者だから無条件でもらえるというわけではないので、いま、しこしこハガキ書いてるところです。

2007-08-19 (Sun)

2007-08-17 (Fri)

2007-08-16 (Thu)

もう時効だから話す - はじめてのtcsh -


ログインシェルをcshからtcshに変えたかった。


でもその方法を知らなかった。まだ無知だったのだ。


それでもtcshに変えたかった。どうしても変えたかった。


そしてひらめいた。


「~/.cshrcのオケツでtcsh実行すればいいんでない!? ハイハイ天才がきましたよー ヽ(≧▽≦)ノ」


そしてオケツに「tcsh」を挿入した。なんの迷いもなかった。


付け加えるなら、このとき ~/.tcshrc というファイルはまだ作ってなかったし、execというものも知らなかった。あまりにも無知だったのだ。


そして動作を確かめるべく、ログインしなおした。


・・・なにかがおかしい・・・


いつもみなれたコマンドプロンプト「saturn% 」が出てこない。そのうち「サーバが重い」という声が聞こえ始めてきた。


となりにいた友だちのターミナルで、psコマンドでぼくのプロセスを確認した。


そこには待ち焦がれていたぼくのtcshがいた。画面をうめつくさんばかりのおびただしい量のtcshが・・・

2007-08-15 (Wed)

「同期I/O」と「非同期I/O」の定義、とか

指摘を受けたので(あざーっす!)、言葉の整理のためちと調べてみました。

Synchronous I/O OperationとAsynchronous I/O Operationの定義

POSIXによれば、このように定義されています。

3.378 Synchronous I/O Operation


An I/O operation that causes the thread requesting the I/O to be blocked from further use of the processor until that I/O operation completes.


Note:

A synchronous I/O operation does not imply synchronized I/O data integrity completion or synchronized I/O file integrity completion.

http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_378

3.29 Asynchronous I/O Operation


An I/O operation that does not of itself cause the thread requesting the I/O to be blocked from further use of the processor.


This implies that the process and the I/O operation may be running concurrently.

http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_29

ちなみに、W. Richard Stevensの『UNIXネットワークプログラミング 第2版 Vol.1』の、「6 I/Oの多重化: select関数とpoll関数」(p145)のセクションでもこの定義が言及されています。

さて、この定義にのっとると、I/Oモデルはこのように分類できることになり、

  • Synchronous I/O Operation (同期I/O操作)
    • blocking I/O (ブロッキングI/O)
    • non-blocking I/O (非ブロッキングI/O)
    • I/O multiplexing (I/O多重化)
    • signal driven I/O (シグナル駆動I/O)
  • Asynchronous I/O Operation (非同期I/O操作)
    • Asynchronous I/O (非同期I/O)

「Asynchronous I/O Operation」に分類されるのは、Asynchronous I/O (関数名がaio_かlio_で始まるもの)のみとなります。

Synchronous notificationとAsynchronous notification

さて、developerWorks

のFigure 1を見ると、I/O multiplexingが「Asynchronous」に分類されています。

さきほどの分類とは違いますね。

件の文書を書いた本人ではないのであくまで推測ですが、この図の「Asynchronous」は「Asynchronous I/O Operation」ではなく「Asynchronous notification」なのではないかと思います。

つまり、「XXXが同期/非同期に行われる」を「I/O操作」ではなく「(なにかしらの)通知」を切り口とした分類なのでしょう。それならば、I/O multiplexingが「Asynchronous (notification)」に分類されるのも理解できます。

まとめ

自分で混乱気味だったのでちと整理をしてみました。


はなしはそれますが、Stevensの本、たとえば、

はまちがいなく買いです。前者はネットワークプログラミング、後者はTCP/IPプロトコルについての書籍。

ネットをうろついて断片的な知識を得るよりも、この本を通読したほうがためになると思います。通読しなくても、必要になった折に本の中の関連する周辺トピックを読むだけでもかなり勉強になります。

ちなみに、Stevensのページから、書籍中のソースコードなどがダウンロードできます。

いまさらながらですけど、StevensすごいぉStevens。そんな思いをこめて、天国に向けてはて☆をうかべました。お盆だしね。

fingerコマンドのナウい使い方

コマンドブームみたいなので便乗してみるよ!

fingerってコマンド入ってる? ちょっと実行してみてよ!

anko[~]$ finger
Login     Name             Tty      Idle  Login Time   Office     Office Phone
hirose31  HIROSE Masaaki   pts/0          Aug 15 01:08 (bagel.irori.org)

どう? 全然つまんないね!


じゃ、となりのマシーンにfingerしてみてよ!

anko[~]$ finger @melon
[melon.irori.org]
finger: connect: Connection refused

どう? 世知辛いね!


昔はね、学校の端末室にいくと、X端末(これも死語っぽいね!)がずらららって並んでたの。でね、みんなX端末経由で、いくつかのホストにログインしてたの。だからね、fingerコマンドを使うと、だれがログインしてるか = だれが端末室にきているかがわかるのよ。

で、端末室ってほかの学部とかのもあって、1こじゃないわけ。だから、fingerとかrusersとかrwhoとか駆使してさ、友だちがログインしてたら、writeとかtalkとかphoneとかで話しかけて、「レポートあきたらからヤンボーに玉投げいかね?」とかやってたの。当時はルスデン全盛で、ケータイのケの字ぐらいはあったけどいまほどは普及してなかったんで、深夜の端末室におけるリアルタイムコミュニケーションはtalkとかがメジャーだったの。少なくともなかまうちでは。


ででで、finger コマンドなんだけどさ、今ではもうほっとんど使わないんだけど、たまーに使うことがあるの。こんな幹事で。

anko[~]$ finger linux@kernel.org
[kernel.org]
The latest stable version of the Linux kernel is:           2.6.22.2
The latest prepatch for the stable Linux kernel tree is:    2.6.23-rc3
The latest 2.4 version of the Linux kernel is:              2.4.35
The latest 2.2 version of the Linux kernel is:              2.2.26
The latest prepatch for the 2.2 Linux kernel tree is:       2.2.27-rc2
The latest -mm patch to the stable Linux kernels is:        2.6.23-rc2-mm2

linux@kernel.orgにfingerすると、最新のLinux kernelバージョンを教えてもらえるのさ。いや、まぁ、http://www.kernel.org にアクセスしてもいいんだけどさ、fingerの方が速いし。ね。

オチがないけど今回はここまで! 次回のコマンドはxmkmfだよ!!

2007-08-09 (Thu)

はてな加トちゃん欲しい!

[rakuten:ntacestore:10003550:detail]

  • 目覚まし音(全10パターン連続)
    • ババンババンバンバン・・繰り返し
  • アラームスイッチONの時の音
    • 顔洗えよ!
    • 歯磨けよ!
    • ご飯食べろよ!
    • 目を覚ませよ!
    • 早く起きろよ!
    • (5種類の中からランダムで一言)
    • 遅刻すんなよ!
    • うんちしろよ!
    • 学校行けよ!
    • 二度寝すんな!
    • は!ビバノンノン!
    • (5種類の中からランダムで一言)

は、まぁ順当なところだけど、

  • 鳴り止めした時の一言音
    • 加トちゃんぺ!
    • どうも、スンズレーしました
    • 1.2.3やったぜ加トちゃん
    • (3種類の中からランダムで一言)

こ れ は 秀 逸 す ぎ る。

2007-08-08 (Wed)

テキストでシーケンス図を描くツール

Graphvizは、

んで重宝してるんですが、同じノリでシーケンス図も描けないものかと。


テキストでの記述はできそうだけど、Wikiへの埋め込みはとりあえずあきらめ。

ほかによさげなのないかなー

追記

  • UMLSpeed diagram/XMI/source compiler
    • かなり気合い入れて記述しないと絵が描けない。
    • なんちゃってXXX図だけーな向きには不向き
    • 逆に考えると、状況(きっちりかっちり)によっては便利かも。

2007-08-04 (Sat)

バレー

ルーはさておき、ごはんがほかほかべちゃべちゃでいまいち。タイミングが悪かったか。

2007-08-02 (Thu)

curry

#!/usr/bin/env perl
# Time-stamp: <2007-08-02 13:36:56 JST, hirose31>

use strict;
use warnings;
use Test::Base;

sub curry {
    my($func, @argv) = @_;
    sub {
        &$func(@argv, @_);
    }
}
sub add {
    return $_[0]+$_[1];
}
sub sum {
    my $sum;
    $sum += $_ for @_;
    return $sum;
}

filters {
    input => ['split=,'],
};

plan tests => 5 * blocks;

my $add3         = curry(\&add, 3);
my $sum_plus_5   = curry(\&sum, 5);
my $sum_plus_2_4 = curry(\&sum, 2, 4);

run {
    my $block = shift;
    my @argv = $block->input;

    is add(@argv),             $block->add,          $block->name.' add';
    is $add3->($argv[0]),      $block->add3,         $block->name.' add3';

    is sum(@argv),             $block->sum,          $block->name.' sum';
    is $sum_plus_5->(@argv),   $block->sum_plus_5,   $block->name.' sum+5';
    is $sum_plus_2_4->(@argv), $block->sum_plus_2_4, $block->name.' sum+2+4';
};

__END__
=== curry2
--- input: 3,1

--- add:  4
--- add3: 6

--- sum:           4
--- sum_plus_5:    9
--- sum_plus_2_4: 10

=== curry3
--- input: 3,4,5

--- add:  7
--- add3: 6

--- sum:          12
--- sum_plus_5:   17
--- sum_plus_2_4: 18

これからカレーたべるぉ

2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 | 10 | 12 |
2017 | 07 |
2018 | 05 |