ざつだ ん。 (2016/09/01~)
2016/09/07
Delphi / C++Builder 10.1 Berlin Starter Edition 無料 DL 期限迫る
Delphi / C++Builder 10.1 Berlin Starter Edition が無料 DL 可能なのは 9/9 までですよ! 9/15 までですよ!(延長されました) いつまでなんでしょうね...とりあえずずっと無償 DL 可能のようです!
後で後悔しないように、まずは下の記事を読んでみましょう。
Delphi / C++Builder 10.1 Berlin Starter Edition の無償版の権利を確保しておくには?
インストールが面倒で後日やりたい事もあるでしょうが、今回の無償版の場合には製品登録していないとそれができない可能性があります。
Embarcadero の登録製品一覧に
- Delphi 10.1 Berlin Starter Named User Promo Edition
- C++Builder 10.1 Berlin Starter Named User Promo Edition
どちらも登録されていなければ、9/10 以降に Starter Edition をインストールしてもアクティベーションが通らない可能性があります (ライセンスキーがあったとしても、です)。
9/9 までに Starter Edition をインストールする予定がない、あるいはそれができない場合には無償版の権利を確定させておきましょう。
- EDN にアカウント登録する。
- プロモーションページで DL する (Delphi / C++Builder)。インストーラは同じなので、片方は途中で DL をキャンセルしても構わない。
- 使用許諾コードの登録ページへ行く。
- メールで送られてきたシリアルナンバー (ライセンスキー) を入力し、登録キーには 1234567 を入力して [次へ] ボタンを押す。
- "Email アドレス" に有効なメールアドレス (EDN に登録したもの) を入力して、[登録] ボタンを押す。
- EDN の登録製品一覧に製品が登録されているか確認する。
先の登録でメールが送られてくるが無視して構わない (添付の使用許諾ファイルはデタラメなので、むしろ破棄したほうがいい)。
常識的に考えてシリアルナンバーを入手できていれば 9/10 以降にインストールしても大丈夫だとは思うのですが、今回は期間限定の変則プロモーションなのでどうなるかわかりません。9/9 までに Starter Edition をインストールできない方は上記手順で保険をかけておくといいかもしれません (5分も掛からないので駆け込みにも有効です)。
なお上記手順を行った場合、登録ユーザダウンロードで各種ファイルを事前に取得できます...インストーラだったり Object Pascal Handbook だったり。言うまでもない事ですが、Starter Edition を9/9 までにインストールするのが最も確実な権利確保の方法です (^^;A
2016/09/09
Delphi / C++Builder 10.1 Berlin Starter Edition に入れておけばよさげなもの
今北産業の人は...
このページと先月の雑談のページと Togetter のまとめを読みましょう。無償 DL は今日までなんだ...急げえぇぇぇ!!
2016/09/11
Delphi 6 Personal と Turbo Explorer と 10.1 Berlin Starter Edition の違い
ざっくり言うと...
2000 / Me 対応 |
ANSI |
× |
× |
〇 |
― |
不可 |
XP 対応 |
ANSI |
〇 |
× |
× |
標準では不可能 |
可能 |
Windows 10 対応 |
Unicode |
× |
〇 |
〇 |
なぜか可能 |
年 $1000 以内 で可能 |
- Delphi StarterとC++Builder Starterの両方を購入して1つのマシンにインストールして「Mini RAD Studio」のように使うことはできますか?
本来はできないハズですが何故かできてしまいます。エンバカデロのブログでもやり方が公開されています。
- Delphi と C++Builder の旧プロジェクトを 10.1 Berlin Starter で使用できますか?
はい、できます。10.1 Berlin では、Turbo Explorer や旧バージョンのプロジェクトを開くことができます(他社製コンポーネントなど、サポートされていない機能を含む場合には、利用できない場合があります)。
- Delphi と C++Builder の VCL / FMX コンポーネントやコントロールを使うことはできますか?
はい、できます。
- Delphi と C++Builder の CLX コンポーネントやコントロールを使うことはできますか?
できません。
- VCL / FMX のソースコードは含まれますか?
いいえ、含まれません。
- コマンドラインコンパイラは含まれますか?
Delphi にはコマンドラインコンパイラ (DCC32) は含まれません。C++Builder には2種類のコマンドラインコンパイラが含まれます (BCC32 / BCC32C)。
- TClientDataSetは含まれますか?
はい。
- データベースコンポーネントは含まれますか?
FireDAC / DBX / dbGo (ADO) / IBX / BDE は含まれません。
但し、TClientDataSet が含まれるので MyBASE は利用可能ですし、ZeosLib 等をインストールする事は可能です。
- 無償の 10.1 Berlin Starter Edition を使って商用アプリケーションを開発できますか?
はい。$1000 以下であれば。
- 無償の 10.1 Berlin Starter Edition を使って社内配布向けアプリケーションを開発できますか?
いいえ。その場合には Professional Edition 以上の SKU が必要です。
- Starter Edition に関する情報をもっと知りたいのですが?
Delphi / C++Builder Starter - Q&A をご覧ください。SKU 毎の違いに関しては機能一覧をご覧ください。
無償版 DL エクステンド!
無償版 DL が 2016/09/15 まで延長されました!
何らかの理由でブラウザの地域や言語が "日本/日本語" 以外の場合、キャンペーン終了のページに飛ばされるかもしれません。そんな場合にはスマホでアクセスしてみてください。
インストーラをスマホから PC へ移動する方法が分からなくても大丈夫です。後で送られてくるメールにインストーラへのリンク先が書いてありますので PC で再 DL しましょう。
2016/09/18
Delphi / C++Builder 10.1 Berlin Starter Edition がずっと無償で DL できるようになったかもしれない!
プロモーションページを見てみると...
日本だけかな?と思ったら...
英語ページからも期限の記述が消えています (英語ページでは 9/10 以降、製品ページにリダイレクトされるようになっていました)。少なくとも現状では無期限で無償 DL 可能なようです。
どうやら Starter 版は (期限なしで) 無償になったようです。こっそりと (?) こんなブログが。
2016/09/23
RAD Studio 10.1 Berlin Update 1 リリース
RAD Studio 10.1 Berlin Update 1 がリリースされています。エンバカさんのブログが詳しいです!
Update 1 の適用にはアンインストールが必要なので、あらかじめ設定移行ツールで環境をバックアップしておくといいでしょう (Berlin は XE 10 と表示されるので注意!)。Starter Edition の Web インストーラも Update 1 対応になっています。
C++ Boot Camp
先日行われた C++Builder Boot Camp のブログです。
ビデオはこちらから。
Delphi Boot Camp
先日行われた Delphi Boot Camp のブログです。
ビデオはこちらから。
2016/09/24
Delphi らしい for ループの書き方 (嘘)
こんな記事を見かけまして...
その中に "Swift らしい for ループの書き方" ってのがありました。以下のようなコードです。
for i in 0 ..< 10 {
print("i: \(i)")
}
|
まぁ...Delphi でも似たようなのは書けますよね。
var
i: Integer;
begin
for i in [0..9] do
Writeln(i);
end;
|
でも、これは集合型なので 0..255 つまり、正の数で 255 までしか回せません。イマイチ使えませんね。
記事を読み進めていくと、for のコレクションに stride() 関数が使えるとあります。
for i in stride(from: 0, to: 10, by: 2) {
print("i: \(i)")
}
|
「これは確かに便利かも!」そう思って Delphi で同等の関数を書いてみようと思いました。そしてできたのがこちらです。
uses
..., Types;
function Stride(from: Integer; through: Integer; by: Integer = 1): TIntegerDynArray;
var
i, Cnt: Integer;
Direction: Boolean;
begin
SetLength(result, 0);
Cnt := 0;
// 方向 from < through で順方向 (True)
Direction := (from <= through);
// 無限ループになる場合には抜ける
if by = 0 then
Exit;
case Direction of
True:
if by < 0 then Exit;
else
if by > 0 then Exit;
end;
// 開始値
i := from;
// 大まかな配列を確保
SetLength(result, (Abs(through - from) div Abs(by)) + 1);
// ループ
while true do
begin
if (Direction and (i > through)) or
((not Direction) and (i < through)) then
Break;
result[Cnt] := i;
Inc(Cnt);
Inc(i, by)
end;
SetLength(result, Cnt);
end;
|
この関数を使えば、
var
i: Integer;
begin
// 0..10
for i in Stride(0, 10) do
Writeln(i);
// -10..10
for i in Stride(-10, 10) do
Writeln(i);
// 0..100 Step 3
for i in Stride(0, 100, 3) do
Writeln(i);
// 10..0 (downto)
for i in Stride(10, 0, -1) do
Writeln(i);
end;
|
このような記述が可能になる...のですが。この関数はコンテナに Integer の動的配列 (TIntegerDynArray) を使ってるので、ループの数だけ Integer の器が必要になってしまいます。1,000 回ループで 4,000 Bytes 必要になり、ループが増えるとメモリ使用量もガンガン増える...なんてアホらしい。
コレクションを計算で返せれば無駄にメモリを食う事はないので、高度なレコード型でコンテナを作ってみる事にしました。
unit uStride;
interface
uses
SysUtils, Types;
type
TStrideEnumerator = class;
TStride = record
private
Ffrom: Integer;
Fthrough: Integer;
Fby: Integer;
FDirection: Boolean;
public
constructor Create(from: Integer; through: Integer; by: Integer = 1);
function GetEnumerator: TStrideEnumerator;
end;
TStrideEnumerator = class
Container: TStride;
Index: Integer;
public
constructor Create(AContainer : TStride);
function GetCurrent: Integer;
function MoveNext: Boolean;
property Current: Integer read GetCurrent;
end;
implementation
{ TStride }
constructor TStride.Create(from, through, by: Integer);
begin
Ffrom := from;
Fthrough := through;
Fby := by;
FDirection := (Ffrom <= Fthrough);
end;
function TStride.GetEnumerator: TStrideEnumerator;
begin
Result := TStrideEnumerator.Create(Self);
end;
{ TStrideEnumerator }
constructor TStrideEnumerator.Create(AContainer: TStride);
begin
inherited Create;
Container := AContainer;
Index := -1;
end;
function TStrideEnumerator.GetCurrent: Integer;
begin
Result := Container.Ffrom + (Index * Container.FBy)
end;
function TStrideEnumerator.MoveNext: Boolean;
var
dValue: Integer;
begin
result := False;
if (Container.Fby = 0) then
Exit
else
begin
dValue := Container.Ffrom + ((Index + 1) * Container.FBy);
case Container.FDirection of
True:
if (Container.FBy < 0) or (dValue > Container.Fthrough) then
Exit;
else
if (Container.FBy > 0) or (dValue < Container.Fthrough) then
Exit;
end;
end;
result := True;
Inc(Index);
end;
end.
|
この unit を uses に加えると、
var
i: Integer;
begin
// 0..10
for i in TStride.Create(0, 10) do
Writeln(i);
// -10..10
for i in TStride.Create(-10, 10) do
Writeln(i);
// 0..100 Step 3
for i in TStride.Create(0, 100, 3) do
Writeln(i);
// 10..0 (downto)
for i in TStride.Create(10, 0, -1) do
Writeln(i);
end;
|
こんな記述が可能になります (swift の Stride で to ではなく through を使ったのと同等です...多分)。ネストしたループとかでもメモリリークは起こらないハズです。普通の for to do / for downto do の方が高速でメモリも消費しないとは思いますけれど、こんな書き方ができても面白いですよね。「俺ならもっとエレガントにやれるぜ!」ってなテクニックや情報をお持ちの方は出し惜しみせずに教えてくださいお願いします m(_ _)m
See Also:
続・Delphi らしい for ループの書き方 (嘘)
油断してたら、らいなタンさんからリプが。
なるホド!もう一回関数でラッピングしてやれば使い勝手がよくなるのか!
unit uStride;
interface
uses
SysUtils, Types;
type
TStrideEnumerator = class;
TStride = record
private
Ffrom: Integer;
Fthrough: Integer;
Fby: Integer;
FDirection: Boolean;
public
constructor Create(from: Integer; through: Integer; by: Integer = 1);
function GetEnumerator: TStrideEnumerator;
end;
TStrideEnumerator = class
Container: TStride;
Index: Integer;
public
constructor Create(AContainer : TStride);
function GetCurrent: Integer;
function MoveNext: Boolean;
property Current: Integer read GetCurrent;
end;
function Stride(from: Integer; through: Integer; by: Integer = 1): TStride; // 追記
implementation
{ 追記: BEGIN }
function Stride(from, through, by: Integer): TStride;
begin
Result := TStride.Create(from, through, by);
end;
{ 追記: END }
{ TStride }
constructor TStride.Create(from, through, by: Integer);
begin
Ffrom := from;
Fthrough := through;
Fby := by;
FDirection := (Ffrom <= Fthrough);
end;
function TStride.GetEnumerator: TStrideEnumerator;
begin
Result := TStrideEnumerator.Create(Self);
end;
{ TStrideEnumerator }
constructor TStrideEnumerator.Create(AContainer: TStride);
begin
inherited Create;
Container := AContainer;
Index := -1;
end;
function TStrideEnumerator.GetCurrent: Integer;
begin
Result := Container.Ffrom + (Index * Container.FBy)
end;
function TStrideEnumerator.MoveNext: Boolean;
var
dValue: Integer;
begin
result := False;
if (Container.Fby = 0) then
Exit
else
begin
dValue := Container.Ffrom + ((Index + 1) * Container.FBy);
case Container.FDirection of
True:
if (Container.FBy < 0) or (dValue > Container.Fthrough) then
Exit;
else
if (Container.FBy > 0) or (dValue < Container.Fthrough) then
Exit;
end;
end;
result := True;
Inc(Index);
end;
end.
|
こうしちゃえば、最初の関数版みたいに書ける、と。
var
i: Integer;
begin
// 0..10
for i in Stride(0, 10) do
Writeln(i);
// -10..10
for i in Stride(-10, 10) do
Writeln(i);
// 0..100 Step 3
for i in Stride(0, 100, 3) do
Writeln(i);
// 10..0 (downto)
for i in Stride(10, 0, -1) do
Writeln(i);
end;
|
勉強になります!
2016/09/27
エンバカデロ、Delphi/C++Builder Starter Editionの 無期限無料版を公開、ダウンロード提供開始
エンバカデロ・テクノロジーズ (本社:米国テキサス州オースティン、日本法人:東京都文京区、日本法人代表:藤井 等、以下 エンバカデロ)は、Delphi/C++Builder のスターター開発者向け統合開発環境である Delphi 10.1 Berlin Starter Edition および C++Builder 10.1 Berlin Starter Edition の有償販売を終了し、無期限の無料版として2016年9月27日より公開しました。
そういう事で Starter Edition は公式に無期限無償となりました \(^o^)/
Starter Edition のざっくりとした情報は以下にあります。
エンバカさんの各種情報や問い合わせ先です。
トップページから辿れば当サイトからも Delphi の情報を探すことができるかと思います。