サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブックレビュー
coma2n.hatenablog.jp
BooはDSLの構築に適しているという評判なので、そのへんの事を確かめてみる。 そもそもDSLとはDomain Specific Language(ドメイン固有言語)の略で、C#なんかのプログラミング言語が汎用的なのに対して、特定のドメイン(領域)に特化した言語のことをいう。 例えば、最近巷で話題のSilverlightでUIを記述するマークアップ言語であるXAMLもその一つ。本来SilverlightでのUIの構築はC#やVBで行うようになっているけど、コードで記述するのはあまりに冗長で見通しが悪いので、XAMLのような宣言型の形式を取ることでその部分を解決している(冗長なのは変わりないけどね)。 まぁ、要するにコードで書くのが面倒くさいから、なんかもっとわかりやすい表現にして楽しようということだ。 で、DSLがあると便利なもので真っ先に私が思い浮かべるものは「DIコンテナ」だ。 普段S
InfoQの以下の記事を読んでBooというCLR上で動作するプログラミング言語に興味を持った。 CLR上でのドメイン特化言語の構築 Boo自体はMonoに付いてくるので名前だけは知っていたけど、実際に触ったことがなかった*1。でもこの記事を読んでPythonベースの言語という点に惹かれてちょっと触ってみることにした。 Booの公式サイトは以下。 http://boo.codehaus.org/ Booの特徴は、 Pythonによく似た構文 静的型付けのオブジェクト指向言語 強力なメタプログラミング言語 らしい。 環境構築 まずは環境構築から。 以下のサイトから最新のバイナリ(boo-x.x.x.xxxx-bin.zip)をダウンロードしてくる。 http://dist.codehaus.org/boo/distributions/?C=M;O=D ダウンロードしたZIPファイルを解凍して、
Mike SnowsさんのブログでSilverlightでマウスの右クリックをフックする方法が紹介されていたので、やってみた。 MSDN Silverlight | Microsoft Docs 普通はSilverlightコンテンツ上で右クリックすると「Silverlightの構成」というコンテキストメニューが表示されてしまうけど、これをDOMの「oncontextmenu」イベントをフックして表示させないようにするという技。 oncontextmenuイベントをフックするのは単純に「HtmlPage.Document.AttachEvent」メソッドを使ってイベントに関連付ければいい。 Page.xaml.cs public Page() { InitializeComponent(); HtmlPage.Document.AttachEvent("oncontextmenu", On
最近仕事でもちょこちょこSilverlightを使い出してきて*1、Silverlight開発の定石みたいなものがうっすらと見えてきた。 例えば、 Silverlightだけでアプリケーションを作ろうと考えない(HTMLにはHTMLの得意なところ苦手なところ、Silverlightには(ry ) Silverilghtはより良いAjaxとして考える(JavaScriptなら大変だったことが比較的楽にできるようになる) 他にも色々あるけど、一つ一つ説明していく事にはあまり意味がないので、実際にアプリケーションを開発して実例で解説していこうと思う。 その例として今回は単純な「ドキュメント管理アプリケーション」を開発する。ちなみに今回の連載はかなり長期になると思う(また、完結するかどうかも怪しい)。 システム仕様 仕様は大きく分けて、 ドキュメント管理機能 ディレクトリ管理機能 ログインユーザ管
仕事でLINQ to SQLを使ってDBからデータを検索してくるアプリを開発していて、検索する値をスペースで区切った場合はOR検索するという仕様を実装する必要があった。 OR検索自体は以下のように論理演算子で条件をつないでいくだけ。 var result = from d in db.Document where d.FileName.Contains("値1") || d.FileName.Contains("値2") select d; こう書けるのは条件の数がわかっているからで、今回の場合は動的に条件が変わるためこの書き方はできない。SQLであれば単に文字列を連結していけばいいだけだけど、LINQの場合はそうはいかない。 なので、こういう時はExpressionを使うことになる(面倒くさいからあまりやりたくなかったけど)。ちなみに、AND条件の場合はWhereメソッドで連結すればいい
今回はPowerShellの実行環境について、私が普段使っている環境を紹介します。 ここでいう環境とはPowerShellの起動時に読み込まれるプロファイルファイルの設定についてです。 プロファイルファイルとはユーザディレクトリ配下の「WindowsPowerShell\profile.ps1」というファイルのことです。XPでは「c:\Documents and Settings\ユーザ名\My Documents\Windows PowerShell」というディレクトリに置かれています(無い場合は作って下さい)。 PowerShellは起動するとまずこのファイルに書かれたスクリプトを実行するので、よく使う変数や関数を事前に読み込んでおくことができます。 私の環境ではこのプロファイルファイルが置かれているディレクトリの構成を以下のようにしています。 ディレクトリ構成 formatディレクト
jQueryのプラグインにjTemplatesなるテンプレートエンジンがあったので使ってみる。 tpython.com - このウェブサイトは販売用です! - tPython technologie web20 ajax opensource javascript リソースおよび情報 ということで Json.NETをさわってみるで書いたJSONデータをjQueryで加工して、HTMLに整形するコードをjTemplatesを使って書き直してみる。取り扱うJSONデータは以下↓ [{"ID":1,"Name":"ジョン"},{"ID":2,"Name":"ボブ"},{"ID":3,"Name":"ジャック"},{"ID":4,"Name":"ディラン・マッケイ"}] 以前は、 $.each(data, function(i, customer) { $("#dataTable").ap
だいぶ前にPython製のWebアプリケーションフレームワークであるTurboGearsをさわってみた事があったけど、いまいちピンとこなくて、そのままほったらかしにしていた。でも、この前なんとなくさわったみたら一気に理解が進んで楽しかったので、簡単なWebアプリを作ってみることにした。 今回作るアプリはテキストファイルを作成・編集できるメモ帳アプリ「PyNote」 TurboGearsといえばデータベースを使ったものを作るのが普通だけど、めんどくさいのでこれにした。 アプリ仕様 テキストファイルの作成 テキストファイルの編集 テキストファイルの削除 テキストファイルの表示 画面 メイン画面 左側に作成したファイルの一覧を表示して、そのリンクをクリックするとファイルの内容を右側に表示する。 [新規作成]をクリックすると「新規作成画面」に遷移する。 [編集]をクリックすると「編集画面」に遷移す
TracにはWiki用のマクロをPythonで記述して簡単に組み込むための機構が用意されている。これを利用するとTracに大抵の機能は追加することができる。 そこで、今回はSilverlightコンテンツを埋め込むマクロを作ってみた。 Download Silverlight.py # -*- coding: UTF-8 -*- """ Silverlightコンテンツを埋め込みます。 Silverlightコンテンツはプロジェクト毎の「htdocs」ディレクトリに「ClientBin」というディレクトリ を作り、その下に配置する必要があります。 ex. [[Silverlight(src=Hoge.xap)]] [[Silverlight(src=Hoge.xap, width=200, height=200)]] """ from StringIO import StringIO de
PowerShellでWebサイトにアクセスして情報を取ってきて、その情報をオブジェクト(PSObject)として出力するようなスクリプトを作った。 このスクリプトはあくまでもテスト用に作っただけで、Webサイトへのアクセス方法と情報の取得方法がわかって完全に動作した段階でC#+ASP.NETで作り直すつもりでいた。 PowerShellのスクリプトでは利用できる範囲が限定されるので、ASP.NETで作り直してWebからアクセスできるようにすればより広範に使えるからだ。もちろんその時はレスポンスをXMLやJSONで出力する。 で、PowerShellからC#に書き直そうと思ったんだけど、このスクリプトがテスト用に作ったわりになかなかよくできていた。これは書き直して捨てるのはもったいないなと思って、なんとかこのまま有効活用する手はないかと考え始めた。 ・・・・・・・・・!? 「ASP.NET
PowerShellでクラス(みたいなもの)を作ってみた。 # コンストラクタ param([string]$firstName, [string]$lastName) class Person | property FirstName $firstName | property LastName $lastName | def get_FullName { return "{0} {1}" -f $this.FirstName, $this.LastName } これを「Person.ps1」というファイル名で保存する。使う時はこんな↓感じ PS > $obj = Person ディラン マッケイこのオブジェクトのメンバーを見てみると PS > $obj | Get-Member TypeName: System.Management.Automation.PSCustomObject
Silverlightでクロスドメインアクセスするには「clientaccesspolicy.xml」か「crossdomain.xml」というファイル名のポリシーファイルを使うんだけど、てっきりこのファイルをSilverlightをホストするページと同じサイトに置いておけば、そこに書いてあるサイトにクロスドメインアクセスできるもんだと思ってたんだけど、全く違うみたいね。というかそんな事ができたらセキュリティもくそもないわなw・・・orz そうじゃなくてSilverlightがアクセスするサイトに置いておいたら、そのサイトが許可するドメインのみがクロスドメインアクセスができるようになるという事だとやっと気付いた。 ようは「hoge.com」というドメインのSilverlightページがはてなブックマークの情報を取ろうと思ったら、「http://b.hatena.ne.jp」にポリシーファイ
この前のわんくま勉強会のWPF*1関連のセッションで学んだ事をメモっていく。 Silverlightにおける型変換(データと表示の分離) SilverlightというかXAMLをいじっていて困ったことは、TextBlockとかTextBoxなんかのコントロールに値をバインドする時に例えば日付を表示させる場合、DateTime型のままでバインドすると「4/29/2008 8:31:10 AM」というようなカレントのカルチャーに依存した形式で表示されることになる。 この表示形式をデータバインド時にカスタマイズする方法がわからなくて、わざわざ任意の形式の文字列に変換したり、文字列に変換するプロパティを作ってそれにバインドしたりしていた。 こんなの作ってた class Entity { public DateTime Date { get; set; } // 任意の形式に変えた文字列を返すプロパ
ところでこのコードを見てくれ・・・こいつをどう思う? Page.xaml.cs private void LayoutRoot_Loaded(object sender, RoutedEventArgs eventArgs) { var data = new[] { new { Name="A", Member=new[] { "Bob", "John" } }, new { Name="B", Member=new[] { "Cozy", "Sally" } } }; new JQuery("#button1").Click(() => { new JQuery("#content").Append( JQuery.Ul.Append( JQuery.Convert(data, o => JQuery.Li.Text(o.Name) .Append( JQuery.Ul.Append(
「System.Net」アセンブリに「HttpWebRequest」クラスがある・・・orz アセンブリ分かれてやんの。 しかも同期呼び出しをサポートしている・・・ゴクリしていなかった・・・orz。 オブジェクトブラウザで見ると「GetResponse」メソッドがあるのに、Intellisenceには表示されないし、コンパイルもできない。Silverlightこんなの多いよねぇ。 実際にPOSTしようとするとこんな感じか。 例 var data = new Dictionary<string, object>() { { "firstName", "ほげ" }, { "lastName", "太郎" } }; var postData = string.Join("&", data.Select(p => string.Format("{0}={1}", p.Key, p.Value))
最近Web上で共有するような付箋紙アプリをちらほら見かけるようになった。大抵の場合Ajaxで実装されていて、非常によくできているので感心してしまう。 こういうおもしろいアプリを触っていると自分でも作ってみたくなるのがプログラマの性ということで、最近はまっているSilverlightで作ってみることにした(というかもう作ったんだけどね)。 はじめに まずは仕様から考える。 仕様 画面をダブルクリックするとその位置に新しく付箋を貼り付けられる。 付箋を画面上に自由にペタペタ貼れて、自由に剥がせる。 付箋に書き込んだテキスト、サイズ、位置情報はサーバー上に記憶する。 付箋の色、スキンを自由に変えることができる。 画面イメージ こういうのを画面上にわんさか貼ることができる。 開発環境 Microsoft Visual Studio 2008 Standard Edition Silverlight
いいコード書いてますか? 最近読んだ「Readable Code」という本が面白かったので、その感想とためになったことを紹介したいと思います。 この本ではいいコードを読み易いコードと定義付けて、そういったコードを書くためにはどうすればいいかという事を具体的なコード例を交えて解説しています。 コードのインデントや書式などの見た目を整えるといった事から、変数の命名や意味付け、関数の構造化、デザインパターンの導入まで、その内容は多岐に渡ります。今回はその中でも特に使えそうな内容について説明したいと思います。 と、その前に個人的にいいコードの条件として考えているポイントについて説明しておきます。 俺的いいコードの条件 いいコードの条件としては、まずバグが無いというのが理想でしょう。 しかしプログラムは書いた通りに完璧に動作しますが、それを実装する人間は完璧とは程遠い不完全な代物です。バグの無いプロ
C#からPowerShellスクリプトを呼び出す方法を調べてみる。開発環境にはVisualC# 2008 Expressを使う。 前提条件として「System.Management.Automation.dll」を参照していることと、以下の名前空間をusingしていること。 using System.Management.Automation; using System.Management.Automation.Runspaces; まずは簡単にPowerShellのコマンドを実行する。 var pshEngine = new RunspaceInvoke(); var psObjects = pshEngine.Invoke("dir"); foreach(var obj in psObjects) Console.WriteLine(obj); これを実行するとカレントディレクトリに
前回のネタ↓になんの反応も無かったので、だぶん誰も興味がないんだろうけど・・・orz、まだ続ける。 SilverlightにjQueryのパワーを - Architect Life SilverlightからJavaScriptの関数が呼び出せる事は前回まででご承知の通り。 例えば以下のようなJavaScript関数がSilverlightコントロールをホストするHTMLで定義されている(もしくはincludeされている)とする。 function print(msg) { alert(msg); } この関数をSilverlight側から呼び出す場合、以下のようにする。 HtmlPage.Window.Invoke("print", "Hello, World"); こうすると「print」というJavaScript関数に「Hello, World」という文字列が引数として渡されて呼び出
さっきのやつでサーバーサイドからクライアントサイドのJavaScriptを呼び出せる事がわかったので、さっそくjQueryのラッパークラスを作ってみた。 jQuery.cs class jQuery { private static readonly HtmlWindow window = HtmlPage.Window; private ScriptObject element; public jQuery(string expression) { element = (ScriptObject)window.Invoke("$", expression); } public jQuery Text(string text) { element.Invoke("text", text); return this; } public jQuery Append(params object[
VS2008もAmazonから届いて、やっとこさSilverlight 2の開発環境が整ったのでなんか作ってみることにした。 「Silverlight Application」プロジェクトでプロジェクトを新規作成する。名前は「SLTodo」にする。 作成した直後のプロジェクト構成 画面的には、Todoの一覧を表示するリストとアイテムを追加するボタンが欲しい。 イメージ メイン画面の作成 一番最初に表示されるメイン画面にあたるのが「Page.xaml」なので、このファイルを以下のように変更する。 Page.xaml <UserControl x:Class="SLTodo.Page" xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" W
最近PowerShellばっかりやっている気がするけど、今回はPowerShellにWebDAVサポートを追加した。これを使うとWebDAVサーバー上のリソースをローカルのリソースのように扱える。 ソースは以下から OneDrive マウントの仕方 PS > New-PSDrive Hoge Web http://localhost/webdav 認証が必要なWebDAVサーバーの場合 「-Login」パラメータでユーザ名を指定する。New-Driveコマンドレットには-Credentialというパラメータがあるけど、これを指定すると何故かエラーが出てしまう。現状ではまだサポートされていないのかな? 仕方がないので「-Login」という新しいパラメータを追加した。さらっと言ったけどNew-DriveやNew-ItemなどのProviderがサポートするコマンドでは、コマンドの実装を変えるこ
なんとなくTodoアプリを作りたくなったので、PoweShellで作ってみる。 最初はスクリプトで作ろうかと思ったけど、無理がありそうだったのでカスタムProviderでやることにした。 PowerShellの特徴として、種類の違うデータに対して同一のコマンドで操作を行えるというのがある。FileSystemに対してもRegistryに対してもNew-Itemコマンドレットでアイテムの追加ができるというあれ。 この話自体は知っていたけど、実際どんなメカニズムなのか知らないので、それの勉強も兼ねてという意味あいもある。 作りたい物のイメージとしては、 PS Todo:\> dir 出力 完了 タイトル 詳細 ---- ---- ---- false テスト テストです true テスト2 テストでした Todoというドライブで「dir」をするとTodoアイテムの一覧が表示される。もちろんアイ
これでPowerShellのスクリプトを組み合わせて2chビューワを作ったけど、こんなことができるとわかって、もっとイカス2chビューワを思いついた。 ソースはあとにして、ソースは以下から OneDrive どんな風に2chをビューするかというと、 まず「2ch」ドライブにcdする。 PS > cd 2ch: PS 2ch:\> ここでdirすると・・・ PS 2ch:\> dir | more 板名 カテゴリー ---- ---------- 地震headline 地震 地震速報 地震 臨時地震 地震 臨時地震+ 地震 ふるさと納税 おすすめ ビジネスnews+ おすすめ 新型感染症 おすすめ ポイント・マイル おすすめ 面白ネタnews be なんでも質問 be 朝生 be 速報headline ニュース ビジネスnews+ ニュース ニュース速報+ ニュース ニュース二軍+ ニュース
今までチャットアプリケーションを作った事が無かったので、ためしに作ってみた。 .NETでこういうクライアント⇔サーバー間で通信をするアプリケーションを作る場合、.NET Remotingを使うのが普通。いまさらソケット開いて、がちゃがちゃリスニングしたりするのなんてめんどくさくてやってられないからね。 プロジェクト構成 NChat.Client クライアントアプリケーション(WinExe) NChat.Service サーバーアプリケーション(WinService) NChat.Interface クライアントとサーバーで共有するライブラリ(Lib) 画面イメージ クライアントのUIはこんな感じにする。 実装 まずサーバーアプリケーション側で、「ChatManager」というクラスを用意する。 public class ChatManager : MarshalByRefObject, I
ある型Aからある型Bへの変換をする処理を書く時にはよくTypeConverter型を継承して型コンバータを書いている。 型コンバータの利点は、.NET標準の機構であるというのもあるけど、変換元の型にカスタム属性で型コンバータを関連付ければ、 ↓こんな風に TypeConverter tc = TypeDescriptor.GetConverter(typeof(型)); TypeDescriptorを使っていつでも*1型コンバータにアクセスできること。変換の処理を変換元の型から切り離せるということも、プログラムの見通しをよくするのに役立つ。 そういう理由で型コンバータをよく書くわけだけど、毎回毎回TypeDescriptorを使って型コンバータを取り出して変換するのは案外めんどくさい。だからその処理をラップしたメソッドを変換元の型に ↓こんな風に [TypeConverter(typeof
いまいち、まだLINQの仕組みがよくわからない。whereやselectなどの演算子が対応する拡張メソッドにマップされたりするのはわかるけど、その式がどうやって(どこで?)SQLやらXPath(かどうかは知らないけど)やらに変換されているのかがわからない。 じゃあ理解するために自分でもLINQ to 「****」を作ってみたらいいんじゃね? ということで、身近なところでExcelワークブックやセルに対してクエリを掛けられる「LINQ to Excel」を作ってみる事にした。 イメージとしては、 指定した文字列が含まれるシートを列挙する XlsWorkbook book = new XlsWorkbook("100.xls"); var sheets = from s in book.Worksheets where s.Name.Contains("hoge") select s; for
普段使っているNAntビルドファイルのテンプレートを晒してみる。 default.build - Download <?xml version="1.0" encoding="shift-jis" ?> <!-- PROJECT_NAMEをプロジェクトに合わせて変更してください --> <project xmlns="http://nant.sf.net/release/0.85/nant.xsd" name="PROJECT_NAME" default="build" basedir="../src/PROJECT_NAME"> <!-- プロジェクトの名前 --> <property name="project.name" value="${project::get-name()}" /> <!-- フレームワークのバージョン --> <property name="framework
なんかいまいちSpring.NETの認知度というか使用率が低いみたいなので、ここらで一度Spring.NETを知ってもらうために入門的なエントリでも書いてみることにする。 普段当たり前のように使っているので、今一度何故使うのかという事を考えてみたいというのもある。 Spring.NETって? Spring.NETはIoC (Inversion of Control)*1と呼ばれる設計パターンを.NETで実現するためのフレームワークです。 最近ではDI (Dependency Injection)*2 コンテナと呼ばれていたりもします。 何ができるの? オブジェクトのインスタンス化やSingleton、Prototypeインスタンスの切り替え、オブジェクト同士の関連付けなどをXMLベースの設定ファイルで定義し、使う側はDIコンテナに対してオブジェクトを要求するだけで必要な処理を全て施したオブ
次のページ
このページを最初にブックマークしてみませんか?
『Programmable Life』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く