雑記帳

ブログを使わずにArrangeNoteで作っている公開雑記帳

Jan 10, 2008 - UdpClientひでえ

UdpClient.BeginSendやUdpClient.BeginReceiveに渡したcallbackは常に非同期で呼び出されるのかと思っていたら、ときどきBeginSendやBeginReceiveの中から同期呼び出しされる場合があることが判明。ひでえ。

IAsyncResult.CompletedSynchronouslyがtrueって何なんだよ。orz

Jan 02, 2008 - 本当に地デジだけになるの?

昨年、実家のテレビが映らなくなってきたのでAQUOSを買ったのですが、 父の使い方を見ていると、BSデジタルと地上アナログしか視聴していません。

どういうことなのかというと、地デジが視聴に耐えられないような映像しか送られてこないからです。 まるで帯域の狭いインターネット接続環境でストリーミング再生しているような感じです。

こんな状況で地上アナログ放送が終了すると、私の実家の地域(能登半島の入り口)では地上波放送が受信できなくなるのではないか?と心配です。

Jan 01, 2008 - 今年はWPFでGO!

明けましておめでとうございます。

今年は.NET Framework 3.5とIronPythonで新年を迎えております。 昨年までWin32 APIとC++で頑張ってきましたが、 .NET Frameworkの機能がPlatform SDKで提供されてきた機能を凌駕するようになってきたこととIronPythonの機能が優れていてActiveX Scripting Hostより使いやすくなっていることが分かったので、 今後は.NET Frameworkを前提にしたソフトウェア作りに移っていこうと思っています。

デスクトップアプリケーションの開発者としては、WPFのビジュアルが魅力的に感じるのはもちろんなのですが、WPFを実際に使い始めて分かったのは、クラスライブラリの設計がとても洗練されているということです。

例えば、WPFのクラスライブラリがDependency Propertyですが、2つのインスタンスがそれぞれ保持している値(プロパティ)をBindingで互いに関連付けることができます。 通常、WPFのFramework Elementのプロパティと関連付けて用いるかと思いますが、自前のクラス同士で関連付けるときにも使えるのではないかと思っています。

from mywpf import *

class FooObject(DependencyObject):
	def __init__( self ):
		pass
	def __GetFoo( self ):
		return self.GetValue( FooObject.FooProperty )
	def __SetFoo( self, value ):
		self.SetValue( FooObject.FooProperty, value )
	Foo = property( __GetFoo, __SetFoo )

FooObject.FooProperty = DependencyProperty.Register( 'Foo', String, FooObject )

class BarObject(DependencyObject):
	def __init__( self ):
		pass
	def __GetBar( self ):
		return self.GetValue( BarObject.BarProperty )
	def __SetBar( self, value ):
		self.SetValue( BarObject.BarProperty, value )
	Bar = property( __GetBar, __SetBar )

BarObject.BarProperty = DependencyProperty.Register( 'Bar', String, BarObject )

foo = FooObject()
bar = BarObject()
BindingOperations.SetBinding( bar, BarObject.BarProperty, Binding( 'Foo', Source=foo, Mode=BindingMode.TwoWay ) )
foo.Foo = 'This is Foo.'
print bar.Bar
bar.Bar = 'This is Bar.'
print foo.Foo

一組のプロパティ同士での関連付けなら設定関数を作って互いの設定値を同期すればよいでしょうけど、 プロパティの数が膨大になってくると設定関数による方法ではコードの整合性を維持するのが辛くなっていくことでしょう。

記事の一覧

Copyright © 2008 Koichi Yamamoto