プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2016/09/30

GitLab を docker-compose で動かしてみる

event_note

2016/09/19

定義済みデリゲート

event_note

私は最初に猫でもわかるC#プログラミングという本でC#の勉強をしましたが、その中で唐突に Func やら Actionやらが登場し、ほとんど説明がなかったのでちんぷんかんぷんでした。
ネットで調べてやっとわかったのですが、ラムダ式を活用するためにも、ここらへんはしっかり説明しておいたほうがいいんじゃないかと思いました。
ラムダ式自体の説明は結構わかりやすかったんですけどね。
というわけで、ここに調べたことを自分なりにわかりやすくまとめておきます。

定義済みデリゲートとは?

デリゲート自体の理解は C における関数ポインタと同じだと考えればすぐに理解できました。
ただ、関数ポインタもそうですが、デリゲートの宣言というのはとても面倒です。
そのため、型パラメーターを使用し、汎用的に使用できるデリゲートが最初からいくつか定義されているようです。
これらのデリゲートのことを、定義済みデリゲートというようです。

どんなのがある?

いろいろあるようですが、よく使用するのは FuncAction だと思います。
簡単に言えば、

  • Func: 戻り値を持つメソッドのデリゲート
  • Action: 戻り値を持たないメソッドのデリゲート

となります。
どちらも引数の数に応じてオーバーロードされているようです。
詳細は参考URLを参照してください。

参考URL

2016/09/18

WPF + MVVM の勉強3:コマンドを実装する

event_note

2016/09/16

ナイーブソリューションとは何ぞや?

event_note

リーダブルコードを読むと書いてある以下の文章。

例えば、「ヒューリスティック」・「ブルートフォース」・「ナイーブソリューション」などがそうだ。コメントが長くてくどいと感じたら、こうした表現を使えないか確かめよう。

ヒューリスティックはコードコンプリートで何度も出てきましたし、ブルートフォースもよく聞きます。
しかし、ナイーブソリューションは初めて聞きました。
意味がわからなかったので検索してみると、日本語のページでは回答が見つかりませんでした。

仕方ないので、"naive solution" でググってみます。
英語苦手なんですけどね・・・。

いくつか見つけた中では、以下のページがそれっぽい回答でした。

「経験豊富なプログラマーが最初に思い付く解決手段」や「愚直な(安易な)解決手段」とでも言えばいいのでしょうか。
あまり自信がないので、原文を読まれたほうがよろしいかと思います。

2016/09/13

GitHub Gist のコードをブログへ埋め込むいろいろな方法

event_note

ブログなどにソースコードを載せる際、GitHub Gist を利用するととても便利です。
ここでは GitHub Gist のコードのいろいろな埋め込み方法をまとめてみます。

ファイル名を指定

ファイル名の最後に ?file=ファイル名 を追加すると、そのURLの中の特定のファイルだけを埋め込むことができます。
以前は1ファイルごとに New Gist から作成していたのですが、この方法を知ってからは出来る限りファイルをまとめて登録するようになりました。

しかし、デフォルトで出来るのはこれだけのようです。
その他の埋め込み方をするために gist-embed というのがあるようです。
これを使えば、例えば特定の行だけ埋め込んだり、ハイライトしたり、いろいろな埋め込み方ができます。

gist-embed の使い方

以下のページに使い方とサンプルがあります。

以下、個人的によく使うものを抜粋しておきます。

基本

<code data-gist-id="ID"></code>

ファイルの指定

data-gist-file="ファイル名"

フッターを消す

data-gist-hide-footer="true"

表示する行を指定

data-gist-line="2"
data-gist-line="2-4"
data-gist-line="1,3-4"

行のハイライト

data-gist-highlight-line="1,3,5"

2016/09/12

WPF + MVVM の勉強2:プロパティの変更通知を実装する

event_note

2016/09/11

WPF + MVVM の勉強1:データバインディング

event_note

2016/09/03

blockdiagのインストール

event_note

blockdiag シリーズはテキストからブロック図などの画像を生成する画像生成ツール群です。
以下の図が作成できます。

  • blockdiag:ブロック図
  • seqdiag:シーケンス図
  • actdiag:アクティビティ図
  • nwdiag:論理ネットワーク図

インストール

Windows の場合、Sphinx のスタンドアロン版があるので、それをインストールすると自動で blockdiag もインストールされるようです。
しかし、私の場合、Sphinx をインストールしても blockdiag が入っていませんでした。
なので、pip を使用してインストールを試みました。
※ Python のインストールと環境変数の設定が完了している必要があります。

 $ pip install sphinxcontrib-actdiag sphinxcontrib-blockdiag sphinxcontrib-nwdiag sphinxcontrib-seqdiag

しかし、これも途中でエラーとなり失敗してしまいました。

仕方ないので、blockdiagの公式にある通り、easy_install を使用してインストールしました。
尚、Pillow が依存している「Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ」がインストールされていない場合は、そちらもインストールする必要があるようです。
32ビット版64ビット版が存在するため、環境に合わせて適切なものをダウンロードし、インストールしてください。

 $ easy_install pillow
 $ easy_install actdiag blockdiag nwdiag seqdiag

これでインストールできました。

参考URL

2016/09/01

デリゲートとイベントの違い

event_note

C#のデリゲートとイベントについて勉強していて、以下の疑問が残りました。

イベントってデリゲートと何が違うの?
event キーワードを付けることで何が変わるの?

猫でもわかるC#プログラミング 第3版という本を読んで勉強していたのですが、この点についてこの本では全く触れていません。
というわけで、ネットで調べていたら、丁寧に解説してくれている方がいました。

なぜ event キーワードを指定するのか?

詳細な説明はそちらをみていただくとして、簡単にまとめると以下の2点のようです。

代入演算子が使用できなくなる

event キーワードを指定すると、加算代入演算子 += と減算代入演算子 -= しか使用できなくなります。
間違えて代入演算子を使用してしまい、それまでに追加したメソッドがクリアされてしまうのを防ぐことができます。

直接デリゲートをコールできなくなる

イベントハンドラはイベントが発生したときのみにコールして欲しいものです。
event キーワードを指定することで、直接デリゲートをコールできなくなります。