0%

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地址和端口号 打开浏览器访问试试吧

nodejs

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

安装

windows下安装

window下安装是最简单的

1. 打开 nodejs官网

2. 下载适合您电脑的安装程序

current版本为例,打开 https://nodejs.org/en/download/current/ 点击Windows Installer 下载安装程序

3. 打开安装程序开始安装

默认ndoejs 就会 add to path 所以不需要手动添加path路径了,选择安装路径,之后下一步… 安装即可

4. 检查安装是否成功

按 Win+R 输入cmd 打开命令行工具
输入

node --version

查看安装好的nodejs的版本

v7.10.0

mac下安装

1. 先安装mac下的开发包管理工具brewhome(已经装过的跳过此步骤)

打开brew官网
拷贝安装命令

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

打开 应用程序=>实用工具=>终端 把刚刚拷贝的命令粘贴到终端 回车 根据提示输入管理员密码 等待安装完毕

2.执行 brew install nodejs 安装nodejs

linux 下安装

1. 打开下载地址

  1. 找到和您电脑适配的linux版本 点击下载,或者复制下载地址 在命令终端 使用wget 下载那个编译好的tar.xz文件

解压文件终端执行 tar xvJf node-v7.10.0-linux-x64.tar.xz
2. 把解压好的文件夹拷贝到你想放置的位置
sudo cp -PRv node-v7.10.0-linux-x64 /usr/local/nodejs
3. 添加PATH
export PATH=$PATH:/usr/local/nodejs添加到你的path中

flex布局方式又称弹性布局,主要要用到的属性有flexDirection,justifyContent,alignItems,alignSelf,flexWrap,flex,position,margin,padding

flexDirection

该属性确定了子组件主轴排序方向,枚举值。

row(默认)         主轴方向为水平,起点在左端。
row- reverse      主轴方向为水平,起点在右端
column    主轴方向为垂直,起点在上端
column-reverse        主轴方向为垂直,起点在下端

justifyContent

该属性确定了组件在主轴方向上的对齐方式,枚举值。

flex-start(默认)   组件沿着主轴方向的起始位置靠齐。如:假如主轴方向是row的话就是左对齐,是row- reverse的话就是右对齐,是column的话就是上对齐,是 column-reverse的话就是下对齐。
flex-end            组件沿着主轴方向的结束位置靠齐,和flex-start相反。
space-between  组件在主轴方向上两端对齐,其中的间隔相等。
space-around   组件会平均分配在主轴方向上,两端保留一定的位置空间。

alignItems

组件在侧轴方向上的对齐方式。
flex-start 组件沿着侧轴上的起点对齐
flex-end 组件沿着侧轴上的终点对齐
center     组价在侧轴方向上居中对齐
stretch(默认)  组件在侧轴方向上占满

flexWrap

是否换行 默认情况下,项目都排列在一条线上,放不下的部分则不放置,flexWap就是定义是否换行的。

nowrap(默认)   不换行
wrap            换行,第一行在上方
wrap-reverse    换行,第一行在下方

flex

有三个参数,默认参数为 0 1 auto。 第一个参数为flex-grow,第二,第三个为:flex-shrink和flex-basis。

alignSelf

定义单个组件自己的对齐方式,默认为auto。枚举值:auto|flex-start|flex-end|center|baseline|stretch

position

枚举值,absolute绝对定位,relative相对定位

margin

内边距

padding

外边距