VB.netでプロセス間通信(IpcChannel)
最近、webネタが多いのでたまには、.netネタでも。
あまり使う事ないですが、プロセス間で情報のやり取りをしたい時があると思います。 手法は、HTTPやTCPやIPCがありますが、今回は、同一マシン上のプロセス間で行いたいと思いますので、 IPCチャンネルを利用してコーディングしたいと思います。
今回のソリューションの構成は、下記の通り。
ipclibプロジェクト ・IpcServerクラス ・IpcClientクラス ・IpcSharedObjectクラス serverプロジェクト ・form1クラス(画面) clientプロジェクト ・form1クラス(画面)
まずは、サーバー側
Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Ipc Public Class IpcServer Public Property SharedObject() As IpcSharedObject Private _channel As IpcServerChannel Public Sub New() ' チャンネルを登録 Me._channel = New IpcServerChannel("ipcsrv") ChannelServices.RegisterChannel(Me._channel, True) ' リモートオブジェクトを生成して公開 Me._SharedObject = New IpcSharedObject() RemotingServices.Marshal(Me._SharedObject, "ipccli", GetType(IpcSharedObject)) End Sub End Class
続いてクライアント側
Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Ipc Public Class IpcClient Public Property SharedObject As IpcSharedObject Private _channel As IpcClientChannel Public Sub New() ' クライアントチャンネルの生成 Me._channel = New IpcClientChannel() ' チャンネルを登録 ChannelServices.RegisterChannel(Me._channel, True) ' リモートオブジェクトを取得 Me._SharedObject = TryCast(Activator.GetObject(GetType(IpcSharedObject), String.Format("ipc://{0}/{1}", "ipcsrv", "ipccli") ), IpcSharedObject) End Sub End Class
そして、サーバーとクライント側共有するオブジェクト
''' <summary> ''' IPCプロトコル間で共有するクラス ''' </summary> ''' <remarks></remarks> <Serializable()> Public Class IpcSharedObject Inherits MarshalByRefObject ''' <summary> ''' ReceivedMessageイベントを発生される(メッセージ送信→メッセージ受信の流れ) ''' </summary> ''' <param name="message"></param> ''' <remarks></remarks> Public Sub SendMessage(ByVal message As String) 'イベントを発生させる RaiseEvent ReceivedMessage(message) End Sub ''' <summary> ''' メッセージ受信をイベント ''' </summary> ''' <param name="messsage"></param> ''' <remarks></remarks> Public Event ReceivedMessage(ByVal messsage As String) ''' <summary> ''' インスタンスの有効期間を無制限にするにオーバーライドして戻り値を無効にする ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Overrides Function InitializeLifetimeService() As Object Return Nothing End Function End Class
そして、各ipclibを画面側で呼び出します。 まず、サーバー側画面
Imports ipclib Public Class server Public Sub ReceivedMessage(msg As String) Me.Label1.Text = msg End Sub Private Sub server_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim srv = New IpcServer() '受信時のイベントを関連付け AddHandler srv.SharedObject.ReceivedMessage, AddressOf ReceivedMessage End Sub End Class
最後にクライント側画面
Imports ipclib Public Class client Private cli As IpcClient Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 'サーバ側プロセスへメッセージを送信 cli.SharedObject.SendMessage(Me.TextBox1.Text) End Sub Private Sub client_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load cli = New IpcClient() End Sub End Class
そして実行するとこんな感じでプロセス間でデータのやり取りができます。
2014年のゴールデンウィークに読むと捗りそうな本(主にチーム開発系)
もうすぐゴールデンウィークですね。 皆さん予定はお決まりでしょうか? もしまだ決まってないのであれば読書GWにしてみては如何でしょうか。
ということで、僭越ながら2014年GWに読むと2014年GW終わってから捗るかもしれない本を紹介致します。
「アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣」
アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣
- 作者: Venkat Subramaniam,Andy Hunt,木下史彦,角谷信太郎
- 出版社/メーカー: オーム社
- 発売日: 2007/12/22
- メディア: 単行本(ソフトカバー)
- 購入: 35人 クリック: 995回
- この商品を含むブログ (291件) を見る
まずはこれ。 私が強烈に影響を受けた本。こっから色々と変わりました。 まさにGWに読んだ気がします。
「アジャイルサムライ-達人開発者への道」
- 作者: Jonathan Rasmusson,西村直人,角谷信太郎,近藤修平,角掛拓未
- 出版社/メーカー: オーム社
- 発売日: 2011/07/16
- メディア: 単行本(ソフトカバー)
- 購入: 42人 クリック: 1,991回
- この商品を含むブログ (257件) を見る
でも、今のアジャイルの本と言えばこれかもしれません。 各地で読書会等のコミュニティも盛んなようです。福岡にもあります。(休眠中)
「ファシリテーション入門」
- 作者: 堀公俊
- 出版社/メーカー: 日本経済新聞出版社
- 発売日: 2018/08/11
- メディア: 新書
- この商品を含むブログを見る
アジャイル本を読んでからチーム開発のドライブに興味が沸き沸きし、ちゃんと勉強しなきゃと思いこういう本も読みました。 とても勉強になります。
「WHYから始めよ!―インスパイア型リーダーはここが違う」
- 作者: サイモン・シネック,栗木さつき
- 出版社/メーカー: 日本経済新聞出版社
- 発売日: 2012/01/25
- メディア: 単行本
- 購入: 1人 クリック: 31回
- この商品を含むブログ (8件) を見る
この本にもかなり影響を受けました。 しっかりとしたWHYがあると人は強くなれます!
「小さなチーム、大きな仕事〔完全版〕: 37シグナルズ成功の法則」
小さなチーム、大きな仕事〔完全版〕: 37シグナルズ成功の法則
- 作者: ジェイソン・フリード,デイヴィッド・ハイネマイヤー・ハンソン,黒沢 健二,松永 肇一,美谷 広海,祐佳 ヤング
- 出版社/メーカー: 早川書房
- 発売日: 2012/01/11
- メディア: 単行本
- 購入: 21人 クリック: 325回
- この商品を含むブログ (39件) を見る
数年前に読みましたが激アツです。 働き方について考えさせられます。
小さなチーム、大きな仕事―37シグナルズ成功の法則 (ハヤカワ新書juice)
- 作者: ジェイソン・フリード,デイヴィッド・ハイネマイヤーハンソン
- 出版社/メーカー: 早川書房
- 発売日: 2010/02/25
- メディア: 単行本
- 購入: 47人 クリック: 742回
- この商品を含むブログ (123件) を見る
ちなみに僕が持ってるのはこっちです。 中古しかないですが、中古でも良いんじゃないでしょうか。
「強いチームはオフィスを捨てる: 37シグナルズが考える「働き方革命」」
強いチームはオフィスを捨てる: 37シグナルズが考える「働き方革命」
- 作者: ジェイソン・フリード,デイヴィッド・ハイネマイヤー・ハンソン,高橋璃子
- 出版社/メーカー: 早川書房
- 発売日: 2014/01/24
- メディア: 単行本
- この商品を含むブログ (8件) を見る
今、朝の通勤時にちびちびと読んでいます。 昨今リモートワークが激アツなので将来的なことも考えてこの機会に読んでおこうと思っています。
「なぜ、あの部門は「残業なし」で「好成績」なのか? 6時に帰る チーム術」
なぜ、あの部門は「残業なし」で「好成績」なのか? 6時に帰る チーム術
- 作者: 小室淑恵
- 出版社/メーカー: 日本能率協会マネジメントセンター
- 発売日: 2008/12/30
- メディア: 単行本
- 購入: 8人 クリック: 175回
- この商品を含むブログ (75件) を見る
刺激的なタイトルに惹かれて購入。 内容も素晴らしいです。
「Clean Coder プロフェッショナルプログラマへの道」
- 作者: Robert C. Martin,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2012/01/27
- メディア: 大型本
- 購入: 12人 クリック: 645回
- この商品を含むブログ (36件) を見る
2年前ぐらいに新入社員が入ってきたタイミングで社内で読書会をした本です。 エンジニアとしてのあるべき姿がここにあります。
「リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)」
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (140件) を見る
ソフトウェアは成長させないといけない。 その場しのぎで意味不明の命名をしてコードを書いていると後々の成長の弊害になる。 コードで意思を伝えれるようにと思うわけです。
「架空升野日記」
- 作者: バカリズム
- 出版社/メーカー: 辰巳出版
- 発売日: 2008/12/10
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 23回
- この商品を含むブログ (12件) を見る
最後はこれ。おもしろいです。 休日の昼下がりなんかに読むとシフォンのような気持ちになれます。
何も考えずに挙げてみましたが結果的にチーム開発系が多くなりました。特に最後のやつ。
ということで、ゴールデンウィークをエンジョイしましょう!
JavaScriptフレームワークでデータバインディングを試してみる(Knockout.js編)
photo credit: Severin Sadjina via photopin cc
こんにちは。 去年から引き続き今年も花見が出来なかったのでがっかりしている中原です。
花見の話は置いといて、今回もJavaScriptでのデータバインディングについてです。 使用するのはKnockout.js。公式サイトは以下です。
以前のRactive.jsで作成したサンプルと同じものをKnockout.jsで実装してみました。 Ractive.jsの記事は以下です。
JavaScriptフレームワークでデータバインディングを試してみる(Ractive.js編) | tech.ewdev.info
結果的にはこういう画面を作りました。 (下の画面は実際に動作します)
「add tweet」ボタンを押すと入力した内容が下に一覧で表示されます。 また、Filterのテキストボックスで一覧のフィルタリングもできるようになっています。
HTMLはこんな感じで、KnockoutのModelとバインドする場合は「data-bind」属性を記述します。
JavaScript側はこんな感じ。 バインドするプロパティとメソッドを記述したModelを作成し、最後にko.applyBindings! これでHTMLとバインドされます。
言うまでもなくView(Html)とModel(JavaScript)がバインドしているので、双方向で値が連動されます。 個人的にですがデータバインディングは軽快な気持ちで実装が出来る気がしてます。
てことで、これからWebアプリを作成する際にはKnockout.jsも検討してみてはどうでしょうか。 ちなみに日本語ドキュメントもあるので、Ractive.jsよりは取っ付き易いと思います。
WPFの画面でジェネリック・クラスを継承
WPFの画面でジェネリック・クラスを継承させることってできるのかな? と思い調べてみたらできました。
こんな感じです。
まず、継承させるジェネリック・クラスを作成します。
namespace WpfBaseWindow { public abstract class BaseWindow<T> : System.Windows.Window where T : BaseWindow<T> { } }
そして、このBaseWindowを継承した画面を作成します。
C#のコード
public partial class MyWindow: BaseWindow<MyWindow> { public MyWindow() { InitializeComponent(); } }
xamlコード
<base:BaseWindow x:Class="Sample.MyWindow" x:TypeArguments="local:MyWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Sample" xmlns:base="clr-namespace:WpfBaseWindow;assembly=WpfBaseWindow" Title="MyWindow" Height="1024" Width="1280" WindowStartupLocation="CenterScreen"> <Grid> ・・・ </Grid> </base:BaseWindow>
xamlでは「x:TypeArguments」を使ってジェネリックの制約型引数をコンストラクターに渡すことができるみたいです。
Node.jsでWebアプリケーション
最近よく耳にすることが多くなったWebアプリケーションと言えば、Node.jsですよね!! 今回はJavaScript Webアプリケーションの「Node.js」について紹介したいと思います。
1.Node.jsとは
そもそもJavaScriptはクライアントサイドでは?と思っているかもしれませんが、 今やJavaScriptはサーバサイドでも動作します。それを可能にするのがNode.jsです。
Node.jsとは、JavaScriptがサーバ上でプログラムを実行できるように、ファイルやネットワークI/Oなど多くの機能を備えたもので、軽量なネットワークアプリケーションを構築できるプラットフォームです。
2.注目されている理由は?
近年のスマートフォン、タブレットの急速な普及により、JavaScriptの需要が増えたことが注目されている一つの理由です。 また、HTML5/CSS3の出現で、Web系には必須のスキルとなっているのがjavascriptなのです。
3.何がいいの?
・環境構築が手軽 Windows、Mac、UNIX系のどのOSでもインストールするだけで環境構築ができる。 →もちろんPATHは設定しないといけないけど。。
・サーバーサイドとクライアントサイドを一つの言語で開発できる 今までのWeb開発はたくさんの言語を組み合わせて実現していたが、Nodeを使えばサーバーからクライアントまですべてJavaScriptだけでよい。
・リアルタイムWebが可能 タイムラグなし(リロードせず)に情報を更新できる。Facebookなどによく使われている手法。
・ノンブロッキングI/Oを採用 例えば、データベースに問い合わせ→結果の受け取り→後処理をコールバックで行う。 このように基本的に重い入出力処理を非同期で実行することができる。
・イベントループ方式を採用 リクエストやコールバックの発生はイベントとして扱い、そのイベント処理が終わったら、次のイベントを処理するといったように 待ち合わせを行い順番に処理することでアクセスが集中したときにも対応できる
・ライブラリが豊富 WebSocket、HTML記述の効率化(jade)やjsの圧縮(uglifyjs)、テスト(karma)、デバッグ(weinre)などたくさんのライブラリがある。
・学習には最適 言語の基本的なことが理解でき、オブジェクト指向も身につく。
4.何ができるの?
これにより、今までなにかと面倒だったチャットなどが手軽に作れるようになります。 もはやjsだけでなんでもできてしまう時代。。
インストール方法は、簡単なので割愛。→ググってみて!! 次回は、実際にNodeを使って簡単なチャットを作ってみたいと思います。