Home

natury.jp

迎春2012

迎春2012

あけましておめでとうございます。
本年もよろしくお願いいたします。

電源ユニット交換

年末、PCを起動するとやけに動き遅いなぁと思っていたら急にフリーズ、強制的に電源落とした。
もう一度電源入れようとスイッチ押しても電源ランプが一瞬光るだけでうんともすんとも言わなくなってしまった。

どうやら電源ユニットが故障してしまったらしい。
サイズの鎌力2(400W)という電源。
3年前くらいに購入したものだったので、寿命は全うしたかな。
幸いにも保護回路がちゃんと作動していたようで、他のパーツは無傷。

分解すると、中のコンデンサが6つほど破裂していた。
すでに電解液が固まっていたので破裂は以前から起きていたようだ。
これで毎日PCを起動してたと思うと怖い。よく動いていたものだ…。

近くのパーツショップを見にいったりして迷った挙句、
AmazonでAntec社のEcoWatts EA-650を購入、6120円。
今の構成だと400Wで十分だけど、近々グラフィックボードを買い換えるかもしれないので余裕をみて650Wにした。

パーツはいつ壊れるかわからない…。
日頃からバックアップしなきゃと思いつつHDD1台でずっとやってきたのでついでにHDDも購入。
日立GSTの0S02601(1TB)を近くのパソコン工房で5380円。

以前から日立の1TB(HDT721010SLA360)を使ってたけど、
新しく買ったものは動作音が大きい。ガリガリゴリゴリうるさい。
日立はHDDメーカーでは一番信頼してるし、バックアップ用なのでまぁいっか。

2011謹賀新年

新年あけましておめでとうございます。
本年もよろしくお願いします。

(↑ペンタブで描いた)

Windows Vista/7のExplorerっぽい枠を描画する

Windows Vista / 7のExplorerではアイコンに選択状態を示す半透明の枠が描画されます。

Windows 7 のExplorerの例

C#の自作プログラム内でListViewから描画したくて調べてみました。
Theme APIを使うとうまく描画できるようです。

まずSetWindowThemeというAPIを定義して

[DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
extern static int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList);

描画するコントロール(control)にExplorerのテーマを設定します。

SetWindowTheme(control.Handle, "explorer", null);

これでExplorerと同じような枠が自動で描画されます…が…
ListViewのCustomDrawを使ったときが問題。
DrawItemイベントで

e.DrawDefault = false;

とするとOSによる自動描画がされなくなるので枠も描画されません。

そこで、次のようにAPIと構造体、定数を定義して

[DllImport("uxtheme.dll", CharSet = CharSet.Auto)]
static extern int DrawThemeBackground(IntPtr hTheme, IntPtr hdc, int partId, int stateId, [In] RECT pRect, [In] RECT pClipRect);

[DllImport("uxtheme.dll", CharSet = CharSet.Auto)]
static extern IntPtr OpenThemeData(IntPtr hwnd, [MarshalAs(UnmanagedType.LPWStr)] string pszClassList);

[DllImport("uxtheme.dll", CharSet = CharSet.Auto)]
static extern int CloseThemeData(IntPtr hTheme);

[StructLayout(LayoutKind.Sequential)]
class RECT
{
    public int left;
    public int top;
    public int right;
    public int bottom;
    public RECT()
    {
    }

    public RECT(Rectangle r)
    {
        this.left = r.X;
        this.top = r.Y;
        this.right = r.Right;
        this.bottom = r.Bottom;
    }
}

const int LVP_LISTITEM = 1;
const int LISS_NORMAL = 1;
const int LISS_HOT = 2;
const int LISS_SELECTED = 3;
const int LISS_DISABLED = 4;
const int LISS_SELECTEDNOTFOCUS = 5;
const int LISS_HOTSELECTED = 6;

DrawItemイベント内で次のようにAPIを呼び出すと枠がちゃんと描画されます。

IntPtr theme = OpenThemeData(control.Handle, "listview");
if (theme != IntPtr.Zero)
{
    int st = LISS_NORMAL;
    switch (e.State)
    {
        case ListViewItemStates.Hot:
        case ListViewItemStates.Hot | ListViewItemStates.Focused:
            st = LISS_HOT;
            break;
        case ListViewItemStates.Selected:
        case ListViewItemStates.Selected | ListViewItemStates.Focused:
            st = LISS_SELECTED;
            break;
        case ListViewItemStates.Selected | ListViewItemStates.Hot:
        case ListViewItemStates.Selected | ListViewItemStates.Focused | ListViewItemStates.Hot:
            st = LISS_HOTSELECTED;
            break;
    }

    if(st != LISS_NORMAL)
    {
        DrawThemeBackground(theme , e.Graphics.GetHdc(), LVP_LISTITEM, st,
            new RECT(e.Item.Bounds), new RECT(e.Item.Bounds));
        CloseThemeData(theme);
        e.Graphics.ReleaseHdc();
    }
}

これでアイテムの状態に応じて描画されるはず。

実対称行列の固有値は実数であることの証明

授業レポートのメモです。

\inline A\inline n次の実対称行列であるとし、\inline \lambdaをそれぞれ\inline Aの固有値の一つとし、\inline \boldsymbol{x}をそれに対応する固有ベクトルであるとする。このとき

A\boldsymbol{x}=\lambda \boldsymbol{x} (1)

である。両辺の複素共役をとると\inline \overline{A}=Aであるから

A \overline{\boldsymbol{x}}=\overline{\lambda}  \overline{\boldsymbol{x}}

さらに、両辺の転置をとると\inline A^\mathrm{T}=Aであるから

(A\overline{\boldsymbol{x}} )^{\mathrm{T}}=  \overline{\lambda}\overline{\boldsymbol{x}}^{\mathrm{T}}
\overline{\boldsymbol{x}}^{\mathrm{T}} A =  \overline{\lambda}\overline{\boldsymbol{x}}^{\mathrm{T}}

この式の両辺に右から\inline \boldsymbol{x}をかけると

\overline{\boldsymbol{x}}^{\mathrm{T}} A \boldsymbol{x}=  \overline{\lambda}\overline{\boldsymbol{x}}^{\mathrm{T}} \boldsymbol{x} (2)

である。一方で、(1)式の両辺に左から\inline \overline{\boldsymbol{x}}^{\mathrm{T}}をかけると

\overline{\boldsymbol{x}}^{\mathrm{T}} A \boldsymbol{x}= \lambda\overline{\boldsymbol{x}}^{\mathrm{T}} \boldsymbol{x} (3)

(2)式と(3)式の右辺を比較すると、
\lambda=\overline{\lambda}
でなければならない。すなわち\inline \lambdaは実数である。

これはこの行列の任意の固有値\inline \lambdaについて言える。
[証明終]

さらに\inline Aの固有値\inline \lambda _i, \inline \lambda _jに対する固有ベクトルを\inline \boldsymbol{x}_i, \inline \boldsymbol{x}_jとすると

A\boldsymbol{x}_i=\lambda _i \boldsymbol{x}_i (4)
A\boldsymbol{x}_j=\lambda _j \boldsymbol{x}_j (5)

(4)の両辺に\inline \boldsymbol{x}_jとの内積をとり、(5)の両辺に\inline \boldsymbol{x}_iとの内積をとると、

A\boldsymbol{x}_i \cdot \boldsymbol{x}_j=\lambda _i \boldsymbol{x}_i \cdot \boldsymbol{x}_j (6)
A\boldsymbol{x}_j \cdot \boldsymbol{x}_i=\lambda _j \boldsymbol{x}_j \cdot \boldsymbol{x}_i (7)

ここで、実対称行列の性質から
A\boldsymbol{x}_i \cdot \boldsymbol{x}_j = A\boldsymbol{x}_j \cdot \boldsymbol{x}_i
であるから、(6)式から(7)式を引くと

 0 = (\lambda _i- \lambda _j) \boldsymbol{x}_j \cdot \boldsymbol{x}_i

ここで、2つの固有値が相違なるものであるなら、\inline  \lambda _i \neq \lambda _j であり
 \boldsymbol{x}_j \cdot \boldsymbol{x}_i = 0
である。これは\inline Aにおいて、任意の異なる2つの固有値の組みについて言える。

よって、\inline Aの異なる固有値に対応する固有ベクトルは直交する。
[証明終]

参考文献:
Matrix Eigenvalue Theory

つくば

引越しやいろいろ手続きなども終わり落ち着きました。
春休みはいろいろしようと思ってたけど、いつの間にか3月終わってた \(^o^)/

つくばは田舎だけど、のんびりしてて良いところだー。
空気も思ったよりきれいで住みやすい。

引越し作業中に携帯(2年半使ったW43S)を壊してしまった…。
1日放置してたら何故か起動するようになったけど、ずっと圏外表示に。

修理するかdocomoにかえよう。
auのAndroid機に期待してたのに…。auは完全に終わったと思う…。

あとは引越し

なんとか卒業研究の論文も提出し、発表なども無事に終わりました。
そして、クラスの卒業旅行で温泉地に行って一泊したりしました。

あとは卒業式と引越し!
来年度から新しい場所で新しい生活。楽しみもあるけど不安…。

しばらく春休みは暇だと思うので、もっとBlog更新したい。
おわり。

サブPCをアップデート

新年ということで、サブPCをアップデートしました。

6年前くらいにBTOで買ったPentium 4なマシン。
今となっては、YouTubeすら紙芝居になってしまう残念なスペック。

予算1万円でパーツを買い換え、流用もしつつスペックアップしました。

新サブPCのパーツ

パーツ 備考
CPU Pentium 4 2.4GHz Northwood Celeron E3200 2.4GHz 4380円で購入
M/B Asus製型番不明 SiS651 GIGABYTE G31M-ES2L 5000円で購入
ケース 流用
電源 謎の250W Acbel 300W 余りパーツ
メモリ DDR-333 256MB+512MB DDR2-667 1GB×2 メインPCから取り外し
HDD WesternDigital 60GB Sumsung 500GB 余りパーツ
DVDドライブ Pioneer DVR-06A 流用
FDD 詳細不明 流用
GPU GeForce 6200 GeForce 8600GT 余りパーツ

今のCeleronって凄いですよ。
4000円弱の廉価CPUですが、中身はCore2 Duoとほぼ同じです。

普通に使ってると、Core2 Duo E6750(メインPC)と体感は変わらない!
入れてるソフト少ない分、メインPCより快適だったりする…。

やっとサブPCでも、HD動画やゲームできるようになった!
PC組むならCeleronオススメですよ。

2010年明けましておめでとうございます

2010年、明けましておめでとうございます。
本年も natury をよろしくお願いいたします。

Avatar 見てきた

映画 Avatar の3D吹き替え版を見てきました。
いつも洋画は字幕で見てますが、3Dだと吹き替えのほうが見入りやすいらしいので。

文句なしに個人的には今年No1です!
ストーリーが面白いのはもちろんですが、
やはり美しい映像に3Dというのが大きなポイント。

これは絶対見に行くべき!

本編始まる前に、別の映画の3Dの予告編が出たときに、劇場から歓声が上がりました。
これからの映画は3Dの時代だと思いました。

USJとかでよくある映像が飛び出る3Dというよりも、スクリーンの奧に世界が広がってるという感じです。
この3D映画を一度体験してしまうと、他のどんな平面なグラフィックを見ても、これほどの感動はないかも…。

見に行くときは、もちろん3D対応の映画館で見て下さいね。

Home

Search
Feeds
Meta

Return to page top