Delphi 開発環境で欲しかったモノが出そろってきた
どゆこと?
以前、Rad Studio 勉強会にて以下のような発表したんですよ。
www.slideshare.net
で、導入したいなーってことで以下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.* のパッケージ多めなので、その辺含めて要確認ですな。
ガチガチに緊張しながら Scala Matsuri 2016 の LT で発表した
やるんだよね(ニッコリ) と再三再四背中を押していただいての発表と相成りました。
生放送で流れると当日確認してさらに死にかける罠。
内容はこんな感じ
1行もコード無し!!!
ええやん、軽めのやつがあっても…
でもやってよかったかな。
かなりガチ勢が多かったのですし、ドワンゴの方が半数ですし、ゆるい内容もあっていいでしょう。
うん、そう思おう。
本編まとめはまた別途。
2015年歳末棚卸し
Twitter 見ながらふりかえり。
なんか、色々積もり積もったものを頑張った1年だったかなぁ、と感じます。
特に CI 環境については、なんでできないんだろうを一つ一つ潰して、やっとできるようになったので、
結構感慨深くあります。*1
Podcast やブログ記事を見ながら、そうそうや違うんじゃね、と自分の意見も強く持てるようになりました。
この辺は新しい課に異動したことによる恩恵ですね。同じく課員となった方や同じプロジェクトを進めている方が僕と違う観点をもってられるので、とてもありがたいです。
どうしても技術よりになるところを、製品としてどうなのかと諌めてもらっている感じがします。
で、来年はもうちょっとコードを出していきます。
関数型も勉強していいところとかも見えてきたので、その辺を反映したコードを出す感じですかね。
この間の RadStudio 勉強会で LT した内容も、関数型を受けての出力なので。
最後に、来年はバグに当たらない年がいいかなぁ…
*1:そういやブログに書くって言って、書いてない…
DevLOVE現場甲子園2015『西日本大会』に参加してきた
Delphi の IFuture やら ITask やら
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, System.Threading, System.Generics.Collections, System.Classes; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private 宣言 } function GetRandomInt(): IFuture<Integer>; public { public 宣言 } end; var Form1: TForm1; implementation {$R *.fmx} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin TTask.Run( procedure var Tasks: array[0..4] of ITask; ValueStrs: array[0..4] of string; ii: Integer; Sum: Integer; begin for ii := 0 to 4 do begin Tasks[ii] := GetRandomInt().Start; end; TTask.WaitForAll(Tasks); Sum := 0; for ii := 0 to 4 do begin Sum := Sum + IFuture<Integer>(Tasks[ii]).Value; ValueStrs[ii] := IFuture<Integer>(Tasks[ii]).Value.ToString(); end; TThread.Synchronize(nil, procedure begin ShowMessage(string.Join(' + ', ValueStrs) + ' = ' + Sum.ToString()); end ); end ); end; function TForm1.GetRandomInt: IFuture<Integer>; begin Result := TTask.Future<Integer>( function: Integer begin Result := Random(100); Sleep(Result * 100); end ); end; end.
一応出来たけどさ・・・
無名関数が多すぎ。
あと型推論でジェネリクス書かなくて良くなるともうちょいマシかな。
function TForm1.GetRandomInt: IFuture<Integer>; begin Result := TTask.Future( function: Integer begin Result := Random(100); Sleep(Result * 100); end ); end;
これとかエラーになるけど、前後見たら普通に補ってくれてもー、とちと思ってしまう。
Delphi 10 Seattle Professional 買ったった。お値段なんと・・・
持ってなかったんです。
会社のライセンスと社内のPCだけで色々頑張ってました。
だって高いんですよ・・・
今回の購入金額、17万5千円。
何気に今までの人生の中で、5本の指に入る購入金額な気がする・・・
XE8 だと、13万ぐらいだったんですけどねー。
ライセンスがどうのであがりましたね。
買収されたけどこの辺どうなるんでしょう。ちょっと不安。
何はともあれ、買ったからには本腰入れてやりますとも。
直近は Rad Studio 勉強会のネタ作り。
rad-studio-osaka.doorkeeper.jp
あ、Rust も勉強中だよ!
与太話
おもーい公式サイトなんですけどさらにはた迷惑なことに、一部リンクがアメリカ経由っぽいんですよね・・・
以下流れ
アメリカサーバーへリクエスト
↓
2~4秒後、レスポンスで 303 が返ってくる
↓
jp へアクセス
↓
2から4秒後ページ表示完了
日本サイトだけってわけじゃあなくて、アメリカ以外全部そうなんだよなぁ・・・
誰に言えばいいのやら。