libspesにioctl追加
libspes(※)にioctl()を追加。
あと他に何がいるかなあ。
思いつくのはselect()とネットワーク関連かなあ。
ただ出来るだけ SPE 側でプログラムしたいんだけれど、ここら辺は PPE 側で持つべきだよねえ。
※現在リンク切れです。とりあえずはhttp://yoffy.dyndns.org/svn/libspes/trunk/からどうぞ。
libspes(※)にioctl()を追加。
あと他に何がいるかなあ。
思いつくのはselect()とネットワーク関連かなあ。
ただ出来るだけ SPE 側でプログラムしたいんだけれど、ここら辺は PPE 側で持つべきだよねえ。
※現在リンク切れです。とりあえずはhttp://yoffy.dyndns.org/svn/libspes/trunk/からどうぞ。
パソコンには現在のステータスを表示するソフトや、ちょっとしたツールを提供する常駐ソフトが沢山ある。
でも普段主体にならないソフトが主張してしまうと邪魔になるため、居場所をどうするかで様々な方法が模索されている。例えばこんなの:
ここで一つ提案してみたいのが、浮き方の弱いフローティングウィンドウ。デスクトップに張り付くのではなく、勝手に最前面に現れる事も無く、メインウィンドウを移動した時に勝手についてくる事も無い。常にZがメインウィンドウの1つ下に存在するだけというシンプルなもの。フローティングウィンドウと同じで、上下左右もZも完全に固定されているので動きが全くない。つまり目障りにならない。名付けてハンギング(Hanging)ウィンドウ。
フローティングウィンドウがメインウィンドウに重なると、最悪メインウィンドウのタイトルバーがつまめなくなったり、サイズを変えられなくなったり、ボタンを押せなくなったりと障害が大きいが、これも解消される。
情報が裏に隠れてしまうのは自己責任で、ウィンドウの配置を試行錯誤して欲しい。ただ少なくとも、触る事が少ないツールよりメインウィンドウの障害を取り除く方が優先事項だと思うし、Dashboardを出したりデスクトップまで潜ったりするような大きな動作も要らない。
これで電卓の値や辞書、メッセンジャーの状態が常に見えるようになると非常に便利だと思うのだが…
test.cpp:
#include <altivec.h>
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
リポジトリの所有権を _svn に設定してあるのにユーザを _svn グループに所属させる方法が分からなくてここ数ヶ月ずっとコミットしてなかった。
昨日ようやく本腰を入れて調査したら、説明しているサイトを発見:
MAC OSXにはUSERADD GROUPADDはない
そのまま自分の環境に当てはめると、これでいけた。
イヤホンで音楽を聴く時には、耳に直接入れるタイプのものを使っている。
カナルタイプと言うらしい。
以前は SONY 製のを使っていたけれども、サイズが合わないし、交換しても交換してもすぐ壊れた。
道具として使えないなら音質が良くても意味が無い。
で、探しまわっていたら ELECOM 製で小さいものを発見。右の画像のやつで、型番で言うと EHP-PIE30PN4 というもの。
一ヶ月使っていて今のところ壊れる様子は無いし、なにより耳にフィットするので音が漏れずにボリュームを大きく出来る。素晴らしい。
耳が小さい人にはお勧め。
4月はずっと、最近流行の AviUtl プラグインのNL-Means filter に触発されてノイズ除去のアルゴリズムである Non Local Means をいじくってた。
NL-Means は広域で平均を取って絵をべた塗りに近づけるため、AviUtl 界ではアニメによく効くと言われている様子。
これは畳み込みの一種であり、例えばよく使われている移動平均なんかは次のような感じで畳み込み
![]() |
![]() |
|
ガウスぼかしは次のようなので畳み込む。
![]() |
|
Non Local Means は畳み込む画素の周囲でマッチングを行って、その一致率でウエイトを作る。似通った領域では広く平均が取られ、似通っていない領域では平均されない。
一致率の出し方が工夫のしどころではあるけど、NL-Means filter では差の二乗和を d、係数を h とすると
exp(-d*h)
というように指数に入れている。差が無ければウエイトが 1 になり、差が少しでも大きくなるとすぐ 0 に落ち込む。
また、h が 0 であれば移動平均になり、h が大きくなるにつれ似通った領域のみ使われるようになる。最終的に h が無限大になれば元の画像に一致する。
![]() h が小さい場合 |
![]() h が大きい場合 |
| 0.1 | 0.2 | 0.5 |
| 0.8 | 1.0 | 0.1 |
| 0.2 | 0.6 | 0.4 |
この手法の特徴は、パターンが一致している部分のみを使うので、エッジが完全に保存される。メディアンフィルタでは落ちてしまうような一本の線でさえも保存される。
しかし、逆に一点のノイズであっても保存されてしまうので、結局強いノイズは予め他の手法で取り除いておかないといけない。
![]() メディアンフィルタ 移動平均に比べてエッジが保存されている |
Non Local Means のみで強いノイズを除去するには h の値を小さくしないといけないが、それだと移動平均に近づくのでボケる。
h を小さくしつつボケにくくする為には、畳み込みのサイズを小さくするしか無い。それでは広く平均を取れるこの手法の利点が薄くなる。
そこで折衷案として、h を 0 にした時にガウスぼかしになるようにしてみた。
こうすると領域は円形になるし、サイズを小数単位で微調整出来る。何より遠くにいく程弱くなるので、広過ぎる範囲で平均されない。
![]() ガウスぼかしに近づく方法で h を小さくした場合 |
うーん。SAMSUNG の文字は多少読みやすくなってるけど、あまり差が無いかな。
3 月は PS3 Linux プログラミングの動画の続きを作りたくて、キャプチャソフトを作っていた。
キャプチャしてそのまま保存しているとディスクアクセスがとんでもない事になるので、gzip を噛ましてみたらこれが遅い。10 fps くらいしか出ない。
そこで Range Coder を採用しようと思い、ずっと Range Coder の研究に没頭していた。
先月末からまた研究を再開して、結局一般的に使われているように、テーブルを 2 バイト、演算精度を 4 バイトにするのが最も CPU 負荷と圧縮率のバランスが取れているという答えにたどり着く。
結論は出たのでさくっと実装してまた動画を作る予定。