I completed the console prototype for the SongFinder during the previous hour.
Total time spent: 3.5 hours (including the 2.5 hours here).
Now, I have a working console application where, given a song name, such as "張清芳 - 加州陽光", "Sarah Angel", the application connects to the Internet, finds all songs with the given title, and downloads the first song (as a matter of convenience).
The next thing to do would be to work on the GUI using Unicode capable components, or Delphi 2009, and then let the user select the correct song from the list of candidates and download it.
Current issues are: If a song is not in English, the downloaded song is saved into an improper name. This should be easily corrected once I override the constructor of TFileStream to handle proper file names in Unicode.
UPDATE 22:47 hrs - It took another hour, and now song names can be saved in Unicode.
In 2017, with the release of Delphi 10.2 Tokyo, Embarcadero introduced a specialized implementation of the Observer pattern into the System.Classes unit. While it has been in the wild for 9 years, it remains a "hidden" architecture for many, primarily because it serves as the invisible engine behind LiveBindings. Other than live bindings, you can also use the Observer pattern as a way to update component settings to the Windows registry, an .ini file, or persist it elsewhere.
System.Classes