2008年11月アーカイブ

 メイドめーるでは日本語のメールを送信するために、 ヽ( ・∀・)ノくまくまー(07-31[長年日記])で書いていただいている、Iso2022jpMailerを使っています。
クラスを継承するだけでつかえるとてもいいアイデアだったのですが、たった一つ問題が。

IMGP8827.JPG

「~」が文字化けするのです。普通のアプリケーションだったら、まあ横棒でいいか、とか言えるし、実際メイドめーるも今日までそうやってごまかしてきたのですけど。萌え萌えなメイドさんがメールをくれるアプリケーションにおいて「~」がつかえないと言うことは、「おはようございます~」がつかえないことになってしまいます。
「おはようございますー」と「おはようございます~」は断じて違うのです!

とまあそんなわけで、技術的に追求した結果、一応「~」が出せるようになりましたのでご報告です。

IMGP8828.JPG

やり方としては、Iso2022jpMailer の

   @mail.body = NKF::nkf('-j', @mail.body)
の部分を
   @mail.body = NKF::nkf('-Wxm0 --oc=ISO-2022-JP-1', @mail.body)
に置き換えます。
ついでに、タイトルとかに「~」がはいることもあるだろうから、
      text = NKF.nkf('-j -m0', text)
も、
      text = NKF.nkf('-Wxm0 --oc=ISO-2022-JP-1', text)
にしちゃいました。

技術的な話

正直に言うと、なんでこれで化けないのか、最終的な理由は理解できていません。
ただ、あれこれやっているうちに、化ける時と化けない時があって、比較するとこうなっていることが分りました。

wave_on_jis.PNG

上がうまくいく場合で、下が駄目な場合です。日本語メールなのでJISコードでエンコードしてあります。
OKな時は1B 24 42で始まっていて、駄目な時は1B 24 48で始まる...、つまり、JIS X 0208-1983でエンコードしてあればOKで、JIS X 0212-1990だと駄目なことが分ります。
NKFのコマンド詳細を見ながら、irbでいろいろやってみると。

>> NKF::nkf('-jWxm0', "~").each_byte{|b| print b.to_s(16)+","};print "\n"
1b,24,28,44,22,37,1b,28,42,
=> nil
>>NKF::nkf('-Wxm0 --oc=ISO-2022-JP', "~").each_byte{|b| print b.to_s(16)+","};print "\n"
1b,24,28,44,22,37,1b,28,42,
=> nil
>> NKF::nkf('-Wxm0 --oc=ISO-2022-JP-1', "~").each_byte{|b| print b.to_s(16)+","};print "\n"
1b,24,42,21,41,1b,28,42,
=> nil
>> NKF::nkf('-Wxm0 --oc=ISO-2022-JP-3', "~").each_byte{|b| print b.to_s(16)+","};print "\n"
1b,24,28,50,28,37,1b,28,42,
=> nil
--oc=ISO-2022-JP-1の時だけ、ねらい通りの変換をしてくれるようです。ということで、Iso2022jpMailerにも、同じ引数を渡してあげると、「~」が出るようになった次第。
「ISO-2022-JP-1」って、JIS X 0212に対応させるための引数で。むしろ逆のような気がするし、なんでISO-2022-JP-3で駄目なのかも謎です。


Mextractrに関する注目が集まっているので、自分が使っているライブラリを公開します。

mextractr_webapi.rb

#RubyForgeのプロジェクトは今申請中なので、gemはちょっとお待ちくださいませ。

使い方としては、APIキーを取得して、
$ script/console
Loading development environment (Rails 2.0.2)
>> require "mextractr_webapi"	
>> mextractr = MextractrWebApi.new(MEXTRACTR_KEY)
>> res = mextractr.parse("11/27(木)、京都市中京区のはてな京都オフィスでShibuya Perl Mongersテクニカルトークのパブリックビューイングが開催されます。")
>> pp res
{"id"=>"20081127_0001",
 "updated"=>"2008-11-27T10:05:38+09:00"
 "response"=>
  "\n\n  Mextractr WebAPI results\n  2008-11-27T10:05:38+09:00\n  \n    Mextractr\n  \n  20081127_0001\n  \n    \n    20081127_0001\n    extracted event metadata\n    \n      Mextractr WebAPI\n    \n    2008-11-27T10:05:38+09:00\n    11/27(木)、京都市中京区のはてな京都オフィスでShibuya Perl Mongersテクニカルトークのパブリックビューイングが開催されます。\n    \n    \n    \n  \n\n",
 "content"=>
  "11/27(木)、京都市中京区のはてな京都オフィスでShibuya Perl Mongersテクニカルトークのパブリックビューイングが開催されます。",
 "where"=>
  [{"georss:point"=>nil, "valueString"=>"木)、京都市中京区"},
   {"georss:point"=>nil, "valueString"=>"京都"}],
 "when"=>[{"valueString"=>"11/27(木)", "startTime"=>"2008-11-27"}],
 }
という具合です。
res['when'][0]['startTime']とか、res['where'][0]['valueString']という具合で各値を取り出すことが出来ます。

あと、MextractrWebApi.new(MEXTRACTR_KEY)の二つ目の引数にloggerを渡すと、取得してきたatomの内容とかを見ることが出来るので、挙動がおかしい時に犯人を突き止める一助になります。



Drecom Award on rails 2008において、メイドめーるメタデータ賞を受賞しました。

もともとメタデータさんのMextractr WebAPIを見て作り始めたアプリケーションなので、もしかしてとれるかなぁ、と思っていたのですが、その通りになるとやっぱり嬉しいです。

メタデータの野村さんがブログにメッセージを書いてくださっています。

[mashup] メイドめーる その2 【表彰式!】 [mextractr] - 野村直之の日記: IT - とくにメタデータ - , 音楽
3分間ほど講評させていただいた中で、
・エンタープライズシステムの近未来を見せてくれている(!)
など申し上げました。これは、メイドめーるに対する正直な感想です
えええぇ~っ!?
そんな大それたアプリケーションではないのですけどね(汗)


CSSを書いていると、「id要素の頭はシャープだっけドットだっけ」というのが思い出せなくてときどき検索する羽目に陥ります。
不必要に物事暗記しない主義なのですが、さすがにこれは効率が悪い。

  • idは、ユニークさを表すidだから、順番を表す#がつく。
  • classは、プログラミング言語のclassと一緒だから、this.getValueみたいにドットがつく。

これで覚えられるかな?なんか他にいい方法があったら教えてください。



うわぁ。携帯キャリアとまさかの正面衝突。

iコンシェルでは、羊のキャラクター「ひつじのしつじくん」が待受画面に現れ、プッシュで送られる情報が画面に表示されるので、それにアクセスすることで詳細情報が得られる仕組み。
ケータイが執事になる、ドコモの新サービス「iコンシェル」が発表 | 携帯 | マイコミジャーナル

ヒツジの執事は....
夢夢色TOWN | ひつじ執事さん
←ボクが先月お願いして描いていただいていたイラストです。
電話番号入れたら住所引っ張ってくる機能とか、ボクが思っていたものそのまま...orz

先を越されたのは悔しいです。でも、つまり自分の見ていた方向性は間違っていなかったと言うことだし。もし自分が作っていたら、アドレス帳に勝手に情報追加とかはとても出来なかったはずなので、キャリアさんがやるというのであれば、楽しみに見ていようと思います。



mysqlをアップグレードしたらば。
mysql> FLUSH PRIVILEGES;
ERROR 1146 (42S02): Table 'mysql.procs_priv' doesn't exist
こういうエラーが出るようになった。

たぶんmysqlを4→5にアップグレードしちゃったことが原因。yum一発アップグレードは怖いなぁ。

ともあれ、Table 'mysql.procs_priv' doesn't existでググったら、

MySQL Bugs: #9934: DROP USER fails if mysql.procs_priv doesn't exists というのが出てきて、冷たいことを言われた末に、
If you encounter this after an update, run mysql_upgrade_shell command: it will create the missing table.
(アップグレード後にこのエラーが出たんだったら、mysql_upgrade_shellコマンドを走らせろ。それで欠けてるテーブルが作成されるから)
ということになっている。

(当然バックアップをとってから)やってみた。
[furukawa@www ~]$ 
sudo mysql_upgrade_shell --verbose --datadir=/var/lib/mysql --user=root --password=****
Running /usr/bin/mysqlcheck  --password=**** --check-upgrade --all-databases --auto-repair --user=root
expressionengine.exp_actions
error    : Table upgrade required. Please do "REPAIR TABLE `exp_actions`" to fix it!
expressionengine.exp_captcha
error    : Table upgrade required. Please do "REPAIR TABLE `exp_captcha`" to fix it!
expressionengine.exp_categories
error    : Table upgrade required. Please do "REPAIR TABLE `exp_categories`" to fix it!
expressionengine.exp_category_field_data
:(略)
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
This script updates all the mysql privilege tables to be usable by
the current version of MySQL

done
REPAIR TABLEする必要があるらしい。

[furukawa@www ~]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 82
Server version: 5.0.68 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use expressionengine;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> REPAIR TABLE `exp_actions`;
+---------------------------------+--------+----------+----------+
| Table                           | Op     | Msg_type | Msg_text |
+---------------------------------+--------+----------+----------+
| expressionengine.exp_actions    | repair | status   | OK       |
+---------------------------------+--------+----------+----------+
1 row in set (0.00 sec)
:(略)
以下、この調子でテーブルを片っ端からREPAIRしていく。

columns_priv以降のテーブルはmysqlデータベースに入っている。
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> REPAIR TABLE `columns_priv`;
+--------------------+--------+----------+----------+
| Table              | Op     | Msg_type | Msg_text |
+--------------------+--------+----------+----------+
| mysql.columns_priv | repair | status   | OK       |
+--------------------+--------+----------+----------+
1 row in set (0.00 sec)

:(略)
mysql> exit
Bye
[furukawa@www ~]$ 
sudo mysql_upgrade_shell --verbose --datadir=/var/lib/mysql --user=root --password=****
mysql_upgrade already done for this version
This script updates all the mysql privilege tables to be usable by
the current version of MySQL

done
[furukawa@www ~]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 84
Server version: 5.0.68 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
これでいいらしい。あんまり自信がないのだけれど、エラーメッセージでググった時に日本語の情報が出てこなかったので、とりあえずブログにあげておきます。


Secretary bird by Lip Kee

 おかげさまで、メイドめーるの登録者は、今朝の段階で1400名に到達しました。
使っていただくうちに問題点も見えてきたので、緊急度の高いものから順次対応させていただいております。

機能追加と不具合修正

ユーザー登録削除できるようにしました。

→ログイン後、「ユーザー登録情報を削除(退会)する」で削除できます。

範囲指定の予定があった場合に朝のメールが届かないことがあった

→ちゃんとメールできるように修正を行いました。

複数予定があった時のメールが見にくかった

→改行入れました(単純ミスです。ごめんなさい。)
 また、開始時刻でソートして表示するようにしました。

お問い合わせと回答

あと、ブログなどでメイドめーるを見た方からいただいた感想、あと、メールでいただいた問い合わせのうち、公開した方が良さそうなご意見などをまとめました。

なんでメイドなんだ

 萌えは大事な日本の輸出産業ですっ!

パスワードを忘れた

 パスワードリマインダは必須ですね。今追加しているので、ちょっとお待ちくださいませ。
今ログインできなくて困っている方については、メールいただけたら個別に対応させていただいております。

なお、先週前半、登録に失敗する不具合の際に、複数ユーザーアカウントが出来てしまってログインできない方が出現しました。
これについては、すでに解決済みなので、先週ログインできなくてあきらめてしまった方、もう一回試していただけるととても嬉しいです。

メイドじゃなかったら使うのに

執事が欲しい/ツンデレが欲しい

 やっぱり(笑)
そういうご要望があることは把握しているので、ちょっとお待ちくださいませ。

メールを送った時のタイトルについて

 文章にwhat(~が)があるとタイトルとして使うようにしているのですが、あんまり意図通りにならないことが多いみたいです。
改善考えているので、これもちょっとお待ちくださいませ。

メールを送った時の時刻について

 今のところ、日付はとれても時刻がとれないので、メタデータさんに機能追加をお願いしているところです。



メモ。sqliteでconcat、つまり文字列の結合をやりたい時は、"||"をつかう。
sqlite> select "abc"||"def";
abcdef
なんでそんな変な記号を選んだかなぁ...

Re: [sqlite] CONCAT in SQLite (was Re: [sqlite] correct syntax for CASE.


先日書いた「はてな流大規模データ処理」を見てきたに大量のブックマークをいただきました。どうもありがとうございます。

「はてな流大規模データ処理」を見てきた

勝手に分析すると、関西で行われるイベントだったので首都圏の人があまり見に来られない状態で、みんな大好きはてなのお話、という条件がおいしかったかな、と思っております。
技術的にも大変興味深かったし。

ところで、東京にいた頃大変お世話になっていたOBII 大手町ビジネスイノベーションインスティテュートの関西発のイベント「第11回OBIIミーティング「はてなブックマークPR大作戦」」が11/29に開催されます。

OBII 大手町ビジネスイノベーションインスティテュート: 第11回OBIIミーティング「はてなブックマークPR大作戦」

関西で行われるはてなのイベント、ということで二匹目のドジョウの条件がそろっておりますので、興味のある方は是非どうぞ。



GIGAZINEに載った!

先日公開したメイドめーるですが、GIGAZINEさんに取り上げていただいたおかげで、想定を上回るユーザーさんに登録いただいております。
毎朝メイドさんからGoogleカレンダーの予定がメールで届く「メイドめーる」 - GIGAZINE

ところが、101人目以降のユーザー登録に失敗してしまうバグがあったため、たくさんのユーザーさんが、登録できないでエラーになっちゃっているようです。ごめんなさい。

この不具合は、先ほど修正されました。

登録しようとしてエラーになった方は、中途半端に登録が完了した状態になってしまっているので、お手数ですが、以下の手順で登録し直していただくようお願いいたします。

1. メイドめーるにアクセス。
メイドめーる

2. 登録したユーザー名とパスワードでログイン
login.PNG

3. 「ユーザー登録情報を削除(退会)する」をクリック
config.PNG

以下、確認画面で「削除」を押すと登録情報が削除されるので、再度ユーザー登録していただくことが出来るようになります。お手数おかけしてしまって申し訳ないですが、よろしくお願いいたします。



メイドめーるというアプリケーションを公開します。

メイドめーる

メイドめーるは、Googleカレンダーの予定を毎朝、携帯電話にメールしてくれるサービスです。 朝のメール

メールに返信することで、新しい予定を登録することも出来ます。決まったフォーマットでなくても、打ち合わせのメールをそのまま転送すればOK。
こんなメールが
こんな予定に

ユーザー登録しなくても、メールの内容の解析だけ試してみることが出来るので、よかったら試してみてください。
試してみる - メイドめーる

技術的な中身とかは、関西Ruby会議01でお話しした資料があるのでこっちをご覧くださいませ。


(2008-11-11 21:06:05追記)
naoya さんが資料を公開してくださいました。
KOF 2008 の発表資料 - naoyaのはてなダイアリー
(追記おわり)

(2008-11-19 19:25:24追記2)
Codegineにレポートがあがりました。
「実現したいことを計算機の問題に置き換えることが『技術力』」、伊藤CTOが"はてな流"大規模データ処理の極意を語る:CodeZine
(追記おわり)

KOF2008:関西オープンソース2008というイベントに来ています。 はてなのnaoyaさんの講演があったので、講演メモを公開。

#ボクがメモした内容であって、100%言ったとおりに書いてあるわけじゃないので、参考としてご覧ください。

(続き)




| | トラックバック(1)

神戸でWebについて語るイベント、ウェブテコの第二回に行ってきました。 前回のExpressionEngineに続いて今回は、透過pngについてお話ししてきました。 IEpngFix.pdf

簡単な方として説明したIEpngFixはこちら。
ユンサンの/융상의/YungSang's: 透過PNG と IE と IE7 まとめ
高機能版のIE PNG FIX v2
IE PNG Fix - TwinHelix

あと、懇親会の時に、透過pngを使ったサイトの例をもっと見てみたいとのご意見をいただきました。軽くググってみると、こういうまとめを発見。
透過をきれいに使ったウェブデザインいろいろ - DesignWalker
参考にしてくださいませ。



このアーカイブについて

このページには、 2008年11月 に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは 2008年10月 です。

次のアーカイブは 2008年12月 です。

最近のコンテンツは インデックスページ で見られます。過去に書かれたものは アーカイブのページ で見られます。

Powered by
Movable Type