サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
掃除・片付け
coma2n.hatenablog.jp
なんて事を最近会社に派遣されてきたC#初心者に聞かれたので、その理由をここに書いてみる。 聞かれた事は、 class MyForm : System.Windows.Forms.Form { private void MyForm_Load(object sender, EventArgs e) { // DoSomething } } ではなくて class MyForm : System.Windows.Forms.Form { protected override void OnLoad(EventArgs e) { base.OnLoad(e); // DoSomething } } するのは何故か?という事。 これにはいくつかの理由があって、 .NETのクラスライブラリのガイドラインにそうしろと書いてある。 イベントは基本的に外部に知らせるためのものであり、内部で使うものではない
はてなブックマークのAtomAPIを利用するためにはWSSE認証を使用するらしいので、PowerShellからWSSE認証を行うためのスクリプトを作った。 Get-WsseHeader.ps1 param([string]$userName, [string]$password) if($userName.Length -eq 0 -or $password.Length -eq 0 -or $args[0] -eq "-?") { $commandName = [IO.Path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Name) Write-Host -foregroundColor Yellow @" Name: $commandName Description: 指定したユーザ名とパスワードからWSSE認証用のヘッダ
Monoでコマンドラインパーサーがあったので使ってみた。 .NET 4、コマンドラインパーサー未搭載 http://www.ndesk.org/Options 使い方はこんな感じ string data = null; bool help = false; int verbose = 0; var p = new OptionSet () { { "file=", v => data = v }, { "v|verbose", v => { ++verbose } }, { "h|?|help", v => help = v != null } }; List<string> extra = p.Parse(args); OptionSetにAddメソッドが定義されていて、以下のようなシグネチャのメソッドが定義されている。 Add(string prototype, Action acti
MVPパターンにおける画面遷移のやり方を調べていたが、具体的な情報があまりなく、これだというのが無かったので自分なりに考えてみた。 業務アプリでやるからには極力シンプルで、誰にでもわかるやり方にする必要がある*1。 とりあえず考えたのは、下図のようにプレゼンター側で遷移するビューを取り出し、必要な値を設定し表示するというやり方。 概要図 これくらい単純なのが一番いい。 ビューに値を設定する方法としては、 コントロールを参照して直接値を設定する。 プロパティを定義して、間接的に値を設定する。 が考えられるが、プロジェクト的には1.を採用したい。簡単だし、受け入れられ易い。プロパティってなに?って言われちゃうレベルだからね。 しかし、いくつか問題点がある。 コントロールを直接参照するので、コントロール名を変更されたり、削除されたりするとコンパイルエラー 型の不一致(例えばTextBoxのTex
WindowsFormで業務アプリを開発する場合、DataGridViewの様にデータの表示と編集作業を実際のデータソースの種類を問わずに一括してやってくれるコントロールがあると非常に便利である。 単純な編集作業ならば、これにデータバインドしてちょこちょこっとコードを書いてやるだけで、目的の仕様を達成できるのだから、ありがたくて涙が出てくる。 .NETにはデータベースにアクセスする技術が何種類かあって、どれを選ぶかによってDataGridViewとの連携のし易さもかなり変わってくる。 その辺の違いを調べる為に以下の仕様をいくつかのデータベースアクセス技術で実装して、その違いを比べてみた。 表示するレコードは複数のテーブルをJOINしている(JOINで対応できない場合はビューを使う)。 属性を変更できる。 レコードを削除できる。 ER図 ためした技術は以下、 DataSet 型付けDataS
業務アプリケーションを開発するにあたって、最低限守るべき事の一つとして「画面とロジック」の分離が挙げられると思う。 簡単そうに思えて、これが意外と難しい。 一人での開発ならば自分だけでやり方を決めてしまえばそんなに難しくはない。しかし、開発要員が増えれば、これが途端に難しくなる。 この原因としては、 どこからが「画面」の役割で、どこまでが「ロジック」の役割かの定義が個々人でばらつきがある。 定義を決めても守らない奴がいる(そもそも意味が理解できていない)。 言語自体がへぼくて「画面とロジック」の分離がそもそも(充分に)できない。 なんていうのがある。 ほとんど、「それって開発者としてどうなの?」というレベルに思えるけど、現実の開発ってそんなもんだよね。 いつの時代もこの問題は付きまとうようで、実際色んなデザインパターンが考えられてきた。 知ってるやつでは、 MVC(モデル・ビュー・コントロ
最近のJavaのフレームワークがどうなっているか調べるために、Strutsの後継である「Struts 2」をさわってみた。 「Struts 2」はStrutsに「WebWork」というフレームワークをマージしたもの。「Struts 1」と似てはいるけど、別物と考えた方がいい。 最新のバイナリを以下のサイトからダウンロードしてきて使う。現在のバージョンは「2.1.6」 Welcome to the Apache Struts project 開発環境には、 Eclipse 3.4 Tomcat 5.5 Sysdeo Tomcat plugin を使う。 とりあえず簡単なTodoアプリでも作ってみる*1。 作ってみる 「Tomcat プロジェクト」で新規プロジェクトを作る。プロジェクト名は「jTodo」にする。 Struts 2の開発に必要なJarファイルを「WEB-INF/lib」フォルダに
世の中にはJavaScriptで開発されたAjaxライブラリ(prototype.js、Dojoなど)が星の数ほどあるが、Webアプリの開発には、基本的にASP.NETを使うということもあり、ASP.NET自体、生のJavaScriptとの親和性があまり高くないので出番が少ないため、あまり興味がなかった。 しかも今ならASP.NET Ajax Extensionsがあるので、そういう事は全てそっちに任せる事ができるのでなおさら。 しかし、マイコミジャーナルの以下の記事を読んで「jQuery」なるAjaxライブラリに興味を持った。 jQuery 1.2登場!! - 16日には新UIを公開予定 jQueryはJavaScriptで開発された軽量なAjaxフレームワーク。 動作が高速でサイズも小さいという特徴がある。XPathを指定して動作する仕組みを採用している点も特徴的 これを使うとリッチな
前回に引き続きVB6でも、できるだけの事はやってみようシリーズ VB6でデータベースを使ったアプリケーションでよくやってしまうのは、トランザクションの張り忘れとかロールバック、コミットのし忘れなど。おまけに汎用的な関数の中でやっちゃったりして、トランザクションがまともに機能しなかったりする。 こういうのはきっちりルールを決めて実装しなくちゃいけないんだけど、なかなか守れないのが実情。そういう状況を打破するために宣言するだけでトランザクションの開始とコミット、ロールバックが自動で行われるモジュールを作ってみた。 使い方はこんな感じ modMain.bas Sub Main() Call modException_ClearLastException() On Error Goto EXCEPT ' modTransaction_Beginでトランザクションが開始される ' また、引数に接続オ
最近はずっとVB6*1で仕事をしているので、できない事が多くてイライラしてくる。 だからと言って、いい加減な物を作るわけにはいかないので、VB6でもできる限りの事をやる為に色々とフレームワーク的なものを作り始めた。これを使えば一定の品質を保てるって程度のやつ。 まずはVB6のしょぼいエラー処理の機能をもう少しましにする機能を作った。 やりたい事は 一貫したエラー処理 呼び出し履歴が参照できる(スタックトレース) エラーに追加情報を載せる これらを実現する為に、まず例外クラスから作ることにする。 その前にこのクラスが必要なので、載せとく。単なる文字列バッファクラスね。 clsStringBuilder.cls Option Explicit '#--------------------------------------------------------------------------
今更ながらWCF(Windows Communication Foundation)を始めた。 長い間プログラミングから遠ざかっていた*1ので、若干書き方を忘れてきたけど思い出しつつ勉強開始 まずは基本中の基本からやってみる。 概要 イメージとしてはこんな感じ Server側とClient側でContract(インターフェース)を決めてあげれば、通信部分のプロトコルとかなんやらはWCFがやってくれまっせという事です。 これに従って、今回作成するプロジェクトは以下の三種類 WcfService(コンソール) WcfServiceInterface(ライブラリ) WcfClient(コンソール) また、参照設定に以下のアセンブリを追加しておく System.ServiceModel(WCFの本体) System.Runtime.Serialization Contractの定義 まずはインター
今回はPowerShellを使ってWeb(インターネット)にアクセスする方法を紹介します。 PowerShellは.NET Framework(.NET)をベースにして作られているので、.NETに用意されている豊富なライブラリをそのまま使用することができます。 Webへのアクセスについても.NETのライブラリを使うことになります。基本的にはC#やVB.NETなどの.NET対応言語と同じやり方になります。 WebへのアクセスにはSystem.Net.WebClientクラスかSystem.Net.HttpWebRequestクラスのどちらかを使って行います。 前者は簡単に使えますが細かい制御が出来ません、後者は少々手数が増えますが細かい制御が出来ます。今回はSystem.Net.HttpWebRequestクラスを使用します。 PowerShellからGoogle検索 Webと言えば「Goo
欲しかったので作ってみた。 jquery.silverlight.js jQuery.fn.extend({ silverlight: function(opts) { _opts = jQuery.extend({ background: 'white', minRuntimeVersion: '2.0.31005.0', autoUpgrade: true, windowless: false, width: '100%', height: '100%' }, opts); if(!_opts.source || _opts.source == '') throw new error('「source」を指定して下さい。'); var obj = $('<object>').attr({ data: 'data:application/x-silverlight-2,', type:
最近、WPF界隈でModel-View-ViewModel(M-V-VM)パターンとかいうデザインパターンが人気らしいのでちょっと調べてみた。 発端は↓この辺からなのか知らないけど、拙い英語力ということもあり、よく理解できなかった。というか、そもそもWPFに興味無いし。 THE MODEL-VIEW-VIEWMODEL (MVVM) DESIGN PATTERN FOR WPF その後にSilverlightでこのパターンを実装したという以下の記事を読んだ。 MVVM pattern in Silverlight using SLEextensions これはSLExtensionsというSilverilghtのオープンソースライブラリを使って実装したサンプルで、これを読んでM-V-VMパターンがだいたい理解できたので、まとめてみる。 SLExtensionsは以下のCodePlexのサイ
この前の勉強会で聞かれたので調べてみたら、これ「System.AddIn」のやつとは全然関係ないのね。 でも、アドインとかの機構を実現させるためのフレームワークというのには違いが無いみたい。どう住み分けるんだろう? で、軽く触ってみたんだけど、これって要はDIコンテナなのね。他のDIコンテナよりも少しだけスコープが広いみたいな。 以下のURLに簡単な使い方が載っているので見てみると、 Hosting MEF in an application 基本はプロパティに対してインジェクションする「セッターインジェクション」で*1、その設定はImport属性とExport属性で行う。 Export属性でクラスをマークするとDIコンテナに登録できる。逆にImport属性でプロパティをマークするとオブジェクトをDIコンテナからインジェクションできる。このマッピングには型と名前(自由に定義できる)が使える
これで取得できる。 PS > $hoge = $Env:[環境変数名] 設定はどうやったやるのかなと思って、とりあえず以下のようにしてみた。 set HOGE="HogeHoge" これでは設定できないみたい。Set-Variableのエイリアスやから-Optionで環境変数に設定するのがあるか調べたけどなかった。 で、素直にやってみた。 PS > $Env:HOGE = "HogeHoge" これでできた!
ASP.NET AJAXを使った開発をしていてUpdatePanelの更新の開始と終了をフックして色々したかったので調べてみたら、案外簡単にできることがわかったのでメモ。 参考にしたのは以下の記事 JoeOn.net In Japanese: 複数の UpdatePanel - 更新を発生させたコントロール フックするコードが以下。ASP.NET AJAXクライアントライブラリ以外にもjQueryを使っている。 <script type="text/javascript"> $(document).ready(function() { var prm = Sys.WebForms.PageRequestManager.getInstance(); // 開始時のイベント prm.add_beginRequest(function() { $("#side").slideUp("slow")
仕事でVB.NETを使う必要が出てきそうなので最近のVBがどうなっているのかチェックがてらメモしておく。 VBは7(.NET 1.0)までしか使っていないので、その後ジェネリックとかがどのように取り込まれたか全く知らないのでそのへんも気になる。 基本的な相違点 C#はクラス名やメソッド名などの識別子を大文字小文字で区別するが、VBは区別しない。 VBは事前バインディングと遅延バインディングを切り替えられる(Option Strict On/Off)。 VBは変数の型宣言を強制するかどうかを切り替えられる(Option Explicit On/Off)。 リテラル ちょこちょこ違う C# string s = "Hello"; char ch = 'a'; int i = 1; long l = 1L; double d = 1.0; float f = 1.0F; bool bl = tr
Beta 2 になってからHttpWebRequestを使わなくてもWebClientだけである程度*1のHTTPリクエストができるようになったので、まとめておく。 GET まずはGETから。 var wc = new WebClient(); wc.DownloadStringCompleted += (s, e) => { if(e.Error == null) { var result = e.Result; // Do Something } else { // エラー処理 } }; wc.DownloadStringAsync(new Uri("http://hoge.com/get")); GET操作はDonwloadStringAsyncメソッドを使って行う、このメソッドは非同期で実行されるので、結果はDownloadStringCompletedイベントで受け取る。 POS
もーあまりにも人が集まらないので、三重県はあきらめて名古屋で開催することにします。 名前も変更して「東海.NET勉強会」に変えました。 東海.NET勉強会 ということで、名古屋の方々次回からよろしくお願いします。
最近ちょっとGoogleGearsをいじってるんだけど、これにコンテンツをキャッシュするLocalServerという機能があって、これを使うとコンテンツをキャッシュしてWebアプリをローカル(オフライン)で実行できるようになる。 で、これをいじってて思ったんだけど、この機能でSilverlightコンテンツをキャッシュすればSilverlightもAirみたいに単独のアプリとして使えるようになるんじゃね? ということでやってみた。 表示するSilverlightコンテンツはどうでもいいので、ボタンを一個貼り付けた適当なやつを用意した。 Default.aspx <%@ Page Language="C#" AutoEventWireup="true" %> <%@ Register Assembly="System.Web.Silverlight" Namespace="System.We
なんのこっちゃと思われそうなタイトルだけど、どういうことかというと、以下のようなテキストボックスと「Open」「Save」ボタンがある簡易的なテキストエディタアプリ(Silverlight製)があるとする。 このアプリは「Open」ボタンをクリックすると、 お馴染みの「ファイルを開く」ダイアログが表示される。そして、テキストファイルを選択して「開く」ボタンをクリックすると そのファイルを読み込んで、テキストボックスに内容を表示するというもの*1。 この部分の処理は至極単純で、以下のようになっている。 Page.xaml.cs using System; using System.Windows; using System.Windows.Browser; using System.Windows.Controls; namespace SilverlightApplication1 { p
さっきの続き まだよくわからんけど、IDynamicObjectというインターフェースを実装すると動的型付けのオブジェクトを作れるみたい。 しかもその情報(メソッドとかプロパティとか)をどのように持つかは実装クラスに委ねられる。 で、その基本実装を提供するクラスとしてDynamicObjectという抽象基本クラスがあって、これを使うと簡単に動的型付けのクラスを定義できる。 デモでやってたコードが以下(画像が荒かったので一部違うかもしれん) using System; using System.Linq; using System.Dynamic; using System.Scripting.Actions; public class Bag : DynamicObject { Dictionary<string, object> items = new Dictionary<string
PDC2008のAnders Hejlsbergのセッションをビデオで観てたら、新機能の紹介があったので書いてみる。 The Future of C# | pdc2008 | Channel 9 Dynamically Typed Objects 動的型付けオブジェクト? 以前は、以下のようなオブジェクトのメソッド呼び出しを Calculator calc = GetCalculator(); int sum = calc.Add(10, 20); 動的にやろうとすると、リフレクションを使ってやっていたわけだけど、 object calc = GetCalculator(); Type calcType = calc.GetType(); object res = calcType.InvokeMember( "Add", BindingFlags.InvokeMethod, null,
普段よく使っている設計パターンをさらしてみる。 GoFのデザインパターンにCommandパターンというのがある。「C#デザインパターン」の説明によると Commandは、特定のアクションに対する要求をオブジェクトの中に封じ込め、このオブジェクトを公開された パブリックなインターフェースに与えます。このパターンを使うと、実際に実行されるアクションについて 何も知らなくても要求を出せる機能をクライアントに与えられます。 要するにアクションの呼び出し元と実際のアクションを分離するのが目的という事かな。 UIの各イベントと実行されるアクションを切り離すのによく利用すると思う。あとアクションが単一のクラスにカプセル化される為、Undoの実装なんかも容易になる。(何をしたかを自身がわかってるから) コマンドクラス 一番単純なCommandパターンとしては、まず「ICommand」というインターフェース
PowerShellの重要な特徴として、ファイルシステムやレジストリ、環境変数など異なるデータソースに対して共通の操作(コマンドレット)が行えるということが挙げられます。 例えば、以下のように「C」ドライブ直下に「New-Item」コマンドレットでファイルを作成できるのと同じ感覚で、 PS c:\> New-Item hoge 「HKLM」ドライブ(HKEY_LOCAL_MACHINE)に移動して、「New-Item」コマンドレットでレジストリキーが作れるといった具合にです。 PS HKLM:\Software > New-Item hoge これらはプロバイダーという機構によって成り立っています。 ファイルシステムならFileSystemProvider、レジストリならRegistryProvider、環境変数ならEnvironmentProviderと言った具合にそれぞれに対応するプロ
Eclipse用のSilverlight開発ツールであるeclipse4SLをちょっと使ってみたら意外と使えたので紹介してみる。 ダウンロードとインストールは以下のサイトを参考 http://www.eclipse4sl.org/download/ プロジェクト作成 まずはSilverilghtプロジェクトの作成(Silverlight Web Projectなんていうのもある) プロジェクト名を入力してFinish! プロジェクトエクスプローラを見るとVisual Studio 2008と全く同じ構成になっているのがわかる。 Page.xamlを開くと、これまたVisual Studio 2008とよく似た感じのスプリットされたエディタが表示された。 こんな感じでコード補完も効くようです。 でも残念ながらC#のコード補完は効かないみたいです。 とりあえずComboBoxを使ったコードを書
以前からこのブログで話しをしていた三重県で開催する.NET勉強会ですが、この度無事開催する運びとなりました。 開催日 2008/11/1 (土) 場所 津アストホール 4F 会議室3 http://www.ust.city.tsu.mie.jp/f_access.htm 参加料 無料 懇親会 三重日本海庄や アスト津店 - 3000円くらい 内容 15:20〜15:40 受付開始 15:40〜15:50 挨拶 15:50〜16:10 (20分) WPFの基礎 16:10〜16:20 休憩 16:20〜17:10 (50分) C# 3.0をはじめよう 17:10〜17:20 質疑応答 17:20〜17:30 片付け、撤収 17:30〜 懇親会(希望者のみ) 参加方法 「coma2n@gmail.com」まで下記の内容でメールを下さい。 タイトル 三重県.NET勉強会参加希望 本文 名前 :
Silverlightでカスタムのコントロールを作る場合、通常「UserControl」クラスを継承して作ることになるけど、この方法だと再利用性がかなり低い*1。 なので、「UserControl」から派生するのではなく、UIコントロールの基底クラスである「Control」クラスから直接派生して、再利用可能なコントロールを作ってみた。 参考にしたのは以下のURLの記事 WICKED CODE: Silverlight 2 のカスタム コントロールを作成する 再利用可能といっても漠然としているので、今回はテンプレートを使って外観をカスタマイズできるようにすることを目的にする。 作るのは上下ボタンで値の増減ができるご存じ「NumericUpDown」コントロール。WinFormsでは標準で用意されているけど、Silverlightには今のところないのでこれを作る。 以下は画面イメージ 画面イメ
次のページ
このページを最初にブックマークしてみませんか?
『Programmable Life』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く