Linux | Screen

screen命令

screen 是一个非常有用的命令。应用场景:

  1. 单个 SSH 会话中使用多个 shell 窗口(会话)的能力
  2. 服务器开发,一个单独运行进程的窗口。可以避免单独再开一个窗口。 …

screen使用

创建一个窗口

$ screen -S name

执行自己需要的命令

$ ...

分离窗口

ctrl + A + D

重新连接到screen

如果只有一个会话可以直接使用 -r

……

阅读全文

Centos7.2 | gcc4.8升级为4.9

环境

  • CentOS 7.2.1511
  • Docker

我是用 docker 拉取镜像 CentOS 7.2.1511, 利用容器来作为我的开发环境。有条件的也可以用虚拟机或者实体机器。原理都一样。

$ docker
$ yum update && yum install gcc gcc-c++ make zlib-devel.x86_6

下载依赖包

升级 gcc, 下载安装包下载依赖。

$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.3/gcc-4.9.3.tar.bz2
$ tar xfv gcc-4.9.3.tar.bz2 && cd gcc-4.9.3
$ ./contrib/download_prerequisites

如果连接失败,无法下载的话,就打开此文件,手动下载下面5个文件,然后将文件放在gcc根目录,再屏蔽contrib/download_prerequisites文件里面的wget操作,再重新执行一次./contrib/download_prerequisites。这样的话,后面编译gcc时,这几个依赖库会自动先编译,不用自动手动一个个编译。

……

阅读全文

Shell | Except 使用

Except 参数

spawn               交互程序开始后面跟命令或者指定程序
expect              获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send       用于发送指定的字符串信息
exp_continue        在expect中多次匹配就需要用到
send_user           用来打印输出 相当于shell中的echo
exit                退出expect脚本
eof                 expect执行结束 退出
set                 定义变量
puts                输出变量
set timeout         设置超时时间
log_user            是否开启日志 0/1
log_file            设置日志路径,log_user = 1时才有效

一个完整的示例

我是用skynetdebug_console作为示例:

……

阅读全文

Unity3D | UGUI

Text

Text的属性

UnityHierarchy 面板上右键–>UI–>Text, 在 Inspector 面板上查看属性 属性 功能

  • Text 需要显示的文本
  • Font 显示文本的字体 如:微软雅黑,宋体等
  • Font Style 显示文本的样式,有普通,粗体,斜体,粗体和斜体四种选项
  • Font Size 显示字体的大小
  • Line Spacing 行与行之间的垂直距离
  • Alignment 文本的水平和垂直方向的对齐方式
  • Align by Geometry 使用字形几何范围执行水平对齐,而不是字形度量
  • Horizontal Overflow 用于处理文本宽度超出文本框的情况的方法,有 Wrap (隐藏)和Overflow (溢出)两个选项
  • Vertical Overflow 用于处理文本高度超出文本框的情况的方法,有 Truncate (截断)和Overflow (溢出)两个选项
  • Best Fit 忽略 Size 属性,将文本合适的显示在文本框内
  • Color 文本的颜色
  • Material 用来渲染文本的材质

其中水平溢出和垂直溢出的两个选项效果:

……

阅读全文

Golang | redis实现分布式锁

概述

网上有很多Golang操作redis的例子,我使用github.com/gomodule/redigo/redis包写一个关于redis分布式锁的问题。

redis分布式锁

锁需要的几个组件

  • 获取锁- 删除锁 分布式锁还需要
  • 给锁加上唯一id (只能获取和删除自己的锁)- 给锁加上过期时间 (防止死锁)

golang代码

推荐使用redis的连接池

……

阅读全文

Golang | redis

概述

网上有很多golang操作redis的例子,我使用github.com/gomodule/redigo/redis包写一个关于redis分布式锁的问题。

redis分布式锁

锁需要的几个组件

  • 获取锁
  • 删除锁

分布式锁还需要

  • 给锁加上唯一id (只能获取和删除自己的锁)
  • 给锁加上过期时间 (防止死锁)

golang代码

推荐使用redis的连接池

……

阅读全文

Lua | next的使用

lua_next

lua_next(L,index):先把 表(lua栈 index所指的表), 的当前索引弹出,再把table 当前索引的值弹出,也就是先弹出 table的索引,再弹出table索引的值 举例:

local t = {
    ["a"] = 1,
    ["b"] = 2,
    ["c"] = 3
}

使用lua_next遍历table t

……

阅读全文

Lua | API

lua_pop和lua_settop

lua_settop

我们直接来看lua_settop,文档解释

/*
设置栈的高度,如果之前的栈顶比新设置的更高,那么高出来的元素会被丢弃,反之压入nil来补足大小
假设栈里有2个元素。
如果index=0,那么移除栈上所有元素
如果index=1,移除栈顶一个元素
如果index=4,那么压入2个nil元素
*/
void lua_settop (lua_State *L, int index);

使用代码测试

int lua_test(lua_State *L)
{
    int pop_num = lua_tointeger(L,1);
    printf("pop_num= %d\n", pop_num);
    lua_settop(L,0);
    printf("1-top %d\r\n",lua_gettop(L));
    lua_pushinteger(L,31);
    lua_pushinteger(L,32);
    lua_pushinteger(L,33);
    lua_pushinteger(L,34);
    printf("2-top %d\r\n",lua_gettop(L));
 
    lua_pop(L,pop_num);
    lua_settop(L, -2); //清除一个栈顶
 
    printf("3-top %d\r\n",lua_gettop(L));
    printf("栈底 %d\r\n",lua_tointeger(L,1));
    printf("栈顶 %d\r\n",lua_tointeger(L,-1));
    return 0;
}

输出

pop_num= 0
1-top 0
2-top 4
3-top 3
栈底 31
栈顶 33

总结lua_settop(L, idx)函数

……

阅读全文

Hugo

hugo

我用过的静态博客有hexo、jekyll和hugo,对比起来,hugo虽然没有hexo那样丰富的插件和主题,但是hugo生成文章的速度更快。我是一名go语言爱好者,而hugo是go语言开发的, jekyll是用ruby开发的。于是我选择了hugo。下面我把hugo的安装步骤记录下来,供后来者参考。

……

阅读全文

Golang | gomod拉取私有仓库

概述

在使用go mod的过程中,依赖的包往往是第三方库,当我们自定义一个包并且放在github.com私有仓库时候,按照原来的方法则会有如下问题。

get "gitlab.com/xxx/zz": found meta tag get.metaImport{Prefix:"gitlab.com/xxx/zz", VCS:"git", RepoRoot:"https://gitlab.com/xxx/zz.git"} at //gitlab.com/xxx/zz?go-get=1
  verifying gitlab.com/xxx/zz@v0.0.1: gitlab.com/xxx/zz@v0.0.1: reading https://sum.golang.org/lookup/gitlab.com/xxx/zz@v0.0.1: 410 Gone

这个错误是因为新版本go mod会对依赖包进行checksum校验,但是私有仓库对sum.golang.org是不可见的,它当然没有办法成功执行checksum

……

阅读全文