WDK学习笔记_区块链项目实现_MAE

2023-11-11

摘要

项目:基于区块链的凤鸡溯源项目

  1. 区块链网络配置文件编写进度:已经完成了区块链配置文件的编写,在区块链网络中,总共设置了四个组织,分别为育种组织、养殖户组织、政府职能组织、普通用户组织,所有用户均通过普通用户组织的节点进行查询溯源的操作。
  2. 智能合约的编写进度:已经完成了向区块链账本中添加数据及删除数据的合约编写,但还未测试其有效性。下周应该可以实现该项目的后端服务器。
  3. 关于各节点服务器的处理:真实用于生产应用的区块链网络是一个组织对应着一系列公司,一个节点对应一家公司,但这样实现成本较高,本次项目目的是学习,故采用docker容器技术,模拟出一系列服务器代替各个公司的服务器。

深度学习: MAE
MAE是何凯明老师的新作,该模型是一个预训练模型,通过masked图片上的一些patch,让模型还原出原图片,得到一个能够很好的提取图片信息的encoder,在此基础上,再进行模型的训练。实验证明,使用该方法的ViT框架,在小规模的数据中,也可以得到很好的效果,该方法也可以考虑一定程度的运用在时序预测上,预训练时让模型看一小段时序数据,还原出全部数据,像Bert模型那样。
毕设:学弟已经掌握了区块链网络的搭建,同时也在搭建前端页面。


项目:区块链凤鸡溯源项目的实现

实现总流程

  1. 编写区块链网络配置文件:
    1. 编写证书配置文件,用配置文件生成各个组织的证书。
    2. 编写创世区块和通道的配置文件,生成创世区块及通道文件(.tx类型文件)。
    3. 编写启动区块链的配置文件及客户端配置文件(客户端是用来和区块链交互的,和go sdk效果一样,前者是在命令行输入命令,适合测试阶段使用)。启动区块链网络将各个组织加入通道(在fabric中通一个通道内的组织共享一个账本)。
  2. 实现智能合约
    1. 为各个组织编写链码,确定交易逻辑。
    2. 将链码分别安装到各个组织的节点上。
  3. 搭建服务端路由组
    1. 编写go-sdk函数,调用链码,与区块链交互。
    2. 利用gin框架搭建路由组

1.1 编写区块链网络配置文件

1.1.1 证书配置文件(crypto-config)

总体逻辑

总共4个组织,分别为育种组织、养殖户组织、政府职能组织、普通用户组织,前三个组织均设置为简单的2节点,2 user,普通用户组织为1节点,1 user。所有用户均通过该普通用户组织的节点进行查询溯源的操作。

详情
  1. 排序节点域名:orderer.trace.com。
  2. 育种组织域名:generate.trace.com, 节点2个,每个节点的user 2个。
  3. 养殖户组织域名:breed.trace.com,, 节点2个,每个节点的user 2个。
  4. 政府职能域名:government.trace.com, 节点2个,每个节点的user 2个。
  5. 普通用户域名:user.trace.com,, 节点1个,每个节点的user 1个。

生成证书文件命令:cryptogen generate --config=./crypto-config.yaml

代码
# crypto-config.yaml
# ---------------------------------------------------------------------------
# "OrdererOrgs" - Definition of organizations managing orderer nodes
# ---------------------------------------------------------------------------
OrdererOrgs:
  # ---------------------------------------------------------------------------
  # Orderer
  # ---------------------------------------------------------------------------
  - Name: Orderer
    Domain: trace.com
    Specs:
      - Hostname: orderer
# ---------------------------------------------------------------------------
# "PeerOrgs" - Definition of organizations managing peer nodes
# ---------------------------------------------------------------------------
PeerOrgs:
  # ---------------------------------------------------------------------------
  # org1: OrgGenerate 育种组织
  # ---------------------------------------------------------------------------
  - Name: OrgGenerate
    Domain: generate.trace.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 2
      
  # ---------------------------------------------------------------------------
  # org2: OrgBreed 养殖户组织
  # ---------------------------------------------------------------------------
  - Name: OrgBreed
    Domain: breed.trace.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 2

  # ---------------------------------------------------------------------------
  # org3: OrgGovernment 政府职能组织
  # ---------------------------------------------------------------------------
  - Name: OrgGovernment
    Domain: government.trace.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 2

  # ---------------------------------------------------------------------------
  # org4: OrgUser 普通用户组织
  # ---------------------------------------------------------------------------
  - Name: OrgUser
    Domain: user.trace.com
    EnableNodeOUs: true
    Template:
      Count: 1
    Users:
      Count: 1

1.1.2 创世区块及通道配置文件

总体逻辑

在该文件中需要配置各个组织的msp文件,组织间进行通信的锚节点,通信端口,排序机制,排序规则等。

  1. 生成创世区块文件命令:configtxgen -profile OrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
  2. 生成通道文件命令:configtxgen -profile OrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
  3. 生成锚节点更新文件
    OrgGenerate: configtxgen -profile OrgsChannel -outputAnchorPeersUpdate GenerateMSPanchors.tx -channelID mychannel -asOrg OrgGenerateMSP
    OrgGovernment: configtxgen -profile OrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/GovernmentMSPanchors.tx -channelID mychannel -asOrg OrgGovernmentMSP
    OrgBreed: configtxgen -profile OrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/BreedMSPanchors.tx -channelID mychannel -asOrg OrgBreedMSP
    OrgUser: configtxgen -profile OrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/UserMSPanchors.tx -channelID mychannel -asOrg OrgUserMSP
详情
  1. 排序节点配置:
    1. 排序类型:solo
    2. 通信地址: orderer.trace.com:7050
    3. 产生区块时间:2s
    4. 交易规格:满足以下条件之一,就会产生区块。
      当数据条数到达100条;
      区块数据量超过64M;
  2. 各个组织配置(各个组织配置都差不多,在此以育种组织为例):锚节点通信地址: peer0.generate.trace.com:7050
代码
# configtx.yaml

---
################################################################################
#
#   Section: Organizations
#
#   - This section defines the different organizational identities which will
#   be referenced later in the configuration.
#
################################################################################
Organizations:
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: crypto-config/ordererOrganizations/trace.com/msp

    - &org_generate
        Name: OrgGenerateMSP
        ID: OrgGenerateMSP
        MSPDir: crypto-config/peerOrganizations/generate.trace.com/msp
        AnchorPeers:
            - Host: peer0.generate.trace.com
              Port: 7051

    - &org_breed
        Name: OrgBreedMSP
        ID: OrgBreedMSP
        MSPDir: crypto-config/peerOrganizations/breed.trace.com/msp
        AnchorPeers:
            - Host: peer0.breed.trace.com
              Port: 7051
    - &org_government
        Name: OrgGovernmentMSP
        ID: OrgGovernmentMSP
        MSPDir: crypto-config/peerOrganizations/government.trace.com/msp
        AnchorPeers:
            - Host: peer0.government.trace.com
              Port: 7051
    - &org_user
        Name: OrgUserMSP
        ID: OrgUserMSP
        MSPDir: crypto-config/peerOrganizations/government.trace.com/msp
        AnchorPeers:
            - Host: peer0.user.trace.com
              Port: 7051

################################################################################
#
#   SECTION: Capabilities
#
################################################################################
Capabilities:
    Global: &ChannelCapabilities
        V1_1: true
    Orderer: &OrdererCapabilities
        V1_1: true
    Application: &ApplicationCapabilities
        V1_2: true

################################################################################
#
#   SECTION: Application
#
################################################################################
Application: &ApplicationDefaults
    Organizations:

################################################################################
#
#   SECTION: Orderer
#
################################################################################
Orderer: &OrdererDefaults
    # Available types are "solo" and "kafka"
    OrdererType: solo
    Addresses:
        - orderer.trace.com:7050

    BatchTimeout: 2s
    BatchSize:
        MaxMessageCount: 100
        AbsoluteMaxBytes: 64 MB
        PreferredMaxBytes: 512 KB
    Kafka:
        Brokers:
            - 127.0.0.1:9092
    Organizations:

################################################################################
#
#   Profile
#
################################################################################
Profiles:
    OrgsOrdererGenesis:
        Capabilities:
            <<: *ChannelCapabilities
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *org_generate
                    - *org_breed
                    - *org_government
                    - *org_user
    OrgsChannel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *org_generate
                - *org_breed
                - *org_government
                - *org_user
            Capabilities:
                <<: *ApplicationCapabilities

1.1.3 启动区块链的配置文件及客户端配置文件

总体逻辑

企业级的区块链网络是各个组织对应着一系列公司,各个节点分别对应一家公司,这样实现成本较高,本次项目目的是学习,故采用docker容器,在一台电脑上,启动多个容器,实现区块链网络;
故在启动区块链的文件中需要配置容器版本,容器与外界的通信端口,容器卷的映射,tls加密通信的配置等。
客户端配置文件需要设置所用容器版本,客户端采用哪个证书账号进行登陆。

代码

因为每个节点都需要一个配置文件,代码繁多,但配置文件的配置都差不多,故在此以generate的peer0节点为例。

version: '2'

services:

    peer0.generate.trace.com:
      container_name: peer0.generate.trace.com
      image: hyperledger/fabric-peer:latest
      environment:
        - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
        - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=trace_default
        - CORE_LOGGING_LEVEL=INFO
        #- CORE_LOGGING_LEVEL=DEBUG
        - CORE_PEER_GOSSIP_USELEADERELECTION=true
        - CORE_PEER_GOSSIP_ORGLEADER=false
        - CORE_PEER_PROFILE_ENABLED=true
        - CORE_PEER_LOCALMSPID=OrgGenerateMSP
        - CORE_PEER_ID=peer0.generate.trace.com
        - CORE_PEER_ADDRESS=peer0.generate.trace.com:7051
        - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.generate.trace.com:7051
        - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.generate.trace.com:7051
        # TLS
        - CORE_PEER_TLS_ENABLED=true
        - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
        - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
        - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
      volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/generate.trace.com/peers/peer0.generate.trace.com/msp:/etc/hyperledger/fabric/msp
        - ./crypto-config/peerOrganizations/generate.trace.com/peers/peer0.generate.trace.com/tls:/etc/hyperledger/fabric/tls
      working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
      command: peer node start
      networks:
        default:
          aliases:
            - trace
      ports:
        - 7051:7051
        - 7053:7053

    cli:
      container_name: cli
      image: hyperledger/fabric-tools:latest
      tty: true
      stdin_open: true
      environment:
        - GOPATH=/opt/gopath
        - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
        #- CORE_LOGGING_LEVEL=DEBUG
        - CORE_LOGGING_LEVEL=INFO
        - CORE_PEER_ID=cli
        - CORE_PEER_ADDRESS=peer0.generate.trace.com:7051
        - CORE_PEER_LOCALMSPID=OrgGenerateMSP
        - CORE_PEER_TLS_ENABLED=true
        - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/generate.trace.com/peers/peer0.generate.trace.com/tls/server.crt
        - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/generate.trace.com/peers/peer0.generate.trace.com/tls/server.key
        - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/generate.trace.com/peers/peer0.generate.trace.com/tls/ca.crt
        - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/generate.trace.com/users/Admin@generate.trace.com/msp
      working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
      command: /bin/bash
      volumes:
          - /var/run/:/host/var/run/
          - ./chaincode/:/opt/gopath/src/github.com/chaincode
          - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
          #- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
          - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
      depends_on:
        - peer0.generate.trace.com
      
      networks:
          default:
            aliases:
              - trace

1.2 实现智能合约

1.1.1 结构体设计

溯源的目的是让用户追溯购买的凤鸡来自哪个育种企业,被哪个养殖户养殖,是否经过检疫等等信息,所以每个凤鸡都需要有其独一无二的编号,无论其流经哪个组织,其编号不能变,但每个组织中凤鸡都有不同的属性,故如下定义结构体:
在这里插入图片描述

1.1.2 main函数

main函数主要分为两部分,第一部分为Init函数,该函数的作用是链码初始化。还有一部分是Invoke函数,该函数通过接受外部参数,执行对应的功能。

代码
package main

import (
	"fmt"
	"github.com/hyperledger/fabric/core/chaincode/shim"
	"github.com/hyperledger/fabric/protos/peer"
)

type GenerateChaincode struct {
}

func (t *GenerateChaincode) Init(stub shim.ChaincodeStubInterface) peer.Response {
	return shim.Success([]byte("OK"))
}
func (t *GenerateChaincode) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
	fun, args := stub.GetFunctionAndParameters()
	if fun == "AddData" {
		return AddData(stub, args)
	} else if fun == "QueryDataByID" {
		QueryDataByID(stub, args[0])
	} else {
		return shim.Error("input function error")
	}
	return shim.Success(nil)
}

func main() {
	err := shim.Start(new(GenerateChaincode))
	if err != nil {
		fmt.Println("an error occurred when starting the chaincode")
	}
}

1.1.3 添加、查询数据函数

  1. PutData函数:因为区块链中存入的数据是序列化的数据,该函数负责将输入数据序列化后存入区块链账本中。
  2. AddData函数: 输入数据,调用PutData将数据存入区块链。
  3. QueryDataByID函数: 输入凤鸡ID,溯源查询数据。
代码
func PutData(stub shim.ChaincodeStubInterface, gen commonModel.GenerateCrop) ([]byte, bool) {
	data, err := json.Marshal(gen)
	if err != nil {
		return nil, false
	}
	err = stub.PutState(gen.ID, data)
	if err != nil {
		return nil, false
	}
	return data, true
}
func AddData(stub shim.ChaincodeStubInterface, args []string) peer.Response {
	var data commonModel.GenerateCrop
	err := json.Unmarshal([]byte(args[0]), &data)
	if err != nil {
		return shim.Error("data Unmarshal failed")
	}
	_, e := PutData(stub, data)
	if e == false {
		return shim.Error("data saved failed")
	}
	return shim.Success([]byte("successful saved"))
}

func QueryDataByID(stub shim.ChaincodeStubInterface, ID string) (commonModel.GenerateCrop, bool) {
	var queryResult commonModel.GenerateCrop
	data, err := stub.GetState(ID)
	if err != nil {
		return queryResult, false
	}
	err = json.Unmarshal(data, &queryResult)
	if err != nil {
		return queryResult, false
	}
	return queryResult, true
}

二、深度学习:MAE

2.1 框架

  1. 将一张输入图片,分割成多个patch;
  2. 随机mask掉一些patch;
  3. 将unmask的patch拉平得到embedding输入到encoder中;
  4. 将encoder的输入投映到原始的位置向量中;
  5. 经过线性层输入到decoder中,decoder还原出原始图片。
    在这里插入图片描述
    MAE 方法严格来讲属于一种去噪自编码器 (Denoising Auto-Encoders (DAE)),去噪自动编码器是一类自动编码器,它破坏输入信号,并学会重构原始的、未被破坏的信号。MAE 的 Encoder 和 Decoder 结构不同,是非对称式的。Encoder 将输入编码为 latent representation,而 Decoder 将从 latent representation 重建原始信号。

2.2 MAE Encoder

MAE Encoder 采用 ViT 架构,但只会作用于 unmasked images。和 ViT 思路一样,MAE Encoder 会先通过 Linear Projection 编码图片,再加上位置编码,随后送入一堆连续的 Transformer Block 里面。但是编码器只对整个图片 patches 集合的一个小子集 (例如25%)进行操作,而删除 masked patches。这里和 BERT 做法不一样,BERT 使用对于 mask 掉的部分使用特殊字符,而 MAE 不使用掩码标记。

2.3 MAE Decoder

MAE Decoder 采用 Transformer 架构,输入整个图片 patches 集合,不光是 unmasked tokens ,还有被 mask 掉的部分 。每个 mask tokens 都是一个共享的、学习的向量,它指示了这里有一个待预测的 tokens。作者还将位置嵌入添加到这个完整 image patch 集合中的所有 tokens 中,位置编码表示每个 patches 在图像中的位置的信息。
MAE Decoder 仅用于预训练期间执行图像重建任务。因为自监督学习的特点就是只用最后预训练好的 Encoder 完成分类任务。因此,可以灵活设计与编码器设计无关的解码器结构。作者用比编码器更窄更浅的很小的解码器做实验。 在这种非对称的设计下,tokens 就可以由轻量级解码器处理,这大大缩短了预训练的时间。

2.4 自监督学习目标函数

Decoder 的最后一层是一个 Linear Projection 层,其输出的 channel 数等于图像的像素 (pixel) 数。所以 Decoder 的输出会进一步 reshape 成图像的形状。损失函数就是 MSE Loss,即直接让 reconstructed image 和 input image 的距离越接近越好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WDK学习笔记_区块链项目实现_MAE 的相关文章

  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • PHP MYSQL文件内容转义问题

    我正在尝试使用 php 将 pdf 文件上传到 mysql 数据库中 除了文件内容之外 一切都很好 无论我如何尝试转义特殊字符 查询总是失败 主要是 未知命令 n 我使用过addslashes mysql real escape strin
  • libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

    我应该使用哪个来链接 mysqlclient 库 它们之间有什么区别 我似乎找不到答案 谢谢 较新版本的 MySQL 客户端发行版不包含 r 版本 有些可能有从 libmyqslclient r a 到 libmyqslclient a 的
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 错误代码:1305。函数或过程不存在

    因此 我在 MySQL 中创建一个函数 然后尝试向用户授予使用该函数的权限 但我无法这样做 这就是我正在做的 DELIMITER USE rxhelp36 scbn DROP FUNCTION IF EXISTS businessDayDi
  • MySQL 错误 1172 - 结果包含多行

    在存储过程中运行查询时 我从 MySQL 收到此错误 错误代码 1172 结果包含多行 我理解错误 我正在做一个SELECT INTO var list 因此查询需要返回单行 当我使用LIMIT 1 or SELECT DISTINCT 错
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 条消息列表。使用emitter.setMaxListeners()来增加限制

    我知道这可能会标记为重复的解决方案 但堆栈溢出的解决方案对我不起作用 Problem node 5716 MaxListenersExceededWarning Possible EventEmitter memory leak detec
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat

随机推荐

  • JQuery 判断访问的浏览器是pc还是手机

    摘要 以下代码用于JQuery判断访问的浏览器的类型 判断访问类型是电脑还是手机 author 2017年9月27日 function var mobile flag isMobile true为PC端 false为手机端 if mobil
  • c语言求一个字符数的补码,C语言-数据类型(原码、反码、补码)

    1 原码 在数值前直接加一符号位的表示法 例如 符号位 数值位 7 原 0 0000111 B 7 原 1 0000111 B 注意 a 数0的原码有两种形式 0 原 00000000B 0 原 10000000B b 8位二进制原码的表示
  • 编译CGAL

    抛弃CMake 长期以来 我一直以为编译CGAL是一项十分艰巨的任务 直到有一天 我决定彻底抛弃繁复的CMake 转而使用简简单单的QMake 这才发现 编译CGAL是如此简单的一个事儿 注 本文所指的CGAL是指CGAL4 14及之后的版
  • Web服务器群集:Tomcat配置https证书

    目录 一 理论 1 SSL 2 HTTPS协议和HTTP协议的区别 3 https证书配置 4 tomcat强制使用https 二 实验 1 https证书配置过程 2 tomcat强制使用https 三 总结 一 理论 1 SSL 1 概
  • 应用RFID技术的智慧图书馆系统带来了哪些便利?

    RFID技术是一种非接触式的自动识别技术 它通过射频信号自动识别目标对象并获取相关数据 识别工作无须人工干预 可工作于各种恶劣环境 RFID技术可识别高速运动物体并可同时识别多个标签 操作快捷方便 RFID技术主要由三个部分组成 标签 由耦
  • 最流行的自动化测试工具,总有一款适合你(附部分教程)

    前言 在自动化测试领域 自动化工具的核心地位毋庸置疑 本文总结了最顶尖的自动化测试工具和框架 这些工具和框架可以帮助组织更好地定位自己 跟上软件测试的趋势 这份清单包含了开源和商业的自动化测试解决方案 1 Selenium Selenium
  • App Tamer for Mac(CPU智能控制管理) v2.8.1

    App Tamer 是一款针对 macOS 平台的软件 它可以帮助用户有效地管理和控制正在运行的应用程序 通过优化 CPU 使用率 减少电池消耗和降低系统负载 App Tamer 提供了更加流畅和高效的计算体验 App Tamer mac软
  • 程序员下班儿后如何提升自己?

    作为一个程序员 下班后提升自己是非常重要的 以下是GPT提供的一些建议 1 学习新技术 技术行业发展迅速 不断学习新技术是保持竞争力的关键 了解行业趋势 选择合适的新技术进行学习和实践 2 参与开源项目 积极参与开源项目可以提高自己的编码能
  • 【MATH6005-Introduction to Python and MATH6181-Python & Forecasting】

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 Mid module Assignment Assignment 1 TASK1 Function prototype Function Behavior atributes
  • vue实现浏览器桌面通知

    浏览器桌面通知 当浏览器最小化 或者切换到其他标签页不在当前系统页面 或在其他页面时依然可以显示通知 使用前注意 生产环境地址必须为https协议 开发环境可以用localhost IP地址 且必须允许显示通知才能显示桌面通知 存在兼容性问
  • golang urfave/cli 命令包

    官方文档 https godoc org github com urfave cli 提供了一个命令行框架 go get github com urfave cli import github com urfave cli 导入包 cli
  • GET和POST之间的主要区别

    1 GET是从服务器上获取数据 POST是向服务器传送数据 2 在客户端 GET方式在通过URL提交数据 数据在URL中可以看到 POST方式 数据放置在HTML HEADER内提交 3 对于GET方式 服务器端用Request Query
  • 认识动态规划

    你的打赏是我奋笔疾书的动力 概念篇 线性规划 下图给出了模型 其中目标函数和约束条件里面的不等式函数都是关于xi的线性函数 这类问题都有一些不错的求解方式 整数规划 若在线性模型中 变量限制为整数 则称为整数线性规划 即为整数规划 可见整数
  • 低代码——前端进阶的必修课

    近年来 随着技术的不断发展 前端开发工作变得越来越重要 作为初中级前端工程师 我们始终在追求进步 不断探索新技术 新思路 以提升自己的竞争力 而如今 学习低代码技术已刻不容缓 在这篇文章中 我将为大家介绍前端进阶的高级指南 重点探讨低代码技
  • JS-----数据结构与算法(2)

    目录 三 栈结构 1 认识栈结构 2 封装栈结构 3 应用 3 1 十进制转二进制 3 2 进制转换法 四 队列 1 队列是什么 2 队列的封装 3 队列的应用 击鼓传花 4 双端队列 5 判断是否为回文 三 栈结构 1 认识栈结构 栈 s
  • hdu 2024C语言合法标识符

    链接http acm hdu edu cn showproblem php pid 2024 思路 根据定义写 1 所有标识符必须由一个字母 a z或A Z 或下划线 开头 2 标识符的其它部分可以用字母 下划线或数字 0 9 组成 3 大
  • python中format的用法-python基础_格式化输出(%用法和format用法)

    目录 用法 1 整数的输出 o oct 八进制 d dec 十进制 x hex 十六进制 1 gt gt gt print o 20 2 24 3 gt gt gt print d 20 4 20 5 gt gt gt print x 20
  • 体积着色器(Volume Shader)

    控制体积材质 如灯光雾 的颜色 透明度和蒙版不透明度 通过该着色器 可以直接将其他属性和效果与材质的颜色 透明度和蒙版不透明度相连 体积着色器 Volume Shader 可用于 聚光灯 Spot Light 点光源 Point Light
  • 月份表示用指针数组保存表示每个月份的英文单词以及“Illegal month”的首地址,然后编程实现:从键盘任意输入一个数字表示月份值n,程序输出该月份的英文表示,若n不在1~12之间,则输出“Il

    提示 各个月份的写法分别是 January February March April May June July August September October November December 程序的运行结果示例1 Input mon
  • WDK学习笔记_区块链项目实现_MAE

    文章目录 摘要 项目 区块链凤鸡溯源项目的实现 实现总流程 1 1 编写区块链网络配置文件 1 1 1 证书配置文件 crypto config 总体逻辑 详情 代码 1 1 2 创世区块及通道配置文件 总体逻辑 详情 代码 1 1 3 启