Libserver3度目の大改造!RSS購読方法、リンク・コメントについての考え方は説明ページを参照して下さい。2008年4月ハイテクゴミ袋は本当にハイテクだったイヤホンだが特に壊れてなかった。延長ケーブルの元の差し具合が悪かったらしい。なんともなくてよかった。ここのところゴミの収集にも金が取られるようになったのはまぁいいんですが、その支払いには例によってゴミ袋を買うことで行います。袋の大きさは45L,30L,20Lなどあるんですけどね。最近の調子を見ていると週2回の燃やすゴミの回収で30Lと45Lを交互に使うのがよさそうだということらしい。それでもいっぱいいっぱいになるわけではないけど、多いときだとちょうどそんなもんでしょうねぇ。極端にゴミの量が減ったわけではないんだけど、まぁちょっとは減ってる気はする。それ以前に容器包装プラスチックの分別で減ったのは恐ろしい量だったけど。資料により値が違うからなんともいえんが、そもそもこの辺は個人のゴミの減量は進んでるはず。これ以上は口で言ってもしょうがないと思ったらしく金を取ると言ったはず。来年の統計が楽しみだ。量はともかく、リサイクル率が恐ろしく上がってそうな気がする。ところで、そのゴミ袋、10枚くっついたのが丸めて売ってるんですけど、それを見るとバーコードが書いてある。見ると、インストアバーコードじゃなくてきちんとしたJANコードっぽい。JANのメーカーコードを調べてみると、きちんと出てきた。このためだけに取ったのかねぇ。JANコードあるからPOSで普通に取り扱えるようにできるんだろうなぁ。いえばコンビニでもいくらか取り扱ってる店あるしなぁ。農村の方に行くと、ひどいところでは農協もなくなって、取り扱い店が公民館だけというひどいところもある。見ると取り扱い店のまばらなところで、ああなるほどと思ったり。実際そんなのをPCで打ち出すのは難しい。それでどうしてるか見てみるとLで書くことが多いな。そんなわけでこの記事でもLで書いたけど、結構定着しそうな感じだな。物理の計算などではLはあまり使わずにm3で書くよね。1000cm3とか書く方が普通かな。どっちにしてもLは微妙な単位ですわな。Lを直接置換するdm3あるけど流行ってるのかね。僕は本でしか見たことがない。Commentボードメーカーに割り振るMACアドレスイヤホンで音楽を聴いてたら急に片方だけ音が切れて驚いた。今回のイヤホンはさほど過酷な状況で使ってないんだよねぇ。いうのに6ヶ月で切れたとなるとちょっとまずいよなぁ。買ったのは日本橋のSofmapなんだけど、まぁタイミングが悪いというか...電話で相談してみて、交換してくれたらラッキー、無理なら余ってるルピーで買うなりしよう。Panasonicのだから筒井の工場に持って行くという手もあるのだが、なんか話がややこしくなりそうだからねぇ...さて、MACアドレスというやつは結構重要で、部ではこれを用いてDHCPで固定IPを割り当ててる。簡易な認証にも使えて何かといい。偽装もできるから一概には言えないが、MACアドレスは唯一のもののはず。/allで確認できる。Addressの値を見ればいい、00-1A-92-75-14-XXとあった。(XXは伏せ字)このうち頭3つがベンダーの番号だと。http://standards.ieee.org/regauth/oui/index.shtml00-1A-92やら001A92でOUIを検索。INC.と書いてある。ボードのメーカーが書かれるのか。他にも知っているMACアドレスを調べたのですが、ほとんどオンボードだしなぁ。CO.,LTD.ばっかりだ。だいたいここに登録されてるのでわかるでしょう。ここで調べて何のメリットがあるんだというとあまりないのだけど、おもしろいもんです。見てると1社でたくさん割り当て受けてるみたいだな。いえば変わったところではXenが割り当てをうけてるな。00:16:3eなんだが。Xenというと仮想化技術なのだが、ここで仮想のネットワークインターフェースを作るからと。Inc.と書いてある。こんな風に会社に割って、そこからは重ならないようにしなさいと。一度MACアドレスを調べてみるとおもしろそうですね。Studioで視覚的に好きなソースコードを書くさて、今日は日本橋に行ってきたわけだが、それでいろいろ見てましたと。追加用のDDR2のメモリ、1GBのを買ってきました。すごく安かったんでねぇ。その成果は起動してすぐは見えなかったが使ってたらすぐ気付いた。HDDの動作音が少ない。いままではSWAPしまくってたんですよ。おかげで静かで、サクサクと動いてくれる。そんなわけで非常にいい結果が出たとおもいます。相変わらず起動時はSWAPしまくるけど。Studioを使っています。大規模なものを作るときは。自分でもこのメソッドはなんだということになるので、sammaryだけは書いておくと便利です。Studioですが好みに合わない点がいくつか。テキストの自動整形絡みなんですけどね。ON行番号ONを除くと全部窮屈になりそうな設定の変更だな。}となるということです。2字下げにしたのは、他のソースもほぼ全部そうなってるから。昔は手動のは全部tabだったんだが、viでの扱いが悪いので、スペースにすることにした。そのとき、tabの表示はだいたい8字下げなんだが、それでは長いと思ってたので、2字にしたということ。2字ぐらいなら下げるのもほとんど手間にならなくていい。昔のソースを掘り出してくるとtabで下げてるな。C#のやつの標準設定は4字下げで、下げる方法はスペース。{と改行ですが、僕は基本的に、改めて改行せずに{をつけるというやり方をします。{だけはあまりに寂しいのでね。前にあるif()やらあっての{だと思ってるので。バイナリ演算子の空白のは窮屈になりすぎる気はするけど。1のようにいちいち空白を入れるのはちょっとなぁと思ってたので。その一方、i-jなどのような変数同士の計算では空白欲しいけどね。この程度はいいと思うので、全削除にしました。行番号はあまり気にしなくていいけど、一応。Studioの標準を変えれますよ。{のやつは人によって随分好き嫌いがあるからね。僕もこうやって変えれることを知ったのは最近だからなぁ。そんなわけで自分好みのソースを簡単にかければそれでいいねというのはあるわな。Comment実体をコピーしたいとき、参照だけほしいときベクトル使っていろいろ書いてたわけですが、まぁ完成したよと。曲がる回数の多い図面は嫌うらしい。これはC#のソースです。"bar";Console.WriteLine(str2[0]);大きさ1の配列だが、別にclassならなんでもいいはずなんだが、stringはうまくいかん。これを見ると、str1[0]に"foo"を入れて、これをstr2=str1としたので、この時点ではstr2[0]は"foo"だ。次を見る、str1[0]を書き換えた。するとstr2[0]も変わっているという話。うん、これを動かすと"bar"と返ってくるよ。ここでした代入では、実体のコピーは伴ってないということ。参照だけコピーしているということ。str1の実体が甲地点にあったとすると、str1もstr2も実体は甲地点にあると指しているだけ。ここで、その中身を書き換えると、甲地点の実体を書き換えるだけだから、str1もstr2も書き換えられたものを参照していることになると。メソッドの引数は値渡しなので、実体のコピーを用意して渡していますよ。前者はあまり気にしなくてもいいような気はするのだが、後者は少し気にしないといけない。実際はあまり気にしなくていいプログラムばっかり書いてる気がするけど。mypointなるインスタンスをなんか動かすメソッドを作ると。オブジェクト指向らしいメソッドの動かしかたは、mypoint.move(v);だな、まぁこれでいいでしょう。インスタンス自体が勝手に動いてくれる。ここでこのメソッドをstaticにしたと考えよう。するとこんな風になるかな。move(mypoint,v);これが1つの選択肢だろう。いう風に動作させたとき、実体はどう動くかという話なんだが。mypointの実体がもともと甲地点にいたとすると、moveメソッドに渡すときに実体は乙地点にコピーされて、乙地点への参照をメソッドに渡すと。moveメソッドは乙地点の実体をごにょごにょいじって、多分最後には乙地点の参照を返すでしょう。mypointには乙地点の参照が入って終了。その後暇なときに、GCが一生使われることがなくなった甲地点の実体を掃除してくれる。Frameworkのしわざですよ。これがあるおかげでいちいちメモリの開放をしなくていいんだよ。そこでC#ではこんな取り扱いができる。mypoint,v);refというの付けるようにするところは、参照渡しを使うということ。この場合、同様にmypointの実体がもともと甲地点にいたとすると、moveメソッドには甲地点への参照を渡す。ここが通常の値渡しとの違い。ここでmoveメソッドで、甲地点の実体をいじって、終わり。すると、mypointの中身がひとりでに変わってくれてる。Cなんかじゃよく見るやり方だな。僕は、ひとりでに値が変わるあたりが嫌いだが。インスタンス自体が動いているように見える一番目のようなやり方をよくするわけだが。move(mypoint,v);のようなことをやりたかった。そこでこんなソースを書きました。mypoint;movedpoint.move(v);結論から言えば大失敗。ここでの代入は参照しか代入できてないから。冒頭で書いたとおりです。movedpointの実体はmypointの実体と同じ。movedpoint.move(v);の動作でmypointまでやられた。調べてたのだが、Classのコンストラクタに、与えられたインスタンスのコピーのインスタンスを作るようなものを作ればいいと。point(mypoint);movedpoint.move(v);これでいい。コピーのインスタンスは完璧なコピーを作ったわけではないのだが、まぁいいでしょう。そんな具合にソースコードを書いてたら、まぁ完成しました。なんかいろいろ調整してたら動作もよくなってきました。人より速く求められるのが目標だな。簡単なものならすでに実現できてるけどね。CommentC#を使うのは楽というよりスマートに書けるから?回路で相互インダクタンスが出てきていろいろやってたりする。T型等価回路に変換すると-M[H]のインダクタンスが出てきたりするけど、そんなものは現実にはないわな。計算の世界ではこれが便利でも、実際に見れないのは残念な話だ。C#で何かとプログラムを書いています。最近はC・PHP・Perl・C#といろいろ使いますけど、やっぱり役割は違いますね。Web以外でPHPは使わないし、Cで書くのは実用的というより実験的なものばっかりだな。実用的なものは、PerlかC#ということです。ここでC#はオブジェクト指向というのが根底にあるんだから、やっぱりオブジェクトを扱いやすいね。そんなわけでClassの大量製造だ。今回やってるのは障害物の置かれた座標上で、任意の2点の移動方法を調べるやつ。移動はX軸方向かY軸方向だけ。いうことを考えるのに用意したClassはmapとvectorだ。vectorというのは非常に重要だ。C#には標準ではこの手のClassがないのは非常に残念。あったら継承して使うんだけどなぁ...というわけでxとyに使う変数を用意して、プロパティーを作って、+,-,*の演算子を定義して、IFormattableを実装しつつToStringを作っておいた。標準でこの手のクラスがあったらここまでは省略できたな。作業を簡単にするためにこんなStaticなメソッドを作った。(0,5)という移動があったとき、この先に障害物がないか確かめないといけない。そのためには(0,0)...(0.5)進んだところを確かめないといけない。(0,0)はいらん気もするけど。移動のベクトルを渡したらその進んで確かめないといけない先を並べた配列をもらえるというもの。こんなのforループ回せばいいじゃないかと言うかもしれないけど結構な手間だ。そこでここからもらってこればこれだけでいい。false;}なんかPerlのforeachの使い方みたいな気もするが、これはこれでありでしょう。有用な点はいろいろある。こんな道具を用意しておいて、mapのClassに、ルート探索のメソッドを考えながら作っている。座標も移動も何もかもvectorで混乱しそうになるのは厄介だな。再帰的にメソッドを呼び出すべきかとかいろいろ考えてるけどな。最終的にはmapのそのメソッドを動かすだけで、ルートがvector[]でもらえるというのを予想している。するとファイル読み込みでmapを作成するときに自動的に算出して、結果を保存しておくようにするかもしれんが。どちらにしてもmapのことを知らない人でも、少しの操作でルートを得ることができる。苦労して作っても、これを見ないで使えると言うことです。いやはや、カプセル化って恐ろしいですね。今いろいろ書いてるが、オブジェクトの相互関係でプログラムを表してる気はしないな。CommentUA・IPが一致する人は同じ人かもしれないさて、ここでも使ってるカウンターですが、PHPでカウントして、Ajaxでカウントを見にいくというものです。アクセスのたびにカウンターが回るのは都合が悪いのでCookieを食わせています。Cookieの特徴はあるCookieを持っていれば、それはあるCookieを食わせた人と同じということ。Cookieを勝手に作成されると問題があるから、Cookieの値だけで信用しないのが普通ですが。SessionIDをCookie食わせて、そのSessionにUAを記録しておいて変化していないか確認するとか。基本的にはCookieはユニークなユーザーでないか確かめる有力な方法だ。Cookieを食わない人もいる。そんな場合はうまく判別できない。ある程度信用できる方法としてUA・IPアドレスを比較するという方法がある。IPアドレスだけではNATを使われると、区別が付かなくなりやすい。UAだけでは、Fxユーザーが軒並み弾かれたりということが起きる。これでかなり確実になる。これでも弾きすぎる気がするけど。実際の手法を考えたのだが、カウンターのログファイルは非常に容量が多くてこれを見るのは現実的じゃない。以前はこれの行数を数えてカウンターを表示させてたが、他にカウントのファイルを用意していますよ。軽く処理できることが大切だと考えたので、カウントのファイルの後ろに3行記録を書き足すことにしました。具体的な方法は、カウントファイルを配列に読み込んで、Cookieを確認して、なければ2〜4行目のUA・IPと一致しないか確認、一致しなければ1行目のカウントを回して表示、カウントファイルを、1行目に1増やしたカウント、2〜3行目に3〜4行目をコピー、4行目にこのユーザーのUA・IPを記録。CookieかUA・IPが一致した場合は1行目のカウントを表示して終わり。いうわけで、意外とスマートに収まりました。違う人でもUA・IPが一致する場合というのは十分あり得るので、ちょっとひどいかなとも思っています。その配慮で最近3回と比較するという方法をとっているんですけどね。これを導入したのは部のだけで、fdiaryのは入れ替えてない。今度整理して導入しようと思う。ここのカウンターは過去の無駄な機能が多いので...まぁいらんなら消せばいいのだがJavaScript周りも確認しないといかんのでね。Cookie切ってる人ってどれぐらいいるのかねぇ。Comment今DDR2の買い時なのは間違えないことなのかさて、今度大阪の方に行くので、せっかくだからPCのメモリーを増築するために買い足そうかなと。いうのも最近Photoshopをはじめメモリを食うアプリケーションばっかり動かしてる。CPU負荷が小さいことから考えてもSwap食いまくってるんだな。そこから類推するにメモリの容量が増えればスムーズに動いてCPUの有効活用にもつながると。このPCを構築するとき、DDR2の512MBを2枚買って5千円切るぐらいだったと記録してある。現在は1GBでも2千円を切る程度。2GBもツクモで3180円とあるからかなり安いな。ツクモの表示金額は市場をよく表していると思う。いってもこの件に関してはどこもこんなもんです。いうわけで、せっかく行く用事があるのだから、ぐるぐる見て回りながら探そうかなと。部のマシンを新造するという話があって、その加減で日本橋に行くかという話になりましてね。今、非常に部品の価格が安いんですよ。理由はいろいろあると思います。円の価値が他に比べて最近高かったりするとか。AMDの工場は大きいのがドイツにあるはずなんだが、ユーロでの価格が一定だったとしても、最近円に換算すると安くなってると。いう考えで行くと、CPUの生産コストが変わらなかったとしても円で言えばは下がってるように見えると。あと、競争が厳しいから恐ろしい値下げをしたり、まぁいろいろ。少なくともメモリの容量に関して言えば時代が変わったのは間違えないな。ここでメモリの容量を増やすに考えるとすれば、1GB、1GB×2、2GBといったところだろうか。既存の512MB×2は残すということにしよう。1GBを一枚用意してつけるだけで2GBあるんだからかなり便利になるわな。今の値段が底と考えると2GBを買うのもありとは言える。1GBを2枚乗せてデュアルチャネルで使えるかは疑問なんだよな。今の512MBの2枚も本当にデュアルチャネルかわからん。それならわざわざ高い2枚載せを選ぶ理由はないかなとか。幸いなことにメモリスロットは4つあるから、2GB搭載するには1GB以上のものを使わないといけないとそんなことはない。そんなわけで1GBだけあればいいんだけどね。だいたい512MBのメモリなんて余ってもどうしようもないし。DDR2を使う人がいればともかく。売ることを想定したが、買い取り価格が300円とあるからなぁ...まぁ微妙。そんなわけで多分1GB、調子がよければ2GB買ってきますよと。今回も例によって、お金を下ろすのを省くためにVISAデビットで切符をあらかじめ買った。今回はJTB、さすがにKNTよりは小さかった。普通の乗車券よりむちゃくちゃ大きいけどね。Comment省略が行き過ぎたPerlはfor(‘P’,’e’,’r’,’l’){print;}で終わりスクリプト言語では最強勢力ではないかと思っている、Perl、なんかことあるごとにPerl言ってる割にはPerlをいままで使ったことがなくてねぇ。Perlでできることというといろいろあるけど、やはり文字列処理に強いです。それとやっぱりスクリプト言語らしく、変数の書き方なんかがおもしろい。省略の仕方が怖すぎる。(OF);1行目はインタプリンタのパス。だいたい/usr/bin/perlみたいだね。ファイルの読み込み方がすごくて、リダイレクトとかみたいな書き方をする。<だから読み込み専用。>foo.txtなら白紙にして書き込み(w)、>>foo.txtなら追加(a)てな感じ。不思議なのはパイプからもらったり、パイプに渡したり出来る。今回はTerapadに渡すことを考える。