布団が俺を呼んでいる

丘山大一のぶろぐ

岳南鉄道

工場夜景で有名(らしい)岳南鉄道にのってきました。
通称「岳ちゃん」

夜景の見方

鉄道夜景電車が月に1回程度運行されています。2両編成。
1両目は通常通りですが、2両目は電気を非常灯にし、暗い車内から夜景を見られます。
ちなみに、解説のガイドつきでした。(専門の方がいらっしゃるようで)
運賃は一日フリー券を700円で購入。昔懐かしい硬い紙キップで、富士山の写真入り。

写真は撮るには撮ったのですが、走行中はフラッシュが使えないためピンぼけしまくりでした。
ので、どんなところ?
という方は、
「岳南鉄道 夜景」
あたりで検索してください。画像検索すると結構キレイな写真が拝めます。

なお、始発駅である岳南鉄道「吉原駅」はJRの駅のさらに奥にあり、ぶっちゃけ見つけづらいですw
もし行く人はちょっと余裕をもって行くことをお勧めします。

昔は

工場夜景のよさなんて全然理解されませんでしたが、いい時代になったもんだ……。


鉄道コレクション 岳南電車ED40形(ED402)

新品価格
¥1,700から
(2016/9/25 20:38時点)

Delphi プロジェクトファイルのコードの中で無名メソッドを使うとメモリリークが発生する

なんか Delphi 話多いなー。
無名メソッド、anonymous methods とか言われるヤツです。
正直、可読性が落ちると思っているのですが、サクッと書くときに便利なのでちょいちょい使います。

現象

下記のようなコードを書くと、メモリリークが発生します。
program Project1;
uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var
  b :Boolean;
begin
  ReportMemoryLeaksOnShutdown := True; // メモリリークを検出
  b :=
    (function : Boolean
    begin
      Result := True;
    end
  )();
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

対応

無名メソッドを使わないようにするしか思いつきませんでした……
program Project1;
uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
function hoge : Boolean;
begin
  Result := True;
end;
var
  b :Boolean;
begin
  ReportMemoryLeaksOnShutdown := True; //メモリリークを検出
  b := hoge;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

原因予想

全然分かりません。
・Delphiの無名メソッドはインターフェースでどうたかこうだか、
・インターフェースは参照カウントがどうたかこうだか、
・でもってインターフェースの破棄のタイミングはEnd 節の実行時でどうたかこうだか、
・でもプロジェクトファイルにあるのは「end.」(ピリオド)であって「end;」(セミコロン)じゃないなー
とか妄想してみた。

似たような事例はStackoverflow で見かけるので、きちんと探せば原因が分かると思うのですが。
探すのめんどい(ぇ)

若干ですが仕様という名のバグじゃないか疑惑もあったりなかったり。

え、無名メソッドを使うなって?

だって楽なんだもん。
特にメソッド名を考えなくて済むあたりが楽。
……命名苦手なんよ……


blogengine net で Runtime Error

かなり焦った。

経緯

拡張機能入れたらエラー。
その後、アクセスしたらRuntime Error が表示されるように。

対応

Azure ポータルサイト上での修正方法がぱっと思いつかなかったので、Web Matrix をインストール。
サイトをDLして、Extensions フォルダに入っている「拡張機能.cs」を削除。
サイトを発行。
これで直った。

正しい対応

拡張機能を入れる前に、バックアップをとりましょう。
サボったからいけなかったのです、(ノД`)・゜・。
blogengine net の勉強をさぼっていたので、他にどのようなファイルに影響があったのか、またこれが正しい対応だったのか不明。




BUFFALO USB3.0 外付けハードディスク PC/家電対応 2TB HD-LC2.0U3/N [フラストレーションフリーパッケージ(FFP)]

新品価格
¥8,480から
(2016/9/19 23:03時点)

RadStudio では、generics<generics> ができない?

このごろDelphi と Firebird の記事ばかりなような。
で、今回は Delphi というか Rad Studio というかのお話。

Generics の中に Generics はダメ?

なんか変だな、とは思っていたんですがようやく原因が分かりました。
こんな感じのfunctionを宣言をすると、「Ctrl + Shift+ C」でエラーが出て、スケルトン生成できなくなります。
function hoge : TList<TList<string>>;
スケルトン生成できないだけで、手でゴリゴリ書けばちゃんとコンパイルは通ります。

もちろんというかなんというか、下記はOK.
function hoge : TList<TStringList>;

まあ、 TList<string> だったら TStringList で置き換えちゃえば大体いけるのでいいですけど、他の場合はどうすれば……。
IDE側のバグだとしか思えないんですが……
検証しているXE5がダメなだけで、新しいヤツだと直ってるのかな?

結論

VS + C# を使えば全部解決。





OBJECT PASCAL HANDBOOK―マルチデバイス開発ツールDelphiのためのプログラミング言語完全ガイド

新品価格
¥6,480から
(2016/9/6 08:13時点)

Windows Phone (Windows Mobile) デバイス'USB Composite Device'を停止できません。 への対応

USB接続しているものを外す際、ハードウェアを安全に抜こうとするとこのワーニングが出ることがあります。

対応

タスクマネージャーか何かで、動作中のサービス一覧を表示し、「IpOverUsbSvc」を停止させれば突破できることがあります。
たしかこのサービスはUSB実機デバッグで必要になるサービスだったと記憶しているので、必要ならもう一度起動させましょう。


リッツ・カールトンが大切にする サービスを超える瞬間

新品価格
¥1,620から
(2016/9/3 16:06時点)

Delphi BOM無しでテキスト保存

ISQL.exe に食わせるスクリプトを、なぜかDelphi経由で吐き出す必要が出てきました。
で、そのためにはBOMを外してテキスト保存する必要がありました。

やり方はこんな感じ

  sl := TStringList.Create;
~sl に文字列を突っ込む
  sl.WriteBOM := False;
  sl.SaveToFile(ファイル保存先, TEncoding.UTF8);

要はsl.WriteBOM := False; が必要、ということですね。

……このやり方を全然知らなかったんで、バイト操作の方法を調べようとしていたのは内緒です……


OBJECT PASCAL HANDBOOK―マルチデバイス開発ツールDelphiのためのプログラミング言語完全ガイド

新品価格
¥6,480から
(2016/9/6 08:13時点)

Firebird Embededのお勉強 ISQLの使い方 スクリプトファイルのSQLを実行できない

解決? まで3時間ほどかかりました。

結論!

ISQL.exe で「-i」オプションをつけて読み込ませるファイルには、BOM (Byte Order Mark) をつけてはいけないらしい。

細かい話

isql.exe - i hogehogeScript.fmq -user SYSDBA -password masterkey -charset UNICODE_FSS 'HOGE.FTB';
とやったら、何回やっても最初のクエリの実行で失敗する。
接続する文字セットを変えたらうまくいくかな? と思いましたが、それでも失敗。
「最初だけ失敗する……?」
「最初にだけあるもの/ないもの ってなんだ……?」
「BOMだ!」
「とりあえずBOM外せ!」
「なんか知らんが動いたぞちくしょー」

根拠

やってみてダメだった、BOM外したらうまくいった……というだけです。
根拠となるドキュメントを発見できていません。

・私の検索能力が低い説。
・そもそもISQL の使い方間違ってんだよ説。
・BOM がダメなんて常識だろ説。
・Windows でスクリプト系ファイルを書く情弱なんて、我々Firebird 業界にはいらんのだよ説。
・はぁ? 何言ってんの? お前の環境おかしいよ説
etc. 

諸説ありますが、とりあえず誰か正解を教えてください。

思うに

BOMがダメだとしたら、MS信者、WIndows 万歳な人間には辛い仕様だぜよ。


Firebird 徹底入門

新品価格
¥4,104から
(2016/8/31 20:45時点)

Windows Phone (Windows Mobile) アップデートがかかってた……(trinity) 201609

気が付いたら更新されていました……
ぐぬぬ。

バージョン
OSのビルドバージョンは 10.0.10586.545 で変わっていません。
ファームウェアリビジョンは、 1028.020.001.92 になっていました。
本日時点の各バージョンは、
  • バージョン:1511
  • OSビルド:10.0.10586.545
  • ファームウェアリビジョン番号:1028.020.001.92
  • ハードウェアリビジョン番号:1.0
  • 無線ハードウェアバージョン:1.0
  • チップSOCバージョン:8952
ファームウェアリビジョンが上がっている=trinity側の更新のはずだ、ということでタイトルにはtrinityをくっつけてます。
違ったら記事をなおそう。



Firebird Embededのお勉強 ISQLの使い方 DBの作り方

公式ドキュメントにも詳しく書いてありますし、検索すれば色々出てきます。

これは単なる自分メモ

isql.exe
CREATE DATABASE 'HOGE.FTB' USER 'SYSDBA' PASSWORD 'masterkey'' PAGE_SIZE = 8192 DEFALUT CHARACTER SET UTF8;

CREATE後は、そのままそのDBに接続されている状態なので、クエリを実行できます。


達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

新品価格
¥2,808から
(2016/8/31 20:45時点)

SQL Server BCPユーティリティ 空文字はNULL文字として出力される

恥ずかしながら知りませんでした。

ココで確認

>bcp ユーティリティは、データを抽出するときに、空文字列を NULL 文字列で、NULL 文字列を空文字列で表すことに注意してください。
NULLをNULL文字 で、ではなく、NULL なら空文字。
空文字なら NULL文字。
直感と逆なんですね。

なんでコレに困ったか

bcpで吐き出したファイルを別プログラムで処理しようとしました。
んが、途中でNULL文字が入っているため、本当なら空文字として取り扱いところが、終端文字として扱われてしまってうまく処理できなかった、という。

SQL Server 2016の教科書 開発編

新品価格
¥3,888から
(2016/8/27 22:22時点)