刚开始使用gitlab的单元测试覆盖率,测试的代码是golang的,经过摸索如下

total:\s+\(statements\)\s+(\d+.\d+)%

.gitlab-ci.yml 配置文件如下

script:
- go test -coverprofile=coverage.out && go tool cover -func=coverage.out

就是从输出的内容里面用正则匹配,能成功就OK了

 

最近更新:http://www.ciphp.com/2017/03/1143

服务端

processor := enameepp.NewEppContactProcessor(&EppStruct{})
domainProcessor := enameepp.NewEppDomainProcessor(&EppStructDomain{})
TMultiplexedProcessor := thrift.NewTMultiplexedProcessor()
TMultiplexedProcessor.RegisterProcessor("contact", processor)
TMultiplexedProcessor.RegisterProcessor("domain", domainProcessor)

server := thrift.NewTSimpleServer4(TMultiplexedProcessor, transport, transportFactory, protocolFactory)

fmt.Println("Starting the simple server... on ", addr)
return server.Serve()

客户端

var transport thrift.TTransport
var err error
transport, err = thrift.NewTSocket(addr)
if err != nil {
	fmt.Println("Error opening socket:", err)
	return err
}
transport = transportFactory.GetTransport(transport)
defer transport.Close()
if err := transport.Open(); err != nil {
	return err
}

protocol := thrift.NewTBinaryProtocolTransport(transport)
mp := thrift.NewTMultiplexedProtocol(protocol, "domain")

//client := enameepp.NewEppContactClientProtocol(transport, protocol, mp)
client := enameepp.NewEppDomainClientProtocol(transport, protocol, mp)
return handleClient2(client)

从wordpress项目弄了一个.po文件直接生成.mo文件 如果是英文是正常的,为了减少一套语言包 打算直接用中文做msgid 结果发现怎么都不行

各种搜索

> http://stackoverflow.com/questions/31804791/gettext-not-translating-every-string
> https://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html

按说是可以解决的,继续各种折腾

> 找到一个中文的文章 http://blog.csdn.net/williamwanglei/article/details/8568926
> 这个参数是关键 --from-code=utf-8

### 步骤

> xgettext --keyword=e --from-code=utf-8 app/controllers/IndexController.php --output=fool.pot 扫描源代码生成pot文件
> msginit --locale=zh_CN --output=zh_CN.po --input fool.pot 得到.po文件
> msgfmt zh_CN.po --no-hash --o=zh_CN.mo 得到.mo文件

```
echo $this->e('中文');//得到结果 chinese
```
完整的po文件
```
# Chinese translations for PACKAGE package
# PACKAGE 软件包的简体中文翻译.
# Copyright (C) 2016 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Logiz , 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-03-25 17:55+0800\n"
"PO-Revision-Date: 2016-03-25 17:59+0800\n"
"Last-Translator: Logiz \n"
"Language-Team: Chinese (simplified)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.6\n"

#: app/controllers/IndexController.php:36
msgid "Hello"
msgstr "test"

#: app/controllers/IndexController.php:37
msgid "中文"
msgstr "chinese"
```

### phlacon 新版有个BUG

setlocale(LC_ALL, 'zh_CN');

要自己设置下才行

原始代码

for {
	select {
	case poll := <-connPool:
		print("pool")
	case <-time.After(20 * time.Second):
		break //希望在这里退出循环
	}
}

结果是一直在循环,搜索了下发现这样写是不对的,改进代码

OK:
for {
	select {
	case poll := <-connPool:
		print("pool")
	case <-time.After(20 * time.Second):
		break OK //这样就可以退出了
	}
}

初步确认是phalcon框架在升级到2.0后没有向下兼容 出现的BUG

现象:

在ini里面配置了数组

[dn]

status.1 = "start"

status.2="stop"

通过phalcon 2.0.4 的ini方法解析后得到一个数组var_dump的结果是

array(2) {
["1"]=>
string(1) "start"
["2"]=>
string(1) "stop"
}

自己写的数组和phalcon 1.3版本是这样的

array(2) {
[1]=>
string(5) "start"
[2]=>
string(4) "stop"
}

 

升级GITLAB折腾了几次备注下过程

1:清除缓存  gitlab-rake cache:clear RAILS_ENV=production

2:修改头像的URL成cn.gravatar.com

编辑这个文件 /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml   修改这个 plain_url: 默认是空值

3:升级前配置了邮件服务是手工加的 smtp_settings.rb 的文件,升级的时候会因为删除不了这个文件而失败,删除掉这个文件重新reconfigure就可以了。

4:不懂ror 折腾起来有点累

使用SSH包写了一个SCP文件到远程服务器的东东

func sendFile(client *ssh.Client, src string, dest string) error {
    session, err := client.NewSession()
    if err != nil {
        return err
    }
    defer session.Close()
    go func() error {
        w, errs := session.StdinPipe()
        if errs != nil {
            return errs
        }
        defer w.Close()
        fileSrc, srcErr := os.Open(src)
        if srcErr != nil {
            return srcErr
        }
        srcStat, fileErr := fileSrc.Stat()
        if fileErr != nil {
            return fileErr
        }
        fmt.Fprintln(w, &quot;C0644&quot;, srcStat.Size(), filepath.Base(dest))
        io.Copy(w, fileSrc)
        fmt.Fprint(w, &quot;x00&quot;) // 传输以x00结束
        return nil
    }()
    if err := session.Run(&quot;/usr/bin/scp -qrt &quot; + filepath.Dir(dest)); err != nil {
        return err
    }
    return nil
}

在服务器上执行一个PY脚本

func execCmd(client *ssh.Client, cmd string) (error, string) {
    sessions, err := client.NewSession()
    if err != nil {
        return err, &quot;&quot;
    }
    defer sessions.Close()
    str, errc := sessions.CombinedOutput(cmd)
    return errc, string(str)
}

结果

SCP文件是正常的,在执行PY脚本的时候代码也全部执行了,不过输出的结果不一致
和在服务器上直接执行python xxx.py par1 par2 不一样
xxx.py

os.system('tar zxvf xxx.tar.gz')//这个会显示解压文件的路径
ptint("start")
os.system(cp xxx.class)
print("stelp 2")
os.system('tar zcvf xxx.tar.gz ./')//这个会显示路径

GO得到的结果

显示tar zxvf 的结果
显示tar zcvf 的结果
print(start)
print(step 2)

没闹明白为啥这样的 是不是和PY调用系统命令有关系.

编译libgit2

$ mkdir build &amp;&amp; cd build
$ cmake ..
$ cmake --build .

给的是这个,不过编译了会找不到,根据后面的提示

$ cmake .. -DCMAKE_INSTALL_PREFIX=/install/prefix
$ cmake --build . --target install
安装到/usr/local目录下

编译git2go

git submodule update --init # get libgit2 就开始下载了
make install

在用PHP输出图片的时候果断想到了用304来进行缓存,记录下折腾的过程

$catchTime = 3600*24;//无脑缓存
$modifiedTime = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
if( strtotime($modifiedTime) + $catchTime > time() ){
header("HTTP/1.1 304");
header('Cache-Control: max-age=' . $catchTime);//不加这行会出现一会200 一会304的情况
exit;
}
header("content-type:image/png");
header("Last-Modified:".gmdate("D, d M Y H:i:s", time()+864000)." GMT");
header("Expires: " .gmdate('D, d M Y H:i:s', time()+864000).'GMT');
header('Cache-Control: max-age=' . $catchTime);
//必须要有这行才行,测试环境 CHROME 不然后面的请求浏览器不会发送HTTP_IF_MODIFIED_SINCE

不过还需要优化,目前是无脑缓存的,还需要接合文件的最后修改时间来缓存,不然更新是个问题

最近各种折腾GO的证书 JSK,KEY,CRT,CAROOT 的折腾

这个软件不错:http://keystore-explorer.sourceforge.net/index.php

jks

可以导出:CAROOT,KEY,CRT,P12文件。

 pfx转换cer,crt,key

       openssl pkcs12 -in test.wosign.pfx -nodes -out test.pem
openssl rsa -in test.pem -out test.key
openssl x509 -in test.pem -out test.crt(cer)

这个命令也可以转换出来

参考:https://support.wosign.com/index.php?/Knowledgebase/Article/View/36/0/