So Tired !_! 逆水行舟, 不进则退!

24Mar/20

pip下载库超时Connection to files.pythonhosted.org timed out问题解决(换源)

Posted by Nick Xu

1、国内镜像大全

阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

2、换源命令

临时:pip命令+ -i  +镜像地址。例如 pip install numpy -i https://mirrors.aliyun.com/pypi/simple/

永久:在更新到最新版本pip后,pip config set global.index-url+国内镜像地址,例如

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

Tagged as: , Comments Off
17Mar/20

ubuntu编译安装php7

Posted by Nick Xu

https://www.php.net/downloads.php

下载php7源码解压

下载 https://github.com/kkos/oniguruma 源码编译安装或者不使用mbstring的正则功能,即在“--enable-mbstring”后再添加“--disable-mbregex”参数。这样的配置将不再需要oniguruma库

./configure \
--prefix=/usr/local/php7 \
--exec-prefix=/usr/local/php7 \
--bindir=/usr/local/php7/bin \
--sbindir=/usr/local/php7/sbin \
--includedir=/usr/local/php7/include \
--libdir=/usr/local/php7/lib/php \
--mandir=/usr/local/php7/php/man \
--enable-zip \
--enable-pdo \
--enable-inline-optimization \
--enable-shared \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-pcntl \
--enable-sockets \
--enable-fileinfo \
--enable-filter \
--enable-soap \
--enable-session \
--enable-opcache \
--enable-fpm \
--disable-debug \
--disable-rpath \
--with-config-file-path=/usr/local/php7/etc \
--with-mysql-sock=/var/run/mysql/mysql.sock \
--with-mhash \
--with-openssl \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-gd \
--with-iconv \
--with-zlib \
--with-xmlrpc \
--with-gettext \
--with-curl \
--with-jpeg-dir \
--with-freetype-dir \
--with-fpm-user=php \
--with-fpm-group=php \
--with-pear=/usr/local/php7/bin

sudo make && make install

将/usr/local/php7加入环境变量
    
    增加php-fpm命令:
    sudo cp sapi/fpm/init.d.php-fpm /usr/local/php7/bin/php-fpm
    sudo chmod +x /usr/local/php7/bin/php-fpm
    
    初始化 PHP 和 PHP-FPM 的配置
    sudo cp php.ini-production /usr/local/php7/etc/php.ini
    sudo cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
    
    将PHP-FPM加入系统服务
    cp sapi/fpm/php-fpm.service   /etc/systemd/system/
    chmod +x /etc/systemd/system/php-fpm.service
    
    设置开机自启以及开启服务:
    systemctl enable php-fpm.service
    systemctl start php-fpm.service

 

 

Filed under: Linux, php Comments Off
7Nov/19

用Privoxy实现SOCKS代理转HTTP

Posted by Nick Xu

这段时间为了出去看看,陆陆续续的折腾各种穿墙术。今天开始折腾用Bitvise做代理,过程很简单,唯一的问题就是Bitvise只支持SOCKS和HTTPS协议,而像我的Lumia800或者同学的Surface只支持HTTP。所以需要用Privoxy来实现SOCKS转HTTP。
Privoxy的原理就是监听HTTP代理的端口,把数据转成SOCKS协议,再发给SOCKS代理端口。
Privoxy官网: http://www.privoxy.org/
下载安装后,找到Options > Edit Main Configurationg打开配置文件,找到

# forward-socks5 / 127.0.0.1:9050 .

,去掉#号注释,把后面的IP和端口号改为SOCKS的端口号。然后再找到

listen-address  127.0.0.1:8118

在这里可以修改HTTP代理的IP和端口号,如果只对本机服务,默认的127.0.0.1即可,要公开服务,可以填写0.0.0.0,这样局域网中所有用户都可以通过这台主机代理上网。
然后重启一下Privoxy,不出意外的话已经可以通过HTTP代理上网了。

Filed under: Linux Comments Off
30Oct/19

ECS无外网IP访问外网(NAT网关)

Posted by Nick Xu

说明
阿里云CentOS 7无外网IP的ECS访问外网,有两台以上ECS实例,其中只有一台分配了公网IP,无外网IP的ECS需要访问外网
1
自建NAT网关配置SNAT和DNAT转发规则
阿里云-NAT网关(推荐:需要外网访问内网时使用,绑定弹性公网IP,减少端口冲突)(要钱)

搭建NAT网关就是为了实现在相同VPC内,没有公网IP的ECS借助有公网的ECS访问外网,或者是外网通过端口映射访问到内网服务器。
SNAT:实现没有公网IP的ECS实例借助有公网的ECS访问外网,但是外网无法访问到内网IP;
DNAT:实现外网通过端口映射访问到内网服务器,但是不能实现内网ECS访问到外网。

自建NAT网关配置SNAT和DNAT转发规则
centos7 为例,在有公网的ECS(192.168.0.81)上操作:

设置SNAT规则
# 开启转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 生效
sysctl -p
# 配置iptables做SNAT:iptables -t nat -I POSTROUTING -s VPC的IP段 -j SNAT --to-source 有公网IP的ECS内网IP
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 192.168.0.81
# iptables规则重启会清空,永久生效,还需要保存在iptables配置文件中:
service iptables save
# 如果没有安装iptables
service iptables status #检查是否安装了iptables
yum install -y iptables #安装iptables
yum update iptables #升级iptables
yum install iptables-services #安装iptables-services
systemctl enable iptables.service # 设置防火墙开机启动
# 开启转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 生效
sysctl -p
# 配置iptables做SNAT:iptables -t nat -I POSTROUTING -s VPC的IP段 -j SNAT --to-source 有公网IP的ECS内网IP
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 192.168.0.81
# iptables规则重启会清空,永久生效,还需要保存在iptables配置文件中:
service iptables save
# 如果没有安装iptables
service iptables status #检查是否安装了iptables
yum install -y iptables #安装iptables
yum update iptables #升级iptables
yum install iptables-services #安装iptables-services
systemctl enable iptables.service # 设置防火墙开机启动
————————————————

设置VPC路由条目

阿里云 -> 专有网络 -> 管理 -> 路由表 -> 管理 -> 添加路由条目

设置DNAT规则
# 将192.168.0.81的公网 80 端口映射给192.168.0.82
# iptables -t nat -I PREROUTING -p tcp --dport 有公网IP的ECS端口号 -j DNAT --to 目标内网ECS的内网IP
# iptables -t nat -I POSTROUTING -p tcp --dport 有公网IP的ECS端口号 -j MASQUERADE
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.82
iptables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE
service iptables save
# 将192.168.0.81的公网 80 端口映射给192.168.0.82
# iptables -t nat -I PREROUTING -p tcp --dport 有公网IP的ECS端口号 -j DNAT --to 目标内网ECS的内网IP
# iptables -t nat -I POSTROUTING -p tcp --dport 有公网IP的ECS端口号 -j MASQUERADE
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.82
iptables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE
service iptables save
————————————————
前后端口映射不一致,需在/etc/sysconfig/iptables文件nat表的dnat转发规则(目标IP)后面,直接加特定的端口号就行:

重启iptables使规则生效:
systemctl restart iptables.service

参考:三步搭建VPC专有网络NAT网关,配置SNAT和DNAT规则
CentOS7安装iptables防火墙

阿里云-NAT网关
使用场景:

iptables规则冲突。如果ECS内安装了docker,docker自带的nat转发规则会有影响,需要合理的网段规划和路由规划。
外网端口占用过大,加上需要部署如:Rancher这种容器集群平台,还是推荐搭建使用阿里云-NAT网关,以绑定弹性公网IP的方式实现,这样就不需要占用ECS实例上的公网端口
————————————————

Filed under: Linux Comments Off
15Aug/19

pycurl libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

Posted by Nick Xu

export PYCURL_SSL_LIBRARY=openssl

pip install pycurl --compile --no-cache-dir --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include"

Tagged as: Comments Off
19Jun/19

红外遥控接收发射原理及ESP8266实现

Posted by Nick Xu

红外遥控是利用近红外光进行数据传输的一种控制方式。近红外光波长0.76um~1.5um,红外遥控收发器件波长一般为0.8um~0.94um,具有传输效率高,成本低,电路实现简单,抗干扰强等特点,在家用电器上被广泛使用。

红外遥控一般有发射和接收两部分组成,发射元件为红外发射管,接收一般采用一体化红外接收头,但发射载波频率与接收头固定频率需一致才能正确接收。

一、发射

1. 调制

红外遥控是以调制方式发射数据,将数据调制到固定的载波上发送,调制发送抗干扰能力更强,传送距离也更远。红外发送首先要解决的就是调制问题。

目前主流的调制方式有PPMPWM

  • PPM:脉冲位置调制,调制脉冲宽度不变,用脉冲间隔来区分01。如下图所示,脉冲宽度不变都是560us,脉冲间隔改变。逻辑1总时间为2.25ms,逻辑0中时间长度为1.12ms

 

1PPM调制

  • PWM:脉冲宽度调制,脉冲间隔不变,调制脉冲宽度改变。如下图所示,脉冲间隔
    600us,脉冲宽度不同。逻辑1高电平时间为1.2ms,逻辑0高电平时间为0.6ms

 

2PWM调制

调制载波频率一般在30KHz60KHz之间,常用的载波有33K36K36.6K38K40K56K等,其中38K使用最多。

常用占空比有1/31/21/3最多。

2. 红外传输协议

常用的红外传输协议有ITT协议、NEC协议、Nokia NRC协议、Sharp协议、Philips
RC-5
RC-6 RECS-80协议、Sony SIRC协议等,其中最常见的为NEC协议。

常见NEC协议分析:

载波38KHz,逻辑12.25ms,脉冲时间560us;逻辑01.12ms,脉冲时间560us

 

3NEC逻辑’0’与逻辑’1’

l 协议格式

 

4NEC红外载波发送协议

(1) 首先发送9ms的高电平脉冲

(2) 然后发送4.5ms的低电平

(3) 接下来是8bit的地址码(低位在前)

(4) 然后是8bit的地址反码,用于检验地址码是否出错

(5) 接下来的是8bit的命令码(低位在前)

(6) 然后是8bit的命令反码,用于检验命令码是否出错。

l 重复码

5NEC重复发送载波协议

如果一直按着一个键,将以110ms为周期发送重复码,重复码由9ms高电平、2.25ms低电平及560us高电平组成。

 

6NEC重复码

3. 编码

虽然不同协议都对各自的协议格式做了不同定义,但总体而言还是有高低电平组成的一串数据。

对于红外发射,就是按照协议规定高电平时间内,在红外输出口输出固定频率载波;低电平则直接输出低。红外接收头接到载波时输出高电平,没有载波时输出低电平,完成数据解码。

 

7NEC解码后协议

二、接收

红外接收常采用一体化红外接收头,集红外接收、放大、滤波、比较器输出等功能,并输出MCU可识别的TTL信号的。常用的一体化红外接收头有SCR638HS0038VS1838等。

      

SCR638

HS0038

8:一体化接收头

 

红外接收应用电路图:

9:红外接收典型应用

三、ESP8266红外发送与接收

ESP8266定义了1IR红外遥控接口,IR红外遥控接口由软件实现,接口定义如下:

10ESP8266红外管脚定义

1. 发送

ESP8266上用于发送的载波可以通过以下方式实现:

1) I2SBCK

2) WS管脚产生

3) GPIO中的sigma-delta功能在任意GPIO口产生载波。

其中sigma-delta产生的载波占空比约为20%,推荐使用MTMS管脚(GPIO14),可产生准确的38KHz且占空比为50%的标准方波。

2. 接收

红外接收功能通过GPIO的边沿中断实现,读取系统时间,将2次时间相减可以得到波形持续时间,然后通过软件逻辑实现红外协议处理。

 

Filed under: 嵌入式 Comments Off
15May/19

格力空调红外遥控器编码详解

Posted by Nick Xu

可以用于制作格力红外遥控器,这里边有它的编码定义。
格力小王子

一、基本信息:
型号:YB0F2
采用脉冲间距调制。

 

图1:示波器获取波形

 

报头脉冲:9ms
报头间距:4.5ms
载波频率:37.9KHz(38KHz)
码段1与码段2间距:20ms
“1”:脉宽,656us。间距,1640us。
“0”:脉宽,656us。间距,544us。

 

二、编码信息:
1-3位:模式
  • 送风:
图标:风扇。代码:110
  • 自动:
图标:循环箭头。代码:000
  • 除湿:
图标:水滴。代码:010
  • 制冷:
图标:雪花。代码:100
  • 制热:
图标:太阳。代码:001
4位(加68位):开机关机
开机:1
关机:068位取反。
5-6位:风速
一级:10
二级:01
三级:11
自动:00
73741(加65位):扫风
上下扫风110。第65位取反
左右扫风:101
上下左右:111
无扫风:000
8位:睡眠
睡眠:1
不睡眠:0
9-12位与65-68位:温度
制冷模式下:
温度
9-12位
65-68位
30
0111
1000
29
1011
0000
28
0011
1111
27
1101
0111
26
0101
1011
25
1001
0011
24
0001
1101
23
1110
0101
22
0110
1001
21
1010
0001
20
0010
1110
19
1100
0110
18
0100
1010
17
1000
0010
16
0000
1100
制热模式:
温度
9-12位
65-68位
30
0111
0010
29
1011
1100
28
1101
0100
27
1101
1000
26
0101
0000
25
1001
1111
24
0001
0111
23
1110
1011
22
0110
0011
21
1010
1101
20
0010
0101
19
1100
1001
18
0100
0001
17
1000
1110
16
0000
0110
吸湿模式:
温度
9-12位
65-68位
30
0111
0100
29
1011
1000
28
0011
0000
27
1101
1111
26
0101
0111
25
1001
1011
24
0001
0011
23
1110
1101
22
0110
0101
21
1010
1001
20
0010
0001
19
1100
1110
18
0100
0110
17
1000
1010
16
0000
0010
送风模式:
温度
9-12位
65-68位
30
0111
1100
29
1011
0100
28
0011
1000
27
1101
0000
26
0101
1111
25
1001
0111
24
0001
1011
23
1110
0011
22
0110
1101
21
1010
0101
20
0010
1001
19
1100
0001
18
0100
1110
17
1000
0110
16
0000
1010
13-20位:睡眠定时
时间
13-20位
0.5
10010000
1
00011000
1.5
10011000
2
00010100
2.5
10010100
3
00011100
3.5
10011100
4
00010010
4.5
10010010
5
00011010
5.5
10011010
6
00010110
6.5
10010110
7
00011110
7.5
10011110
8
00010001
8.5
10010001
9
00011001
9.5
10011001
10
01010000
10.5
11010000
11
01011000
11.5
11011000
12
01010100
12.5
11010100
13
01011100
13.5
11011100
14
01010010
14.5
11010010
15
01011010
15.5
11011010
16
01010110
16.5
11010110
17
01011110
17.5
11011110
18
01010001
18.5
11010001
19
01011001
19.5
11011001
20
00110000
20.5
10110000
21
00111000
21.5
10111000
22
00110100
22.5
10110100
23
00111100
23.5
10111100
24
00110010
0
00000000
21位:超强
超强:1
普通:0
22位:灯光
亮:1
灭:0
23位与25位:健康,换气
健康:10
换气:01
健康+换气:11
普通:00
24位:制冷模式下-干燥;制热模式下-辅热;
干燥:1
普通:0
45-46位:显示温度
不显示:00
显示:10
显示室内温度:01
显示室外温度:11
其他位:
除了293134位为“1”外,均为“0。其他位功能不详(遥控器无对应项)。
36位和69位分别是码段1和码段2的最后一位,无所谓“0”“1”。
三、其他说明
自动模式下只可以设置的项目有:风速123级、自动;上上下左右扫风;显示温度;灯光;睡眠定时(非睡眠)。其他项均不可以设置。此时温度不可设置,温度段的代码为:10011101

 

关机状态下,可以设置定时开机,代码与睡眠定时关机一样。也可以设置灯光。
制冷模式下,可以设置的项有:温度;扫风;健康换气,节能(仅在此状态下可以设置);风速;定时;超强;睡眠;灯光;温度显示。
除湿模式下,可以设置的项有:温度;扫风;健康换气;干燥;温度显示;定时;睡;灯光。
送风模式下,可以设置的项有:温度;风速;健康换气;扫风;温度显示;定时;灯光。
制热模式下,可以设置的项有:温度;风速;扫风;辅热;温度显示;定时;超强;睡眠;灯光。

 


MGQ 2012-04-14
1、 格力YB0F2红外信号命令格式

红外信号主要包括CMD1和CMD2两部分,其中CMD1包括35 位的命令 和一位停止位,CMD2包括32位的命令和一位停止位。
表格 1 CMD1
Bit:1~3
4
5~6
7
8
模式
开关机(CMD2 32bit取反)
风速
是否扫风
是否睡眠
9~12
13~16
温度
睡眠1
17~20
21
22
23
24
睡眠2
超强
灯光
健康
干燥/辅热
25
26
27
28
29
30
31
32
换气
0
0
0
1
0
1
0
33
34
35
0
1
0

 

表格 2 CMD2
Bit:1
2
3
4
5
6
7
8
上下扫风
0
0
0
左右扫风
0
0
0
9~10
11
12
13
14
15
16
显示温度
0
0
0
0
0
0
17
18
19
20
21
22
23
24
0
0
0
0
0
0
0
0
25
26
27
28
29~32
0
0
0
0
温度

 

Filed under: 单片机 Comments Off
12Apr/19

MySQL error: table is marked as crashed and should be repaired

Posted by Nick Xu

You may experience crashed MyISAM tables in MySQL from times to times, especially after a forced shutdown (kill -9) of MySQL or a crash of the entire server.

The errors will look like this in your logs. InnoDB has good crash recovery on its own and will probably never give you these errors as it self-repairs upon MySQL restart.

[ERROR] /usr/libexec/mysqld: Table './dbname/table_name' is marked as crashed and should be repaired
[ERROR] /usr/libexec/mysqld: Table './dbname/table_name' is marked as crashed and should be repaired
[ERROR] /usr/libexec/mysqld: Table './dbname/table_name' is marked as crashed and should be repaired

You can also find broken tables with the myisamchk tool that is provided by the MySQL server installation.

# myisamchk -s /var/lib/mysql/*/*.MYI
MyISAM-table '/var/lib/mysql/dbname/table_name.MYI' is marked as crashed and should be repaired

The above command will show you each table that is in need of repair.

If a table is reported as damaged, repair it with that same tool.

# myisamchk -r /var/lib/mysql/dbname/table_name.MYI

That solves the problem in most cases. If it doesn't, make sure to stop your webservice (so no new MySQL requests are being made), stop the MySQLd daemon itself and run the following command.

# myisamchk -r --update-state /var/lib/mysql/dbname/table_name.MYI

The --update-state tells MySQL to mark the table as "checked". Restart your MySQLd and webservice and you should be good go to.

If you're up for more mild reading, have a look at the good documentation of MySQL itself on MyISAM repairs.

 

 

Try running the following query:

repair table <table_name>;


mysqlcheck -r --all-databases -u root -p

Filed under: Linux, 数据库 Comments Off
21Mar/19

ubuntu下用python控制usbrelay设备

Posted by Nick Xu

安装:
https://github.com/walac/pyusb

然后参考网友提供的图片内容:

0x21,0x09,0x300,0x0000,[0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00]

中括号里前2个是主要控制参数,

第1个参数, 0xff是打开1个开关,0xfe是打开所有开关,0xfd是关闭1个开关,0xfc是关闭所有开关

第2个参数, 0x01对应第几个开关,当第1个参数是0xfe和0xfc时该参数无效

 

usbrelay-python

Filed under: Linux, Python Comments Off
15Mar/19

ubuntu12.04升级gcc至4.8

Posted by Nick Xu

gcc 4.8.1 是第一个完全支持C++11 的编译器,Windows上可以安装mingw版的,在sourceforge 上有下载,安装也比较方便。在Linux上安装的话需要首先安装一些依赖库。在Ubuntu12.04 lts默认安装的是gcc4.6.3,其实该版本也支持一些c++11的特性,可以通过增加“-std=c++0x” 编译选项来使用这些特性,但是对多线程库的支持较差,gcc 4.8.1 是通过ppa来安装的,因此需要安装ppa repository 。下面就来看一下安装步骤:

首先安装依赖:

sudo apt-get install libgmp-dev
sudo apt-get install libmpfr4 libmpfr-dev
sudo apt-get install libmpc-dev libmpc2
sudo apt-get install libtool
sudo apt-get install m4
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install autoconf

接下来进入到安装gcc4.8.1 的主要步骤:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

sudo apt-get install gcc-4.8
sudo apt-get install g++-4.8
sudo apt-get install gcc-4.8-multilib
sudo apt-get install g++-4.8-multilib
sudo apt-get install gcc-4.8-doc
sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20
sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-4.8 20
sudo update-alternatives –config gcc
sudo update-alternatives –config g++

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade

之后就可以使用了,通过使用gcc -v 命令可以查看当前gcc的版本是不是已经变成4.8了
---------------------
作者:ithewei
来源:CSDN
原文:https://blog.csdn.net/GG_SiMiDa/article/details/75127393
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

编译安装报错unrecognized command line option “-std=c++11” 无法识别的命令行选项“-std=c++11” 的解决办法

我们在使用linux系统编译安装报错unrecognized command line option “-std=c++11” 无法识别的命令行选项“-std=c++11” 的提示。出现这个编译错误的原因在g++ gcc 版本不够高。
解决方法:
更新gcc版本默认一般情况是4.4.7版本的gcc
命令查看:

#gcc -v

更新方法

1、下载压缩包进行编译安装

http://ftp.gnu.org/gnu/gcc/
这里是官网提供的下载地址
image.png

下面开始下载解压

wget  
tar -jxvf gcc-4.8.2.tar.bz2

image.png

2、下载供编译需求的依赖项

这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。

cd gcc-4.8.0
./contrib/download_prerequisites

3、建立一个文件夹

mkdir gcc-build-4.8.2
cd gcc-build-4.8.2

4、生成Makefile文件

../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

5、编译安装

make && make intsall

6、检验
image.png

尝试写一个C++11特性的程序段 tryCpp11.cc,使用了shared_ptr

 1 //tryCpp11.cc 
 2 #include <iostream> 
 3 #include <memory> 
 4  
 5 int main() 
 6 { 
 7     std::shared_ptr<int> pInt(new int(5)); 
 8     std::cout << *pInt << std::endl; 
 9     return 0;
 10 }

验证文件:

g++ -std=c++11 -o tryCpp11 tryCpp11.cc
./tryCpp11

 

Filed under: Linux Comments Off
site
site