前提:
1、已启动区块链网络,并安装实例化安装链码
2、docker ps 可查看已启动的服务

服务器地址: ssh IP地址 -l root

fabric-samples 和 test-network所在目录:
/usr/local/src/hyperleger/fabric/scripts
/usr/local/src/hyperleger/fabric/scripts/fabric-samples
创建stupid工作空间,与fabric-samples同级目录:

mkdir stupid-workspace

stupid源码下载:

 git clone https://github.com/18640869382/stupid.git

go版本查询:go version
golang代理:

export GO111MODULE=on
export GOPROXY=https://goproxy.cn

进入stupid文件夹内构建:cd stupid
编译二进制:go build
stupid位置:

/usr/local/src/hyperleger/fabric/scripts/stupid-workspace1/stupid

参数配置文件:cat config.json
执行测试命令:./stupid config.json 500
其中500为要发送的交易数
注意:需要把peer0.org1.example.com 跟orderer.example.com写到本机的hosts文件中
参数内容:
{
"peer_addr": "peer0.org1.example.com:7051",
"orderer_addr": "orderer.example.com:7050",
"channel": "mychannel",
"chaincode": "basic",
"args": [ "GetAllAssets"],
"mspid": "Org1MSP",
"private_key": "/usr/local/src/hyperleger/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk",
"sign_cert": "/usr/local/src/hyperleger/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem",
"tls_ca_certs": ["/usr/local/src/hyperleger/fabric/scripts/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem","/usr/local/src/hyperleger/fabric/scripts/fabric-samples/test-network/organizations/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem"],
"num_of_conn": 20,
"client_per_conn": 40
}

参数说明:
"peer_addr": peer节点地址与端口
"orderer_addr":orderer节点地址与端口
"channel": 通道名称
"chaincode": 链码名称,区块链内指定的,不是文件名称
"args": 合约方法,
"mspid": MSP的ID,
"private_key”:私钥文件 ,
"sign_cert":签名证书文件 ,
"tls_ca_certs": peer证书、orderer证书,
"num_of_conn": client端与peer端、orderer端之间所建立的grpc连接数
"client_per_conn": 指向一个peer发送交易提案的客户端数目
测试结果:
2021-06-17T03:15:40.png
结果中的 Tx 10可以修改,在 fabric 下 configtx.yaml 文件中的出块策略
Max Message Count: The maximum number of messages to permit in a batch
2021-06-17T03:15:54.png
路径:
/usr/local/src/hyperleger/fabric/scripts/fabric-samples/test-network/configtx/configtx.yaml

最近测试需要抓包,然后代理服务器设置在自己的办公电脑上,需要查自己的电脑出口IP地址,So, 产生了Python实现一个简单的设置代理的工具脚本,大概分为3种使用方式。

1、 命令式

python -c "import socket;print([(s.connect(('1.1.1.1', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1])"


2、脚本式

# 可以封装成函数,方便 Python 的程序调用
import socket

def get_host_ip(): 
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

3、程序式

将以上脚本通过pyinstaller打包为exe(windows系统)、elf(linux系统)、app(Mac系统)

最后,Enjoying!!!

1、参考官方文档:
2021-05-13T02:10:31.png

2、 定时构建语法

    * * * * *

第一个*表示分钟,取值0~59
第二个*表示小时,取值0~23
第三个*表示一个月的第几天,取值1~31
第四个*表示第几月,取值1~12
第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日

3、举例:
每小时执行一次
H/59

每两个小时执行一次
H H/2 *

每隔15分钟。(或许:07, :22, :37, :52)
H/15

每前半小时中每隔10分钟。 (3次, 或许:04, :14, :24)
H(0-29)/10

每个工作日从早上4点45分开始到下午15点45分结束这段时间内每间隔2小时的45分钟那一刻。
45 4-16/2 1-5

每个工作日从早上9点到下午5点这段时间内每间隔2小时之间的某刻。(或许在上午10:38, 下午12:38, 下午2:38 , 下午4:38)
H H(9-16)/2 1-5

每月(除了12月)从1号到15号这段时间内某刻。
H H 1,15 1-11 *

变量 a:

a="1、测试\n2、哈哈"

如果想达到换行的效果怎么办?

1、测试
2、哈哈

如用 echo $a 输出,则换行都会被忽略,所有内容输出到一行
而用 echo "$a" 可正常输出变量中的换行

现在我们来看看,怎么安装和配置OpenSCAD:

1、下载
官方下载页:http://www.openscad.org/downloads.html

各个平台的下载地址:
Mac OS X: https://files.openscad.org/OpenSCAD-2021.01.dmg
Windows:https://files.openscad.org/OpenSCAD-2021.01-x86-64-Installer.exe
Linux(以类debian发行版为例):sudo apt-get install openscad
其他参考下载页面

2、安装
以windows系统为例:安装其实没有什么特殊的,直接点安装按钮就OK。
2021-03-18T11:37:10.png

3、Enjoy!!!

最近玩3D打印,需要绘制模型,但是自己又不会CAD,只会写点代码。So,我就用万能的谷歌一下,结果还真让我发现一款神器:点我去康康OpenSCAD

OpenSCAD是一款使用编程的方式创建3D模型的CAD工具,可以在Windows、Mac OS X、Linux/Unix系统上运行的软件。

软件界面:
2021-03-18T11:25:38.png

官网预览:
2021-03-18T11:26:21.png

最近在公司业务需要用到一个硬件模块,上面有这样1个功能需要一直在循环执行,但是这个功能不能阻塞掉其他功能的执行。
想到这里,有人肯定会说,用多线程啊,但是它没有啊。

于是我做了一番调查,mpy有个自带的uasyncio模块可以解决这个问题,上帝给你关上一扇门的时候就给你开了个窗。

开干(上代码示例):

import uasyncio as asyncio


async def loop_task(arg):
    while True:
        print('{0} 状态1'.format(arg))
        await asyncio.sleep(1)
        print('{0} 状态2'.format(arg))
        await asyncio.sleep(1)


async def other_task():
    print('我是其他非阻塞任务')
    await asyncio.sleep(1)


def main():
    loop = asyncio.get_event_loop()
    loop.create_task(loop_task('死循环'))
    loop.create_task(other_task())

    loop.run_forever()


if __name__ == '__main__':
    main()

OK, all done, enjo!!!

查看容器的已挂载目录

查看容器ID和名称:
docker ps ###查看当前启动的容器信息
2021-01-28T02:54:54.png
查看某一个容器已经挂载的目录:
docker inspect 5406191cda6f | grep Mounts -A 20 ###通过容器ID查看
docker inspect jenkins | grep Mounts -A 20 ###通过容器名称查看
2021-01-28T02:49:39.png
2021-01-28T02:50:21.png

docker给已经启动容器添加新的挂载目录

查看启动容器的配置文件:
docker stop ###停止容器
cd /var/lib/docker/containers ###进入containers文件
ls ###查看containers目录下,目标容器详细ID
cd /var/lib/docker/containers/容器ID ###结合docker ps命令查询的ID可知哪一个是查询容器的详细id
如下图可找到对应配置文件进行修改。

2021-01-28T03:29:36.png

docker日志存储位置
在Linux系统中docker启动后日志存储在/var/lib/docker/containers/容器ID/目录中,启动一个容器后,容器ID目录中会生成如下文件:
5406191cda6fbc9fb7765c0b8aa31e075e8854900fab1f61917bab3c07f4af7a-json.log checkpoints config.v2.json hostconfig.json hostname hosts mounts resolv.conf resolv.conf.hash
2021-01-28T03:47:52.png
每个容器的日志默认都会以 json-file 的格式存储于/var/lib/docker/containers/<容器id>/<容器id>-json.log 下,不过并不建议去这里直接读取内容,因为容器的日志则可以通过 docker logs命令来访问,而且可以像 tail -f 一样,使用 docker logs -f 来实时查看。如果使用 Docker Compose,则可以通过 docker-compose logs <服务名> 来查看。

  1. 生成本机的SSH 密钥 (通常包含在 '~/.ssh/id_rsa.pub' 文件中,并以 'ssh-rsa' 开头)

cd ~/.ssh/ ###进入~/.ssh/文件
打开电脑终端,进入~/.ssh/文件查看是否存在id_rsa.pub和id_rsa文件。
若存在,表明之前已生成过SSH rsa密钥,可重新生成或使用现有密钥。
若没有或重新生成,输入以下命令生成密钥。
ssh-keygen -t rsa -C "email@example.com" ###其中邮箱地址为你在gitlub上个人信息邮箱地址保持一致。

一直选择回车键即可,若为重新生成,则当询问是否rewrite时,需要输入yes。生成完成后,可输入以下命名查看并复制公钥。
cat id_rsa.pub ###查看rsa公钥,前提:需先进入~/.ssh/文件

  1. 粘贴SSH公钥到gitlab

登录gitlab,将第一步中生成的SSH 公钥地址粘贴到SSH key,粘贴您的 SSH 公钥
2021-01-21T08:29:45.png

3.验证本地连接是否ok
git config --global user.name "name" ###配置gitlab用户名
git config --global user.email "email@example.com" ###配置gitlab邮箱
ssh -T ssh://git@gitlab.com ###检查本地连接是否OK
2021-01-21T09:14:29.png
如果连接OK,既可以拉取和上传代码。

4.ssh方式或http方式拉取项目代码
git clone ssh://git@gitlab.com:30022/name/projectname.git ###使用ssh拉取,需完成上面的1、2、3步
git clone http://gitlab.com/name/projectname.git ###使用http方式拉取
cd projectname ###进入克隆下来的工程文件
2021-01-21T09:10:53.png

5.更新上传代码相关命令
若之前拉取过工程,更改了内容,上传新的内容命令如下:
git add . ###将项目的文件添加到仓库中
git commit -m "更新信息" ###提交到远程仓库,双引号内写入更新信息
git pull 或 git pull origin master ###拉取最新代码,指定分支
git push 或 git push -u origin master ###上传最新代码,指定分支
2021-01-21T09:12:34.png
若未拉取过工程,需上传本地已存在的文件,代码命令如下:
cd existing_folder ###进入已存在的文件
git init ###初始化git仓库
git remote add origin git@gitlab.com:name/projectname.git ###添加关联远程仓库地址
git add . ###上面已解释
git commit -m "Initial commit" ###上面已解释
git push -u origin master ###上面已解释

若更新仓库地址使用命令:git remote set-url origin git@gitlab.com:name/projectname.git
若删除仓库地址使用命令:git remote remove origin git@gitlab.com:name/projectname.git
查看关联的远程仓库使用命令:git remote -v

⚠️注:截图中涉及地址为内网地址。