Sphinx

安装

1
pip install Sphinx

使用

创建 Sphinx 项目

1
mkdir docs; cd docs
1
sphinx-quickstart
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
Welcome to the Sphinx 2.2.0 quickstart utility.

Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).

Selected root path: .

You have two options for placing the build directory for Sphinx output.
Either, you use a directory "_build" within the root path, or you separate
"source" and "build" directories within the root path.
> Separate source and build directories (y/n) [n]: y

The project name will occur in several places in the built documentation.
> Project name: test
> Author name(s): test
> Project release []: 1.0.0

If the documents are to be written in a language other than English,
you can select a language here by its language code. Sphinx will then
translate text that it generates into that language.

For a list of supported codes, see
https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-language.
> Project language [en]: zh_CN

Creating file ./source/conf.py.
Creating file ./source/index.rst.
Creating file ./Makefile.
Creating file ./make.bat.

Finished: An initial directory structure has been created.

You should now populate your master file ./source/index.rst and create other documentation
source files. Use the Makefile to build the docs, like so:
make builder
where "builder" is one of the supported builders, e.g. html, latex or linkcheck.

生成文档

1
make html

生成的文档位于build/html文件夹。

主题

参考

编写《Redis 设计与实现》时用到的工具

Sampledoc

用 Sphinx + reStructuredText 构建笔记系统

用Sphinx编写技术文档

rst语法进阶之一

用Python做科学计算

写最好的文档:Sphinx + Read the Docs

libimobiledevice 使用

libimobiledevice

libusbmuxd | usbmuxd

ideviceinstaller

usbmuxd

命令

  • icat
  • iproxy

文件

  • /var/run/usbmuxd
  • /var/lib/lockdown (Linux) or /var/db/lockdown (macOS)
  • /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd -launchd

Usbmux 简介

libimobiledevice

命令

  • idevice_id:查看设备 id
  • idevicebackup
  • idevicebackup2
  • idevicecrashreport
  • idevicedate
  • idevicedebug
  • idevicedebugserverproxy
  • idevicediagnostics
  • ideviceenterrecovery
  • ideviceimagemounter
  • ideviceinfo:查看设备具体参数
  • idevicename:查看设备名字
  • idevicenotificationproxy
  • idevicepair
  • ideviceprovision
  • idevicescreenshot:设备当前屏幕截图
  • idevicesyslog:查看日志

ideviceinstaller

命令

  • ideviceinstaller:安装软件,ipa包。

macOS 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 卸载
brew uninstall --ignore-dependencies libimobiledevice
brew uninstall --ignore-dependencies usbmuxd
brew uninstall ideviceinstaller

# 安装
brew install --HEAD usbmuxd
brew unlink usbmuxd
brew link usbmuxd

# 安装
brew install --HEAD libimobiledevice

# 安装
brew install ideviceinstaller

OpenStf iOS 部署

OpenStf iOS 适配

  • macOS 10.14.4
  • node 8.15.0

  • python 2.7.15

  • Xcode 10.0

nvm,pyenv,xcversion

1. 环境准备

安装libimobiledevice等依赖工具,如果已经安装过,可能需要升级,先卸载,再安装最新版本

1
2
3
4
5
6
7
8
9
10
11
12
brew uninstall --ignore-dependencies usbmuxd
brew uninstall --ignore-dependencies libimobiledevice
brew uninstall --ignore-dependencies ideviceinstaller

brew install --HEAD usbmuxd
#brew unlink usbmuxd
#brew link usbmuxd

brew install --HEAD libimobiledevice
brew install --HEAD ideviceinstaller
brew install carthage
brew install socat

2. 安装 stf 依赖:

1
brew install graphicsmagick libsodium zeromq protobuf yasm pkg-config

3. 配置 WebDriverAgent

1
2
3
4
5
6
7
8
9
10
# git clone -b v0.1.1 https://github.com/mrx1203/WebDriverAgent.git
git clone https://github.com/mrx1203/WebDriverAgent.git

cd WebDriverAgent

# 修改 bundleID,修改证书,修改Schema
open WebDriverAgent.xcodeproj

# Validating Inspector 有问题,注释了。
./Scripts/bootstrap.sh

使用的 Xcode 10.0,Xcode 10.2.1 版本 linker 有问题,提示找不到 XCEventGenerator。

4. 启动 ios-provider

  • 拉取源代码
1
git clone https://github.com/mrx1203/stf.git
  • 安装依赖库
1
cd stf
1
CXXFLAGS="-mmacosx-version-min=10.9" LDFLAGS="-mmacosx-version-min=10.9" npm install; npm install --save request; npm install --save request-promise

检查组件是否都正常

1
bin/stf doctor
  • 启动ios-provider,假设主服务器的ip地址为10.8.8.128,该节点的ip地址为192.168.1.24。
1
bin/stf ios-provider --name "mac001" --connect-sub tcp://10.8.8.128:7250 --connect-push tcp://10.8.8.128:7270 --storage-url http://10.8.8.128 --public-ip 192.168.1.24 --heartbeat-interval 20000 --wda-path /Users/jinlong/projects/mrx1203/WebDriverAgent --wda-port 8100

挂载

1
ideviceimagemounter /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/12.0/DeveloperDiskImage.dmg  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/12.0/DeveloperDiskImage.dmg.signature

截图

1
idevicescreenshot -u 81940f3e74cd76f934c7a6ebec5ea038eb3f7e1d 81940f3e74cd76f934c7a6ebec5ea038eb3f7e1d.png

改造官方 stf

拉取官方代码

OpenStf 3.4.1

1
git clone -b v3.4.1 https://github.com/openstf/stf.git

复制代码到官方代码目录下

  1. 拷贝lib/cli下的ios-device,ios-provider,local三个文件夹,local文件夹可以直接覆盖。
  2. 覆盖lib/cli下的index.js
  3. 拷贝lib/units下的ios-device,ios-provider
  4. 覆盖lib/units/storage/plugins/apk/task/manifest.js文件。
  5. 拷贝lib/util下的ipareader.js,download.js文件;ipa文件解析和下载。
  6. 覆盖lib/wire/wire.proto文件。
  7. 覆盖res/app/components/stf/install/install-service.js文件;ipa文件的安装。
  8. 覆盖res/app/components/stf/storage/storage-service.js文件;上传ipa文件。
  9. 覆盖package.json添加了依赖模块。

安装依赖库

1
CXXFLAGS="-mmacosx-version-min=10.9" LDFLAGS="-mmacosx-version-min=10.9" npm install; npm install --save request; npm install --save request-promise

检查组件是否都正常

1
bin/stf doctor

复制 WebDriverAgent 到 stf 目录

1
2
cd stf
cp WebDriverAgent .

启动

1
bin/stf local

错误

idevicescreenshot not working

xcode10版本的问题, 找不到XCElementSnapshot头文件

node-gyp ‘utility’ file not found CXXFLAGS="-mmacosx-version-min=10.9" LDFLAGS="-mmacosx-version-min=10.9" npm i

iproxy 208 错误 ps -ax|grep -i "iproxy"|grep -v grep|awk '{print "kill -9 " $1}'|sh

参考

STF 集成 iOS 之 开源了

Neo4j 配置

使用 Docker 运行 Neo4j

docker-neo4j

Neo4j Docker

运行

1
docker run -d --name=neo4j-3.5.6 --publish=7474:7474 --publish=7687:7687 --volume=$HOME/docker/neo4j/data:/data --env=NEO4J_AUTH=none neo4j:3.5.6

–env=NEO4J_AUTH=none 关闭密码认证

访问

http://127.0.0.1:7474/browser/

用户名:neo4j,密码:neo4j

Neo4j Browser

新建图

neo4j的搭建和实例使用

1
2
3
4
5
6
create(suxun:Person_{name:"苏洵",age:80,sex:"男"})
create(sushi:Person_{name:"苏轼",age:53,sex:"男"})
create(suzhe:Person_{name:"苏辙",age:51,sex:"男"})
create(suxiaomei:Person_{name:"苏小妹",age:45,sex:"女"})
create(susun:Person_{name:"苏孙",age:29,sex:"男"})
create(suxiaosun:Person_{name:"苏重孙",age:6,sex:"女"})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
match(p1:Person_),(p2:Person_)
where p1.name="苏洵" and p2.name = "苏轼"
create (p1) -[parent:Parent{relation:"父亲"}]-> (p2);

match(p1:Person_),(p2:Person_)
where p1.name="苏洵" and p2.name = "苏辙"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

match(p1:Person_),(p2:Person_)
where p1.name="苏洵" and p2.name = "苏小妹"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

match(p1:Person_),(p2:Person_)
where p1.name="苏轼" and p2.name = "苏孙"
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

match(p1:Person_{name:"苏孙"}),(p2:Person_{name:"苏重孙"})
create (p1) -[parent:Parent{relation:"父亲"}] -> (p2);

查询渲染图

1
match(a)-[r:Parent]->(b) return a, r, b
1
:play https://guides.neo4j.com/sandbox/twitter-trolls/index.html

Graph Visualization Tools

Graph Visualization Tools

Graph Visualization With Neo4j Using Neovis.js

Neovis

Neo4j Sandbox

Russian Twitter Trolls

d3.js可视化neo4j图数据库项目

Popoto.js

Data Visualization

RVM 配置

RVM

安装

1
curl -sSL https://get.rvm.io | bash -s stable

查看版本

1
rvm list known

安装 ruby

1
rvm install 2.6.3

设置默认 ruby

1
rvm alias create default 2.6.3

Appium 源码分析

环境参考 appium 的 travis.yml

使用网络代理

Node

1
nvm use v10.20.0

Python

1
pyenv shell 2.7.16

运行 Appium

拉取代码

1
2
mkdir appium && cd appium
git clone -b v1.17.0 https://github.com/appium/appium.git v1.17.0 && cd v1.17.0

环境

1
2
npm install
npm run build

运行 Appium

1
node .

Hacking on Appium

1
2
npm install -g appium-doctor
appium-doctor --dev

安装依赖

1
idevicelocation

opencv4nodejs

1
2
pyenv shell 3.6.1
npm install -g opencv4nodejs

appium-packages

appium-packages 简述

Selenium Packages

Core Packages

Utility Packages

Android Packages

iOS Packages

packages 都在 node_modules 目录下。

使用 IDE

Appium 使用 Visual Studio Code 开发的,依据是 .vscode 目录。

调试的配置文件

launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [

{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/build/lib/main.js",//package.json中的默认入口
"console" : "integratedTerminal" //控制台信息的显示
}
]
}

源码

lib 子目录是 Appium 的源码目录。而里面的 main.js 是 Appium 的程序入口。

lib/main.js: 程序入口 async function main

lib/appium.js:方法 createSession,executeCommand

node_modules/appium-base-driver/lib/protocol/route.js: 方法METHOD_MAP

node_modules/appium-base-driver/lib/protocol/protocol.js:方法routeConfiguringFunction

node_modules/appium-base-driver/lib/express/server.js:方法 routeConfiguringFunction

node_modules/appium-support/lib/logging.js:方法getLogger

lib/logger.js:给Appium打印的每行日志加上[Appium]的前缀

node_modules/appium-base-driver/lib/basedriver/commands:打印出当前sessionId创建成功

参考

contributing-to-appium

appium/appium-packages.md

appium 源码分析合集 (一)

Appium 开发环境搭建合集

Appium 从入门到原理

appium架构分析

Appium精要之Appium的背景知识

Appium在vscode中调试说明

appium通信分析一(appium的初始化准备工作)
Appium基础学习之 | Bootstrap源码分析

Appium 入门到原理合集

Android Bootstrap

手机自动化测试:appium源码分析之bootstrap一

Appium Android Bootstrap源码分析之简介

Appium-bootstrap远程的调试方法

appium和boostrap通信过程数据分析

手机自动化测试:appium源码分析之bootstrap 1

Appuim源码剖析(Bootstrap)/)

启动和日志分析

Appium Server 源码分析之启动运行Express http服务器

Appium Server源码分析之作为Bootstrap客户端

基于源码分析Appium服务端启动过程

Appium源码分析(3)-路由器模块

Appium通过日志分析服务端执行过程-IOS端

,