Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

WPF with Prism6に挑戦

販売管理システムのデモを求められており、昔に作ってお蔵入りしたWPFベースのアプリを元にPrismを使って移植手術することにした。Windowsフォームで新しいアプリを作る気になれなかったし、WPFはMVVMと画面遷移がピタッとハマれば作りやすいと感じた。

オレオレ実装で死んだあの日

昔に作ったのは確か2年以上前。オレオレ実装で適当にやったことで、以下の問題が発生した。

  • ビューがめっちゃ重い
  • MVVMの挙動が一致しない
    • フレームワークを使わなかった
    • Viewの状態がリフレッシュされず、変な挙動があった

キーイベントを包括的に拾えるっぽい

オレが不勉強だった。WPFにはビヘイビアという機能があり、UIEement(例えばTextBox)に共通のキーイベント等の処理をフックすることができる。これがあればUIのコンポーネント化が加速でき、同じTextBoxだけど何らかの分類をすることで、ビヘイビアの有無を切り替えることもできると思われる。それだけでいいんです。マジで。

オレオレMVVMはやらない

Prismがよくわからなくて、ViewModelの作り方やコードビハインドからの呼び出し方、画面遷移等の設計がGDGDだった。MVVMもオレオレでやってしまった。今回は画面構成・遷移・MVVMを全てPrismのアーキテクチャに乗っけて作ってみることにする。

Prismのサンプルプロジェクトやかずきさんの自習レポジトリを見てみると、おおよその流れはわかった。クラスライブラリとしてViewをインジェクションできるModuleという機能を使うとDDLで組み込めるらしいので、プレコンパイル済のJSPのような感じで画面のロードが速くなってくれたら嬉しい。動的にViewを差し替えるアーキテクチャが最適化されている香りがする。

github.com
github.com

ViewModelの所もかなり簡単で、規則に沿ってViewModelを作れば勝手にDataContextに該当のViewModelがインジェクションされる。MVVMやるのが簡単になってるね。

Reactiveにどこまできるのか

ReactiveProgrammingを加速するライブラリもあるそうだ。最大の課題は、DataGridViewにバインドしたObservableCollectionの中身のオブジェクトの変更を検知する仕組み。Prismではないと思うから、その辺りに実績のあるライブラリ無いかな。RxJava的な。

Funcition Key 対応

これは絶対言われる気がするので、ちょっと考える。

WindowsFomで作るのめんどくさすぎる

レスポンシブに対応しようとして、TableLayoutなどを使ってみたはいいけど、やっぱり絶対配置文化なのでだるすぎる。TableLayoutのカラムは1つのアイテムしか登録できないと知って、諦めました。ボタンのUIを変えるのもWPFよりすごく面倒。Windowsフォームの弱点をWPFが解決しているのは確かなので、しっかり勉強し直して作り直すぞ〜。

俺達はビジネスマンだろ?

f:id:gothedistance:20170829092636p:plain
ダーティー桜塚さん、ええこと言うわ。グラゼニ13巻より。このためにKindle本買った。

ビジネスは浮いている葉っぱをつかむようなもの

ほぼ個人事業なんですけどまがりなりビジネスをやってみて、改めて思います。

基本的にふわふわと浮いていて、つかみどころがない。つかんでみるしか無い。

掴んでみたけども、握ってみたら葉っぱが既に枯れていた。

掴んだと思ったら手からすり抜けて、追いかけて掴みに行ったら事故って怪我した。

大きく見える葉っぱをつかんでみたら、ビリっと破けてえらく小さくなった。

でも、保証されている金を掴む為の努力は、したくなかったんだな〜。

自分でつかみとることに意味がある。

「好きなこと」と「得意なこと」

どっちを仕事にしたほうが良いかって考えると、絶対に「得意なこと」だよなって思う。

得意なことっていうのは、ある作業や成果物を作るのに同じ時間をかけた場合、他人が自分の倍以上の時間がかかったり、半分以下の成果物しか提供できないもの。他人より短い時間でより良い成果が出せるものが、得意なこと。好きかどうかは関係なくて。

その意味で言うと、僕はコードを書くのは好きだけど、得意じゃない。だから仕事としてコードを書くことは辞めてしまった。自分で作りたいモノ以外でコードを書くことはしない。

教えるのは好きじゃないけど得意だし、文章を書くのは好きだし、得意。他人に何かを伝えて説明するのも、得意。

得意なことをやって、まずは会社の足固めをしないよね。

情シスメディア「ジョーシス」が2017年7月末で閉鎖

www.josys.jp

数少ない情シス向けのメディアで、個人的には最大手の1つだったのではと思っていたジョーシスさんが閉鎖。情シス向けのメディアの難しさを思い知らされます。

色々思うことはありますが、中小企業の情シスをWebメディアで集客するなんてことは可能なのかなぁ... 販社が足で稼いでいる所に入っていくのは大変だし...うーん..

夢に進むことも重要だけど、塁に出る努力も大事

note.mu

頂いている色んなお仕事に邁進している内に、自分が最もやりたいと思っていたそう簡単にお金にならない仕事をする時間がなくなってしまった、というもの。フリーランス、あるあるじゃないかな〜。エンジニアだとサービスを開発して云々的なものに近い。

目の前のお仕事をやれば必ず報酬があるのだから、そういったものがドンドン後回しになるのは自然なこと。でも、それだけになってしまうと何のために独立したのかわからない。

まずは塁に出る

独立して間もないころに、最所さんもご存知である我らがビープラウドの治夫さんから頂いた金言をシェアします。

「ござ先輩、ホームラン狙いで見逃し三振してはダメです。まずは塁に出ましょう。チャンスメイクしてくれたら、あとはチームで野球ができます。点が入るかどうかはわからないけど、塁に出ないと何も始まらないですよ。」

野球に例えると何でもよく分かる。この金言は、独立後の僕の行動指針となっています。

頂いている仕事が自分の最もやりたい内容と条件にド真ん中で来る(ホームランボールが来る)ことは、早々ありません。インサイドにズバッとくるようなクロスファイヤーなお話だったり、ボールゾーンに落ちるフォークのような拾うのが難しい話だったりします。

そういった時に「これは自分の待っているボール(条件や内容その他諸々)じゃないんで、手を出さずに見逃し三振」ではなく、塁に出る(次に繋げる)ための努力をやらないのはまずい、ということ。

自分が動くのが難しい話でも、向こうはお話をしてくれたわけだから少なからずお困りになっている。「その話だったらXXさんだったらよく知ってると思うので、ちょっと聞いてみます」とか「XXはやったことないけど、YYという立ち位置なら協力できます」とか。何かしら自分がお役に立てる為の努力をして、進塁打を打つ事を目指す。

もちろん、単なる犠牲じゃ意味がない。点が取れるか(売上になるか)どうかは別問題。でも、打点を上げるのは自分じゃなくても良い。他の人でいい。得点圏までランナーを進めたことが重要で、打線がつながるように努力すれば良い。

最もやりたいことが出来る土壌を作るためにも、お互いに、塁に出る努力をがんばりましょう。

フローチャートは制御構造を書く以外の用途に適さないのでは

アラフィフのおじ様方がすごく好きなのよね・・・これ。

フローチャートって、制御構造をイメージして表現するために作られたものなんじゃないかなぁ。制御構造って逐次、分岐、繰り返しの3つしかないから、それらのイメージを可視化するために使う。ま、それならわかる。でも、例外/オブジェクト/同期 or 非同期/スレッド/ジェネレーターやデコレータといった現代ではふつーのプログラミングになると全く表現できないですよね、これ。

プログラミングをイメージで可視化するための記法って、21世紀向けに再発明されていいんじゃないかな。え?UML?(∩ ゚д゚)アーアーきこえなーい