ソラマメブログ

  

Posted by at

2008年07月09日

RC版ビューア 1.20.11 のビルド (の最後の部分)


久々にビューアのコンパイル。
DELLの安鯖で環境構築しつつ。VC++2005 Express Editionです。
・プロジェクトファイルに、無くなったファイルは、ビルドから除外、
必要な関数なのに入ってなくてリンカでこける場合は、ファイルを探して追加。
・lscript_compile とかで、flex/bisonが見つからないと言われたので、
cygwinにbisonとflexを入れる。
今回はcygwinを素直にc:\cygwinに入れたので、環境変数の設定はなし。


・LLViewerJoystick 周りのエラーがとれない。ndof_init_firstという関数は定義されていない。
5月ごろ?にいじっているようなので、
http://www.sljirastats.com/view_bug.php?key=VWR-5297
https://jira.secondlife.com/browse/VWR-6196
を見て、
llviewerjoystick.h

> #define LIB_NDOF (LL_WINDOWS || LL_DARWIN)

> #define LIB_NDOF (LL_DARWIN)
に変更。


> 1>------ ビルド開始: プロジェクト: newview, 構成: ReleaseNoOpt Win32 ------
> 1>リンクしています...
> 1>LIBCMT.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
> 1>ReleaseNoOpt/newview_noopt.exe : fatal error LNK1120: 外部参照 1 が未解決です。
> 1>ビルドログは "file://適当なディレクトリ\linden\indra\newview\ReleaseNoOpt\BuildLog.htm" に保存されました。
> 1>newview - エラー 2、警告 0
> ========== ビルド: 0 正常終了、1 失敗、19 更新、0 スキップ ==========

ここでやったこと:
(1)
WinMain関数はあるのにエントリポイントが見つからないのはなんでだろ~と
llappviewerwin32.cpp を見ながら思いつつ、
newviewに、llappviewerwin32.cppを追加。
ビルドしてみるが、変わらず。

(2)
ググって、別なプロジェクトで、なんとかいうライブラリが入ってないので追加汁!と
書いてあるのを見て、
追加したライブラリに同じ名前の関数?が定義されてて、そっちが
先にリンクされたんじゃないかと考える。
「ツール」「オプション」「プロジェクトおよびソリューション」
「VC++ ディレクトリ」「ライブラリ」で、
X:\Program Files\Microsoft DirectX SDK (June 2008)\Lib\x86
をいちばん上に入れていたので、一番下に移動。

同じく、「インクルードファイル」
X:\Program Files\Microsoft DirectX SDK (June 2008)\Include
をいちばん上に入れていたので、一番下に移動。
ビルドが通ったので、いったん休憩。

(3)
起動させるが、起動中にエラーが出る。
tuna さんのBLOGを読んで、同じ場所でこけてるのを確認。
http://tuna0.blogspot.com/2008/06/blog-post_20.html

スタックトレース見たり、変更箇所見たりするが、分からないので断念。
http://svn.secondlife.com/trac/linden/changeset?new=release%2Findra%2Fnewview%2Fllappviewer.cpp@738&old=release%2Findra%2Fnewview%2Fllappviewer.cpp@624


例によって一番苦労したのはマシンの熱で、
風の通りを考えて、部屋の片付け。
いよいよまずそうになったらケースに保冷材をくっつけてしのぐ。
HDDもそうだが、グラフィックボードもなかなかの発熱。
こりゃあRAIDの前に水冷やペルチエなんかの導入も検討しないと。。
とりあえずうちにあるヨーデルのCDをありったけ引っ張り出して再生した。
  


Posted by march at 23:00Comments(0)viewer

2008年04月17日

RC版1.20.1 (84760)が起動できない件の暫定対処


RC版1.20.1 (84760)が起動できない件の暫定対処(私案)


・対象VERSION
Second Life 1.20.1 (84760) Apr 15 2008 12:13:49 (Second Life Release Candidate)
(通称「1.20RC1」)

・症状
RC版を英語以外で一度でも起動すると、その後起動できなくなる
ログイン画面が出る前にクラッシュするため、言語を変更できない。
この状態でも正式版は起動できる。

・トラブル番号
VWR-6576
https://jira.secondlife.com/browse/VWR-6576

・仮の原因
英語以外のpanel_speaker_controls.xml が不適切。


・暫定対処(私案)
1.SLを全て終了させる
2.インストール先のpanel_speaker_controls.xmlをリネーム。
例:C:\Program Files\SecondLifeReleaseCandidate\skins\xui\ja\panel_speaker_controls.xml
を、「panel_speaker_controls.xml.org」にリネーム。
3.一つ上の「en-us」ディレクトリにあるpanel_speaker_controls.xmlを
jaディレクトリにコピーする。


・本格対処
1.20 RC2待ち

RC版の利用は各自の判断で行ってください。
正式版とRC版がなぜ分かれているのかが分からない場合は、使ったり文句を言ったり
しないほうがいいでしょう。


このやり方でも動かない場合や他の対処をご存知の方、コメントをお願いします。



---
各方面より意見をもらったので、過去の記事の一部を修正しました。
また、「おとなのソラマメ」カテゴリをはずしました。
これでまた公開停止になっていた場合は、別なトラブルだと思ってください。  


Posted by march at 23:53Comments(4)viewer

2007年12月19日

日本語で検索できるようにするパッチ

検索ウインドウで日本語で検索できないよ!というレポートが上がっていたので、
日本語で検索できるようにするパッチを作りました。
http://jira.secondlife.com/browse/SVC-1020



まだvoteが3でほとんど誰も注目していないようですが、
「入力が半角カナになっちゃうよ事件」(笑)のように
皆が必要だと思って投票すれば、正式リリースに組み込まれるかもしれません。


投票のしかたはこの辺のページが参考になります。

不満があればJIRAに投票
http://keimar.slmame.com/e65545.html

日本語入力おかしいと思ったらJiraで投票
http://movings.slmame.com/e65518.html

JIRAについて ~日本語環境のセカンドライフに困っていませんか - Chizzy Dilley のセカンドライフレポート
http://blogmag.ascii.jp/secondlife/2007/11/001060.html

Issue tracker-ja - Second Life Wiki
https://wiki.secondlife.com/wiki/Issue_tracker/ja




日本語で検索すると意外な発見があって面白いですよー

  
タグ :JIRA投票vote


Posted by march at 22:01Comments(1)viewer

2007年12月19日

日本語検索(SVC-1020)パッチ書き終わり

日本語検索(SVC-1020)について解析してパッチを書き終わりました。
こんな漢字で日本語も通ります。



現在のビューアでの問題点ですが、
ビューアで日本語を受け取ってから検索サイトに投げる前に「URLエスケープ」という処理が必要ですが、
そこがうまく動いていませんでした。


英数字や一部の記号以外はUTF-8にして1バイトずつ%をつける必要があります。
例えば「あ」はUTF-8では「E38182」なので「%E3%81%82」に変換します。

この処理を行う中で、バイト列を1バイトずつ扱う部分があるのですが、
その処理の中で1バイトをcharで取り出してU32(つまりunsigned int)に変換している箇所があり、
そこで符号拡張によりおかしくなっていました。
http://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E6%8B%A1%E5%BC%B5 などをご覧ください。
例えば、上記の「E3」は2進数では「1110 0011」ですが、先頭が1なため数字としては負の数になり、
内部で格納するときは「FFFFFFE3」2進数では「1111 1111 1111 1111 1111 1111 1110 0011」となります。
これを元に戻さないまま文字にしようとしていて「%FFFFFFE3」と変換されていました。
頭の%FFが空白のように表示されたため空振り時のメッセージとして「 FFFFE3」のように表示されました。

例えば「abあcd」で検索すると、「 Your search - ab FFFFE3 FFFF81 FFFF82cd - did not match anything」
のように、FFFFの前にだけ空白があくことが分かります。


解決方法ですが、必ず1バイトしか扱わないと分かっているため、0xFFでマスクして頭を0にしました。
ただ、ここ以外でもURLに動的引数を使うなど、URLエスケープが必要なケースがあるはずなので、
URLエスケープするための関数は別にしました。


あとは満足するまでテストケースを追加して、この説明を英訳してパッチと共に投げるだけですが、
JIRAのほうは投票が少ないようですね。
皆さん困っていないというよりは、日本語で検索できるはずだって知らないんじゃないでしょうか。
  


Posted by march at 12:56Comments(0)viewer

2007年12月18日

公式ビューアからの日本語検索(SVC-1020)

公式ビューアからの日本語検索がうまくいかないという報告が出ている。
http://jira.secondlife.com/browse/SVC-1020
It is not possible to retrieve it in Japanese.

llpaneldirfind.cpp 内を見ると、以下のようになっている。


void LLPanelDirFindAll::search(const std::string& search_text)
{
if (!search_text.empty())
{
// Replace spaces with "+" for use by Google search appliance
// Yes, this actually works for double-spaces
// " foo bar" becomes "+foo++bar" and works fine. JC

// Since we are already iterating over the query,
// do our own custom escaping here.

// Our own special set of allowed chars (RFC1738 http://www.ietf.org/rfc/rfc1738.txt)
const char* allowed =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
"0123456789"
"-._~$+!*'()";

std::string query;
std::string::const_iterator it = search_text.begin();
for ( ; it != search_text.end(); ++it )
{
if ( std::isspace( *it ) )
{
query += '+';
}
else if(strchr(allowed,*it))
{
// The character is in the allowed set, just copy it
query += *it;
}
else
{
// Do escaping
query += llformat("%%%02X", *it);
}
}

std::string url = gSavedSettings.getString("SearchURLQuery");
std::string substring = "[QUERY]";
url.replace(url.find(substring), substring.length(), query);
(略)


いまRFC1738 の日本語版を読んでいる。

ちなみに、「À」はUTF-8では「C3 80」である。
http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=C0
この1文字を検索したときのエラーは
---
Your search - FFFFC3 FFFF80 - did not match anything we could find within Second Life.
Nothing was found in Second Life containing "FFFFC3 FFFF80".

Suggestions:

* Make sure all words are spelled correctly.
* Try different keywords.
* Try more general keywords.
---
である。
  


Posted by march at 12:29Comments(7)viewer

2007年12月06日

1.18.6(0)で日本語入力は正式解消/字汚れは継続(寂)

1.18.6(0)がリリースされました。
http://secondlife.com/community/downloads-optional.php

・入力が勝手に日本語半角カナになる現象は解消しています。
 その場入力もOKです。
・字汚れはまだ発生します。
 UIサイズを大きくしている人は、字汚れが気になったらUIサイズを変えるかリログしてください。
・ログイン画面が美しくありません。
 ・プリファレンスボタンが出ないので、ビデオをオフにしたり描画スペックをいじったりするのは
  ログイン後でないとできません。
左上のメニューバーのEdit - Preferenceから変更できます。
 ・カメラ・コントロールや移動コントロールのパネルが表示されますが、
  ログイン画面の山の後ろ側が見えるわけではありません^^;
 ・バージョン情報がURLエンコードされてます。


公式BLOGのアナウンスはこちら。
http://blog.secondlife.com/2007/12/05/new-release-candidate-viewer-1186-rc0-available-today/#more-1449
>Positioning fixes for Japanese IME for fields where only ASCII is allowed
なんて文もあるので、ご一読を。
  


Posted by march at 12:08Comments(2)viewer

2007年11月15日

字汚れは内部的には修正済み?/半角カナになるのは直った

今朝のRCバグ・トリアージのログが出ていた。
http://wiki.secondlife.com/wiki/Bug_triage/2007-11-14/Transcript

[15:46] ぐらいの発言を見ると、私のパッチは既に本体側のソースに取り込まれているらしい。
(2410 is already imported)
1.18.5(0)では直ってなかったが…。
L.L.側でも再現に苦労しているらしいのがTorleyの発言からうかがえる。

Alissaさんが、この問題は日本語や中国語のユーザにとって大事だからぜひパッチを取り込んでくれと
推してくれた。その場で発言ができる人が関心を持ってくれるのはありがたい。



[15:50]から、VWR-2826 (入力が半角カナになってしまう例の件)について、
Alissaさんが説明する時間があり、新しく出た1.18.5(0)では
一部の致命的な問題は修正されたのを確認した。
一部の致命的なバグは直ってないが、一旦クローズにして、別なバグとして起票したい。
主要な問題は直ったとリリースノートに載せてねー。という話が出ている。
正式には、近々リリース予定の1.19でなおるらしい。
(超意訳^^;)
JIRA(http://jira.secondlife.com/browse/VWR-2826 )を見ると、
「Fixed Internally 」になっているので、こちらは確実。


まだまだ直したい所はたくさんあるでしょうが、一区切りつきましたね。お疲れさまでした。>Alissaさん
  


Posted by march at 22:44Comments(2)viewer

2007年11月15日

昨日のバグ・トリアージのログが出たが

昨日のバグ・トリアージのログが出た。
http://wiki.secondlife.com/wiki/Bug_triage/2007-11-12/Transcript
本体にはまだ取り込まれないらしい。
1.18.5(RC)で再現するのを確認した。

(今回はモザイク無しでお届けしますw)

JIRAに上げた画像はモザイクかかっててよく分からないよというのはごもっとも。
当時は再現方法が分からず、たまたま撮れた奴を上げてたんで。
でも、画像の圧縮のためのノイズじゃないんですよ。
再現用のノートカードをAlissaさんが付けてくれたが、
LLでは日本語環境じゃないと再現しないと思ってるんだろうなぁ。
しかし、DEV-5834 と番号がふられているので認識はされている。
トリアージに出て分かりやすく説明すればいいのかもしれないが、
実際問題難しい。。。

JIRAに追加説明として、英語だと文字の種類が少ないから全ての文字がキャッシュに載りきるけど、
日本語や中国語は文字の種類が多いからキャッシュが足りなくなって再利用がおきるんだよとか、
LLFont::loadFace(...)でキャッシュを512x512に制限してるけど、
もっと小さくすればアルファベットだけでもあふれるから再現するんじゃない?とか
書きたいが、今書いてもわけ分からん文になるのは明白なんで、控える。
  


Posted by march at 01:17Comments(0)viewer

2007年11月13日

バグ取り上げ行きそこね(^^;)

http://wiki.secondlife.com/wiki/Bug_triage にあるバグ取り上げ(Bug triage)のページを見たら、
11/12 pm3:00からGeneral triage をやるらしく、私の名前もあるじゃない!
ちょうど時間だし是非行かねば!
・・・と思って入ってみたら、現地は11/13 am3:00でした(^^;)
  


Posted by march at 20:54Comments(0)viewer

2007年11月06日

字汚れのパッチを出しました

字汚れのパッチをJIRAに投稿しました。
https://jira.secondlife.com/browse/VWR-2410

日本語の解説PDFも書いたので倉庫ページを作ってあげました~。
http://www.march.awk.jp/pukiwiki/pukiwiki.php?%5B%5B%A5%D3%A5%E5%A1%BC%A5%A2%2FVWR-2410%28%BB%FA%B1%F8%A4%EC%29%A4%CE%B2%F2%C0%CF%5D%5D  
タグ :VWR-2410


Posted by march at 23:06Comments(4)viewer

2007年11月02日

IronPython+libsecondlife.dllで遊

IronPython(FePy)にlibsecondlife.dllを組み合わせて遊んでいる。
とりあえず接続して、残高を調べたりSIMの状態を取得したりできた。
ドキュメントが追いついてないので、結局C#のソースを眺めて
あとは推測とトライ&エラーとあてずっぽう(^^;)

参考にしたページ
「SecondLifeのボットを5分で書く方法」
http://d.hatena.ne.jp/tokuhirom/20070921/1190371544
pythonからlibsecondlifeを呼び出すのがこんなに手軽だったとは。。。  


Posted by march at 22:49Comments(0)viewer

2007年11月01日

字汚れのパッチを作った

mRawImagep->clear(255, 0); とやったらうまくいきました。
文字の種類が多いノートを広い画面いっぱいに表示させると
ノイズがチカチカする状態だったが、この対処でノイズが出ない事を確認しました。

というわけで、一行だけ追加するパッチを作成。

上述のようにキャッシュが不足して表示中は常に書き換え続ける状態は
回避できてないが、一画面にそんなたくさんの種類の文字を表示することは
少ないんじゃないかなぁ。と。


説明用の図も作ってみたけど、説明文無しじゃ何のことだか分からないなぁ。
ソースを指差しながら口で説明するのではなく、文章で伝えるのは難しい。

キャッシュあふれ前の図


キャッシュあふれ後に再利用の図

  


Posted by march at 22:52Comments(0)viewer

2007年10月31日

字汚れの原因メモ

とりあえず直接的な原因は分かったのでメモ。
どう対処しますかねぇ。

---
昨日のBLOGも参照。
---
LLFontクラス内のmRawImagepの先に、グリフのビットマップをキャッシュしておく。
縦かける横のサイズを持ち、左上から右(X)方向に1文字ずつ入れていく。
次に入れる位置はmCurrentOffsetX, mCurrentOffsetY で管理している。

このキャッシュがあふれた際は、
(1)キャッシュに乗っているグリフは、そのままでは表示できないようにする(mIsRender = FALSE)
(2)次に入れる位置を1,1に戻す。
としているが、キャッシュはクリアしていない。

続けて使うと、以前のゴミがある状態で上書きする。

mRawImagepは他のフェース、フォントファミリー内の他のフェースとも共用なので、(★この辺が未調査)
外枠のサイズが違うグリフの場合は、以前のゴミも表示してしまう。のかなぁ。

文字と文字の間を1ドットあけて表示するために、上述のキャッシュに1ドットあけて格納し、
表示する際にはあけた1ドットも含めて表示している。
そのため、キャッシュをグリフのビットマップで上書きしたとしても、
あけた1ドットの所には何も書かないため、ゴミが表示される。

---
mRawImagepの、clearとかfillとか試してみたがうまくいかず。memsetでゼロクリアしようとしたらメモリ違反^^;
あけた1ドットの所に何か書くようにするかなぁ。
  


Posted by march at 23:22Comments(0)viewer

2007年10月29日

字汚れ解析中


ちょっと時間が出来たので、字汚れの件を調べている。
([#VWR-2410]noise dot appear in chat window when clien running long with chatting.)
https://jira.secondlife.com/browse/VWR-2410

●動作
文字列を表示するときには、表示したい1つずつの文字の形(グリフ)が必要で、
何度もファイルから取り出さなくてもいいように、一旦取り出した文字は
自前のキャッシュに入れておく。
表示する際は、まずキャッシュの中を探す。
キャッシュになければファイルから取り出して、キャッシュに入れてから表示する。
しかし何かのタイミングでキャッシュに入っているはずの文字を
何文字も続けて登録する場合があり、その処理が終わったときには字汚れになっている。

●状況の補足
SNSやJIRAにある状況に補足すると、
・英語でも日本語でも、同じ文字には同じノイズが載る。
・日本語の文字はアンチエイリアシングされていない(白黒2値)。
 だが、ノイズはグレーの点もある。
・日本語は文字の左右にノイズが出るが、英語は左右と上に出る。
・字汚れが出た後も操作を続けると、ノイズが変化する。

うちの環境では、文字の種類(=キャッシュに入っている文字)が
700ちょっとを越えたあたりで字汚れが起きる。
(英数字記号程度で再現できないのは納得)


・・・と、ここまで書いておけば、私が解析しおわる前に
通りすがりの勇者がちょちょいと直してくれるに違いない。
「せめてお名前を…」と言う準備をしておこう(笑)
  


Posted by march at 23:53Comments(0)viewer

2007年08月26日

ログの変更のためのファイル

app_settings/logcontrol.xml でログレベルやログ有無を変更できる。
書式はWIKIにあったが、ファイル名が書いてなかったので、message.xml に書いてしばし悩んだ。
いまはLLVoiceClientCapResponder を黙らせるのに苦労している。
  


Posted by march at 22:46Comments(0)viewer

2007年08月26日

ビューアで遊ぶの続き

メニューの「デバッグ」で「デバッグ無しで開始(Ctrl+F5)」でやればいい事を発見。
いちいちコピーしなくて済むようになった。
ノートン先生うるさいけど。  


Posted by march at 22:11Comments(0)viewer

2007年08月25日

久々にビューアのコンパイル。

久々にビューアのコンパイル。忘れがちなんで自分メモ。

今はVWR-1151のおかげでソリューションファイルを書き換えないのでよくなったので
以前に比べてかなり楽ちんである。


なんでリンク時にLLVoiceClientが無いと言われてるのかなーと思ったら、
ソリューションエクスプローラで見たら、newviewの中にllvoiceclient.cppが入ってなかった。
というか、voice関連がまるまる無かった。

VWR-1151の下のほうを読んで、vc8_1_18_V6.zip じゃなくて、vc8_1_18_1_V1.zip を
使わなきゃいけなかった事に気づいた。
上書きで入れ替えて無事リンクできました。

static_data.db2だかstatic_index.db2が無いと出たので、
本物をインストールしたディレクトリ(Z:\Program Files\SecondLife)の下のapp_settings
に対するショートカットを、コンパイルで使ったディレクトリのnewviewの下に置いた。
(古いapp_settingsディレクトリはリネームした)
しかし、xmlファイルやiniファイルを読み込めていない。
素直に、本物をインストールしたディレクトリ(Z:\Program Files\SecondLife)の下に
newview_noopt.exeをコピーした。
VC上からうまく実行する方法はないものか。必要ファイルをコピーすりゃいいんだが、コピー元のファイルとずれていくと本物を起動したときに何か問題が出そうな気がする。  


Posted by march at 22:14Comments(0)viewer

2007年07月20日

ajaxlife?

ajaxlifeでログインしようとしても、タイムアウトになってしまいます。
AJAXと聞くとシューティングゲームしか思い浮かびません。  


Posted by march at 23:03Comments(0)viewer

2007年06月28日

pushされた履歴の表示

Help > Bumps, Pushes & Hitsで、PUSHされた履歴を表示できます。
嫌がらせでカゴに入れられて空に飛ばされたときは見るといいかも。
voice betaなSecond Life 1.17.0 (110) Jun 8 2007 17:42:10で確認しました。  


Posted by march at 22:05Comments(0)viewer

2007年06月27日

音の発生源の表示

View > Beacons > Sound Sources で音の発生源を表示できます。
voice betaなSecond Life 1.17.0 (110) Jun 8 2007 17:42:10で確認しました。
発言者が表示されるのかは確認してません^^  


Posted by march at 22:12Comments(0)viewer