PHPの第一印象

抗えない流れでPHPの案件をすることになりました。抗えない理由はさておき、PHPの第一印象をメモっておきます。

変数の宣言どこ?

$name = '名前';

この行だけを見たときに$nameという変数がはじめて登場したのか、上のほうで登場して使いまわしされてるのかが分かりませんでした。いまだにvarて書いてしまう。

可変変数

$a = 'hello';
$$a = 'world';
echo "$a $hello";

これでhello worldと出力できる。動的にグリグリと変数名にアクセスできるのはすごく便利。C#でもReflectionでグリグリできるけど、PHPの可変変数のほうがハードルが低い。詳しく以下で。

PHP: 可変変数 - Manual

macOSとVMware Fusion上のWindowsでCaps Lockキーの機能が逆になる

ずばりタイトルのとおり。VMware Fusion上のWindowsを起動してログインしようとパスワードを入力するときに「Caps Lockオンになってるで」みたいなメッセージが表示されます。

Windows側でCaps LockをオフにするとmacOS側でCaps Lockがオンになってしまいます。

VMware Knowledge Baseにピンポイントの情報を見つけました。

VMware Knowledge Base

解決方法

Fusion が実行されている場合は、仮想マシンで Caps Lock キーの機能が逆になることがあります。 この問題を解決するには、VMware Fusion のメニュー バーで、仮想マシン > キーの送信 > Caps Lock を選択します。これにより、追加の Caps Lock コマンドが仮想マシンに送信され、Mac には送信されず、2 つが同期された状態に戻されます。

なんかこう、もうちょっとスマートに解決できればいいんだけどな。Windows起動時にスクリプトを実行して自動的に上記のメニュー選択できるような。

開発チームに活気があるときー、ないときー

開発チームに活気があるときとないときの差は何なのか気になったので、それぞれの特徴をメモしておきます。

開発チームに活気があるとき

  • 個人が責任範囲を広くとる
  • 重なり合った責任範囲については協力的解決に向かう

開発チームに活気がないとき

  • 個人が責任範囲を狭くとる
  • 責任範囲が重なり合うことはない
  • 誰の責任範囲でもない事象については責任を押し付け合う

開発チームに活気を与えるにはどうすればよいか

自分の周りの開発チームを眺めていると、活気がないチームはずーっと活気がないです。年単位の長期間で活気がありません。むしろピリピリしているし、一触即発ムードも漂っています。誰かひとりに原因があるわけでもなさそう。

もしかして、とおもえる原因は次のふたつ。

  • チームメンバーの入れ替わりが非常に少ない
  • 属人化している

そもそも活気のないチームに参加したいというメンバーなんていないし、いっこうに新陳代謝は進まない。何も知らない純粋な新人が配属されたりするけど、あっというまにダークに染められてしまっている。

属人化しちゃっているメンバーは「自分はこの仕事だけしておけば大丈夫」みたいにおもっちゃっていて、痛々しい。「自分が抜けたらこのチームは成り立たないだろう」っておもっている中心メンバーを入れ替えて負の連鎖を断ち切るのが、チームに活気をもたらす最善策ではなかろうか。

まとめ

多少仕事ができなかろうが、ムードメーカーは評価されるべき。

Visual Studio for Macの便利なショートカット

使用頻度が高くて便利なショートカットをまとめます。

エディタ系

元に戻す

⌘+Z

切り取り

⌘+X

コピー

⌘+C

貼り付け

⌘+V

行コメントの切り替え

⌘+/

WindowsVisual Studioと違ってすごく直感的で気にっています。トグルになっているのも使いやすい。

リファクタリング

名前の変更

⌘+R

一括編集できます。これもWindows版よりも使いやすい。

ビルド/デバッグ

すべてビルド

⌘+B

すべてリビルド

Ctrl+⌘+B

デバッグの開始

⌘+Return

ブレークポイントの設定/解除

⌘+\

これもトグルです。

Visual Studio for MacでReactive Extensionsやってみる

macOSでもRxやってみたい。ということで仮想環境のWindowsを...じゃなくてVisual Studio Codeを...でもなくてVisual Studio for Macで環境を作ってみました。

NuGetパッケージの追加

まずはNuGetパッケージを追加します。

f:id:mckuraw:20180121221646p:plain

依存関係のコンテキストメニューから[パッケージの追加...]を選択すると次の画面が表示されます。

f:id:mckuraw:20180121222742p:plain

右上にSystem.Reactiveと入力して絞り込みます。

f:id:mckuraw:20180121222736p:plain

System.Reactiveパッケージの左のチェックボックスをONにして[パッケージを追加]ボタンをポチッとします。依存パッケージは自動的に追加されるので、選択するのはSystem.Reactiveパッケージだけで大丈夫です。

f:id:mckuraw:20180121223412p:plain

ライセンスの同意を求められるので、軽い気持ちで[同意する]をポチッと。

f:id:mckuraw:20180121224117p:plain

依存関係の下にNuGetフォルダーが追加され、さらにその下にSystem.Reactiveがぶら下がります。

サンプルの実行

では動かしてみましょう。

using System;
using System.Reactive.Linq;

namespace RxTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Observable.Range(1, 10)
                      .Subscribe(Console.WriteLine);

            Console.ReadKey();
        }
    }
}

よし、バッチリ。これでmacOSでもRxできます。

アクティブな項目をソリューションエクスプローラーで選択された状態にする

Visual Studioの編集しているファイルとソリューションエクスプローラーで選択されているファイルが同じだと便利。

ソリューションエクスプローラーからファイルを選択して編集する場合は大丈夫。でもデバッグしていてブレークポイントにヒットしたときや例外が発生して別ファイルに移動したときは連動していないとすごく不便。

そういうときは以下の設定項目を確認する。

  1. メインメニューの[ツール] - [オプション]でオプション画面を開く
  2. オプション画面左の[プロジェクトおよびソリューション] - [全般]を選択する
  3. [アクティブな項目をソリューションエクスプローラーで選択された状態にする]をOnにする

C# 7.1のTupleが賢くなった

まわりに使う人がほとんどいなかったので、なるべく使わないようにしていたTupleクラス。Key-Valueの関係ではないのでDictionaryではないけど、とりあえず一時的にひとまとめにしたいときにすごく重宝する。だけどもItem1とかItem2という面白みのない要素名にはもうちょっとなんとかならないかとおもっていた。

これがC# 7.1で見事に解決していた。Tupleを構築するときの変数名がそのまま要素名になる。

C# 7.0以前

var name = "mckuraw";
var age = 100;
var t = new Tuple<string, int>(name, age);

Console.WriteLine($"Name:{t.Item1},Age:{t.Item2}");

これが、

C# 7.1以降

var name = "mckuraw";
var age = 100;
var t71 = (name, age);

Console.WriteLine($"Name:{t71.name},Age:{t71.age}");

こう書けるようになった。これでまわりの人にTupleクラスを勧めても「このItem1ってなに?」って言われなくなる(はず)。