ソモサン

私rohkiによる活動や読書の記録をつらつらと書くページです

トラックボール生活 -1週目-

Bash on Windows の流行にのれてない rohki です。
試す時間が・・・

さて、使っていたマウスがなにやら不良になってきたので、上のトラックボールを購入してみました。
ので、使用感等々を書いてみます。

良かった点

  • 肘がいたくならない
  • 握りが良い感じ
  • ボール転がすって結構気持ちいい

下2つについては、メリットというより感覚ですけど、こと毎日使う道具だからこの辺の直感は大事な気がします。

悪かった点

  • 細かい操作に慣れるまで大変
  • 戻るボタンが押しづらい
  • 1週間たってボールが引っかかるようになった

細かい操作については、慣れの問題ですから良いんです。どうにかなってきました。
が、1番下がきつい・・・
さっきの感覚の話で言うなら、操作したのにカーソルが動いてくれないので、イラッとするんです。
ボールを代えるなり何なりで対策する予定。

ボールの引っかかりがどうにかなれば、おおむねよい買い物でした。
どうにかせねば。

ややこしい COM とスレッドの初期化(?)をコードにする

Windows に相も変わらずどっぷりの rohki です。

Windows には COM という便利な、便利な仕組みがあります。

この COM とスレッドが絡むと、アパートメントという仕組みが出てきます。
COM ライブラリを初期化する (Windows)
上記を参照すると、以下のように使い分けるとよい、とのこと。

  • スレッドでウィンドウを作成するなら、アパートメント スレッド(COINIT_APARTMENTTHREADED)
  • 持たないなら、マルチスレッド(COINIT_MULTITHREADED)

まぁ、だいたいはマルチスレッドでしょう。*1
この切り替えは、スレッドに対して CoInitializeEx で設定します。*2

で、これ設定したら CoUninitialize で解除しなきゃなんですが、いちいち気にしたくないです。
なんで、以下のようなクラスを作ってみるとよいかなーって考えてます。

COMUtils

TThread.Execute は final でこのクラス以降で override 出来ないようにして、実質的な処理をかく関数を別に用意する形です。
こうすると利用する人はいちいち気にしなくても良いことになります。

CreateCoInitializeEx を書けば、って僕も一番最初思ったんですが、この設定は先ほどもあげたようにスレッドに対してする必要があるんです。
Create 処理を行うのは当然呼び出し元スレッドなので、生成されたスレッドに設定が適用されないままとなります。
だからわざわざこんなことしてます。

あー、ややこし。

*1:Delphi でフォームを持つと暗黙的に COINIT_APARTMENTTHREADED と聞いた気がしないでもないです

*2:設定なのに Initialize…

GW 読書強化週間!

の予定だった

GW の間に積み本消化してやるぜ!といきごんでいたのです。
ところがどっこい、読み切れたのは2冊でした。

その紹介と感想をば。

エッセンシャル スクラム

精神的ダメージを多分に負いました。GW 中でなければ読み切れなかった気がしますw
スクラムについてのこうあるべき、なぜなら~をざらっと知れたので読んでよかったかなーって所です。 で、やっぱり3役に求められるスキルセットは各々だいぶちがうな、ってのが明確になりました。
この辺の責任境界はしっかりした方がいいんでしょうね。

あとですね、政治のにほいがそこはかとなく…
というのも、結構なページを割いて、経営レベルでのスクラム的な方法論や組織論への言及があったからです。
この辺のレベル感は DDD でも近しいものがありました。戦術と戦略やったと思います。
スクラムで定義されているのは戦術レベルまでやけど、戦略レベルやってるところも多いし書いとくねーてかんじです。
政治は分からないです。

技術的負債という皆大好きなワードもありました。
かくいう僕もがっつり読んだんですが、考え方は良いなーってところです。 スケジュールを詰めれば、その詰めた分だけの負債をコード上で背負うわけで。 で、利子ついた負債の返済額と遅延コストを比較してどうのってやつです。

いずれにしても、僕自身開発一辺倒な輩なので視点を広げる意味ではよかったです。

闘うプログラマー

こいつはだいーぶ積んでましたな。
Windows NT なんてばかでかいもの作ればそらもう紆余曲折あるわけですが、そいつの開発記です。bash on Windows に思いをはせながら読みました。
で、すっごい人間くさい話でした。おそらく、登場人物の誰がしかに自分を重ねるでしょうし、周りの誰かも重なるでしょう。

僕はこうでした。ネタバレになるので、詳細ははしょります。

読んでる途中

数学パズル

自分の劣化具合に愕然としているところ。ちょくちょく解いてます。Rustで。

マダマダイッパイ

エッセンシャル スクラムは内容的にも分量的にもきつかたです。 次のときにはうすめの本から手を出します。
ただ、祝日がとおいんだよなぁ…

Delphi 開発環境で欲しかったモノが出そろってきた

どゆこと?

以前、Rad Studio 勉強会にて以下のような発表したんですよ。

www.slideshare.net

で、導入したいなーってことで以下3つがありました。

  1. ソースコードの分析
  2. テストコード実行の簡略化
  3. Git との統合

で、このうち2つが揃った! って話です!!

続きを読む

REST.JSON での直列化

JSON の色々を調査中で、その一環として見つかったので書きます。
こんな書き方すると各方面の方に怒られますが、手続き的に。

procedure TForm1.JSON;
var
  PersonList: TList<TPerson>;
  JsonObj: TJSONObject;
begin
  PersonList := nil;
  JsonObj := nil;

  try
    PersonList := TObjectList<TPerson>.Create();
    PersonList.Add(TPerson.Create());
    PersonList.Last.Name := 'Alice';
    PersonList.Last.EMail := 'Alice@wonderland.org';


    PersonList.Add(TPerson.Create());
    PersonList.Last.Name := 'Bob';
    PersonList.Last.EMail := 'Bob@wonderland.org';


    JsonObj := TJSON.ObjectToJsonObject(PersonList);
    Memo1.Lines.Clear();
    Memo1.Lines.Add(JsonObj.GetValue('items').ToString)

  finally
    FreeAndNil(JsonObj);
    FreeAndNil(PersonList);
  end;
end;

で、実行したやつを整形した奴が、以下になります。

[
    {
        "eMail": "Alice@wonderland.org", 
        "name": "Alice"
    }, 
    {
        "eMail": "Bob@wonderland.org", 
        "name": "Bob"
    }
]

Memo1.Lines.Add(JsonObj.GetValue('items').ToString) としているのは、データ以外の物もくっついてくるから。

Memo1.Lines.Add(JsonObj.ToString) にすると、以下の通り。

{
    "items": [
        {
            "eMail": "Alice@wonderland.org", 
            "name": "Alice"
        }, 
        {
            "eMail": "Bob@wonderland.org", 
            "name": "Bob"
        }
    ], 
    "listHelper": [
        2
    ], 
    "ownsObjects": true
}

総合すると、使えないことないけどやりやすいかと言われると微妙、という所。
Delphi のアプリケーションだけでやりとりするならともかく、他言語が絡んでくると items 以外は邪魔だし・・・

まぁ、REST.* のパッケージ多めなので、その辺含めて要確認ですな。

参考
Building Delphi Classes from JSON • DelphiABall

ガチガチに緊張しながら Scala Matsuri 2016 の LT で発表した

やるんだよね(ニッコリ) と再三再四背中を押していただいての発表と相成りました。
生放送で流れると当日確認してさらに死にかける罠。

内容はこんな感じ

1行もコード無し!!!
ええやん、軽めのやつがあっても…
でもやってよかったかな。
かなりガチ勢が多かったのですし、ドワンゴの方が半数ですし、ゆるい内容もあっていいでしょう。
うん、そう思おう。

本編まとめはまた別途。