RSS

博客

作为原生js的熟练者,如何快速掌握react, react 探索和实践
react-js, react-dom, jsx,
如何写好单元测试
一个方法: 成功的返回值; 失败的不同情况会出现的返回值.
Golang, 许久不用之后再次复习,简单用法,回顾
再次复习golang
OBS Studio 录屏幕软件小探, 剪映软件剪辑视频, 添加旁白语音
使用obs的一点常见问题探索, 剪辑软件的使用, 旁白的后续添加
最后查看工作流思考了蛮久,还是决定要自己做一个流程引擎画图和后台
流程图画图使用canvas, 而后台设计一下传递消息的任务序列
说一下感想吧,关于js的ajax queue

我在许多年前写了一个ajax queue, 但是最近想再写一次,结果因为看了promise的代码,这次的实现居然跑偏了, Js的ajax这是个异步操作,它是不会阻塞正常的代码的,但是如果换成while的形式,这就会阻塞代码的执行了,卡顿说不上,但是会阻塞,仔细想了下,得出的结论是, js在ajax的回调那里其实已经分割成了两个处理机,一个是本地浏览器的正常js代码,另外一个是服务端回调的js的调用者, 它们两方其实不是一个东西了,就是后台何时返回所有的ajax请求都是不知道哪个快哪个慢的,但是快的回来的会执行对应的回调, 所以浏览器js这里只能写一个ajax的调用,而不应该用循环会阻塞, 如果仅仅有调用ajax的代码,那么这段代码它就马上执行过去了不会阻塞,所以要写一个不阻塞代码执行的ajax queue, 检查队列的时候也不能用循环,而只是正常的一次检查,然后,检查下一个的时候应该在ajax的回调里面再去检查,这样两个就能接力起来,不会阻塞代码的执行,这里可以用自己调用自己,形式类似于:

func queue(req){

queue.q=[]

if(req){q.push(req)}

if(q.len>0){

req=q.shift();

ajax(req,function(){

req.callback(),

queue();//再次shift下一个,然后, 重新发送ajax,这种形式应该不会阻塞,不停调用queue方法会不停向q中添加请求,最后会一个一个按次执行

})

为jmvc创建一个ioc container
创建ioc.
寻到一个java的工作流引擎,flowable, 这个我还不太熟悉,不过可以快速看看,很快就能成功搭建

flowable似乎是一个知名的java开源工作流引擎,符合bpmn2的规范,可以支持用xml的方式来做,这里可以看一下已经有的别人的实现,作为参考. 主要在意的就是节点的事件,节点会触发特定事件,可以在事件里面添加一些业务逻辑.

关于工作流类型的理解:

比如说有一个叫 盖房子的流程,这时候有一个地方要盖一个房子,那就创建一个盖房子流程的实例, 开始后,到烧砖工, 烧砖工在前面做工作,做完了,砖烧失败了, 那他就完成他自己的任务失败了,然后这个房子盖不了了,他就告诉监工网关节点,没有砖了,监工就说直接结束;相反, 他砖烧好了,他就完成他自己的任务,把自己做完这个结果传给下一个监工,监工看结果,一看可以了,就告诉下一个盖房子的人,盖房子的开始干活, 然后盖房子,盖完到决策监工结束节点,房子就盖好了。

这里面似乎主要是bpmn的规范要实现xml反序列化转化为系统中的对象,然后进行bpmn流程的判断.

taskService.claim(task.getId(), "fozzie"); //分配一个任务给某个人

//可以通过assignee获取某个人所有的任务;

TaskService service = processEngine.getTaskService();

List task = service.createTaskQuery()

.processDefinitionKey("holidayRequest")

.taskAssignee("zhangsan")

.list();

//完成某个任务,传递参数到网关

HashMap<String, Object> map = new HashMap<>();

map.put("approved", false);

taskService.complete(t.getId(), map);

这里说一下工作流的设计, 看了这个,想看下自己设计个, 对工作流来讲,主要就是任务类型的设计,还有关系类型的指向, 所以一个关系流里面所有关联的entity的数量应该是分类的任务类型所有个数,还有关系类型所有个数,关系类型要有起始entity,还有结束entity,外加条件计算,满足什么条件会取到哪个任务entity作为结束, 这样就很简单了,一个task在结束之时会产生对应的参数,将参数传递给与这个task关联的关系entity, 这样可以计算到下一个task,依此类推,就可以所有的任务节点为都走一个遍.

同样在前端,画图的方法我也研究过,所以就是设计几种形状的节点,关系类型的的画线要用js的svg或者canvas都可以,每个entity对应一个范围,还有个层,就像ps一样,点击后看是哪个entity被点击到了. 然后根据鼠标的位置重新绘制所有的entity, 而且要保存一张xml,符合bpmn,

这样算,工作流这种类型实在是很辛苦麻烦的东西,而且用的不多,没有必要太过细去实现它, 不过这里理解一下原理,有需要了,可以再去想实现了, 可以实现一次,毕竟,读百遍不如做一遍吧.

使用框架的合理性
写框架是个体力活,不过用别的框架可以更得心应手
EZ Mask Image matting.使用EZMask进行ps 蒙板抠图,

My photoshop image matting work,

使用EZMask进行ps 蒙板抠图,

主要步骤:
1. ctrl+j 图片复制图层
2. 给图层添加蒙板layer mask
3. 点选回图层,先滤镜[ezmask应当将文件夹放到ps的plug-ins文件夹下面重启]
4. 左键大致勾要扣的部分,右键红色将不要的部分大致勾勒
5. 选处理,在倒数第二个按键左右
6. 选done,弹出进度条就结束生成扣出的图像

https://docs.caloch.cn/#Photoshop