0%

centos7.* 安装 python3,pip3

yum安装方式

添加epel源

1
yum install epel-release

安装Python3.4

1
python34

安装pip3

1
2
yum install python34-setuptools
easy_install-3.4 pip

之后就可以使用pip3

1
pip3

源代码编译安装此方法兼容保留Python2共存

安装依赖环境

1
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

查看最新的Python版本

浏览器打开 https://www.python.org/ftp/python/ 查看最新的Python版本,标记为3.A.B

1
wget https://www.python.org/ftp/python/3.A.B/Python-3.A.B.tgz

创建Python3的目录

1
mkdir /usr/local/python3

解压下载文件并切换目录

1
2
3
tar -zxvf Python-3.A.B.tgz

cd Python-3.A.B

执行

1
2
./configure --prefix=/usr/local/python3
make && make install

创建Python3的软链接

1
ln -s /usr/local/python3/bin/python3 /usr/bin/python3

创建Pip3的软链接

1
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

测试命令 python3 和 pip3

1
2
python3
pip3

总体安装 3.6.6的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
yum -y install gcc automake autoconf libtool make
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
mkdir /usr/local/python3
tar -zxvf Python-3.6.6.tgz
cd Python-3.6.6
./configure --prefix=/usr/local/python3
make && make install
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
python3 -V
pip3 -V

稍作修改就变成了 2.7 的安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
wget https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
tar vxf Python-2.7.6.tgz
cd Python-2.7.6
./configure --prefix=/usr/local
make && make install
/usr/local/bin/python2.7 -V
mv /usr/bin/python /usr/bin/python2.6.6
ln -s /usr/local/bin/python2.7 /usr/bin/python
python -V
#sed -i "s/#!//usr//bin//python/#!//usr//bin//python2.6.6/g" /usr/bin/yum
wget https://bootstrap.pypa.io/ez_setup.py -O - | python
easy_install pip
rm -rf /usr/bin/{pip,pip2}
ln -s /usr/local/bin/pip /usr/bin/pip
ln -s /usr/local/bin/pip /usr/bin/pip2
#vim /usr/bin/yum
# 将文件头部的
# #!/usr/bin/python

# 改成
# #!/usr/bin/python2.6.6

我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:

1:我们这边是否关机不影响日本那边的程序运行。(不会像以前那样,我们这网络一断开,或一关机,程序就断掉或找不到数据,跑了几天的程序只能重头再来,很是烦恼)

2:不影响计算效率

2:让程序在后台跑后,不会占据终端,我们可以用终端做别的事情。

&

在您执行的程序后面加上 &,可以把当前命令放到后台执行,但是退出终端的时候,当前程序会退出

1
watch  -n 10 sh  test.sh  &  #每10s在后台执行一次test.sh脚本

ctrl + z

可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

jobs

查看当前有多少在后台运行的命令

jobs -l选项可显示所有任务的PIDjobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell`` 从当前的shell`环境已知的列表中删除任务的进程标识。

nohup

nohup最简单暴力,让程序使用在后台执行,就算关闭了当前的终端也执行(&是做不到的)。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)。

1
ps -aux | grep "test.sh"  #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分

setsid

nohup 通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点

1
2
setsid ping blog.yahui.wang
ps -ef |grep blog.yahui.wang

输出

1
2
xxx    77335      1  0 13:13 ?        00:00:00 ping www.ibm.com
xxx 77445 77359 0 13:14 pts/2 00:00:00 grep --color=auto www.ibm.com

值得注意的是,它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID。可以自己动手将此例与nohup 例中的父 ID 做比较。体会更多。

disown

如果事先在命令前加上 nohup 或者 setsid 就可以避免 HUP 信号的影响。但是如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响呢?这时想加 nohup 或者 setsid 已经为时已晚,只能通过作业调度和 disown 来解决这个问题了。

在我们的日常工作中,我们可以用 CTRL-z 来将当前进程挂起到后台暂停运行,执行一些别的操作,然后再用 fg 来将挂起的进程重新放回前台(也可用 bg 来将挂起的进程放在后台)继续运行。这样我们就可以在一个终端内灵活切换运行多个任务,这一点在调试代码时尤为有用。因为将代码编辑器挂起到后台再重新放回时,光标定位仍然停留在上次挂起时的位置,避免了重新定位的麻烦。

1.用disown -h jobspec 来使某个作业忽略HUP信号。
2.用disown -ah 来使所有的作业都忽略HUP信号。
3.用disown -rh 来使正在运行的作业忽略HUP信号。

需要注意的是,当使用过 disown 之后,会将把目标作业从作业列表中移除,我们将不能再使用jobs来查看它,但是依然能够用ps -ef查找到它。

但是还有一个问题,这种方法的操作对象是作业,如果我们在运行命令时在结尾加了”&”来使它成为一个作业并在后台运行,那么就万事大吉了,我们可以通过jobs命令来得到所有作业的列表。但是如果并没有把当前命令作为作业来运行,如何才能得到它的作业号呢?答案就是用 CTRL-z(按住Ctrl键的同时按住z键)了!

CTRL-z 的用途就是将当前进程挂起(Suspend),然后我们就可以用jobs命令来查询它的作业号,再用bg jobspec 来将它放入后台并继续运行。需要注意的是,如果挂起会影响当前进程的运行结果,请慎用此方法。

screen

我们已经知道了如何让进程免受 HUP 信号的影响,但是如果有大量这种命令需要在稳定的后台里运行,如何避免对每条命令都做这样的操作呢?

此时最方便的方法就是 screen 了。简单的说,screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。screen 的参数很多,具有很强大的功能,我们在此仅介绍其常用功能以及简要分析一下为什么使用 screen 能够避免 HUP 信号的影响。

使用 screen 很方便,有以下几个常用选项:

  • 用screen -dmS session name 来建立一个处于断开模式下的会话(并指定其会话名)。
  • 用screen -list 来列出所有会话。
  • 用screen -r session name 来重新连接指定会话。
  • 用快捷键CTRL-a d 来暂时断开当前会话。

参考:
Linux 技巧:让进程在后台可靠运行的几种方法

htop是一个Linux进程监视工具,它是top命令的替代工具,它是Linux和Unix操作系统中的标准和默认进程监视工具。但是CentOS 7上的htop更易于用户使用,并且与Linux的top命令相比,输出更容易阅读。
在本教程中,我们将学习如何使用yum install命令和epel存储库在CentOS 7上安装htop。
在CentOS 7上安装htop我们想添加CentOS epel版本库,因为htop软件包没有默认的CentOS yum版本库。

安装Epel版本

首先,启用CentOS 7上的epel版本。

1
sudo yum -y install epel-release

用Yum命令安装htop

现在我们可以使用yum install命令安装CentOS htop。

1
sudo yum -y install htop

现在开始htop程序,打开Linux终端并键入htop

您可以看到htop过程监控工具的输出更具可读性,易于理解。

总结:htop CentOS 7

在本教程中,我们使用epel存储库在Linux CentOS 7上安装了htop。

首先,我们启用epel-release,然后使用yum命令安装htop(没有epel-release,您将收到以下错误“No package htop available”)。

我们也可以用同样的方法在CentOS 6.5及以前的版本上安装htop。

附:编译方式安装Htop

1
2
3
4
5
6
# 安装GCC 和编译Linux内核的库
yum install -y gcc ncurses-devel
wget http://sourceforge.net/projects/htop/files/latest/download
tar -zxf download
cd htop-1.0.2
./configure && make && make install

这里我们要介绍下 acme.sh ,它实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证.”,今天我们就要用到acme.sh的这个DNS验证来获得Let’s Encrypt免费证书以便在七牛云里使用。

获取Let’s Encrypt免费证书

首先你需要一个VPS来运行acme.sh这个脚本,然后照着【使用acme.sh快速部署生成Let’s Encrypt免费证书】一文里的相关教程用DNS验证方法来申请Let’s Encrypt免费证书,对国内的DnsPod和CloudXNS支持是最好的,明月正好用的是DnsPod,于是获得马上登陆CloudXNS获得API KEY和SECRET KEY,键入下面的命令:

export DP_Id="40279"
export DP_Key="f2ad63666b3ec9da28fe6f6274ae72b8"

这样就可以让acme.sh脚本使用域名解析服务商的API来做DNS验证域名所有权了。(吐槽一下:原来域名解析服务商的API还有这个好处呀,汗!)
然后继续键入如下命令:

acme.sh --issue --dns dns_dp -d yahui.wang -d blog.yahui.wang

因为明月用的是二级域名,所以就不用指定主域名了,我用的是如下的命令:

acme.sh --issue --dns dns_dp -d blog.yahui.wang

其中的pic.example.com就是你要申请证书的二级域名,这里也可以理解为是需要绑定到七牛云空间的域名。
因为需要验证TXT记录啥的,所以键入上述命令后会提示需要120秒等待时间,时间完成后就获得了这个域名的SSL证书了,为了保险期间明月强烈建议将这个域名证书文件copy到一个比较安全和自由的目录里,acme.sh默认保存的不容易获取。
可以使用如下命令来copy证书文件到指定目录:

acme.sh --installcert -d mydomain.com \
--key-file /etc/nginx/ssl/mydomain.key \
--fullchain-file /etc/nginx/ssl/mydonain.cer \

上述里面的mydomai.com和domain修改为申请的域名,文件路径根据自己的情况指定即可。

至此,Let’s Encrypt免费证书申请获取完成了。记得下载SSL证书文档到本地以便在七牛里导入这个证书,证书文档分别是.key和.cer文件。

七牛云里使用Let’s Encrypt免费证书

登陆七牛云控制面板后,在“SSL证书管理”里点击“上传自由证书”。

输入“证书备注名”
“证书内容”即为.cer文件的内容,使用类似EditPlus即可打开,只需要复制后粘贴到“证书内容”即可。
“证书私钥”即为.key文件的内容,使用类似EditPlus即可打开,只需要复制后粘贴到“证书私钥”即可。

然后,点击“确定上传”即完成了七牛云导入Let’s Encrypt免费证书。

在七牛云的绑定域名管理里选择要使用https的域名,点击“升级到HTTPS”,

如果域名和上传的证书匹配,在那么就可以在下拉框里选择证书后提交即可

总结

今天明月也是收获不少再次叹服一下acme.sh的强大和Let’s Encrypt的免费,因为有了他们我们草根博客站长们也可以使用看着很“高大上”的https了,并且还是“免费”的,这个很重要。看来全民HTTPS时代真的是来临了!

Senparc.Weixin.MP高度集成了对接微信相关API的调用逻辑,并且官方有较为完整的示例代码,所以我们第一步接入站点,几乎是傻瓜式的。

注册开放平台账号并且开通第三方服务功能

点击创建第三方平台

如图所示

填写资料

如同所示

Clone代码

github

配置站点

Senparc.Weixin.MP提供了NetCore 2.0等版本的项目例子,这里我们以 src\Senparc.Weixin.MP.Sample\Senparc.Weixin.MP.Sample里的代码为例。

Web.config

修改web.config里的代码,如果所示

修改web.config里的代码,如果所示

Controller

OpenController里的用于示例的域名http://sdk.weixin.senparc.com改为自己的域名

运行调试项目

需要注意的是 微信每10分钟 发送一次Notice到你的站点上,你的站点需要有通知到之后才可以做发起授权的操作。

关于React Native的详细介绍我就不叙述了,他是使用js构建原生app的开发框架。一次编码多平台运行,非常强大。但是个人不喜欢js的过于灵活(弱类型)的语法。强大的强类型语言Typescript(简称TS)是我的首选,他可以编译成JavaScript,编译成的JavaScript代码可读性很好,但是这不是关键,关键是TS开发和调试效率极高。
但是React Native官方是使用js的开发的,如果如果使用TS开发React Native的关键是transformer
eact-native结合的关键是使用转换器

初始化项目

1
2
3
react-native init YahuiApp
cd YahuiApp
yarn add --dev react-native-typescript-transformer typescript @types/react @types/react-native

用vscode打开 添加配置文件

配置Typescript

新建文件 tsconfig.json内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"compilerOptions": {
"module": "es2015",
"target": "es2015",
"moduleResolution": "node",
"jsx": "react-native",
"noImplicitAny": true,
"experimentalDecorators": true,
"preserveConstEnums": true,
"sourceMap": true,
"watch": true,
"allowSyntheticDefaultImports": true
},
"filesGlob": [
"src/**/*.ts",
"src/**/*.tsx"
],
"exclude": [
"index.android.js",
"index.ios.js",
"build",
"node_modules"
]
}

新建文件 tslint.json 内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{
"rules": {
"class-name": false,
"comment-format": [
true,
"check-space"
],
"indent": [
true,
"spaces"
],
"no-duplicate-variable": true,
"no-eval": true,
"no-internal-module": true,
"no-trailing-whitespace": true,
"no-unsafe-finally": true,
"no-var-keyword": true,
"one-line": [
true,
"check-open-brace",
"check-whitespace"
],
"quotemark": [
true,
"double"
],
"semicolon": [
true,
"always"
],
"triple-equals": [
true,
"allow-null-check"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"variable-name": [
true,
"ban-keywords"
],
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
}

配置React Native Packager

根目录新建rn-cli.config.js文件 内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
    module.exports = {
getTransformModulePath() {
return require.resolve('react-native-typescript-transformer');
},
getSourceExts() {
return [ 'ts', 'tsx' ]
}
};
<!-- 修改package.json 文件 的scripts start
"scripts": {
"start": "react-native start --transformer node_modules/react-native-typescript-transformer/index.js --sourceExts ts,tsx",
"test": "jest"
}, -->

编写代码

在 src文件夹里新建main.tsc文件
代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    import React, { Component } from "react";
import {
StyleSheet,
Text,
View
} from "react-native";

interface Props {

}

interface State {

}

export default class App extends Component<Props, State> {
render() {
return (
<View style={styles.container}>
<Text style={styles.text}>
Welcome to React Native!
</Text>
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: "#F5FCFF",
} as React.ViewStyle,

text: {
fontSize: 20,
textAlign: "center",
margin: 10,
} as React.TextStyle,
});
AppRegistry
import {
AppRegistry,
} from 'react-native';
import App from "./src/main";

AppRegistry.registerComponent('YahuiApp', () => App);

至此 您的使用TS开发React Native的项目环境搭建好了

最终代码在:https://github.com/YahuiWong/react-native-typescript 如果觉得有用,请Star

转载请注明出处:https://blog.yahui.wang/2017/08/26/react-native-typescript-init-debug/

查询端口映射情况

netsh interface portproxy show v4tov4
查询这个IP所有的端口映射。
netsh interface portproxy show v4tov4|find “192.168.1.1”

增加一个端口映射

netsh interface portproxy add v4tov4 listenport=外网端口 listenaddress=主IP connectaddress=私网IP connectport=私网IP端口
例如:
netsh interface portproxy add v4tov4 listenport=8888 listenaddress=118.123.13.180 connectaddress=192.168.1.10 connectport=2222

删除一个端口映射

netsh interface portproxy delete v4tov4 listenaddress=主IP listenport=外网端口
例如:
netsh interface portproxy delete v4tov4 listenaddress=118.123.13.180 listenport=8888

ios审核被拒

ios app上线的时候应为检测到app里面含有私有api被拒了,头疼,代码这么多怎么快速定位是哪里的代码出的问题呢

解决办法

这里介绍一个网易游戏开源的检测项目中是否含有私有api的项目 iOS-private-api-checker
整个开源项目是用python写的,虽然项目里面有readme.md介绍说明文件,但是对于没有接触过python项目的人可能还是有点陌生的。这里就详细介绍些如何使用此项目检测

clone项目到本地

git clone https://github.com/NetEaseGame/iOS-private-api-checker
cd iOS-private-api-checker

安装依赖python包`

请确认你的mac上已经安装好了,pip 如果没有的话 运行 sudo easy_install pip

pip install flask
pip install macholib

生成IOS项目SDK版本的私有api库

修改 config.py文件

现在的版本默认是 'sdk': '8.1'修改 sdks_config.append的参数为你的sdk版本
比如说我是10.3的版本
修改成了

sdks_config.append({
    'sdk': '10.3',
    'framework': '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk/System/Library/Frameworks/',
    'private_framework': '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk/System/Library/PrivateFrameworks/',
    'docset': '/Applications/Xcode.app/Contents/Developer/Documentation/DocSets/com.apple.adc.documentation.docset/Contents/Resources/docSet.dsidx'
})

开始重新生成api数据库

过程稍慢,生成时间由电脑配置高低决定,耐心等待下

python build_api_db.py

运行项目

在根目录创建一个 tmp 目录,并设置 777 权限

mkdir tmp
chmod -R 777 tmp/

之后运行

python run_web.py

上传ipa文件

根据上个页面的提示打开 http://0.0.0.0:9527
托转你的api文件到网页提示的区域 等待一下就可以在Private API in APP得到检测结果

检测检测并导出结果excel

修改目录下的 iOS_private.py文件

修改 ipa_folder的值为你的ipa文件所在的目录的路径

批量生成

python iOS_private.py

在tmp文件夹里可以找到生成好的xlsx文件

react native简介和安装

React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP。

React Native着力于提高多平台开发的开发效率 —— 仅需学习一次,编写任何平台。(Learn once, write anywhere)

Facebook已经在多项产品中使用了React Native,并且将持续地投入建设React Native。

关于react native的详细简介和安装教程可以在 官方入门教程 或者中文版安装介绍教程 查看学习,这里不做过多介绍了

react-native弹性布局

react-native 的生命周期

react-native View&Text

react-native 组件之间的通讯

react-native Navigator

nodejs

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Nodejs的包管理器 npm,是全球最大的开源库生态系统。

nodejs各平台安装

http-server

安装

打开命令终端 执行 npm install http-server -g 等待安装完毕即可

使用

在您想快速搭建静态文件访问的文件夹里 执行 http-server 就可以看到打印出来的可以访问的http地址和端口号 打开浏览器访问试试吧