Maple's Blog.

Maple's Blog.

keep coding and having fun

使用 Expect 自动登录 OpenVPN
公司使用 OpenVPN 作为外网办公网络,本来只设置了用户名密码,但是为了安全,公司的网(yun)管(wei)同事升级了安全配置,添加了谷歌验证的输入需求。 谷歌验证是一种将预先生成秘钥和时间戳,通过一种开源算法计算出若干位的数字的安全方案。在 VPN 配置界面,会提供一个二维码(即为秘钥),然后在手机上安装 APP,扫码二维码并保存,可以获得一个动态刷新的验证码。然后在登录界面输入账号密码和动态验证码即可登录 VPN。 作为一个电脑党,每次登录 VPN 都需要满世界找手机,真的让人觉得麻烦。因为谷歌验证是开源的,所以 gayhub 上到处都有各个编程语言支持的包。如果可以运行一套程序...
Ubuntu 安装 Node.js 环境
官方编译版本安装使用官方预先编译好的二进制安装包进行安装。 从https://nodejs.org/en/download/选择对应的版本的二进制包,下载到 Linux 上。 123456789101112# 下载wget https://nodejs.org/dist/{version}/node-{version}-linux-x64.tar.xz# 解压tar -xvf node-{version}-linux-x64.tar.xz# 进入文件夹cd node-{version}-linux-x64/#...
Shell 自动重启进程
将 OpenVPN 搭建在一台服务器上,因为服务器设置了会话过期,所以服务每天都会在 24 小时后自动断开,因此需要一个类似守护进程的脚本来进行自动重启。 网上找到了一个简单的脚本: 12345678910#!/bin/bashwhile truedo procnum=` ps -ef|grep "openvpn"|grep -v grep|wc -l` if [ $procnum -eq 0 ]; then ./openvpn fi sleep 30done 其方式是每 30 秒通过 ps 命令来检查对应名称的进程是否存在,如果不存在...
树莓派用机械硬盘当系统盘
全程参考一个大佬的文章 https://mynook.info/blog/post/boot-raspberrypi-from-external-hdd 方案一直对树莓派的读写速度十分不能接受,也曾想去某宝上找 EMMC 转 SD 的套件,但是听那个老板说 EMMC 芯片一百+,觉得有点贵,毕竟树莓派也仅仅支持 USB2.0。于是乎,在某家库存店找了一个 80G 的库存的机械硬盘(¥60),又买了一根双 USB 的易驱线(树莓派的 USB 供电支持不了机械硬盘)。 简单搜索了一下发现直接从硬盘启动是不行的,因为树莓派启动的时候固定是从 SD 卡的第一个分区(/bo...
深度剖析:如何实现一个 Virtual DOM 算法(转)
作者:戴嘉华 转载请注明出处并保留原文链接(#13)和作者信息。 目录: 1 前言 2 对前端应用状态管理思考 3 Virtual DOM 算法 4 算法实现 4.1 步骤一:用JS对象模拟DOM树 4.2 步骤二:比较两棵虚拟DOM树的差异 4.3 步骤三:把差异应用到真正的DOM树上 5 结语 6 References 1 前言本文会在教你怎么用 300~400 行代码实现一个基本的 Virtual DOM 算法,并且尝试尽量把 Virtual DOM 的算法思路阐述清楚。希望在阅读本文后,能让你深入理解 Virtual DOM 算法,给你现有前端的编程提供一些新的思考。 本文...
git merge --no-ff
--no-ff 指的是强行关闭fast-forward方式。 fast-forward方式就是当条件允许的时候,git 直接把 HEAD 指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建 commit。 git merge --squash 是用来把一些不必要 commit 进行压缩,比如说,你的 feature 在开发的时候写的 commit 很乱,那么我们合并的时候不希望把这些历史 commit 带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动 HEAD,不提交。需要进行一次额外的 c...
Gulp 常用插件(转)
Gulp 常用插件(转)原文地址 本文主要展示的是gulp常用插件的使用方法和用途,通过对插件的熟练运用达到精通gulp。不定期更新。可以到github上面下载DEMO。 匹配符 *、**、!、{}1234gulp.src('./js/*.js') // * 匹配js文件夹下所有.js格式的文件gulp.src('./js/**/*.js') // ** 匹配js文件夹的0个或多个子文件夹gulp.src(['./js/*.js','!./js/index.js...
gulp-autoprefixer 基本使用
转载传送门 基本使用 使用 gulp-autoprefixer 根据设置浏览器版本自动处理浏览器前缀。使用她我们可以很潇洒地写代码,不必考虑各浏览器兼容前缀。 1234567891011121314var gulp = require('gulp'), autoprefixer = require('gulp-autoprefixer'); gulp.task('testAutoFx', function () { gulp.src('src/css/index.css') ...
Docker 启动后直接退出
之前对 docker 的运行问题很不了解,后来根据朋友的解释才理解,容器中的程序应该挂载在容器上,由容器的重启关闭来控制程序的关闭开机。 那假如运行后台运行的函数呢? 如果不做处理,在函数进入后台运行后,容易就会直接 exit 结束。 有一个办法是在运行脚本上加一句: 1tail -f /dev/null 这样容易就处于执行状态就不会退出了。 算是歪门邪道吧。
Ubuntu APT 更换阿里源
备份原 APT 源 1sudo mv /etc/sources.list /etc/sources.list.bak 重新编辑一份新的sources.list 16.0412345678910111213141516# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricteddeb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-propert...
avatar
Maple
coding & have fun