- スキルはかけた時間の分しか身につかない
効率化?作業は効率化できるが、「考える時間」は効率化できない。
あなたにないスキルがその人にあると言うことは、その分野でその人が時間をかけて努力したからに他ならない。
- すべてのことはトレードオフ
新しい技術とか、新しい開発手法とかで、今までの悩みがすべて解決し、万事うまくいく。
とかいう記事とかうたい文句は信じない。まず疑いの目を持ってみよう。
技術ブログを始めたくてなんとなくスタートです。 たぶん長続きしないはず…
以前より、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を作ればいいのか?
誰か作っててもいいのに…
世間では.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>をフィールドとして定義しているだけで、いつの間にか値が代入されている。おそらく、コンストラクタ内でリフレクションを使用して代入しているのだろうが、わかりにくい。
Windows7を使い始めて、もう何ヶ月もたった今日、今更ながら多くのショートカットが追加されていることに気づきました。
その中で、便利と感じたものをいくつか紹介します。。
タスクバーに含まれるショートカットプログラムを起動。左から1,2,3…と割り振られています。
#実は、Vistaでもできたらしい。
拡大鏡による、拡大縮小が行われます。+が拡大、-が縮小です。
↑は、最大化。↓は最小化。→は右半分に配置。←は左半分に配置。
縦方向にのみ最大化
(参照)
前々からずっと気になっていたんですが、なかなか試す機会がなかったで連休を利用してチャレンジです。
用意したもの
始める
上記をインストールすると、VisualStudioにSilverlight用のプロジェクトテンプレートが追加されていました。
とりあえず、Silverlightナビゲーションアプリケーションを選択(サンプルプロジェクトぽかったので)。
するとダイアログが出てきて、何かを尋ねます。意味がわかってないので、デフォルトで。
作成されたプロジェクトを、そのまま実行した結果。をを、うごいてますな。
画面レイアウトはBlendで編集するとのことなので、先ほどVisualStudioで作成されたプロジェクトをBlendで開いてみる。
そうすると、なぜがMainPage.xamlがエラーをはいています。なぜ?
原因は、XAMLに書かれた日本語が文字化けして、"(ダブルクォーテーション)が消えてることでした。
文字コードが違うみたい。どこかで文字コードを設定する箇所があるのでしょうか?
で、ここで詰まってます。先は長い。
(追記)
Blend上でファイルを右クリック→外部で編集。メモ帳でファイルが開くので、そのまま上書き保存。
そうすると、Blend側で上記ダイアログが表示され、ファイルの再読み込みを促される。
はいをクリックすると、エラーが解決する。一度解決したファイルは次からは正しく表示される。
XAMLファイルの数だけ上書き作業を行うとOK?なのかも。
なぜでしょうね。
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が動かないからなぁ。
http://www.microsoft.com/japan/learning/certoffer/default.mspx
MCPの受験料が割引になるキャンペーンが行われています。最大25%引き。
適用を受けるためには、試験の申し込みの前営業日までにキャンペーンに申し込みしていないといけないっぽい。
2009年9月19日(土)~9月22日(火)に、リバースエンジニアリングのイベントがあるそうです。
http://www.netagent.co.jp/reverse_engineering_2009.html
どのような出題がなされるか非常に興味があります。
今回は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
簡単にまとめると、
拍子抜けするぐらい簡単です。でも、一ヶ所はまりました。
3.の行程でインストール先を選択した場合に、次のような警告が出ました。
#BIOSの設定次第では出ないこともあるのでしょうが・・・
このディスクにWindowsをインストールすることはできません。このコンピューターのハードウェアでは、このディスクでの起動がサポートされていない可能性があります。コンピューターのBIOSメニューでこのディスクのコントローラが有効になっていることを確認してください。
結局、警告を無視して次へ進めば問題なくインストール可能だったのですが、BIOSを見直ししたり、ドライバを捜してみたりと、無駄に時間を消費してしまった。
インストールが完了した、WindowsServer2008R2です。CドライブがVHDになっているのがわかります。
#でもHyper-Vとかでも一緒だったりしないのか?
Windows7では、VHD(Virtual Hard Disk)がそのままドライブとしてマウントできるという噂を、かねがね耳にしていたので、試してみました。
対象のメニューは、[コンピュータの管理]→[記憶領域-ディスクの管理]→[操作(A)-VHDの作成]です。
該当メニューを選択すると、VHDの作成ウィザードが開くので、VHDの保存場所と容量、タイプを選択します。
#差分ディスクはないんですね。たしかに用途は思いつかないですけど。
後は物理ディスクと同じでボリュームの作成→フォーマットと行うと通常のドライブと同じように認識されます。
#ドライブのアイコンは青いんですね。
あと、既存のVHDのマウントは[操作(A)-VHDの接続]から、マウントの解除はVHDのディスクを右クリックし[VHDの切断]から行えるようです。
#おまけ#
CrystalDiskMarkを使用し、アクセス速度を比較してみました。
VisualStudio2008は32ビット版しか提供されていません。
でも、.NETFrameworkは64ビットネイティブで動作するプログラムを作成することができます。
ってことは、32ビット版アプリで64ビット版アプリのコンパイル&デバッグができるってこと?
とおもい、64bit環境でVisualStudioを起動してみました。(下図はタスクマネージャのキャプチャ)
やっぱり、VisualStudioは32bit、作成中のアプリは64bitで動作してますね。
自分はこの状態を非常に不思議に思うのですが、そんなことはないのでしょうか?
#64bitの方が扱えるメモリ空間も広いし、普通に考えたら32bitアプリからはすべてを制御できないような気がするんですよ。
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
Windows Live カレンダーと、Google カレンダーを同期したいのですが、何かよいサービスorツールはないものでしょうか?
#あまりそういうニーズもないんですかね。
Windows7上で動作するアプリケーションのコンテストが開催されています。
何かよいアイデアがあれば応募したいのですが、特に何もありません。
#最近特に発想が貧困で困ります。前から?
それはさておき、応募条件に以下の条件があります。
次のテクノロジーのいずれかを使用していること
- ライブラリ
- Windows Touch
- シェルの統合 (Shell Integration)
- DirectX 11
- センサー API
うん、どのテクノロジーもわかんね。
きっと、Windows7からの新機能なんだろうね。
HOTSPOTの無料キャンペーンにあやかって、アクセスポイントを探し街をさまよっていたときの話です。
気がついたら、viliv S5がHOTSPOTではないアクセスポイントでインターネット接続をしていました。
SSID:myLGNet(セキュリティーで保護されたアクセスポイント)
とくに無線の設定をしたわけでもないのに、セキュリティーで保護されたアクセスポイントに接続できているのが不思議で、ググってみました。そしたら、ハングルのページばかりが引っかかります。(いや、想像できたけどね)
想像するに韓国の公衆無線LANっぽい。ってことは、日本にもアクセスポイントがあるってことか?
viliv S5は韓国製だから初期設定に組み込まれているのか?で、勝手につないでいいものなのか?
謎です。
viliv S5を入手してからは、通信手段を色々検討しています。
#折角のMID(Mobile Internet Device)なのにネットにつながらないともったいない。
#一応、現在もWillcomのAirH゛を所有してはいるものの、今時64kbpsじゃちょっとね。
前提
候補
公衆無線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にも対応したんだっけ...
どうしよっかな。
通常、WIndowsでMACアドレスを調べる場合、コマンドプロンプト上で
ipconfig /Allを実行します。
しかし、viliv S5では初期状態で、上記コマンドが通りませんでした。
我が家では、無線LANポイントにMACアドレスフィルタリングを行っているため、MACアドレスがわからないとネットワークに接続することができません。結局、アクセスポイント側でフィルタリングを一時的に解除したうえで、アクセスポイントのDHCP機能のリリース済みIPアドレステーブルを参照することで、ネットワーク接続できました。
#その後、とりあえずググってみました。
どうやら、Pathが通っていないことが原因だったようです。↓
http://zakkiteki.blog51.fc2.com/tb.php/48-a30aaa00
各種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に異議申し立てをしてみました。今後どうなるか?
(MSDNより)スレッドごとにフィールドの値を別々に保持したかったので、ThreadStatic属性を非staticフィールドに付けて、うまくいかないなぁ。と悩んでました。ThreadStaticなのでstaticだけですよね。
http://msdn.microsoft.com/ja-jp/library/system.threadstaticattribute.aspx
ThreadStaticAttribute でマークした static フィールドは、複数のスレッド間で共有されません。実行中の各スレッドは、そのフィールドのインスタンスを個別に持ち、そのフィールドに対して独自に値を設定および取得します。このフィールドに別のスレッドからアクセスすると、フィールドには別の値が格納されます。
[ThreadStatic] private static Dictionary<TKey, TValue> _data
ちょっと期待したけど、やっぱりできませんでした。理屈は分かるんだけどね。
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();});
すごく今更なのだが、Visual Studioにアイコンセットが含まれているのを知った。もっと早く知っていれば...
[VisualStudio2005]
C:\Program Files\Microsoft Visual Studio 8\Common7\VS2005ImageLibrary
class Super { } class Sub : Super { }
public static void Hoge(Super super) { } public static void Main(string[] args) { Hoge(new Sub()); }
public static void Hoge(List<Super> list) { } public static void Main(string[] args) { Hoge(new List<Sub>()); }
public static void Hoge<T>(List<T> list) where T : Super { }
public Hoge<T>(List<T> list) where T : Super { }
public static Hoge CreateInstance<T>(List<T> list) where T : Super
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 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が原因だったかは不明だが…
ちまたで色々と話題のReSharperを試用して1ヶ月がたちました。結論からいうと、購入はしない方向で決定です。
使いこなせていない感はありありなのですが、簡単に使ってみた感想を。(あくまでも私の環境(※)でのお話です)
※WindowsVistaUltimetSP1+VisualStudio2005SP1+C#+Core2DuoE6850+Memory2GB
良かった点
悪かった点
画像から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/
出てこない…。コマンドウィンドウをここで開くは追加されているのだが…。不便