Subscribe: marcocantu.blog
http://blog.marcocantu.com/blog_rss.xmldata
Added By: Feedage Forager Feedage Grade B rated
Language: English
Tags:
blog  coderage  community embarcadero  controls  delphi  embarcadero  new  online  rad studio  rad  studio  tasks  time  vcl 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: marcocantu.blog

marcocantu.blog



Techie Italian Blogging on Delphi and More



Updated: 2017-12-14T21:47:58.632Z

 



New VCL Panels in Delphi 10.2.2

2017-12-14T21:47:58.632Z

Along with the picker controls I described yesterday, the VCL in Delphi 10.2.2 has two additional panel controls: TCardPanel and TStackPanel.

With the need to support more screen resolutions, while creating nice looking user interfaces and pleasant user experiences, we think it is important to offer additional ways to build the UI of your VCL applications. This is why in 10.2.2 we introduced two new VCL panel controls. These are control containers with specific way to manage the layout and position of their child controls. You can see the controls at design time below:

(image)

TCardPanel

The CardPanel control is a set of pages, like the old PageControl, with no tabs. You display one page at a time, and it has built in support for swiping pages using a gesture. It is a collection of panels of the same size, each hosting its own controls.

At design time, you can use the local menu to add a card or select one, as shown here (image courtesy of RAD Studio DocWiki):

(image)

Each page is a "TCard" object, which is just a regular panel in disguise, so no special properties of configuration. More information at http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_the_Card_Panel_Component

TStackPanel

The stack panel is a panel with a special layout. All controls added to it are placed in a different "row" (or column if you set it horizontally). The controls can be aligned to the left, the right, the center or use the entire space (fill). You set the default alignment at the stack panel level, and you can override it for each individual control (or use the special default value to pick the parent control setting). Each of the controls hosted by the panel, gets three additional properties "injected" by the container -- at the bottom of the Object Inspector list -- as you can see below:

(image)

More information at http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_the_Stack_Panel_Component

The VCL remains a central pillar of Delphi (and C++Builder), and Embarcadero is and will continue to enhance it matching the evolution of the Windows platform and user experience, while on the other hand ensuring a very high degree of compatibility with the existing VCL code.

(image)



Debugging Delphi Apps on Android 8.1 Works

2017-12-14T11:52:01.559Z

With Android 8.1 Google has fixed an issue preventing debugging of applications on device

When Google introduced Android 8 this summer, they increased the platform security but happened to block socket access to the debugger, basically preventing debugging applications on a device. You'd see the error message "Can't open socket: Permission denied." as reported also at https://quality.embarcadero.com/browse/RSP-18992. The issue was not a change in out debugger support, but a problem at the operating system level. You can read some of the discussion here: https://github.com/android-ndk/ndk/issues/447

Now the good news is Google fixed the issue (as indicated in the thread above). We tested it on previews and it seemed fine. Now Google has shipped Android Oreo 8.1, I got it for my Nexus 5X device this morning, installed it, and I can now debug a Delphi application as usual. I captured an image of the program stopped at a breakpoint below. 

(image)

Now this is not related to 10.2.2 in any way, as the change was only on the Android side, not the RAD Studio side. What we have fixed at our end is the display of the device name as target, but that wasn't a really big issue anyway.

(image)



New VCL Date and Time Picker Controls in Delphi 10.2.2

2017-12-13T16:34:16.364Z

There are 4 new VCL controls in Delphi and C++ Builder 10.2.2. In this blog post I'll focus on the two new date and time pickers. We at Embarcadero continue to consider the VCL as the best library for Windows-specific GUI development and are continuing the effort of improving and modernizing it, particularly improving the overall support for Windows 10. One of the directions of this effort (along side with styling, WinRT API, Desktop Bridge and more) is the addition of new VCL controls with the look of feel of the latest Windows platform controls, part of the WinRT UI layer. We have already delivered similar controls in 10 Seattle and 10.1 Berlin, and now adding 2 more in this release. The goal od this control is to offer a more modern UI for VCL applications, adopting the Windows 10 UI style and elements without forcing you to rewrite the entire application (as someone in Redmond suggests) and allowing you to build programs that will still work fine and look great on Windows 7 -- a version of Windows still largely used today. This is the reason why this family of controls is a set of pure VCL controls, that mimic the WinRT controls with no WinRT dependency. You can see the current list in the image below. Of these 4 controls are new in 10.2.2 Tokyo, the two pickers I'm covering in this blog post and two additional container panels I'll cover in a separate post. As the name implies, the Date Picker and Time Picker components offers a simple, intuitive, and modern way to select a date or a time. These components are highly configurable, and can be adapted to any locale and format -- as these are quite different depending on where people live.  TDatePicker The date selection component both displays a date in a given format and offers the user a simple way to select a date value from a dropdown. Rather than displaying a calendar, the user can change the day, month, and year values separately, similarly to what happens in most mobile platforms and applications. The user can change the selection with the keyboard arrow keys, clicking with the mouse on the upper or lower elements of a list or on the top and bottom arrows, or using the mouse wheel. The key property of the component is the DateFormat property. This allows you to establish the format in which you want to display the date, changing the sequence in which the control displays the elements (month/day/year vs. day/month/year, vs year/month/day, etc.). This affects both the initial display and the actual selection. Below you can see a couple of different configurations, one at design time above and one at runtime. You can also see in the drop down a list of sample configurations, including month names or numbers, one or two digit days, and so on. The image is from the DateTimePickers sample that ships with RAD Studio 10.2.2 in the VCL section of the demos. More information about the component is available in the RAD Studio DocWiki at http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_the_Date_Picker_Control. TTimePicker The time selection component is very similar to the date selection. Again it has multiple sections for the hour, the minute, possibly the seconds, and possibly the AM/PM selector. In this case the fundamental property is the TimeFormat property. Again, it determines both the display and the pickers behavior. You can include seconds or exclude hours and add AMPM to the time format to use a 12 hours format and to include an AM / PM selector to the dropdown. Again, here is an example with a couple of different settings (at design time and runtime) with an image taken from the same demo mentioned above. Additional documentation is at http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_the_Time_Picker_Control. That's all for now. Stay tuned for info on the other two new VCL controls in 10.2.2, or join the intro webinar tomorrow. [...]



Delphi 10.2.2 Has Been Released

2017-12-12T20:56:53.697Z

Today Embarcadero has released the second update to Delphi 10.2 Tokyo, C++ Builder 10.2 Tokyo and RAD Studio 10.2 Tokyo

As you can see at https://community.embarcadero.com/blogs/entry/rad-studio-10-2-2-released-today, the new version 10.2.2 of Delphi, C++Builder, and RAD Studio is now available. 

The new features are covered in the docWiki, at http://docwiki.embarcadero.com/RADStudio/Tokyo/en/10.2_Tokyo_-_Release_2

There are hundreds of bugs fixed (including over 150 bugs reported by customers in Quality Portal), as you can read in List of new features and customer reported issues fixed in RAD Studio 10.2 Tokyo Release 2 (we'll close the matching QP report in the coming days).

In the coming days I and the other PM will write a few blog posts on specific features added to the product. Also, there is a webinar on Thursday you can sign up for (at 3 times in the day). It will be an introduction to 10.2.2. Follow one of the 3 links at: https://community.embarcadero.com/index.php/all-events?language=en-GB&sort=embevent.

(image)



Delphi Blogs of the Month #57

2017-12-12T09:51:42.885Z

I've been a busy, more than usual, but here is a summary of external blogs and I'm going to be fairly active in the coming days here. As usual, this is a collection of links to relevant blog post and other newws you might heve missed over the recent perios of time, and that relate with Delphi one way or another. Embarcadero News There is a new Sencha MVP program, similar to the RAD Studio one: https://www.sencha.com/blog/sencha-mvp-program/ Healthcare App Prototype Built In Delphi Wins First Place In Startup Weekend Competition! Read more at https://community.embarcadero.com/blogs/entry/healthcare-app-prototype-built-in-delphi-wins-first-place-in-startup-weekend-competition Blog Posts Top 10 Most Popular Open Source Delphi Projects On GitHub By Star Rating by Eli at https://community.embarcadero.com/blogs/entry/top-10-most-popular-open-source-delphi-projects-on-github-by-star-rating RAD Studio Custom Editor Sub-views by David Hoyle at http://www.davidghoyle.co.uk/WordPress/?p=1831 (this is an extremely detailed example of writing editor views, which is a fairly complex extension to the RAD Studio IDE) Persisting enumeration and sets to JSON by Chee Wee Chua at http://chuacw.ath.cx/blogs/chuacw/archive/2017/12/11/persisting-enumeration-and-sets-to-json.aspx (a small and handy tip) Microsoft has a very interesting blog post by Matteo Pagani covering the Desktop Bridge, a technology we support in Delphi, and while not everything is directly applicable, it is a very interesting read: https://blogs.msdn.microsoft.com/appconsult/2017/11/06/desktop-bridge-best-practices-and-common-issues/ Supporting iPhone X display with Delphi by Dave Nottage at http://delphiworlds.com/2017/11/supporting-iphone-x-display-with-delphi/ (some related improvements will be made available in RAD Studio 10.2.2) Delphi + Enterprise Connectors + RAD Server = SAP native client for iOS and Android by Fernando Rizzato at https://community.embarcadero.com/blogs/entry/delphi-enterprise-connectors-rad-server-sap-native-client-for-ios-and-android (given the Enterprise Connectors cannot be used directly on mobile, you need a middle tier architecture to leverage them on your phone -- which also opens us to using push notifications) Experimenting with Neural Networks – Part 6 by Craig Chapman at http://chapmanworld.com/2017/11/19/experimenting-with-neural-networks-part-6/ (read the previous 5 parts as well, of course) Massive Collection Of Design Patterns, Frameworks, Components, And Language Features For Delphi at https://community.embarcadero.com/blogs/entry/massive-collection-of-design-patterns-frameworks-components-and-language-features-for-delphi Older but Great Posts I missed this, but worth highlighting: A Delphi Primer with RAD Studio 10.2 by T Theobald at http://borkedcode.com/wp/?p=1470 (a nice, long, and detailed "first look" to Delphi) Roll your own lightweight, scalable backend using ZeroMQ at https://blog.grijjy.com/2017/05/02/roll-your-own-lightweight-scalable-backend-using-zeromq/ Projects and Libraries Pyscripter is a feature-rich but lightweight Python IDE (written in Delphi): https://github.com/pyscripter/pyscripter. There is also a related Python Delphi integration package at https://github.com/pyscripter/python4delphi and this classic page http://www.atug.com/andypatterns/pythonDelphiTalk.htm ​     [...]



Cross JIRA Analysis with FireDAC CDATA JIRA Connector

2017-11-24T16:06:05.362Z

In Embarcadero, for the RAD Studio project, we have two JIRA systems, that would occasionally fall out of sync. So I used Delphi and the FireDAC CDATA Connector for JIRA to make some automated analysis. Here is some information about the project, including configuration and actual code. In Embarcadero, for the RAD Studio project, we have two JIRA systems. One is a public system better known as Quality Portal (https://quality.embarcadero.com), while the second is an internal JIRA system accessible only behind the firewall. The two systems are kept in sync, as I explained in the past, so that a bug opened in the public system is reflected in the internal one; as we close a bug in the internal system and ship the fix, the internal status is reflected in the public system. Almost always. In fact, there are reasons (timing, specific configurations, unexpected workflows, timeouts during synch operations, scripts that get stuck...) that prevent the regular flow to happen, leaving bugs in an inconsistent state. Specifically, we often have bugs closed internally that remain open (indefinitely) in the public system. I've spent time in the past looking for these orphaned items, but it is a fairly tedous process. So I though of writing an application to automate this. I could have used JIRA own scripting, but the process needs manual overview, which makes it more complex. So why not use Delphi? Using the CData JIRA Enteprise Connector to run a query against JIRA and storing the data in a dataset takes literally a few minutes. You can use FireDAC query editor to refine your query, and write fairly standard Delphi dataset processing code. This blog post is a description of what I did to achieve my goal -- and the application I build it going to save me a lot of time in the future. First, I've added to a data module (of a good old VCL application) the components needed to access quality portal and query for all of the open issues: object QualityportalConnection: TFDConnection Params.Strings = ( 'URL=http://quality.embarcadero.com' 'ConnectionDef=QualityPortal' 'IncludeCustomFields=true') LoginPrompt = False end object QPIssuesTable: TFDQuery Connection = QualityportalConnection SQL.Strings = ( 'SELECT Key, StatusName, IssueTypeName, Summary, InternalID FROM ' + 'CData.JIRA.Issues where ProjectKey = '#39'RSP'#39' AND StatusName = '#39'Open'#39) end The connection uses the IncludeCustomFields flag to retrieve extra custom fields of our JIRA installation, namely the cross reference from one JIRA system to the other, stored in the InternalID field -- and something a regular user without admin permissions should not be able to see. In fact, you need to provide your user name and password, the regular ones you use on the site. For query I've picked the fields I'm interested in, to reduce network traffic (I'm reading a lot of data!) and filtered on RSP (Data Studio Project) and Open status. You can see the query running in FireDAC query editor below: I also created static field objects for all fields in the query. For the internal JIRA analysis I've defined a query to retrieve information about an individual item, using a parametric query (like in SQL): SELECT Key, StatusName, FixVersionsAggregate, StatusName, ResolutionName FROM CData.JIRA.Issues where Key = :key With this query I'm retrieving the status, the type of resolution and the fix version. The basic approach of the application is to iterate all of the items open in the public system, fetch the internal status and check for inconsistencies. This is the basic loop: QPIssuesTable.Open; // for each, check internal status QPIssuesTable.First; while not QPIssuesTable.EOF do begin JiraIssuesTable.Close; JiraIssuesTable.Params[0].AsString := QPIssuesTableInternalID.AsString; JiraIssuesTable.Open; // consider only issues [...]



New on Embarcadero Academy: CodeRage Replays and my New Course and Bundle

2017-11-20T16:10:58.132Z

Embarcadero Academy is growing with new content. Most notably, all of the CodeRage online conference replays are available on the site. I added a new course on Anonymous Methods and a course bundle on Modern Delphi Language.

Embarcadero Academy is an independent online training site available at https://www.embarcaderoacademy.com/. The site has an overall agreement with Embarcadero as a key destination for online training for the company development tools products.

The academy site co-hosted the CodeRage XII conference the other week and it is not offering the complete set of replays. All you need to do is create an account on the platform and sign up for the free CodeRage course at https://www.embarcaderoacademy.com/p/coderage-xii.

On my part, I added a new course on Anonymous Methods and a course bundle on Modern Delphi Language including the courses on interfaces, generics, and anonymous methods. This bundle includes 6 hours of content. Also, all of the courses have a 20% special CodeRage discount until the end of November.

There are many other great classes on Delphi by Alister and non-Delphi classes as well. It is also now possible to take the Delphi certification exams on the academy site. There are other ideas floating around to improve the academy, like live online classes and subscriptions: more than willing to get your feedback (that I can share with the academy site team) or suggestions to me for other topics to cover in future additional courses.

(image)



Explaining Tasks in Delphi Parallel Library... by Creating too Many Tasks

2017-11-16T17:19:00.724Z

While doing some research for an online class, I came up with a demo that highlights the concept of a task in Delphi PPL (Parallel Programming Library) and how they differ from threads.

Recently, I wrote some new demo for Delphi PPL (Parallel Programming Library), while doing some research for an online class -- which is available since last week on the Embarcadero Academy site ("Anonymous Methods in Delphi"), along with a new overall bundle of my classes ("Master Modern Delphi Language Techniques").

In the past I've used different ways to explain tasks and compare them to threads. Tasks are lightweight and managed more efficiently, than threads. The PPL creates a thread pool and assigns pending tasks (and their code) to a pool of threads that depends on your CPU cores and current workload. But these descriptions might still explain tasks and threads as fairly similar in scope. Now let's look at this source code snippet:

      procedure TForm12.btn100sClick(Sender: TObject);
var
  tasks: array of ITask;
  Value: Integer;
  I: Integer;
begin
  SetLength(tasks, 100000);
  Value := 0;

  for I := Low (tasks) to High (tasks) do
      begin
    tasks[I] := TTask.Create (procedure ()
    begin
      TInterlocked.Increment (Value);
    end);
    tasks[I].Start;
  end;

  TTask.WaitForAll (tasks);
  Memo1.Lines.Add(Value.ToString);
end;

As you can see this event handler creates not hundred, but hundred thousand tasks. Each of them has an extremely simple operation to complete -- fairly nonsensical, I know. But you can create 100,000 tasks and they'll all done done in less than a second, on my computer. Consider creating 100,000 threads! that would create a significant extra overhead. By running this code, the tasks are assigned to a few threads in a pool, as you can see in the debugger:

(image)

Small demo and pretty much useless code, but I think it does a good job in highlighting the lightweight and flexible nature of nature of tasks, when compared to threads.

(image)



CodeRage XII Starts Today (With European Schedule)

2017-11-07T10:34:25.040Z

The online CodeRage conference starts today. Here is a European-centric calendar for those living on our side of the ocean. And some more information...

The online CodeRage conference by Embarcadero starts today: https://community.embarcadero.com/article/16578-coderage. Registration is still oepn at https://register.gotowebinar.com/register/7990350396754529539.

With dozens of session based on central US time zones, it is easy to get confised. So I've amended the official calendar for those based in Europe (warning, in case of last minute schedule changes, I won't probably be able to udpate it). Here are thre three PDFs for the 3 days with UTC+1 or Central Europe Time zone times:

Tuesday Nov 7thhttp://blog.marcocantu.com/images/forblog/CodeRageXIIScheduleEuropeTueNov7.pdf

Wednesday Nov 8thhttp://blog.marcocantu.com/images/forblog/CodeRageXIIScheduleEuropeWedNov8.pdf

Thursday Nov. 9thhttp://blog.marcocantu.com/images/forblog/CodeRageXIIScheduleEuropeThuNov9.pdf

Remember you can sign-up and follow the event also on the Embarcadero Academy site at https://www.embarcaderoacademy.com/

I'll be "live tweeting" any even vaguely Delphi-related CodeRage information https://twitter.com/delphitweetday. Follow the account if you don't do already!

(image)



CodeRage XII is Next Week

2017-11-03T10:05:33.774Z

Next week will see the 12th edition of Embarcadero's yearly online conference. Three days full of sessions covering Delphi, C++Builder, InterBase, and all of the company products (including also Sencha's ExtJS), but also general software development topics and third party tools. I'll be giving a couple of sessions. Don't miss it!

(image)

Next week, from Tuesday November 7th to Thursday November 9th will see the 12th edition of Embarcadero's yearly online conference, called "CodeRage" since the CodeGear days. This event goes beyond all other webinars and sessions, in scope, breadth and focus, and is really an online multi-day event. While most sessions will be available afterwards, I really recommend you to plan attending live and get involved into the Q&A and discussion and social media conversations around the conference. Reserve your time and don't be shy asking your boss some free time to attend the conference -- it will be so much cheaper than going to a real one!

You can see the temporary program at:  https://community.embarcadero.com/blogs/entry/coderage-xii-sessions-and-schedule

I won't comment on all of the sessions, but I'm going to mention a few highlight and list mine:

  • Two guess industry luminaries will be giving sessions, Robert Martin (aka Uncle Bob) is speaking on "The Clean Coder - An Introduction to Software Professionalism" and Steven McConnell (of "Code Complete" fame) is speaking on "Managing Technical Debt".
  • RAD Studio product address by the PM team (Sarina, David, and myself) in which we will provide hints (and screenshots) of new features to come in RAD Studio 10.2.2 -- Tuesday 9AM Central US Time or 4PM in Central Europe.
  • Many sessions by well-known Delphi gurus including Ray Konopka (he'll also provide some interesting previews), Cary Jensen, Brian Long, Bob Swart, Danny Wind, Olaf Monien.... and many many others
  • Sessions by most Embarcadero SC at all latitudes, covering many ways to use RAD Studio
  • Detailed covered of many third party tools (including FMX Linux, Arduino integration, reporting, DB tools, UI controls and libraries, code migration, and much much more)
  • Technical sessions by the PM team (David, Sarina, myself, and Sandeep for Sencha). Specifically, I'm giving a session titled "Introduction to Ext JS for Delphi Developers" in which I'll provide some initial information on Ext JS and the use of the Sencha Architect IDE for building the front end of a RAD Server web service -- Tuesday 11AM Central US Time or 6PM in Central Europe.

Finally notice that this year the online conference will be hosted both on GoToWebinar and on Embarcadero Academy at https://www.embarcaderoacademy.com/p/coderage-xii, where you can already sign up and see the detailed schedule.

(image)