技术员如何开发一个DAPP区块链应用(以宠物商店为例)
1. 文章摘要
【本文目标】
通过逐步的指导和截图举证,一步步带领一个技术新手完成一个宠物商店DAPP应用的开发和部署。
【环境前置条件】
参考《第一课 如何在WINDOWS环境下搭建以太坊开发环境》,已完成Ubuntu的安装,已完成TRUFFLE,Ganache-cli,lite-server的安装;
本案例是通过WINDOWS的XSHELL客户端同本机的Ubuntu命令操作进行的。
已在本地WIDOWS环境完成MetaMask轻钱包客户端的安装。
最好遵循从头开始的课程学习顺序。不过如果你想半途插入实操学习,问题也不大,遇到障碍时反向找对应文章的指导内容即可完成。
【技术收获】
从本实践中,你可以学习到:
搭建智能合约开发环境
创建Truffle项目
编写智能合约
编译和部署智能合约到区块链
如何通过Web3和智能合约交互
MetaMask 的使用
【实操课程列表】
第一课 如何在WINDOWS环境下搭建以太坊开发环境
第二课 如何实现以太坊最简智能合约“Hello World”的运行
第四课 以太坊开发框架Truffle从入门到实战
第六课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例)
第七课 技术小白如何在45分钟内发行通证(TOKEN)并上线交易
第八课 如何调试以太坊官网的智能合约众筹案例
【说明】未列出的课程为知识普及的非实操类课程,所有区块链文章参考“区块链入口”专栏。
2. 下载/编写TRUFFLE框架的智能合约
项目背景
Pete有一个宠物店,有16只宠物狗,他想开发一个去中心化应用,让大家来领养宠物。
在truffle box中,已经提供了pet-shop的网站部分的代码,我们只需要编写合约及交互部分。
【官网原始参考】
代码框架下载:Pet Shop Truffle Box - Truffle Suite
开发指导:404
环境搭建
环境需要NodeJS, Truffle,Ganache-Cli, Lite-Server, Meta-Mask等程序,按照步骤可以参考《第一课 如何在WINDOWS环境下搭建以太坊开发环境》 搜索对应关键字在已安装的UBUNTU操作系统完成安装。
- 安装Node:
sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash
sudo apt-get install -y nodejs - 安装 Truffle :
-
npm install -g truffle
- 安装Ganache
-
sudo npm install -g ganache-cli
【说明】Ganache(或Ganache CLI)已经取代了 testrpc。
4.Lite-Server, Meta-Mask安装
创建项目
- 建立项目目录并进入
-
mkdir dapp-guide-pet-shopcd dapp-guide-pet-shop
- 使用truffle unbox 创建项目
下载官方程序代码 -
truffle unbox pet-shop
输出成功结果:
Downloading... Unpacking... Setting up... Unbox successful. Sweet!Commands:Compile: truffle compileMigrate: truffle migrateTest contracts: truffle testRun dev server: npm run dev
项目目录结构
contracts/
智能合约的文件夹,所有的智能合约文件都放置在这里,里面包含一个重要的合约Migrations.sol(稍后再讲)migrations/
用来处理部署(迁移)智能合约 ,迁移是一个额外特别的合约用来保存合约的变化。test/
智能合约测试用例文件夹truffle.js/
配置文件
其他代码可以暂时不用管
【说明】如果想了解TRUFFLE框架更详细的内容,可参考文章《第四课 以太坊开发框架Truffle从入门到实战》编写智能合约
智能合约承担着分布式应用的后台逻辑和存储。智能合约使用solidity编写。
在contracts目录下,添加合约文件Adoption.sol
pragma solidity ^0.4.17;contract Adoption {address[16] public adopters; // 保存领养者的地址// 领养宠物function adopt(uint petId) public returns (uint) {require(petId >= 0 && petId <= 15); // 确保id在数组长度内adopters[petId] = msg.sender; // 保存调用这地址 return petId;}// 返回领养者function getAdopters() public view returns (address[16]) {return adopters;}}
编译部署智能合约
Truffle集成了一个开发者控制台,可用来生成一个开发链用来测试和部署智能合约。
编译
Solidity是编译型语言,需要把可读的Solidity代码编译为EVM字节码才能运行。
进入dapp的根目录dapp-guide-pet-shop执行命令,> truffle compile
输出
Compiling ./contracts/Adoption.sol... Writing artifacts to ./build/contracts
编写部署代码
编译之后,就可以部署到区块链上。
在migrations文件夹下已经有一个1_initial_migration.js部署脚本,用来部署Migrations.sol合约。
Migrations.sol 用来确保不会部署相同的合约。现在我们来创建一个自己的部署脚本
2_deploy_contracts.js
var Adoption = artifacts.require("Adoption");module.exports = function(deployer) {deployer.deploy(Adoption); };
安装启动Ganache测试环境
在执行部署之前,需要确保有一个区块链运行, 可以使用
Ganache来开启一个私链来进行开发测试。
参考文章《第一课 如何在WINDOWS环境下搭建以太坊开发环境》 对应的章节,完成ganache-cli的安装。sudo npm install -g ganache-cli
在新的命令行窗口运行ganache-cli程序:
cd /usr/work/Ganache
ganache-cli >> trace.log这个>>目的是把ganache-cli的结果输出到文件,便于后面复制钱包地址用于查看ETH余额。作者实践时把这2行命令合并成一行执行。
ganache-cli >> /usr/work/Ganache/trace.log
这个命令窗口用于运行Ganache程序输出,不可关闭。需要新开一个命令窗口用于执行TRUFFLE的命令。
打开trace.log文件,可查看默认启动的10个钱包账户和对应的私钥地址:
Available Accounts ================== (0) 0x7554cc8c721712adde43e67a5669225bbe8f21f6 (1) 0x3e6ce6a43c1fa565b5b90963bef090625d3edc6c (2) 0xeb2eb6ed4b325e77f5a597497ec5ffaa2f5c2650 (3) 0x1de061d5f225533f7e3c38a5905a6ca2ecb3e55a (4) 0x3ec2e1ed3f47fc7ab9cca1fe09afe9fd1feb789b (5) 0xf27a303880b73a0a287a2e5dc1286098fb49ed63 (6) 0xf3c007932e1de894503166aee3cbf85b4aff0188 (7) 0xe7655733659c14c7c83fb71bd40dc51796592d96 (8) 0x507722000223ca96ac646198709b9ae3f7f49a5a (9) 0x82b087a83f72cc7dd5ca6ac7787a366b2c3ff143Private Keys ================== (0) 629551aa45c594ce822c5b4a378d01cf46fb57c15b69a61eb400a4867ffab002 (1) a90103a95ed805acc52782eaa29eb061f6c2a9431fed3ac18a683ea3143a29b6 (2) c2b13ce370fb235997dc4783ce591a22e5b3909e934dc7c0f61797ce57d5059d (3) 841d0e1d3dc658ad2f308c7292b4d5c40da158d170cf3ed9001c64b8352cd0c2 (4) 255225aedba340b6ec62e6c86a6202535d7382704b129d022461c69b8341d2dd (5) c3fd784fc7a46edb5e7cba9e90120e51152a3fbe2d8b97a0c3106791d3bbe87e (6) f8f90b056c419464d48dcd12ac8e326a31ebe300ea5e245876fe0308c511fbac (7) 09e20553971b044c1fda8ac88f2ed1dcdff6af0889fc05c2ad4374c52d4f52d7 (8) 142643d0fb6f4a78e0fd291a568b784869927d8f8eee87bf3fbdbf493ec3f425 (9) 8f89d4a05582193cc32f800ecf9419f35b5384abc5db42afd4ec016a54d27716
配置以太坊客户端本地环境
ruffle.js是truffle的配置文件,位于dapp-guide-pet-shop目录下,启动好以太坊本地结点以后,我们需要让truffle去识别它并使用它,这就需要在truffle.js中配置相关属性:
module.exports = {// See <http://truffleframework.com/docs/advanced/configuration>// for more about customizing your Truffle configuration!networks: {development: {host: "127.0.0.1",port: 8545,network_id: "*" // Match any network id}} };
执行部署命令
接下来在新的命令窗口执行部署命令
cd /usr/work/dapp-guide-pet-shop
truffle migrate执行后,有一下类似的输出,
Using network 'development'.Running migration: 1_initial_migration.jsDeploying Migrations...... 0x29612ceea67bc946cc6ae82afbedc546f9a53ba8cab5d804f9025fb8f15e48f8Migrations: 0x8af912046664ba26738b811c34068d42216528c0 Saving successful migration to network...... 0x6c968a3c492439ab22028e1956360a6b73a02716c436b15234cd29804dac7298 Saving artifacts... Running migration: 2_deploy_contracts.jsDeploying Adoption...... 0x27448e4f75b608015f3670e3650cf607c882fe7f1a32f98e8a94bf7a406c871cAdoption: 0xe42f434105a7e0eacf4f4229c76e1e135d536db6 Saving successful migration to network...... 0x9375cd6fa143d01a520c5ed0d46cfe859f482b01e37cf678d751c5db6a278e5f Saving artifacts...
查看Ganache-cli的输出文件:trace.log,可以看到区块链状态的变化,现在产生了4个区块。
net_version eth_accounts eth_accounts net_version net_version eth_sendTransactionTransaction: 0x29612ceea67bc946cc6ae82afbedc546f9a53ba8cab5d804f9025fb8f15e48f8Contract created: 0x8af912046664ba26738b811c34068d42216528c0Gas usage: 268407Block Number: 1Block Time: Tue Apr 10 2018 09:10:18 GMT+0800 (CST)eth_newBlockFilter eth_getFilterChanges eth_getTransactionReceipt eth_getCode eth_uninstallFilter eth_sendTransactionTransaction: 0x6c968a3c492439ab22028e1956360a6b73a02716c436b15234cd29804dac7298Gas usage: 41981Block Number: 2Block Time: Tue Apr 10 2018 09:10:19 GMT+0800 (CST)eth_getTransactionReceipt eth_accounts net_version net_version eth_sendTransactionTransaction: 0x27448e4f75b608015f3670e3650cf607c882fe7f1a32f98e8a94bf7a406c871cContract created: 0xe42f434105a7e0eacf4f4229c76e1e135d536db6Gas usage: 247573Block Number: 3Block Time: Tue Apr 10 2018 09:10:19 GMT+0800 (CST)eth_newBlockFilter eth_getFilterChanges eth_getTransactionReceipt eth_getCode eth_uninstallFilter eth_sendTransactionTransaction: 0x9375cd6fa143d01a520c5ed0d46cfe859f482b01e37cf678d751c5db6a278e5fGas usage: 26981Block Number: 4Block Time: Tue Apr 10 2018 09:10:20 GMT+0800 (CST)eth_getTransactionReceipt
这时说明已经智能合约已经部署好了。
测试
现在我们来测试一下智能合约,测试用例可以用 JavaScript or Solidity来编写,这里使用Solidity。
在
test
目录下新建一个TestAdoption.sol
,编写测试合约pragma solidity ^0.4.17;import "truffle/Assert.sol"; // 引入的断言 import "truffle/DeployedAddresses.sol"; // 用来获取被测试合约的地址 import "../contracts/Adoption.sol"; // 被测试合约contract TestAdoption {Adoption adoption = Adoption(DeployedAddresses.Adoption());// 领养测试用例function testUserCanAdoptPet() public {uint returnedId = adoption.adopt(8);uint expected = 8;Assert.equal(returnedId, expected, "Adoption of pet ID 8 should be recorded.");}// 宠物所有者测试用例function testGetAdopterAddressByPetId() public {// 期望领养者的地址就是本合约地址,因为交易是由测试合约发起交易,address expected = this;address adopter = adoption.adopters(8);Assert.equal(adopter, expected, "Owner of pet ID 8 should be recorded.");}// 测试所有领养者function testGetAdopterAddressByPetIdInArray() public {// 领养者的地址就是本合约地址address expected = this;address[16] memory adopters = adoption.getAdopters();Assert.equal(adopters[8], expected, "Owner of pet ID 8 should be recorded.");} }
Assert.sol 及 DeployedAddresses.sol是Truffle框架提供,在test目录下并不提供truffle目录。
TestAdoption合约中添加adopt的测试用例
运行测试用例
在终端中,执行
truffle test
如果测试通过,则终端输出:
Using network 'development'.Compiling ./contracts/Adoption.sol... Compiling ./test/TestAdoption.sol... Compiling truffle/Assert.sol... Compiling truffle/DeployedAddresses.sol...Compilation warnings encountered:truffle/Assert.sol:1563:9: Warning: Use of the "var" keyword is deprecated.var nstr = _itoa(value, 10);^------^ ,truffle/Assert.sol:1580:9: Warning: Use of the "var" keyword is deprecated.var nstr = _utoa(value, 10);^------^ ,truffle/Assert.sol:1597:9: Warning: Use of the "var" keyword is deprecated.var nstr = _ltoa(value);^------^ ,truffle/Assert.sol:1347:13: Warning: Invoking events without "emit" prefix is deprecated.TestEvent(true, "");^-----------------^ ,truffle/Assert.sol:1349:13: Warning: Invoking events without "emit" prefix is deprecated.TestEvent(false, message);^-----------------------^TestAdoption✓ testUserCanAdoptPet (246ms)✓ testGetAdopterAddressByPetId (231ms)✓ testGetAdopterAddressByPetIdInArray (287ms)3 passing (2s)
3. 创建用户接口和智能合约交互
我们已经编写和部署及测试好了我们的合约,接下我们为合约编写UI,让合约真正可以用起来。
在Truffle Box
pet-shop
里,已经包含了应用的前端代码,代码在src/
文件夹下。在编辑器中打开
src/js/app.js
可以看到用来管理整个应用的App对象,init函数加载宠物信息,就初始化web3.
web3是一个实现了与以太坊节点通信的库,我们利用web3来和合约进行交互。初始化web3
接下来,我们来编辑app.js修改initWeb3():
删除注释,修改为:initWeb3: function() {// Is there an injected web3 instance?if (typeof web3 !== 'undefined') {App.web3Provider = web3.currentProvider;} else {// If no injected web3 instance is detected, fall back to GanacheApp.web3Provider = new Web3.providers.HttpProvider('http://localhost:8545');}web3 = new Web3(App.web3Provider);return App.initContract();}
代码中优先使用 MetaMask提供的web3实例,如果没有则从本地环境创建一个。
实例化合约
使用truffle-contract会帮我们保存合约部署的信息,就不需要我们手动修改合约地址,修改initContract()代码如下:
initContract: function() {// 加载Adoption.json,保存了Adoption的ABI(接口说明)信息及部署后的网络(地址)信息,它在编译合约的时候生成ABI,在部署的时候追加网络信息$.getJSON('Adoption.json', function(data) {// Get the necessary contract artifact file and instantiate it with truffle-contract// 用Adoption.json数据创建一个可交互的TruffleContract合约实例。var AdoptionArtifact = data;App.contracts.Adoption = TruffleContract(AdoptionArtifact);// Set the provider for our contractApp.contracts.Adoption.setProvider(App.web3Provider);// Use our contract to retrieve and mark the adopted petsreturn App.markAdopted();});return App.bindEvents();},
处理领养
修改markAdopted()代码:
markAdopted: function(adopters, account) {var adoptionInstance;App.contracts.Adoption.deployed().then(function(instance) {adoptionInstance = instance;// 调用合约的getAdopters(), 用call读取信息不用消耗gasreturn adoptionInstance.getAdopters.call();}).then(function(adopters) {for (i = 0; i < adopters.length; i++) {if (adopters[i] !== '0x0000000000000000000000000000000000000000') {$('.panel-pet').eq(i).find('button').text('Success').attr('disabled', true);}}}).catch(function(err) {console.log(err.message);});}
修改handleAdopt()代码:
handleAdopt: function(event) {event.preventDefault();var petId = parseInt($(event.target).data('id'));var adoptionInstance;// 获取用户账号web3.eth.getAccounts(function(error, accounts) {if (error) {console.log(error);}var account = accounts[0];App.contracts.Adoption.deployed().then(function(instance) {adoptionInstance = instance;// 发送交易领养宠物return adoptionInstance.adopt(petId, {from: account});}).then(function(result) {return App.markAdopted();}).catch(function(err) {console.log(err.message);});});}
4. 安装和配置lite-server
【定义】lite-server 是一个全功能的网站架设工具软件包轻量级的,仅适用于开发 的 node 服务器, 它仅支持 web app。 它能够为你打开浏览器, 当你的html或是JavaScript文件变化时,它会识别到并自动帮你刷新浏览器, 还能使用套接字自动注入变化的CSS, 当路由没有被找到时,它将自动后退页面。
参考文章《第一课 如何在WINDOWS环境下搭建以太坊开发环境》的"(8)安装 lite-server 【可选】”章节完成lite-server的安装。bs-config.json文件指示了lite-server的工作目录。
{"server": {"baseDir": ["./src", "./build/contracts"]} }
./src
是网站文件目录./build/contracts
是合约输出目录以此同时,在package.json文件的scripts中添加了dev命令:
{"name": "pet-shop","version": "1.0.0","description": "","main": "truffle.js","directories": {"test": "test"},"scripts": {"dev": "lite-server","test": "echo \"Error: no test specified\" && exit 1"},"author": "","license": "ISC","devDependencies": {"lite-server": "^2.3.0"} }
当在新的命令窗口运行npm run dev的时候,就会启动lite-server
cd /usr/work/dapp-guide-pet-shop
npm run dev正常的运行结果有如下类似输出内容:
> pet-shop@1.0.0 dev /usr/work/dapp-guide-pet-shop > lite-server** browser-sync config ** { injectChanges: false,files: [ './**/*.{html,htm,css,js}' ],watchOptions: { ignored: 'node_modules' },server: { baseDir: [ './src', './build/contracts' ],middleware: [ [Function], [Function] ] } } [Browsersync] Access URLs:---------------------------------------Local: http://localhost:3000External: http://192.168.80.144:3000---------------------------------------UI: http://localhost:3001UI External: http://192.168.80.144:3001--------------------------------------- [Browsersync] Serving files from: ./src [Browsersync] Serving files from: ./build/contracts [Browsersync] Watching files...
5. 安装 MetaMask和配置区块链网络
安装 MetaMask
【定义】MetaMask 是一款插件形式的以太坊轻客户端,开发过程中使用MetaMask和我们的dapp进行交互是个很好的选择。
作者是在本地WINDOWS的CHROME浏览器上安装MetaMask钱包工具,具体的安装方法参考文章《第一课 如何在WINDOWS环境下搭建以太坊开发环境》的“(7)安装 MetaMask 【可选】”章节。
说明下,最详细的MetaMask安装/配置文章可参考欧阳哥哥的《以太坊钱包MetaMask使用教程》配置钱包
1. 接受隐私条款
点击浏览器地址栏右侧,MetaMask的狐狸头图标,第一次使用时,会出一个隐私提示,如下图:2. 接受服务条款
点击Accept
按钮,显示的是MetaMask的服务条款,如下图2-2:Accept
按钮默认是灰色的,将滚动条拉到底部,就可以点击Accept
按钮了3、创建新账号创建新账号:输入一串8位以上的密码,再次重复输入,点击
CREATE
按钮,即可完成。 -
在点击
CREATE
按钮后,MetaMask会为用户创建12个英文助记词,一定要保存好这些助记词,点击SAVE SEED WORDS AS FILE
可以将助词词以文件的形式保存到本地,建议使用纸笔手工记录并收藏于安全的地方。在点击
CREATE
按钮后,MetaMask会为用户创建12个英文助记词,一定要保存好这些助记词,点击SAVE SEED WORDS AS FILE
可以将助词词以文件的形式保存到本地,建议使用纸笔手工记录并收藏于安全的地方。连接开发区块链网络
默认连接的是以太坊主网(左上角显示),选择Custom RPC,添加Ubuntu的IP地址作为客户自定义RPC网络
http://192.168.80.144:8545
链接测试机以太坊客户端成功,菜单有链接成功的橙色√提示。
连接成功
这是左上角显示为Private Network,此时显示的是默认的Account 1空账号,ETH数量为0。导入Ganache-cli的第一个钱包账号
查看“trace.log”文件,可以Ganache-cli的第一个默认钱包地址为
(0) 629551aa45c594ce822c5b4a378d01cf46fb57c15b69a61eb400a4867ffab002 (1) a90103a95ed805acc52782eaa29eb061f6c2a9431fed3ac18a683ea3143a29b6
选择MetaMask的“Import Account”输入私钥,获取账号,可以查看对应ETH余额。
第一个钱包账户的余额:
第二个钱包账户的余额:
至此MetaMask的安装,配置已经完成。
6. 领养宠物
修改
.\dapp-guide-pet-shop\src\index.html
文件引用jquery的地址<!-- jQuery (necessary for Bootstrap's JavaScript plugins) --><!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>--><script src="http://libs.baidu.com/jquery/2.1.1/jquery.min.js"></script><!-- Include all compiled plugins (below), or include individual files as needed -->
在WINDOWS浏览器输入测试网站地址
http://192.168.80.144:3000/可以看到宠物商店的入口界面:
可爱的狗狗
点击“Adopt”按钮,领养这个最漂亮的狗狗宝贝。MetaMask会提示我们交易的确认,如图:点击“SUBMIT”按钮成功后,这个狗狗的按钮变为"SUCCESS",该狗狗已被包养了。
查看当前打开的账号ACCOUNT6,发现金额不再是100ETH,而是99.999ETH了。
恭喜你,开发并成功部署了一个DAPP区块链应用程序,并且领养了几只小狗狗。6. 知识对接服务
我们在知识星球开通了区块链入门专栏,用于存放本项目的工程源码等内容,并建立专项微信群用于技术交流,欢迎加入。
7. 参考
1),Truffle官网文档
2),一步步教你开发、部署第一个Dapp应用:宠物商店
3),web3.js 1.0中文手册-接口详细涉及web3.eth.personal函数
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 三面阿里Android开发岗无理由挂了,被HR一句话噎死,网友:HR有一票否决
前言 进入互联网大厂一般都是“过五关斩六将”,难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈。 近日,某位程序员发帖称,自己去阿里面试,三面都过了࿰…...
2024/5/2 0:31:58 - 刷题笔记:PAT-B1032-挖掘机技术哪家强
PAT-B1032-挖掘机技术哪家强 题目(20分) 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。 输入 输入在第 1 行给出不超过 10**5 的正整数 N,即参赛人数。随…...
2024/5/8 16:10:34 - Liunx下Nginx的相关配置
Liunx下Nginx的相关配置 一、创建用户和用户组 创建用户组,用户组名可以自定义 /usr/sbin/groupadd nginx创建用户,用户名可以自定义 /usr/sbin/useradd -g nginx nginx二、修改配置文件信息 打开配置文件目录 cd /usr/local/webserver/nginx/conf…...
2024/5/8 18:21:00 - LPC_2136 PLC,扩展方案,兼容西门子S7-200 CPU 224XP,兼容西门子软件。测试可用。bom,烧录文件,无源码
LPC_2136 PLC,扩展方案,兼容西门子S7-200 CPU 224XP,兼容西门子软件。测试可用。bom,烧录文件,无源码id645840469445&...
2024/4/14 9:52:05 - (Python语法篇)1.Python简介
(1),Python是一种解释型的,面向对象的语言,由C语言开发出来。 Python的特点: 1,可读性强。 2,简洁,生产效率高(解决同一问题,Python的代码量一…...
2024/4/14 9:52:05 - 自制轮式机器人
摘要:制作这个项目的起因是大一下学期那会儿我通过学校图书馆里的《无线电》杂志开始接触Raspberry Pi卡片式计算机和Arduino微控制器,其中Raspberry Pi给当初什么都不懂的我留下了非常深刻的印象:一个信用卡大小的板子竟然可以跑带有图形界面的GNU/Linux操作系统。 在强烈…...
2024/4/14 9:52:20 - Postgresql源码(29)Postgresql复制冲突的发生和处理逻辑分析
复制冲突发生 备库起事务在读,主库truncate表,备库复制冲突发生: -- 发生前, 5833是startup,7444是持锁的后台进程。后台进程拿表的读锁和虚拟事务ID的ex锁。 postgres# select * from pg_locks where pid ! pg_back…...
2024/5/8 22:22:43 - Ubuntu 【常用命令篇】--快速使用
Ubuntu 快速使用 特此郑重声明!该文章是原创作品,小编编写实属不易 ,帮忙点赞关注一下~转载小伙伴请注明出处!谢谢 概述 Ubuntu Linux是基于Debian Linux的操作系统,也是我们日常经常使用的命令信息 查看ubuntu版本号…...
2024/5/8 12:39:18 - 报package requirement‘ta-lib==0.4.17‘ is not satisfied,执行run.py失败
目录 一、python3.7已安装ta-lib 0.4.22版本,更新vnpy最新代码后报package requirementta-lib0.4.17 is not satisfied 1.手动回退ta-lib版本至0.4.17失败,报如下异常: 2.去加州大学网站寻找.whl 包直接安装 https://www.lfd.uci.edu/~gohlke/pythonl…...
2024/5/8 18:35:13 - Django框架|个人博客网站小项目
Django框架|个人博客网站小项目一、创建工程1. 创建源码远程仓库:blog2. 克隆远程仓库3. 创建工程(1)进入本地仓库目录(2)创建博客项目虚拟环境,并在此项目下安装Django框架(3)创建博…...
2024/5/8 21:40:37 - OO面向对象
一、类、对象 1、对象:软件中真实存在的单个个体/东西 类:类别/类型,代表一类个体 2、类是对象的模子,对象是类的具体的实例 3、类中可以包含: (1)对象的属性/特征--------------------…...
2024/4/14 15:00:20 - 计算机毕业设计asp.net城市供电管理系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
一、源码特点 ASP.NET C# 城市供电管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为vs2010,数据库为sqlserver2008,或者以上版本都可以,使用c#语言开发…...
2024/4/7 15:33:29 - CSS设置标签、图片,放大、缩小、旋转、移动、倾斜(tranform)
CSS设置标签、图片,放大、缩小、旋转、移动、倾斜(tranform) 1.缩小和放大属性(scale) 格式:tranform:缩小类型(数值); 注意:缩小和放大都是 scale ; 其中的…...
2024/4/17 6:40:31 - C语言基础知识详解(宏常量、const修饰、字符串)
1、用#define 定义的宏常量:可以使用#define定义一个标识符来表示一个常量。 其特点是:定义的标识符不占内存,只是临时的符号,在预编译结束后就不存在了 2、用const修饰字修饰的变量,称为常变量。//c语言中的const //…...
2024/5/6 14:55:49 - 西门子PLC CPU226带网口,生产方案资料
西门子PLC CPU226带网口,生产方案资料,我们从国内厂家引进后修改了软硬件,更方便制造。一套成本只要200左右。实际项目中使用了两年共五百多套,稳定可靠,特点如下: 1采用单板结构,贴片及直插件全…...
2024/5/6 6:54:16 - HTTP学习笔记
HTTP学习笔记 HTTP基本原理 HTTP协议常用请求方法 方 法描 述GET请求指定页面信息,并返回响应内容POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在求体中。POST请求可能会导致新的资源的建立、或已…...
2024/4/17 21:13:34 - 题目:找朋友
问题 B: 找朋友 时间限制: 1.000 Sec 内存限制: 128 MB 题目描述 小学毕业后,同学们都进入了不同的初中,小明非常想念小伙伴们,所以他打算联系小学的同学们。 现在他得到了市内某所初中的所有名单,找出其中小明的小伙伴们。 输入…...
2024/5/6 8:23:01 - debezium系列之:The database history couldn‘t be recovered. Consider to increase the value for database.
debezium系列之:The database history couldnt be recovered. Consider to increase the value for database. 一、debezium报错二、报错产生原因三、报错解决方法四、修改配置重启connector一、debezium报错 The database history couldn’t be recovered. Consider to incre…...
2024/4/14 9:52:20 - 关于正点原子stm32f10x除串口USART1外其他串口通信
首先,开发板的串口通信是通过USB进行的,所以开发板上串口1的发送端PA9和接收端PA10是通过跳线帽连接到RXD和TXD上的,如下图; 要用上其他的串口进行通信,就需要将其他串口的发送端与接收端与RXD和TXD通过杜邦线相连&am…...
2024/4/16 23:57:15 - 备战蓝桥杯day3__数码管静态显示
一,元件介绍 数码管分共阴和共阳,com端用于控制哪个数码管亮,而a,b,c等控制数码管的段码,共阳数码管及段码对应的端口为低电平时,则亮起,共阴与其相反。 二,代码部分 …...
2024/5/6 17:49:07
最新文章
- Yolov8实现loopy视频识别
1、前言 loopy是一个非常可爱的动漫角色(可爱粉色淀粉肠),闲来无事,打算用yolov8训练一个模型对loopy进行识别。 2、准备工作 先在网络上搜寻很多loopy的图片,然后将图片导入Lablel Studio软件进行标注,并…...
2024/5/8 23:23:39 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - OpenHarmony开发-连接开发板调试应用
在 OpenHarmony 开发过程中,连接开发板进行应用调试是一个关键步骤,只有在真实的硬件环境下,我们才能测试出应用更多的潜在问题,以便后续我们进行优化。本文详细介绍了连接开发板调试 OpenHarmony 应用的操作步骤。 首先…...
2024/5/8 15:56:24 - 备战蓝桥杯Day37 - 真题 - 特殊日期
一、题目描述 思路: 1、统计2000年到2000000年的日期,肯定是需要遍历 2、闰年的2月是29天,非闰年的2月是28天。我们需要判断这一年是否是闰年。 1、3、5、7、8、10、12月是31天,4、6、9、11月是30天。 3、年份yy是月份mm的倍数…...
2024/5/8 14:53:08 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/7 14:25:14 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57