PHPの第一印象
抗えない流れでPHPの案件をすることになりました。抗えない理由はさておき、PHPの第一印象をメモっておきます。
変数の宣言どこ?
$name = '名前';
この行だけを見たときに$name
という変数がはじめて登場したのか、上のほうで登場して使いまわしされてるのかが分かりませんでした。いまだにvar
て書いてしまう。
可変変数
$a = 'hello'; $$a = 'world'; echo "$a $hello";
これでhello world
と出力できる。動的にグリグリと変数名にアクセスできるのはすごく便利。C#でもReflectionでグリグリできるけど、PHPの可変変数のほうがハードルが低い。詳しく以下で。
macOSとVMware Fusion上のWindowsでCaps Lockキーの機能が逆になる
ずばりタイトルのとおり。VMware Fusion上のWindowsを起動してログインしようとパスワードを入力するときに「Caps Lockオンになってるで」みたいなメッセージが表示されます。
Windows側でCaps LockをオフにするとmacOS側でCaps Lockがオンになってしまいます。
VMware Knowledge Baseにピンポイントの情報を見つけました。
解決方法
Fusion が実行されている場合は、仮想マシンで Caps Lock キーの機能が逆になることがあります。 この問題を解決するには、VMware Fusion のメニュー バーで、仮想マシン > キーの送信 > Caps Lock を選択します。これにより、追加の Caps Lock コマンドが仮想マシンに送信され、Mac には送信されず、2 つが同期された状態に戻されます。
なんかこう、もうちょっとスマートに解決できればいいんだけどな。Windows起動時にスクリプトを実行して自動的に上記のメニュー選択できるような。
開発チームに活気があるときー、ないときー
開発チームに活気があるときとないときの差は何なのか気になったので、それぞれの特徴をメモしておきます。
開発チームに活気があるとき
- 個人が責任範囲を広くとる
- 重なり合った責任範囲については協力的解決に向かう
開発チームに活気がないとき
- 個人が責任範囲を狭くとる
- 責任範囲が重なり合うことはない
- 誰の責任範囲でもない事象については責任を押し付け合う
開発チームに活気を与えるにはどうすればよいか
自分の周りの開発チームを眺めていると、活気がないチームはずーっと活気がないです。年単位の長期間で活気がありません。むしろピリピリしているし、一触即発ムードも漂っています。誰かひとりに原因があるわけでもなさそう。
もしかして、とおもえる原因は次のふたつ。
- チームメンバーの入れ替わりが非常に少ない
- 属人化している
そもそも活気のないチームに参加したいというメンバーなんていないし、いっこうに新陳代謝は進まない。何も知らない純粋な新人が配属されたりするけど、あっというまにダークに染められてしまっている。
属人化しちゃっているメンバーは「自分はこの仕事だけしておけば大丈夫」みたいにおもっちゃっていて、痛々しい。「自分が抜けたらこのチームは成り立たないだろう」っておもっている中心メンバーを入れ替えて負の連鎖を断ち切るのが、チームに活気をもたらす最善策ではなかろうか。
まとめ
多少仕事ができなかろうが、ムードメーカーは評価されるべき。
Visual Studio for MacでReactive Extensionsやってみる
macOSでもRxやってみたい。ということで仮想環境のWindowsを...じゃなくてVisual Studio Codeを...でもなくてVisual Studio for Macで環境を作ってみました。
NuGetパッケージの追加
まずはNuGetパッケージを追加します。
依存関係のコンテキストメニューから[パッケージの追加...]を選択すると次の画面が表示されます。
右上にSystem.Reactive
と入力して絞り込みます。
System.Reactiveパッケージの左のチェックボックスをONにして[パッケージを追加]ボタンをポチッとします。依存パッケージは自動的に追加されるので、選択するのはSystem.Reactiveパッケージだけで大丈夫です。
ライセンスの同意を求められるので、軽い気持ちで[同意する]をポチッと。
依存関係の下に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できます。
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ってなに?」って言われなくなる(はず)。