公司使用 OpenVPN 作为外网办公网络,本来只设置了用户名密码,但是为了安全,公司的网(yun)管(wei)同事升级了安全配置,添加了谷歌验证的输入需求。
谷歌验证是一种将预先生成秘钥和时间戳,通过一种开源算法计算出若干位的数字的安全方案。在 VPN 配置界面,会提供一个二维码(即为秘钥),然后在手机上安装 APP,扫码二维码并保存,可以获得一个动态刷新的验证码。然后在登录界面输入账号密码和动态验证码即可登录 VPN。
作为一个电脑党,每次登录 VPN 都需要满世界找手机,真的让人觉得麻烦。因为谷歌验证是开源的,所以 gayhub 上到处都有各个编程语言支持的包。如果可以运行一套程序...
官方编译版本安装使用官方预先编译好的二进制安装包进行安装。
从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/#...
将 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...
作者:戴嘉华
转载请注明出处并保留原文链接(#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 算法,给你现有前端的编程提供一些新的思考。
本文...
--no-ff 指的是强行关闭fast-forward方式。
fast-forward方式就是当条件允许的时候,git 直接把 HEAD 指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建 commit。
git merge --squash 是用来把一些不必要 commit 进行压缩,比如说,你的 feature 在开发的时候写的 commit 很乱,那么我们合并的时候不希望把这些历史 commit 带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动 HEAD,不提交。需要进行一次额外的 c...
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 根据设置浏览器版本自动处理浏览器前缀。使用她我们可以很潇洒地写代码,不必考虑各浏览器兼容前缀。
1234567891011121314var gulp = require('gulp'), autoprefixer = require('gulp-autoprefixer'); gulp.task('testAutoFx', function () { gulp.src('src/css/index.css') ...
之前对 docker 的运行问题很不了解,后来根据朋友的解释才理解,容器中的程序应该挂载在容器上,由容器的重启关闭来控制程序的关闭开机。
那假如运行后台运行的函数呢?
如果不做处理,在函数进入后台运行后,容易就会直接 exit 结束。
有一个办法是在运行脚本上加一句:
1tail -f /dev/null
这样容易就处于执行状态就不会退出了。
算是歪门邪道吧。
备份原 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...