Discussing, Learning, and Using Delphi and related technologies to create Great Applications!
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;

procedure Meeting;
const
  MeetingTitle = 'October Meeting';
  MeetingMonth = 2022.10 ;
  { tags: #2022 }
begin
  WriteLn('''
There is no particular topic for this month’s meeting but I’ll have my laptop with several versions of Delphi and we can discuss whatever comes up–whether it’s related to programming or not. In any case, join us for pizza!
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'September - Delphi Debates';
  MeetingMonth = 2022.09 ;
  { tags: #2022 }
begin
  WriteLn('''
People develop strong opinions about things they do or believe and sometimes have a difficult time seeing another point of view. This certainly exists for politics and religion but is also strong in the technology sector. Whether you use Mac or Windows, Android or iPhone, C++ or Delphi, it’s not hard to find heated discussions about what is the best or “right” choice. Embarcadero is hosting a series of online discussions to weigh in on some of the hot topics in the Delphi programming language.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Add Full Text Search to Your Delphi Web Apps';
  MeetingMonth = 2022.08 ;
  { tags: #Slides #2022 }
begin
  WriteLn('''
In August, we’ll be honored with a special guest, Ann Lynnworth, co-founder of HREF Tools who will talk to us about their full-text search component, Rubicon. We will meet online in August in order to host Ann who will be presenting to us remotely. Here’s an introduction to the topic: “Rubicon allows Delphi and C++Builder developers to add full-text search capabilities to their database applications, retaining control of data and indexing and providing both simple wild-card queries and complex search expressions.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Skia4Delphi';
  MeetingMonth = 2022.06 ;
  { tags: #2022 }
begin
  WriteLn('''
Embarcadero has a contest going on right now for creating the most beautiful GUI with Skia for Delphi. Skia is a 2D graphics engine, sponsored by Google, that provides a common API across various hardware and software platforms, including all the major web browsers. A couple of smart guys in Brazil have created an open source library called, Skia4Delphi to make this API work in both VCL and Firemonkey applications. We’ll run their sample programs and perhaps even show some of our own creations at the June meeting.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;