博文

目前显示的是 四月, 2018的博文

公司自动部署系统建设

图片
       刚来到公司的时候,由于没有自动部署系统,导致每次提交完代码后都得手动scp到相应的服务器上,费时费力,还容易出错。于是,我便着手打造一套公司专用的内部部署系统。        最开始的构想是使用drone配合gogs来完成一套部署系统,方便且功能强大。但实践的时候却由于drone文档不全,服务器空间不足(无法安装docker),git服务器配置差等因素被迫中止。        最后在结合实际情况考虑之后,打算自建部署服务器,通过git hooks与node server构建一套部署系统。        结构图如下              首先是搭建node server,我采用express+ ts-express-decorators 的一个组合, ts-express-decorators 使用大量装饰器取代了wrapper,使代码趋于整洁美观并提高了维护性与复用率。后端框架完成之后,便要考虑如何执行shell,这里我使用了shelljs(主要是对于child-process的一层封装),借助其强大的api,可以方便的执行各种shell命令。        为了方便进程管理,我使用了pm2作为进程管理工具,并采用 pm2-web 进行相关进程的监控(不用进服务器查询进程信息了)。        对于要使用自动部署的项目,只需在项目更目录下加上deploy.json(记录了要部署的服务器等信息)与deploy.sh(自动部署时要执行的脚本,如项目构建等)即可完成相应自动部署任务。        遇到的问题:        1.scp与git的权限问题:通过ssh-keygen生成rsa证书可以解决        2.git脚本执行情况反馈:在执行git hooks的时候,发布代码的控制台会打印相关信息

tfjs源码笔记

tf.tensor :通过Tensor.make生成Tensor实例,默认根据util.inferShpe根据传入的values生成shape[]数组,也可自己传入shape[] tf.scalar :是对tf.tensor传入values为number或boolean的封装,有更好的语义 tf.tensor1d :是对tf.tensor传入values为一元数组的封装,有更好的语义 tf.tensor2d :同上依次类推 tf.tensor3d :同上依次类推 tf.tensor4d :同上依次类推 tf.buffer :创建一个TensorBuffer实例,TensorBuffer与Tensor类似,但值可变 tf.fill :通过util.sizeFromShape将shape中的各值相乘,算出值的数量,然后通过util.getTypedArrayFromDType更具dtype生成对应的TypedArray,最后调用相应的fill填充数据