Discussing, Learning, and Using Delphi and related technologies to create Great Applications!
procedure Meeting;
const
  MeetingTitle = 'Chocolatey for Delphi';
  MeetingMonth = 2018.06 ;
  { tags: #automation #2018 }
begin
  WriteLn('''
If you’ve ever used Linux, you may be familiar with software package managers such as RPM or APT to easily install and update software along with their dependencies. A few years ago, someone decided that Windows should be able to enjoy this same ease of maintaining software packages and started Chocolatey, a package manager for Windows using PowerShell scripts and the NuGet infrastructure. Typically, when installing software, you need to look for them on the web, select a mirror to download from, go to your downloads folder, launch the installer, acknowledge licenses, then repeating for each program.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Dependencies';
  MeetingMonth = 2018.05 ;
  { tags: #Ron Grove #2018 }
begin
  WriteLn('''
We’ve talked a lot about the SOLID principles of software development over the last couple of months. The last letter, D, stands for Dependency Inversion. We’ll discuss this with examples and talk about the Spring library and how its Dependency Injection plays into this–if you do it right! PRESENTER Ron Grove will again lead the discussion, based in large part on his deep knowledge of the subject having read the book the SOLID principles were based on before the acronym was coined.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Be a SOLID Programmer';
  MeetingMonth = 2018.04 ;
  { tags: #Ron Grove #2018 }
begin
  WriteLn('''
This is a continuation of the discussion on SOLID programming principles we started last month. We’ll finish up our coverage of Single Responsibility and Open/Closed principles, then continue on with aspects of the other three: Liskov Substitution - objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program, Interface Segregation - many client-specific interfaces are better than one general-purpose interface, and Dependency Inversion - one should depend upon abstractions, not concretions.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'S is for SOLID';
  MeetingMonth = 2018.03 ;
  { tags: #Ron Grove #2018 }
begin
  WriteLn('''
It’s time to get into some coding practices. This is the first in a series exploring the SOLID principles of software development. This month, we’ll concentrate on the Single Responsibility Principle. As time allows we’ll start looking at the “O” which stands for the Open/Closed principle. Many of us have probably used these principles even though we may not have had fancy terms like this in mind at the time. Hopefully we can help one another think about how we can make use of common sense principles like these in our own work.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Tech Talk';
  MeetingMonth = 2018.02 ;
  { tags: #2018 }
begin
  WriteLn('''
Due to the weather, we’ll postpone the start of our SOLID discussion until March. For those who would like to join tonight anyway, we’ll have a small gathering at the usual space and time and let the conversation lead us where it may!
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Delphi 10.2.2 and Group Planning';
  MeetingMonth = 2018.01 ;
  { tags: #2018 }
begin
  WriteLn('''
For the discussion tonight, we’ll briefly touch on the latest update to Delphi which was 10.2.2. Since it’s the first meeting of 2018 we will also focus on what we’re all doing with Delphi (if anything) and what kinds of discussions would be best to focus on this year. I don’t want to spend too much time talking about features that are hardly even marginally useful to any of us and focus on what is useful.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'XAF';
  MeetingMonth = 2017.10 ;
  { tags: #2017 }
begin
  WriteLn('''
There’s a pretty cool framework in .NET from DevExpress called XAF. We’ll start out with some tech talk and see if there’s anything Delphi related that we’d like to discuss. Then demonstrate some of the cool features XAF has to offer and why some of the things it’s trying to do may become the norm over time in software development.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;

procedure Meeting;
const
  MeetingTitle = 'Tech Talk';
  MeetingMonth = 2017.09 ;
  { tags: #2017 }
begin
  WriteLn('''
Tonight, we’ll just hang out and talk. If someone would like to demo something they’ve been working on lately that would be wonderful. If nothing else we can fire up Delphi and play with the new REST features they’ve been adding. It might be fun to have a small database and just explore questions we might have about this technology together.
  ''');
  MeetingDetails(MeetingTitle, MeetingMonth);
end;