(2014/04/01~)
2014/04/11

OpenSSL の Heartbleed (脆弱性) と Indy

まずは以下をご覧ください。

この脆弱性が存在するのは 2012/04 リリースの OpenSSL 1.0.1 ~ 2014/01 リリースの 1.0.1f なので、OpenSSL 1.0.1g 以降を使えばいい事になります。

心当たりのある方は、Indy ビルドの OpenSSL (DLL) を差し替えてください。

QC#103139 の Workaround (回避方法)

TProxyObject に TModel3D を指定しても何も表示されないという QC です。

Report No: 103139            Status: Open
TModel3D can not be proxy object.
http://qc.embarcadero.com/wc/qcmain.aspx?d=103139
QCWIN:Defect_No=103139

Delphi XE2 の時からある問題ですが、設計時はともかく、"実行時にはどうにかする方法" を中山さん (a.k.a. luxidea) に教えて頂きました。


[uProxyObjectFix.pas]
unit uProxyObjectFix;

interface

uses
  System.Types, FMX.Controls3D, FMX.Types;

type
  TControl3Dhelper = class Helper for TControl3D
  private
    // Access Methods
    function Get_Size: TPoint3D;
    procedure Set_Size(const Value: TPoint3D);
    function GetAbsolMatrix: TMatrix3D;
    procedure SetAbsoluteMatrix(const Value: TMatrix3D);
    // Methods
    procedure RecalcChildrenAbsolute;
    procedure RenderTree;
  public
    // Properties
    property _Size: TPoint3D read Get_Size write Set_Size;
    property AbsoluteMatrix: TMatrix3D read GetAbsolMatrix write SetAbsoluteMatrix;
  end;

  TProxyObject = class(FMX.Controls3D.TProxyObject)
  protected
    { protected }
    procedure Render; override;
  end;

implementation

{ TControl3Dhelper }

function TControl3Dhelper.GetAbsolMatrix: TMatrix3D;
begin
  result := Self.GetAbsoluteMatrix;
end;

function TControl3Dhelper.Get_Size: TPoint3D;
begin
  result.X := FWidth;
  result.Y := FHeight;
  result.Z := FDepth;
end;

procedure TControl3Dhelper.RecalcChildrenAbsolute;
var
  F: TFmxObject;
begin
  if Assigned(Children) then
    for F in Children do
      if (F is TControl3D) then
        (F as TControl3D).RecalcAbsolute;
end;

procedure TControl3Dhelper.RenderTree;
begin
  RenderInternal;
end;

procedure TControl3Dhelper.SetAbsoluteMatrix(const Value: TMatrix3D);
begin
  FAbsoluteMatrix := Value;
  FRecalcAbsolute := False;
  RecalcChildrenAbsolute;
end;

procedure TControl3Dhelper.Set_Size(const Value: TPoint3D);
begin
  FWidth  := Value.X;
  FHeight := Value.Y;
  FDepth  := Value.Z;
end;

{ TProxyObject }

procedure TProxyObject.Render;
var
  M: TMatrix3D;
  S: TPoint3D;
begin
  if Assigned(SourceObject) then
    with SourceObject do
      begin
        M := AbsoluteMatrix;
        S := _Size;
        AbsoluteMatrix := Self.AbsoluteMatrix;
        _Size := Self._Size;
        SourceObject.RenderTree;
        AbsoluteMatrix := M;
        _Size := S;
      end;
end;
end.

使い方は簡単です。

  1. 上記 uProxyObjectFix.pas をプロジェクトに追加
  2. TProxyObject を使っているユニットの uses に uProxyObjectFix を追加。

TProxyObject に TModel3D を簡単に指定できるようになると表現の幅が広がってステキです。

vcl-styles-utils

VCL スタイル用のユーティリティイロイロ。既存の VCL スタイルの HLS をいじって、新しいスタイルみたいにみせたりとかできます。

意外な (?) ネットワークの不調の原因

お客さんに、

等のクレームで調査を依頼され、ハブやケーブルを変えても状況が改善しない場合には、次のアクションを起こす前に「原因がウチのせいじゃなかったらこれまでに掛かった費用はキッチリ請求しますよ?」 と断っておきましょう。

…で、調査すべきは複合機や冷蔵庫等、"常時稼働している機器のアース" です。稼働している機器で "アースを取らなければならないのにアース線が接続されていないもの" があったら一時的に止めてみましょう…そしてネットワークの速度を計測してみましょう。

ping 打って戻ってくるのが 4 回に 2 回とかだったのが 4 回とも返ってきたり、レスポンスがよくなったりしたらアースをちゃんと取っていなかったせいです。この調査はそんなに手間や費用が掛かるものじゃないので、やってみても損はないと思います。

アースが原因だと判明したら、高いものじゃないのでホームセンターからアース線を買ってきて接続してあげましょう。あらぬ疑いを掛けられて激しく叱責されたからといって、鬼の首を取ったように責め立てる必要はありません。淡々と作業報告書を書いて請求書を提出しましょう…「では、これでお願いしますね」

意外な (?) ネットワークの不調の原因の原因

お客さんが模様替えとかで勝手に複合機を移動して、アース口のないタップや延長コードに接続していたりすると現象に遭遇します。そして模様替えの後で LAN 配線の関係で呼ばれるので「お前がいじってからおかしくなった!」と、あらぬ疑いを掛けられる、と。

…自社の環境にも心当たりがありませんか?


2014/04/15

RAD Studio XE6 リリース

もう出たの?

RAD Studio XE6 の新機能及び変更点

RAD Studio XE6 の新機能は以下の通り (改善点は含まない)。

RAD Studio XE6 の変更点で目に付いたものをピックアップ

C++Buider の修正ばっかりだと思っていましたが、今回は気合が入っている印象を受けます…XE5 からそんなに時間が経っていないのに。


2014/04/16

RAD Studio XE6 で修正された QC と当サイトの記事

ネタにしていた件が直ってますね。

IMEMode と TabOrder が普通に使えるようになったのは朗報です。そういえば、センサーコンポーネントも VCL / FMX 両用になりましたね。

TWebBrowser も IE 最新版を使うようになったんでしたっけ。


2014/04/23

業務アプリ開発で活かせる Delphi プログラミングテクニック - Reprise -

はっじまるよー♪

Chapter 1

特にありませんが、セッション全体の検証ソースコードとバイナリのアーカイブは以下から DL できます。

Chapter 2

Hyper-V は以下から DL できます。

リモートデバッガについては以下の記事を参考にしてください。

Chapter 3

名指ししてしまった "山本 (ネタ殺し) 隆さん" の記事。デブキャン前日にこの記事が書かれているという…。

SynTaskDialog 改 と InkEdit。SynTaskDialog 改は XP 対応のためでもあるのですが、2007 とかの TaskDialog には様々な制約があるのです (XE6 とかだと大丈夫だと思いますが…)。詳細はリンク先の記事をお読みください。

細川さんの過去のセッション。ジャンプリストに関する情報があります。TTaskBar は XE6 で追加されていますが、セッション資料にはタスクバーボタンに関する情報も載っています。

タッチとジェスチャの話。それ自体はともかく、FireMonkey の有り難みが解る記事となっています。

Chapter 4

Manifest Ex コンポーネントとアプリケーションマニフェストについてはこちら。

アーカイブの中に評価コードがあります。

Chapter 5

ツールバーの "配置、間隔、位置合わせ" の件の詳細は DocWiki を確認してみてください。

Value Calc プロパティエディタはこちら。

らいなさんも名指ししちゃいましたが、その節はお世話になりました。開発の経緯は記事中に書かれています。

Delphi 2010 以降だと、コンポーネントを複数選択して実行した場合、TabOrder の評価は個々のコンポーネントに対して行われます。

アーカイブの中に丸いボタンのデモがありますが、XE4 で作ったものなので、環境によってはエラーで実行できないかもしれません。FireMonkey では簡単に丸いボタンが作れるのですが、作り方がわからない方はこちらを御覧ください

TCustomEdit に AsInteger とかのプロパティを追加するクラスヘルパについては以下を参照してください。

Chapter 6

Excel 関連です。

Chapter 7

SHFileOperation() が遅い件の評価コードは アーカイブの中にあります。

「TFile / TDirectory / TPath にもう少しだけ機能が欲しい」と言っていましたが、実際に作ったものがこちらになります (^^;A

SUBST や net use 同等の事をコードでやるための TDriveEx も含まれています。

Chapter 8

FireMonkey 用の数値入力コンポーネントはこちら。

FireMonkey コンポーネントの簡単な紹介は以下を参照してください。XE6 で追加されたコンポーネントも網羅してあります。

Chapter 9

ProgressBar の評価コードはアーカイブの中にあります。

未対策だと、プログレスバーが最後に到達する前に ShowMessage() のダイアログが表示されてしまいます。この件と速度低下の件を解消するためのユニットは以下にあります (デブキャン資料に書いたコード+αです)。

End of Chapter

以上が昨日のエンバカデロ・デベロッパーキャンプ【C2】セッションの補足記事となります。何の事だか解らない方は資料やビデオが公開されるのをお待ちください。暫定資料でよければ事前ダウンロードページからまだ DL できたと思います ("全資料をダウンロード" から個別に DL できます)。

振り返ってみると、よくもまぁ 95P もやったな、と思います (^^;A


2014/04/25

AppMethod 発売

デブキャン前日の 21 日に正式発売になりましたが、まだ国内の各ショップでは取り扱いがないようですね。

デブキャンで明らかになったのは、無償版はあるにはあるけれど 6 月の公開で、しかも "言語は C++ しかない" という事。これはかなり残念です。

Windows 7 のデスクトップアイコンが消える件

これはあちこちで書かれているので、改めてここで書く必要もないと思いましたが、一応。

これの根本的な原因は "破損したショートカットが 5 個以上デスクトップに存在すると保守タスクが走ってそれらを削除してくれやがる" というものです。 つまり、実際には破損していなくても、破損しているとみなされたショートカットが 5 個以上あると保守タスクによりキレイにしてくれるというありがた迷惑な話なのです。

ネットワークドライブへのショートカットや USB メモリ等のショートカットはデスクトップに直接作らない方がいいという事ですね。それより何よりこの保守タスクはお節介にも程があるので停止した方がいいと思います。

ただ、[コントロール パネル | すべてのコントロール パネル項目 | トラブルシューティング | 設定の変更] を辿るのはとても面倒で、コントロールパネルの表示を変更していると迷子になってしまうと思います。そんな時は、[ファイル名を指定して実行] あるいはコマンドプロンプトから以下を実行しましょう。

control.exe /name Microsoft.Troubleshooting /page settingPage

これで一発で開けるハズです。この現象は Windows Update の際に発生する事が多い気がしますね。

Windows XP 用のアンチウィルスソフト

黒翼猫さんに教えて頂いたのですが、

この2つをインストールするといいかもです。何で2つなのかと言うと、ClamWin 自体はリアルタイムスキャン機能がないのだそうです。Clam Sentinel はリアルタイムスキャンを行い、ClamWin に処理を投げるような仕組みになっています。

なお、ClamWinClam Sentinel は、Windows 98 や 2000 も動作対象となっており、加えて言えば Clam Sentinel は Delphi 6 製だとの事。

この記事はっ!

Twitter の TL に流れてきたこの記事。

ん?この主張と文体には見覚えが…"Yusuke Konno"?…って、totoやんやーん (^o^)/

Delphi ユーザの方は "第16回デベロッパーキャンプ【1E】Delphi での文字コードのハンドリングについて" も読んでみてくださいね。


 BACK   古いのを読む   新しいのを読む