هذا جزء فقط من مشروع عبارة عن محاكي للعبة الورق Simulator. الغاية من البرنامج هو معرفة ما قد يحدث لنتائج لعبة اذا تم تغيير قوانين اللعبة . ما هي احتمالات الخسارة والربح. وما هي عددها . وكم نسبتها . هذا البرنامج مهمته اعطائنا نظرة مستقبلية وقدرة على تغيير قواعد اللعبة ومقارنة النتائج .
اول مهمة في المشروع هي خلط الأوراق . بالطبع خلط الأوراق يعتمد على العشوائية . لكن الرقم العشوائي الذي ينتجه الحاسب في الحقيقة ليس إلى ناتج عملية حسابة وهذا ما يجعله ليس عشوائيا ابدا ولا يناسب نهائيا مثل هذا النوع من التطبيقات . لذلك اصبحت المهمة الاولى هي انتاج ارقام عشوائية واقعية وهذا ما يدعى True Random Number لتحقيق هذا كان من الواضح اننا بحاجة لدخال عامل طبيعي خارجي في عملية استنتاج هذه الارقام العشوائية كان الاختيار الاول هو الضجيج باستخدام arduino ولكن مع الاسف لسبب تقني ( عطل في المايكرفون ) لم استطع الحصول على نتائج جيدة . الخيار الثاني هو الحصول على العشوائية من محاور الهاتف الجوال . الفكرة تعتمد على قراءة ميول هذه المحاول اثناء الحركة وتسجيلها ضمن قاعدة بيانات لاستخدامها لاحقا
المرحلة الاولى :
DataSnap Server داتاسناب السيرفر :
Image may be NSFW. Clik here to view.
Image may be NSFW. Clik here to view.
وضعت اجراء واحد ودالة واحدة الاول هو NumberToDataBase و مهمته دمج القيمة القادمة عبر البرمتر ( Values ) بعبارة insert وتنفيذها . اما الدالة فيه فقط تعدي عدد الارقام العشوائية التي تم تسجيلها في قاعدة البيانات. ( label3 ) هي لعمل debuging ومتابعت لا اكثر
DataSnap Client داتاسناب الكلاينت :
Image may be NSFW. Clik here to view.Image may be NSFW. Clik here to view.
الفكرة تعتمد على ابقى البرنامج مفتوح والتجول والتحرك وقراءة محاول ميول الهاتف واخد اخر ثلاث خانات . ( ثلاث خانات لاني احتاج لعدد عشوائي كبير لضرورات محاكي اللعبة لانه هناك احتمال ليكون عدد مجموعات الكروت اكثر من واحد .
MotionSenser1 : هو المكون TMotıonSenser الذي يعيد ميول محاور الهاتف الثلاثة
Image may be NSFW. Clik here to view.
ولانه ليس من المنطقي ارسال كل رقم عشوائي لوحده لداتاسناب سيرفر واشغال الشبكة ومحرك قاعدة البيانات . قمت بارسال كل 100 رقم عشوائي مع بعض بعد تجهيزها للإضافة مباشرة في عبارة insert .
Image may be NSFW. Clik here to view.
وهذا هو كامل الكود . ( الكود ليس متقن لسبب ان هذا البرنامج لن يتم استخدامه مرة اخرى ). Image may be NSFW. Clik here to view.
بقي فقط ان اقوم بتنفيذ برنامج داتاسناب سيرفر وبرنامج الموبايل واتجول واتحرك :)
المرحلة الثانية :
Image may be NSFW. Clik here to view. بعد الحصول على الكم الهائل من الارقام الحقيقية العشوائية محصورة بين 0 و 999 . تاتي المرحلة الثانية وهي عملية خلط الكروت shuffling . الفكرة تعتمد على اعتماد ترقيم متسلسل للكروت من 1 حتى 52 . للمجموعة Deck الاولى و من 53 حتى نهاية الكروت في حال كان هناك اكثر من مجموعة مستخدمة . كبداية قمت برسم الكروت وتوضعها في ImageList .
كبداية قمت بتحضير كلاس خاص لعرض كرت اللعب . مشتق من TRectangle . ( كان يمكن استخدام TImage .. ) Image may be NSFW. Clik here to view.
ImageLit : لتحديد مكون ImageList الذي يحتوي على صور الكروت كلها. ImageIndex : هو رقم الكرت محصور بين 1 و 52 . Facing : خاصية لتحديد اذا كان الكرت سيظهر مقلوب أم على الوجه .
ولمعرفة رقم الكرت من الرقم العشوائي. سنقوم بترقيم الكروت المستخدمة ( قد تكون اكثر من مجموعة deck ) ابتداءا من 1 وحتى اخر كرت . اما معرفة imageindex من اصل 52 صورة نقوم بحساب وفق المعادلة :
تم حسابها مباشرة من الكوري وليس من التطبيق عند جلب الارقام العشوائية من قاعدة البيانات . فلا داعي لحسابها ضمن التطبيق.
اصبح عندنا كل ارقام الكروت حقيقية العشوائية . الان سنحتاج ل array عدد 2 الاولى SortedCards فيها كل أرقام الكروت مرتبة والثانية shuffledCards سيتم نقل إليها العناصر من المصفوفة الأولى. لتشكيل المصفوفة النهائية التي تحتوي على كل الكروت حقيقية العشوائية. ( قد لا نحتاج المصفوفات في هذه المرحلة . لكن المشروع لم ينتهي بعد وهذه المصفوفات لها استخدام مستقبلي ).
Image may be NSFW. Clik here to view.
واخيرا يبقى اظهار النتائج للمستخدم . يكفي انشاء Tcard بعدد عناصر المصفوفة ShuffledCards . واضافة مؤثر لعرض حركة لقلب الكرت لكلاس tcards.
Image may be NSFW. Clik here to view.
Image may be NSFW. Clik here to view.
وهذه هي النتيجة حتى الان .. فالعمل لم ينتهي بعد . Image may be NSFW. Clik here to view.
Da seit heute InterBase 2017 verfügbar ist, und Delphi für Linux ja demnächst verfügbar sein wird, habe ich diese Kombination mal installiert.
Genutzt habe ich dafür ein Ubuntu 16.04.2
Zuerst die Installationsdatei nach Linux kopiert und entpackt:
Image may be NSFW. Clik here to view.
Dann die Installation durchgeführt:
chmod +x install_linux_x86_64.sh
nicht vergessen. Da es sich um eine GUI/XServer-lose Installation handelt, geht das Ganze über die Kommandozeile:
./install_linux_x86_64.sh
Image may be NSFW. Clik here to view.
Auswahl von 64 Bit / Server und Client sollen installiert werden:
Image may be NSFW. Clik here to view.
Hier ohne Multi-Instance Möglichkeiten und Abschluss der Installation:
Image may be NSFW. Clik here to view.
Fertig installiert. Jetzt noch lizenzieren:
Aus /opt/interbase/bin:
./LicenseManagerLauncher -i console
Image may be NSFW. Clik here to view.
[2] "Direct register" mit Seriennummer
Image may be NSFW. Clik here to view.
Abschliessend wird der Dienst gestartet mit
./ibmgr -start
InterBase 2017 ist jetzt installiert..... jetzt zum Delphi/Linux Teil:
Hier soll es nur um eine kleine Konsolenanwendung gehen. Praktischerweise kann man ja auch in Konsolenanwendungen Datenmodule verwenden. Das ist schnell zusammengebaut.
Neue Delphi, Konsolenanwendung
Ein Datenmodul hinzugefügt
Eine FDConnection (Name: IBUbuntuConnection) und eine FDTable (Name: FDTableCustomer)
Die Connection konfiguriert mit: Database: /opt/interbase/examples/employee.gdb Username: sysdba / password: masterkey Protocol: TCP/IP Server: <IP-Adresse des Ubuntu/InterBase Servers>
Die FDTable mit Link auf die "CUSTOMER" Tabelle
Das Konsolenprogramm:
program IBOnUbuntu; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, DMFireDACInterBase in 'DMFireDACInterBase.pas' {DataModule2: TDataModule}; var i: Integer; dm: TDataModule2; begin try dm := TDataModule2.Create(nil); dm.IbUbuntuConnection.Connected := true; dm.FDTblCustomer.Active := true; for i := 0 to 10 do begin Write(dm.FDTblCustomer.Fields[0].AsString + #9); Write(dm.FDTblCustomer.Fields[1].AsString + #9); Writeln(dm.FDTblCustomer.Fields[2].AsString); dm.FDTblCustomer.Next; end; { TODO -oUser -cConsole Main : Code hier einfügen } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; readln; end.
Das Programm lässt sich sofort (keine weitere "Client-Installation von Datenbanktreibereien" auf der Linux-Server-Seite) starten :-)
Wir sind wieder für Sie unterwegs und freuen uns, wenn Sie sich die Zeit nehmen, um das Neueste über RAD Studio und Embarcadero zu erfahren.
Das neue Release von RAD Studio Tokyo mit Delphi für Linux steht kurz vor der Auslieferung. Erfahren Sie, was die aktuelle und die kommende Version alles bietet. Es erwartet Sie ein Tag prall gefüllt mit Präsentationen zu unseren Produkten, den Neuigkeiten sowie Tipps & Tricks, wie Sie mit RAD Studio noch schneller und effektiver Ihre Anwendungen schreiben können. Nutzen Sie die Gelegenheit, um in den Pausen Ihre Fragen zu stellen und sich untereinander zu vernetzen.
The March 2017 Tiobe programming language index report is out. Delphi/Object is at number nine in the report. Swift enters the top ten for the first time.
top 10 for the first time. About 3 years ago Apple announced that it would replace its 'ancient' native mobile app development language Objective-C by its newborn language called Swift. The expectations were high right from the start, but adoption took off slowly. That is for good reasons by the way because the installed base of Objective-C code is quite large. New applications are written in Swift, whereas old apps that are written in Objective-C are not actively migrated to Swift. This is also what we observe at customer sites. Since Swift is mainly intended to write applications in Apple's ecosystem, it is expected that it won't rise much further."
Delphi moved from 11th to 9th. Swift moved from 14th to 10th. The March 2017 index's top five languages stayed the say from February 2017: 1) Java, 2) C, 3) C++, 4) C#, 5) Python.
Um InterBase als Dienst (Hintergrunddienst / Service) zu starten, sagt die Dokumentation:
To run InterBase as a service: /usr/interbase/examples/ibservice.sh -s[tart] When you choose to run InterBase as a service, the InterBase server starts automatically whenever the machine is running in a multi-user mode.
Was nicht "ganz" korrekt ist.
Das Script "ibservice.sh" verlangt nämlich danach, daß der Dienstename, als Dateiscript zum Starten vorliegt. Der Standard-Dienstename (das Startscript für den Dienst) heisst "ibserverd" und liegt in /opt/interbase/examples/ibserverd. Dieses muss man zuerst in den gewünschten Namen kopieren
root@ubuntu:~# cd /opt/interbase/examples/ root@ubuntu:/opt/interbase/examples# cp ibserverd ibserverd_gds_db
Anschliessend kann man das Installationsscript aufrufen:
Da ja seit gestern das sogenannte "Creators Update" von Windows erschienen ist (zumindest bei TechNet, MSDN) und das "Windows-Subsystem für Linux (Beta)" in Zuge dessen auch aktualisiert wurde (Ubuntu 16.04.01), hat mich interessiert, ob das Ganze dann auch mit Delphi funktioniert.
Innerhalb von Windows 1703 muss man zuerst zwei Dinge erledigen:
Zuerst muss man über "Programme und Features" (was sich im 1703, Creators Update, etwas versteckt hat), das "Windows-Subsystem für Linux (Beta)" installieren. Dazu müssen der Entwicklermodus für Windows aktiviert werden(!): Image may be NSFW. Clik here to view.
Image may be NSFW. Clik here to view.
Anschliessend muss man über "bash" dieses Subsystem konfigurieren (Benutzername, Kennwort, ...). Optional kann man mit einem beherztem apt-get update && apt-get upgrade das Subsystem auf Ubuntu 16.04.02 bringen.
Jetzt zum PAServer.... um es kurz zu machen: Der läuft noch nicht :-(
Aber zur Entwicklung und der Ausführung von Programmen: Die laufen!
program Project1; {$APPTYPE CONSOLE} {$R *.res}
uses System.SysUtils, Unit1 in 'Unit1.pas' {DataModule1: TDataModule};
var dm: TDataModule1; i, j: integer;
begin try { TODO -oUser -cConsole Main : Code hier einfügen } writeLn; writeLn('InterBase auf ' + TOSVersion.ToString); writeLn('------------------------------------------------------------'); dm := TDataModule1.Create(nil); dm.FDTable1.First; for i := 1 to 10 do begin for j := 0 to 3 do Begin Write(dm.FDTable1.Fields[j].AsString+#9) End; WriteLn; dm.FDTable1.Next; end; ReadLn; except on E: Exception do writeLn(E.ClassName, ': ', E.Message); end; end.
In dem Datenmodul sind eine FDConnection und eine FDTable auf einen InterBase Server 2017 auf einem (anderen) Ubuntu vorhanden....
Das Programm läuft erwartungsgemäß unter Windows:
Image may be NSFW. Clik here to view.
Und nachdem ich die passende InterBase .so-Datei auch mitgegeben habe auch im Ubuntu-Subsystem:
業務システムのWindows10対応の進め方 Windows10では「Windows as a Service」という新しい概念が導入され、OSのサポート方針や新機能の追加タイミングが変わりました。これにより業務システムでのWindows10対応では今までと異なる進め方が求められます。またタブレット向けの対応が進み、UIについても様々な改良が行われました。このような状況の元、業務システムのWindows10対応の進め方や対応時期についてご案内いたします。
BDEを使った業務アプリを移行ツールで最新化 BDEでOracleや MS SQL等のRDBMSと接続する比較的大きなC/Sシステム・アプリケーションを移行するのは大変な作業に思えます。しかし、そのまま使い続けるにはセキュリティリスクが発生すると共に、より発展的な開発の足かせとなります。BDEから最新のFireDACへ対応させる変換ツール使って、より効率よく最新環境へ移行する手法をお伝えします。またデータベースを活用するにはモデリングも欠かせません。モデリングツールと移行ツールで古いプロジェクトをリフレッシュして新資産として生かしましょう。
Da ich ja schon gestern auf die Möglichkeiten der (Ubuntu) Bash auf Windows 10 Creators Update und Delphi eingegangen bin, habe ich mal einen kleinen Performance Test gegenüber einer normalen Ubuntu-Installation gemacht.
Dazu habe ich ein einfaches Quicksort benutzt:
program QuickSort;
{$APPTYPE CONSOLE}
uses
SysUtils,
System.Diagnostics,
System.Timespan;
const
maxLen = 100000000;
type
stip = array [1 .. maxLen] of integer;
var
i: integer;
s: stip;
Stopwatch: TStopwatch;
Elapsed: TTimeSpan;
Seconds: Double;
procedure pQuickSort(var a: stip; lo, hi: integer);
procedure sort(p, r: integer);
var
i, j, x, y: integer;
begin
i := p;
j := r;
x := a[(p + r) div 2];
repeat
while a[i] < x do
i := i + 1;
while x < a[j] do
j := j - 1;
if i <= j then
begin
y := a[i];
a[i] := a[j];
a[j] := y;
i := i + 1;
j := j - 1;
end;
until i > j;
if p < j then
sort(p, j);
if i < r then
sort(i, r);
end;
begin
sort(lo, hi);
end;
begin
Write('Init....');
for i := 1 to maxLen do
begin
s[i] := Random(maxLen)
end;
WriteLn('Done');
Stopwatch := TStopwatch.StartNew;
Write('Sorting....');
pQuickSort(s, 1, maxLen);
WriteLn('Done');
Elapsed := Stopwatch.Elapsed;
Seconds := Elapsed.TotalSeconds;
WriteLn;
WriteLn(Seconds.toString);
readln;
end.
Ergebnisse (getitelt aus 3 Durchläufen):
Ubuntu (direkt bzw als VM mit 4 CPUs/4 GByte RAM) 17,43 / 17,22 / 17,10 Sekunden = 17,25 Sekunden
Bash on Windows (auf dem gleichen Rechner in einer separatem VM mit 4 CPUs/4 GByte RAM) 17,65 / 17,45 / 17,43 Sekunden = 17,51 Sekunden
Also praktisch kein "Leistungsverlust".
Zusätzliche Test mit dem "Sieb des Eratosthenes", ein String-Replacement (wichtig für REST/JSON) und weiterer Arithmetik haben absolut vergleichbare Zahlen geliefert :-)
Good job, Microsoft!
NB: Der PAServer (auf Ubuntu) hatte keinen messbaren Einfluss auf der Ergebnis
I've started to get requests to use FireDAC with Cloud Databases, like SQL Azure. The question whether or not to put your business data in the cloud is getting easier and easier these days and a lot of that is thanks to Microsoft's investment in Microsoft Azure. Microsoft's strategy to create an infrastructure, like Microsoft Azure SQL Database, that can manage big data (as big as petabyte-scale) and everything on down from that is working and it's working well.
In this post, we’ll see how FireDAC can connect and use a Microsoft SQL Azure database.
For this post, I'll be using this Microsoft Azure SQL database called "mySampleDatabase" following the steps described here:
Image may be NSFW. Clik here to view.
For the FireDAC connection we also need to know the Microsoft Azure Server name for the database, as we see here is: firedac.database.windows.net
Image may be NSFW. Clik here to view.
And lastly, we also need the Login and Password to connect to the SQL Azure database:
The FireDAC native driver supports Microsoft SQL Azure.
And for Windows Client Software:
FireDAC requires one of the Microsoft SQL Server x86 or x64 ODBC drivers to be installed on the workstation:
SQL Server ODBC driver as the connectivity for SQL Server 2000. Most likely, the ODBC driver is already installed on your workstation. If not, see details.
SQL Native Client as the connectivity for SQL Server 2000 and 2005. We strongly recommend that you have SQL Native Client installed, if your application has to work with SQL Server 2005. See Microsoft SQL Server Native Client.
SQL Server Native Client NN.N as the connectivity for SQL Server 2000, 2005, 2008, 2012, and SQL Azure. We strongly recommend that you have SQL Server Native Client NN.N installed, if your application has to work with SQL Server 2008, 2012, or SQL Azure. See Microsoft SQL Server 2008 Native Client.
SQL Server Native Client 11.0 as the connectivity for LocalDB.
For my example, I'm using the SQL Server Native Client 11.0 for SQL Azure.
After entering these values in the FireDAC Connection Editor, you can click the TEST button to verify the Connection established successfully:
Image may be NSFW. Clik here to view.
You can also select the Info tab on the FireDC Connection Editor, and verify the Connection definition parameters, FireDAC Info, Client Info (including showing the ODBC or Native Client driver being used), and Session Information:
Image may be NSFW. Clik here to view.
4. Next, we can drop a FDQuery component onto the form:
Image may be NSFW. Clik here to view.
5. Double-click the FDQuery component to display the FireDAC Query Editor and enter this SQL Command tab:
SELECT TOP 20 pc.Name as CategoryName, p.name as ProductName
FROM SalesLT.ProductCategory pc
JOIN SalesLT.Product p
ON pc.productcategoryid = p.productcategoryid;
Image may be NSFW. Clik here to view.
6. Click the Execute button on the FireDAC Query Editor and verify that your data results get returned from the SQL Azure database:
Image may be NSFW. Clik here to view.
7. To display the data results on our RAD Studio Client application, let's drop a TStringGrid component onto the Form:
8. Using Visual Live Bindings, let's bind the results from the FDQuery to the TStringGrid. Right-click on the Form and select Bind Visually... or on the Form Designer | right-click the TString component | Bind Visually:
9. On the LiveBindings Designer, select the * member of the FDQuery component, and connect it to the * member of the StringGrid component:
Image may be NSFW. Clik here to view.
10. Using the Object Inspector, if you set the Active property of FDConnection and FDQuery to True, then you should see Design-Time data on the StringGrid, like this:
Image may be NSFW. Clik here to view.
Image may be NSFW. Clik here to view.
11. Lastly, let's add a button on the Form, with Text property = "Get data SQL Azure".
12. Double-click the Button, and for the Button1Click event, let's call the Open method of the FDQuery, like this:
procedure TForm2.Button1Click(Sender: TObject);
begin
FDQuery1.Open();
end;
13. Run the application, click on the "Get data SQL Azure" button, and verify FireDAC connects to the SQL Azure database and returns data on the StringGrid, like this:
Image may be NSFW. Clik here to view.
14. Congratulations! The steps in this post shows how easy it is to use FireDAC with Microsoft’s SQL Azure database! We saw how easy it is to create a FireDAC connection to a SQL Azure database, connect to the SQL Azure database, and return data from the remote SQL Azure database to our RAD Studio multi-device or VCL clients.
[DownloadButton Product='RAD' Caption='To try FireDAC with Cloud Databases or any other supported database, please download RAD Studio and try it yourself']
Der Termin für die zweite Deutsche CodeRage steht: Wir haben den 22. Juni 2017 festgemacht.
Es erwarten einen eine Vielzahl von Vorträgen zu RAD Studio, C++Builder und Delphi. Aber auch konzeptionelle und praktische Vorträge.
Die Deutsche CodeRage ist eine kostenfreie Onlinekonferenz, die auch diesmal in deutscher Sprache gehalten wird. Zur Zeit planen wir ein Programm von morgens (09:00) bis abends (19:00) mit unterschiedlichen Vorträgen. Sprecher werden sein: Dr. Holger Flick, Bernd Ua, Volker Hillmann, Roman Kassebaum, Matthias Eißing und noch weitere....
Frage: In Delphi 10.2 Tokyo/C++Builder 10.2 Tokyo soll es ja die Möglichkeiten geben, daß man auch JPEG Grafiken aus einer Datenbank direkt in einem TDBImage anzeigen lassen kann. Zur Design-Zeit sieht auch alles gut aus:
Image may be NSFW. Clik here to view. (Eine FireDAC Tabelle mit einer JPEG Grafik)
Zur Laufzeit bekomme ich aber einen blöden Fehler:
Image may be NSFW. Clik here to view.
Was mache ich falsch?
Antwort: Fast alles richtig gemacht. Man muss nur noch eine Unit einbinden, die dann auch die Umsetzung (JPEG) macht:
Die Konferenz deckt Entwicklungsthemen über allgemeine Programmierthemen, Delphi und C++Builder ab. Für Anfänger, Fortgeschrittene und interessierte Delphi und C++Builder Entwickler.
Bekannte Sprecher wie Volker Hillmann, Bernd Ua, Roman Kassebaum, Olaf Monien, Dr. Holger Flick und Matthias Eißing bringen Ihnen kompakt die neusten Technologien, Tipps & Tricks, Paradigmen und Best Practices für Delphi und C++Builder nahe.
Die Sprecher möchte ich hier kurz vorstellen:
Olaf Monien
Image may be NSFW. Clik here to view.
Olaf Monien arbeitet seit vielen Jahren für internationale Firmen als IT Berater. Seine Spezialgebiete sind Software Architektur, Datenbank Design, Internet Anwendungen und mobile Geräte. Olaf Monien ist Diplom Informatiker mit über 20 Jahren Erfahrung im Bereich Softwareentwicklung. Olaf Monien ist ein Embarcadero MVP und Embarcadero Technology Partner.
Olaf hält den Vortrag
Implementation des Facebook Login-Verfahrens mit Firemonkey-Anwendungen auf Desktop und mobilen Plattformen
Bernd Ua
Image may be NSFW. Clik here to view.
Bernd Ua ist Gründer und Geschäftsführer von probucon Business Consulting einem Beratungs- und Trainingshaus, das eine breite Platte von unterstützenden Dienstleistungen bei der Softwareentwicklung anbietet, angefangen von Trainings bis zu Architektur, Projektleitung, Codereviews und Umsetzung. Bernd Ua arbeitet seit mehreren Jahren als Softwarearchitekt und Entwickler sowie als Trainer im Bereich nativer Anwendungen mit Embarcadero Delphi und im .net Umfeld mit C#. Daneben ist er als Autor unter anderem für das Entwickler Magazin tätig und regelmäßig als Sprecher auf nationalen und internationalen Veranstaltungen anzutreffen.
Bernd hält den Vortrag
Linux und Apache Entwicklung
Roman Kassebaum
Image may be NSFW. Clik here to view.
Roman hat 1996 Pascal an der Universität Paderborn gelernt, wo er mit einem Master-Abschluss absolvierte. Er begann mit Turbo Pascal 7.0 und verwendete alle Versionen von Delphi von 1 bis zum aktuellen Delphi. In den letzten Jahren hat er auch mit dem C ++ Builder gearbeitet.
Roman ist Delphi MVP und ein Embarcadero Technology Partner. Er arbeitete an verschiedenen Arten von Projekten in nationalen und internationalen Teams in Deutschland, Australien, USA, Frankreich, Spanien und Neuseeland.
Während der letzten Jahre hat er spezielle Fähigkeiten in der Arbeit an Legacy-Code, vor allem bei der Migration zu neueren Delphi-Versionen, entwickelt.
Roman lebt in Bünde mit seiner Frau und seinen Söhnen. In seiner Freizeit spielt er gerne Schach, wo er einen FIDE Meistertitel hält.
Roman hält den Vortrag
Vorstellung von TMSPassKit
Dr. Holger Flick
Image may be NSFW. Clik here to view.
Dr. Holger Flick studierte Informatik an der Universität Dortmund und promovierte an der Fakultät Maschinenbau der Ruhr-Universität Bochum. Bereits seit 1996 programmiert er mit Delphi. Holger ist Sprecher auf Fachkonferenzen und ein erfahrener Trainer für verschiedenste Delphi Themen. Sein jahrelanges Engagement und seine umfassenden Kenntnisse im Bereich der Delphi Programmierung im Themenbereich der objektorientierten Programmierung mit Delphi und anderen Programmiersprachen (z.B. C#, Objective-C), führte im Jahr 2016 zu seiner Ernennung zum Embarcadero Delphi MVP.
Seit 2013 ist Dr. Holger Flick als Mitarbeiter der Korfmann Lufttechnik GmbH in Witten für die gesamte Software- und Hardwarearchitektur der Firma verantwortlich und entwickelt unter anderem unternehmensspezifische Softwarelösungen mit Delphi.
Holger hält die beiden Vorträge
Komponentenentwicklung
FireDAC
Volker Hillmann
Image may be NSFW. Clik here to view.
Volker Hillmann ist Geschäftsführer der adecc Systemhaus GmbH. Vielen Entwicklern ist er auch als Buchautor, Trainer und Sprecher auf vielen Roadshows (better office, Borland, Codegear, Embarcadero) bekannt. Er programmiert seit 1988 in C und seit 1991 in C++. Er kennt die Embarcadero (Borland / Codegear) C/C++ Entwicklungsumgebungen seit 1988 (Version Turbo C 1.5). Er beherrscht aber auch eine Reihe anderer Programmiersprachen und hat sich mit vielen Entwicklungsumgebungen beschäftigt. Die Basis hierfür bildet sein Studium als Diplom Mathematiker mit der Spezialisierung Datenbanken und Datensicherheit an der Universität Rostock. Im Auftrag des Markt&Technik Verlags hat er 1994 das Buch "Objektorientierte Programmierung mit C++. Das ganz andere C++- Buch" geschrieben. Er ist auch der Autor des White Papers für den Embarcadero C++ Builder 2010. Die theoretischen Grundlagen werden durch die vielen praktischen Erfahrungen aus Projekten im Finanz- und Versicherungsbereich bereichert. Auch hier basierte der Erfolg auf eher untypischen Ansätzen. Hier war er als Entwickler, Architekt und Projektleiter erfolgreich, bevor er sich 2001 mit seinem Geschäftspartner selbständig machte. Seit 2013 ist Volker Hillmann auch Embarcadero MVP für den C++ Builder und die Programmiersprache C++. Die adecc Systemhaus GmbH ist seit 2007 Partner von Embarcadero in Deutschland und betreut zahlreiche Kunden aus unterschiedlichen Wirtschaftszweigen in Deutschland, Österreich und der Schweiz. Neben Schulungen gehören hier auch Beratungsleistungen und die Beteiligung an Projekten dazu.
Volker hält die Vorträge
Modernes C++ und Komponenten, ein einfacher Web- Server
Erstellen einer mobilen Anwendung (für Desktop-Entwickler)
Back to C++, Migration zurück zu C++
Matthias Eißing
Image may be NSFW. Clik here to view.
Matthias Eißing ist Senior Sales Consultant der Embarcadero Germany GmbH. Mit über 20 Jahren Erfahrung im IT-Umfeld, als Sprecher auf zahlreichen nationalen und internationalen Konferenzen und Seminaren gilt Matthias Eißing als ausgewiesener Spezialist im Umfeld der Entwicklungs- und Datenbankwerkzeugen. Seine Schwerpunkte liegen in der Analyse, Beratung und Unterstützung von Kunden bei der Auswahl von Werkzeugen, sowie bei der projektbegleitenden Durchführung.
Ich selber werde den Tag moderieren und diesen Vortrag halten:
Frage: Ich habe folgenden Quelltext (stark vereinfacht dargestellt):
var a,b,c : Integer; begin a := 1; b := 2; if (a<10) or (b<10) or (a+b<10) then begin c := 3; exit; // <----- end; MachIrgendWas();
Der Methodenaufruf "MachIrgendWas()" wird nur dann angesteuert, wenn das "exit" (siehe Pfeil) auskommentarisiert wird. Das hängt doch alles vom "IF" ab!!! Warum?
Antwort: Zuerst muss man sagen, daß diese Darstellung hier ganz bewusst STARK vereinfacht dargestellt wird.... so daß dies dem ambitioniertem Entwickler sofort auffällt: Die IF-Bedingung wird immer erfüllt. Und damit wird auch immer EXIT aufgerufen. "MachIrgendWas" wird als Statement/Ausdruck damit gar nicht mehr übersetzt und mit in das Executable aufgenommen. Und der Compiler optimiert das einfach weg.
Soweit, so einfach..... Trickreich wird das erst, wenn man komplexere Ausdrücke in der IF-Bedingung stehen hat, die man als normalsterblicher Programmierer nicht mehr sofort überblickt; die sich vielleicht aus Ausdrücken erst berechnen (die aber schon zur Compile-Zeit auswertbar sind).
Also Augen auf, bei IF <Bedingung> then begin .... exit .... end!
Frage: Meine IDE stürzt 'ständig' ab. Wo liegt das Problem? Wann erscheint ein Fix dafür?
Antwort: Häufig (in weit mehr als 90% aller mir untergekommenen Fälle) ist daran eine IDE-Erweiterung, in Form eines Plug-Ins oder einer Komponenten-Sammlung, schuld. Das kann man zumindest rudimentär oder vollständig überprüfen.
Es kann durchaus sein, daß sich diese Plug-Ins / Komponentensammlungen mit der IDE beißen.... also erstmal testen, wie sich die IDE verhält, wenn diese nicht geladen werden. Dazu gibt es Kommandozeilenparameter für die IDE (BDS.EXE -parameter), die auch hier dokumentiert sind: http://docwiki.embarcadero.com/RADStudio/Tokyo/de/IDE-Befehlszeilenoptionen
Hier findet sich nun ein Parameter, der die IDE in einer Standardkonfiguration startet: Parameter "r", wie "Registry"
Man startet also die IDE mit diesem Parameter (Achtung: Keine Leerstelle/Space zwischen dem Parameter und dem beliebigen Namen):
Microsoft Windows [Version 10.0.15063] (c) 2017 Microsoft Corporation. Alle Rechte vorbehalten.
Die IDE wird dann ohne PlugIns und Komponenten gestartet (Ausnahme GExperts, die sich festbeissen). Hier kann man nun überprüfen, ob es denn generell an einem PlugIn gelegen hat, wenn die IDE dann stabil läuft.
Hintergrund: Es wird ein neuer Registry Zweig erzeugt mit den Standard-Einstellungen der IDE unter
Es werden dazu die Standardwerte von HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Embarcadero\BDS auf den CURRENT-USER-Zweig kopiert unter Zuhilfenahme des angegeben Registry-Zweigs:
Image may be NSFW. Clik here to view.
(Die GExperts tragen sich auch unter HKEY_LOCAL_MACHINE ein)
Der Registry-Zweig "OhneIrgendwas" bleibt bestehen und kann jederzeit wieder über den Parameter -r benutzt werden. Man kann ihn aber auch in der Registry löschen
Wo liegen die Einschränkungen ("nur rudimentäre Überprüfung")?
Die Einschränkungen liegen darin verborgen, daß man ein bestehendes Projekt nicht mehr fehlerfrei/warnungsfrei öffnen kann, wenn man Komponenten benutzt
Frage: Wo sind die IDE-Plug-Ins "Beyond Compare" und "CodeSite Express" in der IDE?
Antwort: Seit einigen Tagen sind diese über GetIt (Tools | GetIt-Package-Manager) verfügbar.
Man findet diese leicht und schnell und der Kategorie "IDE Plugins":
Image may be NSFW. Clik here to view.
Was ist Beyond Compare?
Beyond Compare ist ein sehr gutes Vergleichswerkzeug (diff, visual diff, Text-compare), mit dem man schnell und leicht Unterschiede in seinen (Text) Dateien feststellen kann. Dieses "plugged" sich dann auch in die IDE ein:
(Es handelt sich dabei um Beyond Compare Lite 4 in einer "RAD Studio Edition; Version 4.1.5). Die Vollversion bietet auch außerhalb der IDE Möglichkeiten lokale Dateien, Verzeichnisse und auch binäre Dateien zu vergleichen.
Was ist CodeSite Express?
CodeSite Express ist ein Logging System, um zur Laufzeit herauszufinden, wie sich Code verhält und die gespeicherten Ergebnisse (nachträglich) zu betrachten. Dazu gibt es Klassen (wie TCodeSiteLogger). Es handelt sich hierbei auch um eine "Lite" Version ("Express"), die aber grundlegende Funktionen mitbringt. Unterschiede findet man hier. Eine Einführung ist in der Onlinehilfe integriert: