2010年1月28日木曜日

メ(ッケー)モ

どうも、ゆっくりしたいんだってね、なQです。

とにもかくにもメモを書く。
ていう人が結構多くて、インターネットはメモだらけなんじゃないかとおもっています。戯言はさておき。


①サーバーのエラーメッセージ
webサーバー立てると当然ながらイミフなアクセスをされます。一秒おきにrequest送ってきたり、どこぞのサーバーに勝手にプロキシで使おうとしたりします。認証つけたりはしていますが、やっぱり不安です。

というわけでエラーページを返すときのhtmlも殆ど何も返さないようにしますた。
このあたりの処理を変更するには、

/etc/httpd/conf/httpd.conf
の中の

Alias /error/ "/var/www/error/"
より下にやたらに書いてある

# ErrorDocument XXX /hoge/hoge

を変更します。例えば401のerrorを応答するときにはコメントアウトを外し、

ErrorDocument 401 hogehoge

とします。こうすると、401エラーを返すときはhogehogeが帰るようになります(本当にブラウザ上にhogehogeが表示されます(笑))

また特定のhtmlファイルを選択するとそのhtmlが返されるようになります。




②1.XWarpPointerの引数について
マウスポインタの位置を強制的に移動させる関数。

XWarpPointer(d,
       移動前のwindow,Noneでも良い、
       移動後のwindow,Noneでも良い、
       src_x
       src_y
       src_width
       src_height
       dest_x
       dest_y
)

移動後のwindowがNoneの場合、dest_x,dest_yだけポインタ今の位置から移動させる。
移動後のwindowが設定されている場合、そのwindowの絶対座標にポインタを移動させる。
移動前のwindowが設定されている場合、そのwindow内にポインタが有る場合のみポインタを移動させる。またsrc_x,src_y,src_width,src_heightは移動前のwindow内を四角形を表しており、この値が設定されている場合はこの四角形にポインタが入っている場合にポインタを移動させる。src_x,src_yはwindwo内における左上の座標、src_width,src_heightは四角系の幅、高さ。






xも
使ってみると
便利かも

2010年1月25日月曜日

痛恨の一メモ

どうも、PCがLinuxじゃなくてUtuxになりそうなQです、こんちには。

会心の一メモ、必殺の一メモときたら、やはり痛恨の一メモも必要ですよね?いや、まったくもってどうでもいいことなんですが。

1.XSetLineAttributesの引数について
Xを使うとどうしても英語の文献に頼らざるを得ない部分が出てきます。まあ少なくとも読むことはそれほど苦痛ではなくなってきているけど。で、この関数ですがX上でwindow内に描く線の属性を設定する関数。

XSetLineAttributes(d,gc,
          線の太さ、
          線の種類(LineSolidとか)、
          線の端点の形状、
          線の交わり方の形状)

ってことらしい。
端点の形状はCapButtが四角形、CapRoundが丸ということになる。CapProjectingというのもあるが、これは「端点からさらに線の太さ半分だけ伸ばした四角形」になる。見た目はCapButtと同じ。
交わり方の形状が、JoinMiterが多分一番直感的な交わり方。「二つの線の外側のエッジの位置が一致するまで、同じだけそれぞれの線を伸ばす」って感じ。JoinRoundは要するに交点を丸くする。説明では「半径=線の太さ半分の円弧で外側のエッジを接続する」。JoinBevelは三角形で面取り。個人的には一番説明が簡単(笑)。



2.XDrawArcの位置指定
引数で円(円弧、楕円、楕円の弧)を描く位置を指定するわけですが、この位置指定の引数は円の中心ではありません。この円を内接円とする四角形の左上の座標です。直感的に勘違いしやすいのだが、おそらく円のより一般的な形といえる楕円を描くことに主眼をおいた関数なんだろうと推測されます。



3.emacsで検索、置換
検索コマンド C-s 検索したいワード
当該のワードにカーソルが飛んだ後、もう一度Ctrl + sを押すと次のワードに行く。
置換には   M-x query-replace (Return) 置換前のワード (Return) 置換後のワード(Return)
当該のワードに飛ぶので置換する場合はy,しない場合はn。終了はq。



4.Roombaの電池について
Roombaの電池をいろいろ頑張っていたわけであるが、いまいちうまく行かない。というか充電して、一旦電池を外し、そしてもう一度付けるとRoombaが動く、という感じである。おそらく原因はRoombaが電池の容量や充電量を検出する機能を持っていることに起因しているのではななかろうかと思う。早い話、電池パックの中でファンを回しているので、そのファンの電流分をRoombaは充電したと思っているが実際はそんなことはないわけで、Roombaにしてみれば「この電池そろそろ寿命だよ?」という気分なのではなかろうか?
一旦電池を外せば、そのあたりのメモリーはリセットされるので「お、普通に電力あるじゃん」と思って動いてくれる、て感じではないかと。

ちなみに今積んでる電池は1年以上ほったらかしだった電池なので多分かなり死にかけ。まあ電池の特性にもよるのだろうが、1.2Vよりも少し低めの電圧で放電する、内部抵抗が大きく大電流を流すと電圧降下が大きい、という特性がある。というわけでこの電池が使いものにならなくなるまではとりあえず使ってみる。
(まあ結局Roombaの性質と合致しないバッテリーシステムなのでこの方法はダメかも・・・普通に放熱板の方が良い)





このブログ
書いてる内容
まとまらず

2010年1月20日水曜日

必殺の一メモ

どうも、最近gadget的な発見が多いQです、こんちには。

ここ最近の日記がメモばかりなのですが、実際イミフな恋愛論とか書いてるよりもはるかに有意義なことが多いのでメモッてます。

1.Roombaの充電池改造計画第二


以前やってみたRoombaバッテリーの改造第二です。電池は同じものを使いまわしで、以前よりも改善したことやちょっとしたtips。

ダイオード?見たいなものが中に入っており、熱の検出に使われている。ニッケル水素充電池の充電方式の一つとして熱を見ながらやる、というのは定石の一つらしいのだが、これが結構シビアらしい。要するに電池の温度をちゃんと測って無いとダメポってこと。
温度検出、とくに低温方向に誤差がでかいと過充電の原因になる。
…というわけで力技だが、固まる放熱用シリコーンなるもので直接電池に固定した。これで多分より高精度に熱検出できる、はず。

中に追加した基盤には、流入方向の電流を検出してファンを回す、という回路を組んである。で、ここでオペアンプの作動増幅を使ったのだがここではまった。
最初検出抵抗の両端をそのまま作動増幅してみたのだが、使ったオペアンプLM358は、入力の下限はGNDレベルまで許容するが、上限はVcc-1.5Vである。したがって誤動作してしまった・・・ちゃんとデータシート読めよ自分。

というわけで検出用の電圧を抵抗で分圧を試みたのだがここで抵抗の誤差にやられる。もともと数ミリボルトの電位差を検出するような回路なので、分圧用抵抗値の誤差でやられた。まあ抵抗値の大きい抵抗を付けたいところにつけることで簡単に回避できることではあるのだが。

で、今充電中。今度はバッテリーホルダがとろけないことを願う(笑)



2.Roombaのハッキングに際して
一部でRoombaがROIというインタフェースを持っていて、ここを介してRoombaを操作できることは周知の事実になっていますが、中古を買うときは注意。といっても注意しようがないのですが、2005年10月以前の製品は後からOSMO//hackerというものを買い、これでファームウェアをアップデートする必要があるようです。ばかばかしいので2005年10月以降の製品を買うようにした方が良いでしょう。
・・・つまり中古で買ったRoombaを調べてみたら2004年製だったので鬱、ということです。まあ一つ普通に使う為に買ったのでいいんですけどね。



3.XWindow
昔からXWindowシステムすげえと勝手に思っていたのだが、実は何ができるのか、どういうものなのか、とかをちゃんと調べたりプログラム書いてみたりしたことが無い。
表面的な理解は、操作を受け持つClientとそれに応じて表示・描画命令を出すServerモデルなのだが、こんな抽象的な理解では理解したとはいえないので、ちょっと少しずつ勉強してみている。

とりあえずすこし線とか書いてみたのだが、VC++と凄くインタフェースが似てると感じた(VC++がXWindowに似てるというほうが正しいか…)。とりあえず、分かったことを少しずつ書いていこうと思っている。

イベントの拾い方
XEvent e;//XEvent構造体を用意
XNextEvent(Display,&e);//発生したイベントの取り込み
e.type = ????//どんなイベントが発生したか?

とりあえずこんな感じ。





枯れてこそ
隙間産業
その出番

2010年1月9日土曜日

会心の一メモ

どうも、メモ概論第一履修中のQです、こんちには。

今日もめげずにメモを書いてみたりします。


①LinuxでCPU使用率をみる
vmstatというコマンドで簡単に見ることが出来る。


②Linuxでフリーズ時の対応方法
Ctrl+Alt+F1で一時的にCUI環境に移行する。
そこで色々好き勝手やった後(主にkill関連の作業)
Ctrl+Alt+F7でGUI環境へ移行する。


③python,threadingモジュール
クラス(インスタンス)として複数スレッド処理ができる。
ただし、run()メソッドを使ってはいけない。(通常のシーケンシャル処理になる)
start()メソッドを使う。


④pythonで16進表記のビットをASCII文字として扱う方法
'ab(何かのASCIIコード)'.decode("hex_codec")
ASCIIコードで明示的に文字を指定できる。Cだとすこぶる簡単なのだがpythonではメソッドを使う。


⑤python,pygameで音楽再生
pygameというモジュールがあって、mp3の再生やwindowを作るのに非常に便利。本来はゲームを作る為のモジュール、というかもはやフレームワーク。音楽の再生に関して、set_endevent(type)というメソッドを使うことで音楽終了時に終了イベントをqueuingすることができる。また、このイベントは発生した後にpygame.event.get()メソッドで拾うことが出来る。この返り値の.type属性を見れば発生したイベントのIDが得られる。
なお、get_endevent()というメソッドがあるが、これは発生したイベントを拾うのではなく、どんなendeventをsetしたか?を調べる為のメソッド。勘違いして若干はまったので注意。


いやしかしpythonは素晴らしい。




今更に
pythonを知り
浮かれてる

2010年1月6日水曜日

つまり、それはメモということかね?

どうも、トランジスタなんて言っトランジスタ等と下らないことを宣い始めたQです、こんちには。

ここでモスモス?大丈夫ですか?等と言ってくれると嬉しい。


新年早々こんなんでいいのか僕は・・・。

さて、年末年始はR8とかと格闘しておりました。

1.R8C15とR8C29
昔、sunhayatoから出ていた今は亡きR8C15のDIP。これが無くなったのはかなり痛いのだが仕方がない。
さて、これの上位互換品としてR8C29というのが秋月で売ってます。ピン配置もベーシックなものに関しては殆ど同じなので書き込み器等を使い回すことができます。
この秋月で売ってるR8C29なのですがSSOPなので普通のユニバーサル基盤で使いまわすためにはDIP変換ボードが必要です。
SSOP→DIP変換は同じく秋月で売っているのですが、なんと微妙に足がパッドに届きません(笑)半田でなんとかくっつけられないこともないのですが…。というわけで僕は慎重にICの足をピンセットで伸ばしてくっつけました。若干不安ですが、これでなんとかなりそうです。



2.割り込みにvector番号
HEWでR8Cプログラムを頑張っていたのですが、どうも割り込み番号を指定する必要がある用です。例えばUARTの割り込み番号は18なのですが、
#pragma interrupt uart-interrupt (vector=18)
と言う風にしてあげないといけないっぽい。
昔はいらなかったんだけど、どこの設定が変わったんだろう。



3.R8C系コンパイラ(M16系)では\nの意味が違う。
H8系、SH系コンパイラは\nはCRですが、R8C系のコンパイラは\nがLFになってます。デリミタに改行を使ってたらはまった。要注意。



4.上に関連してteratermについて
受信の改行設定にCR,LF,CR+LFがあるが、調べてみても違いがいまいちよく分からない。要するにこういうことっぽい。
CR→送られてきたCRはCR、LFはLFとしてそのまま認識する。余計なことは一切しない。
LF→CRはCRとして認識する。LFが送られてきたときにLFをCR+LFに変換する。
CR+LF→CRをCR+LFに変換する。LFはLFのまま。
参考まで。



5.R8C15と29のシリアルに関するレジスタ
ucon→u0c1に集約




picより
R8C
使いたい