2009年12月26日土曜日

  • スキルはかけた時間の分しか身につかない

効率化?作業は効率化できるが、「考える時間」は効率化できない。
あなたにないスキルがその人にあると言うことは、その分野でその人が時間をかけて努力したからに他ならない。

  • すべてのことはトレードオフ

新しい技術とか、新しい開発手法とかで、今までの悩みがすべて解決し、万事うまくいく。
とかいう記事とかうたい文句は信じない。まず疑いの目を持ってみよう。

2009年12月22日火曜日

ADO.NET Entity Framework Sample Provider

以前より、Linqを利用しMDBファイルにアクセスする方法をもさくしている。

いろいろ検索しているうちに、ADO.NET Entity Frameworkにて、独自のProviderを実装する方法を紹介しているページを発見。
http://blogs.msdn.com/adonet/archive/2007/03/16/ado-net-orcas-sample-provider.aspx
#だが英語

MSDNのCode Gallery内で、サンプルとOracle版は公開されているようだ。
http://code.msdn.microsoft.com/EFSampleProvider
http://code.msdn.microsoft.com/EFOracleProvider
これを参考にOleDBをWrappeingするProviderを作ればいいのか?
誰か作っててもいいのに…

2009年12月21日月曜日

Linq to SQL

世間では.NET4.0がリリースされようとしている昨今。今更ながらLinq to SQL の勉強です。
Linq to SQLは、ADO.NET Entity Frameworkに取って代わられるとか言われてますが、気にしない。

(参考リンク)
http://msdn.microsoft.com/ja-jp/library/bb425822.aspx

上記ページでどうしても納得いかない箇所が…。DataContextにTable<T>を定義して、それに対してLinqでクエリを投げている箇所。

public partial class Northwind : DataContext
{
public Table<Customer> Customers;
public Table<Order> Orders;
public Northwind(string connection): base(connection) {}
}
Northwind db = new Northwind("c:\\northwind\\northwnd.mdf");
var q =
from c in db.Customers
where c.City == "London"
select c;
foreach (var cust in q)
Console.WriteLine("id = {0}, City = {1}",cust.CustomerID, cust.City);

DataContextにTable<Customer>をフィールドとして定義しているだけで、いつの間にか値が代入されている。おそらく、コンストラクタ内でリフレクションを使用して代入しているのだろうが、わかりにくい。

2009年12月20日日曜日

本を買った

久しぶりに技術書をまとめ買い。

  • More Joel on Software
  • More Effective C#

どちらも、「More」じゃない方は持ってないのだが・・・

  • プロダクティブ・プログラマ -プログラマのための生産性向上術
  • アート・オブ・アジャイル デベロップメント ―組織を成功に導くエクストリームプログラミング

感想はまたの機会に。

2009年12月19日土曜日

Windows7のショートカット

Windows7を使い始めて、もう何ヶ月もたった今日、今更ながら多くのショートカットが追加されていることに気づきました。

その中で、便利と感じたものをいくつか紹介します。。

  • Windows + 数字キー(1-0)

タスクバーに含まれるショートカットプログラムを起動。左から1,2,3…と割り振られています。

image

#実は、Vistaでもできたらしい。

  • Windows + +,-キー

拡大鏡による、拡大縮小が行われます。+が拡大、-が縮小です。

image

  • Windows + ↑→↓←キー

↑は、最大化。↓は最小化。→は右半分に配置。←は左半分に配置。

  • Windows + Shift + ↑キー

縦方向にのみ最大化

 

(参照)

2009年9月23日水曜日

Silverlightを試す

前々からずっと気になっていたんですが、なかなか試す機会がなかったで連休を利用してチャレンジです。

用意したもの

始める

VisualStudio1
上記をインストールすると、VisualStudioにSilverlight用のプロジェクトテンプレートが追加されていました。
とりあえず、Silverlightナビゲーションアプリケーションを選択(サンプルプロジェクトぽかったので)。

Dialog
するとダイアログが出てきて、何かを尋ねます。意味がわかってないので、デフォルトで。

IE
作成されたプロジェクトを、そのまま実行した結果。をを、うごいてますな。

Blend
画面レイアウトはBlendで編集するとのことなので、先ほどVisualStudioで作成されたプロジェクトをBlendで開いてみる。
そうすると、なぜがMainPage.xamlがエラーをはいています。なぜ?

キャプチャ
原因は、XAMLに書かれた日本語が文字化けして、"(ダブルクォーテーション)が消えてることでした。
文字コードが違うみたい。どこかで文字コードを設定する箇所があるのでしょうか?

で、ここで詰まってます。先は長い。

(追記)

image 
Blend上でファイルを右クリック→外部で編集。メモ帳でファイルが開くので、そのまま上書き保存。

image
そうすると、Blend側で上記ダイアログが表示され、ファイルの再読み込みを促される。
はいをクリックすると、エラーが解決する。一度解決したファイルは次からは正しく表示される。
XAMLファイルの数だけ上書き作業を行うとOK?なのかも。

なぜでしょうね。

2009年9月19日土曜日

フィボナッチ数列

Linqから使用しやすい数列を作成する勉強第1弾。
今更ながらなLinqなのですが、.NET Framework3.5はまだ仕事で使えない(※)ので、まだまだ詳しくありません。
ちょっとずつ勉強予定です。

public static IEnumerable<decimal> Fibonacci()
{
    decimal previous = 0M;
    decimal current = 1M;
    while (true)
    {
        yield return current;
        current += previous;
        previous = current - previous;
    }
}

として、

var fs = from f in EnumerableUtil.Fibonacci()
        where f % 3 == 0
        select f;
    foreach (var item in fs)
    {
        Console.WriteLine(item);
    }

こんな感じかね。

※Windows2000上で、.NET Framework3.5が動かないからなぁ。

2009年9月13日日曜日

MCP キャリアアップ キャンペーン

http://www.microsoft.com/japan/learning/certoffer/default.mspx

MCPの受験料が割引になるキャンペーンが行われています。最大25%引き。
適用を受けるためには、試験の申し込みの前営業日までにキャンペーンに申し込みしていないといけないっぽい。

リバースエンジニアリングチャレンジ 2009

2009年9月19日(土)~9月22日(火)に、リバースエンジニアリングのイベントがあるそうです。

http://www.netagent.co.jp/reverse_engineering_2009.html

どのような出題がなされるか非常に興味があります。

VHDブートのエクスペリエンスインデックス

VHDブートの場合、エクスペリエンスインデックスの計測はできないですね。

無題

ディスク以外は測定していましたが、ディスクの計測でこけるため、結果の表示はされませんでした。
ディスク以外の結果だけでも表示してくれればいいのに・・・

2009年9月9日水曜日

VHDブート

今回はVHDブートを試してみました。目標は、現在のWindows7(x64)環境にWindowsServer2008R2のブートを追加することです。

調べたところVHDブートを実現するためには2つの方法があるようで、
1つ目は、VirtualPC等でOSをインストールしたVHDファイルをBCDEditコマンドを使用してブート可能にする方法。
2つ目は、インストールディスクから起動しアタッチされたVHDファイルをインストール先として指定する方法。

今回利用したのは2番目の方法。Windows2008R2はx64のみの提供なので、VirtualPCではVHDファイルにインストールすることができないためです。手順は↓を参照して行いました。詳しい手順はリンク先を参照してください。
http://www.computerworld.jp/topics/win7/151249-6.html

簡単にまとめると、

  1. diskpartコマンドを利用しVHDファイルを作成する
    #このタイミングで作成する必要はなく、事前にVHDファイルを作成しておけばOKです。
  2. 同じくdiskpartコマンドを利用しVHDファイルをアタッチする
  3. アタッチしたVHDにOSをインストールする

拍子抜けするぐらい簡単です。でも、一ヶ所はまりました。
3.の行程でインストール先を選択した場合に、次のような警告が出ました。
#BIOSの設定次第では出ないこともあるのでしょうが・・・

このディスクにWindowsをインストールすることはできません。このコンピューターのハードウェアでは、このディスクでの起動がサポートされていない可能性があります。コンピューターのBIOSメニューでこのディスクのコントローラが有効になっていることを確認してください。

結局、警告を無視して次へ進めば問題なくインストール可能だったのですが、BIOSを見直ししたり、ドライバを捜してみたりと、無駄に時間を消費してしまった。

image

インストールが完了した、WindowsServer2008R2です。CドライブがVHDになっているのがわかります。
#でもHyper-Vとかでも一緒だったりしないのか?

2009年9月8日火曜日

XPモード

Windows7の目玉(?)機能の一つがXPモードだと思っているんですが、どうもまだRCしかダウンロードできないっぽい。
残念。

http://www.microsoft.com/windows/virtual-pc/

2009年9月5日土曜日

VHDマウント

Windows7では、VHD(Virtual Hard Disk)がそのままドライブとしてマウントできるという噂を、かねがね耳にしていたので、試してみました。

対象のメニューは、[コンピュータの管理]→[記憶領域-ディスクの管理]→[操作(A)-VHDの作成]です。
image

該当メニューを選択すると、VHDの作成ウィザードが開くので、VHDの保存場所と容量、タイプを選択します。
image 
#差分ディスクはないんですね。たしかに用途は思いつかないですけど。

後は物理ディスクと同じでボリュームの作成→フォーマットと行うと通常のドライブと同じように認識されます。
image
#ドライブのアイコンは青いんですね。

あと、既存のVHDのマウントは[操作(A)-VHDの接続]から、マウントの解除はVHDのディスクを右クリックし[VHDの切断]から行えるようです。

#おまけ#
CrystalDiskMarkを使用し、アクセス速度を比較してみました。

まずは、物理HDDから。ちなみに、ST32000542ASです。
image

で、その物理HDD上のVHD。(固定ディスク10Gで作成)
image 
物理HDDとほぼ遜色のないスピードで驚きです。

2009年9月2日水曜日

32bitのVisual Studioが64bitプロセスをデバッグできること

VisualStudio2008は32ビット版しか提供されていません。
でも、.NETFrameworkは64ビットネイティブで動作するプログラムを作成することができます。

ってことは、32ビット版アプリで64ビット版アプリのコンパイル&デバッグができるってこと?
とおもい、64bit環境でVisualStudioを起動してみました。(下図はタスクマネージャのキャプチャ)

image

やっぱり、VisualStudioは32bit、作成中のアプリは64bitで動作してますね。
自分はこの状態を非常に不思議に思うのですが、そんなことはないのでしょうか?
#64bitの方が扱えるメモリ空間も広いし、普通に考えたら32bitアプリからはすべてを制御できないような気がするんですよ。

Intel SSD の威力

プライマリハードディスクのインデックスが満点になりました。
image

Intelの34nmSSD(SSDSA2MH080G2C1)をRAID0でくみました。
AKIBA WATCHによると、SSD×4のRAID0でも満点はいかなかったそうなので、Intelのすごさを実感です。
#でもそこに体感できる違いはない。きっと。

(リード1,402MB/s達成、“改造バカ”流Windows 7自作術を披露)
http://akiba-pc.watch.impress.co.jp/hotline/20090829/etc_msev2.html

2009年8月31日月曜日

オンラインカレンダーの同期

Windows Live カレンダーと、Google カレンダーを同期したいのですが、何かよいサービスorツールはないものでしょうか?

#あまりそういうニーズもないんですかね。

2009年8月30日日曜日

[Windows 7]新規フォルダの作成

昨日からWindows7を使用していて、何気に便利だったのが、新規フォルダの作成にまつわる手順。

Explorerで、新規フォルダを作成する際に、上部に「新しいフォルダー」を作成のボタンが追加されています。
image

そのほか、Ctrl+Shift+Nのショートカットでも、新規フォルダ作成ができます。(便利)

なお、旧OSでよく使用していた、Alt→F→W→Fは、ファイルメニュー→新規作成のキー割り当てが、
WからXに変更になったため、要注意です。

2009年8月28日金曜日

Code7

Windows7上で動作するアプリケーションのコンテストが開催されています。
何かよいアイデアがあれば応募したいのですが、特に何もありません。
#最近特に発想が貧困で困ります。前から?

それはさておき、応募条件に以下の条件があります。

次のテクノロジーのいずれかを使用していること
  • ライブラリ
  • Windows Touch
  • シェルの統合 (Shell Integration)
  • DirectX 11
  • センサー API

うん、どのテクノロジーもわかんね。
きっと、Windows7からの新機能なんだろうね。

myLGNetって?

HOTSPOTの無料キャンペーンにあやかって、アクセスポイントを探し街をさまよっていたときの話です。

気がついたら、viliv S5がHOTSPOTではないアクセスポイントでインターネット接続をしていました。

SSID:myLGNet(セキュリティーで保護されたアクセスポイント)

とくに無線の設定をしたわけでもないのに、セキュリティーで保護されたアクセスポイントに接続できているのが不思議で、ググってみました。そしたら、ハングルのページばかりが引っかかります。(いや、想像できたけどね)

想像するに韓国の公衆無線LANっぽい。ってことは、日本にもアクセスポイントがあるってことか?
viliv S5は韓国製だから初期設定に組み込まれているのか?で、勝手につないでいいものなのか?

謎です。

ホットスポット無料

自分が契約していたプロバイダで、ホットスポットの無料キャンペーンを行っていた。
http://www.plala.or.jp/guest/mobile/hot/

というわけでしばらく使ってみる。

--
AirH゛では、地下鉄線内で圏外になっても接続は維持されていたので、駅に到着するとすぐに使えるようになったが、
ホットスポットでは、いちいち切断されるので、駅に到着してもアクセスポイント発見しIPアドレスが振られる頃には出発していて使えないことが多い。

何とかならないものかな...

2009年8月27日木曜日

通信手段を考える

viliv S5を入手してからは、通信手段を色々検討しています。

#折角のMID(Mobile Internet Device)なのにネットにつながらないともったいない。
#一応、現在もWillcomのAirH゛を所有してはいるものの、今時64kbpsじゃちょっとね。

前提

  • 主に使用するのは、会社への通勤
    • 一応、都内への通勤なので選択しは豊富
    • × 2路線を乗り継ぎ、通勤経路の半分は地下鉄

候補

公衆無線LANは、3社を検討。でも通信範囲が高速モバイル通信に比べると狭いのが難点。
通勤は2路線を使用しているが、地下部分をホットスポット+ MZone が、地上部分をMZone+フレッツ・スポットがカバーしているので、自ずとこの3社になる。MZoneが全てどちらもカバーしているのでリード。

対して、高速モバイル通信は4社検討。他にも色々ありそうですが、とりあえず、今まで検討にあがったのは4つ。
対応エリアの狭さから、UQ WIMAXはアウトかな。自宅もまだ対象外。(家じゃつながないけどね)
定番はe-mobileだとは思うのですが、最近速度低下等の噂を聞きます。あと、地下への対応もまだまだこれからっぽい。
あとは、FOAM網を利用したdocomoの定額とWillcom core 3G。これは地下でもつながるらしい。回線を借りているWillcomの方が若干安いのが謎と言えば謎。willcomは現在使用中なので、まとめて安くなったりしないかな?

高速モバイル通信は大概1000円台~6000円台ぐらいのダブル定額の形態をとっているので、月額1000円台の公衆無線LANを組み合わせることで支払総額を下げることができる可能性があるのも味噌。MZone+docomoデータ定額ならセットの割引もあるっぽい。

話は変わるが、クティオも非常に興味深い。S5にUSB経由でデータ通信端末を接続するのはいまいちなので、こういった端末を鞄に忍ばせておければかなりいい感じ。となると、e-mobileか?そういや、docomoにも対応したんだっけ...

どうしよっかな。

2009年8月23日日曜日

MACアドレスを調べる

通常、WIndowsでMACアドレスを調べる場合、コマンドプロンプト上で
ipconfig /Allを実行します。

しかし、viliv S5では初期状態で、上記コマンドが通りませんでした。
我が家では、無線LANポイントにMACアドレスフィルタリングを行っているため、MACアドレスがわからないとネットワークに接続することができません。結局、アクセスポイント側でフィルタリングを一時的に解除したうえで、アクセスポイントのDHCP機能のリリース済みIPアドレステーブルを参照することで、ネットワーク接続できました。

#その後、とりあえずググってみました。
どうやら、Pathが通っていないことが原因だったようです。↓
http://zakkiteki.blog51.fc2.com/tb.php/48-a30aaa00

パソコン新規自作

週末を利用して、デスクトップを一台くみました。
あまり時間がなかったので、とりあえず動くようにしただけですが...

とりあえず、Windows7(x64)をセットアップしたので、パフォーマンス測定を行ってみました。

パフォーマンス 

ビデオボードとか特にドライバを入れてなくてもこのスコアが出ているのだが、入れなくても大丈夫ということなのだろうか?
(そもそもWindows7用のドライバなんて提供されていないが...)

2009年8月22日土曜日

GlobalITCert

各種IT系資格試験の模擬問題集を販売しているGlobalITCertというサイトがあります。
#ググればいくらでも引っかかりますので、

一ヶ月ほど前、私はこのサイトで試験(70-553)の日本語版を購入しました。 しかし、現在もその商品は提供されていません。

私が購入したのは、日本語版なのですが、日本語版は更新中なので、更新が終了するまで無料で英語版をあげるから使ってくれという返信がありました。

2009/7/20
The product you have just ordered is in update process. The Japanese
version will be available as long as we finished the update process. Thus
we offer you the English version totally for free in return. Please use
the English version first. We will send you the Japanese version as soon
as possible. Thank you for your patience and understanding.

その後、updateはいつ終わるのか?と質問した結果。一週間程度で終わるという返答を得ました。

2009/7/23
We will send the 70-553 exam to you within on week.

で、それ以降のやりとり。ひたすら終了予定を訪ねています。

2009/7/30
This exam is being updated. Do you need other exams? We can offer you 2
exam for free.

2009/8/4
We only provide English free exams to our customers. But If you only
choice one exam. We can offer you Japanese exam for free. We just updated
70-646 exam. If you need, we will send it to you.

今後、終了予定日は一切聞けなくなる代わりに、ほかの試験をあげるよ。という返信になります。基本は英語ですが、日本語版がもらえることもありました。印象としては、受験人口が多そうな試験は日本版も用意しているが、日本語版が準備されている試験はそれほど多くない感じです。

#このやりとりを何度も繰り返していると、結構な数の試験が無料でもらえたりするのかもしれません。

で、一ヶ月を過ぎた今日この頃。さすがにこれ以上待てないので、PayPalに異議申し立てをしてみました。今後どうなるか?


-----追記(8/23)
結果返金されました。
#最後まで、ほかの試験をただで提供するから。というメッセージがきましたが...

2009年8月21日金曜日

viliv S5

ポチッとしてから、早1ヶ月。ようやく、出荷されたらしい。
早く届かないかな。

http://www.brule.co.jp/umpc/viliv.shtml

#てか久しぶりの投稿。

2009年3月30日月曜日

ThreadStaticAttribute

(MSDNより)
http://msdn.microsoft.com/ja-jp/library/system.threadstaticattribute.aspx
ThreadStaticAttribute でマークした static フィールドは、複数のスレッド間で共有されません。実行中の各スレッドは、そのフィールドのインスタンスを個別に持ち、そのフィールドに対して独自に値を設定および取得します。このフィールドに別のスレッドからアクセスすると、フィールドには別の値が格納されます。
スレッドごとにフィールドの値を別々に保持したかったので、ThreadStatic属性を非staticフィールドに付けて、うまくいかないなぁ。と悩んでました。ThreadStaticなのでstaticだけですよね。
ところで、非staticフィールドをThread間で共有したくない場合はどうするのが一般的なんでしょう。
[ThreadStatic]
private static Dictionary<TKey, TValue> _data
とりあえず、オブジェクトごとに一意のKeyを作成して、ThreadStaticなDictionaryに値を保存するように変更してみました。動いてはいるようです...

2009年2月24日火曜日

Array.ForEachで書き換え

ちょっと期待したけど、やっぱりできませんでした。理屈は分かるんだけどね。

T[] array = new T[count];

for (int i = 0; i < array.length; i++)
{
array[i] = new T();
}

↓

Array.ForEach(array, delegate(T t){ t = new T();});

VS ImageLibrary

すごく今更なのだが、Visual Studioにアイコンセットが含まれているのを知った。もっと早く知っていれば...

[VisualStudio2005]
C:\Program Files\Microsoft Visual Studio 8\Common7\VS2005ImageLibrary

[VisualStudio2008]
C:\Program Files\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary

2009年2月19日木曜日

メソッドスコープの型パラメータとコンストラクタ

class Super { }
class Sub : Super { }
上記の様に、クラスに継承関係がある場合、以下のようなメソッド呼び出しを行ってもエラーとなりません。
#オブジェクト指向の基本です。
public static void Hoge(Super super) { }

public static void Main(string[] args)
{
Hoge(new Sub());
}
ただ、Genericが絡んでくるとうまくいかない場合があります。例えば、以下の例はコンパイルエラーとなります。
#Javaなら大丈夫らしいですが...
public static void Hoge(List<Super> list) { }

public static void Main(string[] args)
{
Hoge(new List<Sub>());
}
でも、List<Super>もList<Sub>も同じように処理したいことはあります。そんなときは↓の様に書くことになると思います。
public static void Hoge<T>(List<T> list) where T : Super { }
で、今日同じことをコンストラクタでやろうとしてつまづきました。↓って書けないんですね。
public Hoge<T>(List<T> list) where T : Super { }
仕方がないので、コンストラクタをprivateにして、CreateInstanceメソッドを使って初期化したんですが、一般的なやり方なのでしょうか?
public static Hoge CreateInstance<T>(List<T> list) where T : Super

2009年2月18日水曜日

Windows Updateにより、VB6コントロールが使えなくなる

Windows UpdateでMSHFlexGridが使用できなくなった。という話を見かけた。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=48226&forum=7

ActiveX の Kill Bit 更新プログラムのロールアップが原因らしい。
http://www.microsoft.com/japan/technet/security/advisory/960715.mspx

VBと完全に手を切りたい今日この頃、Microsoftも少しずつVB6の動かない環境を整備しているように感じた。

Windows 2003 Server(x64)のバックアップエラー

Windows 2003 Server x64 SP1 R2のバックアップが失敗していた。

気付いたのは今日だが、過去のバックアップ履歴をみたところ昨日からっぽい。
バックアップファイルが2KBになっていたため"たまたま"気付いたのだが、タスクの終了コードは0となっており、一見成功っぽく見えるのでたちが悪い。
※イベントログにはNTBackupのエラーが記録されていたが、こっちは監視していなかった...

バックアップのレポートには、

ボリューム シャドウ コピー作成: 試行 1
処理が完了する前にタイムアウトしました

ボリューム シャドウ コピー 0xffffffff の作成中にエラーが戻されました。

ボリュームのシャドウ コピーの作成中にエラーが返されました:ffffffff
バックアップを中止しています。

となっており、シャドウコピーが失敗したらしいことが分かる。エラーメッセージを元に、ググってみたところ、似たような症状を訴えている方が見つかった。
http://odenkan.blog71.fc2.com/blog-entry-10.html

サーバで使用しているSQLServerは2005だし、別タスクで行っている同じドライブのボリュームシャドウコピーは問題なく作成されている。おかしな話だ。

原因はよく分からないまま時期的なものから、WindowsUpdateを疑ってみる。すると、2/12付でSQL Server 2005 Service Pack 2 のセキュリティ更新プログラム (KB960089)がインストールされているのを発見。先ほど見た記事も(バージョンは違うが)SQLServerが絡んでおり、偶然とは思えない。

ちょっと(かなり?)根拠には弱いがいい機会なので、試しにSQLServer2005SP3を適用してみることにした。
結果、無事バックアップに成功した。本当にSQLServerとWindows Updateが原因だったかは不明だが…

2009年2月6日金曜日

ReSharper4.1の試用期間を終えて

ちまたで色々と話題のReSharperを試用して1ヶ月がたちました。結論からいうと、購入はしない方向で決定です。

使いこなせていない感はありありなのですが、簡単に使ってみた感想を。(あくまでも私の環境(※)でのお話です)
※WindowsVistaUltimetSP1+VisualStudio2005SP1+C#+Core2DuoE6850+Memory2GB

良かった点

  • 未使用のusingの整理
  • 未使用変数・メソッドの発見
  • XMLコメントの整合性チェック
  • ソースコード修正候補の提示
  • Unitテストが便利

悪かった点

  • とにかく重い
    VisualStudioのエディタの幅を変更するだけで、応答がなくなる。
  • ソースコード内の日本語が文字化けする
    ビルドした際に、ソースコード内の日本語が勝手に文字化けを起こす。
  • 英語Only
    日本人にはつらい。メンバーに展開しにくい。
  • 一部、スニペットがおかしい
    propがC#3.0向けだった。

2009年2月3日火曜日

ATOK2009

IME2007に愛想を尽かしてから、ATOKの定額コースを利用しています。
http://www.justsystems.com/jp/products/atok_teigaku/feature1.html

で、本日ATOK2009に更新されました。
Webでは発売日が、2/6になっているのでちょっと得した気分。
http://www.justsystems.com/jp/products/atok/

2009年1月26日月曜日

解体って…

http://www.yomiuri.co.jp/national/news/20090124-OYT1T00546.htm
>パソコンを解体しないと駆除できないケースもあった。

解体って、いったい何をしたのよ。

2009年1月21日水曜日

ソースコードを色付きでコピー

VisualStudioからWordにコードをコピーすると、色付きでコピーされることに気づきました。
常識なのかしら。

2009年1月9日金曜日

ReSharperでショートカットを有効にする

前回の続き。

ReShaperをインストールしたものの、ショートカットが軒並み使えないので、調査してみました。で、見つかったのが、↓のサイト。
[匣の向こう側 - あまりに.NETな]ReSharperのショートカットキー
あぁ。無理なのね。もうバージョンも4.1にもなっているんだから出来ても良さそうなのに...

でも、大概のことは誰かがはまって解決方法がWebに書いている。見つけた対処法は2つ
・DLLをリビルド(?)
[日影日記]ReSharper を日本語版 Visual Studio で使う (2)
・英語版VisualStudioからのコピー
[中の技術日誌ブログ]Resharperのキーバインドをばっちりにしましょう

ひとつめは、自分程度の技術力じゃ怖くて出来ないのでなし。2つめの英語版にしました。
ただ、日本語版が入っている環境に、別途英語版を入れることは出来ないようでした。
#日本語版をインストールする際に、既存フォルダの上書きしか選べない。

(今回の対応手順)
・英語版をMSDNからダウンロード
・英語版のインストール
・SPが外れる(?)用なので、再度SP1の適用。
・VisualStudioを英語設定にする。
・ReShaperのキーバインドの再設定
・VisualStudioを日本語設定に戻す。

以上で、キーバインドが設定されました。機能については、これから勉強していきたいですね。
#軽く使ってみてややレスポンスが遅いような気がします。

2009年1月6日火曜日

ReSharper

あちらコチラでひたすらよい噂を聞くので、ReShaperをインストールしてみました。
英語が苦手なので苦戦しています。

とりあえず、ショートカットが全然わかんない。困った。

2009年1月3日土曜日

GetPixelが遅い

画像からRGBの各要素を取り出すことがあったのですが、異常に遅かったのでいろいろ比較してみました。

1280×800のBitmapからすべてのピクセルからRGBの各要素を取り出すまでの時間を比較してみました。
(CPU:Core2DuoT7200/Memory:4GB)

手法 時間
GetPixel 1.8356103
GetPixel2 1.5895904
LockBits 0.0062316
unsafe 0.0024599

※GetPixel2はWidthとHeightを一時変数に代入し、高速化を図ったもの

こうしてみると、WidthプロパティとHeigtプロパティにアクセスするだけで結構時間がかかることがよくわかります。あと、LockBitsとunsafeの時間の違いはMarshalCopyの処理時間なのかな?

(以下ソースコード)
GetPixel

for (int i = 0; i < bitmap.Width; i++)
{
for (int j = 0; j < bitmap.Height; j++)
{
var color = bitmap.GetPixel(i, j);
int r = color.R;
int g = color.G;
int b = color.B;
}
}


GetPixel

int width = bitmap.Width;
int height = bitmap.Height;
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
var color = bitmap.GetPixel(i, j);
int r = color.R;
int g = color.G;
int b = color.B;
}
}



LockBits

BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
int width = bitmapData.Width;
int height = bitmapData.Height;

byte[] bytes = new byte[bitmapData.Stride * bitmapData.Height];
Marshal.Copy(bitmapData.Scan0, bytes, 0, bytes.Length);
int index = 0;
int nResidual = bitmapData.Stride - width * 3;

for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
int r = bytes[index + 2];
int g = bytes[index + 1];
int b = bytes[index];

index += 3;
}
index += nResidual;
}
bitmap.UnlockBits(bitmapData);



unsafe

BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

int width = bitmapData.Width;
int height = bitmapData.Height;
int nResidual = bitmapData.Stride - width * 3;

unsafe
{
byte* p = (byte*)(void*)bitmapData.Scan0;

for (int y = 0; y < height; ++y)
{
for (int x = 0; x < width; ++x)
{
int r = p[2];
int g = p[1];
int b = p[0];
p += 3;
}
p += nResidual;
}
}
bitmap.UnlockBits(bitmapData);

コマンドプロンプトにドラッグ&ドロップ

XPではコマンドプロンプトにドラッグ&ドロップすることで、パスを貼りつけることができました。しかし、Vistaではできなくなっています。

ググってみると、Shift+右クリックで「パスとしてコピー」があらわれるらしい。で、やってみた。
http://ascii.jp/elem/000/000/048/48471/

右クリック
image

Shift+右クリック
image

出てこない…。コマンドウィンドウをここで開くは追加されているのだが…。不便