[天気:雨]
#1
[日記] 日記ネタが多い日だった
最近何事も無く日記が抜けてる日が多かったんだが、
今日は日記ネタに出来そうな出来事がいっぱいだったよ。
詳しくは以下に一個ずつ書いていこうと思うが、
一個ずつ書いてるうちにどんなネタがあったのか忘れないように、
まずトピリストを書いておこう。
1TB の壁、水道止まった、Google で大人気、高松さんちにお邪魔、さんまと風呂。
[天気:晴れ]
#1
アオーン
今日ジャンプ読んだら、超唐突にアオンが打ち切られてて大ショックだった。
ていうかマジ唐突過ぎ。
途中までいつもと同じだったのに、最後の4ページでいきなり終わった…。
[天気:晴れ]
#1
[飯] 弁当6
今日のメニューは、
ご飯、サツマイモの味噌汁、もろきゅうの糠付け、サツマイモのバター焼き、
温野菜サラダ、卵焼き、サーモンのホイル焼き。
アルミホイルが結構場所とって弁当箱が狭かった…。
#2
ファイル名を指定してダウンロード
↓こんなヘッダを出しとけばファイル名を指定してダウンロードが可能。
Content-disposition: filename="hoge.png"
最近のブラウザなら大抵対応してるみたい。
古いブラウザは無視。
どうしてもやりたいなら力技だが
http://hostname/dir/hoge.cgi/hoge.png
こんな形で CGI とかが動くように作ってやる方法もある。
何が出来るんだろうか。
[天気:時々雨]
フォーム上の何処でもドラッグするには System.Windows.Forms.Form の
WndProc をオーバーライドして Message を処理してあげることで実現可能。
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_NCHITTEST = 0x0084; //マウスポインタの指定の位置を調べるときに送る
const int HTCLIENT = 1; //クライアント領域内にある
const int HTCAPTION = 2; //キャプションバー上にある
switch(m.Msg)
{
case WM_NCHITTEST :
//フォームの何処でもドラッグできるようにする
if(m.Result.ToInt32() == HTCLIENT)
{
m.Result = new IntPtr(HTCAPTION);
}
break;
}
}
HTCAPTION が送られてきたら HTCLIENT に書き換えちゃう。
こうすることでクライアント領域内にカーソルがあるのを
タイトルバーの上にあることなる為、ドラッグが出来るようになる。
#2
今日は寒いなぁ
寒いのに灯油が切れたのでもっと寒い。
寒いけど寒いから灯油を買いに行こう。
いってきます。
ただいま。
ぬくい…。
[天気:晴れ]
UNZIP32.DLL がインストールされてないのに ZIP ファイルが作れてしまった。
でも
他のアーカイバで解凍出来ない
謎の ZIP ファイルだった。
変なもの作るくらいなら作れないようにしてくれ(--;
偶然すぐに隣のマシンで解凍しようとしたら出来なかったから気付いたけど、
気付かなかったら中身のファイル取り出せなくなって大ショックのところだったよ。
アーカイバ DLL のアップデートで UNZIP32.DLL 入れたら問題は起きなくなったけど…。
でも ExpLZH はアーカイバ DLL も自動ダウンロードできるし、
自分のプログラム自身もボタン一発でアップデート出来るので非常に便利だと思います。
クリーンな Windows にはまずコレだよね(ぉ
#2
[飯] 久しぶりにカレー
今日は朝寝坊したので弁当が作れなかった。
なので久しぶりにいつもの路上カレー屋さんに行ってきた。
久しぶりに行ったらカレーの種類が増えてた!!
とりあえず2種類をコンボで買ってきて食った。
相変わらず美味かった。
でも2種類のカレーの名前は忘れたので日記に書けない自分…。
#3
[.NET] Graphics オブジェクトの取得方法
//System.Windows.Forms.Control クラスのオブジェクトから取得する場合
Graphics g = obj.CreateGraphics();
//System.Drawing.Image クラスのオブジェクトから取得する場合
Graphics g = Graphics.FromImage(image);
何も考えずに image.CreateGraphics() とかやろうとしたら出来なかった。
Image からはこう取るのね。
#4
[.NET] フォームの外に描画する
WindowsAPI の力が必要なようだ。
[DllImport("User32.dll")]
public extern static System.IntPtr GetDC(System.IntPtr hWnd);
こうしといて、
System.IntPtr DesktopHandle = GetDC(System.IntPtr.Zero);
Graphics g = System.Drawing.Graphics.FromHdc(DesktopHandle);
g.FillEllipse(new SolidBrush(Color.Red), 100, 100, 100,100);
こう使う。
#5
[鯖] PHP4
やっと PHP を使えるようにした。
Apache2 + PHP4 は make に関してバグがあったんだがそれもどうやら直ったようだ。
特に何事も無くインストール出来た。
良かった良かった。
@
configure & make:
#!/bin/sh
./configure \
--prefix=/opt/php4 \
--with-apxs2=/opt/apache2/bin/apxs \
--enable-mbstring \
--enable-mbstr-enc-trans \
--enable-mbregex \
--enable-trans-sid \
--with-openssl \
--with-xml \
--with-pgsql=/opt/pgsql \
--with-mysql=/opt/mysql
適当に要りそうなもの選んだだけ、特筆することは特に無し。
この後 make → su → make install で完了。
@
httpc.conf:
make に apxs 使ってるからか
LoadModule php4_module modules/libphp4.so
は既に httpc.conf に追記されていた。
あとは
AddType application/x-httpd-php .php .php4
しただけ。
httpd を restart して phpinfo() と書いた php ファイルを開いたらちゃんと
PHP が動いてることが確認できた。
あっさり上手く行き過ぎて肩透かし食らった感じだ。
昔は PHP のインストールはもっとめんどくさい印象あったんだがなぁ…。
[天気:晴れ]
#1
[.NET] VS.NET で CVS
CGI で動くゲーム(?)を入れてみた。
7丁目ぴーぷる
とりあえずみんなゼロ歳。
#3
[.NET] コントロールの描画に関する TIPS
@
ユーザ描画の可/不可:
普通コントロールはデフォルトでユーザ描画が出来るようになってると思うんだが、
中にはそのままだと Paint イベントを発生してくれないコントロールもある。
そういう時は、
SetStyle(ControlStyles.UserPaint, true);
としてやれば Paint イベントが発生するようになる。
逆に言えばこいつを false にするとユーザ描画が出来なくなる。
@
再描画:
SetStyle(ControlStyles.ResizeRedraw, true);
とするとコントロールがリサイズされたときに再描画されるようになる。
@
透明にする:
SetStyle(ControlStyles.Opaque, true);
TransparencyKey = Color.White;
とすると白い部分が透過するようになる。
@
ちらつき防止:
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
とするとダブルバッファされるようになるのでちらつかなくなる。
@
ギザギザを取る:
g.SmoothingMode = SmoothingMode.AntiAlias;
Graphics g に対してこのようにするとアンチエイリアスされる、
SmoothingMode には他にも HighQuality とか HighSpeed とか色々ある。
[天気:雨]
#1
[鯖] Bフレッツ来た!!
3時半頃来るとか言ってたのに、4時半頃になりますって電話が来て、
5時過ぎになりますって電話が更に来て、
結局工事始まったのは6時だった。
40分くらいで工事完了。
工事の人がノートパソコンで速度測定してた。
29Mbps 出てたようだ。
イイ!!
ところで光終端装置って面白いなー。
中身は極細の光ファイバが剥き出し状態で2本剥かれてくるくる回って収まるのね。
組み込み作業見てたら爆弾の解体作業を見てる気になった。
@
JCOM:
早めに解約しないとなー。
[天気:雨]
#1
今日もとてもとても寒い
室温4度とか言ってるよ?
外は小雨がずっとふっていた。
買い物ついでに外で飯を食うことにしたので寒い中バイクでお出かけ。
@
子供服ってちっちゃーw:
友人の従姉妹の子供が誕生日と言うコトなので
その誕生日プレゼントを買いに行ったのだった。
子供服を見てまわったんだが、ちまいねー(笑
ほんとにこんなの着て生きてるのか、なんかすごいぞ赤ちゃん。
靴なんて特に、もうオモチャみたいだし。
@
飯はイタリアントマト:
久しぶりに食いに行った。
ここは始めの頃は、とても美味しいんだが何故かあまり流行ってなかったのに、
最近は結構混んでるみたい。
季節の香草のクリームリゾット、クラムチャウダー、
デザートにチョコレートケーキとカフェラテを頼んだ。
最初にテーブルの上にあるのはカフェラテとケーキ…、むぅ喰いたい…。
でもデザートなので飯が来るのを待つ。
まず来たのは一緒にいた友人が頼んだトマトとチーズのクリームスパゲッティ。
とても美味そうな匂いがするので先に食べて始めてもらった。
で、リゾットが来た。
店員はリゾットを置いて帰っていった。
…あれ?
スプーンもフォークも無いし!!
どーいうことだよ。
とりあえず店員呼びつけようと思ったんだが忙しそうなのでスプーンくれと言いに行った。
リゾットを食いつつふと、あれ?クラムチャウダー頼んだよな…?
でも店員、リゾット持ってきた時に番号札持って帰ったよな…。
あれ?注文漏れてたっけ?いや払いが高かったから多分入ってるはず…。
とりあえずレシートを確認する。
002フード550円ってのがある。
多分コレがクラムチャウダーかな。
しばし待つ…っていうかこねーしっ!
いくら忙しそうだからってこれは酷いだろー。
とりあえずクラムチャウダーヨコセと言ってみる。
「あ、すみません今すぐお持ちいたしますー」と帰ってきた。
そして待つ…、リゾット食い終わった…。
そしてまだ来ない。
今すぐお持ちいたしますーって言った店員は皿洗いをしてるようにみえるんだが。
クラムチャウダーって多分鍋でいっぱい作ってあって皿に汲むだけなんじゃないの?
それとも注文毎に作ったり暖めたりとかしないよね?
仕方ないのでもっかい言いに行くと、そいつは怪訝な顔をして「もう少しお待ちください」
…。
そしてやっと出てきたクラムチャウダー。
ところでクラムチャウダーにもスプーンが無いんだが…。
いい加減アレなのでリゾットのスプーンでサクサク食った。
味は美味いんだけどさ。
でもちょっと今日の酷くないか?
忙しそうって言ってもそんなに激忙しそうじゃないぞ?
なんか客が来てるのにカウンターの向こうで店員がお喋りしてるしー。
今の時間、店員は如何にもバイトって感じの人が3人いるだけみたいだ。
しっかりした人がいない模様。
今までここの店、サービスも比較的行き届いてて買ってたんだが
今日のでちょっとショボーン。
次に来てまたコレだったらその次はもう来ないかもしれない(--;
@
ゲーセン:
出発が遅かったのでもう帰る時間
*1
だ。
いつものように太鼓の達人を一発やってかえろっかなーとゲーセンにやってきた。
そしたら小学2、3年生くらいの女の子が1曲目を始めるところだった。
見てたら驚きだ。
この女の子やりこんでるぞこりゃ(w
すげー、うめー(w
2曲終了した後には周りで見てる人が増えてたパチパチパチ。
横で待ってたその子のお母さんは、ちょっと得意げだった(笑い
@
更にゲーセン:
太鼓の達人やってたら7時回ってしまったのでもう鉄腕ダッシュ諦め。
突然タイプザデッドがやりたくなったので、久しぶりに行徳駅前のゲーセンに梯子した。
なにー、暫く見ないうちにゲームが1ゲーム30円になってる!
音ゲーは100円の模様。
でも1ゲームで出来る曲数が少し大目の設定になってるもあったりした。
安く出来るのは嬉しいが、30円にはちょっとびびったぞ(^^;
タイプザデッドてなー。
ヘボン式ローマ字入力とかもナチュラルに対応しててくれるから嬉しいんだが、
仮名入力とローマ字入力が混合で2人プレイできないのが難点なんだよな。
是非入力の混合モードが出来る2を作ってもらいたいもんだ。
で、1クレジット30円なのをイイコトにコンテニューしまくってゲームクリアー(w
ボクシングの体感ゲームはグローブが重くてちと疲れた(^^;
他にもポップン、DDR、ドラマニ、ギターフリークスをやりまくってたらもう10時過ぎてるし(^^;
@
夕飯:
昨日の残りのカレーです。
美味。
*1: 鉄腕ダッシュを見たいので19時には帰るのー。
[天気:雪]
#1
雪コロス
さみーよ。
電車メチャ込みだよ。
電車がすし詰め過ぎで手首が出たまま発車されたのも始めてた。
駅員さんが最後に行った「頑張れっ!!」って言葉が忘れられない。
手首は外の冷風に晒されて凍りつく勢いだった…。
そして図ったかのように僕が降りる駅の開くドアは反対側…。
みんながどやどや降りてゆく背中をドアに挟まれたまま見送ってた。
結局そのまま乗り越して先の駅でやっと降りれて戻ったさ。
#2
[.NET] VS.NET TIPSメモ
@
キーボードショートカット:
- Win, G:定義へ移動
- Win, F:参照へジャンプ
- Ctr+L:一行削除
- Ctr+K, Ctr+C:選択範囲を // でコメントする
- Ctr+K, Ctr+U:選択範囲の // コメントを外す
- Ctr+K, Ctr+\:選択範囲の空白を折りたたむ *1
- Ctr+K, Ctr+F:選択範囲をインデントする
*1: この機能、インデントと一緒によく使うんだがバグ在るんだよー。
パッチねーのか?
全選択して空白折りたたむと最初の using System; が
usingSystem; ってなっちゃうんだよ。
毎回手動で直してるんだがかなり怒る。
#3
[メモ] window.event の座標系プロパティ比較
JavaScript の windows.event はイベントの発生元の情報が入っているオブジェクトだが、
特にクリックで発生したイベントの場合はクリックされた座標を得ることが出来る。
しかし、ここから取得できる座標系は全部で3つもあるのだ。
なので使いたいときに自分が必要なのはどの値だったのか迷わないためのメモ。
- x, y:clientX, clientY のエイリアスのようだ
- clientX, clientY:ページの左上隅を基準にしたページ内座標
- offsetX, offsetY:クリックしたオブジェクトの左上隅を基準にした座標
- screenX, screenY:ブラウザを超えたクライアントマシンのデスクトップ上の座標
確認用に作った
テストページ
を置いておこう。
っていうかこれが全てを物語ってるな(w
#4
[.NET] VS.NET de CVS!!
やっと色々実験して少しは頭の中がまとまったのでメモを残せるぜ。
今回の目標は、まず CVSNT で Windows で CVS pserver を動かして、
そこに WinCVS を使ってアクセスできることを確認した後に、
VS.NET の CVS Add-In である Jalindi Igloo をインストールして、
VS.NET のソース管理で CVS を使うのだー。
そしてあわよくば途中で情報発見した ViewCVS for win も動かしてみるぞ。
さて、ここまでというわけで必要なもの一覧をずらっと並べておこう。
@
必要なもの:
サーバ側
クライアント側
- WinCvs
(GUI な CVS フロントエンド)
- WinCVS ごった煮
(文字コードを上手いことやってくれるもの)
- tcl dll
(WinCVS であると便利らしいが何処にあるのか良く分からんかったので今回は使わない)
- Jalindi Igloo
(VisualStudio で CVS を使うための Add-In)
@
時間切れだ…:
続きは明日書こう。
とりあえず書こうと思ってる項目メモ
- 各ソフトのインストール時及び設定の注意点。
- ハマリどころとその対処法。
- VS.NET で リポジトリを作る。
- VS.NET で CVS からチェックアウトしてプロジェクトを開く。 そして更新してチェックインしてみる。
- WebApplication の CVS からのデプロイ方法。
- Igloo の制限(まだ SCCAPI の制限により CVS の機能で使えないものがある、FEATURE にはあるんだが早く実装希望)
- Igloo が対応している各種 Diff/Merg er を試してみる (Araxis Merge、ExamDiff、Guiffy、WinMerge)。
んで、それぞれの良いとこ悪いとこ、総評。
これイイね。
かなり役に立ちそうなのでメモメモ。
[天気:晴れ]
ご飯、カレー、温野菜サラダ。
カレーはスプーン忘れて困ったが、
味噌汁と同じ要領ですすったら何の問題も無かった。
#2
[.NET] VS.NET + Jalindi Igloo のハマリどころ
面倒いので後で纏める予定。
ソリューションは CVS に入れるな
(K) そーか理解
(K) ソリューションを CVS に追加するとハマルのか
(K) プロジェクト単位でmodule作って
(K) ソリューションに必要なプロジェクトを追加して使うんだが
(K) ソリューションファイルはプロジェクトに固有じゃないので
(K) ソリューションをソース管理に追加するとどれかのモジュールにそのソリューションが入ってしまって
(K) 変なソリューションファイルが入ったモジュールをチェックアウトするとそのままじゃ開けなくなる
(L) うは。なるほど。
ちゅーわけで CVS のモジュールを使うときはまず空のソリューションを開いて、
ファイル@メニュー→ソース管理→ソース管理からプロジェクトを追加
でモジュールを取り出してくれば良いということだな。
これが一番問題が起きなさそうなやり方だ。
単一のプロジェクト(モジュール)を使い場合もこの方法を取った方がよさげ。
懸念事項
(L) ソリューションと含まれるプロジェクト全体を1つのモジュール以下にいれればハマらない?
(K) そうかも?よく分かってない(ぉ
(K) 多分
(K) でもやってみないと謎だ
(K) SCCAPI で VS のソース管理に CVS が隠蔽されちゃってるから
(K) まだ何が起きてるのか把握してないとこがあるからな。
(K) 暇があったら出力ウィンドウをちゃんと見てソース管理での操作が
(K) CVS のどのコマンドに対応してるか見とくか。
(K) ふむ、操作方法をマニュアル化しとかないと面倒なことが起きそうだ。
チェックイン時のコメント
(K) VS.NET のソース管理だとかなり怒る CVS との違いがある。
(K) VSS はチェックアウトが排他的なのに対して CVS は非排他的っていう違いがあるせいか
(K) コメントが引っ張り出す前に書かされてムカツク
*1
(K) そしてチェックインのときにコメントかけない…
*2
(K) かなり怒る
(K) チェックアウト時にこれから修正する予定のコメント書くって考え方理解できない
(K) とりあえず引っ張ってきて、適当に直したら、「○○を直した」ってチェックインしたいだろうと普通思うんだが
(L) なんか変だ。
(K) あ、チェックイン時のコメント書けた
(K) MSDN でチェックインを検索したら出てきた
(K) 同じくサイレントチェックアウトって設定項目も発見
(K) あとはconflict時の挙動調べれば一通り逝けるな
(K) WebApplication のデプロイ方法も分かってきたし
@
チェックアウト手順:
- 空のソリューションを作る(特に WebApplication をチェックアウトする場合)
- ファイル@メニュー→ソース管理→ソース管理からプロジェクトを追加
- CVSROOT、CVS Module を入力し、LocalPath には空のディレクトリを指定する。
- Connect ボタンを押す。
- 同じようなダイアログがまた開くので今度は Create を押す。
- ソリューションファイルを上書きしますか?のようなメッセージが出るので OK を押す。
以上でチェックアウト完了。
次からは今のソリューションファイルを開けばソース管理されている。
*1: サイレントチェックアウトをするように設定すればチェックアウト時にコメント入力を
聞かないように出来る。
設定方法は次の通り。
プロジェクトエクスプローラでチェックイン済みのファイルを選択して、
ファイル@メニュー→ソース管理→チェックアウト
→サイレントチェックアウトをチェックする。
*2: サイレントチェックインな設定になっている為にコメントが書けない。
辞めたい場合は次の手順で設定変更できる。
プロジェクトエクスプローラでチェックアウトされたファイルを選択して、
ファイル@メニュー→ソース管理→チェックイン→サイレントチェックインのチェックを外す。
Web をうろついてたらこんなのを見つけたのでメモ。
選択範囲を #region、#endregion で囲むマクロ。
#region 自体余り使ってないので使うところは少ないかもしれないが、
もし #region をよく使ってソースの見通しを良くしたいって要望がある場合に便利っぽい。
Sub AddRegion()
Dim CloseUndoContext As Boolean = False
If DTE.UndoContext.IsOpen = False Then
CloseUndoContext = True
DTE.UndoContext.Open("DevHawkAddRegionMacro", False)
End If
Try
Dim name As String = InputBox("Enter the region name")
If (name.Trim().Length = 0) Then Exit Sub
Dim sel As TextSelection = DTE.ActiveDocument.Selection
Dim lTop = sel.TopPoint.Line
Dim lBot = sel.BottomPoint.Line
sel.MoveToLineAndOffset(lBot, 1)
sel.EndOfLine()
sel.NewLine()
If DTE.ActiveDocument.Language = "CSharp" Then
sel.Text = "#endregion"
ElseIf DTE.ActiveDocument.Language = "Basic" Then
sel.Text = "#End Region"
Else
Throw New System.Exception("Invalid Language: " & _
DTE.ActiveDocument.Language)
End If
sel.MoveToLineAndOffset(lTop, 1)
sel.StartOfLine()
If DTE.ActiveDocument.Language = "CSharp" Then
sel.Text = "#region " + name.Trim()
ElseIf DTE.ActiveDocument.Language = "Basic" Then
sel.Text = "#Region """ + name.Trim() + """"
Else
Throw New System.Exception("Invalid Language: " & _
DTE.ActiveDocument.Language)
End If
sel.NewLine()
Finally
If CloseUndoContext Then DTE.UndoContext.Close()
End Try
End Sub
[天気:晴れ]
ご飯、味噌汁、卵焼き、温野菜サラダ、シメジと玉葱の炒め物、リンゴ。
卵焼きがかなりいけてた。
全体的に美味かった。
昼過ぎた辺りから暑くなってきた。
暑い…。
#3
[.NEW] WebApplication プロジェクトを wwwroot 以外で使えるようにする
VS.NET で WebApplication プロジェクトを作成するとどうしても
プロジェクト名の WEB 仮想フォルダを C:\Inetpub\wwwroot に作ろうとして、
他の場所にプロジェクトフォルダを移動して開けない。
*1
でだ、今日それについて色々格闘した結果、解が見つかったのでここにメモしておこう。
例として、「http://localhost/WebApp に WebProj という名前の
WebApplication プロジェクトを作る手順」を以下に記す。
- VS.NET の新規プロジェクトの作成で http://localhost/WebProj という名前で プロジェクトを作る。
- 保存して VS.NET を閉じる。
- デフォルトだと "My Documents\Visual Studio Projects\WebProj" 等というところに ソリューションファイルが出来てると思うがこれは要らないのでフォルダごと消してしまおう。
- プロジェクト本体は C:\Inetpub\wwwroot\WebProj に出来ている筈なので、 この中の WebProj.csproj を開く。で、すぐに閉じると
WebProj.sln を保存するかどうか聞かれるのでその場にそのまま保存する。
- WebProj.webinfo をテキストエディタで開き、 "http://localhost/WebProj/WebProj.csproj"
と言う部分を
"http://localhost/WebApp/WebProj.csproj"
に変更して保存して閉じる。
- 同じく WebProj.sln にも "http://localhost/WebProj/WebProj.csproj" という部分があるのでこちらはこれを "WebProj.csproj" に変更して保存して閉じる。
*2
- C:\Inetpub\wwwroot\WebProj をどこか別の場所にコピーする。(例えば C:\WebProj)
- インターネットサービスマネージャを開いて WebProj の仮想ディレクトリを削除する。
- コピーした先のディレクトリを目的の名前(ここでは WebApp とする)で WEB 共有する。 *3
- 以上でプロジェクトの wwwroot からの脱出は完了だ。 後はプロジェクトを開くなり、ソリューションを開くなりして実行すれば、
http://localhost/WebApp/WebForm1.aspx 等でプログラムが実行される筈だ。
結局は <プロジェクト名>.webinf ファイルが重要だということだね。
この中で指定した URL が
このプロジェクトのプロジェクトファイルに対応していれば良いということだ。
@
CVS にチェックインするときの注意:
上記の手順で作った WebApplication プロジェクトを CVS にチェックインする場合に
注意事項を一点発見した。
Igloo でチェックインすると webinfo ファイルがチェックインされないので、
何も無い状態のところにチェックアウトすると正常にプロジェクトが開けない、
という事が起こる。
この為 webinfo ファイルは手動で cvs add してやる必要がある。
*1: 正確じゃないが VS.NET で WebApplication を作ったことがある人なら
何が言いたいか分かるはずだ。
*2: 他のソリューションに WebProj プロジェクトを追加した場合はそのソリューションファイルの
中にはやはり URL でプロジェクトの場所が書かれてしまっているので
URL で記述されている {cs,vb}proj ファイルへの
位置情報をローカルマシン上での相対パスへ変更することでその場で WebApplication
プロジェクトを使うことが出来るようになる。
*3: もしもコレをやっていない場合はプロジェクトの起動時に警告ダイアログが出て、
プロジェクトは開けない。
[天気:晴れ]
ご飯、味噌汁、卵焼き、温野菜サラダ、スイートポテト、マンゴー、みかん。
む、スイートポテトがスイートじゃない!
[天気:晴れ]
#1
飲みすぎたーのーはー
昨夜は木曜日なのに東京事業所の忘年会があって2次会まで良く飲んだ。
家に着いたのは深夜1時半頃だった。
なのに今日は朝9時半から会議の予定だー、寝れねぇ…。
@
備え在れば憂い無し:
帰ったらズボンを脱いでる途中でコタツで寝てしまったらしく、
気が付いたらもう出社時間だ!
目が覚めたのは携帯のアラームがなったお陰。
どうやら先週この会議に出席が決まった時点で、
この事態を予想してか(してないんだが)、
日付時間指定で携帯のアラームをセットしてたらしい。
脱ぎかけのズボンをそのまま履いてダッシュで出勤しましたとさ。
お陰で会議には間に合ったがねみーねみー(^^;
[天気:晴れ]
#1
手袋を買った
外に出たらとても寒かったのでイトーヨーカドーで手袋を買った。
僕は手に汗かく人なので、こまめに選択が出来るように
タクシーの運転手がしてるような白い薄い手袋を早めに何枚か買わないとな。
[天気:晴れ]
メモメモ。
不要なコンピュータが表示されたくない時って確かにたまにあるよね。
本気で隠そうとしてるわけでなくエンドユーザ向けに無用なものは見せないっていう
ケースではこれはアリな選択肢かもね。
#2
コタツと本箱を買った
夕方頃から散歩と買い物を兼ねて外に出かけた。
島忠でコタツと
本箱
を買った。
コタツは2800円とお買い得だった。
本箱も低下は1100円位のところが880円だったので6個買い占めた。
家に帰って暫くボーっとしたら本のでフラグの続きをした。
買ってきた分が埋まったことには、あと10箱くらいは欲しいなぁ…、と思った。
あと、文庫本やハードカバー用のワイドケースも欲しいなぁ。
[天気:晴れ]
#1
スノボー持って電車
月曜の朝からスノボー持って電車乗るのはちと変な気分だったな。
みんなこれから仕事行く格好してるのに、まるで僕だけこれから遊びに行くみたいだ…。
しかし遊びに行くわけじゃなく持ち運んでるだけってあたりが悲しかった。
あー、スノボー行きたいなぁ。
次期国会でこんな法案が出来そうらしい。
IT投資を促進するため、取得価額の合計額が600万円以上のIT機器群については,
取得価額の10%分の法人税を控除する。
中小企業への配慮として、資本金3億円未満の法人については、取得価額の合計額の下限を、ハードについては140万円以上、ソフトについては70万円以上に設定する。
ソフトについても減税対象になるってことは、
お客さんに、「システム開発に1000万円かかるけど10%はIT控除が効きますよ!」とかって
営業できるってことかな。
だとしたらとても良いね。
#3
スノボー来た!!
Yahoo オークションで20kで落札したスノボーセットが届いた。
ハイバックステップインのシューズ、ビンディング、板、板ケースのセット。
靴も思ってたよりずっと綺麗で、刷いてみたら足もピッタシ。
ネジがなめててビンディング外せないとか幾つか欠点があるが、
とりあえず今週末はコレで行ってみよう。
ビンディングのネジについては後日どっか外せそうな専門店とか
ホームセンターとかに持っていってみる予定。
[天気:晴れ]
#1
助っ人キタ!!
25歳女性、VB歴3年、Java歴2年、Java萌えとか言ってる辺りそこそこ使えそう?
C# や .NET もやってみたいと思ってたから来てみたんだそうな。
C# やるには VB や ASP 出来る人よりも
Java 出来る人の方が 100倍 なじみやすいと思うからこれから .NET にも萌えて頂こうか。
#2
[.NET] Image クラス周りのいくつかの TIPS
色々面白いことが出来ることが分かったのでメモメモ。
とりあえず
ImageAttributes クラス
が肝のようだ。
これを色々弄るとほげれるみたい。
@
色空間自由自在:
ColorMatrix クラス
を使うと描画時の色空間を弄れるようになるらしい。
このクラスは 5x5 の行列になっていて左上から RGBAw
*1
となっている。
デフォルトコンストラクタで new した ColorMatrix オブジェクトの状態は
以下のようになっている。
R G B A w
┌ 1 0 0 0 0 ┐
│ 0 1 0 0 0 │
│ 0 0 1 0 0 │
│ 0 0 0 1 0 │
└ 0 0 0 0 1 ┘
独自の ColorMatrix オブジェクトをセットした ImageAttributes オブジェクトを
Graphics#DrawImage で渡してやるとグレースケールで描画したり、
赤を強くしたり、透過させたりといったことが簡単に出来るようになる。
簡単な例を以下に挙げる。
グレースケールにする
┌ 1/3 1/3 1/3 0 0 ┐
│ 1/3 1/3 1/3 0 0 │
│ 1/3 1/3 1/3 0 0 │
│ 0 0 0 1 0 │
└ 0 0 0 0 1 ┘
赤だけ取り出す
┌ 1 0 0 0 0 ┐
│ 0 0 0 0 0 │
│ 0 0 0 0 0 │
│ 0 0 0 1 0 │
└ 0 0 0 0 1 ┘
MSDNの「
色の変更
」が参考になる。
適当な PictureBox の Paint イベントでの例でサンプルコードを書いておく。
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
PictureBox pictureBox = (PictureBox)sender;
if(pictureBox.Image == null) {
return;
}
float[][] grayMatrix = new float[][]{
new float[]{1/3f,1/3f,1/3f,0,0},
new float[]{1/3f,1/3f,1/3f,0,0},
new float[]{1/3f,1/3f,1/3f,0,0},
new float[]{0,0,0,1,0},
new float[]{0,0,0,0,1}
};
ColorMatrix grayColorMatrix = new ColorMatrix(grayMatrix);
ImageAttributes grayImageAttributes = new ImageAttributes();
grayImageAttributes.SetColorMatrix(
grayColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
e.Graphics.DrawImage(
pictureBox.Image,
pictureBox.ClientRectangle,
0, 0, pictureBox.Width, pictureBox.Height,
GraphicsUnit.Pixel, grayImageAttributes);
}
これで PictureBox がグレースケールで描画されるようになる。
@
色の交換:
ColorMap クラス
を弄ることで既存の変換後の色と新しい色のマッピングを変更できるようになる。
例えば以下のようにすると白と黒が入れ替わって描画される。
ColorMap[] mapWhite2Black = new ColorMap[1];
swapWhite2Black[0].OldColor = Color.White;
swapWhite2Black[0].NewColor = Color.Black;
swapWhite2Black[1].OldColor = Color.Black;
swapWhite2Black[1].NewColor = Color.White;
ImageAttributes imageAttr = new ImageAttributes();
imageAttr.SetRemapTable(swapWhiteAndBlack);
g.DrawImage(image
, new Rectangle(0, 0, image.Widthm image.Height)
, GraphicsUnit.Pixel, imageAttr);
@
Control から Bitmap を取得する:
Control のキャプチャがしたくて散々調べた結果 Win32API を使わなければいけないようだ。
*2
ということが分かったのでやり方をここに記しておく。
まず今回の用に足る部分だけの Win32API を利用する為のクラスを以下のように作っておいて、
using System;
using System.Runtime.InteropServices;
class USER32
{
[DllImport("user32.dll")]
public static extern IntPtr GetWindowDC(IntPtr ptr);
[DllImport("user32.dll")]
public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDc);
}
class GDI32
{
public const int SRCCOPY = 0xCC0020;
[DllImport("gdi32.dll")]
public static extern bool BitBlt(
IntPtr hdcDest,
int xDest,
int yDest,
int width,
int height,
IntPtr hdcSrc,
int xSrc,
int ySrc,
System.Int32 rasterOp
);
}
Crontrol から Bitmap を取得する為のメソッドを
以下のように作ってやればコントロールのキャプチャが出来る。
public static Bitmap CreateBitmapFromControl(Control control)
{
Bitmap bmp = new Bitmap(control.Width, control.Height);
Graphics g = Graphics.FromImage(bmp);
IntPtr srcHDC = USER32.GetWindowDC(control.Handle);
IntPtr destHDC = g.GetHdc();
GDI32.BitBlt(destHDC, 0, 0, control.Width, control.Height
, srcHDC, 0, 0, GDI32.SRCCOPY);
g.ReleaseHdc(destHDC);
USER32.ReleaseDC(control.Handle, srcHDC);
return bmp;
}
同じ要領で Control のウィンドウハンドルを取得している部分を
デスクトップのハンドルにしてやればデスクトップのスクリーンキャプチャも実現できる。
*3
むっ!
ここまで書いたら Graphics クラスから Bitmap を取り出す方法も思いついたので書いとく。
public static Bitmap CreateBitmapFromGraphics(Graphics g, Rectangle clipRect)
{
Bitmap bmp = new Bitmap(clipRect.Width, clipRect.Height);
Graphics g2 = Graphics.FromImage(bmp);
IntPtr srcHDC = g.GetHdc();
IntPtr destHDC = g2.GetHdc();
GDI32.BitBlt(destHDC, 0, 0, clipRect.Width, clipRect.Height
, srcHDC, clipRect.X, clipRect.Y, GDI32.SRCCOPY);
g2.ReleaseHdc(destHDC);
g.ReleaseHdc(srcHDC);
return bmp;
}
*1: w は常に1
*2: Graphics#FromImage みたいに Graphics から Image を取得するような
メソッドを探したんだが結局徒労に終わった。
まぁ、Graphics クラス自体、内部に固定の描画フィールドがあるわけじゃなく
空間に描画するようなイメージのクラスだからちと違うような気はした。
*3: デスクトップのウィンドウハンドルの取得の仕方については過去日記の
フォームの外に描画する
で既に書いたのでこれを参考にすれば簡単な筈。
#3
[.NET] キーボードやマウス他、なんでもフック
IMessageFilter
インターフェースを実装すればウィンドウズから送られてくるメッセージが
コントロールに渡る前にフックすることが出来る。
リモートコントロールソフト作る為の布石になりそうなのでメモ。
前にノートPCに IIS より先に .NET Framework 入れてしまって、
ASP.NET が使えなくて結局、Visual Studio .NET、.NET Framework、IIS を
全部アンインストールして順番通りにインストールし直した思い出が…。
あのときこれを知っていれば無駄に1日消費しなかったのにな。
[天気:晴れ]
#1
[.NET] セキュリティ ポリシーの設定
.NET では通常 ActiveX コントロールからローカルの資源に
アクセス出来ないようになっているが、
都合によりアクセスしたいというときもあるので、
それを実現する為の方法を書いておく。
.NET のセキュリティポリシーを変更するツールはとしては、
Mscorcfg.msc という GUI で操作するツールと、
caspol.exe というコマンドラインで操作するツールが .NET Framework には含まれている。
では、これを使って特定のアセンブリ
*1
に何かの許可を与えてみることにする。
caspol -machine -addgroup 1. -url http://localhost/trust.dll FullTrust -n test
試しに上記のようなコマンドを実行すると、
http://localhost/FullTrust.dll に対して FullTrust(何でもアリ)の許可を与えることになる。
ちょい今時間が無いので、このコマンドのオプションの詳細は今書けないが
MSDN を調べれば何とか分かると思う。
Mscorcfg.msc を実行してみてツリーの様子を見てみれば先のコマンドで
どういうことが起こったのかがなんとなく想像できると思うので、
まずは Mscorcfg.msc を見つつ、さっきのコマンドのオプションと見比べるのが
.NET のセキュリティーポリシーの理解への近道だと思う。
*1: アセンブリとは MS 用語で MSIL 形式のバイナリファイルのことを意味する。
[天気:曇り]
ご飯、味噌汁、卵焼き、鶏肉とにんにくの芽とチンゲン菜の炒め物、温野菜サラダ。
相変わらず卵焼きウマ。
[天気:晴れ]
#1
新人忘年会
昨夜、会社の同期で忘年会兼お別れ会(一人辞めた)がありました。
場所は横浜時間は20時からと色々中途半端ではあったけど、
とりあえず幹事さんはお疲れ様でした。
辞めてく人もご苦労様でした、実家の方で客商売頑張ってください(笑
楽しい呑みでした。
ところで藤沢よりはマシだけどやっぱし横浜も遠いなぁ。
ねむねむ…。
#3
[Windows] WEB 仮想ディレクトリをプログラムで設定する方法
ADSI
というのがキーワードのようである。
コレさえ分かってしまえば後は検索かければすぐ見つかる。
[天気:晴れ]
#1
全社ミーティング
1年の会計報告や来年の会社の計画等々を長々と聞いたあとに、
クリスマスパーティがあった。
部署対抗ゲーム大会では『機敏な人』というのに出場させられた。
何かと思ったら万歩計つけてカシャカシャその場ダッシュ!!
もーやばかった、吐きそうになったくらい頑張ったのに万歩計反応してねーし(--;
お陰さまでそのあとも気持ち悪くて折角の料理が食べれなかった…。
[天気:晴れ]
ねむ
[天気:晴れ]
ランタイム
、
MSDN
。
数週間前に .NET で DirectShow を使う方法を苦労して探してたっちゅーのに、
突然 DirectX9 ですよ。
早速 MSDN 見に行ったら .NET マネージドコードが完全サポートされてる上に
C++ のサンプルと 1対1 でちゃんと C# のサンプルもあるし!!
かなりイイ。
こりゃやる気出るなー。
[天気:曇り]
Yahoo がまた面白いこと始めるようだ。
最近は銀行もネットで利用することが多くなってきたが口座が複数になってくると管理が
面倒になる。
そこで一つの窓口で銀行口座やクレジットカードのネット利用を管理してしまおう。
という計画らしいのだが…。
便利そうだがとても危険な香りがする感じ(^^;
しかーし、そうは言ってても使ってみないで批判するのもなんなので、
試しに使ってみようベンチを決行してみるとする(ぉ
@
ActiveX がダウンロードされた:
とりあえず先に進むとなんかエラーになった。
ActiveX のダウンロードを無効にしてあるのでこれかな?と思い、
有効にしたら「MoneyLook のインストーラ」なるものをダウンロードし始めた。
@
ショボーン:
インストールが終わったら早速起動して、自分の YahooID で登録してみた。
銀行の追加、と…。
ガーン、僕がネットで使ってる新生銀行と千葉銀行がリストに無いし!!
終〜了〜(--;
チェックリストに加えると良い。
無くなるとあれなので
ミラー
しとこ。
[天気:晴れ]
#1
今日もぼちぼち仕事した
もう帰るー。
#2
ゲーセンwithれーれー
れーれーが30円タイプザデッドをやりに行徳まで来るらしい。
ごち(違
[天気:晴れ]
.NET じゃ無いけど使えそうなコードなのでメモ。
keybd_event っていう API でメッセージ発行してるだけだが、
知識ゼロからだと参考になる。
Win32 API 関数リスト、構造体リスト、
ウィンドウメッセージリスト、通知メッセージリストは参考になる。
[天気:晴れ]
#1
[メモ] IIS の仮想フォルダを作る方法
Dim DirName '仮想フォルダ名
Dim DirPath '実フォルダパス
Dim IISObject
Dim vDir
DirName = "WebApp"
DirPath = "C:\WebApp"
Set IISObject = GetObject("IIS://LocalHost/W3SVC/1/Root")
Set vDir = IISObject.Create("IISWebVirtualDir", DirName)
vDir.Path = DirPath
vDir.SetInfo
こんな感じで作れるみたい。
GetObject に渡してる文字列とかプロパティの詳細とかなんてしらねー、
これ以上詳しい情報欲しけりゃ調べろ(ぉ
#2
Bフレッツキタ!!
ニューファミリー100Mbps、ISP は
ASAHI-NET
。
早速速度チェック。
5、6箇所試してみたところサイトによって誤差はあるが大体 25Mbps くらいは出てるようだ。
上りも計測したところやはり 25〜30Mbps くらい出た。
イイ感じ(ぉ
[天気:晴れ]
寝つつ片付けつつ…。
ぐーたら。
東京発こだま487号、掛川までの新幹線終電で帰った。
今年は休みが早いので帰省ラッシュが3日に分散されてあまり混雑してなかったようだ。
@
差別?:
ところでやっぱしこだまは差別されてる気がしたよ。
21:33東京発なんだが弁当屋が21:18で閉まるんだよ。
なんでそんな変な時間かと思ったらこだまの前にホームに止まってる
のぞみの発射時刻なのねぇ…。
あと15分くらい待ってくれYO!!
[天気:晴れ]
#1
[実家] チビ犬x4
朝起きたら外からキューキュー鳴き声がするので見てみたら、
まるの忘れ形見の4匹の子犬が鳴いてた。
生後3週間らしいけどもう目は開いてるし、ミルク以外も飲むようになってるのね。
静岡は暖かくて良い所だ。
生きろ。
[天気:晴れ]
#1
[メモ] 共有ドキュメントを隠す方法
Windows XP ではエクスプローラのマイコンピュータを開くと「共有ドキュメント」と
「○○
*1
の共有ドキュメント」というフォルダショートカットが出来ている。
しかもこれは通常の操作では消すことが出来ないので非常にウザい。
これはレジストリを弄ることで隠すことが出来る。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
キーに新規で NoSharedDocuments という DWORD 値を作成して、その値を 1 とすろ。
その後エクスプローラを再起動すれば
*2
無くなってる筈だ。
エクスプローラだけ再起動するのが難しい人は OS を再起動すればよい。
簡単に設定できるように
レジストリファイル
にエクスポートしておいた。
*1: ログインユーザ名
*2: タスクモニタで完全に全ての explorer.exe を殺して、
新しいプロセスで explorer を実行しなおせばよい。