サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
tekk.hatenadiary.org
他のシステムにデータ連携を行う場合などに、文字化けを起こさないよう入力文字のチェックを行う場合があります。 今回は、JISコードを使って入力可能文字の判定処理を整理したいと思います。 まず、JISコードの体系ですが「区点番号」という番号体系で文字コードが付与されています。2バイト文字の場合、上位バイトが区、下位バイトが点となっています。区毎に94の点で構成されており、区単位で設定される文字が決まっています。 01区 記号 02区 記号 03区 英数字 04区 ひらがな 05区 カタカナ 06区 ギリシア文字 07区 キリル文字 08区 罫線素片 16〜47区 第一水準の漢字 48〜83区 第二水準の漢字 これらのJIS漢字コードについての詳細な説明は以下のサイトで確認してください。 JIS漢字コード:JIS第一・第二水準 http://www.shuiren.org/chuden/teac
ビルド構成の Debug と Release の違いについて調べてみました。 開発中だから Debug 構成、リリースする時は Release 構成という 固定観念 ではなくて、開発中とリリース時での動作に一切の違いがあってはいけないから安全に動作することを最優先にリリースする際も Debug構成で行く!という選択肢もあっても良いと思います。パフォーマンスが気になるアプリでは説得が難しいと思いますが、そもそも Debug 構成で性能要件が満たせないようなら設計レベルから見直すべきだとは思います。Release 構成による最適化のパフォーマンス向上は、最後の切り札くらいに考えても良いのではないでしょうか。 というわけで、以下が Debug 構成と Release 構成の違いです。 Debug 条件付きコンパイルの定数:DEBUG,TRACE コードの最適化:ON デバッグ情報:FULL Re
exp で取得した .dmp ファイルを imp でリストアしようとすると、トリガやビューを作成する際に以下の様なエラーが発生して imp に失敗した。本来あるはずのテーブルが存在しない。 IMP-00017: following statement failed with ORACLE error 942: IMP-00003: ORACLE error 942 encountered ORA-00942: table or view does not exist 原因を調べていくと imp が失敗しているというより、 exp の時点でレコード数(行数)が0のテーブルが バックアップ の対象となっていないようだ。調査するとOracleのドキュメントにこの現象についての説明があった。 Oracle Database 11gリリース2(11.2)では、デフォルトで、DEFERRED_SEGM
TeamFoundationServer(TFS)はローカルにダウンロードしたファイルの日付はすべて現在時刻となってしまいます。例えば、1年前に修正しチェックインしたファイルでもダウンロードするたびにファイルの日付が異なってしまう、Visual Source Safe(VSS) では、オプションでダウンロードしたファイルの日付をチェックイン日付にすることが出来ましたが、 TFSではそうしたオプションは無いようです。 (ファイルの更新日付はTFSが保持していないため、チェックイン日付となります。) TFS SDK を使うとTFSのソース管理のメタ情報を取得する事ができるので、ファイルダウンロード後にファイルの日付を変更する方法をしらべてみました。手順としては以下のステップが必要です。 TFSサーバへのログイン ソース管理(バージョンコントロール)サービスへの接続 ダウンロード用の一時ワークス
Visual Studio をソース管理ツール(Team Foundation Server:TFS, Visual Source Safe:VSS)と統合して使用している場合に、ファイルの比較やマージにWinMergeを利用する設定を紹介します 設定方法ですが、まず、メニューから[ツール(T)]-[オプション(O)...]を選択しオプション画面を表示します。 オプション画面で左下の「すべての設定を表示(A)」のチェックをいれて、ツリーからソース管理を選択します。 ユーザツールの構成(C)...ボタンを押します。 追加/変更ボタンから以下の設定を行ってください。 拡張子:「.*」 操作:「比較」 コマンド:「C:\Program Files\WinMerge\WinMergeU.exe」 引数:「/wl /wr /dl %6 /dr %7 %1 %2」 拡張子:「.*」 操作:「マージ」
IISのワーカープロセスは、不安定にならないよう定期的な時間間隔(1740分ごと)に再起動するように設定されています。この再起動処理をIISはリサイクルと呼んでいます。既定では時間間隔(1740分毎)ですが、リクエストの数(1000万リクエスト毎など)や特定の時間(毎朝03:00)、メモリの使用量などに応じてリサイクルイベントを発生させるよう設定することができます。 リサイクル自体は問題ありませんが、どういったタイミングで起きているかをイベントログで記録することができます。IIS6の既定ではログを記録しないこと、IIS7の既定では一部ログを記録するとなっています。イベントログを出すかどうか調整します。 IIS6の場合 既定ではリサイクルイベントのログを記録しないので必要なリサイクルイベントを記録するよう設定します。 管理者権限で、inetpub\adminscriptsにある adsuti
MSDNにはInnerExceptionについて以下のような説明があります。 ファイルを読み取り、そのファイルのデータの書式を指定する関数があるとします。この例では、ファイルの読み取りを試みるコードとして、IOException がスローされます。この関数は、IOException を受け取り、FileNotFoundException をスローします。IOException を FileNotFoundException の InnerException プロパティに保存でき、それにより、初期エラーの原因を検査するための FileNotFoundException を受け取るコードが有効になります。 FileNotFoundExceptionが発生するとき、InnerExceptionにはIOExceptionが設定されるんだと思いますが実際には違います。以下のようなコードで存在しないフ
例外に掛かる処理コストについてint.Parseとint.TryParseを使って比較調査を行ってみました。 入力された文字が数字か否かを判断する方法として、数値ではない場合に例外を発生させるint.Parseがあります。 private bool IsNumericByException(string test) { try { int.Parse(test); } catch (FormatException ex) { return false; } return true; } もうひとつ別のバージョンとして、数値ではない場合にFalseを返すint.TryParseがあります。 private bool IsNumericByTryParse(string test) { int a; return int.TryParse(test, out a); } この2つの処理をそれぞ
Webサイトの高速化を行う手法の1つで、JavaScriptとCSSの圧縮・統合があります。複数のjs,cssファイルをまとめると、ブラウザとWebサイトとの接続回数が減り、CSSSpriteと同じく大きな効果があります。圧縮も効果はありますが、圧縮より統合の方が効果が大きいです。 実施に当たっては、CSSSpriteより js,cssの方が簡単なので、ファイルをまとめるという効果がどれほどのものなのか体感するにも良いと思います。 今回は、Microsoft Ajax Minifier を使った手法を紹介します。 Microsoft Ajax Minifier http://ajaxmin.codeplex.com/ JavaScriptの圧縮・統合 AjaxMin.exe -JS -clobber -warn -xml c:\jsmin.xml 2> c:\jserr.logJavaSc
Windows 8 の Release Preview と同時に Hyper-V Server 2012 についてもリリースされているので、手軽な Hyper-V 検証環境として USB メモリから起動できる Hyper-V Server 2012 を作ってみました。 Hyper-V Server については、2008 R2 に続き 2012 でもUSB起動がサポートされているようで安心しました。USBメモリも以前、2008 R2 の時に作ったものを使いまわしたのですが、16 GByte のUSBメモリでも動作します。 基本的に手順は以前と同じです。マイクロソフトの Hyper-V Server 2008 R2 の手順を参考に、カスタマイズしました。 Deploying Microsoft Hyper-V Server 2008 R2 on USB Flash Drive http://t
現在使っているパソコンのHDDに空き容量が50GByte程度あれば、Windows 8 とのデュアルブート環境を作れます。デュアルブートというと、パーティションを切ってインストールする事をイメージしますが、今回説明する VHD ブートは Cドライブに Windows 8 が入ったファイルが1つできるだけです。パーティションを切る必要はありません。 VHDファイルという仮想ディスクに Windows 8 をいれて、新しいOSを試してみようというのが本記事の目的です。 Windows 8 をインストールしたあとの VHD ファイル(Windows8.vhd)。実際には9GByte程度のサイズ。(実際は容量可変のMAX32GByteの仮想ディスク) というわけで、パソコンの環境を壊さず気軽に試せるインストール方法として、VHDブートによる Windows 8 のインストールを紹介したいと思います
Windows 8 では企業向けの機能として USB メモリからの起動がサポートされており、PCの環境を丸ごと持ち運びができるようになっています。 「Windows To Go」という名前で呼ばれています。 Windows 8 Consumer Preview でも Windows To Go な USBメモリを作成することができるので実際に作ってみました。 それで実際に使ってみたのですが、まず最初の感想としては、「とても遅い・・・。」以前、Hyper-V 版の USB メモリを作りましたが、そちらはある程度動くのですが Windows To Go はそれと比較するとかなり遅いです。まあHyper-Vは、GUIの無いServerCoreなので軽くて当たり前ですが。 ということで、実際に利用するには性能の良いUSBメモリが必要です。USB SSDなどを使うと 快適に動作するので Window
TFS 管理下にあるプロジェクトをTFSに接続できない環境に持っていく、自動ビルドやバッチでの静的解析の際にバインド情報が残存しているとバッチ処理に失敗するなど、TFSのバインド情報を削除する必要があります。今回は、TFSのバインド情報が、どのように構成され、どれを削除すれば良いか確認をしていきたいと思います。 TFSのバインド情報を確認する TFSのバインド情報を確認するために、作成したプロジェクトをTFSで管理する前と後でDIFFを取って差異を把握します。 .slnに以下のエントリが追加されています。 GlobalSection(TeamFoundationVersionControl) .csproj/.vbprojに以下のエントリが追加されています。 SccProjectName SccLocalPath SccAuxPath SccProvider ファイルが追加されています。
USBメモリから起動できるHyper-V Server 2008 R2 SP1ですが、手順が複雑なので自動化したアプリケーションを作成しました。ここで公開します。 Create Hyper-V Server USB Memory http://hypervusb.codeplex.com/ CodePlexでは英語で公開していますが、アプリ自体はリソースを使って多言語化(英語/日本語に対応)しています。この記事では、日本語版で。 USBメモリ版のHyper-V Serverの作り方は、このブログでも紹介した通りでMicrosoftのサイトで紹介している方法を参考にしています。手動で作成する以下のやり方を自動化したと考えてもらえればOKです。 Deploying Microsoft Hyper-V Server 2008 R2 on USB Flash Drive http://techne
Windows 2008 R2 に搭載されているHyper-Vですが、Hyper-Vの機能のみ取り出したバージョンが無償で利用できるよう公開されています。 Hyper-V Server 2008 R2 http://www.microsoft.com/japan/servers/hyper-v-server/default.mspx 競合するVMWare社のVMWare Esxi 4 も無償なので、マイクロソフトも無償で対応しているようです。スペック表だけみていると、64の論理プロセッサ、メモリ1TB、Live Migration、クラスタリング、Dynamic Memory、Remote FXのサポートなどなど仮想化専用のサーバを立てる場合はWindows 2008 R2はいらないんじゃなかな・・と思えるような内容です。 競合する VMWare Esxi 4 との比較資料があったので貼っ
■バージョン番号の各セクションの意味 アセンブリに設定するバージョン番号は、[3.1.5.1] というように4つセクションで構成されます。まず、MicroSoftは以下のルールでセクションごとに意味を持たせています。 メジャー番号 (主要な機能をアップデート/リリースした場合に、値を増やします。) マイナー番号 (ちょっとした機能をアップデート/リリースした場合に、値を増やします。) ビルド番号 (ビルドするたびに、値を増やします。1日1回ビルドするなら、1ずつ増やす。) リビジョン番号(通常は0固定。ビルド番号だけでは区別できない場合に利用します。) ビルド時に自動的に値をインクリメントするためには、*で指定する。 // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を // 既定値にすることができます: // [assembly: AssemblyVe
アセンブリを参照設定する際に「厳密名」というキーワードが出てきます。「厳密名」とは何か、参照設定での違いはあるのか、実行時にどのように動くのか調べてみました。 厳密名とは 厳密名とは、以下の4つの属性を使ってアセンブリを一意に識別する名称です。 ファイル名(拡張子無し) バージョン番号 カルチャID 公開キートークン 具体的には、プロジェクトファイルで良く見かける以下の様な値を指します。 FarPoint.Win, Version=3.0.2010.2005, Culture=neutral, PublicKeyToken=a5fa960294d899e7 すべてのアセンブリに厳密名があるのか? アセンブリに厳密名を付けるには、アセンブリの発行者によって公開キーと秘密キーのペアによって署名される必要があります。署名は、アセンブリのプロジェクトプロパティの[署名]タブでアセンブリの署名にキー
.Net アプリケーションは DLL(アセンブリ)をロードする場合、Exe と 同じフォルダ、もしくは、グローバルアセンブリキャッシュ(GAC)を検索します。しかし、probing , codebase, developmentMode といった手法を使用すると検索範囲を拡張したり変更する事ができます。それぞれの手法には特性があり、どのような振る舞いをするのか、適切な利用シーンは何処なのか、検証してみました。 ■ probing プロービングはDLLの検索範囲をサブディレクトリまで拡張する手法です。アプリケーション構成ファイルに以下の様に設定すると DLL サブフォルダまで検索してくれます。 複数のサブディレクトリを指定する場合は、;(セミコロン)で区切ります。以下の指定だとlibサブディレクトリも対象にしてくれます。 アプリケーション構成ファイルは、プログラム名.exe.config と
SendMessage メッセージを転送先のウインドウのウインドウプロシージャに直接送信します。処理は同期で、転送先のウインドウプロシージャがメッセージを処理し終えるまでは呼び出し元の処理はブロックされます。 PostMessage メッセージを転送先のウインドウのメッセージキューの末尾に送信します。処理は非同期処理で、メッセージを送信した直後から処理を継続することができます。
Win32APIを使用する場合はDLLImport属性を付けて使用したいAPIを事前に定義して使います。DllImport属性は使用したいDLLとのリンクがコンパイル時に設定されるためアプリ起動時にリンクを解決しようとします。(リンクを解決するというのは、DLLをメモリ上にロードし使用したい関数のエントリーポイントを決定することです。)これは、DLLとの通常のリンクの仕方ですが、リンクしたいDLLがシステムに存在しない場合や、使用したい関数が対象のDLLに存在しない場合、(OSのバージョンなどの違いで発生することが良くあります。)アプリはリンクに失敗し起動しません。 これに対処するためには、DLLの実行時読み込み(動的読み込みとも言います)を使用します。 実行時読み込みには、LoadLibrary,GetProcAddress,FreeLibraryの各Win32APIを使用します。アプリ
重複しない一意な識別子(単純なものであれば連番、ランダムなID、MACアドレスなど)を取得したい場合にGUIDを利用する事ができます。GUIDは128ビットのIDで何度GUID取得処理を行っても同じ値が出現しないように設計されていて、時刻やマシン固有の情報(MACアドレス)を含むため分散システム上でも一意性が保証されているという便利なIDです。 そのアプリだけでしか使わないけれど重なって欲しくない値(例えば名前付きMutexの名前とか、名前付きパイプの名前とか)に使用したりします。例えば、MicroSoftはActiveXのレジストリキーに使っています。 VisualStudioでの作成 ツール(T)-GUIDの作成 .Netでの作成({}なしのRegistryFormatで取得できる。ToByteArray()とすると、バイナリ状態での取得が可能) Debug.Print(System.
Visual Studio 2008 のアドインからIDEを操作する場合は、EnvDTE80.DTE2オブジェクトを使います。EnvDTE80.DTE2は、IDEのオブジェクトモデルそのもので基本的な操作が一通りできるようになっています。 今回は、指定したファイルを開いて、指定した行番号にカーソルを合わせるという操作を行います。 現在開いているウインドウの中に、指定したファイルが存在するか確認する。 存在しない場合はファイルを開く。 対象ファイルのウインドウに対して、TextSelectionオブジェクトを使用して指定した行番号にカーソルを合わせる。 という手順で行います。 現在開いているウインドウの中に、指定したファイルが存在するか確認する。 Dim targetWindow As EnvDTE.Window = Nothing For Each win As EnvDTE.Window
アプリケーション構成ファイルを使用してWCFを構成します。WCFService-04.zip アプリケーション構成ファイルを使用すると、WCFのサービスモデルを構成する要素(アドレス・コントラクト・バインディング・ビヘイビア)を外部ファイルに記述することが出来ます。WCFのサービスモデルはプログラムコードで書くことも出来ますが、外部ファイルに記述することでリコンパイルなしに構成を変更できるようになります。 具体的には、WCFサービスのスタートアップルーチンが以下のようになります。 修正前 スタートアップルーチンで、アドレス、コントラクト、バインディングを設定しています。 Public Shared Sub Main() Dim baseUri As Uri = New Uri("http://localhost:8000/WCFService") Dim host As ServiceHo
WSDLをサービス参照の設定で取り込むサンプルコードWCFService-06.zip WCFのサーバーをアプリケーション構成ファイルで構成する方法と、公開するサービスをWSDLで公開する方法を見てきました。今回は公開されたWSDLから、クライアントがサーバに接続するためのアプリケーション構成ファイルとカスタムクラスを作成します。 WCFサーバを起動した状態で、VisualStudioのソリューションエクスプローラの右クリックメニューから[サービス参照の追加]を選択すると以下の画面が表示されます。 アドレスにWSDLのURLを入力して移動を押すとWSDLを取得できます。名前空間を決めてOKを押すとapp.config(アプリケーション構成ファイル)とService Reference(カスタムクラス)が生成されます。今までWCFインタフェースを参照設定して作成してきましたが、今回はWSDL
この記事は Hello Another World! さんのところで公開されている Excel 2003 の CSV と 文字エンコーディング の関係 http://cs.albis.jp/blogs/ms-18e/archive/2006/08/07/Excel-2003-_6E30_-CSV-_6830_-_8765575BA830F330B330FC30C730A330F330B030_-_6E30A295C24F_.aspx Excel 2007 の CSV と 文字エンコーディング の関係 http://cs.albis.jp/blogs/ms-18e/archive/2007/01/25/1273.aspx の改訂版です。改訂前の記事は Excel 2007 ベースですが、Excel 2010 について調べました。 カンマ区切り、タブ区切りそれぞれのテキストファイルを Exce
WinMergeは各種のツールと連携ができるようにコマンドラインインタフェースを備えています。今回は、コマンドラインインタフェースを使用してVisualSourceSafeから最新を取得したフォルダとチェックイン前のローカルの作業フォルダを渡して比較する例を記載してみます。 Dim args As String = String.Empty args = " /r /u /wl /wr /dl ""{0}"" /dr ""{1}"" ""{2}"" ""{3}"" " args = String.Format(args, "VSS(VisualSourceSafe上のファイル)", "Local(編集中のファイル)", _leftPath, _rightPath) Dim p As System.Diagnostics.Process = System.Diagnostics.Proces
C#,VB.NETのブール値(bool,Boolean)はTrueとFalseの2値しか保持しませんが、1変数あたり4バイト(32Bit)のメモリ量を必要とします。 簡単に言うと残りの31ビットは無駄な状態となります。大量のブール値を保持する場合、この非効率さが問題となるケースがあります。 そうした場合に利用できるのがBitVector32と、BitArrayです。 ■BitVector32 BitVector32は1ビットずつブール値で取り扱えるようにした32ビットの構造体です。4バイトしかメモリを消費しませんが、32個のブール値を取り扱えます。但し、配列の添え字がMask値のため少し扱いにくいということと、32個を超えるブール値は1変数では管理できません。 using System; using System.Collections; using System.Collections.
[オプション]-[プロジェクトおよびソリューション]-[ビルド/実行] 並行にビルドするプロジェクトの最大数。(CPUやコアの数に合わせて数字を調整する。複数のプロジェクトを並行でビルドすることが出来ます。) MSBuildで利用する場合は、/maxcpucount:3 (3プロジェクト並行の場合)とします。省略形の書き方は /m:3。 アンチウイルスソフトのリアルタイム検索でビルド時に生成されるファイルが検索対象にならないようにする。 ソースとビルド結果を出力するフォルダを別ディスクに配置する。 OSのVirtualMemoryをオフにする。 ディスクをSSDにする。ディスクをRamPhontomなどを使ってオンメモリディスクにする。 出来る範囲で。
アプリケーションの実行パスを取得する方法について調べると実にさまざまな方法が見つかります。どの方法でも実行ファイルのパスを取得できるようなのですが、では実際にどの方法を使えばいいのか。一番良い方法はどれなのかを検討してみました。 まずは、Googleの検索結果を見て行きます。 @IT 実行ファイルのパスを取得するには? http://www.atmarkit.co.jp/fdotnet/dotnettips/016exepath/exepath.html Assembly myAssembly = Assembly.GetEntryAssembly(); string path = myAssembly.Location; string path = Application.ExecutablePath; @IT ClickOnceアプリのディレクトリ・パスを取得するには?[2.0のみ、C
次のページ
このページを最初にブックマークしてみませんか?
『tekk.hatenadiary.org』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く