カテゴリ:ソフトウェア( 80 )

はじめに


エキサイトブログは今まで数々の危機にさらされ(笑)、
そのたびに保存保存とみんなで色々な方法を考えてきた。
昔はうまく保存できる方法を見つけられたのだが、
「非公開コメント」通称「鍵コメ」機能ができてから、
認証に使用する Cookie が複数になり、
通常のダウンローダーではうまくバックアップできなくなった。
記事だけの保存なら問題ないのだが、
コメントも含めて記事の一部と考えているので、
やはりコメントも保存したいのである。

どうすれば保存できるのか。
もうこれはブラウザの表示をエミュレートするしかない。
そこで iMacros を使えば良いのではないかと考えた。

これはブラウザ上で動く web テストにも使えるツールで、
人間がクリックしたり入力したりする動作をマクロとして記録し、
その通りになぞって実行することができるツールである。
人間と同じ動作を自動的にやってくれるのだから、
認証とか Cookie とかはまったく問題ナシ。
人間ができることならほとんどすべてできると考えて良い。

そして実験の結果、鍵コメまで保存できることが確認できたので、
情報共有する次第である。

下ごしらえ


・私は WindowsXP Firefox 3.5.9 で試した。
 IE 上で動く iMacros もあるらしい。試してない。
・以下から iMacros のアドオンをインストールする。
 iMacros for Firefox
・保存したい一番古いページの URL と、一番新しいページの URL を調べておく。
 「次のページ」のリンクをたどるので、
 投稿が一番古い新しいではなく、記事日付で見ること。
・自分のマシンに記事を保存する用のフォルダを用意する。

実行方法


・以下のソース中の最古 URL、最新 URL、保存先フォルダ名を書きかえる。
・実行前にログインしておく。
 (自動ログインからもやればできるんで、やりたい人は自分でやって)
・iMacros の Options -> General -> TimeoutLimit を 86400 とかにしておく。
 General -> Replay speed も Medium や Slow が良いと思う(回線速度を考慮)。
・以下のファイルを test.js などの名前で保存して、iMacros から実行(Play)。
 (スペースが全角なので注意)

//--------------------------------------------------
// 以下3つをサイトに合わせて修正
// 一番古い URL
var surl = "http://xiaoxia.exblog.jp/10819727/";
// 一番新しい URL
var eurl = "http://xiaoxia.exblog.jp/8551907/";
// ページを保存するフォルダ
// ・フォルダの区切り文字\は「\\」にする
// ・「My Cocuments」は「MYDOCU~1」にすれば保存できることを確認済み
var outdir = "C:\\iMacros\\Downloads";
// 上の文をコメントアウトして、その代わりに下を有効にすると、
// Options -> Folder Downloads 指定以下に保存される
// var outdir ="*";
//--------------------------------------------------

var macro;
var jsLF = "\n";
var i = 0;

iimDisplay("Send Macro via iimPlay:" + i);
macro = "CODE:";
macro += "URL GOTO=" + surl + jsLF;
iimPlay(macro);

while (1) {
  i++;
  iimDisplay("Send Macro via iimPlay:" + i);
  // ページを保存し、表示中 URL をマクロ外から参照できる値に保存するマクロ
  macro = "CODE:";
  // FILE={{!URLCURRENT}} を FILE=* に変えると記事タイトル名で保存される
  macro += "SAVEAS TYPE=HTM FOLDER=\"" + outdir + "\" FILE={{!URLCURRENT}}" + jsLF;
  macro += "SET !EXTRACT {{!URLCURRENT}}" + jsLF;
  // マクロ実行
  iimPlay(macro);

  // マクロ外から URL を参照
  // (location.href だと chrome:// が来ちゃうのでダメだったの)
  surl = iimGetLastExtract(0);
  // 最後の URL だったらここで抜ける。
  // 最後ではないなら、ページ繰りのマクロを実行
  if (surl == eurl) {
    break;
  } else {
    macro = "CODE:";
    // 私のページはページ繰りリンクが以下のようになっていた
    // <A class="newer_page" HREF=http://xiaoxia.exblog.jp/数字/>< 前のページ</A>
    // たぶん多くの人は同じだと思うけど、
    // <A class="newer_page" ... になっていない人は修正する
    //  TYPE=タグ名 ATTR=一意にこのタグを識別できるような属性
    macro += "TAG POS=1 TYPE=A ATTR=CLASS:newer_page" + jsLF;
    // マクロ実行
    iimPlay(macro);
  }
}
iimDisplay("Script completed.");
iimExit();


保存先フォルダに「http_xiaoxia.exblog.jp_数字_.htm」みたいな名前で
HTML が保存される。
「SAVEAS TYPE=HTM ...」の部分を「SAVEAS TYPE=CPL ...」に変えると、
保存先フォルダに「http_xiaoxia.exblog.jp_数字_」というフォルダが作成され、
画像から js ファイルから何から全部保存されるようになる(実験済み)。
IE なら「SAVEAS TYPE=MHT ...」にすれば、
1ファイルで画像もすべて保存できるのではないか(実験してない)。
どんな指定ができるかは以下を参照(英語だけどな)。
SAVEAS - iMacros

可能な範囲で質問も受けますので、コメントでお知らせください。

注意とか


・まずは数個の URL で試したらいいよ。
・ブラウザの表示を再現するツールなので、ブラウザにブログが表示される。
 私のようにブログを家族に隠している人は、実行時に注意すること(笑)
・保存した HTML を他サービスへインポートしたい人は、自分で考えて。

iMacros って色々書けて面白いよ。
Main Page - iMacros

追記:
harryさんよりコメントで、ハマった点と解決法を教えていただいたので、
記事内に引用しちゃう。
Win XP Pro SP3 (Windows7 downgrade) + Firefox 3.6.3

(1) iMacros の操作ウィンドウを×で閉じてしまい、出し方が分からなかった。
  →ツールバーにアイコンが追加されていた。
(2) コピペした js をどこへ保存すれば良いか分からなかった。
  → iMacros が導入された、My Documents\iMacros\Macros
(3) js を Play も Edit もできなかった。
  → UTF-8 で保存しないとダメなようだ。
(4) ダウンロード先フォルダは存在しないと作ってはくれないようだ。
  → C:\\Docume~1\\ユーザーID\\MyDocu~1\\iMacros\\Downloads ならばOK。
   おそらく、c: からのフルパスじゃなく、MyDocu~1 で始めれば良かったのだろう。


追記2:
指定した保存先フォルダがない場合は、保存されないだけで、エラーは発生しません。
保存先フォルダの存在チェックをすると、OSに固有のソースになってしまう
(Win だと ActiveXObject を使うぽい)ので、
保存先フォルダがあるかどうかは、自分でちゃんと確認してください。
  var outdir ="*";
にすると、Options の Donwloads の設定値が使用されるので、
楽チンだと思います。

追記3:
例えば、1件の表示と保存に1秒かかるとすると、
1時間で、60秒 x 60件 = 3600件保存します。
回線の状況によっては、それ以上時間がかかるでしょう。
何秒くらいでページめくりが発生しているかを観察すると、
保存したい記事数から、
全部の終了にはだいたいどのくらいの時間がかかるのか、概算できます。
[PR]
by xiaoxia | 2010-06-22 19:01 | ソフトウェア | Comments(11)
ふと思い立って firefox の twitter 用拡張をいくつか試してみる。

xyzzy 用の twitter_update.l を使っていたんだけど、
パスワードが平文なのが気になっていた。
ユーザ ID とパスワードは URL に含んで送信するから、
プロトコルを HTTPS にしても意味ないんだもん。

要件は以下。
・送信だけでいい
・TLの自動受信は絶対したくない
・文字カウントも欲しい
・あんまり twitter だぜ!って感じじゃない I/F のほうがいい

【1】Echofon(旧TwitterFox)
まずは人気の Echofon。
自動受信を止めることができないようだ。
勝手に通信されちゃ困るので、これでは会社では使えない。
自動受信の停止にはログオフするしかない風。
えー面倒くさいー。
受信間隔最大5分というのも短い。
会社 LAN で使うので、もっと長くできたほうがよい。
twitterのユーザアイコンが表示されるのもイマイチ。
ブラウザ側の設定は画像非表示にしているのだから、
その設定に倣って欲しい。
とりあえず不可。

【2】firestatus
文字数カウントがある点は非常に高評価。
パスワードを保存しないで良い点も、セキュリティ的に好ましい
(毎回要求されるけど)。
自分のつぶやきの送信/TLの受信を
それぞれ実行するかどうか選べる点も大変ステキ
(私はTLはブラウザで見るので自動取得は不要)。
でも、かな漢変換の確定で Enter キーを押すと送信しようとする。
英語圏の人が作ったので、
かな漢ユーザが使うのを想定していない風。
Send ボタンがえらい右にあって見切れるのもイマイチ。

【3】twitbin
以下のページによると、これも firestatus と同様、
かな漢変換中に Enter で確定すると送信しちゃうようだ。
ダメじゃん。
インストールするのはやめ。
現在の Twitter 利用環境メモ Firefox 編 - ?D::MotionBros

【4】twitkit
文字数カウントがあるのは良い。
アドオンを簡単に表示/非表示できるので、これなら自動受信を止められる。
受信間隔が最大10分なのも良い。
twitterユーザアイコン画像が表示されちゃうのが大変イマイチ。
ブラウザの方は画像非表示なので倣ってほしい。
で、設定画面が全部表示されてない?
見切れてる?

【5】twitterbar
アドレスバーに入力して送信。
文字数カウントも出る。
受信はない。
アドレスバーに入れるってのがちょっと気になるけれど、
送信はアイコンをクリックする必要があり、
Enter しただけでは送信されない。
また、アイコンのクリック後に必ず confirm が出る設定にできる。
そのあたりは非常によろしい。
送信の成否は、アドレスバーに一瞬だけ出る。
この点は見逃しそうでイマイチ。
今のところ、要件にはこれが一番合っているかなぁ。
http://www.chrisfinke.com/oauth/... を通して認証しているのが
ちょっと気になる。
こういうの通したくないんだが。

【6】twitter toolbar
「実験的なアドオン」だったせいか、
fx のバージョンが古いせいか、
インストールしても何も表示されず???

【7】TwitterTools Toolbar
ログインしろって何度も言われて、以下に転送されるので、
http://www.thetwittertoolbar.com/
何度もログインしてみるのだが、
一向に送信できない。
何があかんの?

XXX

今のところ、【5】の twitterbar に落ち着きそう。
[PR]
by xiaoxia | 2010-04-02 18:28 | ソフトウェア | Comments(0)

Google の IME について

最初に書いとくけど、私は使ってない。
明らかに私に合わないと思うので。
あと、多分、確実に使用状況はモニタリングされていると思うので。
そういうところが Google の嫌いなところなんだなぁ。
毎日お世話になってるけどさ。

ネット上では、かなり評判が良い印象を受ける。
「Atok いらなくね?」とか。
それが何でなのか、実はよくわからない。
多くの人は「俺変換」はないのだろうか。

私は UNIX 上で wnn(egg) や skk などを使ってきた。
これらは今の IME ほど賢くはないので、
長い文節では、自分の気に入らない変換をする確率が高い。
戻って変換し直すくらいなら、最初から自分でやるわい、と思うので、
短い文節で変換をする癖がついた。
どこを漢字にして、どこをひらがなにするかは、
ちょっとしたこだわりがあるので、
頭の中の文には、漢字とひらがなが分かれた状態で浮かんでいる。
それを字にするので、
漢字とひらがな(カタカナ)の境界で変換することも多い。
文節変換ではないのだ。
つまり、かなり頻繁に漢字変換候補の確定操作をしていくことになる。
そのたびに、ネットに接続されたのでは、
イライラすること必至である。
そんなにネットとデータをやり取りしても、まったく遅延を感じないなんて、
どんだけ速いネット使ってるのよこのブルジョワめ!なんて思う。
実際は、我が家も会社もそんなに速度は遅くないので、
私は操作速度にはだいぶん要求水準が高いだけなのだろうと思う。
ま、つまりだ、不要な処理(データ送受信)をしてくれるな、ってことだ。

「俺変換」も多い。
「首肯」とか「罹患」とか、なんでか結構使うのだが、
IME の最初の状態では一発では変換されない。
あと「仰言る」とかね。
通常「仰る」という用字が普通だと思うが、
私は「仰言る」を使う。
こういう個人的好みが出る変換や、手の癖などは、
Google IME では対応しきれないと思う。

反対に、良い点を考えてみると、多分「新語」だろうと思う。
多くの人は、検索窓に名詞を入力する。
普通の文から新語を抽出するのは難しいが、
検索語は最初からほぼ名詞とわかっているので、
丸ごと新語としても問題ない場合が多い。
つまり、例えば「冬のソナタ」の場合、
通常の文に出てくると「冬/の/ソナタ」と解析されるけれど、
どれも珍しい単語ではないので、新語と判断するのは難しい。
しかし、検索窓に「冬のソナタ」と入力されることが増えると、
「冬のソナタ」という固有名詞が存在する可能性が高まる。
このように、新発売の商品や、新しいネットスラングなどを入力するときには、
非常に便利なのじゃないかと思う。

これからも一生懸命使おうと思うなら、
たくさん使うとか、ユーザを増やすとかして、学習させれば、
どんどん良い変換に育っていくと思う。
そういう人は頑張れ。

自分がどんな単語を入力する傾向があるのか、
どのようにネットを使用しているのか、などを考えてみると、
Google IME が自分に合うかどうかわかるかな、とか。
[PR]
by xiaoxia | 2009-12-07 12:25 | ソフトウェア | Comments(0)
オケのメーリングリストに google グループを使っているのだが、
そんなら練習予定も google カレンダー使えばいいんじゃね?と
突然思い立った。
ウチのオケはあんまりITな人がいないので、
google カレンダーに予定が入っても、きっと誰も嬉しくないだろうけど、
(個人で outlook つこてる人も、そうたくさんおるまい)、
私が楽しいからOK!
私は管理者だから!
そのうち Android とかと同期できたら楽しい!
って、持ってないけどな!

いまごろ google カレンダーかい!って感じなんだけど、
案外情報が少ない。
他のアプリとの同期は、だいたいツールを使っちゃうのだろうな。
なので、インポートするための形式の仕様メモ。
OS は windows 。

iCalendar 形式


Windows vistaの「Windows カレンダー」では、
エクスポートしようとすると、この iCalendar 形式しか選べない。
これをそのまま google カレンダーにインポートできる。
拡張子は ics。

iCalendar の仕様は、以下のページが詳しかった。
iCalendar

csv 形式


Yahoo カレンダーや MS Office 付属の outlook では
csv でエクスポートするので、
この csv はそのまま google カレンダーにインポートできる。
それを google カレンダーにインポートできる。
ただし、Yahoo カレンダー、 outlook ともに sjis で出力するので、
utf8N に変えることが必要なんじゃないかな。
windows 標準のツールでは utf8N にできない気がするんだけど…。
utf8 にはなるが、BOM が付くんじゃないか。
sjis ファイルや BOM 付きファイルでも
無事に google カレンダーにインポートできるのか、
そのあたりは試してないから不明。
私は utf8N に変換してからインポートした。

csv は、以下のような形式。
"件名","開始日","開始時刻","終了日","終了時刻","内容","場所"
"第10回定期演奏会","2009/8/29","18:00","2009/8/29","21:00","
シベリウス / 交響詩《フィンランディア》 作品26
チャイコフスキー / 組曲《くるみ割り人形》
ドヴォルザーク / 交響曲第5番ヘ長調 作品76
","神奈川県立音楽堂"

注意点:
・1行目のヘッダは必須っぽい。
 他に、繰り返し予定とかアラームのオンオフなんかも指定できる。
 試しに Yahoo カレンダーに予定を登録して、エクスポートしてみたらいい。
・2行目以降は、データ中に改行を含んでもいいっぽい。
・インポートするカレンダーのタイムゾーンになるようなので、指定は不要。

こういうことが書いてあるドキュメントがないんだよなぁ。
いや、どっかにあるんだろうか?
きょうび、手でインポートする人なんかおらんのやろなぁ(´・ω・`)

で、Windows カレンダー ではエクスポートは iCalendar 形式のみで csv はなし、
outlook では逆に iCalendar はなしで csv 。
両方とも両方できるようにしてくれればいいのに。
[PR]
by xiaoxia | 2009-08-26 18:11 | ソフトウェア | Comments(0)

Hadoop Streaming 試行錯誤

Hadoop Streaming を使ってみている。
まだあんまりドキュメントがないので、
試行錯誤するしかない。
なわけで、今日の試行錯誤のメモ。

インストールや環境設定については、
書いてあるページがそこそこあるから
そっちを見てください。

※exblogに怒られないように、
ところどころ大文字になっているので、
コピペするときは気をつけてね

前提:
(1) input.txt を hdfs に送っておく。
> $HADOOP_HOME/bin/hadoop hdfs -put input.txt

(2) -output の temp ディレクトリは毎回削除する。
> $HADOOP_HOME/bin/hadoop hdfs -rmr temp

ちなみに
>hadoop dfs -rmr temp[1234]

とか
>hadoop dfs -rmr temp*

とかも可能

【1】perlモジュールを読み込んでみる:成功
モジュールがカレントになくても、
mapper にはカレントにあるものとして指定してOKっぽい

${HADOOP_HOME}/bin/hadoop
  jar ${HADOOP_HOME}/hadoop-streaming.jar
  -input input.txt
  -output temp
  -mapper "perl test.pl"
  -reducer /bin/ls
  -file /tmp/mymodule.pm


test.pl
require "mymodule.pm";
while(<>) { print $_; }


【2】reducer を省略してみる:成功
-reducer は省略してもOK
reduce をしない代わりに -jobconf mapred.reduce.tasks=0 を指定する

${HADOOP_HOME}/bin/hadoop
  jar ${HADOOP_HOME}/hadoop-streaming.jar
  -input input.txt
  -output temp
  -mapper "perl test.pl"
  -jobconf mapred.reduce.tasks=0

test.pl
while(<>) { print $_; }


【3】引数のファイルを色々読んでみる
-file でファイルを指定して色々してみる。
hdfs 上に送らなくても色々できるかの実験。
test.pl の中を色々変えながら、実行してみる。

${HADOOP_HOME}/bin/hadoop
  jar ${HADOOP_HOME}/hadoop-streaming.jar
  -input input.txt
  -output temp
  -mapper "perl test.pl"
  -jobconf mapred.reduce.tasks=0
  -file input2.txt


test.pl : 失敗
-input のファイルは必ず読まないとダメみたい?
open(IN, "input2.txt");
while(<IN>) { print $_; }
close(IN);


test.pl : 失敗
# 複数行出力しても、最後の出力しか採用されない?
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  print ($#all + 1), "行¥n"; # この行は出力されないみたいだ
  print $_;
}


test.pl : 失敗
# 関係ないものを出力してみる
# ($#all + 1) の結果が、改行もなしにだーっと出力された
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  print ($#all + 1), "行¥n";
}


test.pl : 失敗
# -input から読み込んだ行も出力してみたのだが...
# ($#all + 1) の結果が、改行もなしにだーっと出力された
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  print ($#all + 1) , "¥t", $_;
}


test.pl : 失敗
# これも ($#all + 1) の結果が、改行もなしにだーっと出力された
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  print ($#all + 1) , "¥t", ($_."¥n");
}


test.pl : 成功
# ($#all + 1) を print 中で計算させるのがいけないのか?
open(IN, "input2.txt");
@all = <IN>;
close(IN);
$ls = $#all + 1;
while(<>) {
  # これはちゃんと出力された
  print "${ls}行¥n";
}


test.pl : 成功
# ($#all + 1) を print 中で計算させてもOKな場合がある
open(IN, "input2.txt");
@all = <IN>;
close(IN);
while(<>) {
  s/[¥r¥n]+//g;
  # これもちゃんと出力された
  print $_, "¥t", ($#all + 1), "¥n";
}

[PR]
by xiaoxia | 2009-02-27 18:15 | ソフトウェア | Comments(0)
今日は Timeline をやっています。
ホントは仕事です。
いやホントに。

Timeline は MIT で作っている、簡単に年表が作れる Ajax ツール
(webアプリでもないし、なんて言うんだろう、こういうの)。
このリンク先を見ていただくと分かるのですが、
SIMILE | Timeline
年表がぐりぐりとマウスで動かせます。
イベントをマウスでクリックすると、ポップアップ風に窓が開いて詳細表示。
んまぁなんか可愛いわ。

使い方はこちら。
超簡単でし。
SIMILE | Timeline | Documentation | How to Create Timelines
イベントのデータたちは XML を作って食わせればおk。
固定ファイルじゃなくても、ダイナミックに XML を作成して、
毎回描画させることができます。

残念ながら、javascript のソースをもりもり使うので、
エキブロには入れられません。
面白いのにー。

@nifty では、Ajax じゃなくて flash ですが、
似たようなことをやっています。
@nifty TimeLine - ソーシャル・タイムライン
で、みんなで年表作り。
軸は自由に作れるので、自分のダイエット記録をつけている人もいるみたい。
公表したほうが励みになるのかも。
一番人気は 日本史・合戦タイムライン(笑)
戦国好きな人っていますよねー。
アツい年表ができています。
下の広い年表を見ると、
鎌倉時代、戦国時代と幕末に合戦が集中しているのが分かりますね。
いやそれとも、その時代が好きな人が、集中的に登録したんでしょうか(笑)

昭和のニュースも楽しいですが、
1965 年までしかありません。
うーん、昭和 64 年までやって欲しいんだけどな。

えー、で、Timeline に話を戻して、使う上での Tips 。

ソース


ソース一式はこちらから。
Revision 1431: /timeline
でも、これ以外に、SIMILE Ajax パッケージが必要なので、それも落とす。
Revision 1431: /ajax

ソースの配置


上記2つ(timeline、ajax)をどう配置するのが正しいのか良く分からない。
timeline は主になるパッケージだから良いとして、問題は ajax のほうですよ。
でも、ソース中(timeline実行前)にこう書いておけば、どこにおいてもおk。
<script language="javascript">
var SimileAjax_urlPrefix = "http://foo.bar.co.jp/ajax/src/webapp/api/";
</script>

ディレクトリ最後のスラッシュは必要。
これが、SimileAjax.urlPrefix という変数に設定されて、
SilimeAjax.urlPrefix + "scripts/json.js"
なんて感じに実行されるようなので。

ちなみにソース中には
 http://127.0.0.1:9999/ajax/api/simile-ajax-api.js
こんな風に書いてある箇所があるので、
まぁこんな風に配置することを意図しているのでしょうな。

入力 XML ファイル


XML は UTF-8 で書きます。
日本語も問題なくおk。
ポップアップに出す中身は HTML エンティティで書くこと。
タグを書くときは、&lt;、&gt; のように書くのね。

年表のスケール(timezone が正の値のとき正しく動かない件)


初期表示時に中心に来る日時を
Timeline.createBandInfo の date で設定するのだが、
例では GMT になっている。
JST と書いても、どうやら華麗にスルーされるぽい。
そんなときは、こんな風に timezone を設定。
 bandInfos = [
    Timeline.createBandInfo({
        timeZone:  9,
        ...
    }),
    ...

ところが、これだと以下のページにあるように、
SimileのTimelineが、タイムゾーンが正の場合に正しく動作しない。 - こせきの技術日記
12月 が2回表示されるみたいなバグがある。
私の場合は 10月が2回並んだ後に12月が2回並んでた(笑)
ぱっと見わからないのだけど、
右に左にスクロールすると発生する。
特に年をまたぐ数ヶ月が危険。
12月、1月と31日が2ヶ月続いたり、日数の少ない2月があったりするせいかと。

1日試行錯誤して、原因を探ってみたのだけど、なかなか根が深い。
もういい! JST だけど GMT のつもりで動いてくれ!と思ったのだが、
設定上は何も指定していないのに、勝手に時刻が+9になる。
apache サーバの動いているロケールなども関係あるかもしれない。
内部処理で、日時の文字列を getUTCDate() することが多いのだが、
勝手にロケールを見て+9しちゃうもんだから、
特にロケール設定しなくても、時刻がずれるのだろう。
うーん。

しかもポップアップの timezone もずれとるがな。
参考:[#TIMELINE-70] time zone in event popup bubble is incorrect - Issue Tracker

とりあえず見た目を揃えたい


とりあえず、見た目の整合性が取れているように設定するにはこんな感じ。
・ apache はあきらめて日本語ロケール(JST)で動かす
・ createBandInfo では timeZone は設定しない
・ createBandInfo の時刻は以下のように設定。
    date: "Jul 30 2008 00:00:00 GMT",
  GMT をつけないと、29日15時 が中心に表示される。
・ timeline/src/webapp/api/scripts/sources.js 中
  Timeline.DefaultEventSource.Event.prototype 中の fillTime で、
  appendChild している文字列から、全部 /GMT/ を削除する処理を追加
  (上記「参考」への対処)
・データの XML の event の日時は、例えば以下のように書く
    <event start="Jul 30 2008 00:00:00 GMT" title="タイトル">
  本当は JST の日時なのだが、GMT とつけることで、30日0時 の位置に表示。
  ポップアップの日時も、30日0時 になる。
  これを GMT+0900 なんて書いたり、何もつけなかったりすると、
  29日15時 の位置に表示され、
  ポップアップの日時も 29日15時にされてしまう。
※apache を日本語ロケールで動かしていない人は、また違うと思う。

まだ作業中なんで、またなにかあったら追記する。
[PR]
by xiaoxia | 2008-07-29 12:52 | ソフトウェア | Comments(0)

reddit インストール

今日の作業は reddit のインストール。

reddit とは、みんなでお互いに紹介したいページを投稿する web アプリ。
http://ja.reddit.com

Tumblr に似ているような気もするけれど、
Tumblr と違うのは、コメント(投票)できることと、
それによって順位付けされること。
Tumblr にふぁぼったーを組み合わせた感じ?
誰かを follow する仕組みもあるので、twitter に似たところも。
自分だけの非公開 reddit も作れるっぽい。

そしてローカルに入れて、グループ内の情報共有ツールにもできます。
なわけで構築。
ソースの入手はここから。
http://code.reddit.com/
インストール方法は以下のページ。
Development → Reddit Start to Finish

システムに必要なものが一覧になっているけれど、
実はこれでは全然足りない。
Python で動くのだが、シンプルな構成で Python がインストールされていると、
あれもないこれもないと、自動的にもりもりとインストールされる。
私が構築した環境はポリシーの厳しい多段串になっていて、
自動ではダウンロードされない環境だった。
そこで手動で落としてきてインストールしなくちゃならないのだが、
CentOS 5.2 64bit だったので、
rpm が用意されていなかったり、バージョンが古かったりで、
それぞれのサイトからソースを落としてきてインストール。
それだけで 20-30 個くらい入れたような気が…。
もう死ぬかと思った<大げさ
上記のインストール方法を見て「なんだ簡単じゃん」と見くびると
大変な目に遭う(笑)


*今日の tips:その1:reddit の環境設定ファイル example.ini
・プロクシは IP:PORT と書く
・timezone を JST にすると動かない
・domain は localhost じゃなくて、ちゃんと ***.co.jp とかにする

*今日の tips:その2:起動
起動には
  > paster serve --reload example.ini port=8080
と書いてあるけど、これだと使用中のログが画面に流れてくる。
バックグラウンドで実行して、そのターミナルを終了すると、
reddit にアクセスしたときに Internal Server Error が発生する。
というわけで、
こんな感じに、デーモンモードで起動すると大丈夫っぽい。
  > paster serve --reload --daemon example.ini port=8080
[PR]
by xiaoxia | 2008-07-03 22:35 | ソフトウェア | Comments(0)
自作のEmacsチートシートを公開してみる(Unix的なアレ)

Emacs と聞いて飛んできましたよ(笑)
なるほど、コマンド一覧ね。
このあたりはもう全部頭に入っちゃっているので
(というか体が覚えている)、
一覧にはしませんです。
これ以外で、私が便利に使うコマンドはこんな感じ。
カッコ内はコマンド名なので、M-x の後に入力しても同様のことができるよ。

・Ctrl-x RET f :現在のファイルの文字コードを変える(= set-buffer-file-coding-system)
そのまま Ctrl-x Ctrl-f で保存する
保存時に違う文字コードに変えられちゃったら、
Emacs が対応していないってことなので、諦める。
例えば、UTF-16 系とかは、対応していないことが多い。

・Ctrl-x RET p :プロセスI/Oの文字コードを変える(= set-buffer-process-coding-system)
例えば、デバッガ(perldb)中でプログラムを動かしていて、
プログラムの出力する文字列は SJIS なんだよね、って時は、
このコマンドで SJIS に変えておくと、
文字化けせずに出力文字列が見られて便利

・Ctrl-x r k :長方形killing(= kill-rectangle)
領域指定した部分を四角く切り取ることができる。
表計算で列の削除をするみたいなイメージ。
たとえば、縦がそろっていて表ぽくなっているテキストとか、
左から2行目から3行目を削除したいんだよね、なんてことができる。
killing なので、切った領域は保存されています。
領域を保存しない時は、以下。
Ctrl-x r d (= delete-rectangle)

・Ctrl-x r y :長方形yank(= yank-rectangle)
killing した部分を貼り付けることを yankって言います。
たとえば、前述で切り取った行を、行末に貼り付け、ができる。

・DIRED 関連
d バッファ削除(複数選択できる)
→ RET 削除実行
f 現在のウィンドウにバッファを開く
1 ウィンドウ分割を解除して選択したバッファを開く
[PR]
by xiaoxia | 2008-02-13 18:45 | ソフトウェア | Comments(0)

今日は trac な日

ずっと trac のインストールやら、
カスタマイズやら。
上手く動かないときに、
原因が python なのか svn なのか sqlite なのか、
なかなか切り分けが難しいのであった。

今日ハマったことと、解決できたこと。

●svn 絡みの trac のエラーについて

Oops...

Trac detected an internal error:

というのが出た。

内容はこんな感じ。
原因は、svn/projcect 以下を手動でいじっちゃったため<ダメじゃん(>_<)
リポジトリのディレクトリが違うと言われているが、文字列上は同じ。
どうやら変更時刻とか、その手のユニークな ID もくっつけて
内部的なリポジトリ名にしているくさい。

2007-**-** **:**:**,121 Trac[main] ERROR: The 'repository_dir' has changed, a 'trac-admin resync' operation is needed.
Traceback (most recent call last):
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥web¥main.py", line 406, in dispatch_request
dispatcher.dispatch(req)
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥web¥main.py", line 191, in dispatch
chosen_handler = self._pre_process_request(req, chosen_handler)
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥web¥main.py", line 263, in _pre_process_request
chosen_handler = f.pre_process_request(req, chosen_handler)
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥versioncontrol¥api.py", line 73, in pre_process_request
self.get_repository(req.authname).sync()
File "D:¥TracLight¥python¥Lib¥site-packages¥trac¥versioncontrol¥cache.py", line 82, in sync
raise TracError("The 'repository_dir' has changed, "
TracError: The 'repository_dir' has changed, a 'trac-admin resync' operation is needed.


'trac-admin resync'をやれと書いてあるが、そのままコピペしてもダメ。
http://trac.edgewall.org/ticket/5207にある通り、
プロジェクトを指定する。
trac-admin /path/to/trac/project resync

注意するのは、第1引数は、svn/project ではなくて、trac/project である点。
これでキャッシュが再構築される。

このページ、trad-admin だよ、と教えられた人が、
trad というタイポをそのまま入力して
ダメでしたー、と答えているのがおかしい(笑)

● sqlite の schema

レポート用クエリのカスタマイズの例は載っているのだが、
今回、はカラム自体もカスタマイズしたので、
そちらも検索したいわけである。
カスタムクエリで GUI から設定できるのだが、
これは保存ができないので、
保存できるクエリという形にしておきたい。
そのためには SQL を書かねばならんのだが、
schema がどこにも載ってない。
schema がわからないで、どうやって SQL 書くんだYO!?というわけで、
色々探してやっと見つけた。

DOS のコマンドプロンプトから
c:¥> sqlite trac.db
sqlite> .schema

こんだけ。
こんだけのことにものすごく彷徨ったよorz
まぁハマるというのは、概してそういうものなのだが。

SQL はあんまり書いたことがなくて、
インストール後のデフォルトで DB 作って TABLE 作って、
INSERT でぶち込んで、簡単に SELECT、みたいなことしか
やったことがない。
なわけで、実はよく知らない。
チューニングとかしないと、DB の良さはわからないんだろうけどね。

で、今回はカスタマイズしてカラムを増やしたので、
そいつらが別 DB に保存されており、
LEFT OUT JOIN をする必要があるらしい。
絵ではわかる。
□=□←□って感じでしょ。
でも自分で書いてみるとうまくいかないのね。
しばらく格闘する予定。

● Trac について

実際に使っているのは Windows 版 Trac だけ。
本当の Trac はインストールなんかが面倒くさいので、
「Trac月」(とらっくらいと)の方を使ってる。
本当に、ほんの数分で環境ができあがります。
Subversion との連携もばっちり。

中身が Python というのが、ちょっとカスタマイズしづらい感じだが、
普通に使う分には、カスタマイズは Web GUI からなので、
あまり困らないと思う。
[PR]
by xiaoxia | 2007-11-09 18:12 | ソフトウェア | Comments(0)

MS Office に使える技たち

Wordのお節介をなくす10の方法
Excelのお節介をなくす10の方法
PowerPointのお節介をなくす10の方法

いずれも ITmedia の記事。
これは重要だねー。
すでに自分でやっていたものも多いけど。

やっぱ一番お節介なのは、(C)って入れたら©にされる類ね(笑)
もう何が起きたかわからなので、最初は慌てましたさ。
この手の予防方法が、上記リンクにまとめてある。
これでも直らない場合は、IMEのオートコレクトが効いている可能性がある。
そちらの設定も確認したらいいと思うよ。
ちなみに、私はオートコレクトも文字種による自動修正も
全部 OFF にしてある。
めちゃめちゃ不要(笑)

ほかに、私はこんなことをしている。

・ツールバーの印刷ボタンは消す
プレビューの隣にあるので、うっかり押してしまう。
基本的に、押したら困るものは、表示させない。
ボタンを使わないなら、ショートカットキーが便利だと思うんだが、
これは慣れると無意識に実行してしまって、自分でびっくりすることがあるので、
あえて使わないようにしている。
印刷も、意識的に手間をかけて、メニューから選ぶことにしているのだよ。

・[Word]編集記号は全て表示
ツール→オプション→表示の「表示記号」は全部表示させる。
見た目にインデントが揃っていても、
表示させてみると、スペースで埋めてあったりする。
デフォ非表示になっているので、表示させないと気付かない。
いっぺん表示させてみることをおすすめ。
スタイルの汚さに辟易すること請け合い(笑)

・[Word]作業ウィンドウ「スタイルと書式」は常に表示
そして「使用されている書式」を選択。
ちょっとでも変な書式が入りこんでいたら、ここでわかる。
そのつど直していくと、無駄の無い美しいスタイルの文書が完成。
直し方のコツは、
一度「書式のクリア」を選択してから、
目的の書式を選択すること。
作業ウィンドウがあるのはOfficeXP からかな。
その前のバージョンはツールバーにスタイルが出る。
いちいち選び直して修正するのは面倒だけど、
キレイな文書になるよ。

・スペルチェックなどはインストールしない
スペルチェックに限らず、インストール時はカスタムを選択し、
不要なものは入れない。
「インストール/必要時にCDから/インストールしない」という
3種類が選択できるモジュールがあるので、
絶対不要か悩むものは、CDからを選んでおく。
後々必要になっても、再インストールということにならない。

・[Word]音声データを保存しない
そんなものあるのか?と思うかもしれないけど、
Word 2003 以降は入っているらしい。
ツール→オプション→保存の「言語データを埋め込む」のチェックボックスを外す。
ファイルサイズがちょっと小さくなるらしい。
ディスクスペースが残り少ないときに
「音声データを保存できませんでした」とか怒られないで済むし。
この状態は、テンプレートに保存されるので、Normal.dot に保存しておくと良い。

・禁則は高レベル
言壺せんぱいの記事を読んでから、高レベルにすることにした。
やっぱ美しい文書って、早く読めるんだよ。

・自分ツールバー
これはあんまりおすすめできない。
ほかのマシンを使ったときに、これがないと作業できない体になるので(笑)
でも私は作っちゃってる。
乗せているボタンは、
グループ化、グループ化解除、最前面、最後面、頂点の編集、など、
描画オブジェクト処理系が多い。
オブジェクトを選択して右クリックでもできるけど、
右クリックのときにカーソルが動いちゃって押し損ねることがある。
選択してボタンを押す方が速い。

・[PPT]スライドマスタを活用
タイトル領域やフッタやロゴ、ページ番号など、
全ページで入れるものや、場所が決まっているものは、
スライドマスタで設定。
プレゼン資料などは、全ページに会社のロゴを入れますわね。
ああいうのは、スライドマスタに入れるんですよ。
新しいスライドを追加すると、自動で設定してくれるから楽チン。
ツールバーに「スライドマスタの表示」ボタンを入れておくと、
スライドマスタの表示も楽チンに。

・[PPT]グリッドに合わせない
グリッドにあわせる設定にしてあると、マウスで微妙な位置の調整ができない。
記事ではグリッドの単位をすごく小さくしておくというのが書いてあるが、
私は外してしまう。

・[Excel]オートフィルタのボタンを表示
オートフィルタは、文字列の値のバリエーションを統一するのに便利だし、
たくさん行数があるときに、目的の行を見つけるのにも便利。
そのほかにも色々使うので、ボタンは表示させておくと楽チン。
ただし、このボタンはトグルボタンではないので、
ボタンを再クリックしてもフィルタが OFF にならない。
Word では全てのコマンドをボタンにしてツールバーに乗せられるのだが、
Excel はそれができないみたい。
マクロとか VBA とか書けばいいのかもしれないけど、
安全性を考えて、基本的に常にマクロ OFF なので、使いたくない。
結果、フィルタ解除はいちいちメニューから選ぶ羽目に。
この点が非常に不満。

書き忘れたけど、なんたらアシスタントを消すのはマスト(笑)
イルカとかUZEEEEEE。

自分はこんな風にしてるよーというのを集めたら、
すごい Tips 集になりそうな悪寒。
集合知ってやつっすね。
もう誰かやってそうだな。

追記:
コメントでいただいたオートフィルタについてのTipsが超便利なので、
記事内にもいれとく。
コメントいただいた時から、リンク先が変わってる。
http://pc.nikkeibp.co.jp/article/NPC/20060215/229463/
ツールバーでオートフィルタのオン/オフを切り替える:Excel即効テクニック
検索用kwd:ボタン、マクロ、ツールバー、ユーザー設定、コマンド
[PR]
by xiaoxia | 2007-04-25 18:35 | ソフトウェア | Comments(4)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞