Discussing, Learning, and Using Delphi and related technologies to create Great Applications!
procedure Meeting;
const
  MeetingTitle = 'RAD Server, Part 1½';
  MeetingMonth = 2025.02 ;
  { tags: #Homer Jones #RAD Server #2025 }
begin
  WriteLn('''

In October of 2023, the concepts of building RAD Server modules were introduced with the promise of a more advanced topic “soon”. Well, next month, we will finally dive into the deep end but this month a refresh of that introductory topic will be shared along with a quick database demo that produces a JSON list of customers. Additionally, a quick show-and-tell of an Android app written with the popular JavaScript framework, React Native will demonstrate how the JSON data produced is used.

  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Advent of Code';
  MeetingMonth = 2024.12 ;
  { tags: #AoC #2024 }
begin
  WriteLn('''

For the last 10 years, a set of programming challenges has been produced on a daily basis from the beginning of December until Christmas. It is called Advent of Code, a name derived from the “Advent Calendars” popular this time of year where kids open a daily tab on a wall-hung calendar to reveal a surprise as they count down the days until Christmas.

  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Migration Automation';
  MeetingMonth = 2024.11 ;
  { tags: #refind #2024 }
begin
  WriteLn('''

Tonight we’ll look at a batch script that calls three command-line utilities which perform a lot of tedious work of migrating legacy Delphi 5 programs to compile under Delphi 12. The old code base uses the BDE and a lot of custom components; the new code uses FireDAC and Raize Controls and Quantumn Grid from DevExpress–a huge jump in functionality and improvement in user interface!

  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Delphi 12 Features';
  MeetingMonth = 2024.10 ;
  { tags: #2024 }
begin
  WriteLn('''

This month will be a light touch on a few of the recent features added to Delphi 12, including AI integration, Split Editor, Focus Mode, and WebStencils.

  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'September: Social Get-Together';
  MeetingMonth = 2024.09 ;
  { tags: #2024 }
begin
  WriteLn('''

This month, we’ll meet at Gene and Sue’s home for authentic home-made pizza! They have a new address and would like a head-count, so watch your email and RSVP to that. If you want to attend, join our Groups.io mailing list and I’ll make sure you get an invite.

  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Tech Chat';
  MeetingMonth = 2024.07 ;
  { tags: #2024 }
begin
  WriteLn('''

We’re taking it easy this month–no official presentation, no computers, just get together as friends and make sure we’re all surviving the summer heat!

  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'June: Canceled!';
  MeetingMonth = 2024.06 ;
  { tags: #2024 }
begin
  WriteLn('''
Due to multiple conflicting schedules, we will not hold our regular Delphi meeting in Oregon this month. Enjoy the Juneteenth holiday and we’ll see you in July!
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Tech Chat';
  MeetingMonth = 2024.05 ;
  { tags: #2024 }
begin
  WriteLn('''

We have no official presentation this month. Instead, we’ll just discuss whatever topics that arise, possibly touching on RTTI and attributes.

  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Source Control';
  MeetingMonth = 2024.04 ;
  { tags: #2024 }
begin
  WriteLn('''
We have no official presentation this month. Instead we’ll just discuss whatever topics that arise, like the recent release of Delphi 12.1, or why Lazarus produces much faster Linux code than Delphi, or where you were during the Eclipse on April 8? _UPDATE: The Main Topic turned out to be Source Control. A few notes were thrown together at the last minute and a good discussion ensued. Download: PowerPoint Slides (with links!
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'One Billion Row Challenge';
  MeetingMonth = 2024.03 ;
  { tags: #2024 }
begin
  WriteLn('''

An interesting challenge was presented on multiple Delphi forums recently that grabbed my interest: read in a billion rows of data, collate and sort them, and print the summaries using only pure Object Pascal. The challenge started in January by an engineer’s blog post and has been expanded to Java, Go, and even SQL! For Delphi and Free Pascal, there’s an open source project and there’s an active discussion on Discord.

  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Embedded Browser with Drag-and-Drop';
  MeetingMonth = 2024.02 ;
  { tags: #Homer Jones #2024 }
begin
  WriteLn('''
Homer will discuss two topics: 1) how he created a Chromium browser in Delphi 2007, and 2) how he implemented drag ’n’ drop between a VCL app and web page fields. Because Chromium relies on external DLLs, the steps involved in creating a browser in D2007 should apply to later Delphi versions. The Chromium support files and libraries must reside in very specific relative paths. That becomes a consideration when distributing the application via an install program.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'The New ODUG Website';
  MeetingMonth = 2024.01 ;
  { tags: #2024 }
begin
  WriteLn('''
A year ago, David mentioned a growing interest in building websites using Hugo and studying its underlying Go programming language; we took a look at both briefly. After building three small sites from scratch, he converted an existing site built with Drupal; this ODUG website was the result of that effort. A theme was found and modified to make the meeting notices look like Pascal procedures. It took a bunch of work and that experience will be shared, along with some of the details of how the site is put together, at the January meeting.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Delphi 12 Athens';
  MeetingMonth = 2023.11 ;
  { tags: #Delphi Release #2023 }
begin
  WriteLn('''
As you’ve probably heard, the latest and greatest development tool from Embarcadero has just been released, RAD Studio 12 Athens. Every time a new major version comes out, it is touted as a significant upgrade and boasts that NOW is the time to upgrade if you’ve been thinking about it. You’ll have to come to our November meeting and see for yourself why this can truly be said of this release.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Introduction to RAD Server';
  MeetingMonth = 2023.10 ;
  { tags: #RAD Server #2023 }
begin
  WriteLn('''
RAD Server is an Extendable REST Server in a box. You install it and immediately have a REST service with authentication and customizable API calls that can be written in Delphi. We’ll be using Delphi 11 Alexandria to showcase RAD Server 4.2, how to install it, how to write modules for it, and how to test and deploy it. As the title says, this is an introduction. We will follow this in another meeting with more advanced capabilities, such as downloading files, accessing databases, and posting updates.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'A New MessageBox';
  MeetingMonth = 2023.05 ;
  { tags: #Homer Jones #2023 }
begin
  WriteLn('''
Homer Jones created a new Message Dialog that solves problems with the standard Delphi 2007 ones–and even the latest ones. The two main problems are: 1) they can be hidden behind other windows, and 2) they don’t appear centered on the application’s main form, even when Position is set to poMainFormCenter (that seems to have been fixed in later Delphi versions, but the former is still an issue). When a dialog box is hidden, the app freezes; they are modal, but the user can’t respond because it’s hidden.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Writing a Welcome Page Plug-in';
  MeetingMonth = 2023.04 ;
  { tags: #IDE Plug-in #2023 }
begin
  WriteLn('''
The Delphi IDE’s Welcome Page was completely revamped with Delphi 11 and it now supports custom plug-ins. There haven’t been very many written and there’s even less documentation about how to do it but I dug into the samples and figured out a few things. At tonight’s meeting, we’ll look at the three sample Welcome Page plug-ins that come with Delphi, show how to make simple modifications to get our feet wet, then show how we can copy one to turn it into something useful.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'From Go to Firemonkey';
  MeetingMonth = 2023.03 ;
  { tags: #Go Programming Language #2023 }
begin
  WriteLn('''
This month we’ll take a small console program written in Go, show and compare its equivalent as a Delphi console program, then write a simple Firemonkey application in Delphi based on the functionality. The concepts presented will include a brief overview of the Hugo web-building framework, the Markdown files it utilizes, the TOML file format, how using GitHub Actions can launch the web-building process on a local Linux computer, and finally an introduction to Firemonkey resulting in a simple desktop app that can run on Mac or Windows to update a personal website.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'February Meeting - Miscellaneous';
  MeetingMonth = 2023.02 ;
  { tags: #2023 }
begin
  WriteLn('''
February’s meeting will be somewhat unstructured. Someone mentioned wanting to learn more about the Delphi IDE so, we’ll look at the different parts of that and discuss how this powerful environment can enhance your productivity. This year’s DelphiCon is in progress so we’ll review some of the topics being discussed. We’ll also take a look at a small program in Go written to help automate parts of a website being built.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'January - Go!';
  MeetingMonth = 2023.01 ;
  { tags: #Go Programming Language #2023 }
begin
  WriteLn('''
Tonight, we’ll explore the Go programming language a little, comparing its structure and object-oriented features with Delphi. PRESENTER David Cornelius is a full-time Delphi developer and has been programming since the 1980s.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'November - EDI';
  MeetingMonth = 2022.11 ;
  { tags: #Jonathan Eaton #2022 }
begin
  WriteLn('''
This month’s presentation is on EDI, a Business-to-Business (B2B) data transfer protocol. Just about any industry you can think of uses EDI in some form or other. Generally, EDI “documents” (AKA “messages” AKA “transaction sets”) are transmitted from one business to another. For example, a subset of EDI, called HL7, can be used to transfer a patient’s lab test results from a medical laboratory to a doctor or a clinic. But it’s also used to transmit data from a device to a service; for example, to transfer readings from medical equipment such as blood glucose monitors or even treadmills (in a “wellness center”) to a service that stores the results in a database for later processing.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;