了解 Github Webhooks 钩子
前言
Github Webhooks 允许我们构建或设置集成,以订阅 GitHub.com 上的某些事件。 当触发其中某个事件时,将向 Webhooks 配置 Paloyd URL 发送 HTTP POST 请求。可用于更新外部议题跟踪器、触发 CI 构建、更新备份镜像,甚至部署到生产服务器。
场景
个人博客如: 代码提交远程仓库 => 触发 Github Webhooks => 服务器触发器监听 => 同步更新博客
因本文重点在介绍 webhooks 的自动化功能,我们在此场景的基础上,简化一下步骤,将远程服务器改为本地服务器。如: 代码提交远程仓库 -> 触发 Github Webhooks -> 本地服务触发器监听 -> 拉取最新代码
开始配置 Shell 脚本
创建 blog_deploy.sh 文件
12345678910#!/bin/bashLOG_FILE="/Users/heiemooa/project/code/blog_ ...
抽象语法数(AST) -- babel 插件
介绍babel是 Javascript 的编译语法器,确切来说是源码到源码的编译器,通常也叫做“转换编译器(transpiler)。意思是说你为 Babel 提供一些 JavaScript 代码,Babel 更改这些代码,然后返回给你新生成的代码。
抽象语法数(AST)这个处理过程中的每一步都涉及到创建或是操作抽象语法树,亦称 AST。
123function square(n) { return n * n;}
这个程序可以被表示成如下的一棵树:
1234567891011121314151617181920- FunctionDeclaration: - id: - Identifier: - name: square - params [1] - Identifier - name: n - body: - BlockStatement - body [1] - ReturnStatement - argument - BinaryExpressio ...
用 commitizen 规范 git commit 提交说明
前言
Git 作为目前开源社区最为火热的分布式系统版本管理工具,当我们在提交代码之前,都是需要添加 Commit message(提交说明),否则就不允许提交。
1$ git commit -m "hello world"
上面代码的 -m 参数,就是用来指定 commit message的。
如果一行不够,可以只执行 git commit,就会跳出文本编辑器,让你写多行。如
1$ git commit
基本上,你写什么都行。
我们先来看下平时提交的 commmit 日志,只是简单的说明本次提交的信息,如
我们再来看下具有一定规范性的 commit 日志,是不是更加清晰明了,有了一定的规范,对提交类型做了区分。
一般来说,commit message 应该清晰明了,说明本次提交的目的。
目前,社区有多种 Commit message 的写法规范。这种是 Angular 规范,中文。这是目前使用最广的写法,是比较合理和系统化,并且有配套的工具。
作用
提供更多的历史信息,方便快速浏览。
可以过滤某些 commit(比如文档改动),便于快速查找信息。
可以直接从 ...
通过 Lerna 进行多个软件包的管理
前言
将大型代码仓库分割成多个独立版本化的软件包(package)对于代码共享来说非常有用。但是,如果某些更改 跨越了多个代码仓库的话将变得很 麻烦 并且难以跟踪,并且跨越多个代码仓库的测试将迅速变得非常复杂。为了解决这些(以及许多其它)问题,某些项目会将 代码仓库分割成多个软件包(package),并将每个软件包存放到独立的代码仓库中。
Lerna 是一种工具,针对 使用 git 和 npm 管理多软件包代码仓库的工作流程进行优化。
入门123npm install --global lerna // 全局安装 lernagit init hfs-lerna-test && cd hfs-lerna-test // 创建文件夹, hfs-lerna-test 仅代表当前例子文件夹名lerna init // 初始化一个lerna项目结构,如果希望各个包使用单独版本号可以加 -i | --independent
你的代码仓库目前应该是如下结构:
1234- ...
位运算相关知识
前言:计算机是用补码进行计算与存储
对于有符号数而言,二进制的最高位是符号位 ,0表示正数, 1表示负数;
正数的原码、反码、补码都一样;
负数的原码是其正数符号位为1,其他位和正数的二进制位相同;负数的反码等于负数原码符号位不变,其他位按位取反;负数的补码等于负数的反码+1;
go中的取反操作^,c、java、c++中取反操作~;
按位与 &运算,两个全为1,结果为1,否则为0;
按位或|运算,一个为1就为1;
按位异或^运算,两个不同,结果为1 ,相同则为0;
左移运算<<,符号位不变,低位补 0;
右移运算>>,低位溢出,符号位不变,并用符号位补溢出的高位;
go中位清除&^
静态网站托管服务
前言
上篇文章 介绍了在我们不注册域名、以及购买云服务器的基础上,利用现有的免费的云厂商托管平台搭建个人网站。并以 Hexo + Github Pages 为例,实现了个人博客的快速搭建和部署。
接下来分享其他常见的几种静态网站托管服务。
云产品Serverless 云产品
通过无服务器计算,将前端静态资源快速部署到云厂商提供的云平台进行托管,配置默认生成的域名,快速生成站点。需按量付费。经测验实际费用甚微,或无。
腾讯 Cloudbase
微信 云托管
阿里云 Devs
Github Pages
Github Pages 是 GitHub 提供的一个网页托管服务,于 2008 年推出。可以用于存放静态网页,包括博客、项目文档甚至整本书。
优点
Github 的东家是微软,Git 管理全部代码,永远不用担心文字丢失或者复原问题;
百度无法爬取存在 Github 上的网站内容;
自带域名可 https 访问,如 https://<你的 GitHub 用户名>.github.io
支持自定义域名
缺点
无法给自定义域名配置 SSL 证书
墙内访问速度缓慢
流量 ...
Linux小工具sshpass实现命令行密码验证功能
下载源码安装包
1curl -O -L http://downloads.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz && tar xvzf sshpass-1.05.tar.gz
编译安装
123cd sshpass-1.05./configuresudo make install
macOS也可使用brew安装
1brew install hudochenkov/sshpass/sshpass
使用
1234在二进制文件中使用,准备upload.sh文件,写入内容:#!/bin/bashsshpass -p 'pwd' scp -r ${sourceDir} ${username}@{IP}:${targetDir}
如何通过 Hexo + Github Page 快速搭建个人博客
技术选型
在传统认知里,搭建个人静态网站我们需要:
注册域名
购买云服务器
域名备案
构建静态网页
部署前端静态资源
DNS 解析
上诉方案作为技术小白或者初学者来说,上手较难,时间、金钱成本花费较大,不推荐。我们探讨的是如何在低成本的基础上,利用市面上现有的成熟的博客框架,搭建属于我们自己的个人博客。
前端框架
为了帮助开发者快速搭建所需的网站,这里提供的几种目前市面上比较火的博客框架,可以帮助我们快速的生成所需的静态网页。
Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。Hexo 的主题样式也有很多好看的,而且 github 都有 star 上万的。
Wordpress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。有着许多第三方开发的免费模板,安装方式简单易用。
Vuepress 由两部分组成:一个以 Vue 驱动的主题系统的简约静态网站生成工具,和一个为编写技术文档而优化的默认主题。它是为了支持 Vue ...
K8s一主两从搭建
零 服务器准备
IP
类别
172.16.56.102
master
172.16.56.103
Node1
172.16.56.104
Node2
一 准备工作准备好一个主节点master的centos7.5以上的机器,准备相关相关环境的node节点机器
下载一个可以批量运维服务器的工具mobaXterm,这个工具暂时只支持windows,其下载地址为:
1https://mobaxterm.mobatek.net/download-home-edition.html
二 初始化机器的配置信息[9步]
检查操作系统版本,确保操作系统版本是一致,并且大于7.5版本;
1cat /etc/redhat-release
输出:
主机名解析
为了在集群环境中方便节点调用,配置主机解析功能,在企业内部应该使用DNS解析;
1234在 /etc/hosts 文件中,添加主机名解析,如下172.16.56.102 master172.16.56.103 node1172.16.56.104 node2
上面的地址,就是我们给每个主机分配的ip ...
The Go Memory Model
一 介绍 go的内存模型指定一种条件,在这种条件下,可以保证在一个goroutine中读取变量可以观测到不同goroutine对同一变量的写操作所产生的值。
二 忠告 多goroutine并发访问修改数据的程序必须串行化访问。
利用channel操作、sync包中的同步原语以及sync/atomic包中的原子操作保证串行化访问,保护数据。
如果你一定要阅读该文档的其余部分去理解你编程的行为,这是非常明智的。
但是不要自作聪明。
三 happens before 在单一的goroutine内部,读取和写入的行为必须和程序中代码指定的执行顺序保持一致。也就是说,在重排不会改变语言规范所定义的goroutine行为时,编译器和处理器才可以对单个goroutine进行读取、写入指令的重排。因为指令重排,一个goroutine所观测到的执行顺序可能和其他goroutine所感知到的执行顺序不同。例如,当一个goroutine执行a=1;b=2,其他goroutine可能观测到b的值比a的值 ...