0%

工作中个别项目需要连接VPN,
本地也有项目需要进行
连接上vpn后,本地的项目就无法进行

现在的方法是:

  1. 开个虚拟机(virtualbox)

    • 连接vpn
    • 搭建v2ray server
    • host中添加域名解析
  2. 物理机

    • 搭建v2ray client, 所有流量走v2ray, 在route配置规则
    • host中添加域名解析
    • 搭建privoxy,将v2ray clientsock5代理转换为http代理

更新代码:
windows: 修改TortoiseSVN的网络设置,添加http代理
linux: proxychain4 svn xxx

项目中使用erlang语言

1
httpc:set_options([{proxy, { {"192.168.10.26", 8119}, "" } }]).

准备

  • haxm

    intel开源的加速qemu驱动

  • tap-windows

    用于虚拟网卡

    创建新的虚拟网卡

    • tap-windows: Add a new Tap virtual ethernet adapter
    • 修改名字为tap0
    • 将本地连接(有网络)共享给tap0

创建虚拟机


1
2
3
4
5
6
7
8
## 创建盘
qemu-img create -f raw centos.img 30G

## 启动虚拟机
qemu-system-x86_64.exe -name test -m 2048 -machine accel=hax -net nic -net tap,ifname=tap0 -cdrom e:/download/CentOS-7-x86_64-Minimal-1810.iso .\centos.img
## -m 2048 设置内存
## -machine accel=hax 加速
## -net nic -net tap,ifname=tap0 网络设置,tap0为上面创建的虚拟网卡

使用hax后,启动速度会快很多
但在win下,与virtualbox(vagrant)相比,管理起来不是很方便,最终放弃

参考文档

  1. https://www.cnblogs.com/bingzhu/p/10746102.html

在备份个人资料的时候,zip文件解压时中文出现乱码
网上搜索获得三个解决方案:

  1. 使用unzip -O选项
    但是大部分的发行版中的unzip软件都没有这个参数,至少debian是没有的

  2. 安装unzip-iconv
    源中都搜索不到这个软件

  3. 使用unar替代unzip(正确方案)

    1
    2
    sudo apt install unar
    unar -e utf8 xxx.zip

问题

今天看到一个mysql行转列的问题

表1 转换为 表2

表1

year month amount
2011 1 1.1
2011 2 1.2
2011 3 1.3
2011 4 1.4
2012 1 2.1
2012 2 2.2
2012 3 2.3
2012 4 2.4

表2

year m1 m2 m3 m4
2011 1.1 1.2 1.3 1.4
2012 2.1 2.2 2.3 2.4
阅读全文 »

erlang函数返回的几种方式

case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
case A of
true ->
case B of
true ->
case C of
true ->
ok;
false ->
error
end;
false ->
error
end;
false ->
error
end.

如果判断很多的话, 那么代码可读性就太差了

if

1
2
3
4
5
6
if
A -> ok;
B -> ok;
C -> ok;
true -> error
end

虽然代码看起来规整了,但是变量A,B,C必须先算出结果
性能是个问题

catch-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
test() ->
catch test_f1().
test_f1() ->
case A of
false -> throw(error);
_ -> ok
end,
case B of
false -> throw(error);
_ -> ok
end,
case C of
false -> throw(error);
_ -> ok
end.

如果test_1/0存在逻辑报错,也会被catch
需要手动在test/0再加判断

catch-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

-define(RETURN(Ret), throw({catch_return, Ret})).
-define(CATCH(A), mycatch(catch (A))).

mycatch({catch_return, Ret}) -> Ret;
mycatch({'EXIT', _Ret} = Catch) -> throw(Catch);
mycatch(Ret) -> Ret.

test() ->
?CATCH(
begin
case A of
false -> ?RETURN(error);
_ -> ok
end,
case B of
false -> ?RETURN(error);
_ -> ok
end,
case C of
false -> ?RETURN(error);
_ -> ok
end
end).

个人感觉这个比较好
catchcatch
throw的也throw