<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>きっちん</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/" />
   <link rel="self" type="application/atom+xml" href="http://yoffy.dyndns.org/atom.xml" />
   <id>tag:yoffy.dyndns.org,2006://1</id>
   <updated>2008-08-30T02:35:12Z</updated>
   
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.37</generator>

<entry>
   <title>SPEでstringを使ってはいけない</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/08/spestring.html" />
   <id>tag:yoffy.dyndns.org,2008://1.591</id>
   
   <published>2008-08-30T01:54:58Z</published>
   <updated>2008-08-30T02:35:12Z</updated>
   
   <summary><![CDATA[ 　最初は // a.cpp #include &lt;stdexcept&gt; char array[128 * 1024]; // 128 KB main() {     std::runtime_error e("e"); } $ spu-g++ -Os -D NDEBUG a.cpp /usr/lib/gcc/spu/4.1.1/../../../../spu/bin/ld: .bss exceeds local store range みたいな何の変哲もないコードで SPE のサイズをオーバーしちゃってハマってたのね。 　で、原因を調べてみたら、どうやら原因は std::runtime_error が依存している std::string にあるらしい事が判明。 　main のみ: // a2.cpp main() { } $ spu-g++ -Os -D NDEBUG a2.cpp $ ll a.out -rwxr-xr-x 1 yoffy yoffy 97K 2008-08-30 11:01 a.out 　string を使ってみる: // a3.cpp #include &lt;string&gt; main() {     std::string s; } $ spu-g++ -Os -D NDEBUG a3.cpp $ ll a.out -rwxr-xr-x 1 yoffy yoffy 167K 2008-08-30 11:04 a.out 　std::allocator を少し疑ったんだけど、std::vector は問題ないので std::string 側に原因がありそうな気がする。面倒くさいので細かくは追ってない。 　別に stdexcept や string が無くても困らないけど、SPE 用にもう少し考えてくれてもいいんじゃないだろうか。 追記: // a4.c main() { } $ spu-gcc -Os -D NDEBUG a4.c $ ll a.out -rwxr-xr-x 1 yoffy yoffy 4.9K 2008-08-30 11:34 a.out 　…。 　何もしてないのに 97 KB も使うっておかしいなあとは思ってたんだよ。これ、libstdc++ が怠慢じゃない？コンパイラオプションで例外とか止めたら小さくできるのかな。 ...]]></summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="cell" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[<p>
　最初は
</p>
<div class="editor-box">
<pre><code>
// a.cpp
#include &lt;stdexcept&gt;
char array[128 * 1024]; // 128 KB
main()
{
    std::runtime_error e("e");
}
</code></pre>
</div>
<div class="prompt-box">
<pre><code>
$ spu-g++ -Os -D NDEBUG a.cpp
/usr/lib/gcc/spu/4.1.1/../../../../spu/bin/ld: .bss exceeds local store range
</code></pre>
</div>
<p>
みたいな何の変哲もないコードで SPE のサイズをオーバーしちゃってハマってたのね。
</p>

<p>
　で、原因を調べてみたら、どうやら原因は std::runtime_error が依存している std::string にあるらしい事が判明。
</p>

　main のみ:
<div class="editor-box">
<pre><code>
// a2.cpp
main()
{
}
</code></pre>
</div>
<div class="prompt-box">
<pre><code>
$ spu-g++ -Os -D NDEBUG a2.cpp
$ ll a.out
-rwxr-xr-x 1 yoffy yoffy <b style="color:red;">97K</b> 2008-08-30 11:01 a.out
</code></pre>
</div>

　string を使ってみる:
<div class="editor-box">
<pre><code>
// a3.cpp
#include &lt;string&gt;
main()
{
    std::string s;
}
</code></pre>
</div>
<div class="prompt-box">
<pre><code>
$ spu-g++ -Os -D NDEBUG a3.cpp
$ ll a.out
-rwxr-xr-x 1 yoffy yoffy <b style="color:red;">167K</b> 2008-08-30 11:04 a.out
</code></pre>
</div>

<p>
　std::allocator を少し疑ったんだけど、std::vector は問題ないので std::string 側に原因がありそうな気がする。面倒くさいので細かくは追ってない。<br />
　別に stdexcept や string が無くても困らないけど、SPE 用にもう少し考えてくれてもいいんじゃないだろうか。
</p>

追記:
<div class="editor-box">
<pre><code>
// a4.<b style="color:red;">c</b>
main()
{
}
</code></pre>
</div>
<div class="prompt-box">
<pre><code>
$ <b style="color:red;">spu-gcc</b> -Os -D NDEBUG a4.c
$ ll a.out
-rwxr-xr-x 1 yoffy yoffy <b style="color:red;">4.9K</b> 2008-08-30 11:34 a.out
</code></pre>
</div>
<p>
　…。<br />
　何もしてないのに 97 KB も使うっておかしいなあとは思ってたんだよ。これ、libstdc++ が怠慢じゃない？コンパイラオプションで例外とか止めたら小さくできるのかな。
</p>]]>
      
   </content>
</entry>
<entry>
   <title>NSColor のコンポーネントが取得できない</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/07/nscolor.html" />
   <id>tag:yoffy.dyndns.org,2008://1.590</id>
   
   <published>2008-07-27T07:23:02Z</published>
   <updated>2008-07-27T07:33:38Z</updated>
   
   <summary> 　もうだいぶ放置してある現象で、Karaoke が Mac OS X 10.5 で動かない。 NSColor * c = [NSColor whiteColor]; float r = [c recComponent]; 　こんな単純なコードが動かない。 　今日重い腰を上げてドキュメントを読んでみたら、「RGBカラーでなければ例外を投げる」と書いてあった。whiteColor は RGB カラーではなくグレースケールカラーとして定義されているらしい。 　過去のアプリケーションとの互換性低すぎないか？これ。 　ということで、理由は分かったけれどもシステム標準の色からいつでも安全に RGB を得たい場合はどうすればいいんだろう。 　わざわざ変換しなくてはならないとか？ 　それともシステムカラーは使えないものとして [NSColor colorWithCalibratedRed:green:blue:] で自力で解決するとか？ ...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="にっき" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[<p>
　もうだいぶ放置してある現象で、<a href="/2007/11/karaoke.html">Karaoke</a> が Mac OS X 10.5 で動かない。
</p>

<div class="editor-box">
<pre><code>
NSColor * c = [NSColor whiteColor];
float r = [c recComponent];
</code></pre>
</div>

<p>
　こんな単純なコードが動かない。<br />
　今日重い腰を上げてドキュメントを読んでみたら、「RGBカラーでなければ例外を投げる」と書いてあった。whiteColor は RGB カラーではなくグレースケールカラーとして定義されているらしい。<br />
　過去のアプリケーションとの互換性低すぎないか？これ。
</p>
<p>
　ということで、理由は分かったけれどもシステム標準の色からいつでも安全に RGB を得たい場合はどうすればいいんだろう。<br />
　わざわざ変換しなくてはならないとか？<br />
　それともシステムカラーは使えないものとして [NSColor colorWithCalibratedRed:green:blue:] で自力で解決するとか？
</p>]]>
      
   </content>
</entry>
<entry>
   <title>KB950759を強制的に適用する方法</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/07/kb950759.html" />
   <id>tag:yoffy.dyndns.org,2008://1.589</id>
   
   <published>2008-07-27T07:18:01Z</published>
   <updated>2008-07-27T07:22:28Z</updated>
   
   <summary>　Windows XP SP3 + IE7 でインストールした場合に KB950759 (Internet Explorer 7 for Windows XP 用セキュリティ更新プログラム) のインストールに失敗するので、それを無視する方法。 　Windows Update でダウンロードされて自動的に展開された update.ver の中身を消してから update.exe を実行する。以上。 　強制的にインストールするわけだから、その後に修正されたものも巻き戻してしまう可能性に注意。...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="にっき" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      　Windows XP SP3 + IE7 でインストールした場合に KB950759 (Internet Explorer 7 for Windows XP 用セキュリティ更新プログラム) のインストールに失敗するので、それを無視する方法。

　Windows Update でダウンロードされて自動的に展開された update.ver の中身を消してから update.exe を実行する。以上。

　強制的にインストールするわけだから、その後に修正されたものも巻き戻してしまう可能性に注意。
      
   </content>
</entry>
<entry>
   <title>libspesにioctl追加</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/06/libspesioctl.html" />
   <id>tag:yoffy.dyndns.org,2008://1.588</id>
   
   <published>2008-06-29T16:35:24Z</published>
   <updated>2008-06-29T16:45:45Z</updated>
   
   <summary>　libspes(※)にioctl()を追加。 　あと他に何がいるかなあ。 　思いつくのはselect()とネットワーク関連かなあ。 　ただ出来るだけ SPE 側でプログラムしたいんだけれど、ここら辺は PPE 側で持つべきだよねえ。 ※現在リンク切れです。とりあえずはhttp://yoffy.dyndns.org/svn/libspes/trunk/からどうぞ。...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="cell" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[　<a href="http://localhost/cgi-bin/viewvc/viewcvs.cgi/trunk/?root=libspes">libspes</a>(※)にioctl()を追加。

　あと他に何がいるかなあ。
　思いつくのはselect()とネットワーク関連かなあ。

　ただ出来るだけ SPE 側でプログラムしたいんだけれど、ここら辺は PPE 側で持つべきだよねえ。

※現在リンク切れです。とりあえずは<a href="http://yoffy.dyndns.org/svn/libspes/trunk/">http://yoffy.dyndns.org/svn/libspes/trunk/</a>からどうぞ。]]>
      
   </content>
</entry>
<entry>
   <title>常駐ウィンドウの居場所</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/06/post_216.html" />
   <id>tag:yoffy.dyndns.org,2008://1.587</id>
   
   <published>2008-06-29T15:51:36Z</published>
   <updated>2008-06-29T16:32:28Z</updated>
   
   <summary>　パソコンには現在のステータスを表示するソフトや、ちょっとしたツールを提供する常駐ソフトが沢山ある。 　でも普段主体にならないソフトが主張してしまうと邪魔になるため、居場所をどうするかで様々な方法が模索されている。例えばこんなの: 常に最前面に張り付くフローティングウィンドウ。Dock、タスクバー、ランチャーなんかが相当する。はっきり言って邪魔。 マウスポインタを近づけると最前面に現れるタイプ。やはり Dock、タスクバーが身近な例。間違えてポインタを近づけてしまい、誤動作する事が多い。 ショートカットで最前面に現れるタイプ。身近な例ではSpotlight、Dashboardあたり。これが一番邪魔にならない。不満な点はそれぞれショートカットを覚えないといけない点と、常に状態を把握出来ない点。特にDashboardの電卓やDictionaryは文章を書きながら参照出来ないのが不満。 フローティングウィンドウの逆で、デスクトップに張り付くタイプ。カレンダーソフトのようなものが多い。これは全く邪魔にならないが、ウィンドウやデスクトップのアイコンが多いと延々と情報に辿り着かない。 ウィンドウにくっついてくるタイプ。ドローワーや、フローティングウィンドウで、常駐ソフトというよりも使っているソフトの機能でしかない。よく出来たソフトだと、ウィンドウを動かした時に自動的に避けてくれるものがある。ただ、左端から右端に一気に移動したりするので動きが大きくて目障り。あとやはりメインウィンドウとの重なり具合があるので画面が狭くなる。 　ここで一つ提案してみたいのが、浮き方の弱いフローティングウィンドウ。デスクトップに張り付くのではなく、勝手に最前面に現れる事も無く、メインウィンドウを移動した時に勝手についてくる事も無い。常にZがメインウィンドウの1つ下に存在するだけというシンプルなもの。フローティングウィンドウと同じで、上下左右もZも完全に固定されているので動きが全くない。つまり目障りにならない。名付けてハンギング(Hanging)ウィンドウ。 　フローティングウィンドウがメインウィンドウに重なると、最悪メインウィンドウのタイトルバーがつまめなくなったり、サイズを変えられなくなったり、ボタンを押せなくなったりと障害が大きいが、これも解消される。 　情報が裏に隠れてしまうのは自己責任で、ウィンドウの配置を試行錯誤して欲しい。ただ少なくとも、触る事が少ないツールよりメインウィンドウの障害を取り除く方が優先事項だと思うし、Dashboardを出したりデスクトップまで潜ったりするような大きな動作も要らない。 　これで電卓の値や辞書、メッセンジャーの状態が常に見えるようになると非常に便利だと思うのだが… ...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="にっき" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      　パソコンには現在のステータスを表示するソフトや、ちょっとしたツールを提供する常駐ソフトが沢山ある。

　でも普段主体にならないソフトが主張してしまうと邪魔になるため、居場所をどうするかで様々な方法が模索されている。例えばこんなの:

- 常に最前面に張り付くフローティングウィンドウ。Dock、タスクバー、ランチャーなんかが相当する。はっきり言って邪魔。
- マウスポインタを近づけると最前面に現れるタイプ。やはり Dock、タスクバーが身近な例。間違えてポインタを近づけてしまい、誤動作する事が多い。
- ショートカットで最前面に現れるタイプ。身近な例ではSpotlight、Dashboardあたり。これが一番邪魔にならない。不満な点はそれぞれショートカットを覚えないといけない点と、常に状態を把握出来ない点。特にDashboardの電卓やDictionaryは文章を書きながら参照出来ないのが不満。
- フローティングウィンドウの逆で、デスクトップに張り付くタイプ。カレンダーソフトのようなものが多い。これは全く邪魔にならないが、ウィンドウやデスクトップのアイコンが多いと延々と情報に辿り着かない。
- ウィンドウにくっついてくるタイプ。ドローワーや、フローティングウィンドウで、常駐ソフトというよりも使っているソフトの機能でしかない。よく出来たソフトだと、ウィンドウを動かした時に自動的に避けてくれるものがある。ただ、左端から右端に一気に移動したりするので動きが大きくて目障り。あとやはりメインウィンドウとの重なり具合があるので画面が狭くなる。

　ここで一つ提案してみたいのが、浮き方の弱いフローティングウィンドウ。デスクトップに張り付くのではなく、勝手に最前面に現れる事も無く、メインウィンドウを移動した時に勝手についてくる事も無い。常にZがメインウィンドウの1つ下に存在するだけというシンプルなもの。フローティングウィンドウと同じで、上下左右もZも完全に固定されているので動きが全くない。つまり目障りにならない。名付けてハンギング(Hanging)ウィンドウ。

　フローティングウィンドウがメインウィンドウに重なると、最悪メインウィンドウのタイトルバーがつまめなくなったり、サイズを変えられなくなったり、ボタンを押せなくなったりと障害が大きいが、これも解消される。

　情報が裏に隠れてしまうのは自己責任で、ウィンドウの配置を試行錯誤して欲しい。ただ少なくとも、触る事が少ないツールよりメインウィンドウの障害を取り除く方が優先事項だと思うし、Dashboardを出したりデスクトップまで潜ったりするような大きな動作も要らない。

　これで電卓の値や辞書、メッセンジャーの状態が常に見えるようになると非常に便利だと思うのだが…
      
   </content>
</entry>
<entry>
   <title>理解出来ない</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/06/post_215.html" />
   <id>tag:yoffy.dyndns.org,2008://1.586</id>
   
   <published>2008-06-19T05:50:43Z</published>
   <updated>2008-06-19T06:01:41Z</updated>
   
   <summary><![CDATA[test.cpp: #include &lt;altivec.h&gt; vector unsigned int test(vector unsigned int a, vector unsigned int b) {     vector unsigned int c;     c = vec_cmpeq(a, b);     return c; } コンパイル: $ g++ -maltivec test.cpp test.cpp: In function 'unsigned int __vector__ test(unsigned int __vector__, unsigned int __vector__)': test.cpp:6: error: cannot convert 'unsigned int __vector__' to 'unsigned int __vector__' in assignment 　日本語でおk ...]]></summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="にっき" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[test.cpp:
<div class="editor-box">
<pre><code>
#include &lt;altivec.h&gt;

vector unsigned int test(vector unsigned int a, vector unsigned int b)
{
	vector unsigned int c;
	c = vec_cmpeq(a, b);
	return c;
}
</code></pre>
</div>

<br />

コンパイル:
<div class="prompt-box">
<pre><code>
$ g++ -maltivec test.cpp
test.cpp: In function 'unsigned int __vector__ test(unsigned int __vector__, unsigned int __vector__)':
test.cpp:6: error: cannot convert 'unsigned int __vector__' to 'unsigned int __vector__' in assignment
</code></pre>
</div>

<p>
　日本語でおk
</p>]]>
      
   </content>
</entry>
<entry>
   <title>Leopard でグループにユーザを追加</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/05/leopard_groupmembership.html" />
   <id>tag:yoffy.dyndns.org,2008://1.585</id>
   
   <published>2008-05-09T13:49:39Z</published>
   <updated>2008-05-09T13:58:44Z</updated>
   
   <summary> 　リポジトリの所有権を _svn に設定してあるのにユーザを _svn グループに所属させる方法が分からなくてここ数ヶ月ずっとコミットしてなかった。 　昨日ようやく本腰を入れて調査したら、説明しているサイトを発見: MAC OSXにはUSERADD GROUPADDはない 　そのまま自分の環境に当てはめると、これでいけた。 $sudo dscl . -append /Groups/_svn GroupMembership yoffy ...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="さーば" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[<p>
　リポジトリの所有権を _svn に設定してあるのにユーザを _svn グループに所属させる方法が分からなくてここ数ヶ月ずっとコミットしてなかった。<br />
　昨日ようやく本腰を入れて調査したら、説明しているサイトを発見:<br />
<a href="http://blog.livedoor.jp/rotton79/archives/64928467.html">MAC OSXにはUSERADD GROUPADDはない</a>
</p>

<p>
　そのまま自分の環境に当てはめると、これでいけた。
</p>
<div class="prompt-box">
$sudo dscl . -append /Groups/_svn GroupMembership yoffy
</div>]]>
      
   </content>
</entry>
<entry>
   <title>イヤホン</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/05/post_214.html" />
   <id>tag:yoffy.dyndns.org,2008://1.584</id>
   
   <published>2008-05-05T07:44:05Z</published>
   <updated>2008-05-05T08:07:52Z</updated>
   
   <summary> 　イヤホンで音楽を聴く時には、耳に直接入れるタイプのものを使っている。 　カナルタイプと言うらしい。 　以前は SONY 製のを使っていたけれども、サイズが合わないし、交換しても交換してもすぐ壊れた。 　道具として使えないなら音質が良くても意味が無い。 　で、探しまわっていたら ELECOM 製で小さいものを発見。右の画像のやつで、型番で言うと EHP-PIE30PN4 というもの。 　一ヶ月使っていて今のところ壊れる様子は無いし、なにより耳にフィットするので音が漏れずにボリュームを大きく出来る。素晴らしい。 　耳が小さい人にはお勧め。...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="にっき" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=lastkitchen-22&o=9&p=8&l=as1&asins=B000WN9PE2&fc1=000000&IS2=1&lt1=_top&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;float:right;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
　イヤホンで音楽を聴く時には、耳に直接入れるタイプのものを使っている。
　カナルタイプと言うらしい。

　以前は SONY 製のを使っていたけれども、サイズが合わないし、交換しても交換してもすぐ壊れた。
　道具として使えないなら音質が良くても意味が無い。

　で、探しまわっていたら <a href="http://www.amazon.co.jp/dp/B000WN9PE2/lastkitchen-22/">ELECOM 製で小さいものを発見</a>。右の画像のやつで、型番で言うと EHP-PIE30PN4 というもの。
　一ヶ月使っていて今のところ壊れる様子は無いし、なにより耳にフィットするので音が漏れずにボリュームを大きく出来る。素晴らしい。

　耳が小さい人にはお勧め。]]>
      
   </content>
</entry>
<entry>
   <title>Non Local Means</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/05/non_local_means.html" />
   <id>tag:yoffy.dyndns.org,2008://1.582</id>
   
   <published>2008-05-04T06:53:16Z</published>
   <updated>2008-05-05T07:41:40Z</updated>
   
   <summary> 　4月はずっと、最近流行の AviUtl プラグインのNL-Means filter に触発されてノイズ除去のアルゴリズムである Non Local Means をいじくってた。 　NL-Means は広域で平均を取って絵をべた塗りに近づけるため、AviUtl 界ではアニメによく効くと言われている様子。 　これは畳み込みの一種であり、例えばよく使われている移動平均なんかは次のような感じで畳み込み 1.01.01.0 1.01.01.0 1.01.01.0 元画像と移動平均 ガウスぼかしは次のようなので畳み込む。 0.370.60.37 0.61.00.6 0.370.60.37 ガウスぼかし 　Non Local Means は畳み込む画素の周囲でマッチングを行って、その一致率でウエイトを作る。似通った領域では広く平均が取られ、似通っていない領域では平均されない。 　一致率の出し方が工夫のしどころではあるけど、NL-Means filter では差の二乗和を d、係数を h とすると exp(-d*h) というように指数に入れている。差が無ければウエイトが 1 になり、差が少しでも大きくなるとすぐ 0 に落ち込む。 　また、h が 0 であれば移動平均になり、h が大きくなるにつれ似通った領域のみ使われるようになる。最終的に h が無限大になれば元の画像に一致する。 h が小さい場合 h が大きい場合 　なんにせよ、パターンの一致率でウエイトを決めるため 0.10.20.5 0.81.00.1 0.20.60.4 とかいう感じで、全く対称性の無いウエイトが出来上がる。 　この手法の特徴は、パターンが一致している部分のみを使うので、エッジが完全に保存される。メディアンフィルタでは落ちてしまうような一本の線でさえも保存される。 　しかし、逆に一点のノイズであっても保存されてしまうので、結局強いノイズは予め他の手法で取り除いておかないといけない。 メディアンフィルタ移動平均に比べてエッジが保存されている 　Non Local Means のみで強いノイズを除去するには h の値を小さくしないといけないが、それだと移動平均に近づくのでボケる。 　h を小さくしつつボケにくくする為には、畳み込みのサイズを小さくするしか無い。それでは広く平均を取れるこの手法の利点が薄くなる。 　そこで折衷案として、h を 0 にした時にガウスぼかしになるようにしてみた。 　こうすると領域は円形になるし、サイズを小数単位で微調整出来る。何より遠くにいく程弱くなるので、広過ぎる範囲で平均されない。 ガウスぼかしに近づく方法で h を小さくした場合 　うーん。SAMSUNG の文字は多少読みやすくなってるけど、あまり差が無いかな。 ...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="にっき" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[<p>
　4月はずっと、最近流行の AviUtl プラグインの<a href="http://kishibe.dyndns.tv/index.php?フリーソフト%2FNL-Means%20filter">NL-Means filter</a> に触発されてノイズ除去のアルゴリズムである Non Local Means をいじくってた。<br />
　NL-Means は広域で平均を取って絵をべた塗りに近づけるため、AviUtl 界ではアニメによく効くと言われている様子。
</p>

<p>
　これは畳み込みの一種であり、例えばよく使われている移動平均なんかは次のような感じで畳み込み
<table>
<tr>
<td><a href="/images/20080504_ORIG.png"><img alt="元画像" src="/images/20080504_ORIG120x90.png" /></a></td>
<td><a href="/images/20080504_MA.png"><img alt="移動平均" src="/images/20080504_MA120x90.png" /></a></td>
<td><table border="1" title="移動平均のウエイト" style="border-collapse:collapse">
<tr><td>1.0</td><td>1.0</td><td>1.0</td></tr>
<tr><td>1.0</td><td>1.0</td><td>1.0</td></tr>
<tr><td>1.0</td><td>1.0</td><td>1.0</td></tr>
</table></td>
</tr>
<caption align="bottom">元画像と移動平均</caption>
</table>
</p>

<p>
ガウスぼかしは次のようなので畳み込む。
<table>
<tr>
<td><a href="/images/20080504_GB.png"><img alt="移動平均" src="/images/20080504_GB120x90.png" /></a></td>
<td><table border="1" style="border-collapse:collapse">
<tr><td>0.37</td><td>0.6</td><td>0.37</td></tr>
<tr><td>0.6</td><td>1.0</td><td>0.6</td></tr>
<tr><td>0.37</td><td>0.6</td><td>0.37</td></tr>
</table></td>
</tr>
<caption align="bottom">ガウスぼかし</caption>
</table>
</p>

<p>
　Non Local Means は畳み込む画素の周囲でマッチングを行って、その一致率でウエイトを作る。似通った領域では広く平均が取られ、似通っていない領域では平均されない。<br />
　一致率の出し方が工夫のしどころではあるけど、NL-Means filter では差の二乗和を <i>d</i>、係数を <i>h</i> とすると
</p>
<p>
exp(-d*h)
</p>
<p>
というように指数に入れている。差が無ければウエイトが 1 になり、差が少しでも大きくなるとすぐ 0 に落ち込む。<br />
　また、<i>h</i> が 0 であれば移動平均になり、<i>h</i> が大きくなるにつれ似通った領域のみ使われるようになる。最終的に <i>h</i> が無限大になれば元の画像に一致する。
<table style="text-align:center">
<tr>
<td><a href="/images/20080504_HIGH.png"><img src="/images/20080504_HIGH120x90.png" /></a><br />h が小さい場合</td>
<td><a href="/images/20080504_LOW.png"><img src="/images/20080504_LOW120x90.png" /></a><br />h が大きい場合</td>
</tr>
</table>
</p>

　なんにせよ、パターンの一致率でウエイトを決めるため
<table border="1" style="border-collapse:collapse">
<tr><td>0.1</td><td>0.2</td><td>0.5</td></tr>
<tr><td>0.8</td><td>1.0</td><td>0.1</td></tr>
<tr><td>0.2</td><td>0.6</td><td>0.4</td></tr>
</table>
とかいう感じで、全く対称性の無いウエイトが出来上がる。

<p>
　この手法の特徴は、パターンが一致している部分のみを使うので、エッジが完全に保存される。メディアンフィルタでは落ちてしまうような一本の線でさえも保存される。<br />
　しかし、逆に一点のノイズであっても保存されてしまうので、結局強いノイズは予め他の手法で取り除いておかないといけない。
</p>
<table style="text-align:center">
<tr>
<td><a href="/images/20080504_MF.png"><img src="/images/20080504_MF120x90.png" /></a><br />メディアンフィルタ<br />移動平均に比べてエッジが保存されている</td>
</tr>
</table>

<p>
　Non Local Means のみで強いノイズを除去するには <i>h</i> の値を小さくしないといけないが、それだと移動平均に近づくのでボケる。<br />
　<i>h</i> を小さくしつつボケにくくする為には、畳み込みのサイズを小さくするしか無い。それでは広く平均を取れるこの手法の利点が薄くなる。
</p>

<p>
　そこで折衷案として、<i>h</i> を 0 にした時にガウスぼかしになるようにしてみた。<br />
　こうすると領域は円形になるし、サイズを小数単位で微調整出来る。何より遠くにいく程弱くなるので、広過ぎる範囲で平均されない。
</p>

<table style="text-align:center">
<tr>
<td><a href="/images/20080504_GB_HIGH.png"><img src="/images/20080504_GB_HIGH120x90.png" /></a><br />ガウスぼかしに近づく方法で h を小さくした場合</td>
</tr>
</table>

<p>
　うーん。SAMSUNG の文字は多少読みやすくなってるけど、あまり差が無いかな。
</p>]]>
      
   </content>
</entry>
<entry>
   <title>PS3 Linux のキャプチャ</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/05/ps3_linux_capture.html" />
   <id>tag:yoffy.dyndns.org,2008://1.583</id>
   
   <published>2008-05-04T06:33:26Z</published>
   <updated>2008-05-05T03:31:09Z</updated>
   
   <summary>　3 月は PS3 Linux プログラミングの動画の続きを作りたくて、キャプチャソフトを作っていた。 　キャプチャしてそのまま保存しているとディスクアクセスがとんでもない事になるので、gzip を噛ましてみたらこれが遅い。10 fps くらいしか出ない。 　そこで Range Coder を採用しようと思い、ずっと Range Coder の研究に没頭していた。 　先月末からまた研究を再開して、結局一般的に使われているように、テーブルを 2 バイト、演算精度を 4 バイトにするのが最も CPU 負荷と圧縮率のバランスが取れているという答えにたどり着く。 　結論は出たのでさくっと実装してまた動画を作る予定。...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="PS3 Linux" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      　3 月は PS3 Linux プログラミングの動画の続きを作りたくて、キャプチャソフトを作っていた。

　キャプチャしてそのまま保存しているとディスクアクセスがとんでもない事になるので、gzip を噛ましてみたらこれが遅い。10 fps くらいしか出ない。
　そこで Range Coder を採用しようと思い、ずっと Range Coder の研究に没頭していた。

　先月末からまた研究を再開して、結局一般的に使われているように、テーブルを 2 バイト、演算精度を 4 バイトにするのが最も CPU 負荷と圧縮率のバランスが取れているという答えにたどり着く。

　結論は出たのでさくっと実装してまた動画を作る予定。
      
   </content>
</entry>
<entry>
   <title>PS3 コントローラ入力</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/05/ps3joystick.html" />
   <id>tag:yoffy.dyndns.org,2008://1.581</id>
   
   <published>2008-05-04T05:45:55Z</published>
   <updated>2008-05-05T08:08:19Z</updated>
   
   <summary>　こっちに書くのが遅くなったけど、2月はニコニコ動画に PS3 Linux でコントローラをプログラミングする方法をまとめた。 　まとめたっていうより、ダラダラ録画してるだけだから観づらいかも。 　傾きの検出とかは無しで、ボタンのやスティックの入力のみ。ボタンをアナログで入力する事は可能。 【ニコニコ動画】PS3コントローラ入力1...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="PS3 Linux" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[　こっちに書くのが遅くなったけど、2月はニコニコ動画に <a href="http://www.nicovideo.jp/watch/sm2344784">PS3 Linux でコントローラをプログラミングする方法をまとめた</a>。
　まとめたっていうより、ダラダラ録画してるだけだから観づらいかも。

　傾きの検出とかは無しで、ボタンのやスティックの入力のみ。ボタンをアナログで入力する事は可能。

<iframe width="312" height="176" src="http://www.nicovideo.jp/thumb/sm2344784" scrolling="no" style="border:solid 1px #CCC;" frameborder="0"><a href="http://www.nicovideo.jp/watch/sm2344784">【ニコニコ動画】PS3コントローラ入力1</a></iframe>]]>
      
   </content>
</entry>
<entry>
   <title>メディアの耐久性比較</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/02/post_213.html" />
   <id>tag:yoffy.dyndns.org,2008://1.580</id>
   
   <published>2008-02-12T14:29:27Z</published>
   <updated>2008-02-12T14:33:46Z</updated>
   
   <summary>　DVD-R耐光実験 第4回 　そうか、光学メディアならこんな簡単に比較出来たのか。消耗品ならでは。 　HDD は金額的に中々いい方法が思いつかないなあ。 　Google 様が故障率を公開してくれるといいんだけど。...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="にっき" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[　<a href="http://dvd-r.jpn.org/beam/4/index.htm">DVD-R耐光実験 第4回</a>

　そうか、光学メディアならこんな簡単に比較出来たのか。消耗品ならでは。

　HDD は金額的に中々いい方法が思いつかないなあ。
　Google 様が故障率を公開してくれるといいんだけど。]]>
      
   </content>
</entry>
<entry>
   <title>MovableType 4.1断念</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/02/movabletype_41.html" />
   <id>tag:yoffy.dyndns.org,2008://1.579</id>
   
   <published>2008-02-11T03:17:29Z</published>
   <updated>2008-02-11T03:32:56Z</updated>
   
   <summary>　MovableType 4.1 が出ている ので更新してみようかな、と。 　昨日の ubuntu のエントリを書いたすぐ後に始めて、諦めたのが 4:00AM。 　もうね、毎度ながら MovableType 使いにく過ぎ。俺はその道のプロフェッショナルじゃないっつーの。 　いい加減他のソフトに変えようかしら。 　肝心の移行ステップは上のリンクによくまとまっていて、手順にそえば簡単にいけるかのようになっている。が…… StaticFilePath に関するドキュメントが何処にも無いのにも関わらず、mt-config.cgi に StaticFilePath を記述しないと動かない。URL ではなく、ディスク上のフルパスなので、レンタルサーバに上げてる人は注意。 ブログ全体のテンプレートを初期化しようとすると、同名のテンプレートが存在するため云々と言われて失敗する。現在あるテンプレートを全て捨てて初期化する為の機能なのに同名のものが存在するも糞もねぇよ。 規定のテンプレートを選択すると、何故かテンプレートが重複する。これも現在あるテンプレートを全て捨てて、規定のものに置き換える機能。なのに、何故か「コメント」というテンプレートが 2 つ出来る。 再構築が馬鹿みたいに遅い。MT の操作全てが馬鹿みたいに思いが、再構築が酷い。1 つのエントリにどれだけかかってるんだってくらい重い。風呂に入ってもまだやってた。 再構築に失敗する。再構築が半分くらい行ったところで Internal Server Error になって、原因を示さない。重すぎるのが原因かも。 　もう糞デス。糞過ぎるデス。 　とりあえずは 3.36 を使い続ける事にする。 ...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="にっき" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[　<a href="http://www.sixapart.jp/movabletype/news/2008/01/24-1430.html">MovableType 4.1 が出ている</a> ので更新してみようかな、と。

　昨日の ubuntu のエントリを書いたすぐ後に始めて、諦めたのが 4:00AM。<br />
　もうね、毎度ながら MovableType 使いにく過ぎ。俺はその道のプロフェッショナルじゃないっつーの。<br />
　いい加減他のソフトに変えようかしら。

　肝心の移行ステップは上のリンクによくまとまっていて、手順にそえば簡単にいけるかのようになっている。が……

- StaticFilePath に関するドキュメントが何処にも無いのにも関わらず、mt-config.cgi に StaticFilePath を記述しないと動かない。<br />URL ではなく、ディスク上のフルパスなので、レンタルサーバに上げてる人は注意。
- ブログ全体のテンプレートを初期化しようとすると、同名のテンプレートが存在するため云々と言われて失敗する。<br />現在あるテンプレートを全て捨てて初期化する為の機能なのに同名のものが存在するも糞もねぇよ。
- 規定のテンプレートを選択すると、何故かテンプレートが重複する。<br />これも現在あるテンプレートを全て捨てて、規定のものに置き換える機能。なのに、何故か「コメント」というテンプレートが 2 つ出来る。
- 再構築が馬鹿みたいに遅い。<br />MT の操作全てが馬鹿みたいに思いが、再構築が酷い。1 つのエントリにどれだけかかってるんだってくらい重い。風呂に入ってもまだやってた。
- 再構築に失敗する。再構築が半分くらい行ったところで Internal Server Error になって、原因を示さない。重すぎるのが原因かも。

　もう糞デス。糞過ぎるデス。<br />
　とりあえずは 3.36 を使い続ける事にする。]]>
      
   </content>
</entry>
<entry>
   <title>PS3でubuntuが起動しない</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/02/ps3ubuntu.html" />
   <id>tag:yoffy.dyndns.org,2008://1.578</id>
   
   <published>2008-02-10T10:53:37Z</published>
   <updated>2008-02-10T19:02:00Z</updated>
   
   <summary>　PS3 には xubuntu が入っているのだが、ファームウェアを 2.10 にしてから一度も起動していなかった。 　ファームウェアを 2.10 にすると Addon を更新しないと linux が起動しなくなるという話があったので今日見つけた Addon の 20080201 を入れてみた。 　kboot は起動するが、ubuntu が起動しない。仕方が無いなあ、と、Addon の /boot/vmlinux を HDD にコピーしてひとまず起動。 　こいつは kboot 用の最小限の vmlinux なので、このままだと SPU とか使えない。 　とりあえず ubuntu のカーネルが合っていない事は間違いないので、アップデートマネージャを使ってアップデートする。 　長らく使っていなかったのでアップデートがいっぱい。 　その中にカーネルの更新もあった。 　けどやっぱり ubuntu のカーネルでは起動しない。 　ひたすらネットで情報を探してみるが、よく分からず。 　ubuntu に付属の kboot で動くという話もあるが、ubuntu に付属の kboot は外部デバイスから起動出来ないタコなんで使い物にならない。 　結局 Addon を 20070817 まで戻したら起動した。 　とういことは、ubuntu そのものは悪く無いという事。 　恐らく kboot が vmlinux の立ち上げ方を変えたのだろう。 　あーあ。くだらない事で丸一日使ってしまった。時間返せ。 　20070817 版を含む古い kboot はキーボードのドライバがバグってるし電源切れないから嫌いなんだよなあ。仕方ないけど。...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="にっき" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[　PS3 には xubuntu が入っているのだが、ファームウェアを 2.10 にしてから一度も起動していなかった。
　ファームウェアを 2.10 にすると Addon を更新しないと linux が起動しなくなるという話があったので今日見つけた Addon の 20080201 を入れてみた。

　kboot は起動するが、ubuntu が起動しない。仕方が無いなあ、と、Addon の /boot/vmlinux を HDD にコピーしてひとまず起動。
　こいつは kboot 用の最小限の vmlinux なので、このままだと SPU とか使えない。

　とりあえず ubuntu のカーネルが合っていない事は間違いないので、アップデートマネージャを使ってアップデートする。
　長らく使っていなかったのでアップデートがいっぱい。
　その中にカーネルの更新もあった。

　けどやっぱり ubuntu のカーネルでは起動しない。
　ひたすらネットで情報を探してみるが、よく分からず。
　ubuntu に付属の kboot で動くという話もあるが、ubuntu に付属の kboot は外部デバイスから起動出来ないタコなんで使い物にならない。

　結局 Addon を 20070817 まで戻したら起動した。
　とういことは、ubuntu そのものは悪く無いという事。
　恐らく kboot が vmlinux の立ち上げ方を変えたのだろう。

　あーあ。くだらない事で丸一日使ってしまった。時間返せ。
　20070817 版を含む古い kboot はキーボードのドライバがバグってる<s>し電源切れない</s>から嫌いなんだよなあ。仕方ないけど。]]>
      
   </content>
</entry>
<entry>
   <title>ADDON 20080201</title>
   <link rel="alternate" type="text/html" href="http://yoffy.dyndns.org/2008/02/addon_20080201.html" />
   <id>tag:yoffy.dyndns.org,2008://1.577</id>
   
   <published>2008-02-10T07:23:29Z</published>
   <updated>2008-02-10T07:33:19Z</updated>
   
   <summary>　Cell BE 用の Addon ディスク CELL-Linux-CL_20080201-ADDON.iso が出てる模様。 　ftp://ftp.uk.linux.org/pub/linux/Sony-PS3 　目玉は無線 LAN ドライバの大改築のようなので PS3/20 GB な俺には無縁かも。 　他の変更点は kernel の更新、PS3 Utility の機能追加、あと学習ドキュメント Cell Programming Primer に新しい章を追加しているくらい。...</summary>
   <author>
      <name>よっふぃ〜</name>
      
   </author>
         <category term="あんてな" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://yoffy.dyndns.org/">
      <![CDATA[　Cell BE 用の Addon ディスク CELL-Linux-CL_20080201-ADDON.iso が出てる模様。

　<a href="ftp://ftp.uk.linux.org/pub/linux/Sony-PS3">ftp://ftp.uk.linux.org/pub/linux/Sony-PS3</a>

　目玉は無線 LAN ドライバの大改築のようなので PS3/20 GB な俺には無縁かも。
　他の変更点は kernel の更新、PS3 Utility の機能追加、あと学習ドキュメント Cell Programming Primer に新しい章を追加しているくらい。]]>
      
   </content>
</entry>

</feed>
