在Emacs和PostgreSQL上运行面包店

2021-03-22 02:16:54

就在一年前,我终于开了面包店,我一直在梦想多年。我生命中的一大大变化,从一整个时间坐在电脑前,到了大部分它做实际的东西。和让人开心的东西。这是一个巨大的变化,但我想不出一项工作变化,让我像这个一样快乐。

Pro的一个大变化之一是,突然,我必须努力解决我需要多少钱,以填补我需要的订单。面对它,这真的很简单,只是制定你需要多少面团,然后解决一定量的混合来制作那么多面团。简单。你可以用铅笔和纸。或者,在传统的面包师'时尚,通过用手指潦草地滚动在面粉的工作台上。

这就是我如何提前几周被调配。但我一直犯错误,这使得产品不一致(面包非常宽容,你必须很难做出不是面包的东西,而是一致的事情)。我需要自动化。

我一直在面包之一和#39; “为谋生”课程,作为课程材料的一部分,已经收到了一份电子表格的副本,这些电子表格可用于从订单列表中获取成分列表,以便与准确的成品和其他有用的位和鲍勃混合。它很棒,当然睁开眼睛对这部分工作的自动化的可能性。

电子表格不是我最喜欢的计算模型,所以也许这只是我对他们的经验,但是增加了一个新的食谱就像拉牙;许多乏味的复制,粘贴和重复公式。它似乎是错误的,特别是因为底层计算非常简单(ISH)。必须有更好的方法。

关键洞察力是面包店公式如此陈述,它可以表示为数据。这是Seefy Malt Loaves的公式:

当然,这不是全套公式,因为它没有告诉你如何制作“种子麦芽面团”,但这只是另一个配方,它由面粉,水,起动器,盐和多功能的“浸入者”组成,起动器和浸泡剂是其他配方的结果,其(最后)由具有一定量掌控的基本成分制成,以处理起动器严格用面粉,水和起动器进行起动器。

。我确实考虑在这一点上达到面向对象的锤子,但以为我可能能够在不离开SQL的情况下完成我需要的一切。将诸如数据库模式中的计算事项的计算形状移动到我的数据库模式相对简单,这是唯一真正的粘附点是公式的递归性,但事实证明,递归查询是现代SQL中的一件事,尽管是一个一点棘手,绝对是正确的第一次。

如果你很好奇,你们的几个似乎是,所以我写了另一个帖子,更详细地有一些细节和一些示例代码。

关于架构的细节,您可以在我的Github回购中找到它的面包店。

所以现在,烘焙前几天,我将我的Production_order表设置了烘焙的订单,并在Production_List视图上运行查询,以了解我需要的时间。一切都很棒。好吧,有点。我不得不在初始启动器混合中添加一点额外的数量,以允许粘在碗上并丢失到最后的面团的比特,并且一切都很好,直到我想连续两天烘烤(烘烤是一项两天的过程,通过在周三晚上将初学者混合,通过周四混合,发酵和塑造,在周五早上四个烘焙所产生的大面积)。但是,最重要的是,添加和调整公式更容易,并且局限性比电子表格的局限性更差。一切都好。

这是您需要保留记录的业务的性质。烤了多少钱?卖多少钱?我们清洁地板吗?有什么事故吗?什么样的?我们下次如何防止他们?列表是无穷无尽的。所有这些都需要记录,以便有法律和务实的原因。所以我开始了一天的书。这只是一个.org文件org-mode是一个惊人的emacs包,它是一种outliner / task manager /发布工具/电子表格/日记/识字编程环境。这是令人困惑的能力,可能是emacs文艺复兴的主要驾驶员,因为人们来到编辑的组织模式,并搬到其余的环境 - 因此邪恶模式的崛起,Emacs Vim仿真层。

。每天我都进入面包店,我跑了Org-Capture,我在白天进入的那一天的一个模板,我填写了这一天。

Org-Mode的一个特征是org-babel,一个识字的编程环境,让我写的东西:

然后,在代码块中的某个地方的光标中,点击C-C C-C,于是将该SQL运行该SQL对面包店数据库并填充桌子:

如果这是所有的组织模式来协助,它就足够了,但是我所做的查询比这更复杂,数据库的当前版本了解日期,可以应对重叠的烘焙,但所有这些让查询更加复杂。 ORG模式也有助于它,因为我可以在'Babel库'中提交代码片段,并仅从日本中引用它们。并且我可以在文档的层次结构中的任何点处设置任意变量。

所以我在我的Emacs Config中有一点代码,在那样调整日常的日期条目,如下所示:

(Defun PDC // In-Bakery-Daybook?()"我们在面包店日书吗?"(平等(缓冲区名称)" capture-loafery-daybook.org") )(defun pdc / set-waybook-rent-properties()"设置我们依赖于我们的锅炉化的日本查询&#34的属性;(保存 - 游览(而不是(看 - " * + [:数字:]] \\ {4 \\} \\( - [[[[[[[[[[[[:DIGIT:]] \\ {2 \\} \\)\\ {2 \\}"))(组织-UP-ELEMENT))(设(进入日期(第一个(S-SPLINT""(ORG-RENTS-GET(POINT)"项目"))))))))))))))))))))(组织进入(点)"标题args +"(格式":var work_date = \"'%s' \"& #34;入场日期)))(org-babel-execute-subtreree)))(defun pdc / rg-capture-pressize-daybook-ress()(当(pdc // in-bakery-waybook?) (PDC / SET-DOITBOOK-RESTER-PROPURATION)))(添加挂钩'组织 - 捕获前 - FINALIZE-HOOK#' PDC / ORG-CAPTURE- FINALIZE-DAYBOCK-REST之前)

它不会赢得任何代码美容竞赛,但它可以为日期的条目设置工作_date变量并将子树中的任何代码作为捕获过程的一部分进行。捕获模板具有像#+呼叫:MIXES()调用存储的代码片段的线条,该方法引用当前子树中的变量设置,因此为正确的日期进行查询。这意味着当我进入烤棚时,我必须要做的就是要做什么我应该做的事情是运行一个组织捕获并检查我的日常书中的结果。提供了,即,已将适当的行添加到数据库。

当然,该软件没有完成,没有任何软件。但它足以让它在过去几个月里没有挂钩的情况下管理我的混合物,告诉我该包怎样用铅笔和纸张用铅笔打包。它无处可行,靠近商业生产管理软件,但它适合我。我明白它做了什么以及为什么,它是如何做到的,它具有的局限性以及如何解决它们。当它变得足够烦人时,我可能会坐下来解决如何解决它,但是当我在正确的心态时,我会这样做。我目前的niggles列表看起来像这样:

该数据库已经知道如何基于原始成分成本等成本核算,但我可能能够使用它来保留我的书籍,使用Org-Ledger

在某种程度上,在我的混合器中将“硬起动器”混合比它用手混合在一起混合。这个断点来自面粉约3千克。现在,我通过查看我的初学者的混音来管理这一点,如果看起来很多,更改命令使用2级版本的公式并再次运行查询。我认为应该可以通过更复杂的查询自动化这一点,但我需要解决这个问题。

如果一批面团比我可以单独混合,事情会变得奇怪。现在有其他身体限制意味着我根本无法制作那么多面包,但一旦我得到了更多的Bannetons和Racks,这将成为一个更加紧迫的问题。

现在,我通过Postico管理订单与数据库交谈,这没关系,但在地方有点令人沮丧。在EMACS中的订单的自动完成环境将是一种用于管理事物的人。

计算机很棒。它们是多功能的工具,即使您不知道如何编程它们,因为几乎总是一个应用程序对于您想要的东西,或者您无法围绕其侵扰性努力工作。这对人们能够与他们的套件有关的事情是非常显着的。

但是......学会编程,并且整个其他可能性的vista打开给你。具有良好的可编程工具,您只能受到您的技能和理解的限制。您可以将您的软件容纳您的软件,而不是为您提供适应您的软件,并为您提供正确的功能权衡。有一个辉煌的商业循环软件循环软件软件,我使用这可能是巨大的辉煌,如果有一种从第一个录制的循环自动拾取速度的方式 - 它会释放我不得不唱歌点击,一般都是整体过程更容易。开发人员具有其他(可理解的)优先级,如将应用程序移植到Windows。他们这样做并没有错。 Windows版本有民间吵闹,如果开发人员没有从商业应用程序赚钱,那么开发将停止。我肯定没有抱怨,这个功能并不是如此急剧上,我准备花时间学习如何做出如何做实时音乐编程来实现它,但如果我想软件跳舞,那么这样做我自己是唯一的方法。

所以...选择让您编程的工具。我选择Emacs和PostgreSQL,您可能会选择Vim和SQLite或Atom和NoSQL数据库,或者您可能只在您的SmallTalk图像中居住。一旦您开始将计算环境视为真正的柔软和可延展性,您可以做令人惊叹的事情,由真正为您的计算机辅助。