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

19Aug/20

解决python3.7与openssl的低版本不兼容的问题

Posted by Nick Xu

安装了Python3.7之后,遇到的一个很麻烦的坑就是与系统自带的ssl版本不兼容, Python3.7需要的openssl的版本为1.0.2或者1.1.x,这个requirements在config Python3.7的时候使用“--with-ssl”选项会报出。

  1. Could not build the ssl module!
  2. Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().

Linux系统默认的openssl版本通常是:OpenSSL 1.0.1,可以使用命令查询系统的openssl版本:

openssl version

当前版本低于Python3.7的需求,会导致一些运行错误,比如pip3 install命令的失败,故需要进行openssl版本升级。

(1)下载较高版本的openssl


https://www.openssl.org/source/openssl-1.1.1g.tar.gz (2)解压安装包

tar -xvzf openssl-1.1.1g.tar.gz

(3)编译安装

  1. cd openssl-1.1.1g
  2. ./config --prefix=/usr/local/openssl no-zlib # 新版openssl将安装在/usr/local/openssl目录下
  3. make
  4. make install

这样的话,新版本的openssl已经安装完毕,但是需要进行一些环境配置才能够继续使用。

来到/usr/bin目录下,可以发现已经有一个openssl可执行文件,这个就是系统自带的低版本,这里我们对它进行一个备份。

(4)备份原openssl配置

备份是个好的习惯,至少在安装新版本出错的时候可以回滚旧版本继续使用。

  1. mv /usr/bin/openssl /usr/bin/openssl_bak # backup
  2. mv /usr/include/openssl/ /usr/include/openssl_bak

(5)备份好之后就可以为新版openssl配置软连接了

  1. # 将安装好的openssl的openssl命令软连到/usr/bin/openssl
  2. ln -s /usr/local/openssl/include/openssl /usr/include/openssl
  3. # 软链到升级后的libssl.so
  4. ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so
  5. # 将安装好的openssl命令软连到/usr/bin/openssl
  6. ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

(6)最后再修改下系统配置即可

  1. # 写入openssl库文件的搜索路径
  2. echo "/usr/local/openssl/lib" >> /etc/ld.so.conf # 需要root权限
  3. # 使修改后的/etc/ld.so.conf生效
  4. ldconfig -v

(7)验证安装结果

 

第二步:安装 LibreSSL

从 LibreSSL 官网 http://www.libressl.org/ 下载源代码。此处使用“libressl-2.8.2.tar.gz”。

 

以此执行以下命令安装:

#wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.8.2.tar.gz
#tar xzvf libressl-2.8.2.tar.gz
#cd libressl-2.8.2
#./config
#make
#make install

 

此时再验证 OpenSSL 版本,如下:

#openssl version
LibreSSL 2.8.2
Filed under: Linux, Python Comments Off
18Aug/20

常用基本AT指令

Posted by Nick Xu

常用基本AT指令

 

命令
作用

AT
测试连接是否正确

ATE0
关闭回显。程序初始化AT部分首先关闭回显。

ATE1
打开回显。使用超级终端测试命令时打开。

AT+CGMI
得到厂商信息

AT+CGMR
得到手机版本号

AT+CGSN
得到手机序列号(IMEI)

AT+CIMI
得到手机IMSI号码

AT+CSCS
获取、设置手机当前字符集。可设置为GSM或UCS2

AT+CBC
获取手机电量

AT+CCLK
获取设置手机时钟

AT+CNUM
机身号码。分为线路一和线路二

AT+CSQ
当前信号

AT+COPS
网络营运商

AT+CSCA
短信中心号码

以上这些指令都用于与手机连接的时候初始化用。取得手机IMEI及IMSI可以给使程序支持更多的手机连接

并且保持数据独立。

短信部分

 

命令
作用

AT+CPMS
选择短信储存地点。可选择ME(SIM卡)和MT(机身)

AT+CMGL
列出指定状态的短信息的PDU代码

AT+CMGR
列出指定序号的短信息PDU代码

AT+CMGS
发送短信

AT+CMGD
删除指定的短信

AT+CMGF
短信格式。分为Text模式和PDU模式

AT+CNMI
设置新短消息通知电脑端

AT+CSCA
短信中心

以上命令是短消息部分最经常使用的命令。

一、一般命令
 AT+CGMI给出模块厂商的标识。
 AT+CGMM获得模块标识。这个命令用来得到支持的频带(GSM900,DCS1800或PCS1900)。当模块有多频带时,回应可能是不同频带的结合。
 AT+CGMR获得改订的软件版本。
 AT+CGSN获得GSM模块的IMEI(国际移动设备标识)序列号。
 AT+CSCS选择TE特征设定。这个命令报告TE用的是哪个状态设定上的ME。ME于是可以转换每一个输入的或显示的字母。这个是用来发送、读取或者撰写短信。
 AT+WPCS设定电话簿状态。这个特殊的命令报告通过TE电话簿所用的状态的ME。ME于是可以转换每一个输入的或者显示的字符串字母。这个用来读或者写电话簿的入口。
 AT+CIMI获得IMSI。这命令用来读取或者识别SIM卡的IMSI(国际移动签署者标识)。在读取IMSI之前应该先输入PIN(如果需要PIN的话)。
 AT+CCID获得SIM卡的标识。这个命令使模块读取SIM卡上的EF-CCID文件。
 AT+GCAP获得能力表。(支持的功能)
 A/ 重复上次命令。只有A/命令不能重复。这命令重复前一个执行的命令。
 AT+CPOF关机。这个特殊的命令停止GSM软件堆栈和硬件层。命令AT+CFUN=0的功能与+CPOF相同。
 AT+CFUN设定电话机能。这个命令选择移动站点的机能水平。
 AT+CPAS返回移动设备的活动状态。
 AT+CMEE报告移动设备的错误。这个命令决定允许或不允许用结果码“+CMEERROR:<xxx>”或者“+CMSERROR:<xxx>”代替简单的“ERROR”。
 AT+CKPD小键盘控制。仿真ME小键盘执行命令。
 AT+CCLK时钟管理。这个命令用来设置或者获得ME真实时钟的当前日期和时间。
 AT+CALA警报管理。这个命令用来设定在ME中的警报日期/时间。(闹铃)
 AT+CRMP铃声旋律播放。这个命令在模块的蜂鸣器上播放一段旋律。有两种旋律可用:到来语音、数据或传真呼叫旋律和到来短信声音。
 AT+CRSL设定或获得到来的电话铃声的声音级别。
二、呼叫控制命令
 ATD拨号命令。这个命令用来设置通话、数据或传真呼叫。
 ATH挂机命令。
 ATA接电话。
 AT+CEER扩展错误报告。这个命令给出当上一次通话设置失败后中断通话的原因。
 AT+VTD给用户提供应用GSM网络发送DTMF(双音多频)双音频。这个命令用来定义双音频的长度(默认值是300毫秒)。
 AT+VTS给用户提供应用GSM网络发送DTMF双音频。这个命令允许传送双音频。
 ATDL重拨上次电话号码。
 AT%Dn数据终端就绪(DTR)时自动拨号。
 ATS0自动应答。
 AT+CICB来电信差。
 AT+CSNS单一编号方案。
 AT+VGR
 AT+VGT增益控制。这个命令应用于调节喇叭的接收增益和麦克风的传输增益。
 AT+CMUT麦克风静音控制。
 AT+SPEAKER喇叭/麦克风选择。这个特殊命令用来选择喇叭和麦克风。
 AT+ECHO回音取消。
 AT+SIDET侧音修正。
 AT+VIP初始化声音参数。
 AT+DUI用附加的用户信息拨号。
 AT+HUI用附加的用户信息挂机。
 AT+RUI接收附加用户信息。
三、网络服务命令
 AT+CSQ信号质量。
 AT+COPS服务商选择。
 AT+CREG网络注册。获得手机的注册状态。
 AT+WOPN读取操作员名字。
 AT+CPOL优先操作员列表。
四、安全命令
 AT+CPIN输入PIN。
 AT+CPIN2输入PIN2。
 AT+CPINCPIN的剩余的尝试号码。
 AT+CLCK设备锁。
 AT+CPWD改变密码。
五、电话簿命令
 AT+CPBS选择电话簿记忆存储。
 AT+CPBR读取电话簿表目。
 AT+CPBF查找电话簿表目。
 AT+CPBW写电话簿表目。
 AT+CPBP电话簿电话查询。
 AT+CPBN电话簿移动动作。这个特殊命令使电话簿中的条目前移或后移(按字母顺序)
 AT+CNUM签署者号码。
 AT+WAIP防止在下一次重起时初始化所有的电话簿。
 AT+WDCP删除呼叫电话号码。
 AT+CSVM设置语音邮件号码。
六、短消息命令
 AT+CSMS选择消息服务。支持的服务有GSM-MO、SMS-MT、SMS-CB。
 AT+CNMA新信息确认应答。
 AT+CPMS优先信息存储。这个命令定义用来读写信息的存储区域。
 AT+CMGF优先信息格式。执行格式有TEXT方式和PDU方式。
 AT+CSAS保存设置。保存+CSAS和+CSMP的参数。
 AT+CRES恢复设置。
 AT+CSDH显示文本方式的参数。
 AT+CNMI新信息指示。这个命令选择如何从网络上接收短信息。
 AT+CMGR读短信。信息从+CPMS命令设定的存储器读取。
 AT+CMGL列出存储的信息。
 AT+CMGS发送信息。
 AT+CMGW写短信息并存储。
 AT+CMSS从存储器中发送信息。
 AT+CSMP设置文本模式的参数。
 AT+CMGD删除短信息。删除一个或多个短信息。
 AT+CSCA短信服务中心地址。
 AT+CSCB选择单元广播信息类型。
 AT+WCBM单元广播信息标识。
 AT+WMSC信息状态(是否读过、是否发送等等)修正。
 AT+WMGO信息覆盖写入。
 AT+WUSS不改变SMS状态。在执行+CMGR或+CMGL后仍保持UNREAD。
七、追加服务命令
 AT+CCFC呼叫继续。
 AT+CLCK呼叫禁止。
 AT+CPWD改变追加服务密码。
 AT+CCWA呼叫等待。
 AT+CLIR呼叫线确认限制。
 AT+CLIP呼叫线确认陈述。
 AT+COLP联络线确认陈述。
 AT+CAOC费用报告。
 AT+CACM累计呼叫计量。
 AT+CAMM累计呼叫计量最大值。
 AT+CPUC单价和货币表。
 AT+CHLD呼叫相关的追加服务。
 AT+CLCC列出当前的呼叫。
 AT+CSSN追加服务通知。
 AT+CUSD无组织的追加服务数据。
 AT+CCUG关闭的用户组。

 

 

AT命令交互之-COPS选择营运商

模块默认一般都可以自动搜网注册,比如移动的就注册到移动,联通的就注册到联通。但是在不同的国家多网覆盖的使用情况下,有时候就算使用了自动搜网注册网络,也会出现注册不上网络的现象,这时候就需要使用手动搜网然后选择一个运营商进行强制注册。

 

1.AT+COPS命令说明

image.png

  1. 上面格式里面,stat这个值比较重要,他会直接告诉我们哪些运营商可用。
  2. <stat>
  3. 0 未知
  4. 1 可用
  5. 2 当前
  6. 3 禁用
  7. <oper>
  8. 运营商名称,根据 format 给出
  9. <mode>
  10. 0 自动注册 (忽略<format> <oper> 参数)
  11. 1 手动注册
  12. 2 强制注销
  13. 3 只设置格式
  14. 4 先手动再自动
  15. <format>
  16. 0 长字符格式<oper>
  17. 1 短字符格式<oper>
  18. 2 数字格式<oper>
  19. <AcT> 接入技术
  20. 0 GSM
  21. 1 GSM COMPACT
  22. 2 UTRAN
  23. 1. 配置命令选择并注册 GSM 网络营运商。<mode>设置 ME 是自动选择营运商<oper>,还是使用该命
  24. 令强制选择营运商<oper>
  25.  当<mode>=0 时,ME 将自动尝试选择可使用的运营商。
  26.  当<mode>=1 时,ME 将强制注册选择的<oper>运营商,若该运营商无效则当前 ME 不会搜索
  27. 其他可用运营商,直到<mode>=0 时 ME 才会重新注册网络。如果 ME 重启后仍然在<mode>=1
  28. 下且没有 RPLMN 的话,ME 会保持在不注册网络的状态直到使用命令改变成自动注册模式。
  29.  当<mode>=4 时,若手动选择运营商不可用,ME 会自动选择当前网络中可用运营商继续尝试注
  30. 册。
  31. 2. 该命令设置成功后会自动保存。

2.AT+COPS=?搜网

1.模块未插入SIM卡

我们想使用AT+COPS=?进行搜网,这时会有两种情况,一种是模块没插入卡,返回如下:

 

image.png

如上面所示,没插卡的时候返回的运营stat都是1,都是可以用运营商。

2.模块插入指定运营商的SIM卡

现在插入电信卡,在进行搜网操作

image.png

可以看到虽然返回了三个运营商,但是只有电信的stat是1,其他两个stat都是3,forbidden。

3.AT+COPS=设置网络

1.手动设网,已知要设置的网络

  1. 1.强制注销网络 AT+COPS=2,2
  2. 2.设置要使用的网络 AT+COPS=1,2,"46001",2
  3. 3.设置查询格式 AT+COPS=3,2 数字型
  4. 4.查询当前运营商 AT+COPS?

image.png

2.手动设网,未知要设置的网络

  1. 1.设置格式 AT+COPS=3,0 长字符型
  2. 2.查询可用运营商 AT+COPS=?
  3. 3.强制注销网络 AT+COPS=2,2
  4. 4.设置要使用的网络 AT+COPS=1,2,"46001",2
  5. 5.设置查询格式 AT+COPS=3,2 数字型
  6. 6.查询当前运营商 AT+COPS?

image.png

 

联通2G基本退网了

 

 

查询命令:AT+CGREG?
返回:+CGREG:<n>,<stat>[,<lac>,<ci>]   OK

参数  取值 说明
n  [0] 禁用网络注册非请求结果码+CGREG:
[1] 启用网络注册非请求结果码
[2] 启用网络注册和位置信息非请求结果码+CGREG:<stat>[,<lac>,<ci>]

<stat> [0] 未注册;ME 当前没有搜索注册业务的新运营商
[1] 已注册,本地网
[2] 未注册,但ME 正在搜索注册业务的新运营商
[3] 注册被拒绝
[4] 未知
[5] 已注册,漫游

<lac> 字符型;2 位十六进制位置区代码(比如:00C3相当于十进制中的195)
<ci> 字符型;2 位十六进制小区编号

Filed under: 其它 Comments Off
17Aug/20

pyenv 让 python 版本完美切换

Posted by Nick Xu

前言

我觉得如果使用 python 开发的话,还是在 unix/linux 的环境下吧,shell 工具的效率比 windows 高得多,尽管 windows 下也有 cmder 这种神器,而且现在 windows store 也很好的开发出了 linux 子系统,但是瑕疵非常多,unix/linux 才是完美的环境。本文用到的是 archlinux ,另外 debian/ubuntu、centos 也完全适用。mac 用户也可以参考,不过 homebrew 也提供了非常方便的安装方法,但是建议使用文本做法。

背景

python 版本比较多,2 和 3 相差非常大,很多项目需要跑在同一台服务器上,我们可以选择直接运行,也可以选择使用 docker。如果用 docker 那就不需要隔离环境了,如果要直接运行在服务器上,那就必须有隔离环境。比如有的项目使用 python 3.5,有的项目使用 python 3.7,此时我们可以借助 pyenv 帮助我们完美的隔离环境,让多个版本的 python 没有任何冲突,完美共存。

任务

使用 pyenv 和 pyenv-virtualenv ,在 linux 下完美隔离 python 各个版本

第 1 章:使用环境

请注意,接下来所有的操作都在 archlinux 下进行,本文不涉及 windows

清单

  1. git
  2. zsh 或者 bash
  3. pyenv
  4. pyenv-virtualenv

1、安装 git

在各大 linux 的发行版下安装 git 都非常简单,此处只展示部分示例

archlinux

sudo pacman -S git

debian/ubuntu

sudo apt-get install git

centos

sudo yum install git

2、开启终端

本文使用 zsh

3、安装 pyenv

说明:本文的所有安装都严格遵守官方文档,与官方文档完全保持一致。

git 地址:https://github.com/pyenv/pyenv

在你的终端中执行如下命令,安全无毒,请放心食用:

首先把项目克隆下来,放在家目录下的隐藏文件夹中:.pyenv

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

然后配置环境变量

如果你使用 bash,就依次执行如下命令:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc

如果你使用 zsh,就依次执行如下命令:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc

echo 命令的含义是:将引号中内容写入某文件中
请注意,以上的三条 echo 命令的最后一条长长的命令,请你保证它引号中的内容处于 ~/.bashrc 或者 ~/.zshrc 的最底部。
因为在 pyenv 初始化期间会操作 path 环境变量,导致不可预测的行为。
查看文件的底部内容,可以使用 tail 命令,用法:tail ~/.bashrc 或者 tail ~/.zshrc,编辑文件可以使用 vim 或者 vscode

最后,在使用 pyenv 之前,重新初始化 shell 环境,执行如下命令

exec $SHELL

不执行该命令也是完全可以的,你可以关闭当前的终端窗口,重新启动一个就可以了。

此时,你已经完成了 pyenv 的安装了,你使用可以它的全部命令了,但是我建议你先别急着用,一口气装完 pyenv 的一个插件,那就是 pyenv-virtualenv

4、安装 pyenv-virtualenv

git 地址:https://github.com/pyenv/pyenv-virtualenv

把插件克隆在刚才已经安装完毕的 pyenv 的 plugins 文件夹中

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

然后配置环境变量

如果你使用 bash,就执行如下命令:

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc

如果你使用 zsh,就执行如下命令:

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

最后,在使用 pyenv 之前,重新初始化 shell 环境,执行如下命令

exec $SHELL

不执行该命令也是完全可以的,你可以关闭当前的终端窗口,重新启动一个就可以了。

到此,我们的所有重要安装已经全部完成了,可以开始体验了。

第 2 章:使用 pyenv

此处仅仅展示 pyenv 和 virtualenv 的日常用法

检查安装是否正确

检查 pyenv 的版本

pyenv version

查看 pyenv 已经托管了哪些 python 版本

pyenv versions

如果你看到了正常的版本信息,就说明可以了,如果看到了类似于 command not found 之类的,就说明安装失败了。

安装 3.6.6 版本的 python

pyenv install 3.6.6

这里有个问题,某些情况下会安装失败,报错就告诉你 Build failed

这个时候,pyenv 已经在它的 github wiki 里面为我们准备了一篇错误应对方案,原文地址 https://github.com/pyenv/pyenv/wiki

大意如下,只需要执行对应的命令即可:

archlinux 用户

sudo pacman -S base-devel openssl zlib

mac 用户

brew install openssl readline sqlite3 xz zlib

Ubuntu/Debian/Mint 用户

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev

CentOS/Fedora <= 21 用户,请你保证已经安装了 xz 工具

sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel

Fedora >= 22 用户,请你保证已经安装了 xz 工具

sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel

openSUSE 用户

zypper install gcc automake openssl-devel ncurses-devel readline-devel zlib-devel tk-devel

Solus 用户

sudo eopkg it -c system.devel

sudo eopkg install git gcc make zlib-devel bzip2-devel readline-devel sqlite3-devel openssl-devel tk-devel

Linuxbrew 用户

brew install bzip2 openssl readline sqlite xz

安装完这些补充的工具之后,再次执行:

pyenv install 3.6.6

就可以成功了,你可以不断的使用

pyenv versions

来查看被 pyenv 托管的 python 版本

而且你想装什么版本就装什么版本,想装几个装几个,都是完美共存,完美隔离,你可以在终端里输入

pyenv install

然后按下 tab 键,就可以看到所有可选的安装版本了

使用刚才安装的 python 3.6.6

首先我们需要明确一个概念,pyenv 和 pyenv-virtualenv 他们是如何协作的,你可以这么认为:

pyenv 托管 python 版本,virtualenv 使用 python 版本

好了,之前已经装好了版本,那么现在就来使用吧

第 1 步:创建虚拟环境

首先需要创建一个虚拟环境,执行命令:

pyenv virtualenv 3.6.6 my-env

它的格式就是这样固定的,最后一个是你自己想要的环境的名字,可以随便取。稍等片刻,你将会看到:

Looking in links: /tmp/tmp0eywgc7v
Requirement already satisfied: setuptools in /home/joit/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (39.0.1)
Requirement already satisfied: pip in /home/joit/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (10.0.1)

类似于这样的回显信息,说明环境已经创建成功了,它还告诉了你,该虚拟环境的绝对路径,如果你进去看了,你就会发现,所谓的虚拟环境,就是把 python 装在 pyenv 的安装目录的某个文件夹中,以供它自己调用。

第 2 步:激活虚拟环境

在任意目录下,执行命令:

pyenv activate my-env

你会发现,在你的终端里面,多了一个类似于 (my-env) 这样的一个东西,这时候你如果执行:

python --version

那就是 python 3.6.6 了

如果你执行:

pip --version

它会告诉你 pip 包安装的绝对路径,也是 pyenv 安装目录下的某个文件夹

如果你关掉了终端,那么下次启动你又得重新激活一次了,你可以使用如下命令:

首先 cd 到某一个目录,比如 ~/test

cd ~/test

然后在该目录下执行:

pyenv local my-env

你会发现已经被激活了,那么 local 命令和刚才有啥不同呢。如果你执行:

ls -al

你就会发现,在 ~/test 目录下,有个隐藏文件 .python-version,你可以看到这个文件里面,只写了一句话 my-env

这样你只要进入 ~/test 目录,就会自动激活虚拟环境

在虚拟环境下,你如果直接执行

python

就会进入到 python 的交互环境

如果你写了一个文件,名字叫做 app.py ,里面的内容只有一句代码:print(1)

然后执行:

python app.py

这时候,系统就会调用虚拟环境中的 python 解释器来执行这些代码了

第 3 章:更新 pyenv

由于我们是 git 克隆的,所以更新非常简单

cd ~/.pyenv 或者 cd $(pyenv root)
git pull

第 4 章:卸载 pyenv

由于 pyenv 把一切都放在 ~/.pyenv 下了,所以卸载很方便,两个步骤就行了

首先你需要删除环境变量

然后你需要执行:

rm -rf ~/.pyenv 或者 rm -rf $(pyenv root)

作者:JoiT
链接:https://www.jianshu.com/p/3e93311fe6cb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Tagged as: , Comments Off
24Mar/20

homebrew安装和解决brew安装速度慢的问题

Posted by Nick Xu

homebrew安装

ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

解决brew安装速度慢的问题(替换homebrew镜像源)

1.替换brew.git:

cd $(brew --repo)
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git

2.替换homebrew-core.git:

cd $(brew --repo)/Library/Taps/homebrew/homebrew-core
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git

3.终端输入命令:

echo $SHELL 看输出结果是/bin/zsh还是/bin/bash

  • /bin/zsh替换homebrew-bottles:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc
  • /bin/bash替换homebrew-bottles:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile

4.恢复homebrew国内镜像源配置

  • 重置brew.git
cd $(brew --repo)
git remote set-url origin https://github.com/Homebrew/brew.git
  • 重置homebrew-core.git
cd $(brew --repo)/Library/Taps/homebrew/homebrew-core
git remote set-url origin https://github.com/Homebrew/homebrew-core.git
  • 重置homebrew-bottles
将刚添加到~/.bash_profile文件的语句注释掉即可

解决brew安装包一直卡在Updating Homebrew

运行命令brew install node,结果界面一直卡在Updating Homebrew上,有两种解决办法

方法一:关闭brew每次执行命令时的自动更新(推荐)

vim ~/.bash_profile
# 新增一行
export HOMEBREW_NO_AUTO_UPDATE=true

方法二(懒人方法):

出现Updating Homebrew的时候ctrl+c一下就行
Tagged as: Comments Off
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 \
--with-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 \
--enable-gd \
--with-iconv \
--with-zlib \
--with-xmlrpc \
--with-gettext \
--with-curl \
--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
14Feb/20

Mac 环境将 Socks 代理转 Http 代理

Posted by Nick Xu

安装 polipo

sudo port install polipo

快速使用

$ polipo socksParentProxy=localhost:1080

配置文件方式启用

 

# vi ~/.poliporc

socksParentProxy =127.0.0.1:1080″
socksProxyType = socks5
proxyAddress = "::0"        # both IPv4 and IPv6
# or IPv4 only
# proxyAddress = "0.0.0.0"
proxyPort = 8123

运行

$ polipo -c ~/.poliporc

测试

$ curl --proxy http://127.0.0.1:8123 https://www.google.com

配置开机自启动

参考链接:mac环境下开机自启动Shell脚本

参考链接

hg使用代理,向.hgrc的末尾添加以下内容:

   [hostfingerprints]
   vim.googlecode.com=c2:8a:1e:9c:a8:00:be:02:4c:2a:53:60:2b:09:50:d8:ee:5c:bc:68        
   [http_proxy]
   host=127.0.0.1:8087
   [web]
   cacerts = /etc/ssl/certs/ca-certificates.crt
Filed under: Mac OS Comments Off
24Dec/19

适合跑步的心率区间是什么?

Posted by Nick Xu

你好,关于“适合跑步的心率区间是多少?”这个问题我们先从什么是心率开始说起。

心率是指心脏在一定时间内跳动的次数,也就是在一定时间内,心脏跳动快慢的意思。

接下来我们通过几个小步骤来完成适合你跑步区间的心率测算:

1、了解自己的最大心率和安静心率,从而确定你的心率波动范围。

2、判断当前心率值处于什么区间,是高还是低,由此来把握训练强度的大小。

3、将安静心率与最大心率填入你手表的“个人设置”中,将各区间百分比数值设置正确。

4、在比赛前,将“心率区间”添加到你手表的数据页面中。在比赛时,“心率区间”是最重要的监测指标,需要时刻关注——全马比赛将其保持在3.0以下,半马比赛保持在4.0以下。

具体方法如下:

1、测量最大心率与安静心率

不同的人,心率高低可以互相比较吗?

——不可以。

最大心率就是用220-年龄来计算吗?

——不是。

maf180训练法适合马拉松跑者吗?

——适合,但不是最好的方法。

实际上,单纯的心率数据,是没有太多的训练指导意义的。因为你并不清楚,这个数值究竟是高了还是低了,更有意义的数值是“心率区间”。

所以,你首先要了解自己的最大心率和安静心率,从而确定你的心率波动范围。

(1)测量安静心率

安静心率很好理解,就是静止不动时的最低心率。测量方法如下:

选择一天睡眠充足的早晨,起床后站在床边,静止1分钟。1分钟之后,跑表上显示出的心跳数值,就是你的安静心率。

这里需要注意的是,我们跑步是站着跑的,所以安静心率也需要站着来测量。

(2)测量最大心率

很多人见过“220-年龄”这个最大心率的计算公式,但不清楚这只是学术研究用来写论文的,不能用在真正的跑步指导中。

最大心率数据必须通过实际跑测来获得,测试方法如下:

630-600配速800米,

原地休息2分钟。

600-530配速800米,

原地休息2分钟。

530-500配速800米,

原地休息2分钟。

500-430配速800米,

原地休息2分钟。

430-400配速800米,

原地休息2分钟。

400-330配速800米,

原地休息2分钟。

330-300配速800米,

原地休息2分钟。

300-230配速800米。

要注意的是,不用把所有配速组跑完,当本组已经跑到你的9成力时,最后加速冲刺跑完本组,完成测试即可。

除了操场跑圈之外,还有跑步机测试、坡度测试等方法,大家可以自行查找资料来学习。

每次测试并不一定都会成功,测试效果会受到体能疲劳、气温、精神兴奋度等因素影响。所以,建议跑力相近的跑者组团一起测试,更容易“逼出”最大心率。一般来说,比赛的时候,我们都会更兴奋,心率容易升高,所以在5公里、10公里测试中,也可能更容易跑出最大心率。

对一般的跑步爱好者来讲,最大心率测试是比较安全的。人体自我有较强保护机制,800米跑虽然速度快,但最后冲刺的距离较短,还没到生理极限,觉得呼吸不过来时,大脑就会命令你停下。所以更多时候,我们会因为自我保护机制太强大,测不出实际的最大心率。

但对于有心脏、血压类疾病的人,或是长期缺乏运动、体质较弱的人,出于安全考虑,建议用原地跑的方式来测试最大心率,或是先以过去跑到过的最大心率值为准。

2、划分好心率区间

当你知道了自己的心率高点和低点之后,就可以判断当前心率值处于什么位置,是高还是低,由此来把握训练强度的大小。

丹尼尔斯博士的储备心率法,正是将我们的心率范围划分成5个区间,由此来判断当前的训练强度以及效果。

这五个区间分别是E轻松跑(Easy zone)、M马拉松配速跑(Marathon zone)、T乳酸阈值强度(Threshold zone)、A无氧耐力区间(Anaerobic zone)、I最大摄氧强度(Interval zone)。(注:A强度是徐国峰老师后续补充加入的)

其中,E、M为有氧区间,A、I为无氧区间,T为无氧有氧过渡区间。

(1)E强度:轻松跑

E心率区间:【(最大心率-安静心率)*59%+安静心率,(最大心率-安静心率)*74%+安静心率】

E跑也就是我们俗称的“慢跑”,也是LSD的配速。那么,何谓“慢”呢?就是需要将心率保持在上述区间内。

E跑是有氧能力的基础,所有的业余跑者,都应该从E心率开始练起,并且在跑了一段时间后,不要急着加速,而是适当将距离加长。

在E心率区间内的长期训练,可以帮助我们打下扎实的有氧基础,并且提高肌肉端燃脂有氧的能力,增强心脏收缩的力量,并使肌纤维变得强韧,避免受伤。

对马拉松跑者而言,平时训练,E跑30分钟以上才会有训练效果,但最长也需要不超过2.5小时。

(2)M强度:马拉松配速

M心率区间:【(最大心率-安静心率)*74%+安静心率,(最大心率-安静心率)*84%+安静心率】

M跑是马拉松跑,M跑可以帮助我们模拟全马比赛强度、提升掌握配速的能力。

M跑的训练效果与E跑相似,但它的强度比E跑更大,单次训练时间建议不要超过110分钟。

M心率区间是我们全马比赛时应当参照的心率区间。换句话说,当你在跑全马比赛时,监控心率,就是需要将心率尽量维持在M区间值的峰值以内。(即使最后冲刺时会超出M区间,也要格外留心,关注体感变化)。

在你跑崩之前,你的心率一定会先崩,只是你没有察觉、没有概念,或者压根没有重视。

我们跑步监测心率,一是为了保证安全,二是为了确保成效。当你理解了马拉松的本质是一项有氧运动,你就会明白,只有将心率控制在有氧范围内(也就是M强度以下),才能安全、顺利、漂亮地完成一场全马赛事。

(3)T强度:乳酸阈值强度

T心率区间:【(最大心率-安静心率)*84%+安静心率,(最大心率-安静心率)*88%+安静心率】

T跑很特别,它是无氧与有氧的过渡区间,在这个区间里,乳酸生成的速度与排除的速度相当。

所以,当我们经常训练T跑,乳酸临界速度会提升,利用乳酸供能的能力会提高,有氧区间也会跟着扩大,进而提升我们的有氧运动表现。

T跑相当于我们的半马配速。即便是高手,也最多只能连续跑60分钟,顶尖选手的半马成绩是在60分钟左右,这也是侧面的印证。

这也意味着,当你跑半马的时候,如果想在安全范围内跑出更好的成绩,就需要监控心率维持在T区的上限以下。

换句话说,假使你跑半马时,不管心率,一路狂飙到T区以上,那后果要么是掉速,要么是跑晕,反正跑崩是必然。

(4)A强度:无氧耐力

A心率区间:【(最大心率-安静心率)*88%+安静心率,(最大心率-安静心率)*95%+安静心率】

A跑可以当做5-10公里的比赛配速。它的主要训练目的是让身体学会从乳酸过量恢复到有氧区间的能力。

它的训练效果与I跑相似,对于从没有跑过间歇跑的跑者,跑A强度的间歇跑就可以有效提升最大摄氧量。

(5)I强度:最大摄氧强度

I心率区间:【(最大心率-安静心率)*95%+安静心率,(最大心率-安静心率)*100%+安静心率】

I跑就是我们通常说的“亚索800”训练,可以用来当做3-5公里配速。

它的训练目的是为了刺激最大摄氧量,提升跑步经济性。同时,I跑也是锻炼意志力的好时机,因为你必须在心率飚到高峰值时,咬牢坚持到底,这也是出效果的关键所在。

3、跑步监控心率区间

(1)设置好手表参数

很多跑者虽然有心率装备,但是不知道该怎么用好它。

当你测量好安静心率与最大心率后,将它们填入你手表的“个人设置”中,并选择“基于储备心率百分比”,然后将各区间百分比数值设置正确,这样你就可以用手表来做训练指导。

另外,在比赛前,将“心率区间”添加到你手表的数据页面中。在比赛时,“心率区间”是你最重要的监测指标,需要时刻关注——全马比赛将其保持在3.0以下,半马比赛保持在4.0以下。

我们要知道,心率是一个被动指标,它不仅受到运动剧烈程度的影响,还与气温、坡度、身体疲劳指数等因素直接相关。

就像今年的上海半马、伦敦马拉松,之所以有这么多人出现不适,与气温偏高有很大关系。

在这样的赛况下,如果你还按照平时的配速来跑,心率必然会飘高,甚至会高到无氧区。所以,有经验的跑者就会选择降速,而其本质就是要维持心率在目标区间范围内。

天意难为,赛况是无法人为控制的。我们能做的,就是在现有的赛况下“尽人力”,将心率维持在目标区间内,这既是为了安全顺利完赛,也是为了跑出理想成绩。

(2)守住有氧底线

E、M、T、A、I这五个心率区间,既是日常训练时保证效果的强度标准,也是比赛时在确保安全的前提下,获得好成绩的监测标准。

其中,有氧区间的E跑和M跑是关键的基石,尤其是E跑。安心练好有氧跑,你就可以顺利完成马拉松赛,并且成绩不会太差。

无氧区间的A跑和I跑是进阶的练习,进阶的前提是你的有氧基础已经打得足够扎实,否则练了无氧速度,也是空中楼阁。

乳酸阈值区间的T跑是耐力提升的窍门,可以让我们能更好地适应、利用和排除乳酸。

从体感上讲,E跑是最舒适的,I跑是最痛苦的。当我们跑步处于A和I心率区间时,乳酸和各种代谢副产物迅速积累,呼吸急促,分分钟想放弃。

在日常跑步中,我们一旦进入无氧区间后会很痛苦,想要慢下来,就像我们都很讨厌的800米跑一样。

但是,切换到比赛中,当我们被心中强烈的完赛目标所驱动,被赛道旁热烈的加油声所鼓动,甚至强大的意志力、兴奋的肾上腺素,会让我们忽视了肉体的痛苦,任由心率在高位盘旋,那后果将很可能是:体力不支,抽筋,跑崩,甚至出现不幸的意外。

这也是为何明明是有氧运动的马拉松项目,心率本不应该那么高,不该是那么剧烈的运动,却在赛道上多次发生猝死的意外。

因此,想要知道自己适合跑步的心率区间是多少,可以按照上面给出的方法尝试一下哦。

 

 

 

 

 

想在秋季获得收获,此前的汗水必不可少。距离比赛前的3个月/12周是马拉松备战的黄金期,能否实现目标全看这几个月的执行了——在汇总并解读这些训练计划之前我们依然要强调几点:

  • 靠谱的训练计划一定是针对个体当下情况和未来现实(时间/目标)情况,订制的。即,你可以根据自己实际调整计划,而不用刻意按部就班的照着训练;
  • 马拉松是一项较高风险的运动,不要轻易去“越级”。我们建议具备轻松完成半马的选手去尝试挑战马拉松、全马具备4小时实力的选手去尝试突破330,而非直接越级去追求太远的目标;
  • 接下来高温多雨的夏季会为跑步造成不少困扰,建议跑者选择合适的训练装备,多关注心率等运动数据,出现训练伤病或感冒等疾病,请务必调整或终止训练计划;

理论上,一个训练计划执行度能达到85%,即是一个非常不错的完成度了。

训练计划解读

  • 跑的更慢一些

要知道,即便是川内优辉这样的精英级选手,平日里他依然会花大量时间去「慢慢跑步」,而不是大量的高频速度训练。马拉松本质上依然是一项有氧运动,身体消耗的能量99%来自你的有氧系统。所以对目标完赛的新人而言,并没有太多必要去进行太多导致大量乳酸堆积的训练;

  • 不要过量训练

跑的过于频繁也是不可取的。全马新手往往过于担心自己的训练量是否满足需要,但即便训练量普遍较高的日本跑者,他们依然会花大量的时间去休息和调整,以让自己身体恢复。切记好的训练一定是训练+休息共同组成,跑的太过频繁除了让自己可能增加受伤风险、降低训练质量外,未必最终一定就能跑的更好。

对多数马拉松爱好者而言,每周跑3-4次即可。

  • 重视每一次慢跑的热身/冷身

无论接下来进行何种强度的训练,每次跑步前都至少需要15-20分钟时间让自己热身,完成训练后也尽量慢慢停下来,认真做好拉伸/冷身才算训练正式结束。

计划中提到的训练内容——

有氧慢跑:一般距离不超过16公里,强度约储备心率*的62%-75%。

长距离跑:一般指超过26公里的跑步训练,为了提升耐力,为全马距离做准备。强度约为储备心率的65%-75%。

中长距离跑:18-26公里之间,配速与长距离跑接近。

马拉松配速跑:训练中很大一部分距离以目标马拉松配速完成。

乳酸门槛跑/节奏跑:训练中有超过20分钟是以乳酸阈值配速进行的节奏跑,目标提高乳酸阈值,帮助提升跑马拉松时的比赛配速。强度一般在储备心率的77-88%。

恢复跑**:配速轻松的放松慢跑,加速身体恢复,为下次训练作准备。

XT/rest:休息或者非跑步的其它运动,但强度不要太高。

最大摄氧/间隙(VO2Max):间歇跑总距离不长,强度很大,场地也尽量选择操场或环形封闭公路。

*注:心率作为衡量训练强度的主要参数,其中储备心率=最大心率-静息心率。

最大心率:网上有诸多最大心率的计算方式,建议可以搜索一下,选择其中较为接近的结果取平均值。这里提供一个计算公式作为参考:最大心率=217-(0.85x年龄);

静息心率:早上醒来后别起床,靠床上坐一分钟,让身体和思维放空,此时测量出的心率数值,大体就是静息心率了;

储备心率的比例百分比再加上静息心率,即训练要求的目标心率区间。

一些有氧/恢复跑中的ST指冲刺跑,一般在有氧或者恢复跑后进行,每组100米指前70米加速,后30米减速,不要求像百米冲刺那样尽力,加速跑时留意下跑姿,做针对性的纠正。

  • 安全完成马拉松训练计划

这是一份12周(3个月)、针对马拉松新手的训练计划——开始这个训练计划前,希望跑者已经完成过半程马拉松,或具备了跑完半马(21.0975公里)的实力。

  • 马拉松破4训练计划

相比轻松完成马拉松,跑进4小时对绝大多数人而言都需要更为系统的训练。除了有氧能力的继续加强,也增加了最大摄氧量训练和节奏跑这样偏速度的练习。

在跑量方面也有增加——考虑到接下来夏季普遍高温天及多雨水,跑者可以根据具体情况适当删减。但每月达到至少200公里跑量,依然是比较建议的。

  • 马拉松跑进330计划

马拉松完赛计划的月跑量接近200公里,破4训练计划的月跑量接近240公里,成就330计划的月跑量并不只是再次增加而已,它要求在保证训练“量”的同时,“质”是更值得注意的一个点。即,只是单纯的堆跑量未必就能实现目标,过于超纲的训练强度亦不会是成功保障。

这份计划里,心率、配速或时间都可以作为训练的参照——如果你已经具备跑进4小时或者3小时45的水准,相信已经对自己不同强度下心率/配速或者时间有了一定了解。后面我们也以心率这个对每个人最客观的数据,谈一下在比赛中如何通过心率制定参赛策略。

训练计划由有氧、马拉松配速、间歇、节奏、中距离、长距离等组成,每份合格的训练计划理应针对不同个体量身定做,所以你可以结合自己的时间和习惯做调整。有些人每周跑3-4次,有些人会跑5-6次,也有人有足够条件一天多练——这都是正常的情况,并不意味着强行要去采用统一的安排。但是切记每周的较高强度训练间,确保至少两天时间是XT/rest、有氧或恢复跑这样低强度的训练,避免负荷过大带来潜在伤病。

更高强度也意味着身体需要更多休息,3个月的备战是训练黄金期,也是调整身体状态的必要期,饮食、睡眠和对肌肉关节的放松按摩与训练一样重要。

全程马拉松比赛策略

  • 热身

如果只是为了跑完马拉松,赛前热身并非是重头戏——你可以用比赛开始后的几公里作为热身的一部分,也为了避免浪费体能。而对于进阶跑者而言,及早进入比赛状态就是件很重要的事情。

热身应该安排在赛前30-40分钟,慢慢进行5分钟的热身跑,而后将配速达到6分/公里,热身跑完后进行10分钟的拉伸,包括对腿部肌肉的按摩、放松肩膀,随后再进行一次5分钟的热身跑,这次要求达到比赛配速(全马4小时配速约为5分40/公里),再进行拉伸调整。

热身也是检查比赛装备的最后机会,比如号码簿是否佩戴平整,鞋带和鞋垫是否需要调整松紧,等等。

  • 前半程

很多跑者知道,想完成马拉松目标,匀速是很关键的。但客观上跑者的跑步经济性会随着运动时间的推移变得更差。所以比赛中的配速很难以全程匀速去执行。

前面两公里可以考虑比目标配速慢20-30秒/公里,如今马拉松都会安排兔子,但多数比赛参赛选手诸多,可能你在比赛发枪时与兔子保持较远距离,即便这样也不要过于焦急的去追兔子。比赛开始前虽然经过热身,但身体未必在最佳状态,比赛一开始就跑得太快,身体也会消耗过多的糖原储备并堆积过多的乳酸。

对很多有经验的马拉松选手而言,42公里的比赛,可能前5公里都是一个调整期——今天的比赛状态如何,是否应该调整比赛策略和目标,都会在跑完前5公里后根据身体反馈来更改。

如果一切顺利,5公里之后你应该就会处于很好的比赛状态,按照目标配速前行。

  • 最后十公里

有句话叫,马拉松是32公里的热身外加最后10公里的发挥。从半程到32公里是段容易产生疲惫感的距离,但还有最后10公里要完成。比赛进行到这个时候,掉速变得很常见,其中主要原因未必只是你身体没有能力维持配速,还包括注意力开始不集中。

在最后十公里,尽量跟住兔子或者配速较为一致的选手同步行进,随着不断接近终点,告诉自己“还有5公里”或者“只剩下15分钟了”也将非常有激励作用。

另外切记一点,无论是否口渴,后半程每个补水点都应该补充适当的水分,直到最后一公里。

对进阶选手而言,如何通过心率掌控比赛

我们知道全程马拉松想跑进330,42公里平均配速要达到4分55秒左右——比赛中选手实际跑过的距离往往要比42.195公里多出2、3百米,且经过补给站也容易出现速度下降的情况,实际跑步的配速兴许还要更快一些。

每个人都有自己的跑步节奏和补给习惯,可能同样是目标330的选手,他们也未必全程都是一前一后的。这里给出一种以最大心率比例为参考的策略。

留意配速的同时关注自己心率,可以获知当下处于的状态——可能为了达到目标而过快的消耗体能,还是一切尽在掌握能超预期的发挥?

  • 0-3公里

比赛前需要充分的热身,确保比赛开始后心率能平稳进入有氧心率区间,并在3公里完成时接近最大心率的75%-80%。

  • 4-21公里

维持心率在最高心率的75%-80%,尽量不要超过84%。过高的心率非常容易导致过早消耗。留意心率的同时,确保配速稳定,避免忽快忽慢。

  • 22-30公里

心率可维持在最高心率的80%-85%。

  • 31-39公里

心率可维持在最高心率的85%左右。此时随着跑步时长的进行,你可能会意识到心率略有提升但配速并未有增长(或者说,维持配速的同时,心率也会有一定提升)。在马拉松最艰苦的赛段,你的跑步效率会出现下降,这是很正常的情况。

  • 39-42公里

尚有余力或力争最后阶段“冲击”一下成绩的选手,往往此时会选择咬牙加速。注意此时的心率也尽量不要超过92%,也需要特别留意把能量均匀消耗到终点,不要贸然提速。相比漫长的42公里,最后几百米的冲刺未必对成绩有太大影响,匀速且微笑着冲线吧!

Filed under: 其它 Comments Off
5Dec/19

小米小白摄像头云台版无法更新固件

Posted by Nick Xu

之前买的小米的米家的 小白智能摄像机 摄像头 1080P云台版

之前用的好好的,前不久,无法正常升级固件了:

进去了固件升级页面

当前版本:3.3.6_2018061418

最新版本:3.3.6_2018121218

升级后,还是旧版本

更郁闷的是:监控界面中

(此刻已断点,所以是离线)

反应非常迟钝:

点击摄像头移动方向,结果半天才反应

而且录制存储的历史视频,也是点击了半天才能看,而且很卡顿,不流畅。

之前是正常的。

最近这,无法升级,也不能正常使用。

想办法去解决。

看到

使用帮助中有个我要的:无法在线升级了怎么办

摄像机获取失败/黄灯常亮/无法在线升级怎么办?

您好,出现此问题可以尝试使用SD卡升级,具体方法如下:

1、使用读卡器将Micro-SD卡与电脑连接

2、在电脑端打开链接: http://cdn.cnbj2.fds.api.mi-img.com/chuangmi-cdn/product/ipc004/firmware/IPC004_3.3.6_2018061418.zip

3、下载固件文件:IPC004_3.3.6_2018061418.zip,下载成功后右击鼠标,选择“解压到当前文件夹”,点击进入文件夹

4、将 tf_recovery.img文件(不要解压)复制到Micro-SD卡里,不要放在任何文件夹下

5、摄像机断电->插入Micro-SD卡->摄像机插上电

6、此时摄像机 “黄灯常亮”,持续亮大概2分钟

7、升级成功后,设备自动启动,进入摄像机设置-通用设置-检查固件更新:版本号:3.3.6_2018061418

注:Micro-SD卡升级成功后,卡中的升级包名称,也会变更为:tf_recovery.img.bak

即,用SD卡升级。

所以去拔出摄像头的SD卡(注意:SD卡在摄像头 黑色的圆圈的下面一点,让摄像头方面向上调整,就看到了)

然后接着去想办法去通过SD卡升级固件

之前看到是:

当前版本:3.3.6_2018061418

最新版本:3.3.6_2018121218

此处提示的是:

http://cdn.cnbj2.fds.api.mi-img.com/chuangmi-cdn/product/ipc004/firmware/IPC004_3.3.6_2018061418.zip

不是最新版,试试最新版的地址:

http://cdn.cnbj2.fds.api.mi-img.com/chuangmi-cdn/product/ipc004/firmware/IPC004_3.3.6_2018121218.zip

能否下载,是可以的,下载后,解压得到:

好不容易,找了个micro sd卡读卡器,插上后,mac识别无法支持,所以去格式化为FAT:

然后拷贝进去tf_recovery.img:

即可。

然后放回到摄像头中,去重新上电,看看是否可以正常升级

的确常亮黄灯了:

稍等一下,然后

就正常使用了,可以正常快速的移动摄像头方向了:

去看了看固件版本也是最新的了:

当前版本:3.3.6_2018121218

存储卡也是正常的:

后记:

搜:

http://cdn.cnbj2.fds.api.mi-img.com

基本概念 · Xiaomi Galaxy FDS Doc

http://docs.api.xiaomi.com/fds/basic-concept.html

cnbj2

北京2区

北京-金山云

cnbj2

cnbj2.fds.api.xiaomi.com

cdn.cnbj2.fds.api.mi-img.com

-》

是金山云的cdn的存储

http://cdn.cnbj2.fds.api.mi-img.com/cdn/aqara/documents/Aqara_Product_Brochure.pdf

MI home security camera 360 (MIXJ04CM) – Page3 – Mi Gadgets – Xiaomi MIUI Official Forum

https://en.miui.com/thread-4999422-3-1.html

好像最新版本是:

http://cdn.cnbj2.fds.api.mi-img.com/chuangmi-cdn/product/ipc003/firmware/IPC003_3.4.5_2019010211.zip

-》不一定是适配当前相机的,

看到了,自己此处的地址:

http://cdn.cnbj2.fds.api.mi-img.com/chuangmi-cdn/product/ipc004/firmware/IPC004_3.3.6_2018121218.zip

中:

product=ipc004

上面的是:

product=ipc003

所以不是我们要的

试了试部分的地址直接打开,是不行的

http://cdn.cnbj2.fds.api.mi-img.com ipc004

小米智能摄像机云台版为何不能更新 – 小米社区官方论坛

http://bbs.xiaomi.cn/t-35016196

XIAOMI MIJIA 360 720P I THINK ITS BRICK. – Page2 – Mi Gadgets – Xiaomi MIUI Official Forum

https://en.miui.com/thread-1491166-2-1.html

关于米家智能摄像机在Android手机获取信息失败和苹果手机-1000问题 – 小米社区官方论坛

http://www.hfsgcjs.com/6727/t-34807300-u227177747

【总结】

对于此处的

小白智能摄像机 摄像头 1080P云台版

从产品中的帮助:

右上角设置-》使用帮助-》摄像头获取失败/黄灯常亮/无法在线升级失败怎么办?

摄像机获取失败/黄灯常亮/无法在线升级怎么办?

您好,出现此问题可以尝试使用SD卡升级,具体方法如下:

1、使用读卡器将Micro-SD卡与电脑连接

2、在电脑端打开链接: http://cdn.cnbj2.fds.api.mi-img.com/chuangmi-cdn/product/ipc004/firmware/IPC004_3.3.6_2018061418.zip

3、下载固件文件:IPC004_3.3.6_2018061418.zip,下载成功后右击鼠标,选择“解压到当前文件夹”,点击进入文件夹

4、将 tf_recovery.img文件(不要解压)复制到Micro-SD卡里,不要放在任何文件夹下

5、摄像机断电->插入Micro-SD卡->摄像机插上电

6、此时摄像机 “黄灯常亮”,持续亮大概2分钟

7、升级成功后,设备自动启动,进入摄像机设置-通用设置-检查固件更新:版本号:3.3.6_2018061418

注:Micro-SD卡升级成功后,卡中的升级包名称,也会变更为:tf_recovery.img.bak

得知升级流程。

而从产品固件升级失败的页面可以看到最新版本是:3.3.6_2018121218

所以下载地址是:

http://cdn.cnbj2.fds.api.mi-img.com/chuangmi-cdn/product/ipc004/firmware/IPC004_3.3.6_2018121218.zip

下载后,解压得到tf_recovery.img

放到sd卡根目录,插上,上电,等一会,就好了。

去看看最新版本,果然是最新的:3.3.6_2018121218

备注说明:

(1)其他不同型号的摄像头的产品编号和固件升级地址

Filed under: 其它 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
site
site