有的库使用go get无法访问。这里可以通过shadowsocks代理来实现。
首先要有个shadowsocks服务才可以。

windows

set http_proxy=http://localhost:1080
set https_proxy=http://localhost:1080

mac

export http_proxy=http://127.0.0.1:1080
export https_proxy=http://127.0.0.1:1080
下面这个不知道是否有用,如果上面不行,就试试下面的
export GIT_SSL_NO_VERIFY=true

下面是关于git的配置
git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global --unset http.proxy
git config --global --unset https.proxy

git是可以直接支持socks5代理的,如果只安装了shadowsocks,而不安Privoxy设置方法如下:

git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

一个工具
brew install privoxy
nano /usr/local/etc/privoxy/config

找到# forward-socks5t / 127.0.0.1:9050 .在下面添加
forward / 127.0.0.1:1080

启动
sudo /usr/local/sbin/privoxy /usr/local/etc/privoxy/config

查看是否启动
ps aux | grep privoxy
查看端口监听是否成功:
netstat -an | grep 8118

export http_proxy=http://127.0.0.1:8118/
export https_proxy=http://127.0.0.1:8118/
然后执行go get

关闭Privoxy,首先查看privoxy的进程ID:
sudo killall privoxy
若以上方法都无法关闭Privoxy,请使用Privoxy提供的脚本进行关闭:
sudo /Applications/Privoxy/stopPrivoxy.sh

//=======
brew install proxychains-ng
配置文件:
/usr/local/etc/proxychains.conf
将socks4 127.0.0.1 9095改为
socks5 127.0.0.1 1080

proxychains4 go get -u google.golang.org/grpc

curl ip.cn
curl cip.cc
curl myip.ipip.net

proxy

字符串转数字

parseInt(string, radix)

字符串查找

返回查找到的第一个子字符串的起始下标值,如果没有找到则返回 -1。

var s = "JavaScript";
var i = s.indexOf("a");
console.log(i); //返回值为1,即字符串中第二个字符

数字转字符串

NumberObject.toString(radix)

多行字符串

ES6 的有一个新的特性,Template Strings, 这是语言层面上第一次实现了多行字符串

var tmpl =
`!!! 5
html
include header
body
//if IE 6
.alert.alert-error
center 对不起,我们不支持IE6,请升级你的浏览器
a(href="http://windows.microsoft.com/zh-CN/internet-explorer/download-ie") | IE8官方下载
a(href="https://www.google.com/intl/en/chrome/browser/") | Chrome下载
include head
.container
.row-fluid
.span8
block main
include pagerbar
.span4
include sidebar
include footer
include script`

这是一种很有技巧的解决办法, 利用了function的toString方法

function heredoc(fn) {
return fn.toString().split('\n').slice(1,-1).join('\n') + '\n'
}

var tmpl = heredoc(function(){/*
!!! 5
html
include header
body
//if IE 6
.alert.alert-error
center 对不起,我们不支持IE6,请升级你的浏览器
a(href="http://windows.microsoft.com/zh-CN/internet-explorer/download-ie") | IE8官方下载
a(href="https://www.google.com/intl/en/chrome/browser/") | Chrome下载
include head
.container
.row-fluid
.span8
block main
include pagerbar
.span4
include sidebar
include footer
include script
*/});

字符串切片

stringObject.slice(start,end)
var newStr = dt.slice(2,4);
// 去掉尾部的一个字符
newStr = dt.slice(0,-1);

字符串插入

//插入 参数说明:str表示原字符串变量,flg表示要插入的字符串,sn表示要插入的位置
function str_insert(src, insertStr, pos) {
var newStr = "";
for (var i = 0; i < src.length; i += pos) {
var tmp = src.substring(i, i + pos);
newStr += tmp + insertStr;
}
return newStr;
}

格式化

/**
* 替换所有匹配exp的字符串为指定字符串
* @param exp 被替换部分的正则
* @param newStr 替换成的字符串
*/
String.prototype.replaceAll = function (exp, newStr) {
return this.replace(new RegExp(exp, "gm"), newStr);
};

/**
* 原型:字符串格式化
* @param args 格式化参数值
*/
String.prototype.format = function(args) {
var result = this;
if (arguments.length < 1) {
return result;
}

var data = arguments; // 如果模板参数是数组
if (arguments.length == 1 && typeof (args) == "object") {
// 如果模板参数是对象
data = args;
}
for ( var key in data) {
var value = data[key];
if (undefined != value) {
result = result.replaceAll("\\{" + key + "\\}", value);
}
}
return result;
}

//两种调用方式
var template1="我是{0},今年{1}了";
var result1=template1.format("loogn",22);

var template2="我是{name},今年{age}了";
var result2=template2.format({name:"loogn",age:22});

//两个结果都是"我是loogn,今年22了"
var template1="我是{0},今年{1}了, lucy今年也{1}了";
var result1=template1.format("loogn",22);

//结果是"我是loogn,今年22了, lucy今年也22了"

当同时使用时order by无效了,因为在group by后面。

这里使用group_concat,就是效率比较差。先用起来再说吧,应该有更好的方式。

SELECT barCode,
SUBSTRING_INDEX( group_concat(priCommodityID ORDER BY createDate DESC), ',', 1
) AS priCommodityID,
SUBSTRING_INDEX(group_concat(createDate ORDER BY createDate DESC),',',1) AS createDate
FROM
tb_history_version
WHERE
barCode = '4565789'
GROUP BY
barCode;

SUBSTRING_INDEX(str,delim,count)函数用法
返回字符串 str 中在第 count 个出现的分隔符 delim 之前的子串
count正数从左开始,负数时从右开始

SELECT SUBSTRING(str,pos,len)函数用法
返回字符串 str 中以 pos 作为起始位置,长度为 len 的子字符串

添加系统托盘图标。创建工程的时候可以选择默认支持,我这里是后添加的。

修改uires.idx文件

<ICON>
<file name="ICON_LOGO" path="image\soui.ico"/>
</ICON>
<SMENU>
<file name="menu_tray" path="xml\menu_tray.xml"/>
</SMENU>
阅读全文 »

动态库路径配置

  1. 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边

    ln -s /where/you/install/lib/*.so /usr/lib
  2. 修改 ld.so.conf 文件

    nano /etc/ld.so.conf

    //文件为添加下面一行
    /usr/local/lib

    // 更新一下
    /sbin/ldconfig –v
  3. 临时解决方法

    export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

系统环境变量

操作系统启动后会自动执行下面路径下的脚本
首先执行/etc/init.d
然后用户登录
命令行+ssh:
/etc/profile

下面文件中只要有一个存在就不再继续读其他2个文件了
~/.bash_profile
~/.bash_login
~/.profile

图形界面登录:
只加载 /etc/profile 和 ~/.profile。

/etc/profile是永久性的环境变量,是全局变量,
/etc/profile.d/设置所有用户生效

/etc/profile.d/比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d/下对应的shell脚本即可,不用像/etc/profile需要改动此文件

用户登录时执行顺序
/etc/profile (for all users)
/etc/profile.d下的所有脚本,这里放程序初始化信息比较适合
~/.bash_profile
~/.bashrc

Supervisor python2 环境。官方还没有出py3的版本,不过不影响管理py3的进程。
supervisord 提供实际的服务,服务端
supervisorctl 命令行解释器,客户端

安装

ubuntu 18.04 bionic
sudo apt update
sudo apt install python-pip
使用 root 用户安装
pip install supervisor
Note: after install, need reconnect ssh terminal otherwise cannot find the supervisor

not root user install path this will cause start problem:
/home/ubuntu/.local/bin/
/home/ubuntu/.local/lib/python2.7/site-packages/supervisor


阅读全文 »

/bin 二进制可执行命令
/dev 设备特殊文件
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公用的临时文件存储点
/root 系统管理员的主目录(呵呵,特权阶级)
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:
/usr/x11r6 存放x window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

4611a6ea.png 20220107_112559.png

在以上各个字段中,还可以使用以下特殊字符:

"*" # 代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;
"/" # 代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。
"-" # 代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。
"," # 分散的数字(不一定连续),如1,2,3,4,7,9。
# 注:由于各个地方每周第一天不一样,因此Sunday=0(第一天)或Sunday=7(最后1天)。
阅读全文 »

原文
发表时间January 28, 2015

这两个开源项目在很多方面有共性,但是又各有特色,不能简单的考虑使用一个完全的替代另一个。
需要根据不同的应用场景来选择。

未完结。待续

阅读全文 »

英文、中文切换

下载的英文版,后台还要给其他人使用,所以需要安装中文语言包。
官网下载语言包之后,解压到WordPress网站/wp-content/languages/目录下
打开站点根目录下的wp_config.php
找到define(‘WPLANG’,修改为:
define(‘WPLANG’, ‘zh_CN’);

回到浏览器,刷新页面,可以在设置里面看到中文选项。保存刷新即可。