Git提交信息规范Git Commit Message

Git提交信息规范Git Commit Message

目前规范使用较多的是引用或衍生  Github Angular开发中<提交信息准则>章节(Commit Message Guidelines).以下为规范译文:

关于如何格式化git commit消息,我们有非常精确的规则。这样会有更具可读性的消息,在查看项目历史记录时易于遵循。而且,我们使用git commit消息生成AngularJS更改日志

可以使用典型的git工作流程或使用CLI向导(Commitizen)添加提交消息格式。要使用该向导,yarn run commit 请在对git进行更改后在终端中运行。

提交消息格式

每个提交消息均由信息头(header),正文(body)和页脚(footer)组成。信息头(header)具有一种特殊的格式,包括type(类型),scope(范围)和subject(主题)

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

所述信息头(header)是必须的,而信息头范围(scope)的是可选的。

提交消息的任何一行都不能超过100个字符!这使得该消息在GitHub以及各种git工具中更易于阅读。

Revert

如果提交还原了先前的提交,则应以开头revert: ,后跟还原的提交的标头。在正文中应该说:This reverts commit <hash>.,其中哈希是要还原的提交的SHA。

类型(type)

必须为以下之一:

  • feat:一项新功能(feature)
  • fix:一个bug修复
  • docs:仅文档更改
  • style:风格,不影响代码含义的更改(空白,格式,缺少分号等)
  • refactor:重构,既不修正错误也不增加功能的代码更改
  • perf:改进性能的代码改动
  • test:添加缺失或更正现有测试
  • chore:更改构建过程或辅助工具和库,例如文档生成

范围(scope)

范围可以是指定提交更改位置的任何内容。例如$location, $browser$compile$rootScopengHrefngClickngView,等…

当更改影响的范围不止一个范围时,可以使用*(星号)标识。

主题(Subject)

主题简要描述了更改:

  • 使用祈使句式和现在时:“change”而不是“changed”或“changes”
  • 不要大写第一个字母
  • 末尾没有点(。)

正文(Body)

就像在主题中一样,使用祈使句式现在时态:“change”而不是“changed”或“changes”。正文应包括改变的动机,并将其与以前的行为进行对比。

页脚(Footer)

页脚应包含有关Breaking Changes的所有信息,也是参考此提交关闭的GitHub问题的位置 。

重大更改应以BREAKING CHANGE:带有空格或两个换行符的单词开头。然后,将其余的提交消息用于此目的。

详细说明可以在本文档中找到。

如何将一台Chromebook打造成办公主力?

如何将一台Chromebook打造成办公主力?

自从Google 将Android 集成进Chrome OS, 今年年初宣布将支持Linux,而最近的系统更新又有多款Chromebook设备陆陆续续支持了Linux apps,Chrome OS已经不再缺少apps。

在开发办公上使用chromebook已经没有太多的障碍。

前段时间入手了一台Chromebook,是Acer Chromebook 14(CB3-431).而不是大名鼎鼎PixelBook,因为穷,没有dollar预算。配置嘛就不说了,对于不了解的可以认为就是一坨shit吧。

不过,我觉得这台Chromebook使用起来是相当OK的。使用顺手,价格便宜,还要什么自行车?

办公?开发?使用Chromebook?没错,Office 办公,修个图,或者跑个Python程序,编译个Java… 在行的!总有你需要的App等着你。没有Chrome App 可以选择Android App,没有Android Apps 可以选择Linux Apps!

注意这是在一定范围的。具体还是取决于你的具体工作,对于我或许也个ssh客户端 App 就足够了呢?

首先,我拿到了Chromebook,第一件事是激活使用,众所周知的原因,我要借助某些工具就如同我的手机第一次开机时,借助一台windows上使用一个工具(名字大家都知道),局域网共享代理方式,登录Google账号,完成激活。

第二,开启Google play store,设备支持的话目前直接都可以用。下载必备上网工具,就是上条中说的大家都知道名字的App。这个app的图标是这样的:

当然这个app 也有chrome 版的,相对Android版体验还是差很多,已经好久而且已经不再更新了,linux 版,qt版本就没再尝试,应该也可以用的。

第三,打开 chrome://flags/ ,打开 ARC VPN integration ,这样就能使用那个android app来使用互联网了。

接下来就自由发挥了,chrome app, Android app 还有Linux 的该用什么就安装什么。其实chrome app算是体验最好,但是Google已经给App判了死刑,一个个chrome app 都会慢慢的消失。

这里推荐几款很赞的开发工具吧,可以离线使用,Google系列的就不列了,好找。码字太累。

1.Termius – SSH Client (好用,已停更),这里直达Termius – SSH Client

2.Secure Shell App (官方出品,必备)

3.Caret (文本编辑,IDE)

4.Postman (停更)这里直达:Postman

5.Chrome MySQL Admin

6.Evernote

7.Polarr Photo Editor

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=144indpg30z1e
Linux Mint cinnamon Crashed…

Linux Mint cinnamon Crashed…

Cinnamon crashed, running in fallback mode…
Cinnamon 喜欢崩溃这是出了名的,刚刚从ubuntu切换到LinuxMint系统,正在为其简单快速而窃喜。我正想这个系统真棒,集成了这个多软件,操作如此简单。没想到…

当我在安装ibus中文输入法是遇到问题: 安装完成后配置界面打不开,症状是点击无效,终端输入:

ibus-setup

会提示

  File "/usr/share/ibus/setup/main.py", line 31, in <module>
    from gi.repository import GLib
ModuleNotFoundError: No module named 'gi'

确认发现本机python2.7 python3.6 都没有安装gi库。那就安装了gi, 而貌似gi.repository 并不包含在gi中,就目前版本而言。我安装了pgi 。。。

然后就悲剧了。 而应该是:

sudo apt  reinstall python-gi
sudo apt  reinstall python3-gi
sudo apt install python3-pyside
sudo apt install python-pyside

安装vmplayer :

https://communities.vmware.com/thread/568089

diff -Naur vmnet-only.orig/bridge.c vmnet-only/bridge.c
— vmnet-only/bridge.c 2017-06-26 22:08:39.148034785 +1000
+++ vmnet-only/bridge.c 2017-07-16 11:37:01.325802125 +1000
@@ -636,7 +636,7 @@
unsigned long flags;
int i;

– atomic_inc(&clone->users);
+ clone = skb_get(clone);

clone->dev = dev;
clone->protocol = eth_type_trans(clone, dev);

nginx php5.3+mysql5.1 redhat6.5 配置记录

nginx php5.3+mysql5.1 redhat6.5 配置记录

同步自:http://www.gejoin.com/2017/12/27/install-php-mysql-nginx-on-redhat6.5-linux-tips.html

一台没有联网但是有安装介质的rhel6.5-x86_64服务器。 计划安装部署上php+mysql 服务。由于有安装介质,光盘上的mysql版本5.1,php 版本5.3.3 ,没办法软件版本老就老了凑合用了。

1.首先挂载上iso光盘

# mount -o loop -t iso9660 /csys/rhel-server-6.5-x86_64-dvd.iso /mnt/vcdrom/

2.安装 php mysql

# cd /mnt/vcdrom/Packages/
# ls -rlt php* mysql*
# rpm -ivh mysql*.rpm --nodeps --force
# rpm -ivh php*.rpm --nodeps --force

3.编译安装nginx nginx 安装没什么说的,源码nginx-1.12.2编译安装。

# ./configure
# make & make install

4.安装一些php依赖包,rhel5.6介质中的包很少的,基本的php-fpm也是没有的。 可以从以下网站获取rpm包:

https://www.rpmfind.net
https://pkgs.org/download
http://rpm.pbone.net/

php-fpm-5.3.3-26.el6.x86_64.rpm
php-mbstring-5.3.3-26.el6.x86_64.rpm
php-mcrypt-5.3.3-5.el6.x86_64.rpm
libmcrypt-2.5.8-9.el6.x86_64.rpm

5.nginx.conf 配置

server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

6.php 配置 编辑/etc/php.ini

session.save_path = “/var/lib/php/session” 
session.auto_start = 1
​# chmod -R 777 /var/lib/php

7.设置服务开机启动

# chkconfig php-fpm on
# chkconfig mysqld on

8.启动服务

# service mysqld start
# service php-fpm start
# /usr/local/nginx/sbin/nginx
# mysqladmin -u root password ‘passwd’

9.验证nginx以及php服务

# echo “” > /usr/local/nginx/html/info.php

打开浏览器输入http://REMOTE/
打开浏览器输入http://REMOTE/info.php

10.安装phpMyAdmin 下载并解压phpMyAdmin-4.0.10.20-all-languages.tar.gz,建立到/usr/local/nginx/html/的软连接。 注意phpMyAdmin 支持的php版本。

UEFI模式下RemixOS+Win10 启动项修改

UEFI模式下RemixOS+Win10 启动项修改

主题:UEFI模式下RemixOS+Win10 启动项中顺序及超时修改

如果win10 是HDD UEFI安装的而非U盘安装,使用Remix官方的安装工具安装后,默认启动Remix OS,菜单超时时间30s. 由于RemixOS 启动使用grub.cfg,而该文件安装在引导分区。这里给出最简单最快的方法,不依赖第三方软件:

  1. Win +X (A) 进入管理员命令行模式
  2. 执行以下命令:
    mountvol B: /s
    cd  B:\boot\grub
    B:
    notepad grub.cfg

  3. 在打开的记事本中添加修改:(设置默认windows 1o 启动,超时时间10s)
    set default=0
    set timeout=10
  4. 保存退出,执行
    mountvol B: /d
    exit
  5. 重启看看效果。
Aside

ngnix and fastcgi and cicstg 开发环境搭建

一个搭建HTTP Server的项目需求,虽然方案没有最终确定,使用Ngnix做代理转发,后端使用使用开发语言无关的CGI应用进行业务逻辑处理,初步技术是可行的。但使用C语言开发WebServer 应用或许真不是什么好主意,那这样想啊,我们还用CICS这么古老的东西呢?–这里又忍不住想吐槽cics了..这个架构中的毒瘤!…. 进入正题吧,首先安装ngnix,ngnix的强大就不用叨叨了,安装也相当顺利。

  • 下载安装PCRE
# wget  ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
# ./configure;make;make install;
# wget http://nginx.org/download/nginx-1.10.2.tar.gz
# ./configure;make;make install;

这样就可以启动nginx,默认安装在了/usr/local/nginx目录下.

  • 下载安装spawn-fcgi,可以从Github Lighthtpd项目中下载,也可以直接从lighttpd.net这里下载。同样可以编译出Spawn-fcgi这个可执行程序。ngnix是支持FastCgi的,但是没有这个CGI管理程序。
  • 接下来就可以写CGI程序了,可以使用一些现成开源库,当然也可以自己写。
  • 安装CICS TRANSACTION GATEWAY,!!!NOTE!!![这玩意基本上支持32系统,安装时也会各种水土不服的,你可能需要32位的jre..]安装开发中可能需要32位支持,比如:
libXp.i686 
glibc-devel.i686

–慢慢享受其中的酸爽吧%$%$%.

  • 顺利的话应该可以写代码测试一下了。以下代码片段是接受从浏览器提交的表单然后提交CTG请求,编写代码编译。
 while (FCGI_Accept() >= 0) {   
        memset(sBufIn,0,sizeof(sBufIn));
        FCGI_fread(sBufIn, sizeof(char), sizeof(sBufIn), FCGI_stdin);
        if(strlen(sBufIn)==0)
        {
            memcpy(sBufIn,sParmas,strlen(sParmas));
        }
        memset(&tHttpIn,0x00,sizeof(HttpReqT));
        rc=InitHttpIn(&tHttpIn,sBufIn);
        resultSize= URLDecode(tHttpIn.MsgIn, tHttpIn.MsgIn, sizeof(tHttpIn.MsgIn));
        rc=CallCtgSvr(&tHttpIn);
        if(rc != RC_OK)
        {
            printf("Content-type: text/plain\r\n"
                "\r\n"
                ""
                "QUERY_STRING :%s.\n"
                "REQUEST_METHOD : %s.\n"
                "CONTENT_TYPE : %s.\n"
                "CONTENT_LENGTH : %s.\n"
                "SERVER_PROTOCOL : %s.\n"
              ...
         }
         ...
     }
     // CTG 调用函数
     // CTG_openRemoteGatewayConnection();
     // CTG_ECI_Execute(gatewayToken, &eciParms);
     // Makefile libs -m64 -lctgclient -lfcgi
  • 配置nginx 端口转发处理FASTCGI.
 location ~ \.cgi$ {
        fastcgi_pass 127.0.0.1:8000;
        fastcgi_index index.cgi;
        fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;
        include fastcgi_params;
    }
  • 配置nginx 端口转发处理FASTCGI.启动CGI程序。
     /usr/local/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 8000 -f /usr/local/nginx/cgi-bin/ctgcls
  • 使用浏览器测试或其他HTTP 客户端程序测试
 #!/usr/bin/env python
#coding=utf8
import httplib, urllib
httpClient = None
try:
    #params = urllib.urlencode({'name': 'tom', 'age': 22})
    params = '''TEST CTG..'''
    headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
    httpClient = httplib.HTTPConnection("192.168.101.181", 80, timeout=30)
    httpClient.request("POST", "/ctgcls.cgi", params, headers)
    response = httpClient.getresponse()
    print response.status
    print response.reason
    print response.read()
    print response.getheaders() #获取头信息
except Exception, e:
    print e
finally:
    if httpClient:
        httpClient.close() 
[Sovled]CM13 can NOT sync contacts-CM13无法同步google联系人

[Sovled]CM13 can NOT sync contacts-CM13无法同步google联系人

Nexus 5刷完cm13+opengapps(pico) 之后,goolge服务,google play store 等应用都有了,可以正常登录google账号,但是打开CM13自带的联系人应用则空空如也,只能选择添加账号。选择添加账户,只有Exchange选项,并没有Google选项!!可是Google账号明明已经成功登录了!?

BUG/Problem:CM13(CyanogenMod) Missed Google Contacts option and can not sync,when flashed cm13+opengapps(pico) and login in andriod system.There is nothing but ‘add account’ or ‘import new’ option when Opening the CM13 stock Contacts app. Enter add account menu,there is no Google option do not like other phones or other system.

CyanogenMod_logo

通过对比一台正常手机,发现刷入的Gapps少了Google Contacts Sync这个服务。需要安装这个APP,选择正确的版本下载,安装。
下载地址:http://www.apkmirror.com/apk/google-inc/google-contacts-sync/

HowToSolve:You should download ‘GoogleContactsSync.apk'(com.google.android.syncadapters.contacts) and install it. Download this apk  here: http://www.apkmirror.com/apk/google-inc/google-contacts-sync/

重启下手机后,打开联系人应用,选择添加,Google 选项回来了,再看看你的Google联系人是不是都回来了!

如果有必要(5.0以上系统)记得更改APP权限,联系人以及联系人同步App授权给Contact读取权限。

II

And then restart your phone,when you done,open the contacts app,your contacts would list there.

没有深究是CM13还是GApps问题,但是,个人觉得CM已经不是从前的CM了。。

In my opinion,Cyanogenmod is not which used be.

By GIGI WANG.

Aside

顽固的守卫-36进制转换

不得不吐槽,什么年代了,还要用哪些过时的东西。
哪些人说,稳定,人家都在用,有现成原型….
这无非是盲从,懒惰,终是无能,然而却掌握了话语权。
吐槽完毕,锅最终还是要有人背。
有个中间件软件系统,对命名,配置,参数做了严格限制。比如配置名长度必须4位,通讯队列名必须小于8位,甚至于端口号的大小也自己做了控制(65535以内还不够小?)。这个就是大名鼎鼎长度IBM帮我们省的。掌握话语权的自认为有能力驾驭好这个古董,程序猿早已对这玩意深恶痛绝:好在哪?稳定吗,高效吗?未必吧!恐怕只是不敢尝试新的,或是只是手中唯一的救命稻草?
为何还在吐槽…正题呢?呃,不好意思。
今天的槽点主要是:32GB内存为何还以为我只有64K。省确是件好事,然而要看省在哪方面。
程序中需要用到中间件队列名来匹配请求应答,而且不能重复。然后唯一可用的是流水号,是12位的。
而对列名最长8位!这点没办法了,闭源收费,你能耐我何!只有一个思路了-压缩流水:
当年数制转化是这样学的,模运算再倒序重排。效率暂不研究:

   int len=0;
    int i=0;
    char d=' ';
    int m=0;
    while(num)
    {
        m=num%36;
        if(m>9)
        {
            d='a'+m-10;
        }
        else
        {
            d='0'+m;
        }
        sprintf(des,"%s%c",des,d);
        num=num/36;
    }

        len=strlen(des);
        for(i=0;i<len/2;i++)
        {
            d=*(des+i);
            *(des+i)= *(des+len-i-1);
            *(des+len-i-1)=d;
        }

 

Aside

TextWrangler和Vim配置GoLang 语法高亮

同步文章:http://www.gejoin.com/2016/05/20/golang-syntax-highlighting-for-vim-and-textwrangler.html

OSX 下配置VIM语法高亮

Vim原生不支持golang语法高亮,因此要借助插件。功能强大又好用的插件有很多,这里就只简单介绍一种。
vim-go插件,github在[这里](https://github.com/fatih/vim-go).
我们来使用vim-plug[🌺 Minimalist Vim Plugin Manager]来安装,安装方法:

1.下载plug.vim .
并放置到~/.vim/autoload 目录下,点击[这里下载].
也可以直接使用curl下载。

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

2. 编辑~/.vimrc 文件,添加以下内容:

 call plug#begin('~/.vim/plugged')
 Plug 'fatih/vim-go', { 'tag': '*' }
 call plug#end()

3. 打开vim,输入命令:

  :PlugInstall

go-vim
4. 完成,vim打开一个*.go 文件看看。

配置TextWrangler或BBEdit

BBEdit官方网站给出了配置方法,当然测试了免费的TextWrangler ,也是可行的。
官方给出了好多可用的语言供选择,地址在[这里].可供选择的包括了Erlang,Haskell,Go等等..

>BBEdit plugin library

1. 在该页面找到Go下载地址下载,或点击这里 [直接下载]

2. 下载的文件Go.plist.zip 解压成Go.plist。

3. 将该文件放置到/Users/{USERNAME}/Library/Application Support/TextWrangler/Language Modules, 重新打开TextWrangler。一切OK了。

命令行参数-Command-Line Flags

命令行参数-Command-Line Flags

原文: [Go by Example:Command-Line Flags]  –注意正确的上网姿势..

命令行标识(参数)是一种常用的指定命令行程序选项的方法,例如,在`wc -l`中 “-l” 就是一个命令的参数。

golang
Go提供了一个支持基本的命令行参数解析的flag package(包)。我们将使用这个package来实现我们的命令行程序示例。

package main

import "flag"
import "fmt"

func main() {

    // 基本的标识可以声明为string,integer以及bool类型。
    // 这里我们什么了一个字符串参数word,它有一个默认值“foo”,
    // 还有一个简短的描述。
    // flag.String函数返回一个字符串指针(不是字符串值);
    // 下面将看到如何来使用这个指针。
    
    wordPtr := flag.String("word", "foo", "a string")

    // 类似于前边的'word' flag,这里声明了numb和fork标识.
 
    numbPtr := flag.Int("numb", 42, "an int")
    boolPtr := flag.Bool("fork", false, "a bool")

    // 还可以使用在程序成任何地方声明过的var变量来声明一个选项。 
    // 注意,我们需要为函数传递指向这个flag的指针。
    
    var svar string
    flag.StringVar(&svar, "svar", "bar", "a string var")

    // 一旦所有的声明完成,还需要调用flag.Parse()来执行命令行解析。
    
    flag.Parse()

    // 接下来,我们打印输出解析的选项还有其它紧接位置的参数。
    // (注:Trailing positional arguments怎么翻译呢?)
    // 还要注意,我们需要用形如*wordPtr的指针指向值,来获取参数实际值。
    
    fmt.Println("word:", *wordPtr)
    fmt.Println("numb:", *numbPtr)
    fmt.Println("fork:", *boolPtr)
    fmt.Println("svar:", svar)
    fmt.Println("tail:", flag.Args())
}

最好先编译下,然后直接运行生成二进制程序来测试这个带参数的命令行程序。

$ go build command-line-flags.go

首先用所有flag都有值来测试下这个编译好的程序。

$ ./command-line-flags -word=opt -numb=7 -fork -svar=flag
word: opt
numb: 7
fork: true
svar: flag
tail: []

注意,忽略的flag参数将被自动赋予他们的默认值。

$ ./command-line-flags -word=opt
word: opt
numb: 42
fork: false
svar: bar
tail: []

紧随参数可以为提供给任意flag

$ ./command-line-flags -word=opt a1 a2 a3
word: opt
...
tail: [a1 a2 a3]

注意,flag package需要所有的flag都要在位置参数之前出现(否则这些flag将会被位置参数中断调掉)

$ ./command-line-flags -word=opt a1 a2 a3 -numb=7
word: opt
numb: 42
fork: false
svar: bar
trailing: [a1 a2 a3 -numb=7]

使用 -h 或者 –help 参数可以自动为命令行程序生成帮助信息

$ ./command-line-flags -h
Usage of ./command-line-flags:
  -fork=false: a bool
  -numb=42: an int
  -svar="bar": a string var
  -word="foo": a string

如果提供的flag不是falg package中指定。程序将打印出错信息并显示帮助文本。

$ ./command-line-flags -wat
flag provided but not defined: -wat
Usage of ./command-line-flags:
...

接下来我们将看到环境变量-另一种常用参数化程序方法。