Quantcast
Channel: TMS Software
Viewing all 1016 articles
Browse latest View live

macOS 64 bit compile-ready support

$
0
0

Intro

macOS 64 bit compilation support has been added to our products. Below is a list of products that are currently enabled to compile for macOS 64 bit


We continue adding macOS 64 bit support to our other products, and will mention that in the version history whenever an update is released.

macOS 64 bit compile-ready support?

Our products are prepared to compile for macOS 64 bit, but this is not automatically enabled. Unfortunately, RAD Studio Rio 10.3.2 is an update that uses the same version number as older RAD Studio 10.3.* versions and therefore we have decided to not automatically install for macOS 64 bit, but make it compile-ready. To compile your applications for macOS 64 bit, please follow the steps below.

  1. Install/Update one of the products in the above list
  2. Update the macOS 64 bit library path with the path to the source files
  3. Compile/Deploy your application for macOS 64 bit by changing the target

MapView TMS mCL

TMS mCL originally has a MapView component that was working in a 32 bit macOS operating system and was then removed from the frameworks due to technical reasons. Now, with 64 bit, you will be able to use the MapView component again.

Feedback

Please provide any feedback regarding macOS 64 bit compilation support so we can further improve our products.


TMS VCL UI Pack is here, the next generation of TMS Component Pack

$
0
0

Since we launched TMS Component Pack back in 1998, it has been our flagship product for user interface controls for VCL based Windows application development with Delphi & C++Builder. In the past 21 years, a lot happened. Unicode support was introduced, Win64 support added and more recently, VCL got support for (per monitor) high DPI and VCL Styles (including extra VCL styles from the DelphiStyles company). Embarcadero started offering in 2011 the FMX framework for cross platform development for which we meanwhile also developed a large number of cross platform user interface components and it became crucial to differentiate products by technology, like TMS FMX components, TMS FNC components, ... and more recently also TMS WEB components...

After 21 years, we thought it was time to better align the VCL user interface components with our other product ranges and naming convention and therefore proudly introduce its successor product TMS VCL UI Pack v10.0. But there is much more to it than a name change for aligning it with other product lines. Internally we also completely moved the TMS Component Pack to a new build process that was already in use for our cross-platform FMX & FNC products.

The benefits are:

  • Moved to a new build & installer generation process allowing more frequent releases, faster rollout of improvements and fixes and also beta builds
  • Builds of full trial versions for all supported Delphi & C++Builder versions
  • In short term we will also submit a version for GetIt to facilitate download & install from the IDE itself
  • Faster migration & support to upcoming new Delphi & C++Builder versions
  • Better install/uninstall experience
  • Consistent & clear product naming
  • Focus on improvements for high DPI and VCL styles support across the entire TMS VCL UI Pack components
  • New components: Kanban board UI VCL control and TableView UI VCL control
  • Updated PDF generation library with new features
  • Keep components backwards compatible with TMS Component Pack v9.x components


A glimpse at what is new:

In TMS VCL UI Pack v10.0, we have not only 2 new VCL components but also several improvements to existing components:

  • TAdvKanbanBoard component, a highly configurable workflow visualization component



  • TAdvTableView component, a versatile & modern supercharged list control



  • PDF generation library improvements such as the capability to add rotated text
  • Support for VCL Styles




What does it practically mean?

Let there be no misunderstanding. We paid the utmost importance to make the step for you as easy as possible while moving the TMS Component Pack to our new build platform. Normally, it should be as simple as uninstalling TMS Component Pack + download and install TMS VCL UI Pack and recompile your applications with the new version. Some notes though:

  • If you use runtime packages, you will need to change the package name dependencies
  • If you use TAdvTreeView, we moved this component from using TCanvas to TAdvGraphics. When opening form files using TAdvTreeView, ignore possible property errors, save the form file and recompile.
  • If you use C++Builder, you will need to change the linked library name references in your project
We have summed up these steps in detail in a file migrate.txt that is included in the TMS VCL UI Pack install folder.

Moving to TMS VCL UI Pack

TMS VCL UI Pack v10.0 is the new product name for TMS Component Pack v10.0. This means all users entitled to get TMS Component Pack v10.0 automatically receive TMS VCL UI Pack v10.0. Also, users with an active subscription to TMS ALL-ACCESS, TMS VCL Subscription or TMS Component Studio receive TMS VCL UI Pack v10.0 automatically.

For your convenience, for a while we will simultaneously keep offering access to TMS Component Pack v9.x. So, users with an active TMS Component Pack license will get both TMS Component Pack v9.x and TMS VCL UI Pack v10.x and users purchasing a TMS VCL UI Pack license or upgrading to TMS VCL UI Pack will also still get access to TMS Component Pack v9.x. Of course, as it concerns mostly the same components, these cannot be simultaneously installed in the IDE. But if, for one of the reasons above, a migration would require some work on your side to change package name references for example, you can freely chose when to plan this change and continue to use TMS Component Pack v9.x till you have time and are ready to switch to TMS VCL UI Pack.

What's next

First of all, with our processes streamlined here, we will be even more efficient & productive to roll out new TMS VCL UI Pack versions with new features, new components and improvements more frequently and faster. The new naming convention should bring more clarity as to what technology the product can be used with. Similar work has been started here already for other TMS VCL products and all will get the TMS VCL xxx productname nomenclature in the coming months.

Feedback

Still having questions, comments or feedback? Don't hesitate to leave a comment here on the blog or contact support for all questions and suggestions or sales for questions related to upgrading to TMS VCL UI Pack from older TMS Component Pack licenses or smaller VCL component bundles. We look forward to hear from you!

FNC Partner Program

$
0
0

Intro

Starting from today, the FNC Partner Program goes live, so what exactly is the FNC Partner Program? The FNC Partner Program is a program that allows you, as a developer, create your own FNC controls and sell/offer them on your own website, as a certified FNC Partner. But that is not all, below is a list of benefits the FNC Partner Program has to offer:

  • Direct access to our FNC experts for deep technical insights & questions
  • A free license to all our FNC products
  • Access to FNC product betas
  • Showcase your components on our FNC component partner directory page
  • Our marketing team will happily promote your components

FNC?

Below is an overview of what FNC has to offer.

TMS FNC Controls can be simultaneously used on these frameworks:

TMS FNC Controls can be simultaneously used on these operating systems/browsers:

TMS FNC Controls can be simultaneously used on these IDE's:



Getting Started

The FNC Partner Program helps you in creating your own FNC component via a 3 step process.



Create your own FNC components and start making money or let others benefit from your work or even contribute to it! Have you created your own FNC components? Let us know! If we assess it as valuable for other FNC developers, we will add it to our directory and add you or your company to the partner program and offer you a free TMS FNC Component Studio license. Develop and sell your component to our and your clients!

Curious?

Curious on how FNC Components are created? Take a look at the following page, which offers a set of components that we have developed: http://www.tmssoftware.com/site/fncpartners.asp

The Google Cloud Service components are based on TMS FNC Core and TMS FNC Cloud Pack
The Category List is based purely on the TMS FNC Core

Start developing today!

Introducing Delphi ORM - A new book about TMS Aurelius by John Kouraklis

FlexCel 7 has landed!

$
0
0



After a long time coming, I am extremely happy to say that FlexCel 7 arrived. And when I say extremely happy I mean it: It has been a long road to travel, but we finally got there. So without losing more time, what is it about?

In a shallow level: It is all about rendering charts in xlsx files. Now you can export xlsx files with charts to PDF or HTML, and they will include the charts.

Going more in deep: It is all about the details. If you look at the what's new for FlexCel 7, you'll see that rendering charts is just the first entry, and after that there is a huge list of changes. Making the charts look perfect required everything else to be perfect too, and so we spent more than a year in a parallel FlexCel 7 branch polishing every little detail. No stone was left unturned. We also gave a lot of needed care to other platforms besides Windows: A lot of the FlexCel .NET code was developed using JetBrains' Rider on a mac using .NET core and Skia, instead of Visual Studio in Windows. On the Delphi side, we developed a lot in Linux and Windows 64 instead of doing everything in Win32.

And going even deeper: It is really about finishing the translation from xls to xlsx. When we released FlexCel 5, we had basic support for xlsx files, but a lot of stuff just worked better if you just kept using xls. Xlsx files were a completely new thing starting from zero, while we already had added great support developed over the years for xls files.

During the lifetime of 5.x and 6.x we kept adding features to our xlsx engine, so by 6.26 there was no reason to use xls files anymore if your customers didn't need them... and if you didn't need to export charts to PDF or HTML. Exporting charts to PDF/HTML was the only thing that required you to fall back to using xls files until now. But the xlsx chart support closes that chapter. From now on, we plan on keeping excellent support for xls (because it is not going away), but our focus will be in xlsx.

Tales from the trenches

Looking back, the number of tweaks and changes was huge, and even if you are not interested in charts at all, I am sure you will find some detail that matters to you and that is just better in FlexCel 7. But what kind of details are we speaking about here? FlexCel 6 was already very good at rendering xls/x files, so what did we make better? Writing about every change would take a book, so that's not something we will do here. But anyway, I'd love to give you an idea of the kind of details we have been working on this full year, besides the chart rendering itself. Below are just some random examples of stuff we did on a day-to-day basis.

The disappearing Arial Black

We caught this one because we were doing this particular development using .NET Core and Google's Skia. When rendering a chart, everything was looking nice, but the font on the title was bolder than it should be. In all platforms except Skia the font was ok, but for Skia a different font was used.

Investigating, we discovered that if you try to use the font "Arial Black", it will not find it and use Segoe UI instead. To make it work, you need to set it to Arial, and the weight to Black. So now FlexCel 7 workarounds this and also other similar cases like "Arial Narrow" for all platforms using Skia. This is Linux and Android in Delphi, and .NET Core and Android in .NET.

You can read more about it here: https://github.com/mono/SkiaSharp/issues/682

The operation that could destabilize the runtime.

One thing we did in our endless refactoring of the code was to make thousands of read-write fields read-only. We did at the very beginning of the FlexCel 7 development. Now, the first time we tested it in Visual Studio 2019 RC, we started getting a strange error: "Operation could destabilize the runtime".

We opened a bug with the Visual Studio team, which you can read here: https://developercommunity.visualstudio.com/content/problem/503750/operation-could-destabilize-the-runtime-and-peveri.html

Sadly, we couldn't get them to fix it: They found it ok that their own compiled assemblies didn't pass their own PEVerify tool, they found it ok that if you were using partial trust just the fact of updating to VS2019 would break your app, and they found it ok to introduce a breaking change like this in a dot release like 7.3.

But we didn't find it ok, so we unmarked a bunch of fields that were causing the issue back to read-write, and added a PEVerify step to our build process to ensure that we never ship an assembly that doesn't pass PEVerify, even if it is not our fault.

The case of the rotated gradients

I remember this one because it happened on Easter and we spend the weekend with some friends. It all started when I noticed some gradients in the charts were not looking right.

Here we have a test Excel file with some rotated gradients:



They looked fine when using GDI+ or exporting to PDF in FlexCel:



But when rendering in other platforms, like to macOS' CoreGraphics or Android's Skia, the gradients weren't quite right. Here you can see how they looked in macOS:



Let's ignore that the direction of the line was from bottom to top instead of top to bottom; that is a different bug and tale. As you can see in the red circles, the line was not going from corner to corner as it did in the other cases. What happened was just a different interpretation of the word "rotation". Excel and GDI+ here were understanding a "45-degree rotation" in a rectangle as a line that went from the bottom-left corner of the rectangle to the top-right corner. On the other side, CoreGraphics and Skia were understanding a 45 degree rotation as a line rotated 45 degrees from the horizontal, no matter the shape where it was placed (as you can see in the last screenshot. The line rotated the real 45 degrees, instead of scaling the angle so it went from corner to corner).

It got worse: While Excel normally would draw "scaled gradients", in some test files we had it would draw "actual angle gradients", and that meant that I needed to support both types of gradients (and also reverse-engineer the xls files to find out which bit selected the gradient used, but that was the easy part). So I spent my free time on Eastern calculating the formulas to convert one type of gradient into the other. As I didn't bring my computer with me, this was all done on paper (and really, that kind of stuff is just simpler to do in paper). Here you can see one of the almost 20 pages it took to get to the solution:



I expected that I was over-complicating the problem and that at the end all the equations would cancel themselves, but they didn't. The solution has a bunch of sin and cos that you can't simplify. But the formulas worked just great once I was back home and now FlexCel 7 will render the rotated gradients ok. And yes, the direction in macOS is now top to bottom too.

Side note: As the solution was more complex than I expected, I wondered how the other spreadsheets would render those files. Did they also spend the time to get it right? Here is LibreOffice:



And here is Google Sheets:



And finally, Apple's Numbers:



Ok, nobody seems to care about it, but we do. It is a pattern we see too often, so we've kind of got used to it. But we believe those details matter.

Dark gray is the new black

This one happened while writing the algorithm to resize the plot area the axis captions. For this particular Excel test file:



The axis title at the left was rendering wrong:



That was what the code we were writing, so it was expected. But if you look twice, you might realize that the color or the axis titles is also "pure black" while the other labels are on a dark gray. This made us rewrite the code which read the axis colors so it could handle this specific case.

This is the final file as FlexCel renders it now. Notice how besides correctly resizing the plot area, now the axis are dark gray as they should:



The FlexCel 7 logo

The logo at the start of this post is a scatter chart made in Excel, which I rendered to SVG using FlexCel 7. So the logo is scalable and will zoom if you zoom the page.

This is how the original Excel file looks like:



If you look closely, there are a couple of details here:

1. The gridlines in Excel are not crossing the axis at the axis labels (1, 2, 3...) but they rather cross between them (at 1.5, 2.5...). This is because for some reason while I was doing the chart I ended up with a "category" axis for the y axis, instead of a "value" axis as it should be for a scatter chart. And this highlights one of the biggest issues when coding the charts: When you start clicking and dragging in Excel, you might end up doing stuff you don't even know how you did it, and we have to render it correctly. But in this particular case, this is one "feature" we think is not worth fixing. I don't think there is any reason to have the gridlines cross between categories, and it looks just wrong to me. And you can't do it directly from Excel UI either.

2. The line endings are round in Excel, and flat in FlexCel. This is something we knew when we released FlexCel 7, but we couldn't delay the release until it was fixed. However, the world didn't end with FlexCel 7, and we have already fixed it (a couple of days after FlexCel 7 was released). This is how it looks with our development version (once again, as SVG, not png):



And for completeness, this is how it looks in the latest LibreOffice:



In Google Sheets:



And in Apple's Numbers:



As it is the usual case, LibreOffice and Apple's Numbers don't get all the details right, but at least they make an effort. Google Sheets doesn't seem to even try. And notice that no one tried to copy the Excel behavior of printing the gridlines between the axis labels. This is one thing we all can agree on.

Extra: Just for fun, this is how the chart looks in Excel itself, if you save it as xls and reopen it:



Note how when converting the chart it "fixes" the category axis and converts it to a value axis. It now shows the gridline for 9 at 9, and the gridlines at 0 and 10 show exactly like in FlexCel. This reassures us that the "gridlines between labels" thing isn't a bug worth fixing.

The axis that went below and under the data.

This is another case that we discovered a little after releasing FlexCel 7, and which we have already fixed internally here. We have this chart in Excel:



Which you can see like this in:

Libre office:



Google Sheets:



Apple's Numbers:



FlexCel was drawing it almost like Excel, but with the error bars below the axis instead of over them (the axis are the one in yellow and the one in red). Ok, simple fix: Just switch the order in which we draw in the code. This is how it looks now with the yet unreleased dev version:



Easy, isn't it?

Well, not quite. One nice thing about FlexCel (but also one of the things that slowed us down more doing the development) is that we have a huge set of thousands of files that we created or our customers sent to us for including in the test suite during the almost 20 years of FlexCel history. Those are a lot of files. And whenever we make a change like the one here, we need to make sure we didn't break anything on any of those files.

Here, the most obvious error immediately jumped when we run the test suite: Yes, the axis should be drawn below the data, but the axis labels (the 0, 1, 2... text on the axis)... well, those go over the data. We wouldn't notice it in this particular file, but there were hundreds of files where it was easily visible. So we had to split the DrawAxis method in two: The method that originally drew the axis and text now is one method that draws the lines (and that runs earlier) and another that draws the labels (and that runs after the data has been plotted).

Once we fixed that, we run it again... and we found a different problem. Now with the axis switched, the line charts were ok, but bar charts were wrong. (and area charts too, but we found that later). It looks like Excel draws the axis over the data in bar charts, but under the data in line charts.
Here is an example of how Excel draws a chart with a bar and a line:



Look at the horizontal axis line (the one in the 0 value). You'll see it goes over the bar lines, but below the line chart. So once again, we had to go back and change the code until everything was fine. This is how the chart renders in FlexCel right now:



You might notice that we also made the line inside the legend a little wider than in the released FlexCel version, so it matches Excel more closely. And now, once again for the sake of completeness:

Libre office:



As you can see, LibreOffice just draws all over the axis.

Google Sheets:



As is usually the case with google sheets, I am not even sure on what they were trying to do here (And this is one of the charts they got better). But what I am sure is that if we had the quality standards google sheets has for charts, we would have shipped xlsx chart support a year ago.

Apple's Numbers:



Apple's Numbers also draws everything over the axis.

Wrapping it up

I literally could keep writing about this stuff for days. After all, we developed the xlsx chart engine for more than a year until it became something that would not embarrass us, and every day we had one a different story like the ones in this post. Without going further, the last two tales happened in the couple of days after we released FlexCel 7. I wrote about them because they are fresher in my mind, but a thousand others happened while we were making the chart engine.

I could show you hundreds of screenshots of test files, show you how they look in Excel, FlexCel, and the others, and some can be really fun, but this is long enough already. It will be more interesting if you try it with your own charts, anyway.

What I wanted to explain in this post, in any case, is why it took us so long to deliver this chart support. And when you add all the day-to-day stuff and support questions answered, I believe it starts to make more sense. You also have to remember that we were developing both FlexCel 7 and 6 in parallel, backporting the fixes from one to the other. So when you look at what was done the last year, you don't have to stop at FlexCel 6.26. To see all that was done since August last year, you have to keep scrolling up to 6.21.5. It was for sure a busy year, as have been all the others, and as will probably be in the future too.

Now, a bigger question might be forming on your mind: Does it matter? After all, it is just a bunch of lines over a canvas, isn't it? Couldn't we have released something that looked remotely like an Excel chart long ago and call it a day? And does it really matter if we draw the axis over or under the data?

I think it does matter. A single detail might not matter much, but when you have 100 small details wrong, the charts start looking nothing like the real thing. And when you look at the "creative" ways people in which people use Excel, it gets worse. I've seen an "odometer" implemented as a transparent pie chart over a png. Move the pie just a little to the left or the right -not even do anything like the atrocities that google sheets and the others do- just move the pie a little to the left, and the odometer will look like trash. I've seen a way to "break" an axis by using a marker with a bitmap, like this:



If you write the axis over the marker and not the other way around, the effect is lost. A single detail, but it breaks everything.

We don't want our customers to beta test us. I find it disrespectful to just send them some code that vaguely draws some lines on the screen and call that "chart rendering support". If we offer you chart rendering support, we should give you something that resembles chart rendering support. Period. But won't there be bugs, anyway? Yes, of course. However, we will at least make our best effort to minimize them.

What's next?

Ok, this was all fun to write, but FlexCel 7 was already released, and so question becomes "what is coming next?" And the answer is "a lot". In the short term, we are still polishing little details in the chart engine, which will ship in a near update. We will also be providing a full API to write charts, with APIMate support, which was originally planned for FlexCel 7 too, but we had to delay it to ship the rendering engine. Most of that work is done, but we have to polish it up before we can make it public.

In the medium term, we'll keep obsessing over every small detail as always, but there is also bigger stuff brewing which I can't wait to show you. With the FlexCel 7 release we arrived at a place where there isn't that much left to add, and that gives us time to focus on newer things. There are interesting times ahead.

RAD Studio deployment issues due to anti-virus

$
0
0

Deployment Issues

Just a quick heads up for everybody else that have deployment issues similar to the ones below. The underlying reason might be due to anti-virus that is interfering with the deployment process. The connection to the PAServer is successfull, but after copying a few files (visible in the deployment window), RAD Studio gives a connection error and stops deploying. Sometimes, the deployment is succesfull, but shows a "Unable to start GDB kernel" error. Running without debugging has a higher rate of success, but nevertheless, the process of deployment and starting the application is severely disturbed. In either case, running with or without debugging, I have been able to deploy and run 2 out of 30 tries. Below is a snippet of errors thrown while deploying, even though the connection is successfull 100% of the time.

macOS
[PAClient Error] Error: E0003 Connection to 'MacLarge' on port 64211 failed
[PAClient Error] Error: E0003 Please make sure that 'Platform Assistant Server' is running on the host machine and is configured to use port 64211
iOS
[DCC Error] E2597 dsymlink: Error: failed to set locale to ??2I?
[DCC Fatal Error] F2588 Linker error code: 1 ($00000001)

Solution

The solution for this issue is simple. Uninstall or disable the anti-virus, or install an anti-virus that does not interfere with this process. Alternatively, add the development project directory to the anti-virus exception list, in case you cannot uninstall or disable anti-virus. On our machine, there was a McAfee license pre-installed on a HP machine that was the culprit of the deployment issues. Leave a comment if you have/had the same issues and which solution you applied to fix the issue.

TMS at Foren-Tage Mannheim, Sept 21

$
0
0

This year, the Delphi community connects again on September 21 for the Foren-Tage (formerly known as Delphi-Tage) and just as for many years already, Bruno Fierens will represent TMS software. This year, the Foren-Tage are organized in Mannheim


Have a look at the agenda packed with interesting sessions and where TMS software brings two sessions:

  • Creating web client applications, PWA apps and Electron apps from Delphi
     
  • The challenges of high DPI and VCL styled custom control development

but TMS software is also the sponsor of the community evening September 20, the evening before Foren-Tage. This means that all drinks on the community evening are free, offered by TMS software.


Don't miss this opportunity to hear the latest about your favorite development tool Delphi from Marco Cantú, Matthias Eißing, Christina Kruse, Max Kleiner, Achim Hubert, Bernd Ott, Frank Lauter, Andreas Häntschel and Thorsten Maxeiner and at the same time meet & network with fellow Delphi developers.

Reserve your ticket now and I very much look forward to meet you there and discuss about Delphi, your Delphi projects and the Delphi eco system! See you on Sept 20 and Sept 21 in Mannheim!

TMS Training Days 2019: Announcement

$
0
0


We have two upcoming training days for you. One is an entire day devoted to TMS Business Subscription Tools and the other to discover what is new in TMS products and what is coming! You can choose to attend just one training day or both days.

In-depth training day on TMS Business tools, especially on TMS XData, with the expert himself Wagner Landgraf, architect TMS Business Tools.
For this training the attendees can bring their own laptop to work with and follow examples. Technical facilities are provided.
Limited number of seats available to ensure direct interaction!

and/or

Never before so many TMS experts and Embarcadero MVPs have been brought together to update you on the latest advancements in TMS products. On this day, we will also unveil for the first time in public what is probably the most groundbreaking product for Delphi developers TMS is working on since 1995.
Our first sessions have been confirmed with Adrian Gallero, Bruno Fierens, José Léon Serna, Marion Candau, Roman Kassebaum, Roman Yankovsky and Wagner Landgraf.

Tentative agenda with already confirmed sessions

  • "TMS VCL UI Pack modernized, high-DPI, VCL Styles, new components and new features" by Bruno Fierens
  • "Introducing Flexcel 7.0: what's new & what's coming" by Adrian Gallero
  • "Bringing your Delphi code to a higher level with TMS FixInsight" by Roman Yankovsky
  • "Using TMS Cryptography Pack for secure PDF signing", by Marion Candeau
  • "Taking the wraps of our upcoming groundbreaking product for Delphi developers" by José Léon Serna and Bruno Fierens
  • "TMS WEB Core v1.3 for web, PWA and cross-platform Electron apps" by Bruno Fierens and Roman Kassebaum
+ more topics in the works that will be announced shortly

Note: All sessions will be presented in English.



Meet the experts

To maximize the value of this day, the opportunity will be given, as alternative to the regular sessions, to meet each of the many TMS experts available during the full day in person or in very small group to discuss and learn from.

Confirmed speakers

  • Bruno Fierens, CTO of tmssoftware.com + Embarcadero MVP
  • Roman Kassebaum, architect TMS WEB Core IDE integration + Embarcadero MVP
  • Holger Flick, QA engineer & evangelist + Embarcadero MVP
  • Wagner Landgraf, product manager TMS Business Tools
  • Adrian Gallero, architect TMS Flexcel product line
  • Marion Candau, architect TMS Cryptography + Embarcadero MVP
  • Roman Yankovsky, architect TMS FixInsight + Embarcadero MVP
  • José León Serna, former Embarcadero IDE team lead


Location

This event will take place at Lindner Hotel Airport , Unterrather Str. 108, 40468 Düsseldorf, Germany.



TMS software has chosen for Lindner Hotel Airport as it is 5 minutes from the Düsseldorf International Airport. Lindner Hotel Airport is very easily accessible by public transport.
Facilities for hotel rooms at the event are optionally available for attendees.

Registrations

Regular price per day: 295 EUR
Dual ticket (for both days): 495 EUR

Early bird tickets available till end September 2019!
Price per day: 250 EUR
Dual ticket (for both days): 400 EUR

Seats are limited so don't delay your registration and reserve your seat today!

Get more information or make your reservation here!

REGISTRATION FORM

We look forward to meet you!


Symbolic integration in TMS Analytics & Physics 3.0

$
0
0

The main new feature of TMS Analytics & Physics 3.0 is symbolic integration. The version allows calculate symbolic expressions of indefinite and definite integrals and analytically evaluate definite integrals on the specified intervals.
Symbolic integration can be implemented with very simple code. Here is the example of typical code template to get symbolic expression of an indefinite integral:

var
  f, i: string;
begin
  f:= ...;

  try
    i:= translator.Integral(f, 'x');
  except
    on ex:Exception do ; // handle the exception ‘ex’
  end;

  // using symbolic expression ‘i’ of the integral
end;
Here ‘translator’ is an instance of the TTranslator class, which realizes all methods for symbolic integration; ‘f’ is the function to integrate. The ‘Integral’ method calculates analytical expression of indefinite integral by ‘x’. Assigning various expressions to the ‘f’ function, we get symbolic expressions of the integrals:
f = ‘(A*x+1)^(1/3)+1/(2-x/B)^(2/3)’
i = ‘3/4*(A*x+1)^(4/3)/A-(2-x/B)^(1/3)*3*B’

f = ‘(e^x-e^-x)*x^2-A*B^(x/2-1)’
i = ‘x^2*e^x-2*(x*e^x-e^x)+x^2*e^-x-2*(-x*e^-x-e^-x)-A*B^(x/2-1)/ln(B)*2’

f = ‘2*sin(x)-B*cos(a-x/2)+tan(x/2)^2’
i = ‘-2*cos(x)+B*sin(a-x/2)*2+2*(tan(1/2*x)-1/2*x)’
It should be noted here that symbolic integration can handle not all math expressions. For example, not all math operators allow analytical integration. If the method fails to calculate some integral – special exception with according message will be thrown. There is another overloaded version of the ‘Integral’ method that allows calculating symbolic expressions for definite integrals. The code for the case is the following:
var
  f, x1, x2, i: string;
begin
  f:= 'A*e^x-sin(x)/2';
  x1:= 'Pi';
  x2:= 'sin(y)';

  try
    i:= translator.Integral(f, 'x', x1, x2);
  except
    on ex:Exception do ; // handle the exception ‘ex’
  end;

  // using symbolic expression ‘i’ of the definite integral
end;
Here ‘x1’ and ‘x2’ are the lower and the higher limits of definite integral. The method ‘Integral’ uses Newton-Leibniz axiom for calculating definite integrals. For the specified integrand f=’A*e^x-sin(x)/2’, symbolic expression of the definite integral is i=’A*e^sin(y)+1/2*cos(sin(y))-A*e^p-1/2*cos(p)’.

Note that the integration limits must not depend on the integration variable (‘x’ in the examples). The limits can contain other variable names, functions, operators and other expressions. If the limits are constant and no other variable used in the integrand, then the result expression can be simplified. For example, using f=’2*x^2’, x1=’3’, x2=’5’ in the code above, we get i=’196/3’. Nevertheless, the result value is symbolic expression. To evaluate definite integrals (calculate numerical value), one must use the ‘Integrate’ method of the TTransaltor class as in the following code:
var
  f, x1, x2: string;
  iv: TValue;
  i: TFloat;
begin
  f:= '2*x^2';
  x1:= '3';
  x2:= '5';

  try
    iv:= translator.Integrate(f, 'x', x1, x2);
    i:= iv.AsType();
  except
    on ex:Exception do ; // handle the exception ‘ex’
  end;

  // using float value ‘i’ of the definite integral
end;
Now i=65.3333333333333 and it is float value of the definite integral.

Note that when evaluating definite integrals the integrand expression can contain other variable or even functions of other variables. However, these variables must be added to the translator instance for the evaluation process. For example, adding the following variables
  translator.Add('A',-1);
  translator.Add('B', 2);
  translator.Add('n', 3);
we can evaluate definite integral for f=’sin(n*x)+e^(x/n)’, x1=’A’, x2=’B’ and getting the value i=3.04355393035906.

TMS Analytics & Physics library realizes base integration rules (sum rule, multiplication by constant and so on); provides default integrators for all algebraic, base special and transcendental functions; realizes integration by-parts algorithms for special expression types. The library also allows implementing user-defined integrators for special cases of functions and expressions. Thus, the functionality of symbolic integration can be easily extended.

The version 3.0 is already available. Source code of the demo project for the article can be downloaded from here.

Increased RAD level for ORM development with TMS Aurelius

$
0
0

The new released version 4.8 of TMS Aurelius, brings RAD with ORM to a new level!

"Photo by AbsolutVision on Unsplash"

New design-time components

There are now three new components available for design-time: TAureliusManager, TAureliusDBSchema and TAureliusModelEvents.

They are just wrappers around existing classes, but they make it even easier to getting started with Aurelius. Here is how you can start using Aurelius with SQLite for example.

Drop the components on the form

First step is simply to drop TAureliusConnection, TAureliusDBSchema and TAureliusManager components on the form. This will also automatically add extra needed units to the uses clause.

Aurelius design-time components

Configure the database connection

You can then double click AureliusConnection1 component to configure your database connection. It brings the dialog below (if you are going to use a 3rd-party component to access the database, like FireDAC for example, just drop a TFDConnection in the form before double-clicking the TAureliusConnection):

Aurelius connection configuration

You can then properly configure the connection. In the example above, we will use native SQLite and simply inform the name of the database file, in this case test.db (if using 3rd party like FireDAC, just choose the Adapter Mode and associate with the TFDConnection component).

Associate other components with the connection

Both TAureliusManager and TAureliusDBSchema components provide functionality that deals with the database. We need to specify which database we are going to use.

Both components have a Connection property that you use to associate to a TAureliusConnection component. That is as simple as that, just open the object inspector and associate the AureliusConnection1 component to boht AureliusDBSchema1 and AureliusManager1 components.

TAureliusDBSchema inspector

TAureliusManager inspector

Write your entities

This is the same as it ever was. We are working with an ORM which means we need entity classes, of course. Let's create in our project a new unit named Entities and add a very simple class entity to it.

Here is the unit full source code. Don't forget that if you have an existing database, you can always automaticaly generate the entities from the existing database structure.

unit Entities;

interface
uses Aurelius.Mapping.Attributes;

type
  [Entity, Automapping]
  TCustomer = class
  strict private
    FId: Integer;
    FName: string;
  public
    property Id: Integer read FId write FId;
    property Name: string read FName write FName;
  end;

implementation

initialization
  RegisterEntity(TCustomer);
end.

Update database structure

Our SQLite database doesn't exist and will be created automatically when we run our application. But there will be no tables in it. That is not a problem for Aurelius, which can create all the needed structure for us.

With the new TAureliusDBSchema component we dropped on the form, it gets even easier. All we have to do is call method UpdateDatabase. We can do it from the OnCreate event of the form so our database automatically gets all tables and fields it needs when the application is started:

procedure TForm4.FormCreate(Sender: TObject);
begin
  AureliusDBSchema1.UpdateDatabase;
end;

All set: Use the manager!

That is it. We have our database ready, we have the manager component in the form, we can simply start using Aurelius right away. For example, we can drop a TButton component and a TEdit component on the form and add the following code to create a new customer:

procedure TForm4.Button1Click(Sender: TObject);
var
  Customer: TCustomer;
begin
  Customer := TCustomer.Create;
  Customer.Name := Edit1.Text;
  AureliusManager1.Save(Customer);
end;

Ready-to-use features

TMS Aurelius source code is very modular and each functionality is in a different unit. That means that usually you need to keep adding the specific unit you need to the uses clause. The nice thing about using Aurelius design-time components is that they add the needed units for you.

For example, you can start writing queries right away, without the need to manually add Aurelius.Criteria.Base or Aurelius.Criteria.Linq units to the uses clause.

Actually, even from code you don't need to do that anymore. You can now just use a single Aurelius.Linq unit which holds everything you need. But that is not even needed when using TAureliusManager component. Just write the queries you want:

procedure TForm4.Button2Click(Sender: TObject);
begin
  ShowMessage(
    'First customer starting with "W" is: ' +
    AureliusManager1.Find<TCustomer>
      .Where(Linq['Name'].StartsWith('W'))
      .OrderBy('Name')
      .Take(1)
      .UniqueResult
      .Name);
end;

Using events with TAureliusModelEvents

Handling events in TMS Aurelius is now easier than ever thanks to the TAureliusModelEvents component.

For example, if you want to intercept and log all SQL statements executed, just drop the component in the form:

TAureliusModelEvents component

Then create an event handler for the OnSqlExecuting event.

TAureliusModelEvents.OnSqlExecuting

Then simply add the following event handler code, drop a TMemo in the form, and you have a logger of the executed SQL statements in a few seconds!

procedure TForm4.AureliusModelEvents1SQLExecuting(Sender: TObject;
  Args: TSQLExecutingArgs);
begin
  Memo1.Lines.Add(Args.SQL);
end;

New Where Attribute

Design-time components are not the only new feature in latest TMS Aurelius. A nice addition is the Where attribute. You can now use it to add additional filtering to your entities or many-valued associations (lists).

This is very handy to implement soft deletes for example (flag entities that have been deleted without actually deleting them).

Here is how you would use it:

  [Entity, Automapping]
  [Where('{Deleted} <> ''T''')]
  TCustomer = class
  private
    FId: integer;
    FName: string;

Whenever you try to retrieve customers, those which Deleted field in database contains T will not be retrieved. You can also use the clause in many-valued associations:

private
  [ManyValuedAssociation([], CascadeTypeAll)]
  [Where('{Status} = ''New''')]
  FNewCustomers: TList<TCustomer>;

It's interesting to note that the Where clause above of the TCustomer entity will still apply, meaning the NewCustomers list will only bring customers which Status field are equal to New and Deleted field different than T.

Expanding blobs in TMS XData

There are updates in other products of TMS Business product line as well. TMS XData got a nice addition: the $expand query option now also expands blobs inlined the returned JSON.

Usually if you request a resource from the server that contains a blob property, it will come as a proxy reference to minimize traffic. For example, a request to a customer that contains a Photo property:

http://myserver/tms/xdata/Customer/6/

Might bring something like this (extra info removed):

{
  "Id": 1,
  "Name": "Wilbur",
  "Photo@xdata.proxy": "Customer(6)/Photo"
}

But with the $expand clause you can now ask the Photo property to come inline in JSON as base64 string:

http://myserver/tms/xdata/Customer/6/?$expand=Photo

The request above will bring a response like this (base64 string value is not a real photo of course):

{
  "Id": 1,
  "Name": "Wilbur",
  "Photo": "T0RhdGE"
}

This is also valid for retriving entity lists as well.

TMS RemoteDB performance improvements

Last but not least in this great TMS Business update, TMS RemoteDB got its performence improved, especially in the situations where queries have lots of parameters, or return a significant amount of data.

Get in touch

Don't forget to subscribe to our channels to receive updated information as soon as it's released! Subscribe to our Youtube channel, and also subscribe to our newsletter to receive news via e-mail.

Have you enjoyed this update as much as I did? Leave your comment below and let us know!



TMS certified consulting partner: C-QUEL

$
0
0


As announced in May 2019, we've started our network of TMS certified consulting partners to make development easier for you. These are partner companies we know, have a long term relationship with and that we know have deep and expert level knowledge in Delphi and our TMS software component products.

We want to introduce our partners to you, who they are and what they can possibly do for you! Our first partner is C-QUEL

Company history:

It all started in 1984 where Filip learned to code in Turbo Pascal, and with the birth of C-Quel 30 years later in 2014.


C-Quel is located in the northern region of Belgium, near the Dutch and German border. A small team of high skilled Delphi (and Pascal) addicts convert every idea into a great digital tool. Uniqueness of C-Quel is that we understand the “art” of listening. We don’t live by the clock, we don’t have business hours but live by the credo “Solution Driven Software”.

Technologies used:

  • Tools: Delphi – Free Pascal – Angular – FireMonkey – Swift
  • Platforms: Windows – Linux – macOS (and of course all mobile platforms)
  • Databases: Firebird – PostgreSQL – MS SQL Server – Pervasive DBMS – SQLite
  • Components: TMS VCL Components – TMS FNC Components – TMS WEB Core – TMS Aurelius
  • Lots of custom development: e.g. Belgoprocess (nuclear waste management) – General Lease (biggest Belgian lease company)


TMS Partnership:

Partnering with TMS was rather obvious because C-Quel and TMS Software are complementary. TMS builds the tools, C-Quel builds the solution. Not only Delphi development is important, but also the Delphi developer. That’s why Bruno & Filip started Be-Delphi… and as we all know: Be-Delphi is the place to be for all of your Delphi development – questions – tips & tricks – examples – tools – etc.


Did you know…

…that 66% of the Belgian Embarcadero MVP’s consists of TMS and C-Quel team members?

Finally:

If you have a Delphi problem… if no one else can help… you can find us… maybe you can hire… C-Quel

We plan for extending our network of consulting partners in the coming months and years. If your organisation is interested in becoming such partner, feel free to reach out & discuss.
Visit the partners landing page for more information and details!


Implicit integral operator in TMS Analytics & Physics 3.0

$
0
0

The main new capability of TMS Analytics & Physics 3.0 library is symbolic integration. As the integration realized, the library now allows using ‘implicit’ integral operator in math expressions. Implicit operators allow writing math expressions in short form and manipulate with them without using explicit formula. For example, the expression ‘sin(n*x)+(A*x+B)^2x’ contains implicit indefinite integral and the library allows making operations with the expression without using explicit formula of the integral. Implicit integral operator syntax is the following:


where is the integral operator; is the derivative operator symbol; expression – symbolic expression, integrand of the operation; V – integration variable; L1, L2 – limits of integration. The limits can be omitted, so, the implicit operator can be used for definite and indefinite integrals. There are some examples of syntactically correct expressions with the implicit integral operator:


Let us consider an example of how to calculate the value of an expression, containing an implicit integral operator:


The evaluation of the expression containing the indefinite integral implemented with the same method Calculate of the TTranslator class. It allows not using explicit expression of the integration. Internal evaluation system of the library implements the symbolic integration inside the core algorithm. Nevertheless, all required data must be provided for the algorithm to process the expression. Namely, all required variables must be added to the instance of the translator:
  • translator.Add('A',-1);
  • translator.Add('B', 2);
  • translator.Add('n', 3);
  • translator.Add('x', 0.5);

Another example is using implicit expression for the definite integral:


One difference between the examples is that the latter does not require the ‘x’ variable value for handling the expression. This is because after using Newton-Leibniz axiom for the definite integral, the expression depends only on ‘A’, ‘B’ and ‘n’ variables. The explicit expression for all implicit operations can be found using the ‘Explicit’ method of the TTranslator class as in the following code:



As the limits of the definite integral are constant and the integrand expression contains only ‘x’ variable the result of the evaluation is constant too, namely ‘392/3’. Nevertheless, it is a symbolic expression, not a floating value. Math expressions with implicit integral operations can be converted into the TeX format to draw as math formulae (https://www.tmssoftware.com/site/blog.asp?post=515). There are some examples of the expressions and drawn formulae:





The version 3.0 is already available. Source code of the demo project for the article can be downloaded from here.


9 speakers, 9 countries, 12 sessions, 5 Embarcadero MVPs

$
0
0

Our upcoming two TMS Training Days on November 14 and November 15 in Düsseldorf promise to be the most valuable days ever we have organized for Delphi developers using or interested in using Delphi and components from TMS software.



The first day is TMS Business Masterclass and focuses on the TMS Business Subscription line of tools with TMS Aurelius ORM and TMS XData REST server technology as headlines. The second day is TMS Dev Intensive and brings the latest on TMS VCL UI controls, TMS Flexcel, TMS FixInsight, TMS Cryptography, TMS WEB Core v1.3. On the TMS Dev Intensive day we will also reveil for the first time in public a groundbreaking and brand new product for Delphi developers.

We spared no effort and have organized to fly in 9 speakers for you out of 9 different countries. 8 out of the 9 speakers are working actively on TMS products, 1 wrote a book on a TMS product and 5 out of 9 speakers have the prestigious Embarcadero MVP title.

We are proud to present our speaker list:

Adrian Gallero, Uruguay
Bruno Fierens, Belgium
Holger Flick, USA
John Kouraklis, United Kingdom
José Leon Serna, Spain
Marion Candeau, France
Roman Kassebaum, Germany
Roman Yankovsky, Russia
Wagner R. Landgraf, Brazil




In the coming days, we will present here in this blog details about the speakers and the sessions. Stay tuned. Don't wait to register for your seat on either the TMS Business Masterclass, TMS Dev Intensive day or both as seats are limited and are going fast!



Puzzling a Pascal developer with 33 years experience under the belt

$
0
0

Recently we received via our support a remark that the following Object Pascal code failed in a TMS WEB Core application

procedure TWebForm1.Button1Click(Sender: TObject);

  function TestFunction: TStringList;
  begin
    Result.Clear;
    Result.Add('ABC');
    Result.Add('DEF');
    Result.Add('GHI');
  end;
var
  StringList: TStringList;
begin
  StringList := TStringList.Create;
  try
    WebMemo1.Lines.Text := TestFunction.Text;
  finally
    StringList.Free;
  end;
end;
My immediate reaction and answer was "Of course, it is normal and expected this fails. One should create the result instance of a function inside the function".
But then came the reaction: "Well, it works in a VCL application, so it should work in TMS WEB Core too, not?" So, I tried the exact same code in a VCL application (with Delphi 10.2) where I added just a TMemo and a TButton and code:
procedure TForm1.Button1Click(Sender: TObject);

  function TestFunction: TStringList;
  begin
    Result.Clear;
    Result.Add('ABC');
    Result.Add('DEF');
    Result.Add('GHI');
  end;
var
  StringList: TStringList;
begin
  StringList := TStringList.Create;
  try
    Memo1.Lines.Text := TestFunction.Text;
  finally
    StringList.Free;
  end;
end;
and press compile & run and .... magic ... the compiler gave a warning but the code did add the 3 lines of text to the memo control. I thought that this must be some coincidence with the local variable TStringList memory overlapping the function Result memory and that for sure when compiling this for Win64 it would fail. And guess what... it keeps working! This is the point where I start to doubt everything I learned in 33 years of using the Pascal language. So, next step is testing this exact same code with the FPC compiler from Lazarus 2.0.2. My self-confidence is slowly going to zero as also there the code does add the 3 lines to the memo.

More playing around and changing the code to
function TestFunction: TStringList;
begin
  Result.Clear;
  Result.Add('ABC');
  Result.Add('DEF');
  Result.Add('GHI');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  StringList: TStringList;
begin
  StringList := TStringList.Create;
  try
    Memo1.Lines.Text := TestFunction.Text;
  finally
    StringList.Free;
  end;
end;
and the application is still doing the same, adding the 3 lines of text to the memo...

Not wanting to believe that 33 years of experience have been proven useless, I start playing with the code and modify it to:
procedure TForm1.Button1Click(Sender: TObject);

  function TestFunction: TStringList;
  begin
    Result.Clear;
    Result.Add('ABC');
    Result.Add('DEF');
    Result.Add('GHI');
  end;
var
  StringList: TStringList;
  s: string;
begin
  StringList := TStringList.Create;
  s := 'Hello world';
  try
    Memo1.Lines.Text := TestFunction.Text;
    Memo1.Lines.Add(s);
  finally
    StringList.Free;
  end;
end;
Aha, self-confidence is slowly coming back again as this fails gloriously with an access violation.

A small twist to the code:

procedure TForm1.Button1Click(Sender: TObject);

  function TestFunction: TStringList;
  begin
    Result.Clear;
    Result.Add('ABC');
    Result.Add('DEF');
    Result.Add('GHI');
  end;
var
  StringList: TStringList;
  s: string;
begin
  s := 'Hello world';
  StringList := TStringList.Create;
  try
    Memo1.Lines.Text := TestFunction.Text;
    Memo1.Lines.Add(s);
  finally
    StringList.Free;
  end;
end;
makes it 'work' again.

So, thinking that a class instance created just before invoking a function returning this class type will "just work" from Delphi, I now test it with the compiler set to Release mode instead of the default Debug mode and kaboom, the access violation now always comes. So, now I'm finally sure. One should never rely on creating a class instance outside a function returning this class type. The TMS WEB Core pas2js compiler also causes the equivalent error, i.e. invoking a method of a null, so relief, all is as expected in TMS WEB Core web client applications!

I'm curious to hear if you encountered similar confusing code patterns in your Delphi career?

TMS Training Days 2019: Introduction speaker 1

$
0
0

Marion Candau

  • PhD in cryptography
  • Developer at Cyberens, a French cybersecurity company located in Bordeaux.
  • TMS Cryptography Pack architect
  • MVP Embarcadero
  • She mainly develops cybersecurity-related applications and advises clients to use cryptographic tools and libraries in their own applications.


Session at TMS Dev Intensive:

How to sign a PDF document with a cryptographic USB token using TMS Cryptography Pack?

She will briefly explain the cryptographic mechanisms of an electronic signature, then she will present how a cryptographic USB token works and finally, how to use a TMS Cryptography Pack component to sign a PDF document with the token.


Leave a comment down below!
Do you have a question for Marion Candau? Are you coming to the TMS Training Days and would like to discuss a project with her?
Ask your question or share your opinion / experiences about our TMS Cryptography Pack.


Reminder
Don't wait to register for your seat on either the TMS Business Masterclass, TMS Dev Intensive day or both as seats are limited and are going fast!




Stay tuned for more....




TMS Training Days 2019: Introduction speaker 2

$
0
0

Holger Flick


Since 1996, Dr. Holger Flick has been using Delphi as his primary development platform and has been an active member of the community. He studied computer science at Dortmund University and later wrote his dissertation at the Ruhr University in Bochum in the field of telemedicine. For his passion for and knowledge of Delphi he was awarded the “Delphi MVP” moniker in 2016.


In 2019, Holger moved to the United States of America (USA) and established his new company FlixEngineering LLC. The company focuses on consulting, training and software development using object-oriented programming languages like Delphi, C#, Swift, and Objective-C.
Holger is part of the TMS Software family providing his expertise as Evangelist and QA Engineer.


Session at TMS Business Masterclass:


Many frameworks, many platforms: TMS has all the tools. You’ve read it many times, but how do all these technologies fit together?

This session will give an example how you can build a database application for multiple desktop and mobile platforms as well as for the web using the same database backend. It will also provide an overview of the technologies that are available from the TMS toolbox and will hand you key pointers how to pick the right one for the task you need to achieve. In short, you will get a hands-on example that covers TMS XData, TMS RemoteDB, TMS Web Core, VCL, and FNC.


Leave a comment down below!
Have you seen Holgers useful videos on our YouTube channel?
Do you need tips on a specific component? You like our videos and want more?
Comment below and tell Holger how much you appreciate his work!
Ask your question or share your opinion / experiences about our products.


Reminder
Did you reserve your seat already?
Don't wait till last minute and get your seat for either the TMS Business Masterclass, TMS Dev Intensive day or both days!




Stay tuned for more....



TMS Training Days 2019: Introduction speaker 3

$
0
0



Bruno Fierens

  • Studied civil electronic engineering at university of Ghent, Belgium (1987-1992).
  • Started a career as R&D digital hardware engineer at Barco Graphics Belgium designing with FPGA, VHDL, graphic processors, PCI, Silicon Graphics add-on boards, high-end printer controllers,...
  • Began writing software in Turbo Pascal 3.0 since 1987 and used all Borland Pascal and all Delphi versions since then.
  • Founded TMS software in 1996, developing VCL components starting with Delphi 1.
  • TMS software became Borland Technology Partner in 1998 and developed Delphi Informant award-winning grid & scheduling components.
  • From 2011 FireMonkey cross platform components,targetting Windows, macOS, Android, iOS.
  • In 2016, TMS software launched FNC, a framework neutral component architecture enabling to use UI controls in VCL,FMX & LCL apps
  • In 2018, TMS software launched TMS WEB Core, a framework for creating rich web clients using ObjectPascal
  • Currently doing and managing VCL, FMX, Web, .NET, IoT, LCL, REST, node.js development.
  • Is a regular speaker at conferences (Be-Delphi, DelphiTage, ITDevCon, CodeWay Tour, EKON, DevTracks, SDN, ..).
  • Available for consulting & custom project development.
  • Bruno Fierens was titled Embarcadero MVP since 2012.
  • Special area of interest are user interfaces design, UX, RAD software development, hardware/electronics.


Sessions at TMS Dev Intensive:


Session 1:
The latest advancements & directions for VCL controls

In this session, Bruno Fierens will discuss the latest state and further planned advancements for VCL UI controls in the TMS VCL UI Pack and other products with respect to handling per monitor high DPI and using the controls in applications using VCL Styles versus using the TMS Office & Windows styles.

Session 2:
TMS WEB Core v1.3

The new features and capabilities of the TMS WEB Core framework for building modern web application clients, installable clients for mobile devices and cross-platform desktop applications will be detailed. In this session you’ll see the latest new & powerful capabilities to use cloud data, bind to HTML templates, use push notifications, encryption, local file access and more…


Leave a comment down below!
Excited to meet the founder of TMS Software in person?
Tell him how much you like his new product TMS WEB Core, in the comments section!


Reminder
Did you reserve your seat already?
Don't wait till last minute and get your seat for either the TMS Business Masterclass, TMS Dev Intensive day or both days!




Stay tuned for more....



TMS Training Days 2019: Introduction speaker 4

$
0
0


Wagner Landgraf

  • Graduated in Electronic Engineering and M.Sc in Industrial IT at Federal Technological University of Parana-Brazil.
  • More than 24 years experience (since 1995) in Delphi development - since Delphi 1.
  • Architect and main developer of Delphi libraries like TMS Aurelius, TMS XData, TMS RemoteDB, TMS Scripter, among others.
  • Founder of landgraf.dev online school.

Sessions at TMS Business Masterclass

  • Session 1: The TMS Business World
    A journey into the world of TMS Business bundle. We will learn about the solutions provided by TMS Business: the components included, the libraries, the use cases, all in the historical context and the motivations behind it. Products covered: TMS Scripter, TMS Diagram Studio, TMS Workflow Studio, TMS Data Modeler, TMS Aurelius, TMS Sparkle, TMS RemoteDB, TMS XData, TMS Echo, TMS Logging.
    *BIZ level: Beginner
  • Session 2: The Joy of Databases
    A talk about new ways to deal with databases. What is an ORM (Object-Relational Mapping) framework, and are the most recent news and features about it. What you can use to help you out in modeling your databases, easily use existing databases with the new paradigm, and advanced techniques on ORM and database modeling. Products covered: TMS Aurelius, TMS Data Modeler
    *BIZ level: Intermediate
  • Session 3: Your App Everywhere: REST API
    Multitier, cloud, REST, HTTP, SSL: What, Why, When, and mainly, How? Learn what a REST API server means, why you will benefit from moving your app to the cloud, and learn how to do it in a very RAD way. The latest features will be covered, even for the experienced users. Products covered: TMS XData, TMS Sparkle
    *BIZ level: Intermediate
  • Session 4: The Unsung Heroes
    A deeper look into three awesome TMS Business libraries that bring you solutions for problems you never thought you had. User-customized application, modifying business rules at runtime, offline data synchronization, and moving your app to the cloud in a couple of days. Products covered: TMS Scripter, TMS Echo, TMS RemoteDB
    *BIZ level: Beginner
  • Session 5: Getting serious in the Cloud
    Advanced techniques and concepts when building REST API servers: Security, background processing and deep analysis of real-world source code. Products covered: TMS XData, TMS Sparkle
    *BIZ level: Advanced
  • Session 6: All Together Now
    A very interactive session where all the current ideas from the TMS team for the future of TMS Business will be presented. We will discuss the existing roadmap, brainstorming about all the possibilities, have all questions answered and summarize the whole day.

Leave a comment down below!
Do you have a question for Wagner Landgraf? Are you coming to the TMS Business Masterclass and would like to discuss a project with him?
Ask your question or share your opinion / experiences about our TMS business tools.


Reminder
Did you reserve your seat already?
Don't wait till last minute and get your seat for either the TMS Business Masterclass, TMS Dev Intensive day or both days!




Stay tuned for more....



TMS Training Days 2019: Introduction speaker 5

$
0
0


José León Serna

Creator of Delphi for PHP/HTML5 Builder and former Director of Engineering and Branch Manager at Embarcadero Technologies between 2010 and 2016. Although the Embarcadero’s branch participated in the development of several products, he was mainly responsible for RAD Studio, and more specifically, the IDE. He participated actively on the conception and implementation of multitude of new features, specially focused on multi-device development. He has been involved in IDE development for most part of his career and is the area where he enjoys most.


Session at TMS Dev Intensive


"Introducing a brand-new and ground-breaking product that will open the world for Delphi developers and vice versa.”
Be there, be amazed, receive the first product beta and start playing with it!

It has been more than one year that Bruno Fierens, CEO of tmssoftware.com got in touch with José Leon Serna and discussed about future opportunities for Delphi development. Surprisingly our visions for future directions and possibilities perfectly aligned. From there, an intense collaboration started and we will present on November 15 the first fruits of this collaboration. We clearly could not have achieved the amazing technical break-throughs without José Leon. The TMS team is honoured, happy and proud to have one of the brightest minds in the Delphi world in our family. We are sure you look as much forward to see José Leon in action on November 15 as we do!

Leave a comment down below!
Are you excited about his session?
What do you think he will be talking about? Any guesses?


Reminder
Don't wait till last minute and get your seat for either the TMS Business Masterclass, TMS Dev Intensive day or both days!




Stay tuned for more....



TMS Training Days 2019: Introduction speaker 6

$
0
0


Roman Kassebaum

Roman Kassebaum is a freelancer. He started to work with Delphi in 1996 after he graduated with a Master degree from the University of Paderborn. He is a Delphi MVP and an Embarcadero Technology Partner. During the last years he became a member of the great TMS team and he is also a TMS certified consulting partner. Roman is a specialist in all kinds of Delphi projects including TMS Business components and the cutting edge TMS WEB Core library for which he created the Delphi IDE integration.


Session at TMS Dev Intensive


Together with Bruno Fierens, Roman Kassebaum, architect of the TMS WEB Core IDE integration, will present and demonstrate TMS WEB Core v1.3 new features & capabilities!


Leave a comment down below!
Are you excited about what's new in TMS WEB Core v1.3?


Reminder
Last few seats left!
Don't wait till last minute and get your seat for either the TMS Business Masterclass, TMS Dev Intensive day or both days!




Stay tuned for more....



Viewing all 1016 articles
Browse latest View live


Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>