如何修理不平衡的平衡車
女儿的小伙伴有一个平衡车,她很快就学会了怎么玩,也想拥有一个,我看了看,没舍得买个新的,果断下手一个100元的故障机,就当自己练手,修好了就赚了。
结果买的时候也没通电,拿回来开机根本站不住,比视频里跑的快多了,一直滴滴响。
于是拆机检查,发现螺丝不全,电池固定扣已经损坏,壳里面有沙子,是否进水不好说,至少是打开修过。心一下子就凉了。
接下来用万用表反复测试,观察板子上的电压,逐步搞清楚哪个板子管姿态,哪个板子是主控,按照pcb上的一些字样查到是A8这样一个比较典型的早期型号。
买一套新的主板需要两百多,老婆不同意,三百块可以买个新的了。
于是抱定决心一定要修好,然后开始继续研究。
通过观察姿态板不同角度下的反应发现有一个角度似乎可以让平衡车稳定下来,但又很难保持,初步怀疑是陀螺仪坏了,这东西在玩无人机的时候接触过,要是坏了肯定炸鸡。但如何确认是陀螺仪坏了挺麻烦,光看电压看不出来。
万用表不够用就需要示波器了,那个玩意不便宜,接下来两天就研究示波器,选型,看教程,然后发现,如果是数字信号还要用逻辑分析仪,那玩意也不便宜。两个都买个要一两千,还是基础版。
没办法,回头补基础电路知识,看看能否在其他方面找找线索。然后就看了好几天电感和电容的东西,顺便说台湾的视频讲得比较好。
其实买平衡车的时候就抱着一个念头,重置一下平衡就好了,但是拿到以后试了一下重置并不成功。现在看了一圈下来,还是觉得基本可以排除物理故障,正好收到阿尔郎官网一个重置办法,按开关20秒。然后,就修好了。
还有一种方法,如果带遥控的话,按一个组合键就行了。我买的这个不带遥控板。
ubuntu+ xfce4搭建vps运维主机
某种情况下,我们需要一个固定IP用来做平台运营。
为了降低投入,选择ubuntu+xfce4(2U2G)的方案。
ubuntu选择了最新的18版本,其实随便哪个都行。
桌面选择xfce4据说是性能较好的,也不需要运行什么复杂的应用,主要是浏览器操作。
下面说一下主要步骤:
(1)初始化一个ubuntu18的镜像,一般都是server版,可以选择密钥登录
(2)用密钥登录到服务器,命令一般是:ssh -i miyao.pem root@ip
(3)先更新一下系统apt update以及apt upgrade
(4)安装桌面:apt install xfce4
(5)安装远程:apt install vnc4server
(6)运行远程服务:vncserver,会让你设置一个密码,后面会用到这个密码连远程登录
(6)修改~/.vnc/xstartup中的内容为:
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
(7)重启vncserver
修改配置文件后,运行如下命令结束掉之前产生的窗口:1
vncserver -kill :1
(8)重新启动:vncserver
(9)设置vps的远程端口到安全组,vnc默认端口是5900,启动了第一个桌面就是5901,所以至少把5901开放出来
(10)在本地电脑用vnc软件链接:IP:5901,输入上面设置的密码即可
(11)如果需要修改分辨率vi /etc/sysconfig/vncservers
找到这样的内容:”-geometry 800×600″,修改里面的数字即可,比如”1440×900″,生效需要重启vncserver
(12)安装中文支持
apt-get install language-pack-zh-han*
apt install $(check-language-support)
apt install fcitx-googlepinyin
(13)安装浏览器:apt install firefox
jenkins2.220下的dingtalk2.0.0
这一版dingtalk插件发生了重大升级,以至于升级之后我一直以为不兼容,无法工作了,考虑降级测试,后来一直点到dingtalk的源代码地址,才发现是配置确实变了。怎么就不能在里面提示一下呢?
dingtalk插件的地址:https://plugins.jenkins.io/dingding-notifications/
github的地址:https://github.com/jenkinsci/dingding-notifications-plugin
注意源代码那里的使用说明:
1.在 系统管理 > 系统设置 > 钉钉配置 中添加机器人 全局配置 -> 测试
经测试,钉钉机器人的安全策略配置的选项属于与 关系,即如果勾选了多个策略,则需要同时满足。 所以,插件的配置最好与钉钉机器人上保持一致。
2.在项目配置页面中勾选机器人 项目配置 测试

其中需要设置name,在具体的job任务中可以看见这个名字,就可以勾选了。
id空着,保存的时候由插件自己生成。
webhook就是钉钉中机器人的地址。
下面就是安全设置,这个不清楚为什么还有需要,暂时按照钉钉里机器人的配置一样填的。
然后点test成功,钉钉群里收到消息。
用jenkins获取git change log推送给钉钉机器人
背景:为了将代码提交的记录推送到钉钉群,我们可以使用钉钉自定义机器人这个功能,关于钉钉机器人这里不解释,请查阅官方文档。本来用aliyun code管理代码时可以使用webhook快捷设置钉钉机器人,但迁移到百度效率云的icode之后,暂时失去了webhook这个功能。
以下介绍解决办法:(以下内容来自https://twiceyuan.com/2017/02/21/jenkins-changelog/)
Jenkins 每次构建都会根据 git 的提交记录生成一个 web 页面来显示自上次构建之后的提交记录列表。在配置 CI 工作流时,很多情况需要获取这个提交记录的 String 值,但是 Jenkins 并没有提供这个功能。
Jenkins 官方反馈中有人也提出了这一需求:https://issues.jenkins-ci.org/browse/JENKINS-12032 。下面有人给出了一个插件来解决,插件地址:https://github.com/daniel-beck/changelog-environment-plugin ,不过作者没有编译上传到 jenkins 的插件中心,也没有文档说明怎么使用,这里简单介绍一下。
首先项目拉到本地,在项目根目录执行 mvn verify
就可以编译生成我们需要的 hpi 插件文件了(编译需要很多依赖,第一次可能会比较漫长)。之后在 Jenkins 中管理插件的高级(Advanced)中,选择上传 hpi 文件,就可以安装成功了。你也可以直接下载我编译好的
安装成功以后,在项目配置的 Build Environment 环节,会多出一个选项:Add Changelog Information to Environment。下面有三个编辑框,分别是:Entry Format、File Item Format 和 Date Format。第一个就是填写提交日志输出格式的地方,采用的是 Java String.format 占位符的形式。其中可以使用四个参数,分别是:
- 提交的作者
- 提交的 ID
- 提交信息
- 提交时间(通过 Date Format 控制格式)
例如,我在 Entry Format 输入 %3$s (at %4$s via %1$s)\n,然后有一条在 2017-02-10 的提交记录,提交信息为「fix bug」,提交者为 twiceYuan,那么输出到环境变量的字符串就是 “fix bug (at 2017-02-10 via twiceYuan)\n” (后面的 \n 是为了多层转义,视使用情况请自行调整),同样时间格式编辑框填写的是:yyyy-MM-dd。
通过设置之后,在构建时就可以通过 shell 中来获得 SCM_CHANGELOG 变量来取到更新日志了。比如自动上传更新信息到内测平台。
(内容引用完毕)

shell中的命令如下:
curl ‘https://oapi.dingtalk.com/robot/send?access_token=87980355c9069b2d0eba095480dcead5’ \
-H ‘Content-Type: application/json’ \
-d “{‘msgtype’: ‘text’, ‘text’: {‘content’: \”${SCM_CHANGELOG}\”}}”
请留意以上命令中的引号可能被我的博客编辑器给换掉,请对照图片检查。
知识的流量
知识的密度
知识的生命周期
倡议发起数字出版网络安全应急论坛
随着数字出版平台的广泛上线,网络安全问题也变得越来越突出,单靠某一个单位的安全防护是比较薄弱的,有必要组建一个相对广泛的合作组织,应对在数字出版服务过程中遇到的安全问题。
目前为个人发起,可加钉钉群:

微版云是如何用vue-electron构建mac客户端的
如何初始化项目暂且不说,请看vue-electron的官方文档。
先给大家看一下package.json的部分配置:
“main”: “dist/electron/electron.js”,
“build”: {
“appId”: “ink.weiban.portal”,
“productName”: “WeiBan”,
“copyright”: “Copyright © 2019 北京商连信息科技有限公司”,
“directories”: {
“output”: “./outapp”,
“app”: “./dist”
},
“win”: {
“target”: [
“nsis”
],
“icon”: “./static/ico/favicon256.ico”,
“artifactName”: “${productName}-Setup.${ext}”,
“publisherName”: “WeiBan”,
“signingHashAlgorithms”: [
“sha256”
],
“signDlls”: true,
“rfc3161TimeStampServer”: “http://timestamp.digicert.com”,
“certificateFile”: “./static/codeSign/windows/shanglian.pfx”,
“certificatePassword”: “shanglian”
},
“linux”: {
“target”: [
“AppImage”
],
“artifactName”: “${productName}.${ext}”
},
“mac”: {
“target”: [
“dmg”
],
“icon”: “./static/ico/favicon.icns”,
“artifactName”: “${productName}.${ext}”
},
“nsis”: {
“createDesktopShortcut”: “always”
},
“publish”: {
“provider”: “s3”,
“bucket”: “electron-app”,
“endpoint”: “https://electron-app.s3.cn-north-1.amazonaws.com.cn”
}
},
“scripts”: {
“dev”: “webpack-dev-server –inline –progress –config build/webpack.dev.conf.js”,
“start”: “npm run dev”,
“unit”: “jest –config test/unit/jest.conf.js –coverage”,
“e2e”: “node test/e2e/runner.js”,
“test”: “npm run unit && npm run e2e”,
“lint”: “eslint –ext .js,.vue src test/unit test/e2e/specs”,
“build”: “node build/build.js”,
“build-electron-dev”: “node build/build-electron-dev.js”,
“build-electron-prod”: “node build/build-electron-prod.js”,
“dir”: “electron-builder –dir”,
“win32”: “electron-builder –win –ia32”,
“win64”: “electron-builder –win –x64”,
“mac”: “electron-builder –mac”,
“linux”: “electron-builder –linux”
},
构建mac的客户端之前首先要将vue构建好,即运行:
npm run build-electron-prod
然后运行:
sudo yarn mac
之所以要加sudo是yarn用到一些系统目录,不加会报错。(关于如何安装yarn请看官网)
yarn run v1.17.3
$ electron-builder –mac
• electron-builder version=21.1.1 os=18.7.0
• loaded configuration file=package.json (“build” field)
• writing effective config file=outapp/builder-effective-config.yaml
• packaging platform=darwin arch=x64 electron=5.0.6 appOutDir=outapp/mac
• signing file=outapp/mac/WeiBan.app identityName=Developer ID Application: Beijing Shanglian Information Technology Co., Ltd. (R65P3V6H9V) identityHash=BA45718278F5E4268071035C88A48F38A2271B1C provisioningProfile=none
• building target=DMG arch=x64 file=outapp/WeiBan.dmg
• building block map blockMapFile=outapp/WeiBan.dmg.blockmap
✨ Done in 22.15s.
这个时候已经可以看到Weiban.dmg文件已经构建成功。但是还不能直接发布,mac是不能运行的。
接下来要做的最重要的一件事就是通过Notarize Your Preexisting Software。链接这里讲的很清楚,但有几个关键步骤着重强调一下。
XCode用最新版,这个不用犹豫,直接更新并安装。
然后设置开发者证书,里面有各种授权和证书,这里不再赘述,请找熟悉的开发者当面请教,比较关键的是两个:(1)生成Developer ID Application证书,并部署到当前的mac中。(2)注册mac客户端,Identifiers中添加一个macOS类型的。
接下来就可以进入官方引导中的上传这一步了,就是把打包好的dmg上传给苹果。
官方给的命令(点击该地址可以获取准确的命令,复制以下内容有可能会造成字符偏差)是:
xcrun altool --notarize-app --primary-bundle-id "com.example.ote.zip" --username "AC_USERNAME" --password "@keychain:AC_PASSWORD" --file OvernightTextEditor_11.6.8.zip
我们要修改其中的一些内容,比如改成:
xcrun altool –notarize-app –primary-bundle-id “ink.weiban.mac.word” –username “fymeng@51shanglian.com” –password “@keychain:AC_PASSWORD” –file DFS/DFS-portal/outapp/WeiBan.dmg
其中,ink.weiban.mac.word就是在开发者账户中设置的Identifiers的Bundle ID,fymeng@51shanglian.com就是AC_USERNAME,而密码我保留了@keychain:AC_PASSWORD这个赋值,意思就是让命令去我的本机的钥匙串中调用AC_PASSWORD中存储的密码。为了实现这个效果,需要提前将密码存到钥匙串中,命令是:
security add-generic-password -a "fymeng@51shanglian.com" -w <密码我也不会告诉你的> -s "AC_PASSWORD"
当然,fymeng@51shanglian.com这个帐号需要有权限,在这里检查或者添加https://itunesconnect.apple.com/access/users ,最小权限应该是开发人员,要包括上传构建版本这个权限。
另外值得注意的是如果fymeng@51shanglian.com这个帐号开启了二次验证,命令行是不能直接用的,需要到苹果官网新建一个设备密码,上面保存到钥匙串的应该是这个设备密码,如果没有启用二次验证,则可以直接用登录密码。这个命令行会报错。
还有一个,命令行报错说某帐号已经关联了其他任务,那就新建一个专用帐号吧,反正不要钱。