basyura's blog

あしたになったらほんきだす。

WPF - 独自コントロールに独自イベント

某システムで xsl を用いた時に「xsl 地獄もう嫌だ」と心の底から思ったし、もろもろ設定の xml もうんざりだと思ってたのにココにきての xaml。これは最強の xml 地獄だなと思いつつ数年経過。ようやく書けるようになってきたかなという感じはするけど奥が深すぎて Microsoft なのに Google 検索が欠かせないとか闇が深すぎる。学習コストが高すぎる割に得られるものは・・・なら windows form の固定レイアウトでいいやって思っちゃうよねそりゃ。MVVM 便利なんだけど、便利って思える前に 98% ぐらい挫折しそう。割りとまじで。仕事で追い込まれてやるならまだしも趣味の領域で継続できるかはかなり疑問。みんなどこでノウハウを仕入れてくるんだ (切実)。

閑話休題

やりたいこと → 独自コントロールでオレオレイベントを発火させたい。


やってみた。

概要

  • 発生イベントの EventArgs を書き換える
  • UserControl で独自のイベントを定義する
  • MainWindow に SampleControl を埋め込んで SampleControl のクリックでイベントを受け取る

構成

MainWindow
└── SampleControl
      ├── SampleEventArgs
      └── SampleMouseEventArgs

MainWindow

  • SwitchEvent ボタンをクリックすると SampleMouseEventArgs イベントで通知される
  • RaiseSampleEvent ボタンをクリックすると SampleChanged イベントが発生する
<my:SampleControl
                  MouseLeftButtonDown="SampleControl_MouseLeftButtonDown"
                  SampleChanged="SampleControl_SampleChanged"
                  />

SampleControl

  • クリックイベントを書き換える
<Button Grid.Row="0" Content="SwitchEvent"      Click="SwitchEvent" />
<Button Grid.Row="1" Content="RaiseSampleEvent" Click="RaiseSampleEvent" Margin="0 10 0 0" />
public partial class SampleControl : UserControl
{
    /// <summary></summary>
    public static RoutedEvent SampleChangedEvent = EventManager.RegisterRoutedEvent(
                                                "SampleChanged", RoutingStrategy.Tunnel, typeof(RoutedEventHandler), typeof(SampleControl));
    /// <summary>
    ///
    /// </summary>
    public SampleControl()
    {
        InitializeComponent();
    }
    /// <summary>
    ///
    /// </summary>
    public event RoutedEventHandler SampleChanged
    {
        add    { AddHandler(SampleChangedEvent,    value); }
        remove { RemoveHandler(SampleChangedEvent, value); }
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void SwitchEvent(object sender, RoutedEventArgs e)
    {
        e.Handled = true;
        RaiseEvent(new SampleMouseEventArgs(Mouse.PrimaryDevice , 0, MouseButton.Left)
        {
            RoutedEvent = SampleControl.MouseLeftButtonDownEvent,
            Source      = this,
        });
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void RaiseSampleEvent(object sender, RoutedEventArgs e)
    {
        e.Handled = true;
        RaiseEvent(new SampleEventArgs(SampleControl.SampleChangedEvent));
    }
}

イベントの書き換えはやっていいものなのか?という疑問はあるけど。

東大卒プロゲーマー 論理は結局、情熱にかなわない

東大卒のプロゲーマー。”ゲーマー” というと運動もせずお菓子食べまくり的な偏見はあると思うのだけど真逆。ウメハラは知っていたけど、“ときど” 本人を動画で見るまでは偏見がなかったと言われれば嘘になる。軽い気持ちでググったら・・・ウルフなイケメンだった。

高パフォーマンスを出すためには体力が必要なので運動もきっちりやっている。動画を見ると胸の筋肉が盛り上がっているのが分かる。自分も長期的に “SE” として働いたり、趣味としてもプログラムを書き続けいくためには必要だと思っているし、実際に最近は体力不足によるものが色々現れてきているのだろうなというのが否めない。来週こそはランニングするか・・・で何週過ぎたことか。

ストⅡ、KOF、サムライスピリッツ、鉄拳とうとうは友達の家で遊んだり自分で買ったりして遊んでいたのだけどフレーム単位でどうのこうのとか全く分からん。でも、ゲーム動画を見ると凄さは伝わるし大会の盛り上がりもすごく伝わってくるのでいい感じに盛り上がっていろんな可能性が広がっていったらいいなと思う。

GitLab - Relative URL

GitLab 8.5 から実験的に Relative URL がサポートされるようになった。

Enable relative URL in GitLab

Follow the steps below to enable relative URL in GitLab:


1. (Optional) If you run short on resources, you can temporarily free up some memory by shutting down Unicorn and Sidekiq with the following command:

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

2. Set the external_url in /etc/gitlab/gitlab.rb:

external_url "https://example.com/gitlab"

In this example, the relative URL under which GitLab will be served will be /gitlab. Change it to your liking.

3. Reconfigure GitLab for the changes to take effect:

sudo gitlab-ctl reconfigure

4. Restart GitLab in case you shut down Unicorn and Sidekiq in the first step:

sudo gitlab-ctl restart

If you stumble upon any issues, see the [troubleshooting section] (#relative-url-troubleshooting).

GitLab Documentation

8.4 までは /opt/gitlab/embedded/cookbooks/ 配下のファイルをいじってゴニョゴニョしてたのが、gitlab.rb の external_url をいじって reconfigure するだけでよくなった。便利。8.4 では http での clone & push ができず色々デバッグしたものの分からずお手上げ状態だったのだけど、8.5 からできるようになった。マジ便利。ssh での push が 20 秒ぐらいかかるようになってしまったのだけど調べれていない。

追記

resolv.conf の nameserver 設定に起因して名前解決に時間がかかっていたようなのだけど・・・それはそれでどうなんだ。

Redmine - 右クリックメニューの表示位置を調整する

とつぶやいたところ


View customize plugin で (ほぼ) 現実に!
良い機会なので前から気になっていた View customize plugin をインストール。

issues の他に versions でも欲しかったので

Path pattern .*
Type StyleSheet


を指定 (* をしても実害無いだろう・・・たぶん)。そして Code は以下。

/* 上方向に表示している時でも、サブメニューは下方向へ */
#context-menu.reverse-y > ul > li.folder > ul {
    top: 0;
    bottom: auto;
    min-width: 250px;
}

/* サブメニューの高さを固定にして、スクロールを出すように */
#context-menu > ul > li.folder > ul {
    max-height: 300px;
    overflow-y: auto;
    min-width: 250px;
}

いい感じになった。
今まで直接 view をいじったりしてたところもあるので随時移行してみる。

TweetVim 2.5 Release !!


いろいろありがたい Pull Request をもらったまま dev ブランチで暖め続けてしまった。気がつけば 1 年半ぶりのリリース。

  • highlight の改善 thanks! rhysd, pocke, 839
  • エラーメッセージの改善 thanks! rhysd
  • ドキュメントの改善 thanks! todashuta, ryunix
  • バッファ名設定 (g:tweetvim_buffer_name) の追加 thanks! kamichidu
  • tweetvim say バッファでのユーザ名補完候補のソート改善 thanks! rhysd
  • replay-to-all アクションでの宛先が重複しないように改善 thanks! rhysd
  • foldcolumn 指定時のセパレータの長さを改善 thanks! Chris Weyl
  • ツイート内のツイート url サポート

目玉はツイート内のツイート url サポートだろうか (いまごろ)

f:id:basyura:20151128151435p:plain

次はビューをテンプレート的に変えられたらなぁと思ってます。