首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

老板要我开发一个简单的工作流引擎

(虽然说是有类似消息审核的场景去上工作流,但就为了这么个简单的功能,上一套类flowable的框架好像有些大材小用) (虽然说我可以将原有的接入层工作链改造成flowable的流程编排,又或是将消费侧的逻辑改造成编排的模式...第6关 老板又来了:审批人多加两种类型,比如可以从表单中选择下一个审批人,还有根据发起人不同选择不同的审批人。 经过一番考虑,我把简单节点分成了3类: 第一种:审批人是写死的。...第8关 老板又来了:先实现驳回到上一个审批人吧。 驳回到上一个审批人其实是个很复杂的逻辑,因为工作流中的节点可以无限嵌套,所以如何确定上一个状态有哪些审批人并不简单。...代理操作可以无限嵌套,即代理人也可以找人代理。 第12关 老板又来了:能不能再加一个取消代理的功能? 。。。...第14关 老板又来了:现在有的工作流已经非常复杂了,审批起来耗时较长,能不能对每个进行中的工作流计算一个指标:直观的显示目前审批进行的百分比。 我:收到。

1.3K30

老板要我开发一个简单的工作流引擎

我:其实已经支持了~ 能无限扩展的树形结构可以支持任意复杂流程。 老板:小伙子有点东西! 第5关 老板又来了:要支持条件节点。 工作流附带一个表单,要根据表单的内容确定下一步进入哪个分支。...第6关 老板又来了:审批人多加两种类型,比如可以从表单中选择下一个审批人,还有根据发起人不同选择不同的审批人。经过一番考虑,我把简单节点分成了3类: 第一种:审批人是写死的。...第8关 老板又来了:先实现驳回到上一个审批人吧。 驳回到上一个审批人其实是个很复杂的逻辑,因为工作流中的节点可以无限嵌套,所以如何确定上一个状态有哪些审批人并不简单。...代理操作可以无限嵌套,即代理人也可以找人代理。 第12关 老板又来了:能不能再加一个取消代理的功能?。。。...第14关 老板又来了:现在有的工作流已经非常复杂了,审批起来耗时较长,能不能对每个进行中的工作流计算一个指标:直观的显示目前审批进行的百分比。我:收到。

1.4K42
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LIME:我可以解释任何一个分类模型的预测结果

    LIME:我可以解释任何一个分类模型的预测结果 ? image-20210630115214018 论文标题:“Why Should I Trust You?”...LIME流程图 重点注意: 这里g和f使用的训练数据是不同的,但我们希望他们的输出结果是逼近的。 我们是针对一个样本进行解释,即给定一个样本,解释为什么模型这样预测。 先“转换”,再“转换回来”。...g的各个w可以可视化出来,看出不同特征的贡献程度。比如下面的例子: ? 通过对两个模型,在同一个样本上的解释,我们可以发现第一个模型解释性更好,因为找到了正确的特征。...而第二个模型找到的特征是错误的,这是由于训练集中的偏差导致的。 对于图像分类问题,也是类似的: ? 上图的结果,是通过对g的正权重对应的区域进行高亮。从而可以解释为什么模型预测出了相应的类别。...因此,作者还思考了,如何用最高的效率,检查最少的样本,就能够最全面地检查模型的可靠性。 具体的方法,我暂时不关心,所以就不讲了。下图给出了一个大致的思路: ?

    1.7K30

    你所需要知道的关于 Node.js Streams 的一切

    你可以将变形金刚流看成是一个函数,其中输入是可写流,而输出是一个可读流。 所有的流都是继承自 EventEmitter。也就是说,它们触发的事件可以用于读写数据。...数据源必须是一个可读流,而数据目标得是一个可写流。当然了,双工流和变形金刚流既可以是数据源也可以是数据目标。...这就是为什么当我们的可读流处于流动模式的时候,我们需要一个事件处理函数去监听这个事件。实际上,添加一个数据事件监听函数,就会自动将流动模式切换成暂停模式,删除监听则会切换回来。...Someone wants to read it. } }); 当一个可读流的 read 方法被调用的时候,我们应该可以把数据推入到一个队列中。...这段代码等效于我们再先前写的更简单的那段,只不过这一次我们是按需推入数据。事实上我们就应该按需推入。 实现双工 / 变形金刚流 在双工流中,我们既可以实现可读流,也可以实现可写流。

    77420

    React Hooks 可以为我们带来什么,及为什么我觉得React才是前端的未来

    FaCC(Function as Child Component) 原理和HOC差不多,只是运用到了一个叫做 children的react props 可以讲代码简化成 //ComponentA export...通过上述的行为,我们已经发现了,它们可以共用很多部分的代码。...如果再深入思考一下,就可以想到,在复杂的业务逻辑里面,如果发送同一个API请求的haul,我们不应该在每一个独立component里面发送一个请求。...为什么我觉得React才是前端的未来 正如我在前文描述的那样,不论是HOC还是FACC/Render Props,都有自己的技术上手难度以及理解困难的地方。...我觉得,技术简洁好实现,对他们来说应该是一个吸引点。 很多库为了实现一些简洁的功能,都会出现这样或那样的“奇怪”写法,这点认同。但是,有时候是需要一些取舍。

    65840

    我为什么要创建一个不能被实例化的类

    但如果有一天,你发现我写了这样一个类: class People: def say(self): print(f'我叫做:{self.name}') def __new...一个不能被初始化的类,有什么用? 这就要引入我们今天讨论的一种设计模式——混入(Mixins)。 Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。...每个 Mixins 类只有一个或者少数几个方法。不同的 Mixin 的方法互不重叠。...但是 在写 Mixins 类的时候,我们不会写__init__方法,也不会写类属性。并且 Mixin 类中的方法看起来更像是工具方法。 我们可以写很多个 Mixin 类,然后用一个子类去继承他们。...由于这些 Mixin 类提供的各个工具方法互不相关,所以不存在菱形继承的问题。但是在子类中却可以分别调用这些工具方法,从而扩展子类的功能。

    3.4K10

    我做了一个系统,可以给所有飞过我家上空的飞机拍照

    比如,你能想象,一个飞机迷,为了拍下每架从他家上空飞过的飞机,亲手做了一个小系统skybot,追踪拍摄到离地3万多英尺的航空飞机。...如何做一个skybot系统 不知道有多少小伙伴已经开始动心跃跃欲试了。 别急,我们先来看看做一个skybot需要哪些东西:一个树莓派,一个RTL-SDR和Axis PTZ安全摄像头。...Axis的摄像机提供了一个很棒的API,它可以与他们家的PTZ摄像机一起使用,在这里使用的是m5525,因为摄像机可以360度旋转,完美覆盖天空上方的视野。...该信号为1090MHz,任何低成本SDR都可以轻松接收。同时从ADS-B传输中,我们还可以得到飞机的位置和高度,但如果你想知道飞机和你的相对位置,就还需要一点数学知识。...PiAware实际上只是一个dump1090的包装。Dump1090是一个小程序,可以使用RTL-SDR接收ADS-B传输。

    36620

    为什么一个参与其中的用户社区可以开发出更好的软件

    最终,OpenStack用户和开发人员之间的对话导致了变化。文档已从源分支移出,用户现在可以为他们正在使用的任何版本构建文档——或多或少是无限期的。问题解决了。...(我特别要感谢我的同事克里斯·摩根(Chris Morgan),他对这项工作非常投入,并首先为OpenStack超级用户博客详细地写了一篇文章。)...这样做有一个很好的理由:一个相当大的企业平均需要大约6个月的时间来限定、测试和部署OpenStack的新版本。而且,从我的经验来看,这通常适用于大多数开源基础设施项目。...因此,我认为开发和用户社区之间的健康交互应该是采用任何开源基础设施的首要考虑因素。构建软件的开发人员是否注意到部署软件并使其对企业有用的人员的需求和挫折? 这应该如何发生,有一个可靠的模型。...对这些项目的快速更新给部署和使用它们的人带来了一些意想不到的问题。我可以举出许多例子,其中开源项目更新得如此频繁,以至于新版本常常会无意中破坏向后兼容性。

    43700

    巴掌大的空间可以组成一个Jetson集群?让我来揭秘(2)

    今天继续带着大家揭秘Seeed公司这台可以插入4个Jetson NANO/NX模组的系统。 大家应该还记得这台系统的长相吧,巴掌大的空间可以组成一个Jetson集群?让我来揭秘(1) ?...今天的任务就是要试着把这台系统装起来,跑起来! ? 电源 首先第一个要解决电源供电的问题。要能带动4个模组,还是通过Type-C供电,到底是需要什么样子的电源呢?...目前测试是不管插入1个,2个,还是3个都可以工作,任何组合都可以。 注意这四个节点,分1个主节点和3个从节点。 系统USB口对应的节点如图: ? ?...从这个观察孔可以看到4个节点的指示灯也亮起来了。 ? 插入网线获取P 这个步骤是获得每个节点的网络IP,以便于可以SSH访问到每个节点,进行登陆与管理。...接着需要生成一个SSHkey 先要在主节点上生成一个Key ssh-keygen 然后用下面这个指令复制到各个节点(包括主节点) ssh-copy-id 最后在主节点上生成一个集群文件

    1.4K20

    我是如何编写了一个可以自动编辑新年祝福语的小程序

    实现说明: 步骤一:构建一个人工智能模型才能让机器学会像人一样说话,在这里,使用python语言编写脚本,基于堆叠Transformer(神经网络中一个模块,使用自注意力机制用来实现句子中词和词的关联性...)的解码器模块构建的GPT-2模型,采用了BERT的分词器(划分句子里面的词语)构建了一个大型的深度学习模型。...步骤四: 处理好后,可以看到黑框框打印出来的例子,但这个例子还不够用户友好,而且只有一个人能用,如何才能让大家也能在自己的电脑上用呢,需要把它变成一个所有人都能访问的东西。...把我们编写的人工智能程序变成了一个大家都可以访问的web服务,就是从世界各地请求它,要求他输出东西,他都能返回一个结果了。...步骤七:然后我们要发布我们的人机交互界面,在腾讯云上进行了又一番配置,我们的网站终于上线了!所有人都可以轻松愉快地访问并可以在微信进行分享了。

    1.4K10

    我写了一个开源工具, 让Github的README.md可以正常显示超大图片

    , 我们可以往README.md中插入一些图片 但Github会对README.md中的站外图片会进行地址转换,如果图片尺寸很小,这种转换完全没有问题, 但如果图片尺寸稍大, github的只能转换出半张图...将图片上传的到github即可! 我们可以将README.md中的图片存储到仓库根目录的README文件夹, 然后用图片在github的url, 替换原有的图片链接....我分析了一下github 仓库中包含图片的url的规则 https://raw.githubusercontent.com/ + 用户名 + / + 仓库名 + /master/ + 相对仓库根目录的文件夹路径...+ / + 图片名; 如果图片名称为1610212776529GNazs3pP.gif, 图片存储在 zhaoolee的 EasyTypora 仓库的 README文件夹下,那它的最终url为 https...raw.githubusercontent.com/zhaoolee/EasyTypora/master/README/1610212776529GNazs3pP.gif 但是手工替换所有的图片太累了, 于是我写了一个自动化的程序

    1.3K20

    为什么ASP.NET Core的路由处理器可以使用一个任意类型的Delegate

    二、参数绑定 既然可以将一个任意类型的委托终结点的处理器,意味着路由系统在执行委托的时候能够自行绑定其输入参数。这里采用的参数绑定策略与ASP.NET MVC的“模型绑定”如出一辙。...类型定义了一个静态的TryParse方法使我们可以将一个以“(x,y)”形式定义的表达式转换成Point对象。...图1 TryParse方法针对参数绑定的影响 如果某种类型的参数具有特殊的绑定方式,我们还可以将具体的绑定实现在一个按照约定定义的BindAsync方法中。...按照约定,这个BindAsync应该定义成返回类型为ValueTask的静态方法,它可以拥有一个类型为HttpContext的参数,也可以额外提供一个ParameterInfo类型的参数,这两个参数分别与当前...前面演示实例中为Point类型定义了一个TryParse方法可以替换成如下这个 BingAsync方法。

    15610

    实战中遇到的C++流文件重置的一个大陷阱 为什么ifstream的seekg函数无效

    大家好,又见面了,我是你们的朋友全栈君。 分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。...你可以找到更多关于的信息 LaTeX 数学表达式here....我很好,谢谢! 我很好,谢谢!...导出与导入 导出 如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。...导入 如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入, 继续你的创作。

    48130

    关于Node.js streams你需要知道的一切

    Readable 可读流是可以从中消耗数据的源的抽象,一个例子就是fs.createReadStream方法 Writable 可写流是可以写入数据的目标的抽象,一个例子就是fs.createWriteStream...一个例子就是zlib.createGzip使用gzip压缩数据。你可以把Transform streams当成是一个传入可读流,返回一个可写流的函数。...当一个可读流是暂停模式的时候,我们可以使用read方法从流中读取。但是当一个流是流动模式的时候,数据是持续的流动,我们需要使用事件去监听数据的变化。...在流动模式中,如果可读流没有监听者,可读流的数据会丢失。这就是为什么当可读流逝流动模式的时候,我们必须使用data事件去监听数据的变化。...我们需要在某个时刻终止它,这就是为什么我们设置了一个终止条件推入了null。 我们应该始终按需推送数据。

    1.1K30

    为什么我一行代码就可以完成3个R包的RNA-seq差异分析呢

    首先我一直使用airway数据集做测试 airway数据集这里我就不多说了,搜索生信技能树早期教程可以看到很多介绍,使用下面代码就可以简单探索。...而且为了显示这个规律,我还做了一个统计学技巧展示,当然了,很多人非常的不用心,所以把视频听10遍也看不懂,get不到我的点,需要批评! ?...,为什么这么神奇呢?...下面的图表是如何自动出来的呢? ? 因为这个 run_DEG_RNAseq 函数的代码非常长,这里我就不贴在公众号了哈,大家可以在我的GitHub的GEO项目找到它!...当然是啊,都会写代码了,还有什么是不能为所欲为的呢? 同样的,代码也是在GitHub,需要你仔细理解,不过我有一个小小的要求,请不要把我的代码雪藏,或者刻意隐瞒。

    1.7K62

    为什么我打开一些网站会提示:将此站点作为应用安装,我的网站要怎么样才可以和他一样

    要使您的网站在用户访问时出现“将此站点作为应用安装”的提示,您需要为网站添加一个名为“manifest.json”的文件。这个文件包含了网站的基本信息,如名称、图标等。...以下是一个简单的manifest.json文件示例: { "name": "您的网站名字", "short_name": "简短名字", "description": "网站描述", "...如果提示没有出现,可以尝试以下方法进行排查: 确保manifest.json文件正确放置在网站根目录中。 确保HTML文件的标签内正确引用了manifest.json文件。 清除浏览器缓存并刷新网页。...有时浏览器会缓存旧的网页内容,导致更新不及时。 使用浏览器的开发者工具检查是否有错误。在Chrome浏览器中,可以按F12打开开发者工具,然后点击“应用”选项卡,查看“清单”部分是否有错误提示。...如果问题仍然存在,请提供更多关于您的网站的详细信息,例如使用的框架、浏览器类型等。这将有助于我为您提供更具体的解决方案。

    69050

    我掌握的新兴技术:用 k8s+Ingress+Traefik 搭建一个外网可以访问的 Web 服务

    小伙伴们好呀,这篇文章记录了本次的小实验:用 k8s+Ingress+Traefik 搭建一个外网可以访问的 Web 服务。.../etc/hosts 文件,这时候便可以发现 ingress 的另一个好处了。...暴露到公网上呢其实,通过上面的 kubectl proxy ,我们可以有这么一个思路,监听公网某个端口,将它转发到 k8s 的某个service。...bug 折磨我的过程一开始搭建成功后,出现了一个很神奇的问题。就是上面配置文件中 service 的 url。...为啥就记录这些 200 的,404 你就不记录了!!(内心在咆哮!)无奈之下,我把 url 换成 ip 的那种,再多次尝试下,我发现了一个疑点!可以看到这里 404 的 nginx 是有版本号的!

    90430

    2024年只要 HTML 和 CSS 就可以实现一个自适应的瀑布流页面了?

    :瀑布流布局的子项可以具有不同的高度,与标准网格相比,瀑布流布局看起来更自然。...因此在以前这也是面试中常考的手写题之一。但是现在 2024 年了,我们完全可以使用纯 CSS 无任何其他依赖,实现一个高效的瀑布流布局。 接下来让我开始从 0 到 1 实现这个瀑布流案例吧1....当gap属性存在两个值时,第一个值表示行之间的间距(即 row-gap)。第二个值表示列之间的间距(即 column-gap)。...我们可以总结实现一个瀑布流的CSS关键是:grid-template-columns 确定列的宽度和数量,根据容器宽度自动填充更多列。...兼容性一提到 css 我相信好多小伙伴都担心兼容性的问题,grid 以前的兼容性却是有点不行,但是随着现在浏览器的支持程度的提升,现在的 grid 属性完全可以应用在生产了。

    64020

    一篇文章弄明白Node.js与二进制数据流

    例如,我要创建一个内容为字符串 "20" 的 Buffer,而错误的传入了数字 20,结果创建了一个长度为 20 的Buffer 实例。 ?...通过上图的结果可以看出,通过 Stream 拷贝时,只占用了我电脑 0.6% 的内存,而使用 Buffer 时,占用了 15.3% 的内存。...也是可读写的流); 所有的流都可以通过 .pipe 也就是管道(类似于 linux 中的 |)来进行数据的消费。...另外,也可以通过事件来监听数据的流动。不管是文件的读写,还是 http 的请求、响应都会在内部自动创建 Stream,读取文件时,会创建一个可读流,输出文件时,会创建可写流。...) 双工流同时实现了 Readable 和 Writable,具体用法可以参照可读流和可写流,这里就不占用文章篇幅了。

    3.4K30

    Node.js 流编程

    类的对象,本身也都是一个 EventEmmiter 实例,所有流对象实际上可以触发许多事件,比如:Readable 流在读取完毕时会触发 end 事件;Writable 流在写入完毕后会触发 finish...JavaScript 值),因此可以像函数式编程那样,把各种处理环节分别表示成相应的流对象,并把这些对象组合起来(比如 Rxjs 这个库);Readable 流(可读流)要通过 Readable 流来读取数据...size 数字类型的参数,它是一个建议参数,意思是说,你最好尊重这个参数,只推入调用方所请求的这么多字节(即 highWaterMark 配置项),当然这只是一个建议,不是强迫你必须这么做。...,它的默认值是 16KB;简化版定制方案如果定制的流对象比较简单,可以不用专门编写一个类,而是采用简化版的写法来制作 Readable 流。...send.'));});server.listen(8082, () => { console.log('listening on http://localhost:8082');});以上就是可读流和可写流的全部内容了

    18610
    领券