トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2005-06-01 (Wed) [長年日記]

_ ログインできない

lilyってtrackback auto discoveryに対応してないんですっけ。 それはさておき、

現在、実行したximapdにログインするところで躓いてます orz。うーん.ximapdに書いたパスワードと同じような気がするんだけど…あ、やっぱり平文を書いちゃいけないのか?

[てくのーとより引用]

.ximapdのパスワードは平文でOKです。 ximapdはCRAM-MD5認証しかサポートしてないので、そのせいかもしれないですね。

SSLをサポートしたので、SSLな時はLOGINやPLAIN認証を許してもいいかなと思ってます。 OutlookはCRAM-MD5に対応してないみたいですし。

Tags: ximapd

_ ユーザ数

「出遅れた!」と思ったが、返ってきたメールは5番目だった。まぁまぁか(何がだ)。しかし、ユーザは前田さんを含めて3人しかいないと思っていたのに……(笑)。

[ただのにっき(2005-06-01)より引用]

たぶん、ユーザは3人ですね。 メールが5番目なのは、おそらくまだ使ったことのないSさんが入ってくれたのと、 自分が返信したからです;) 他にもちょっと試してくださってる方はいるようですが。

メーリングリストの方には、まだ使うつもりはないけど仕様には文句を付けたい、 という方も歓迎します(もちろん意見を採用するかは別)。

MLに振り分けられたメールもINBOXに入るようになった(?)のが目に付いた変更点か。

というのは、身に覚えがないので、再現条件が分かりましたら教えてください(って結局日記でやり取りしてるし^_^;)。

Tags: ximapd

_ ximapd.ac

ひさびさにproject-nameで調べると、ximapd.acドメインが取得されていることを発見。 うーん、ximapd.orgとか取っといた方がいいかなあ。 しかし、ユーザ数が3人でドメイン取るのもちょっと...。

Tags: ximapd

_ TMailのSyntaxError

5000件以上あるinbox/下のデータをimport中に落ちてしまいました orz とりあえず出力を貼っておきます

[てくのーとより引用]

すみません、

<URL:http://projects.netlab.jp/dev/ximapd/changeset/75>

でデグレードがおきてしまっていたようです。 TMail::SyntaxErrorをrescueするためだったのですが、::SyntaxErrorの方をとりこぼしてしまいました:(

SVNのtrunkでは修正しましたので、お試しください。 パッチは以下にあります。

<URL:http://projects.netlab.jp/dev/ximapd/changeset/101?format=diff>

テストケースを追加したので今後は大丈夫なはずです。たぶん。

Tags: ximapd

2005-06-02 (Thu) [長年日記]

_ TMailのSyntaxError

なんにしてもやっぱり例外は出てるんだな。 現象はよくわかってないけど、とりあえず TMail のバグと認定 (しかし直る時期は未定)。

[青木日記/T(2005-06-01)より引用]

意図的なものではなかったんですね。 ちなみに、

From: shugo@ruby-lang.org (Shugo Maeda

みたいにcommentを閉じてないとSyntaxErrorになるようです。

Tags: Ruby

_ TMailの修正

これ?

[青木日記/T(2005-06-01)より引用]

それでした。 パッチを適用したところ、ちゃんと(?)TMai::SyntaxErrorが発生されるようになりました。

Tags: Ruby

_ むかむか クリスタルレポート入門

仕事でCrystal Reportsを使ってみようと思って見つかったサイト。 いきなり、

ひょんなことら、クリスタルレポートを触ることになったのだが、これが、なんとも使いにくい。

[むかむか クリスタルレポート入門より引用]

という出だしに萎える。 何か難しそうだなあ。それも楽しくない方向に。

_ C#.NETでグラフとか印刷とか

どうもCrystal Reportの出力の出来(とくにフォントのレンダリング)が気に入らない ので、自前でやるかなあ。

C# によるプログラミング Windowsを見ると、 自前でやってもそんなに大変ではなさそうだ。 とくに、アンチエイリアスが簡単にできるのがいい。 こんな文章がただで読めるなんて気前いいじゃんと思ったら、この章だけだった。買うにはちょっと高いな。

ちなみに業務アプリじゃないっすよ。

本日のツッコミ(全6件) [ツッコミを入れる]

_ babie [帳票ツールはこれしか触ったことないですが、面白かったですよ。(with C# on .NET)> CrystalRe..]

_ shugo [ほう、おかげさまでちょっとやる気が出ました。 DBに接続する必要があるのかなと思ったのですが、メモリ上のオブジェクト..]

_ babie [DataSet オブジェクトさえあればどうにでもなりますね。 外部キー参照テーブル(明細)を引く DataSet を..]

_ 安達 [はじめまして、安達と申します。右上の子供さんの写真、いつ見ても可愛いですねえ。他人の私が見てもそうなのですから、お父..]

_ shugo [ありがとうございます。 でも最近上の子がわがままになって来て困っています。 甘やかし過ぎたのかなあ。]

_ 安達 [「3歳から5歳にかけては自我が形成される時だからそういうもんだ」と、精神科の先生が言っておられたから大丈夫ですよ。う..]


2005-06-06 (Mon) [長年日記]

_ System.Drawing

やっぱりSystem.Drawingは便利だ。画面描画と印刷時の描画をフォントも含めて 同じようにできるというのがよい。

monoでもGDI+から上が実装されるみたいだけど、System.Drawing.Printingとかも 実装されるのかなあ。


2005-06-07 (Tue) [長年日記]

_ ただ乗り対策としてのGPL

うちの会社でフリーソフトウェアを開発する場合、GPLの適用が推奨されているが、 これはFSFの理念に深く賛同し...というよりもただ乗り対策という側面が強い。*1

一方、ライブラリなどにGPLを適用してしまうと、プロプライエタリなソフトウェア からの利用のみならず、 一部のフリーソフトウェア からの利用も妨げてしまう。 この点を問題視する意見もある。

たんにただ乗りを防ぎたいだけなら、最近MySQLがライセンスの変更を行ったように、 「基本的にはGPL、ただし以下に挙げるライセンスのプログラムとのリンクは許可」 という方法を取ることもできる。 ただ、リンクを許可するライセンスのリストの管理が大変そうなのが気になる。

たとえば、OSD準拠のライセンスのプログラムとのリンクは許可する、あるいは DFSGフリーなライセンスのプログラムとのリンクは許可する、という戦略は 有効だろうか。 ライセンスの文面でそう書くのがまずいなら、リストにライセンスを追加する 条件として、contributorに周知しておくだけでもよいかもしれない。 ってMySQLは似たようなことをしているのかな。

ちなみに、Rastの場合は、依存ライブラリのAPRがGPL互換でない(とFSFが主張している)ので、もうちょっと複雑だ。 APRの利用を勧めたのは自分なので、ちょっと申し訳ない。

ただ、GPL側から見るとApache Licenseは不自由だ *2 ということになるのだが、GPLとの互換性の話を措けば、 Apache License(のVersion 2.0)自体は好ましいライセンスに見えるだけに もったいないと思う。 何とかしてください>えらい人

Tags: その他

*1  いや、もちろんFSFの理念もすばらしいですよ。

*2  誤解を生みやすい表現でした。「GPLを採用する人にとっては Apache Licenseは扱いにくい。」くらいの意味です。FSFがApacheをfreeでない と言っているわけではありません。

_ My license

ちなみに、自分が個人的に作ったものには以下のようなライセンスを 適用することが多い。

Copyright (C) 2005  Shugo Maeda <shugo@ruby-lang.org>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Tags: その他

_ sargeリリース

めでたい。

ruby-lang.orgも早くアップグレードしないとなあ。

Tags: Debian

_ BDB::Envを使わない

ロッキングサブシステムを使う必要がなくなったので、BDB::Env自体を 使わないように変更。

Tags: ximapd
本日のツッコミ(全1件) [ツッコミを入れる]

_ shugo [すみません、誤解を生みやすい表現でした。 「FSFがApache Licenseをfreeでないと言っている」とい..]


2005-06-08 (Wed) [長年日記]

_ C++の設計と進化

C++の設計と進化

まつもとさんにお借りした。

まだパラパラとめくってみた程度だけど、なかなか面白い。 え、ダブルディスパッチが最初に紹介されたのは1986年?、そんなに最近なの?、とか。

機会があれば、一度本格的にC++を使ってみたいな(一度ってところがポイント)。

Tags: 言語

_ SEGV

SEGVでRastのインデックスが壊れた:(

その後、~/ximapd/mails以下を新しいデータディレクトリにインポートすると やはりSEGV。どうもスタックが壊れているようだ。

とりあえず、ruby/ext/rast/rast.cのVALUE型のauto変数全部にvolatileを付けたら 落ちなくなった。

$ cd rast-0.1.1/
$ sed -i -e 's/^\( *\)VALUE/\1volatile VALUE/' ruby/ext/rast/*.c

これでしばらく様子を見てみよう。

Tags: ximapd
本日のツッコミ(全5件) [ツッコミを入れる]

_ なかだ [pool_new()してget_pool()するVALUEにはvolatileが必要そう。]

_ 安達 [右上の「お子ちゃま」の写真を見るたびに心が和(なご)みます。ついでに、生まれ故郷の松江を思い出して感慨に浸る私。]

_ shugo [そのあたりっぽいですね > volatile もう全部volatileにしといた方が面倒が少ないかなと思ったり。 ..]

_ なかだ [ripperのときにも書いたような気がしますが、 VALUE vhoge = hoge_new(void); ..]

_ shugo [そういえば、そんな話がありましたね。 Y君に伝えておきます。]


2005-06-09 (Thu) [長年日記]

_ BDBでSEGV

今度はBDBの拡張ライブラリでSEGV。

自前の拡張ライブラリを使うようにしたり*1、setup.rbを導入してディレクトリ構成を変更したり したので、svn updateする時は要注意です。

Tags: ximapd

*1  そこまでしてBDBにこだわる必要も ない気もするけど

_ スタンドアップミーティング

ちょっと最近だれぎみなので、ちゃんとスタンドアップミーティングを することに。 やっぱり、XPする時は時間の使い方をちゃんと考えないとぜんぜん 仕事がすすまない。夜中にがんばって帳尻を合わせるという手が 使えないから。

というわけで、もう寝よっと。

Tags: 仕事

_ soap4r-1.5.4でActionWebServiceが動かない

忘れてた。これだけは書いとかないと。

仕事の環境をruby_1_8ブランチの最新にしたら、ActionWebServiceが 動かなくなってしまった。 SOAP::Mapping::Registryの仕様変更のせいのようだ。

とりあえず、workaroundのパッチを上記のチケットに添付しておいたら、

The only reason we need the extra data is to get the QName for custom types we registered when we generate WSDL (stored in the info parameter to Registry#add as :type) What do you think of adding a SOAP::Mapping::Registry#find_mapped_type_qname, since find_mapped_soap_class will now already give us the SOAP class we want?

などと意見を求められたんだけど...出番ですよー>なひさん (と言って逃げる)

Tags: Ruby Rails
本日のツッコミ(全3件) [ツッコミを入れる]

_ nahi [1.5.4のバグです。意図としては、[0][0]にすべきですね。書き換え損ねました。Factory返してどうする。 ..]

_ shugo [むう。できれば、このあたりの仕様についてbitserfと相談していただけるとうれしいです。 http://dev...]

_ nahi [あい来てます。Gmailもだいぶ未読が溜ってるなぁ。]


2005-06-13 (Mon) [長年日記]

_ 既読管理

既読管理のバグが直った気がする。 気のせいかもしれない。

Tags: ximapd

_ Gmail

リスクを下げるために、Gmailにほぼすべてのメールを転送することに。

ただし、ピンポンをふせぐため、

 
:0c
* !^From:.*(postmaster|MAILER-DAEMON)
!username@gmail.com

のようにpostmasterとMAILER-DAEMONのメールは転送しないように している。 あ、Return-Pathが空とかの方がいいのかな?

ひさしぶりに使ってみるとずいぶん変わっていた。 UIに日本語を選択することもできるし、日本語のメールもISO-2022-JPで出せた。 リッチテキスト形式のエディタはかっこいいなあ。使わないけど。


2005-06-14 (Tue) [長年日記]

_ 雑談

ペアプロ中に後輩にVisitorの説明をしていたら、なぜか途中から オーバーロードとマルチメソッドの話になっていた。いかん、いかん。

でも、Visitorを使うと操作対象のオブジェクトからメソッドが分離 されていくのが気持ち悪い、というのはいい感覚だと思う。

追記:

Visitorパターンが悪いって言いたいわけじゃないですよ。念のため。

Tags: 仕事

2005-06-15 (Wed) [長年日記]

_ チャイルドシート

上の子の同級生が、車に乗っていた時に一針縫う怪我をして、 今日はお休みだったらしい。 別に事故というわけではなく、ちょっとした急ブレーキだか 何だかで、チャイルドシートに乗せていなかったために そういうことになってしまったようだ。

みなさん、気を付けましょう。

Tags: 家族
本日のツッコミ(全3件) [ツッコミを入れる]

_ 安達 [嫌がるんですよね、ちょうどその年頃。泣き叫んでまで縛り付けるのも、と、思いついつい外してしまいます。]

_ shugo [そうなんですよねえ。 でも、まあ、何かあるよりは泣かれる方がマシと思って縛り付けてます。]

_ 安達 [それができるかが、良き親と、駄目な親との境目かもしれませんね。 結局、うちは車を手放しましたので、もう悩みは無しです..]


2005-06-17 (Fri) [長年日記]

_ VIMでRuby Refactoring Browserを使う

~/.vim/plugin/rrb.vimに以下のような内容を書いておく。

command -nargs=1 -range RubyExtractMethod :call s:RubyExtractMethod(expand("<args>"), <line1>, <line2>)

function s:RubyExtractMethod(methodName, line1, line2)
    let path = expand("%")
    let out = system("rrb --extract-method " . path . " " . a:methodName . " " . a:line1 . " " . a:line2 . " --filein-overwrite " . path)
    if strlen(out) == 0
      edit
    else
      echo out
    endif
endfunction

で「:'a,. RubyExtractMethod foo」のように実行すると、 選択範囲がちゃんとfooというメソッドになる。 けっこうよさげ。

rrbコマンドのへルプを見ると、スーパークラスの抽出とかもできるようだ。

_ nodeline()

IRCでなかださんに教えてもらった、parse.yにあるデバッグ用の関数。 これがあれば、今まで

(gdb) p ((unsigned int)(((((struct RNode*)(ruby_current_node)))->flags>>(11 +8))&(((long)1<<(sizeof(NODE*)*8 -(11 +8)))-1)))

としてたのが、

(gdb) call nodeline(ruby_current_node)

こんなにすっきり!

括弧が多いのはcppのせいだよ。Lisperじゃないよ。

Tags: Ruby

_ ところてん

再度黒蜜に挑戦するも、あえなく敗退。 T君はハチミツでおいしかったと言っていたけれど、絶対ありえない。

今後は無理せず酢醤油でいただきます。

Tags:
本日のツッコミ(全1件) [ツッコミを入れる]

_ まつもと [実際には「p nodeline(node)」ですね。callだと表示してくれないでしょう? っていうか、今までそんな..]


2005-06-18 (Sat) [長年日記]

_ gdbのcall

実際には「p nodeline(node)」ですね。callだと表示してくれないでしょう?

[Journal InTime - VIMでRuby Refactoring Browserを使う , nodeline()より引用]

あれ、callでも表示してくれますよね。

(gdb) call nodeline(ruby_current_node)
$7 = 631
(gdb) help call
Call a function in the program.
The argument is the function name and arguments, in the notation of the
current working language.  The result is printed and saved in the value
history, if it is not void.

もしかして最近できるようになったのかな?

今までそんなカッコほんとに使ってたんですかぁ。

[Journal InTime - VIMでRuby Refactoring Browserを使う , nodeline()より引用]

gcc -Eでnd_lineを展開させてコピぺしたものですけど、もちろん、 面倒なのでほとんど使ってません。

gdbでマクロを展開してくれたらなあと思うんですけど、難しいんですかねえ。

_ Ruby Conference 2005 ツアー

よって、飛行機代 + ホテル代は、

A日程: \83,000 + \6,600 * 4 = \109,400

B日程: \83,000 + \5,000 + \6,600 * 8 = \140,800

と概算されます。

旅行としては、この他、カンファレンス代、旅行保険代、移動運賃(電車やバス やTaxi)、食 事代などが必要となるでしょう。

[[ruby-list:40877] Ruby Conference 2005 ツアーより引用]

事前に聞いていた想定金額よりも安めだった:)

8月いっぱいくらいだったらキャンセルも可能とのこと。

Tags: Ruby
本日のツッコミ(全6件) [ツッコミを入れる]

_ ay [おー、みなさん行かれるのですね。レポートを楽しみにしています。]

_ しゅどう [適当な代理店に航空券だけ頼んで、ホテルは斡旋料金(single/doubleどちらも$79.99/night)で泊ま..]

_ shugo [ホテル代が6,600円だったらまあまあ安いのかなと思ったんですが、上記だと飛行機代が高いってことでしょうか。]

_ しゅどう [斡旋料金だと、ひとり4400円/泊($80 x 110円/$ ÷ 2)で済みます。と思ったのだけど、斡旋料金で泊まれ..]

_ shugo [single/doubleって書いてあったので、男同士でdoubleはないよな(いや、女の人ともないですが)と思った..]

_ TrackBack [http://shugo.net/jit/20050621.html Journal InTime 実はまだ決めか..]


2005-06-19 (Sun) [長年日記]

_ Net::IMAP#add_response_handler

登録されたハンドラは、登録時のスレッドとは別のスレッドで実行されるので 注意が必要だ。

実は、ximapdのr133でこれを忘れていて、--import-imapが動かなくなっていたんだけど (r138で復旧)。

Tags: Ruby
本日のツッコミ(全4件) [ツッコミを入れる]

_ 安達 [いつも関係ない話題ですいません、安達です。 土曜、日曜松江の実家に帰ります(実はもう妹が婿さん 貰って引き継いでくれ..]

_ shugo [フォーゲルパークには行ったことがないのですが、ただ券をもらった時にティファニー美術館に行って来ました。 なかなかきれ..]

_ 安達 [「ティファニー美術館」行ってみようと思います。 小学2年生の子供も喜びますよね?]

_ shugo [うちの子はそれなりにたのしんでましたけど、お子さんはフォーゲルパークの方が喜ばれるかもしれないですねえ。]


2005-06-21 (Tue) [長年日記]

_ Ruby Conference 2005

おー、みなさん行かれるのですね。レポートを楽しみにしています。

[Journal InTime - gdbのcall , Ruby Conference 2005 ツアーより引用]

実はまだ決めかねていたのですが、奥さんの了解が得られたので参加しようと思います:)

きっと帰るころには子どもがお母さん子になってるんだろうなあ。

Tags: Ruby

_ can't start skippy

apt-get dist-upgradeしたらskippyが起動できなくなったのでバグレポート したらREADME.Debianに書いてあった:(

F9を使っていたのだが、他のアプリケーションが先にgrabしているようだ。 しかたないのでF11に変えることに。

Tags: Debian
本日のツッコミ(全5件) [ツッコミを入れる]

_ 安達 [勝手なお願いですが、お子ちゃまの写真他にないですか。もしあったら増やしてもらえると、私は凄く嬉しいです。癒されます。..]

_ shugo [そういっていただけるとうれしいです。 最近撮るのをさぼっていたのですが、今度撮った時に載せますね。]

_ 安達 [いつも技術に関係ないことで申し訳ないです。 上がお姉ちゃん、下が男の子ですか? それなら うちと全く反対ですよ。 う..]

_ shugo [上が女ですけど、やっぱりけんかばっかりですよ。]

_ 安達 [やっぱり生存競争の訓練なんですね。そう思わないとやってられないほどやりますからねえ。]


2005-06-23 (Thu) [長年日記]

_ メールボックスの破壊

またメールボックスを壊してしまった……。killするにあたって、以前教わったようにいったん-STOPしてから、-TERMやら-INTやらやってみたけどダメ。結局-KILL。そして破壊(涙)。

どうも、--import付きで一度に複数のximapdを立ち上げると起きるっぽい。今回はちょっと自動処理した結果、10通くらいのメールがいっぺんに発生したので、それがきっかけみたい。.procmailrcの方で、lockファイルを作って排他をかますようにしてみた。

[ただのにっきより引用]

うーん、importの時はflockでロックしてるはずなんですけどねえ。 あ、もしかして、NFSだったりします?

Tags: ximapd

_ メールボックスの破壊(2)

とか言ってたら自分のメールボックスも壊れた:(

Rast::RastError: broken properties.db

というのはRastのせいなのかなあ。

Tags: ximapd
本日のツッコミ(全1件) [ツッコミを入れる]

_ ただただし [いえいえ、coLinux上でReiserFS使ってます]


2005-06-26 (Sun) [長年日記]

_ 手作りワンピース

ワンピース

手作りワンピースを奥さんが作製。

かわいく出来たけど、風邪気味だったのに無理して作ったので、 こじらせてしまったようだ。 無理はよくない。

Tags: 家族
本日のツッコミ(全1件) [ツッコミを入れる]

_ 安達 [おー! 大分大きくなっちょってですね。女の子はおませでしょう。]


2005-06-27 (Mon) [長年日記]

_ ウンコ

プール

風呂上がりに下の子がもらした。

現場は見なかった(まだ自分の体を拭いていた)のだが、 リビングで立ったままポロっとやったらしい。 クッションの上でやったので、ラグはセーフだったのが不幸中の幸い。

ちなみに、写真は表題とはぜんぜん関係ない。 プール出してるけど、だいぶ前の写真ですよ(言い訳)。

Tags: 家族

_ spamフィルタ

何となく出来たような気がする。

まだ、実戦投入してないけど:p

Tags: ximapd
本日のツッコミ(全3件) [ツッコミを入れる]

_ 安達 [うちにもこんな感じの写真がありますよ。この頃は水遊びが好きなんですよね。]

_ shugo [好きですねえ。もうすぐ幼稚園でプールがはじまるはずなんですが、水不足なのでどうなることやら。]

_ 安達 [広島もカラカラです。このまま行けば、水圧下げるでしょうね。]


2005-06-29 (Wed) [長年日記]

_ Reality Bites

いいニュースがあったと思ったら、悪いニュースが。 現実は厳しい。

Tags: その他

_ Rast 0.2.0

リリースされました。

バージョン番号のマイナーが上がっているけど、0.1.1からあまり大きな変更はないようです。


2005-06-30 (Thu) [長年日記]

_ Google Summer of Code for Mono

ものがたり経由:

Jaen Saul: Ruby.NET implementation

Florian GroB: Ruby.NET

[Summer2005 - Monoより引用]

Ruby.NETが二つ採用かあ。

Tags: Ruby

_ 「httpの数」を閾値にするフィルタ

そこで、樂水開発日記にあった「httpの数」を閾値にするフィルタを導入。これは賢いね!

[ただのにっき(2005-06-30)より引用]

実はやまださんがすでに以前に公開されていたようです。

Tags: tDiary
本日のツッコミ(全2件) [ツッコミを入れる]

_ ただただし [がーん。その記事は、読んでいたはずなのに……]

_ Florian Gross [(Mirrored from matz' blog.) Sorry for posting in English...]