2014年9月16日火曜日

ノートンセキュリティ(2014)のインストール

先日、amzonクーポン使って購入したノートンセキュリティが届いたのでインストールしました。ターゲットは MBA に乗っている Windows 7 です。

CDが届いたんですが、ライセンスが書いてある紙を読むと CD からインストール出来るのは Windows のみのようです。折角ですので、CD からインストールしました。


インストール
まず、仮想 OS なので、CD / DVD に接続します。

場合によっては オートラン により自動的にセットアップが起動します。


ん?Norton Internet Security?Norton Securityなのでは?と思いつつ。CDからインストールを選択しました。今の MBA には、ノートンインターネットセキュリティが入っていて、そのままインストール出来るかどうかよくわからなかったのですが、やはり途中でエラーが発生しました。管理者云々。なので、エクスプローラからCDドライブを選択し、 Start.exe を右クリック -> 管理者で実行で起動しました。ら、いきなり Norton Internet Security のアンインストールが始まります。これが始まれば、あとは促されるままに進めることでインストールが完了します。インストールが完了したのですが、ノートンセキュリティとはいえ、実際はノートンインターネットセキュリティでした(苦笑)

おまけ
3台までインストール出来るので、iMac にも入れてみました。
インストール自体はチャチャっと出来ましたが、


LiveUpdate にはやたら時間がかかります。


ちなみにメニューバーにはこのように表示され、アクセス出来るようになります。





【CMD】バッチファイルでIPアドレスの変更

よく使うので、忘れないように。
IPアドレスを自動的に取得する
netsh interface ip set address "イーサネット" dhcp

次のIPアドレスを使う
netsh interface ip set address "イーサネット" static IPアドレス サブネットマスク デフォルトゲートウェイ

2014年9月13日土曜日

申し訳ない、御社をつぶしたのは私です。 カレン・フェラン (著), 神崎 朗子 (翻訳)

大胆なタイトル、奇抜な見出しで目を引きますね。このコンサルタントを完全否定するようなぶっ壊す感じ、私は大好きです。しかし、内容は堅実です。本書は数々のコンサルファームや有名な企業を渡り歩いてきた著者からの次のようなメッセージでした。(私の適当な解釈による要約)

世の中を動かすのは人間で、一人として同じ人間がいない世の中。そこで標準化/確立化されたコンサル用ツールは、全ての組織において効果を発揮するわけではない。ツールはある程度数値化出来るので便利だが、やっているうちに数値化することが仕事だと錯覚してしまう。手段が目的化する落とし穴に誰もがはまってしまう。そうではなく、人間を見よう。現場の人間の声を聞こう。要諦はそこにある。

私も独立するまで10年ほど一般企業に勤めていた経験があり、コンサルティングはあまりわかりませんが、プロジェクトマネージャー関係はそれなりに学習していました。それもあって、コンサルティングとは関係なくても、管理者目線で全然読めます。むしろ管理者であるなら絶対に目を通しておくべきです。役職あるなら必読です。管理者や従業員は一体、管理のためにどれだけ無駄な時間を費やしたことか。戦略なしで現場の戦術にたよるの?とかね。

読んでて昔の記憶がフラッシュバックしたんですが、ちょっと吐き出します。あるプロジェクトで一緒になった結構年上の主任と何人かでランチをしている折に、昔その主任が面倒を見ていた女性が退職した話になりました。退職した女性は確かに扱いづらい人だったのかもしれませんが、その主任は結構厳しく当たっていたため、うつ病になり休業し、そのまま退職したという流れです。退職したと聞いた瞬間、こともあろうにその主任はガッツポーズをしました。ぅおい!管理者として最低だなと思いました。というか人として。自分は未熟な後輩を育成することが出来ない人間ですと宣言したことに気づいていないんですね。その後、その主任はマネージャーに昇格しました。あぁ、この会社ダメだー、現場を全然見てないわーとがっかりしました。数値だけ見て現場を見てない。数値だけはそこそこ良かったですからね。でもそのよかった理由も優秀なメンバーがかなりフォローしてた結果ですよ。この会社にしてこのマネージャありといいますか。本書でピーターの法則も実際に有り得るという指摘も、実際にありえました(苦笑)


話は戻って、他にもうなずいた所や斬新だなと思ったところを覚え書きます。(要点の箇条書き)


  • 戦略開発は将来予測ではなく自己発見だから上層部だけでやるのではなく従業員全員を巻き込むべき
  • 業績管理システムいつのまにか従業員を在庫品のように評価してレッテルを張り、追跡するシステムになってしまう
  • そもそも客観的評価はありえなくて、点数付けるのは主観でしかないからインセンティブ報酬はやめて、業界より少し上回る報酬にすべき
  • マネジメントのテクニックなど無く、よい関係を築くことしかやってない
  • リーダーの行動規範は34もあり、全部出来る人間なんてそうはいない、むしろスティーブジョブズ氏のように全然当てはまらないのに優秀なリーダーはいる
  • タレントマネジメントはペーパーワークや評価付けに追われて、肝心の社員同士の交流が妨げられる
  • 頭を使いたくないからコンサルを使うのは間違い

などなど、、、ほんとはもっと詳しく書きたいですが控えます。私が組織運営するようになったらまた改めて読もうと思います。






2014年9月11日木曜日

Mac用のOneDriveアプリ

HDDの破損にビビって、重要なファイルはクラウド(とりあえずOneDrive)に置くことにしました。MacからOneDriveにフォルダごと一気に入れたかったのですが、ツールじゃないと無理だということでツールを入れました。

で、早速やってみたところ、落ちる落ちる。もう30回くらいは落ちたので、あきらめて①ファイルずつアップロードしました。(あまり使わないのはアーカイブにして)

私の中で、OneDriveの評価は高かったのですが、なんだかなー。もうちょっと頑張ってよ>Microsoft という気分です。


Windows からやればいんだけど、やれない事情があってね。
Google Drive は Gmail が流出したとか、ファイルを閲覧されそうな印象なので却下。
DropBoxは別の要件で使っているので使えない。
他になんかいーのないかなー。


医療の選択 桐野 高明 (著)

北海道に行った際、新千歳から旭川に向かう道中で同行した後輩3人が医療関係に携わっていて、医療の現場で今起こっていることを色々と教えてもらった。私はシステム屋なので、7年くらい前に調剤システムを作ったことがあるぐらいの全くの門外漢。前提となる知識があったらもっと話が盛り上がっただろうなと思い、本書:医療の選択を手にしました。

読んではみましたが、レビューを書こうという気が起きず、もう4日ほど放置していたのですが、嫁さんと本書についての話をしたり、茂木健一郎氏の本日の連続ツイート【「今、ここ」を生きる子どもたちにとって】(https://www.facebook.com/kenichiromogiqualia/posts/578593068934021
を読んで、自分の中で消化しておく必要があると思い、筆を執った(キーを叩いた)次第です。


何故、レビューを書く気がしなかったかというと、きっと私の読み方が悪かったのだろうと思いますが、どこに向かって話が進んでいるのか全く汲み取れなかったのです。現在の医療システムを歴史の流れにそって纏めてくれてはいますが、著者の桐野氏の意見というものがあまりなく、結局何がい言いたかったのかがよくわからなかったというのが正直なところです。また、いくつか選択肢があるとしても、医療システムに縁遠い私にとって、それらの選択肢に手が届くことはまずないのではないか?とどこか遠い話のように感じたからです。茂木氏の「システム論よりも、自分たちの具体的な選択の方が大切」というのを読んで、その通りだなと思いました。またその発想を受け、私ならどう選択するというシミュレーションをして行くことはアリだと思いました。シミュレーションしていなければ、チャンスが巡って来たときに即座に手を挙げることは出来ないですからね。

でまぁ、本書を振り返ってみたわけですが。世界の医療の現状と行き詰まりが結構よく纏まっていますね。全体的にざくーっと私なりに纏めてしまうと次のような感じでしょうか。(章の前後関係はばらばらです)

税金と社会保障の関係は次の4つに分類出来ます。
①高負担、低給付
②低負担、高給付
③高負担、高給付
④低負担、低給付
①は国民感情的に受け入れ不可能、②はウェルカムだけど国内に油田があるなど莫大な資源が無いと無理、③は大きな政府、④は小さな政府であると。小さな政府というのは発展途上国などにみられる社会保障はある程度無視して経済発展を優先させる社会です(経済が潤うと社会保障分が増えるという説もある)。先進諸国は概ね③を選択していますが、システムはバラバラです。アメリカは自由を選択し、日本は国民皆保険、イギリスでは無料で医療が受けれるNHSというシステムを選択しています。それぞれが今、行き詰まりつつあります。医療技術とその資金だったり、施術が始まるまでの時間だったり云々。高齢者の介護であったり、医薬品の開発であったり。大きな舵取りは出来ないけど今のシステムの中で少しずつ変えていくしかないようです。

医療とは直接的に関係ないですが、国債に対する指摘はなるほどな!!!と思いました。1000兆円の国債で金利が0.1%上がると10兆円が吹っ飛びますが、それは消費税4%分にあたるという話。国債を発行しても富裕層が富むだけで、国民への負担が増えるだけなんですね。

知らないことだらけで、知らないというのは怖いと改めて感じました。
色々と遠い話ですが、今何が出来るのかを考えていきたいです。

[WPF][Silverlight][C#] ScrollViewer でマウスでの横スクロールと慣性スクロール

将来的に横スクロールにしたいという話があって、事前調査してみました。
やりたいことは下記3つ。
  1. マウスホイールで横スクロール
  2. ドラッグで横スクロール
  3. 慣性スクロール
あんまり情報ないですねー。とりあえずざくっとと作ってみたので、コードだけ紹介します。WPF版では ScrollViewer のカスタムコントロールで、Silverlight では ScrollViewer  を継承できないので Behavior で作りました。ほぼ同じようなコードになってます。加速度までは考慮していないのであしからず。

WPF版(Custom Control)
    /// <summary>
    /// 慣性スクロールビューア
    /// </summary>
    public class MomentumScrollViewer : ScrollViewer
    {
        #region インスタンスフィールド
        /// <summary>
        /// マウスオフセット位置
        /// </summary>
        private double mouseOffset;
        /// <summary>
        /// 開始位置
        /// </summary>
        private double startOffset;
        /// <summary>
        /// プレス有無
        /// </summary>
        private bool isPressed = false;
        /// <summary>
        /// 最終位置
        /// </summary>
        private double lastPosition;
        /// <summary>
        /// 移動量
        /// </summary>
        private double momentumValue;
        #endregion
        #region 依存プロパティ
        /// <summary>
        /// 運動量を取得または設定します。
        /// </summary>
        public double MomentumValue
        {
            get { return (double)GetValue(MomentumValueProperty); }
            set { SetValue(MomentumValueProperty, value); }
        }
        /// <summary>
        /// 運動量依存関係プロパティを識別します。
        /// </summary>
        public static readonly DependencyProperty MomentumValueProperty =
            DependencyProperty.Register("MomentumValue", typeof(double), typeof(MomentumScrollViewer), new PropertyMetadata(0.5));
        /// <summary>
        /// 水平位置を取得または設定します。
        /// </summary>
        public double HorizontalPosition
        {
            get { return (double)GetValue(HorizontalPositionProperty); }
            set { SetValue(HorizontalPositionProperty, value); }
        }
        /// <summary>
        /// 水平位置依存関係プロパティを識別します。
        /// </summary>
        public static readonly DependencyProperty HorizontalPositionProperty =
            DependencyProperty.Register("HorizontalPosition", typeof(double), typeof(MomentumScrollViewer), new FrameworkPropertyMetadata(0.0, new PropertyChangedCallback(OnHorizontalPositionChanged)));
        #endregion
        #region コンストラクタ
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public MomentumScrollViewer()
        {
            // 各イベント登録
            this.PreviewMouseWheel += MomentumScrollViewer_PreviewMouseWheel;
            this.Loaded += (sender, e) =>
                {
                    var content = this.GetValue(ScrollViewer.ContentProperty) as FrameworkElement;
                    if (content != null)
                    {
                        content.MouseLeftButtonDown += content_MouseLeftButtonDown;
                        content.MouseLeftButtonUp += content_MouseLeftButtonUp;
                        content.MouseMove += content_MouseMove;
                        content.MouseLeave += content_MouseLeave;
                    }
                };
        }
        #endregion
        #region イベント
        /// <summary>
        /// 水平スクロール位置変更イベント
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="e"></param>
        private static void OnHorizontalPositionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            var scrollViewer = obj as MomentumScrollViewer;
            if (scrollViewer != null)
            {
                scrollViewer.ScrollToHorizontalOffset((double)e.NewValue);
            }
        }
        #region ホイールでのスクロール
        /// <summary>
        /// マウスホイールイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MomentumScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            beginScroll(e.Delta);
            e.Handled = true;
        }
        #endregion
        #region ドラッグによるスクロール
        /// <summary>
        /// 左ボタンダウンイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void content_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var position = e.GetPosition(this);
            this.mouseOffset = position.X;
            this.startOffset = this.HorizontalOffset;
            this.isPressed = true;
        }
        /// <summary>
        /// マウス移動イベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void content_MouseMove(object sender, MouseEventArgs e)
        {
            if (this.isPressed)
            {
                var position = e.GetPosition(this);
                // 前回値からの運動量を保持し、前回値を更新
                momentumValue = lastPosition - position.X;
                lastPosition = position.X;
                // 変化量を算出し、スクロール
                var delta = (position.X > mouseOffset) ? -(position.X - mouseOffset) : mouseOffset - position.X;
                this.ScrollToHorizontalOffset(startOffset + delta);
            }
        }
        /// <summary>
        /// マウスリーブイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void content_MouseLeave(object sender, MouseEventArgs e)
        {
            dragEnd();
        }
        /// <summary>
        /// 左ボタンアップイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void content_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            dragEnd();
        }
        #endregion
        #endregion
        #region プライベートメソッド
        /// <summary>
        /// ドラッグ終了処理
        /// </summary>
        private void dragEnd()
        {
            if (this.isPressed)
            {
                this.isPressed = false;
                // 運動量がある場合は慣性スクロール
                if (momentumValue != 0)
                {
                    beginScroll(momentumValue * (-1));
                }
            }
        }

        /// <summary>
        /// 慣性スクロール開始
        /// </summary>
        /// <param name="delta">変化量</param>
        private void beginScroll(double delta)
        {
            // 目的地設定
            var to = HorizontalOffset - delta * MomentumValue;
            if (to < 0)
                to = 0;
            if (to > ExtentWidth)
                to = ExtentWidth;
            // 慣性スクロールアニメーション開始
            var animation = new DoubleAnimation(to, new Duration(TimeSpan.FromMilliseconds(1000)));
            animation.EasingFunction = new CircleEase() { EasingMode = EasingMode.EaseOut };
            this.BeginAnimation(MomentumScrollViewer.HorizontalPositionProperty, animation);
        }
        #endregion
    }


Sivlerlight版(Behavior)
    /// <summary>
    /// 慣性スクロールビヘイビア
    /// </summary>
    public class MomentumScrollingBehavior : Behavior<ScrollViewer>
    {
        #region インスタンスフィールド
        /// <summary>
        /// マウスオフセット位置
        /// </summary>
        private double mouseOffset;
        /// <summary>
        /// 開始位置
        /// </summary>
        private double startOffset;
        /// <summary>
        /// プレス有無
        /// </summary>
        private bool isPressed = false;
        /// <summary>
        /// 最終位置
        /// </summary>
        private double lastPosition;
        /// <summary>
        /// 移動量
        /// </summary>
        private double momentumValue;
        #endregion
        #region 依存プロパティ
        /// <summary>
        /// 運動量を取得または設定します。
        /// </summary>
        public double MomentumValue
        {
            get { return (double)GetValue(MomentumValueProperty); }
            set { SetValue(MomentumValueProperty, value); }
        }
        /// <summary>
        /// 運動量依存関係プロパティを識別します。
        /// </summary>
        public static readonly DependencyProperty MomentumValueProperty =
            DependencyProperty.Register("MomentumValue", typeof(double), typeof(MomentumScrollingBehavior), new PropertyMetadata(0.5));
        /// <summary>
        /// 水平位置を取得または設定します。
        /// </summary>
        public double HorizontalPosition
        {
            get { return (double)GetValue(HorizontalPositionProperty); }
            set { SetValue(HorizontalPositionProperty, value); }
        }
        /// <summary>
        /// 水平位置依存関係プロパティを識別します。
        /// </summary>
        public static readonly DependencyProperty HorizontalPositionProperty =
            DependencyProperty.Register("HorizontalPosition", typeof(double), typeof(MomentumScrollingBehavior), new PropertyMetadata(0.0, new PropertyChangedCallback(OnHorizontalPositionChanged)));
        #endregion

        #region イベント
        /// <summary>
        /// アタッチ完了
        /// </summary>
        protected override void OnAttached()
        {
            base.OnAttached();
            this.AssociatedObject.MouseWheel += scrollViewer_MouseWheel;
            this.AssociatedObject.Loaded += (sender, e) =>
            {
                var content = this.AssociatedObject.GetValue(ScrollViewer.ContentProperty) as FrameworkElement;
                if (content != null)
                {
                    content.MouseLeftButtonDown += content_MouseLeftButtonDown;
                    content.MouseLeftButtonUp += content_MouseLeftButtonUp;
                    content.MouseMove += content_MouseMove;
                    content.MouseLeave += content_MouseLeave;
                }
            };
        }
        /// <summary>
        /// デタッチ
        /// </summary>
        protected override void OnDetaching()
        {
            this.AssociatedObject.MouseWheel -= scrollViewer_MouseWheel;
            var content = this.AssociatedObject.GetValue(ScrollViewer.ContentProperty) as FrameworkElement;
            if (content != null)
            {
                content.MouseLeftButtonDown -= content_MouseLeftButtonDown;
                content.MouseLeftButtonUp -= content_MouseLeftButtonUp;
                content.MouseMove -= content_MouseMove;
                content.MouseLeave -= content_MouseLeave;
            }
            base.OnDetaching();
        }
        /// <summary>
        /// 水平スクロール位置変更イベント
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="e"></param>
        private static void OnHorizontalPositionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            var behavior = obj as MomentumScrollingBehavior;
            if (behavior != null)
            {
                behavior.AssociatedObject.ScrollToHorizontalOffset((double)e.NewValue);
            }
        }
        /// <summary>
        /// マウスホイールイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void scrollViewer_MouseWheel(object sender, MouseWheelEventArgs e)
        {
            beginScroll(e.Delta);
            e.Handled = true;
        }
        #region ドラッグによるスクロール
        /// <summary>
        /// 左ボタンダウンイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void content_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var position = e.GetPosition(this.AssociatedObject);
            this.mouseOffset = position.X;
            this.startOffset = this.AssociatedObject.HorizontalOffset;
            this.isPressed = true;
        }
        /// <summary>
        /// マウス移動イベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void content_MouseMove(object sender, MouseEventArgs e)
        {
            if (this.isPressed)
            {
                var position = e.GetPosition(this.AssociatedObject);
                // 前回値からの運動量を保持し、前回値を更新
                momentumValue = lastPosition - position.X;
                lastPosition = position.X;
                // 変化量を算出し、スクロール
                var delta = (position.X > mouseOffset) ? -(position.X - mouseOffset) : mouseOffset - position.X;
                this.AssociatedObject.ScrollToHorizontalOffset(startOffset + delta);
            }
        }
        /// <summary>
        /// マウスリーブイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void content_MouseLeave(object sender, MouseEventArgs e)
        {
            dragEnd();
        }
        /// <summary>
        /// 左ボタンアップイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void content_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            dragEnd();
        }
        #endregion
        #endregion
        #region プライベートメソッド
        /// <summary>
        /// ドラッグ終了処理
        /// </summary>
        private void dragEnd()
        {
            if (this.isPressed)
            {
                this.isPressed = false;
                // 運動量がある場合は慣性スクロール
                if (momentumValue != 0)
                {
                    beginScroll(momentumValue * (-1));
                }
            }
        }

        /// <summary>
        /// 慣性スクロール開始
        /// </summary>
        /// <param name="delta">変化量</param>
        private void beginScroll(double delta)
        {
            // 目的地設定
            var to = this.AssociatedObject.HorizontalOffset - delta * MomentumValue;
            if (to < 0)
                to = 0;
            if (to > this.AssociatedObject.ExtentWidth)
                to = this.AssociatedObject.ExtentWidth;
            // 慣性スクロールアニメーション開始
            var storyboard = new Storyboard();
            storyboard.Children.Add(new DoubleAnimation()
            {
                From = this.AssociatedObject.HorizontalOffset,
                To = to,
                Duration = new Duration(TimeSpan.FromMilliseconds(1000)),
                EasingFunction = new CircleEase() { EasingMode = EasingMode.EaseOut }
            });
            Storyboard.SetTarget(storyboard, this);
            Storyboard.SetTargetProperty(storyboard, new PropertyPath("HorizontalPosition"));
            storyboard.Begin();
        }
        #endregion
    }










2014年9月9日火曜日

[Expression Design]使い方 - エクスポート

お絵かきしたものを PNG ファイル等に出力してみましょう。


メニューから ファイル - エクスポートをクリックします。コントロールキーとEキーがショートカットです。


出力設定画面が表示されるので、サイズや形式を指定して「すべてエクスポート」ボタンをクリックします。


出力結果はこんな感じです。

 

ちなみに出力できる形式は、以下の通りです。


  • XAML Silverlight 3 キャンバス
  • XAML WPF ResourceDictionary
  • XAML Silverlight 4 / WPFキャンバス
  • SVG
  • PNG
  • JPEG
  • TIFF
  • BMP
  • WDP
  • PSD
  • PDF
XAML は Windows のプレゼンテーションの基盤である UI 言語です。
Microsoft の意図をくみ取ると、デザイナさんには最終的に Visual Studio を使ってもらいたいのかもしれませんねぇ。

  1. Photoshop ( PSD )
  2. Expression Design
  3. Expression Blend
  4. Visual Studio


[Expression Design]使い方 - エフェクト

エフェクトの見え方を一覧的にしてみました。








各エフェクトを複合的に使うことが出来るので、その効果は無限大ですかねー。

[Expression Design]使い方 - お絵描き

ポリラインを使ってお絵描きをしてみましょう。
左端のツールバーからペンのところを長押しすると出てくるドロップダウンメニューからポリラインを選択してください。



星を描いてみよう

星の角のところを適当にクリックしてつなげます。(色はプロパティタブで変更してね。変更方法は「文字の操作」を参考にしてみてください。


次に角の位置の変更を行います。
左側のツールバーの個別選択を選択します。


これで角の赤点を移動出来るようになります。ドラッグ&ドロップです。


グリッドにあわせてうまく整形しましょう。



サイズ変更
サイズ変更を行う場合、左端のツールバーから選択内容を選択します。


サイズ変更したいオブジェクトをクリックすると8個の点が表示されます。
それをドラッグ&ドロップでサイズが変更出来るようになります。


縦横比固定
サイズ変更を行う際に縦横の比率はそのままとしたい場合、シフトキー+ドラッグで縦横比を維持したままサイズの変更を行えます。



回転

オブジェクトを回転させる場合は、四隅のいずれかの点のちょっと外側をドラッグすることで回転します。


斜めに傾ける
各辺の中間にある点のちょっと外側をドラッグするとオブジェクトを斜めにヒョジすることが出来ます。




アンカーポイント削除
左端ツールバーのペンを長押しすることで表示されるドロップダウンメニューから「アンカーポイントの削除」をクリックします。消去したいアンカーポイントをクリックすることでアンカーポイントを削除出来ます。



アンカーポイントをなだらかに
アンカーポイントの変換を行うことで、角張っているのを滑らかにすることが出来ます。



星は星でも光っている感じのが出来上がります。


グループ化
同じ要素を選択し、右クリック - グループ化しておくことで、纏めて移動させたい時に1つだけ移動させれば付いてくるようになったり、あとから変更する際に一気に変更することが出来るようになります。



半透明にしよう
プロパティタブの外観のところにある不透明度を調整することで、半透明にすることが出来るようになります。


グラデーション
グラデーションラベルを選択すると単色からグラデーションに変更されます。


色の変更は下図の赤四角枠をクリックして色を選択することで行えます。


グラデーションを放射状にするには右端の「放射状グラデーション」をクリックします。


グラデーションのポイントも追加出来るし、グラデーションの中点も調整出来ます。



これぐらい出来ればある程度描けますね。

[Expression Design]使い方 - 文字の操作

まずは文字を操作してみましょう。


文字入力

左端のツールバーのテキストアイコンをクリックします。


描画エリアの任意の位置をクリックし、テキストを入力します。





文字色の変更
右上のプロパティタブの外観のところで色の変更を行えます。




枠線をつける
枠線をつけたい場合は、「外観」ラベルの下にあるアイコン2つの内、右側を選択状態にし、幅を入力することで枠線をつけることが出来ます。


文字間隔の調整
文字同士の間隔の調整はプロパティタブの「テキスト」にある「トラッキング」で調整可能です。



フォントのライセンス
気をつける必要があるのはフォントの著作権です。作成したものを Web で公開する際は気をつけましょう。MSゴシック等はリコーでしたっけ。メイリオや segoe 等は Microsoft で一応 Windows で開発したもの(画像など)は配布してもよいようです。(が、ソースが見つからなかったのであくまでも自己責任でお願いします。)
ちなみに Mac なら「フォントのライセンス?開発用のマシンに入っているんだから、配布する為のフォントだぜー」っていうスタンスだそうです。


2014年9月8日月曜日

[Expression Design]使い方 - グリッドの表示

初期状態で起動すると描画するエリアは真っ白ですが、グリッド表示で縦横を揃えやすく出来ます。

右クリック - グリッドの表示 をクリック


グリッドが表示されるようになりました。


メモリのサイズを変更したい場合は、メニューの 編集 - オプション - 単位とグリッド をクリック。


グリッドとガイド のところの グリッド サイズ で調整出来ます。


単位はピクセルですかねー。


ノートンセキュリティのクーポン

MBA に乗っている開発用 Windows マシン ( Windows 7 ) ではノートンインターネットセキュリティを使用していましたが、期限が切れます。新しいのの価格とか見てたのですが、名前が変わるんですね。ノートンセキュリティに。


名前だけではなく、マルチプラットフォーム対応 ( Mac とか Android でも使える ) したとか。

色々調べてたら、Amazon 内にクーポン発見!!!
購入時に、クーポンのところに「P42SZ6A79C」を入れて適用すると¥1,000OFF になります。クーポン対象はこちらから。

早速ぽちっとしちゃいました。8月末までのキャンペーンだったのですが、好評で9月15日まで延長したようです。

女子高生サヤカが学んだ「1万人に1人」の勉強法 美達 大和・山村 サヤカ&ヒロキ (著)

LINE スタンプ作りに疲れたら、休憩がてら、バランスボールでゴロゴロしながら本書に目を通しました。頭が疲れていてもすらすらと頭に入ってくるのは、中高生のストレートな言葉と美達氏のわかりやすく噛み砕かれた表現によるものでしょうか。とても読みやすく、読み終えた後の高揚感は明日への一歩!という感じですね。


著者の美達氏はIQ150の天才児と呼ばれ、喧嘩をしても無敗、仕事をしても年収が8000万を超えてしまうようなハイスペックの人物ですが、殺人という罪を犯してしまった無期懲役囚です。過酷な刑務所生活の中で月に100〜200冊を読了する美達氏は自らも本を書いており、それに触れて連絡を取りたいと思った婦人が美達氏の弁護士を通じて手紙でのやり取りをするようになります。打ち解ける中で、婦人は高校生の娘:サヤカと中学生の息子:ヒロキを美達氏に紹介し、その子供達と美達氏の心温まる交流が始まります。その手紙のやり取りが本書の構成になります。

子供達から美達氏には、青年時代に誰もが経験する質問を率直に投げかけられます。イジメのこと、勉強の仕方、勉強の目的、成功の秘訣、記憶力の上げ方、自分の出し方、ケンカの仕方、本を読むことについて、視力の上げ方、効率的な筋トレ、足を細くする方法(笑)等々。

これら一つ一つに対して美達氏から、暖かく、また子供が興味を引くように、また専門的知識を惜しみなく手紙に書き記しています。それらの回答を通して、いかにコツコツと忍耐強く継続して勉強して行くことが大切かを終始伝え続けます。美達氏の話に感化/誘引され続けた2人は受験という壁を、自らより大きな壁に変え、立ち向かっていくようになります。


私自身の生き方として得るところは多々ありましたが、他にこれから自分の子供が直面するであろう壁に対して、どのように向き合えばよいのか、またどのように励ますのがよいのかが具体的に書かれていたところが非常に参考になりました。中高生を抱える親の良き教科書になるのではないでしょうか。



2014年9月2日火曜日

[C#][SQL Server Express LocalDB] キー 'attachdbfilename' には無効な値です。

SQL Server Express CE(Compact Edition)が廃止されて、代わりにSQL Server LocalDB という SQL Server の機能がフルで使えるデータベースが使えるようになりました。前者はインプロセスでしたし、SQL Serverはサービスとして動作しますが、LocalDBは使用時にプロセスが起動し、使わなくなったらプロセスが終了します。これは便利だと思い、ちょうど以前 SQL Server CE を使用したアプリケーションのリメイクを行うこととなったので、ついでに LocalDB に移行しました。
順調に試験が終わってリリースしたところ、実機でエラーが出て起動できないと報告がありました。調べてみると次のエラーが出ていました。

キー 'attachdbfilename' には無効な値です。
   場所 System.Data.SqlClient.SqlConnectionString.VerifyLocalHostAndFixup(String& host, Boolean enforceLocalHost, Boolean fixup)
   場所 System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
   場所 System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
   場所 System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(String connectionString, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
   場所 System.Data.SqlClient.SqlConnection.ConnectionString_Set(String value)
   場所 System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
   場所 System.Data.SqlClient.SqlConnection..ctor(String connectionString)

うぬぬ、よくわからんです。海外のサイトとかも含めて調べていたら、どうもバージョンが不一致だからダメだっていうことらしいです。実機には「Microsoft SQL Server 2014 Express のダウンロード 」をインストールしています。Visual Studio の 2013 で LocalDB を追加したら、LocalDB の は v11.0 で生成されますが、実機にインストールした LocalDB は v12.0 なんだとか。Visual Studio の最新のサービスパックを適用しても v11.0 で生成されてしまう。どうしろというのだ。まったく。

苦肉の策ですが、開発環境は v11.0 だけどインスタンス名を v12.0 にしてしまって接続することで回避できました。アプリケーション起動時に下記コマンドを実行します。


    // V12インスタンスのインストール
    var process = new Process()
    {
        StartInfo = new ProcessStartInfo(System.Environment.GetEnvironmentVariable("ComSpec"))
                    {
                        Arguments = "/c sqllocaldb create v12.0",
                        CreateNoWindow = true,
                        RedirectStandardOutput = true,
                        RedirectStandardInput = false,
                        UseShellExecute = false,
                    },
    };
    process.Start();
    var result = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
    process.Close();
    if(!result.Contains("v12.0"))
    {
        throw new Exception(result);
    }

接続文字列(ConnectionString)を次のように変更します。

Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True
                       ↓
Data Source=(LocalDB)\v12.0;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True


これで開発機でも実機でもうまく動作するようになりました。




35歳のチェックリスト (光文社新書) 齋藤 孝 (著)

35歳になって1ヶ月が過ぎました。「35歳のチェックリスト」、見つけました。今、まさに今、私が読むべき本だと思い、手にしました。

いや~~~、面白かった。著者の齋藤孝氏の思考/考え方にすごく近しいものを感じました。私が考えていることや、これから考えるであろうことを本書で言語化してくれていて、大変刺激的で読みやすくて面白かったです。1時間ちょっとで読み終えてしまいました。啓発本といえばそうですが、30歳半ばの人がこれからを生きていくうえで、どのように考えていくのがよいのかを具体的に提案してくれているような本です。

ネタバレしない程度に要点をご紹介します。(というか、覚書ですが。)
まず、人は20歳の成人式を一つの節目にしますが、35歳で一度人生の(心の)棚卸することを提案されています。棚卸というのは自分の資産価値を再確認することです。確認にあたりいくつかの問いを投げかけられます。それがいわゆるチェックリストですね。それらの問い一つ一つに対し、「このように考えていたら危険信号です」「こういう風に考えましょう」と読者の状態に沿って誘導してくれています。何故35歳なのかについてもタモさんなどの有名人の例をいくつか挙げて述べられています。とりあえず問い(チェック項目)だけ要点を列挙します。

第1章 人は35歳で大人になる

  • 誰と過ごすのが楽しいか?
  • 信頼している人は誰か?
  • 尊敬する人は誰か?
  • 出身大学が話題になることがあるか?
  • 過去の失敗を引きずっていないか?
  • SNSを頻繁にチェックしていないか?
  • 自分はまだ若いと思っているか?
  • 「自分らしく生きる」のがかっこいいと思っていないか?
  • 誰のために働いているか?
  • 最近、何をあきらめたか?

第2章 不安を自身に変える作法
  • 20年後の自分をイメージできるか?
  • 転職を考えているか?35歳転職は遅いか?
  • 仕事量が増えるとワクワクするか?
  • システム思考出来ているか?
  • プロジェクトチームに呼ばれるか?
  • プロジェクトリーダ任されているか?
  • 得意分野の仕事をどんどん引き受けているか?
  • いつも機嫌よく人と接しているか?
  • 後輩のフォローをしているか?
  • 飲み会の幹事を引き受けているか?
  • 会社の警備員と雑談しているか?
  • 武器を持っているか?
  • 最近、人を褒めたか?
  • 他部署の上役と雑談できるか?
  • 異動/転勤を前向きに受け取れるか?
  • 何が出来るか?
  • 余計な仕事だと思っていることはあるか?
  • 転職しても成功する自信があるか?
  • 「自分はこれでやっていく」と自信をもって言えることはあるか?

第3章 人生の迷いを吹っ切る技術
  • 未来の大きなストレスを見極めているか?
  • これがあると幸せだという瞬間はいつか?
  • 社会の再生産性について考えたことあるか?
  • 妊娠/出産のリミットを考えたことあるか?
  • 本気で婚活しているか?
  • 家族の形について考えたことあるか?
  • 今、何かを背負っているか?
  • 住みたい街はどこか?

第4章 35歳からの心技体の整え方

  • 歳を感じてドキッとしたことあるか?
  • 上司が自分よりタフだと感じたことあるか?
  • 状況適応力はついているか?
  • 今、自分が何のために何をしているか把握できているか?
  • 仕事を「習慣化」させているか?
  • あなたの「強み」になる体力はあるか?
  • スケジュールの脳内シミュレーションやっているか?
  • プライベートな予定も算段しているか?
  • 相手より先に動いているか?
  • 何事も、一気に集中してやろうとしていないか?
  • 区切りの良いところで、今日のタスクを終えていないか?
  • つながらない時間を持っているか?
  • 飲み会が苦手になっていないか?
  • 身近な世間と上手に付き合っているか?
  • 休みがあったら寝ていたいか?
  • 身銭を切る自己投資をしているか?
  • 聞く耳を持たなくなっていないか?
  • 健康を支えるための習慣を持っているか?

これだけ書くと、ほぼネタバレ状態ですが(すみません)、それぞれのチェック項目に対する重要なエッセンスは敢えて書かずに、私は記憶をたどるようにします。(でないと、記憶力が低下するし、生活に昇華できないので)