Code quality Before creating the code, it is crucial to prioritize its . It should be the foremost consideration in the development process. To ensure , we can utilize automated tools that help with code analysis. However, it's important to note that automated tools may not cover all the necessary rules. As a result, manual code review becomes essential to enforce coding standards. Personally, I have dedicated significant time to code reviewing and checking for adherence to . Additionally, I have employed to create additional code checks. It is worth mentioning that not all rules can be checked automatically, requiring manual effort in certain cases. quality code quality code style Python Code documentation " " you might ask, " " My answer is a resounding " ". Now, hold on! Are we jumping straight into coding? Nope Before embarking on the coding phase, it is vital to consider . Since the employs two programming languages, it is imperative to establish clear documentation rules for both and . code documentation FVA Software C++ Python Consequently, I have familiarized myself with documenting code using markdown and have gained proficiency in generating documentation based on Doxygen markdown.It's quite remarkable how confident I am now in configuring . C++ Doxygen Doxygen Implementation Finally, we can proceed to the coding phase!For the development of , I have chosen the versatile library, which supports multiple operating systems such as , , and . Since the software requires a user interface ( ), I initially utilized , including components like and . FVA Software QT Windows macOS Linux Ubuntu UI QWidgets QWizard QWizardPage However, I soon realized that employing would offer a more streamlined approach for implementation. Therefore, my plan is to transition from to . QML UI QWidgets QML I was pleasantly surprised by the ease of utilizing for creating a multimedia content . The flexibility of allows me to work with multiple languages. To facilitate this, suggests using the following components: QT player QT UI QT ; QTranslator ; QtextCodec ; Qlocale ; QtextDecoder . QtextEncoder Additionally, I discovered that working with using is remarkably straightforward. However, I later made the decision to switch from to for data storage. SQLite QT SQLite CSV As my project involves working with two programming , I needed to establish a means of integrating code into the application. languages Python C++ Last but not least, I acquired knowledge on how to create a , adding another valuable capability to the project. riff parser History of internal metadata formats The history of formats in FVA Software reveals the evolution of how the software stored and managed metadata. Initially, the metadata was kept at the file system level inside the Photo Album. Each folder in the Photo Album had two files: and . internal metadata folderDescription.json description.csv The file stored information that was common to all files within a folder, such as , , , , and . folderDescription.json device ID tags people place event On the other hand, was used to store information about files under a folder that had different . It had columns for description.csv internal metadata Name Place People Device WhoTook Description Scaner However, this approach of storing metadata at the file system level had limitations in terms of flexibility and maintainability. Adding or modifying a column in or would require updating the entire photo album file system structure. folderDescription.json description.csv To address these limitations, the decision was made to move the and files to an database. The database schema was designed to store the same information as before. During the import of new files to the photo album, the created updates to the database. These updates were saved to be able to recreate the at any time. Although this approach improved flexibility and maintainability compared to the file system approach, merging folders in the photo album still caused significant changes in the updates. folderDescription.json description.csv SQLite FVA software SQL SQL SQL SQL Finally, it was decided to consolidate all the information into a single file for . This file does not keep track of which folder a file is stored in, allowing for easier merging of folders without issues. However, it results in some duplication of information since common information for all files in a folder is simply copied. CSV internal metadata CSV " " you might ask. The lesson learned is that before implementation, it is crucial to consider how easily you will maintain product changes. And what did you learn? The history of internal metadata formats in FVA Software demonstrates the importance of designing a system architecture that is flexible and maintainable from the start.