Twitter始めました

夏になれば、冷やし中華が始まりますが(もう始まっているところも多いけど)、

Twitter を始めました。

http://twitter.com/moonmile

おまけに、いたばし起業塾の非公式 Twitter も。

http://twitter.com/teamitabashi

昔から、「日記」を書いているものとしては(別のサイトにあります)、自己表現としての発信は、こんな経緯です。

1. WEBサイトに、HTMLで日記を書いて、FTP でアップ。

→ 自分は perl スクリプトを書いて整形して、自動アップ

2. 無料ブログが流行り始めて、ブラウザでアップ。

→ 自分は、あらかじめエディタで書いて、ブラウザにぺたり(消えると悲しいし)

3.1 アメブロで、テーマを決めてブログを書く(営業的に)。

→ 人格を装うというのもあるけど、装飾された人がら≒想像しやすい像、を決める、と。

3. Twitter で、思考の垂れ流し?

→ いま、ここに来たところ。

 

交流としての手段は、こんな流れで。

1.パソコン通信

→ パソコン通信やってました。お金がなくてニフティとかじゃなくて、地元の小さなサイトとかで。

2.直接メールでのやり取り

→ 電子メール以前は、大学のサークルか家族の対面/電話ですよね。

2.fjなどのニュースサイトの利用

→ 少し緩い繋がり、プログラマ系の連帯感ってやつです。

3.メーリングリストに加入

→ VBのメーリングリストに入って、日に100通とか。プログラム系は応答が盛んだったころ。

4.WEBサイトに設置できる掲示板(CGIベース)

→ 個人ベースになるので、こじんまりとしてるけど、プログラム系だけじゃない集まりができましたね。

5.再び、メールベースを利用

→ スカイプには慣れなくて(あのIP電話特有の応答の遅延が…)、メールのやりとり。

→ チャットはあまりしないほう。

6.そして、Twitter?

→ 交流としては「緩い」ほうなのか、思考的には「選択」して、かえって結びつきが強くなるのかは不明です。

 

ただ、Twitterにはまると、Twitterが廃れたときに悲しいかな~、と思っているので、あまりハマらないように、と。それに、ブログや掲示板と違って情報が残らない(イギリスだったか、Twiterの記録をアーカイブし始めましたが)ので、そこは注意が必要ですよね。

最近思うのは、

1.ブログやメールベースで知り合う(あるいは、一方的に見る)。

2.一回、何かで会ってみる。

3.その後、メールやTwitterで繋がりを保つ。

のが、よさげです。

 

いたばし起業塾の重鎮の方と話していると、自分が若い or 幼いことを実感できるので、さらによしw

いえ、決して若作りという訳ではありませんがw

カテゴリー: 雑談 | 2件のコメント

Visual Studio 2010 インストール完了

そんな訳で、MSDNのVisual Studio 2010 Professional版のインストールが完了しました。

英語のほうは、ベータ版、RC版、と続いたので、外見が分かっているのですが、まぁ、速報ということで。

DVDを作成して(私は、VMWare上で)、インストール開始。おなじみの画面が出ます。青が基調になりましたね。

001

 

インストールコンポーネントを読み込んで、

002

 

同意をして、

004

 

中身をみるために「カスタム」を選んで、

005

 

Visual F# と、SharePoint が増えていますね。

すべてインストールすると、7.1GB必要になります(他にヘルプも入るので+1GBぐらい)

006

 

たくさんのコンポーネントがインストールされます。

007

 

.NET Frameowork 4をインストールした後で、再起動します。

009

 

すべてが成功したら、ヘルプ(ドキュメント)をインストールします。

010

 

通常は、オンラインコンテンツです。

オフラインコンテンツの場所が変わっています。

011

 

必要なものを「追加」でインストールしておきます。

012

 

ローカルライブラリの完了

014

 

さて、これでインストール完了です。

次は、Visual Studio 2010 を起動すると、最初だけ環境設定をします。

016

 

しばらく経って、

018

 

Visual Studio 2010 が起動できました。

019

スタートページが変わっていますが、2008と似たような感じです。RC版にあった、WPF風の画面はやめちゃったようです。

 

さて、プロジェクトを新規に作成するところを見ていくと、

■C#でWindows フォーム

020

■C#でASP.NET MVC 2

021

■Visual C++ で CLR

022

■F#アプリケーション

023

ああ、そう、F#もあるんです。

 

C#でWindowsフォームのプロジェクトを作成すると、

024

な感じです。2008とほとんど変わりません。

ツールボックスのコンポーネントは少し増えていますね。チャートとか。

 

変わっているのは、オンラインヘルプで、「ヘルプ」を選ぶと、IEが開きます。

025

Formの上でF1キーを押すと、フォームのヘルプにジャンプします。

026

2008の時のオンラインドキュメントは結構重かったので、これは良くなりました。

 

さて、本当に .NET Framework 4 になるのかな?と見ると、

027

ほら、「v4.0.30319」となっていますね。

2008の時は、v3 や v3.5 が混在し、ASP.NET は v2 を参照していましたが、.NET Framework 4 は全て、v4 の配下を参照することになります。

と言う訳で、ひとまず、環境はOKってことで。

カテゴリー: 雑談 | Visual Studio 2010 インストール完了 はコメントを受け付けていません

Visual Studio 2010 ダウンロード中

http://msdn.microsoft.com/ja-jp/subscriptions/default.aspx

20100421_03

お昼現在、ダウンロード中です。

2.5GBなので、うちの場合は500KB/sec弱なので、2時間ぐらいですかねぇ。

意外とスムースに接続できて、順調にダウンロードできています。前の時は結構ぷちぷち切れていた覚えが。

カテゴリー: 雑談 | Visual Studio 2010 ダウンロード中 はコメントを受け付けていません

Visual Studio 2010 まだ~

 

MSDNでは、昨日(4/20)リリースの予定ですが、現時点(4/21 0:31)で、やっとリリースのようです?

20100421_01

http://msdn.microsoft.com/ja-jp/subscriptions/default.aspx

って、タイトルは出ているんですが、ログインすると見当たりません。

ん~、英語版は4/12にリリース済みなんだけど、日本語版はまだベータ版しかありません。

フライング?

カテゴリー: 雑談 | Visual Studio 2010 まだ~ はコメントを受け付けていません

再開宣言

ちっとばかし、更新が途絶えていましたが、ブログの更新を再開します。

再開するにあたって、方針を変更(ま、個人的な宣言みたいなもので)。

■出し惜しみしない

いろいろ、まとめた後にブログに書こうと思っていたのですが、結構手間がかかります。
インターネットに流れる以上(信用の問題もあるしね)、「正確性」も重要なのですが、そこそこ「速報性」も重要ですよね。自分のモチベーションにも関わるので、以前のブログで書いていた「お裾分け、だだもれ状態に、移行しようかと考えています。

このブログは、正式なものになる(予定)ですよね、速々報みたいなのは、

システム開発の見積もりブログ

などで、「ちょっと無責任っぽく」書いていきます。交渉テクニックも含めて、ぽちぽちと。あと、アメブロのみなさんのぺたをぽちぽち押しています(笑)。

 

■お仕事に繋げる

ここ、名前がでていませんが、もうちっとお仕事に繋がるようなスタイルにしようと思います。先週になりますが、先日、WEB系技術電脳日記のコニカさんの話を聞き、やっぱり、ホームページから問い合わせができないのは、もったいないかなぁ、と思うようになりました。つーか、ちゃんと露出しようよ>自分。

そんな訳で、専門の.NETプログラミングもそうなんですが、長年やってきた(そして、お仕事にもする)システム開発の勘所も含めて、お問い合わせができる状態を作ります。

方針的には、システム開発株式会社さんにならって、

  • 予算、規模見積もりは無料。
  • 相場の金額は、ホームページに提示。

そして、自分の特技を活かして

  • システム設計、概要設計ぐらいを、がっと無料でやって、1時間ほど対面でプレゼンテーション
  • 開発規模によっては、知り合いの会社を紹介。
  • WEBデザインなんかも、知り合いのデザイナさんを紹介。
  • 小さいもの(Excel VBAとか、.NETでのWindowsアプリとか)ぐらいであれば、手元で。
  • 開発会社のプログラミングや開発プロセスの教育もやるよ(サポートとかも)

なんてのを考えています。

建築や自動車、不動産の場合は、必ず

「ご予算はいくらですか?」

と聞かれますよね。そいういう感じでIT会社をやっていきたいです。

あと、技術系の本もぼちぼちと、続けていきます(出版社的にw)

■WEBサイトの更新

という訳で、トップページ

http://moonmile.net/

が、あまりにいい加減(苦笑)なので、なんとかしましょう>自分。

# トップページがあまりにも、なので名刺のほうは、ブログのURLになっていたりします(苦笑)

TODOとしては、

  • トップページを、「見て安心」できるぐらいにする。
    → 営業的にSEO的に、ともあるけど、それはまた後で。
    → WEBデザインは、内容を考えたら専門の方に頼むかな(やっぱり餅屋や餅屋)
  • WEBから問い合わせをできるようにする。
    → メールでも敷居が高いし、無料ならばテンプレートを使って、さっと送れるほうがいいよね。
    → 電話を載せるかどうかは、要考察(仕事にするならば、仕事用の電話番号ぐらいあるべきか)
  • 要件定義、システム設計、概要設計のサンプルを載せる。
    → がっ、と書いて、どしどし載せる。
    → ここで、出し惜しみをしない(ことにする!)
    → ここが、私のお仕事の中心になるところがだからね!
  • あとは、仕事のスタイルや、仕事の流れをぽちぽちと図に書く。
    → いわゆる、保険の契約の流れとか、自動車を購入するときの流れとか、そんな感じ。
    → 最近では、小さめのIT会社は、だいたい載せている。
    → お客から見れば、先行き、どんなことをやるのか、が見えたほうが「安心」。

■お仕事のお相手

最近は、執筆が長々と続いて出版社の方とお話することが多いのです。まぁ、それはそれでいいのですが、微妙なんですよね、金額が…(と言っていいものやら…)。当然、執筆は「広告」と「開発者の底上げ」を目指して頑張るわけですが、一応、IT会社の顧客対象としては、

  • 地元(東京都板橋区)の中小企業を優先(数名の工場経営者さんとか)。
  • 都内の中小企業/工場さん。

な感じを考えています。

官庁か民間かは問わずに。地方の場合は、プレゼンが難しくなるので、要検討かな。パワーポイントでやりとりができれば、それも含めたいんだけど、まずは、ページを改修してからですね。

 

そうそう、既存システムの再見積もり、をやろうと思います。

  • 昔構築(って言ったって10年前とか)したシステムを最新に直したいとか
  • WEBサイトを運営してもらっているけど、なんか高い感じがするとか

最近だと、CMSを使うと自分たちで更新ができたり、PHPでさくっとできちゃう個人事業主の方とかがいらっしゃるので、ランニングコストの見直しができますよね。生命保険の見直しは、ちょっとアレなんですが、ITシステムの見直しはランニングコストを割り出して、投資効果率を割り出して、広告/宣伝費をどれくらい使えるのか、を経営的に考え直してみましょう、ってやつです。

幸いにして、決算書作成や財務会計、簿記、社会保険なんかの手続きをひと通り経験したので、経営的な視点でIT開発を眺められるようになりました。なので、今度は、

  • お客の視点から、お金の視点でIT開発を見直す

というのを考えていきます。単なる費用削減じゃなくて、費用対効果も含めてです。

カテゴリー: 仕事 | 2件のコメント

WPFでコントロールをドラッグ(1)

Thumbコントロールでドラッグ
http://www.moonmile.net/blog/archives/698

で、スクロールバーで使われる Thumb コントロールを使ってドラッグを試してみましたが、このままでは単純な四角(決められたスタイル)しかドラッグできません。
Thum コントロールを少し工夫して、色々な形のコントロールも移動ができるようにする、ことは可能だとは思うのですが、いささか面倒です。つーか、もともとやりたいことは、普通のコントロールのドラッグ、あとはコントロールを配置してマウスで移動、なんてのを想定しているので、Thumb コントロールでは都合が悪いのです。コードの見通は悪くないんだけどね、XAMLが奇妙な感じになりそう。

そんな訳で、普通のコントロール(Ellipseコントロール)を移動させてみます。

■Window1.xaml

<Window x:Class="SampleDrag.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="400">
    <Canvas Name="board">
        <TextBlock Canvas.Left="0" Canvas.Top="0" Height="21" Name="textPos" Width="119" Text="x:0 y:0" />
        <Ellipse Name="mark0" Canvas.Left="28" Canvas.Top="43"
                 Height="30" Stroke="Black" Width="30" Fill="Pink"
                 MouseLeftButtonDown="mark0_MouseLeftButtonDown"
                 MouseLeftButtonUp="mark0_MouseLeftButtonUp"
                 MouseMove="mark0_MouseMove"
                 />
    </Canvas>
</Window>

■Windows1.xaml.cs

/// <summary>
/// Window1.xaml の相互作用ロジック
/// </summary>
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void printPos( UIElement el)
    {
        int x = (int)Canvas.GetLeft( el );
        int y = (int)Canvas.GetTop( el );
        textPos.Text = string.Format("x:{0} y:{1}", x, y);
    }

    private bool _isDrag = false;
    private Point _dragOffset;

    /// <summary>
    /// ドラッグ開始
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void mark0_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        UIElement el = sender as UIElement;
        if (el != null)
        {
            _isDrag = true;
            _dragOffset = e.GetPosition(el);
            el.CaptureMouse();
        }
    }

    /// <summary>
    /// ドラッグ終了
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void mark0_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        if (_isDrag == true)
        {
            UIElement el = sender as UIElement;
            el.ReleaseMouseCapture();
            _isDrag = false;
        }
    }

    /// <summary>
    /// ドラック中
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void mark0_MouseMove(object sender, MouseEventArgs e)
    {
        if (_isDrag == true)
        {
            Point pt = Mouse.GetPosition(board);
            UIElement el = sender as UIElement;
            Canvas.SetLeft(el, pt.X - _dragOffset.X);
            Canvas.SetTop(el, pt.Y - _dragOffset.Y);
            printPos(el);
        }
    }
}

ざっと説明すると、

1.移動したい XAML のコントロールに3つのイベントを付けます。

 MouseLeftButtonDown="mark0_MouseLeftButtonDown"
 MouseLeftButtonUp="mark0_MouseLeftButtonUp"
 MouseMove="mark0_MouseMove"

マウスの左ボタンを押した時と離した時、そして移動しているときです。

このそれぞれのイベントに、ドラッグの処理を入れていきます。

private void mark0_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    UIElement el = sender as UIElement;
    if (el != null)
    {
        _isDrag = true;
        _dragOffset = e.GetPosition(el);
        el.CaptureMouse();
    }
}

左ボタンを押した時にドラッグを開始させます。
このとき、ドラッグ中のフラグ(_isDrag)を設定することと、マウスの相対位置(ドラッグするコントロールの左上からの相対位置)を e.GetPosition で取得して _dragOffset に保存しておきます。
これらはドラッグ中の時の、コントロールの移動に使います。

el.CaptureMouse() は、マウスコントロールをキャプチャするためのメソッドです。これがないと、マウスを素早く動かしたときに追随できません。

private void mark0_MouseMove(object sender, MouseEventArgs e)
{
    if (_isDrag == true)
    {
        Point pt = Mouse.GetPosition(board);
        UIElement el = sender as UIElement;
        Canvas.SetLeft(el, pt.X - _dragOffset.X);
        Canvas.SetTop(el, pt.Y - _dragOffset.Y);
        printPos(el);
    }
}

マウスを動かしているときのイベントでは、ドラック中かどうかを調べます。これは、コントロール上でマウスを動かしたときでも、このイベントが発生するためです。

移動するコントロールの位置は、Mouse.GetPosition でボタンの位置を取得して、先ほど保存しておいた _dragOffset だけシフトさせます。board は、ドラッグするコントロールが乗っている canvas コントロールの名前です。

canvas に対する位置の設定は、Canvas.SetLeft と Canvas.SetTop を使います。
このあたり、本来は拡大率を計算する必要があるのですが、通常ドラッグは等倍で行われるので、簡単のためそのまま計算します。

private void mark0_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (_isDrag == true)
    {
        UIElement el = sender as UIElement;
        el.ReleaseMouseCapture();
        _isDrag = false;
    }
}

そして、マウスを離したときは、ドラッグ中のフラグ _isDrag を false にして、マウスのキャプチャを ReleaseMouseCapture メソッドで解放します。

これを実行すると

<001>
20100325_01

から

<002>
20100325_02

のようにマウスでドラッグできます。

Silverlight版は
http://moonmile.net/sl/SampleDrag/ 
で実行できます。
さて、コントロールを移動することができました。
しかし、このままでは xaml にいちいちイベントを追加しないと駄目ですよね。複数のコントロールを動かしたい場合は、大変なことになりそうだし、新しいコントロールを動的に追加したときなんか、どうやるんだろう? ってこといなりそうですね。

というわけで、今回はイベントを xaml にイベントを直に書きましたが、次回はこれを動的に追加できるようにします。

カテゴリー: 開発 | 4件のコメント

IIS7.0 基本のき(補講7)

補講の7回目(最終回)です。
今回は、ちょっと…いえ、かなり便利な URL書き換え(url rewrite)の機能です。

URL書き換えというのは、CGIでよくある。

http://localhost/sample/page.aspx?year=2010&month=03&day=04

みたいな URL を

http://localhost/sample/2010/03/04

のようなアドレスでもアクセスできるようにするモジュールです。

# 実は、新しい ASP.NET ではこの機能も含まれているのですが、SE としては
# IIS で対応したほうがいいのかな、と。

Microsoft URL Rewrite Module 1.1 for IIS 7 (x86)
http://www.microsoft.com/downloads/details.aspx?familyid=DBA94A96-E513-4F87-9082-8CB04B743793&displaylang=ja
Microsoft URL Rewrite Module 1.1 for IIS 7 (x64)
http://www.microsoft.com/downloads/details.aspx?familyid=D05111C1-B4F7-45F3-8F60-A8F2B9D49ED1&displaylang=ja

これをインストールすると、IISマネージャにアイコンが現れます。

<019>
20100303_019

アイコンをクリックすると設定されたルールが出ます。

<020>
20100303_020

ここでは何も設定していないので、何もありません。

さて、ここでIIS独自のルールを設定する訳ですが、便利な機能があります。
apache の mod_rewrite と互換を持たせるために、.htaccess ファイルをインポートできます。
このため、既存の PHP の OSS の設定がそのまま使えます。便利ですねぇ。

~~

という訳で、「IIS 7 の基本のき」の補講はおしまい。
長い、っーか、.NETラボよりも長く見えるのは、まぁ、気のせいということで(苦笑)

カテゴリー: 設計 | IIS7.0 基本のき(補講7) はコメントを受け付けていません

Thumbコントロールでドラッグ

WPFやSilverlightの表示は、XAMLで作成されているので、うまくやれば Windows アプリケーションの図形移動よりも楽に移動ができる…ハズです。

Windows コントロールの場合は、ボタンなどのような標準コントロールの場合はドラッグ&ドロップのイベントが用意されているのですが、四角や文字などを移動しようと思うと途端に難しくなります。
# マウスイベントを拾って移動すればいいだけなのですが、まあ、
# 面倒と言えば面倒。図形のサイズを変えようとすると、ひと苦労だし。

WPFやSilverlightのビューは、XAMLで書かれているので、ここの値を直接書き変えてやれば、移動や回転などができます。ボタン以外も、矩形や円なども同様に移動などができるわけです。

で、実際にやってみたのですが、結果を言えば、やっぱり「ひと苦労」ですね。
矩形のハンドル(四隅にある四角)を使って大きさなどを変えようと思うと、ハンドル自身のマウスダウンイベントや、移動のイベントなどを拾う必要があります。
さて、具体的な例は、もう少しソースを整理してから紹介することにして。

実は WPF と Silverlight には、あらかじめドラッグできるコントロールが用意されています。これが、「Thumbコントロール」なのです。リストボックスなどのスクロールバーに使われています。

Thumb クラス
http://msdn.microsoft.com/ja-jp/library/system.windows.controls.primitives.thumb.aspx
で、結論を先に言うと、これを使って汎用的なドラッグできるコントロールができるかというと、「できません!」。あくまで、スクロールバーなどに使うコントロールで、一般的な形になっていません。なので、色やら枠線やらが固定になっています。

ま、ひとつ、参考までにソースを晒しておきます。

■WPFの場合

<001>
20100310_001

<Window x:Class="SampleThumb.Window1"
    xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
    Title="Window1" Height="300" Width="400">
    <Canvas>
        <TextBlock Canvas.Left="0" Canvas.Top="0" Height="22" Name="textPos" Width="75" Text="x:0 y:0" />
        <Rectangle Canvas.Left="46" Canvas.Top="48" Height="70" Name="rectangle1" Stroke="Black" Width="109" Fill="pink"/>
        <Thumb Canvas.Left="141" Canvas.Top="103" Height="30" Name="mark"  Width="30" Background="LightBlue"
               DragCompleted="mark_DragCompleted"
               DragStarted="mark_DragStarted"
               DragDelta="mark_DragDelta"
               />
    </Canvas>
</Window>

 

namespace SampleThumb
{
    /// <summary>
    /// Window1.xaml の相互作用ロジック
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void printPos( UIElement el)
        {
            int x = (int)Canvas.GetLeft( el );
            int y = (int)Canvas.GetTop( el );
            textPos.Text = string.Format("x:{0} y:{1}", x, y);
        }

        /// <summary>
        /// ドラッグ開始
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mark_DragStarted(object sender,
            System.Windows.Controls.Primitives.DragStartedEventArgs e)
        {
            mark.Background = Brushes.Pink;
            Debug.Print("start");
        }
        /// <summary>
        /// ドラッグ終了
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mark_DragCompleted(object sender,
            System.Windows.Controls.Primitives.DragCompletedEventArgs e)
        {
            mark.Background = Brushes.LightBlue;
            Debug.Print("end");
        }

        /// <summary>
        /// ドラッグ中
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mark_DragDelta(object sender,
            System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {
            printPos(mark);
            Canvas.SetLeft(mark, Canvas.GetLeft(mark) + e.HorizontalChange);
            Canvas.SetTop(mark, Canvas.GetTop(mark) + e.VerticalChange);
        }
    }
}

肝は、Thumb コントロールの3つのイベントです。

・DragStartedイベント
・DragCompletedイベント
・DragDeltaイベント

ドラッグ中は、DragDeltaイベント内で、mark(移動するThumbコントロール)の位置を変更します。位置は、canvas を使って簡便に、SetLeft、SetTop メソッドを使っています。

■Silverlightの場合

まったく同じものが Silverlight でも動作します。

<002>
20100310_002

<UserControl x:Class="SampleThumbSilverlight.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
    xmlns:d="<a href="http://schemas.microsoft.com/expression/blend/2008">http://schemas.microsoft.com/expression/blend/2008</a>" xmlns:mc="<a href="http://schemas.openxmlformats.org/markup-compatibility/2006">http://schemas.openxmlformats.org/markup-compatibility/2006</a>"
    mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="300">
    <Canvas x:Name="LayoutRoot">
        <TextBlock Canvas.Left="0" Canvas.Top="0" Height="22" Name="textPos" Width="75" Text="x:0 y:0" />
        <Rectangle Canvas.Left="46" Canvas.Top="48" Height="70" Name="rectangle1" Stroke="Black" Width="109" Fill="pink"/>
        <Thumb Canvas.Left="141" Canvas.Top="103" Height="30" Name="mark"  Width="30" Background="LightBlue"
               DragCompleted="mark_DragCompleted"
               DragStarted="mark_DragStarted"
               DragDelta="mark_DragDelta"
               />
    </Canvas>
</UserControl>

 

namespace SampleThumbSilverlight
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void printPos(UIElement el)
        {
            int x = (int)Canvas.GetLeft(el);
            int y = (int)Canvas.GetTop(el);
            textPos.Text = string.Format("x:{0} y:{1}", x, y);
        }

        /// <summary>
        /// ドラッグ開始
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mark_DragStarted(object sender,
            System.Windows.Controls.Primitives.DragStartedEventArgs e)
        {
            mark.Background = new SolidColorBrush(Colors.Orange);
        }
        /// <summary>
        /// ドラッグ終了
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mark_DragCompleted(object sender,
            System.Windows.Controls.Primitives.DragCompletedEventArgs e)
        {
            mark.Background = new SolidColorBrush(Colors.Purple);
        }

        /// <summary>
        /// ドラッグ中
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mark_DragDelta(object sender,
            System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {
            printPos(mark);
            Canvas.SetLeft(mark, Canvas.GetLeft(mark) + e.HorizontalChange);
            Canvas.SetTop(mark, Canvas.GetTop(mark) + e.VerticalChange);
        }
    }
}

Siverlight の動作はこちらで確認できます。

http://www.moonmile.net/sl/SampleThumb/

 

という訳で、Thumbコントロールは汎用的ではないので「使えない」。
仕方がないので、MouseLeftButtonDown イベントなどを地道に取得することになります。

~~ 2010/04/01 追記 ~~

「使えない」と思っていたのですが、Template 化して使うことができました。
となると、自前でドラッグフラグを作らなくていいから、Thumb コントロールは使えるのでは?

カテゴリー: 開発 | 2件のコメント

IIS7.0 基本のき(補講6)

補講の6回目です。

2年程前から、PHP on IIS というプロジェクトが走っています。
IIS上(Windows上)で、PHPを動かす、かつ、他の PHP アプリをインストールして動かす、というプロジェクトです。

いわゆる、LAMP環境(linux, apache, mysql, php)を、

windows + iis + mysql + php

で動かそうという試みです。試みとはいえ、結構実用段階で、mysql と php が同時に入ってくれるのが便利なところです。

# php + sql server という組み合わせでもありなのですが、PHP で作成された OSS の
# ほとんどが、mysql を使うので、mysql + php が主な組みわせになります。

さて、Windows ではあっても、PHP + MySQL を入れようとすると、結構手間がかかります。さらに、OSS を入れようとすると、かなり手間がかかります。

そこを自動で行ってしまうのが、Web Platform Installer というものです。
例えば、WordPress というブログをデータベース作成まで含めて、自動で行います。

<017>
20100303_017

http://www.microsoft.com/web/downloads/platform.aspx

一度インストールすると、IISマネージャにアイコンが表れます。

<016>
20100303_016

起動すると、こんな風に様々なOSSがインストールできます。

<018>
20100303_018

PHPのものだけでなく、BlogEngine.NET のような ASP.NET で作られた OSS もあるので、試しに入れてみるのもいいでしょう。

カテゴリー: 設計 | IIS7.0 基本のき(補講6) はコメントを受け付けていません

IIS7.0 基本のき(補講5)

補講の5回目です。

さて、今回は Appcmd.exe というツールの話をしましょう。
実は、Windows Server 2008 R2 から PowerShell を使うように推奨されているのですが、コマンドラインで IIS を制御するには、appcmd.exe のほうが楽だったりします。

<015>
20100303_015

通常のコマンドプロンプトではパスが通っていないので、

c:\windows\system32\inetsrv

に移動してから使ってください。

ヘルプを見ると、以下のものが使えます。

サポートされているオブジェクトの種類:

  SITE      仮想サイトの管理
  APP       アプリケーションの管理
  VDIR      仮想ディレクトリの管理
  APPPOOL   アプリケーション プールの管理
  CONFIG    全般構成セクションの管理
  WP        ワーカー プロセスの管理
  REQUEST   HTTP 要求の管理
  MODULE    サーバー モジュールの管理
  BACKUP    サーバー構成バックアップの管理
  TRACE     失敗した要求トレース ログの処理

それぞれの使い方は、appcmd site /? な形で見てください。
そうそう、全てのIISマネージャの全ての機能を使えるわけではないので、注意が必要ですが、バッチファイルを作って手順よくサーバーを増設する場合に使えます。

カテゴリー: 設計 | IIS7.0 基本のき(補講5) はコメントを受け付けていません