Home

memo-space

保存するときに強制構文チェック

  • 2006-01-31
  • vim

vimスクリプトとか書いてみた。(blog.xole.net)。の本編への反応ではありませんが、.vimrc のエントリと関係無い部分も晒しているようなので反応。

noremap ; :!php -l %<CR> というのは ";" を押した時に開いているファイルの構文チェックをする、というものですが、僕は最近、もっと過激に

au BufWritePost *.php !php -l %

と書いています。:w したら強制的に構文チェック。

久しぶりに Smarty テンプレート書いてたら、{/if} をことごとく {/fi} と書いてしまう、、、

Web アプリケーションのセキュリティ

こういうのを見ていると本当にイヤな気持になる。 そもそも HTTP / HTML でアプリケーションを作るということ自体がどうしようも無いほどバッドノウハウの塊なんだろうな。

[本]オイラーの贈物

もう 10 ページくらい読んだだけで目から鱗がゴッソリと落ちました。何に対してかは恥ずかしいから言えませんw。まー自分が無知なだけですが。文庫本なので持ち歩いてゆっくり読もう。一年後くらいにはミルカさんを楽しめるようになりたい。

ついでに Wikipedia で調べたら、0.999...が1に等しいことの証明というエントリがありました。

最後の、1/9 = 0.111...、8/9 = 0.888...、で 1/9 + 8/9 = 1 だからというのでまたゴッソリと。

リモートで tarball を作成する

リモートでtarballを作成する(よくきたblog)より。これは僕もよく使うので調べてみた。

$ mkdir foo
$ echo bar > foo/bar.txt
$ tar jcf foo1.tar.bz2 foo     # 見本を作成
$ tar jcf - foo | ssh localhost 'cat - > foo2.tar.bz2'
ishida@localhost's password:
$ ls -l foo*.tar.bz2
-rw-rw-r--  1 ishida ishida   158  1月 30 01:49 foo1.tar.bz2
-rw-rw-r--  1 ishida ishida 10240  1月 30 01:51 foo2.tar.bz2

は?、、、さらに

$ tar jcf - foo | cat - > foo3.tar.bz2
$ ls -l foo*.tar.bz2
-rw-rw-r--  1 ishida ishida   158  1月 30 01:49 foo1.tar.bz2
-rw-rw-r--  1 ishida ishida 10240  1月 30 01:51 foo2.tar.bz2
-rw-rw-r--  1 ishida ishida 10240  1月 30 01:53 foo3.tar.bz2

どーん。ちなみにもっと伝統的な手法を使うと、

$ tar cf - foo | bzip2 -c | cat - > foo4.tar.bz2
$ ls -l foo*.tar.bz2
-rw-rw-r--  1 ishida ishida   158  1月 30 01:49 foo1.tar.bz2
-rw-rw-r--  1 ishida ishida 10240  1月 30 01:51 foo2.tar.bz2
-rw-rw-r--  1 ishida ishida 10240  1月 30 01:53 foo3.tar.bz2
-rw-rw-r--  1 ishida ishida   158  1月 30 01:56 foo4.tar.bz2

ライブドアの最新情報やおすすめ情報を掲載する「livedoor アンテナ」

ライブドアの最新情報やおすすめ情報を掲載する「livedoor アンテナ」(INTERNET Watch)って、ライブドアの最新情報ってどっちの意味でだよ!!

これからも“想定外”な盛り上がりを魅せるlivedoor.com、引き続きご注目ください!(編集後記)って、どういう意味でだよ!!

check*pad を試す

メールは Gmail で読むし、ブックマークは del.icio.us と Bloglines があればいいし、だんだんブラウザだけあればことたりるようになってきた。最近はちょっとしたメモは Gmail の下書きとして保存している。やっぱどこでも使えるという意味では http は大きな利点がある。そのうちコーディングもブラウザでやるんだろうか。いっそ JavaScript で vi でも作るか。

百式管理人さんで有名な目標管理ツール - checkpad.jpも試してみた。うーむ。でもこれはちょっと自分が欲しかった物と違うなあ。 僕のように一日中デスクでパソコンに向かっている人と、そうで無い人の求めるものって違ってくると思う。checkpad は前者の人にとっては、どうだろう。たぶんもっと強く del.icio.us にインスパイヤされたシステムでなければいけないと思うw。

というわけで checkpad に "ToDo 管理システムを作る" と登録しておいた < 結局使ってるし。

gccのsetjmpに対する最適化

#include <setjmp.h>
jmp_buf e;

void throw(int i)
{
    if (i > 1)
        longjmp(e, 1);
}

int
main(int argc, char **argv)
{
    int flag = 0;

    if (setjmp(e) == 0) {
        flag = 1;
        throw(argc);
        flag = 0;
    }
    if (flag == 1)
        printf("error\n");
    return 0;
}

こんなコードを書いた(こんなコード書くなよってのは置いといて)。要するに引数を1つでも渡すと "error" と表示するわけだ。で、make する。

$ rm jmperr; make jmperr
cc     jmperr.c   -o jmperr
$ ./jmperr 
$ ./jmperr a
error
$

正常。しかしこれが -O2 だと、

$ rm jmperr; CFLAGS="-O2" make jmperr
cc -O2    jmperr.c   -o jmperr
$ ./jmperr 
$ ./jmperr a
$

ガーソ。gcc が "flag って絶対 0 じゃん。イラネ" と最適化してしまったようだ。

gcc のマニュアルを見たら、-W のところに、

非 volatile 自動変数が longjmp の呼び出しにより変えられる可能性がある。この警告は最適化コンパイルの場合にのみ可能になる。

とのこと。volatile にしてやればいいのか。なるほど。全然思いつかなかったよ。また自分の浅さを発見してしまった。

Web技術者必見!「仕様書に見るHTML」

仕様書に見るHTML(The Web KANZAKI)。『WebSiteDesign』で連載されていた記事だそうです。

恥かしながら、HTMLに関して知らないことが沢山ありました。<a name="..">って廃止されることになってるらしいですよ! あとアンカーのフラグメントに id 属性指定できるというのも知らなかった。

現実世界では仕様に従うことがすべてではないですが、読んでおいた方が得すると思います。

翻訳支援ツールについて

今回、OmegaT もちょっとさわってみたのだが、そちらについて書かなかったのは OmegaT が sgml をサポートしていなかったからだ。そのことを除けばシンプルで使えるツールだと思う。

2つの翻訳支援ツールを使ってみて、これ web アプリケーションだったらいいのになぁとちょっと思った。Ajax とか使って。オープンソースコミュニティの翻訳プロジェクトに関わるものとして翻訳支援ツールに求めるものは何だろう。

その昔、jpug-doc(あるいは昔のpgsql-doc)で CVS を使いましょうと言い出したのは僕だ。今となってはその CVS のアクセス方法すらわからないのだが^^;;何故 CVS にしたかったかというと、当時僕は sgml のコンパイルをやっていたのだが、ML に投稿される sgml ファイルを拾うという作業が馬鹿にならないくらい手間だったからだ。 メール本文に書いてくる人もいれば添付する人もいる。圧縮されていたりそのままだったり。文字コードもばらばら。という状況にまいってしまったのだ。

で、単に sgml ファイルを一括で取り出す方法として CVS にしましょうと言ったわけで、実際のところ翻訳に関してバージョン管理そのものがそれほど大事だとは思っていない。

そんなわけで、こんなの Web アプリケーションがあればいいなと思うもの。

  • ファイル一覧が表示できて、翻訳状況管理(未と済だけでいい)が管理できる
  • 予約管理
  • 成果物のアップロード
  • Web 上からも修正可能。セグメント毎に分割されているといいね
  • 簡単なタグのチェック
  • コメント(誤訳の指摘)などを投稿できる
  • 定期的な sgml の自動コンパイル
  • で、翻訳メモリ機能もあったり

Open Language Toolsを試す

OLT と略すと猛烈に OTL に見えてきますが違います。Sun の オープンソースな翻訳支援ツールです。

インストール:
https://open-language-tools.dev.java.net/から、transeditor_v1_2_2_win.zip と xliff_filters_v1_2_2_win.zip をダウンロードして、それぞれ解凍 -> install.bat を実行するとインストーラが動きます。 スタートメニューに登録するようなメッセージが出たような気がしたわりにはスタートメニューに登録されていなかったり、Program Files の下に "Open_Language_Tools" と "Open Language Tools" という二つのフォルダができていたりしますが気のせいです。

起動:
それぞれのフォルダの中にある、filters.bat もしくは translation.bat をダブルクリックすると起動します。

フィルタ:
filters.bat はその名の通りフィルタです。今回は sgml ファイルを翻訳するので alter_aggregate.sgml というファイルをドラッグ & ドロップすると、同じフォルダに alter_aggregate.sgml.skl、alter_aggregate.sgml.xlf、alter_aggregate.sgml.xlz という三つのファイルが出きます。

OLT XLIFF Filters
OLT XLIFF Filters posted from フォト蔵

翻訳:
translation.bat の方を起動するとまず "Translator ID" を聞かれるので何か打っておいて下さい。次に新しいプロジェクトを作成します。"Target Language" には当然 "Japanese" を選びましょう。 OLT::New Project
OLT::New Project posted from フォト蔵

さあいよいよ翻訳です。メニューの [File] - [Open] で、先ほど filters.bat で生成された alter_aggregate.sgml.xlz を開きましょう。

ウィンドウは左右にわかれ、右側でガシガシ翻訳をしていきます。文章はセグメント毎に分割され、Ctrl + 上下キーでフォーカスを移動できます。また、sgml タグは編集できないようになっています。

OLT::Translation
OLT::Translation posted from フォト蔵

1つのセグメントの翻訳を終えたら、メニューから "Confirm And Translate Next" を選択することで、そのセグメントを翻訳済みとマークして次の未訳セグメントに移動します。これは Alt + = というショートカットがあるのですが日本語キーボードだと押せませんねぇ。かわりに Alt + 1 (Mark Segment As Translateed) でマークして フォーカスは自分で移動しましょうか。

別のファイル:
さて途中まで alter_aggregate.sgml を訳したところで、次に alter_conversion.sgml を開いてみます。すると "100% matches were found in MiniTM from some of the untranslated segments in this file. Would you like to automatically translate these segments?" と聞いてきます。ありがたいので Yes を選択します。 このように以前全く同じセグメントを翻訳した場合は、自動的に置換してくれます。この時右側のウィンドウのセグメントのステータスは 100 と表示されます。

気が向いたら続きを書きます。

翻訳支援ツール

オープンソースによる翻訳支援ツール(可知さんのblog)。その後のいくつかののエントリも興味深い。 オープンソース::translation

翻訳メモリとは、翻訳された文書をデータベースに持っておいて、似た文が出てきたときに補完したりする翻訳支援ツールらしい。ははぁ。なるほど。こういう世界もあるわけか。

今度 OmegaT あたりをいじってみるか。

PL/pgsql Server Page

以前考えていたものがなんとなく形になりつつある。要するに、

foo.pgsp
<% for i in 1..10 loop %>
<%= i %> hello <br>
<% end loop; %>

というファイルを作ってブラウザでそこにアクセスすると、

create or replace function foo() returns text as $$
declare
  res text := '';
begin
 for i in 1..10 loop 
res := res ||  i ;
res := res || 'hello <br>\n';
 end loop; 
 return res;
end;$$
 language 'plpgsql'

という関数を作ってそれを実行した結果を返してくれるわけだ。GETパラメータなんかは以下のように指定しておくと、そのまま関数の引数になる(この辺のparserがまだやたらと適当なわけだが)。

foo.pgsp
<%@ parameter="p1" type="int" %>
...
定義される関数
create or replace function foo(int) returns text as $$
declare
  res text := '';
  p1 alias for $1;
...

まあ作ってる本人がOracleのmod_plsqlを使ったことが無いので大分違うものになってしまった気もする。

日本物理学会「ニセ科学」シンポジウム

もうこの話題、反応した時点で負けかなという気もしますが。

日本物理学会「ニセ科学」シンポジウム(slashdot.jp)

オカルト叩きというよりも、科学の仮面をかぶり一般社会に「科学」として認知されている事象を研究するということのようだ。その一例で提案主旨に「水に優しい言葉を かけると美しい結晶ができる」とする小学校の道徳教育の現場で使われるという事態が挙げられている。

これを見たときあまりに衝撃的な内容だったので、それって比喩的な意味合いでいってるのをニセ科学だと揚げ足取りしてるんじゃないの?という元ネタ養護的思想が最初は頭をよぎった。

でも、元ネタと思われる本のレビューを見たり、mixiのコミュを見てそういうわけではないということがわかってきたら、だんだん気分が悪くなってきた。僕がこの本を読むことはきっと無いだろうけど、これをニセ科学と分類することにすら腹が立つ。これがニセ科学なら「ミイラには15℃の体温があり、死んでいれば0℃になるはずであり、従ってミイラは生きている」(wikipedia)だってニセ科学だ。

なんか琵琶湖の水を言葉で綺麗にしようとしてるし、、、

何でこんなもの信じることができるのか、あるいは、これを信じることができる人と僕との間にあるものは何なのか、何でこういうのを見ると僕はこんなに気分が悪くなるのか。

「科学的根拠が無い」とか「いやそれでは夢が無さすぎる」とかいう軸で議論されがちだけど、それより「夢がありすぎる」ことが気持ち悪い。「愛」とか「感謝」とか中身の無い耳あたりのいいこといって救われた気になってんじゃねーよ。 どうも僕は、こういううすっぺらさに過敏に反応してしまう傾向があるのかもしれない。あと生涯「人生観がかわった」という言葉だけは口にしたくないと思っている。

愛とか感謝よりも、今日一日なにをできたかの方が僕にとっては重要だ。明日は洗濯をしよう。

参考リンク:ハリケーン「ウィルマ」についての江本勝からの緊急メッセージ

Home

Search
Feeds
Profile
石田@苫小牧市と名乗りつつ札幌の某社に勤務するプログラマ
書いた本
Links

Page Top