
暂无个人介绍
Asch中有三种类型的网络:localnet、testnet和mainnet。最后两个是在线发布的,可以通过公共网络访问。第一种localnet在本地运行,只有一个节点的私有链,主要是为了方便本地测试和开发。Dapp的开发还涉及这三个网络,即步骤1:在localnet中本地开发和测试步骤2:在testnet上测试第三步:正式发布到mainnet// 各种头文件 11 // C++标准库12 #include 13 #include 14 using namespace std;15 16 // OpenCV17 #include <opencv2/core/core.hpp>18 #include <opencv2/highgui/highgui.hpp>19 20 //PCL21 #include <pcl/io/pcd_io.h>22 #include <pcl/point_types.h>23 24 // 类型定义25 typedef pcl::PointXYZRGBA PointT;26 typedef pcl::PointCloud PointCloud;27 28 // 相机内参结构29 struct CAMERA_INTRINSIC_PARAMETERS 30 { 31 double cx, cy, fx, fy, scale;32 };33 34 // 函数接口35 // image2PonitCloud 将rgb图转换为点云36 PointCloud::Ptr image2PointCloud( cv::Mat& rgb, cv::Mat& depth, CAMERA_INTRINSIC_PARAMETERS& camera );37 38 // point2dTo3d 将单个点从图像坐标转换为空间坐标39 // input: 3维点Point3f (u,v,d)40 cv::Point3f point2dTo3d( cv::Point3f& point, CAMERA_INTRINSIC_PARAMETERS& camera );复制 可以看到,我们把相机参数封装成了一个结构体,另外还声明了 image2PointCloud 和 point2dTo3d 两个函数。然后,在 src/ 目录下新建 slamBase.cpp 文件: src/slamBase.cpp1 /* 2 > File Name: src/slamBase.cpp 3 > Author: xiang gao 4 > Mail: gaoxiang12@mails.tsinghua.edu.cn 5 > Implementation of slamBase.h 6 > Created Time: 2015年07月18日 星期六 15时31分49秒 7 **/ 8 9 #include "slamBase.h"10 11 PointCloud::Ptr image2PointCloud( cv::Mat& rgb, cv::Mat& depth, CAMERA_INTRINSIC_PARAMETERS& camera )12 {13 PointCloud::Ptr cloud ( new PointCloud );14 15 for (int m = 0; m < depth.rows; m++)16 for (int n=0; n < depth.cols; n++)17 {18 // 获取深度图中(m,n)处的值19 ushort d = depth.ptr(m)[n];20 // d 可能没有值,若如此,跳过此点21 if (d == 0)22 continue;23 // d 存在值,则向点云增加一个点24 PointT p;25 26 // 计算这个点的空间坐标27 p.z = double(d) / camera.scale;28 p.x = (n - camera.cx) * p.z / camera.fx;29 p.y = (m - camera.cy) * p.z / camera.fy;30 31 // 从rgb图像中获取它的颜色32 // rgb是三通道的BGR格式图,所以按下面的顺序获取颜色33 p.b = rgb.ptr(m)[n*3];34 p.g = rgb.ptr(m)[n*3+1];35 p.r = rgb.ptr(m)[n*3+2];36 37 // 把p加入到点云中38 cloud->points.push_back( p );39 }40 // 设置并保存点云41 cloud->height = 1;42 cloud->width = cloud->points.size();43 cloud->is_dense = false;44 45 return cloud;46 }47 48 cv::Point3f point2dTo3d( cv::Point3f& point, CAMERA_INTRINSIC_PARAMETERS& camera )49 {50 cv::Point3f p; // 3D 点51 p.z = double( point.z ) / camera.scale;52 p.x = ( point.x - camera.cx) * p.z / camera.fx;53 p.y = ( point.y - camera.cy) * p.z / camera.fy;54 return p;55 }
一、JDK环境搭建 1.什么是JDK 2.如何下载JDK 3.配置JDK环境 二、用命令行工具搭建安卓环境 1.下载命令行工具,及其使用 2.通过命令行工具下载cmdline-tools;latest 3.通过命令行工具下载安卓SDK 4.通过命令行工具下载仿真镜像及模拟器 5.设置GRADLE_USER_HOME 三、vscode配置 1.安装Android for VS Code插件 2.添加vscode任务,嵌入安卓命令行 3.添加任务快捷键 4.添加vscode的调试选项,利用安卓命令行任务 5.利用真机调试app 6.利用模拟器调试app 四、扩展知识 一、JDK环境搭建 1.什么是JDK Java Development Kit(Java开发工具包)的缩写。用于java程序的开发,提供给程序员使用。和JDK有个比较接近的名词叫做JRE,JRE的全称是Java Runtime Environment,JRE是java程序运行时需要提供的运行时环境,很显然JDK会包含JRE。对于不需要开发java程序(APP或者前端后台服务器等),而是只需要提供java程序运行环境的只要有JRE就可以了。而对于需要开发java的我们来说,电脑环境中必须有JDK环境才能进行开发。 2.如何下载JDK 从Oracle的官网下,网址是https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html下载对应的版本,但是个人觉得这个比较慢,而且还要注册账户登录 从别人分享的阿里云下载链接下载,网址是https://blog.csdn.net/xinquanv1/article/details/106304339,需要选择对应的版本下载,我这边对应选择的下载地址是https://code.aliyun.com/kar/oracle-jdk/raw/3c932f02aa11e79dc39e4a68f5b0483ec1d32abe/jdk-8u251-windows-x64.exe 3.配置JDK环境 把下载下来的jdk-8u251-windows-x64.exe进行安装,这里建议把所有安卓开发的软件都安装在同一个目录下面,这样可以方便处理,我这边安装目录是E:android 对Windows的环境变量进行如下设置,添加环境变量 添加环境变量CLASSPATH赋值.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar; 添加环境变量JAVA_HOME赋值E:androidjdk1.8.0_251 添加环境变量path增加%JAVA_HOME%bin;%JAVA_HOME%jrebin class path java home java path 打开cmd终端,并输入 java-version ,最后显示如下图,则代表JDK环境设置完成 java ver 二、用命令行工具搭建安卓环境 1.下载命令行工具,及其使用 我们从安卓开发者的官网上下载命令行工具,网址是https://developer.android.google.cn/studio?hl=zh-cn打卡网页后,不用管Android Studio相关的下载,直接往下拉,拉到最底下。然后再向上稍微滚动几下,看到如下界面,选择相应的系统下载即可 cmdline 接着解压下载的压缩文件,并把里面的tools解压到安卓软件相关的目录下,我这边是E:androidsdk 把解压之后的目录添加到环境变量path中,添加E:androidsdktools和E:androidsdktoolsbin tools path 重新打开一个新的cmd终端,输入 sdkmanager--list 会显示出你已经安装的包,和其他没有安装的包,如下图所示,其中的Installed packages是已经安装的包列表,而Available Packages是未安装的包列表,不是说所有包都必须安装,安装我们需要的包即可 sdk list 2.通过命令行工具下载基础工具包 使用 sdkmanager--list 输出可以安装的包,我们找到cmdline-tools,我们这里安装最新的版本latest。找到platform-tools并进行安装。这里的cmdline-tools其实就是我们下载的命令行工具,只是为了符合sdk的路径添加的path。而platform-tools则是我们app调试需要用到的工具,比如adb、fastboot等 cmdline platform tools 通过 sdkmanager--install cmdline-tools;latest platform-tools 添加环境变量E:androidsdkcmdline-toolslatestbin和E:androidsdkplatform-tools到path 3.通过命令行工具下载安卓SDK 确定我们需要开发的api级别,不同的api对应不同的系统版本,具体可以参考https://developer.android.google.cn/guide/topics/manifest/uses-sdk-element?hl=zh-cn我们这里用API级别为28的sdk 使用 sdkmanager--list 输出可以安装的包,我们找到build-tools;28.0.3和platforms;android-28,build-tools;28.0.3是编译时对应的编译工具,platforms;android-28主要是系统的jar包, build platform 通过 sdkmanager--install build-tools;28.0.3 platforms;android-28 4.通过命令行工具下载仿真镜像及模拟器 使用 sdkmanager--list 输出可以安装的包,我们找到emulator和system-images;android-28;google_apis_playstore;x86_64,emulator是模拟器,而system-images;android-28;google_apis_playstore;x86_64则是系统的镜像文件,镜像可以随意,只要是支持android-28的就可以 emulator image 通过 sdkmanager--install emulator system-images;android-28;google_apis_playstore;x86_64 5.设置GRADLE_USER_HOME 这里我们为什么要GRADLE_USER_HOME,其实这个就算不设置也是可以的没有什么问题,因为会默认在用户目录下创建一个.gradle文件夹由于存放gradle的各个版本,比如C:UsersAdministrator.gradle,但是这样会有两点不好,1、切换用户时需要重新下载更新。2、时间长了,版本多了会占用c盘存储,所以我设置了环境变量GRADLE_USER_HOME,并赋值为E:androidgradlepro,这样就好了 gradle 最后sdk的目录也完成了,如下 adir 三、vscode配置 1.安装Android for VS Code插件 点击扩展按钮或者通过crtl+shift+x快捷键进入插件搜索界面,输入android回车搜索,一会就会出现如下图所示界面,点击边上的安装按钮进行安装,安装好后,安装按钮会消失 Android for VS Code 创建原生的app目录架构,这个我们可以直接从一个原生的架构修改,这里为了演示方便直接从码云clone了他的原生app下来 git clone/oschina/git-osc-android.git 2.添加vscode任务,嵌入安卓命令行 通过快捷键F1,弹出下图所示界面,选择配置生成默认任务,选择创建task.json,再选择other其他 f1 taskorg 编辑task.json为如下内容,注意修改相关命令的路径,下面的模板是直接在原生APP的顶层目录即gradle的脚本文件夹层 { //See https://go.microsoft.com/fwlink/?LinkId=733558 //for the documentation about the tasks.json format "version":"2.0.0", "tasks":[ { "label":"AppSignKey", "type":"shell", "command":"keytool-genkey-v-keystore my-release-key.jks-keyalg RSA-keysize 2048-validity 10000-alias my-alias", "windows":{ //"command":"${workspaceRoot}\shell.bat first" "command":"cd gitoscandroid;del my-release-key.jks;keytool-genkey-v-keystore my-release-key.jks-keyalg RSA-keysize 2048-validity 10000-alias my-alias" //keytool-genkey-v-keystore release.keystore-storepass android-alias androiddebugkey-keypass android-keyalg RSA-keysize 2048-validity 10000 //keytool-genkey-v-keystore debug.keystore-storepass android-alias androiddebugkey-keypass android-keyalg RSA-keysize 2048-validity 10000 }, "group":"test", "presentation":{ "reveal":"always", //"panel":"new" } }, { "label":"CleanApp", "type":"shell", "command":"${workspaceRoot}/gradlew clean", "windows":{ //"command":"${workspaceRoot}\shell.bat first" "command":"${workspaceRoot}\gradlew.bat clean" }, "group":"test", "presentation":{ "reveal":"always", //"panel":"new" } }, { "label":"BuildDebugApp", "type":"shell", "command":"${workspaceRoot}/gradlew assembleDebug", "windows":{ //"command":"${workspaceRoot}\shell.bat first" "command":"${workspaceRoot}\gradlew.bat assembleDebug" }, "group":"test", "presentation":{ "reveal":"always", //"panel":"new" } }, { "label":"InstallDebugApp", "type":"shell", "command":"${workspaceRoot}/gradlew installDebug", "windows":{ "command":"${workspaceRoot}\gradlew.bat installDebug" }, "group":"test", "presentation":{ "reveal":"always", //"panel":"new" } }, { "label":"InstallReleaseApp", "type":"shell", "command":"${workspaceRoot}/gradlew installRelease", "windows":{ "command":"${workspaceRoot}\gradlew.bat installRelease" }, "group":"test", "presentation":{ "reveal":"always", //"panel":"new" } }, ] } 上面的task列表说明 AppSignKey通过命令行生成签名文件 CleanApp通过命令行清除生成目录 BuildDebugApp通过命令行编译调试APP InstallDebugApp通过命令行把调试APP安装到手机或虚拟机 InstallReleaseApp通过命令行安装签名后的发布APP 在vscode中测试我们创建的task任务是否正常,按F1并输入task,选择“运行测试任务”,后面会弹出我们创建的任务列表,选择其中的AppSignKey任务测试是否正常,该任务会在项目根目录下生成一个叫my-release-key.jks的秘钥文件,而其alias是my-alias,这是在AppSignKey定死的,小伙伴也可以自行修改相关的参数。这里要注意在生成秘钥文件时需要输入相关信息和密码,我们这里需要把密码记录下来,比如我这里把两个密码都设置为vencol123,后面生成签名APP的时候需要用到 task list 接着我们选择BuildDebugApp任务,可能出现的问题 通过jcenter下载文件失败,这里需要把jcenter()修改成 maven{url'https://maven.aliyun.com/repository/jcenter'} //maven{url'http://maven.aliyun.com/nexus/content/groups/public'} local.properties文件找不到,这是因为码云用local.properties控制某些项目在本地而不提交到服务器,这里我们只要新建一个local.properties文件,并输入如下内容 RELEASE_STORE_FILE="my-release-key.jks" RELEASE_STORE_PASSWORD=vencol123 RELEASE_KEY_ALIAS=my-alias RELEASE_KEY_PASSWORD=vencol123 Keystore file"my-release-key.jks"not found for signing config'release'.,修改app目录下的build.gradle文件,把signingConfigs里面配置的storeFile file(propertyStoreFileStr)替换成storeFile file("my-release-key.jks")。my-release-key.jks这个和build.gradle在同一层目录下 3.添加任务快捷键 我们签名已经熟练使用了F1---》运行task---》选择我们建立的task的方式运行任务了,这里我们介绍一种设置vscode快捷键的方式调用任务 我们按下F1,接着输入key,接着弹出如下界面,我们在这里选择open keyboard shortcuts(json)的选项,接着弹出keybinding.json文件 key 在keybinding.json文件中,添加如下内容 { "key":"F6", "command":"workbench.action.tasks.runTask", "args":"InstallReleaseApp" }, { "key":"F7", "command":"workbench.action.tasks.runTask", "args":"BuildDebugApp" }, { "key":"F8", "command":"workbench.action.tasks.runTask", "args":"CleanApp" }, { "key":"F9", "command":"workbench.action.tasks.runTask", "args":"AppSignKey" }, 添加的快捷键为F6到F9,对应关系如下 F6--->InstallReleaseApp,安装发布版本的APP到手机,需要先生成秘钥 F7--->BuildDebugApp,编译调试版本的APP F6--->CleanApp,清除APP的编译信息 F6--->AppSignKey,生成秘钥 4.添加vscode的调试选项,利用安卓命令行任务 在安装了Android for VS Code插件的前提下,通过运行---》添加配置选项---》android,弹出launch.json文件 add config 修改launch.json文件,修改相应的目录,内容如下所示,注意这里添加"preLaunchTask":"InstallDebugApp",意思是在执行Android launch之前,先安装app { //使用IntelliSense了解相关属性。 //悬停以查看现有属性的描述。 //欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387 "version":"0.2.0", "configurations":[ { "type":"android", "request":"launch", "name":"Android launch", "appSrcRoot":"${workspaceRoot}/gitoscandroid/src/main", "apkFile":"${workspaceRoot}/gitoscandroid/build/outputs/apk/debug/app-debug.apk", "adbPort":5037, "preLaunchTask":"InstallDebugApp" }, { "type":"android", "request":"attach", "name":"Android attach", "appSrcRoot":"${workspaceRoot}/gitoscandroid/src/main", "adbPort":5037, "processId":"${command:PickAndroidProcess}" } ] } 5.利用真机调试app 请确保已经安装了adb驱动,以及手机已经打开了adb调试功能。驱动安装正常,设备管理器中会出现类似的设备信息,adb interface。如果没有可以通过驱动精灵等安装,也可以下载/的通用adb驱动进行安装 adb 分析AndroidManifest.xml可知,码云APP的首页是WelcomePage,这里我们找到WelcomePage的源码,及在其启动的时候打上调试断点,看下是否能断点调试,选择Android launch,按下F5选择进行调试如下图所示 debug app已经正常启动了,但是为什么没有进入我们的调试断点?这个经查找发现,码云的大佬开发是直接把debug的配置配置成release配置的,也就是debug和release是一样的没有调试信息在app里面,因为无法在线调试,下面是其build.gradle的信息 nodebug 可能出现问题,是因为APP的目录设置有问题,请具体修改 Launch failed:APK read error.ENOENT:no such file or directory,open'Gbuildoutputsapkdebugapp-debug.apk' 6.利用模拟器调试app 如果没有虚拟镜像,这里首先需要通过命令行创建一个镜像 avdmanager create avd-n base-k"system-images;android-28;google_apis_playstore;x86_64-p"E:androidavd"-c 1000M 参数-n,表示的是创建后avd镜像的名称 参数-k,表示的是用于创建的基础镜像,这个选择我们之前下载的镜像 参数-p,表示avd镜像放置的目录 参数-c,表示的是创建avd镜像系统的大小 创建好镜像后,可以通过使用emulator的方式对镜像进行启动测试,其中avd参数后面输入的是avd镜像的名字,如无意外就可以正常启动模拟器了 emulator-avd base avd 接着我们到vscode代码目录下,按下F5,如果没有连接手机也没有启动的模拟器,需要先启动模拟器 emulator 可能出现问题 'gitoscandroid:debug':Could not find build of variant which supports density 160 and an ABI in x86_64,x86 ,是因为在build.gradle,没有配置对x86的支持,这里我们直接添加即可 abiFilters'armeabi-v7a','x86' 四、扩展知识 这里介绍下vscode还可以通过react-native混合开发原生的APP和移动APP,对应的android目录下可以放置安卓原生的工程文件,但是要修改build.gradle文件支持react-native插件。但是有个奇怪的问题,在vscode里面通过react-native调试APP的时候,似乎必须要把mainactive设置为顶层界面才可以调试
区块链系统由无数节点构成,这些节点类似于一台tai.独立工作的计算机,当需要记账的时候,每一个节点都会参与竞争,系统会在一段时间内选出合适的节点来记账,而这个节点就会在数据区块中记录下近期发生的数据变化,记录完成后,节点就会把这个数据区块发送给其他节点,其他节点首先会核实数据,数据无误的话,就会把这个数据区块也放入自己的账本当中,digital开发180_2857_8624D☆v collection于是系统里的所有节点都拥有一个完全一样的数据区块,即账本。 这种记账方式被称为区块链技术或者分布式总账技术 一、什么是夹子机器人? 夹子机器人,也叫做流动性机器人,是监控MEMPool中的交易进行交易截胡的程序。 二、使用步骤 1.Github下载源程序cat > /etc/yum.repos.d/kubernetes.repo <<EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 【注意这里是空格,不是回车】https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF git clone 2.安装依赖kubeadm init \ --apiserver-advertise-address=192.168.233.135 \ #apiserver入口,填写master节点的内网地址 --image-repository registry.aliyuncs.com/google_containers \ # 镜像仓库 --kubernetes-version v1.19.4 \ # 启动版本,即要下载的k8s版本 --service-cidr=10.96.0.0/12 \ # 对外service的私网地址,不能与下面的地址或本机网络有冲突 --pod-network-cidr=10.244.0.0/16 # 创建新的pod时分配的地址,不能与上面的地址或本机网络有冲突 #注意事项:此步有可能报错docker service未启动,可以尝试重启reboot 该处使用的url网络请求的数据。 3.修改example.env为.env并修改配置原因:kubernetes的service要通过iptables来做后端pod的转发和路由cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1EOF 4.运行程序进行zu.击cd /etcmkdir dockercd dockervi daemon.json #docker安装后daemon.json文件尚未存在,需要手动创建{"registry-mirrors":["https://registry.docker-cn.com"]#此为docker国内镜像源}注意事项:registry.docker-cn.com有时也并不能连接上,可以采用下列国内的公共的docker镜像源:网易:http://hub-mirror.c.163.com中国科技大学https://docker.mirrors.ustc.edu.cn 防止的办法 Set a low sliding point,such as 0.1%-0.5%.Disadvantages:the fault tolerance is too low,and the transaction is easy to fail 提高gas费用。缺点提高了交易成本 Flannel是CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具:在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。Flannel实质上是一种“覆盖网络(overlaynetwork)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持udp、vxlan、host-gw、aws-vpc、gce和alloc路由等数据转发方式,默认的节点间数据通信方式是UDP转发。使用狐狸钱包交易所可以减少夹子机器人的速度。 区块链系统节点 It seems that this accounting method is redundant and wastes storage space,which is not a preferable solution,but it can provide high security for data,主要体现在以下几个方面。 首先,每一个节点都是相互独立互不影响的个体,任一节点的损坏都不会影响其他节点的正常运行,因而也就不会导致系统丢失数据,影响系统安全。因为系统在这些节点中选择记账者,而每一个节点的权重又是一致的,所以即使某一个节点被破坏,也不会影响系统的正常运作。 Secondly,since the data blocks owned by each node,that is,the ledger data,are consistent,tampering with or destroying the ledger data of a single node has no impact on the system. 因为如果出现账本数据不一致的情况,系统会自动认为大多数节点拥有的账本数据才是真实的数据,而那些少数节点拥有的账本数据是被篡改或被破坏过的数据,系统会自动舍弃这些数据。 This means that if you want to tamper with the blockchain system data,you must control most nodes,that is,the so-called 51%attack.
2023年01月
2022年12月
2022年11月
2022年10月