15年前大学毕业后,我开发了一款名为AnyMeal的GNU/Linux软件,用于管理大量食谱,该软件基于MealMaster文件格式,这是一种用于共享食谱的流行文件格式。
为DOS提供原始MealMaster软件的Episoft Systems的网站已不再在线。幸运的是,该网站的副本仍可在互联网档案馆中找到。
AnyMeal软件使用Recode库将食谱文本文件转换为UTF-8编码。然后,快速Flex解析器将MealMaster食谱转换为XML。使用XSLT脚本生成将食谱插入MySQL数据库的SQL命令。对于设置数据库和用户帐户,该软件具有逐步向导。KDE密码管理器用于存储用户凭据。
食谱搜索使用复杂的多任务搜索对话框,图形用户界面使用多个窗口显示食谱和搜索结果列表,实现了用于修改现有食谱或添加新食谱的食谱编辑器。
然而,生活发生了变化,最终我停止了对软件的维护。软件是用QT3开发的,当Qt4问世时,列表视图有了突破性的变化,软件不再能在新系统上运行。
现在很多年过去了,看起来仍然存在一个可以处理大量MealMaster食谱的快速食谱管理软件的空间,所以我决定利用我过去的经验,对旧的软件进行重写。
这次我使用了Qt5框架来实现图形用户界面。现在,Qt5不再使用旧的列表视图项目,而是使用项目模型和列表视图小工具来查看模型。此外,Qt5还提供了跨平台的打印支持,这是食谱管理软件的一个很好的功能。就像厨房里不再需要计算机一样;)。
我使用的是SQLite3嵌入式数据库,而不是MySQL,这大大简化了软件,因为SQLite3不需要设置用户帐户和数据库,用户也不需要在后台运行数据库服务器,而且没有用户凭据,也不再需要与KDE密码管理器交互。
对于食谱的内部表示,我决定使用一种更保守的方法。对于表示食谱,我使用了C++类而不是XML数据,因此不再需要依赖Xalan XSLT处理器和Xerces-C XML库。
我还更改了食谱的UTF-8转换和解析顺序,现在食谱首先使用Flex MealMaster解析器解析并存储为C++对象,然后使用Recode库将C++对象的字符串转换为UTF-8,这样Flex解析器就不再需要支持UTF-8,从而简化了实现。
搜索也得到了简化,可以按标题、类别或成分进行搜索,可以通过逐个使用多个搜索来缩小搜索结果的范围,也就是说,可以使用多个搜索来缩小搜索结果的范围,也就是说,可以使用多个搜索来缩小搜索结果的范围,即逐个搜索。不再需要实现构建复杂搜索查询的复杂搜索对话。
当时我使用CVS进行版本控制,这次版本控制是使用Git完成的。AnyMeal仍然托管在SourceForge上,但是源代码存储库现在位于Github、GitLab和BitBucket上(毕竟Git是一个分布式版本控制系统!),主项目页面位于Github(显示存储库的gh-Pages分支的内容)。
在这样简化软件架构之后,可以在不到100小时内实现软件。重写的大部分工作是实现一个更简单的Flex解析器和重新实现配方编辑器。与以前相比,我使用测试驱动开发(TDD)实现了应用程序的内部。我使用的是Google Test,这是Google的C++测试框架。而且,与以前不同的是,现在有了Travis CI,它为软件库提供免费的自动化测试。
最后,使用MSYS和MinGW为Microsoft Windows编写了该软件,并使用Nullsoft Scriptable Installation System(NSIS)创建了安装程序。
我正计划添加更多的小功能,但我认为该软件或多或少已经准备好用来做饭了。