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

procedure Meeting;
const
  MeetingTitle = 'Logging: Local and Remote';
  MeetingMonth = 2022.05 ;
  { tags: #2022 }
begin
  WriteLn('''
What kind of logging do you implement in your Delphi apps? Do you simply write out a few lines to a .LOG file? Or do you use a library that has detailed and highly structured logging for every action your users take? What about remote usage reporting? If you distribute a desktop app, how do you know how many people use it and how often? There’s no one true way for everyone or every application.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'April Meeting';
  MeetingMonth = 2022.04 ;
  { tags: #2022 }
begin
  WriteLn('''
We’re meeting in person this month–and at a new location! No specific topic planned but we will, as usual, catch up with what we’re doing with Delphi and technology in general, share pizza and laughs, and evaluate the new location.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Delphi 11.1 Alexandria';
  MeetingMonth = 2022.03 ;
  { tags: #2022 }
begin
  WriteLn('''
The latest version of our favorite development tool, Delphi 11.1 Alexandria has been announced! What are you looking forward to in this upgrade? We’ll chat about technology, avoid depressing world events topics, and think about where we want to meet next month.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Delphi Turns 27 - A Look Back';
  MeetingMonth = 2022.02 ;
  { tags: #2022 }
begin
  WriteLn('''
February 14 marked the 27th anniversary of the release of Delphi. The meeting this month will focus on the history of Delphi, both reviewing products released over the years and how Delphi has impacted your life, career, or business. Please join us online and share your experience.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Metadata Extraction';
  MeetingMonth = 2022.01 ;
  { tags: #Homer Jones #2022 }
begin
  WriteLn('''
Our main topic for the first meeting of 2022 will be shared by Homer Jones: If you’ve ever right clicked a file in Windows Explorer and selected Properties, you may have noticed the Detail tab. Those details list the file’s metadata. Depending on the type of file, that metadata can have interesting information about the data in the file (the definition of metadata). Homer will show how to extract that metadata without displaying the actual contents of the file.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'December Meeting';
  MeetingMonth = 2021.11 ;
  { tags: #2021 }
begin
  WriteLn('''
We’ll meet in December at the same time and at the same place, but we’ll discuss moving our meeting location elsewhere because the live music that starts in the main room at 7:00 makes it difficult to hear each other. Join us for the last ODUG meeting of the year!
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Book Release Event!';
  MeetingMonth = 2021.11 ;
  { tags: #2021 }
begin
  WriteLn('''
With the release of the book, Fearless Cross-Platform Development for Delphi occurring in late October, the author will be at the meeting in November to talk about the writing process, example projects, and what he learned. Join David Cornelius and one of his technical reviewers, Jonathan Eaton, as they discuss the book and celebrate it’s release. PRESENTER David Cornelius is a full-time Delphi developer and has been programming since the 1980s.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;