文章目录

  • Mash
  • Install
  • Usage
    • Tutorials
      • 简单基因组距离评估
      • 通过构建草图(sketching)节省运行时间
      • 整合构建多个基因组的sketch
      • 将原始序列与已经存在的RefSeq sketch比较
      • 筛选包含RefSeq基因组的reads集(new in Mash v2.0)
  • Sketches须知
  • 使用MinHash表减少representations
    • k-mer size
    • sketch size
    • 编码链和字母
    • Sketching reads
    • Working with sketch files
  • Distance Estimation
    • MinHash Jaccard estimation
    • Mash最终输出的评估距离
    • mash dist full help
    • mash sketch full help
  • Reference

Mash

Mash, Fast genome and metagenome distance estimation using MinHash

Install

conda install -c bioconda mash

Usage

Tutorials

简单基因组距离评估

下载 E. coli 基因组:
genome1.fna
genome2.fna
运行:

# 默认到标准输出
(drep) [u@h@mash]$ time mash dist  genome1.fna genome2.fna
Sketching genome1.fna (provide sketch file made with "mash sketch" to skip)...done.
genome1.fna     genome2.fna     0.0222766       0       456/1000real    0m0.555s
user    0m0.532s
sys     0m0.020s

可见使用mash比较两个ecoli基因组连1s都不到

  • 参考和查询序列都可以是fasta或fastq,gzipped或不gzipped,或Mash sketch(.msh的文件,构建的kmer index,类似于基因组index,不同基因组比较时需是同一个k-mer大小)。查询文件也可以是基因组的名称列表,使用 -l指定。默认情况下,比较整个文件(见-i)。

  • 结果:
    制表符分割的文件,代表着Reference-ID, Query-ID, Mash-distance, P-value, and Matching-hashes:

  • 第三列代表mash距离,数值越小表示距离越近,具体算法参加下文

  • 第四列代表p值,越小越可信

  • 第五列表示匹配的hashes,匹配数越多,二者距离越小,物种相似度越高

  • -l指定输入序列名称list,每行一个基因组文件名称

(drep) [u@h@mash]$ ls
genome1.fna  genome2.fna  query.list
(drep) [u@h@mash]$ cat query.list
genome1.fna
genome2.fna
(drep) [u@h@mash]$ time mash dist -l  genome1.fna query.list
Sketching genome1.fna (provide sketch file made with "mash sketch" to skip)...done.
genome1.fna     genome1.fna     0       0       1000/1000
genome1.fna     genome2.fna     0.0222766       0       456/1000real    0m0.790s
user    0m0.771s
sys     0m0.016s

通过构建草图(sketching)节省运行时间

对于大型基因组比较,最好先构建草图,节省时间

mash sketch genome1.fna
mash sketch genome2.fna
mash dist genome1.fna.msh genome2.fna.msh
# example
[NMDC]$ mash sketch genome1.fna
Sketching genome1.fna...
Writing to genome1.fna.msh...
[NMDC]$ mash sketch genome2.fna
Sketching genome2.fna...
Writing to genome2.fna.msh...
[NMDC]$ mash dist genome1.fna.msh genome2.fna.msh
genome1.fna     genome2.fna     0.0222766       0       456/1000

sketch默认输出*.msh的文件

整合构建多个基因组的sketch

下载另外一个基因组:
genome3.fna
绘制前两个基因组的草图,创建一个整合的库,使用mash info来验证其内容,并估计成对距离:

mash sketch -o reference genome1.fna genome2.fna
mash info reference.msh
mash dist reference.msh genome3.fna
# -o sketch的输出前缀
# mash dist 第一个是参考库的sketch文件,第二个参数是查询基因组
[NMDC]$ mash sketch -o combined_reference genome*.fna
-o 输出的合并参考基因组sketch名称, genome*.fna为待合并的基因组,支持通配符
# Writing to combined_reference.msh...
[NMDC]$ mash info combined_reference.msh #使用mash info 查看sketch结果
Header:K-mer size:                    21 (64-bit hashes) #构建sketch数据库kmer大小Alphabet:                      ACGT (canonical) #核酸序列Target min-hashes per sketch:  1000 #每个基因组sketch的最小hash数Sketches:                      2 #合并的基因组数量
Sketches:Hashes  Length   ID           Comment1000    4639675  genome1.fna  -1000    5498450  genome2.fna  -

这将估算从每个查询(这里有一个)到每个参考基因组(在草图文件中有两个)的距离

[NMDC]$  mash dist combined_reference.msh genome3.fna
genome1.fna   genome3.fna     0       0       1000/1000
genome2.fna   genome3.fna     0.0222766       0       456/1000

将原始序列与已经存在的RefSeq sketch比较

下载参考基因组sketch文件(reads使用10x-100x coverage 任何单菌测序的均可):
refseq.genomes.k21.s1000.msh
质粒基因组:
refseq.genomes+plasmids.k21.s1000.msh
refseq.plasmids.k21.s1000.msh

合并双端序列:

cat reads_1.fastq reads_2.fastq > reads.fastq

Sketch the reads,使用-m 2通过忽略可能是错误的单拷贝k-mers来改善结果

mash sketch -m 2 reads.fastq
  • 默认输出reads.fastq.msh
    执行mash dist,使用RefSeq archive作为参考库,read sketch 作为查询:
mash dist refseq.genomes.k21.s1000.msh reads.fastq.msh > distances.tab
[NMDC]$ cat reads_1.fq reads_2.fq  >reads.fq
[NMDC]$ mash sketch -m 2  reads.fq
Sketching reads.fq...
Estimated genome size: 981.095
Estimated coverage:    2
Writing to reads.fq.msh...
[NMDC]$ mash dist combined_reference.msh reads.fq.msh
genome1.fna     reads.fq        1       1       0/1000
genome2.fna     reads.fq        1       1       0/1000

Sort the results to see the top hits and their p-values:

sort -gk3 distances.tab | head
#  sort -g, compare according to general numerical value

筛选包含RefSeq基因组的reads集(new in Mash v2.0)

如果一个read set可能有多个基因组,可以根据数据库进行 “筛选”,以估计每个基因组在读集中的包含程度。我们可以使用SRA工具包来下载ERR024951。

fastq-dump ERR024951

.并对照Refseq基因组(上面的链接)进行筛选,对结果进行排序。

mash screen refseq.genomes.k21s1000.msh ERR024951.fastq > screen.tab
sort -gr screen.tab | head

我们看到了预期的生物体-肠道沙门氏菌,但也有明显的污染物-肺炎克雷伯菌。字段为[identity,shared-hash,median-multiplicity,p-value,query-ID,query-comment]。

0.99957       991/1000        26      0       GCF_000841985.1_ViralProj14228_genomic.fna.gz   NC_004313.1 Salmonella phage ST64B, complete genome
0.99957       991/1000        24      0       GCF_002054545.1_ASM205454v1_genomic.fna.gz      [57 seqs] NZ_MYON01000010.1 Salmonella enterica strain BCW_4905 NODE_10_length_152932_cov_1.77994, whole genome shotgun sequence [...]
0.999522      990/1000        102     0       GCF_900086185.1_12082_4_85_genomic.fna.gz       [51 seqs] NZ_FLIP01000001.1 Klebsiella pneumoniae strain k1037, whole genome shotgun sequence [...]
0.999329      986/1000        24      0       GCF_002055205.1_ASM205520v1_genomic.fna.gz      [72 seqs] NZ_MYOO01000010.1 Salmonella enterica strain BCW_4904 NODE_10_length_177558_cov_3.07217, whole genome shotgun sequence [...]
0.999329      986/1000        24      0       GCF_002054075.1_ASM205407v1_genomic.fna.gz      [88 seqs] NZ_MYNK01000010.1 Salmonella enterica strain BCW_4936 NODE_10_length_177385_cov_3.78874, whole genome shotgun sequence [...]
0.999329      986/1000        24      0       GCF_000474475.1_CFSAN001184_01.0_genomic.fna.gz [45 seqs] NZ_AUQM01000001.1 Salmonella enterica subsp. enterica serovar Typhimurium str. CDC_2009K1158 isolate 2009K-1158 SEET1158_1, whole genome shotgun sequence [...]
0.999329      986/1000        24      0       GCF_000474355.1_CFSAN001186_01.0_genomic.fna.gz [46 seqs] NZ_AUQN01000001.1 Salmonella enterica subsp. enterica serovar Typhimurium str. CDC_2009K1283 isolate 2009K1283 (Typo) SEET1283_1, whole genome shotgun sequence [...]
0.999329      986/1000        24      0       GCF_000213635.1_ASM21363v1_genomic.fna.gz       [2 seqs] NC_016863.1 Salmonella enterica subsp. enterica serovar Typhimurium str. UK-1, complete genome [...]
0.999281      985/1000        24      0       GCF_001271965.1_Salmonella_enterica_CVM_N43825_v1.0_genomic.fna.gz      [67 seqs] NZ_LIMN01000001.1 Salmonella enterica subsp. enterica serovar Typhimurium strain CVM N43825 N43825_contig_1, whole genome shotgun sequence [...]
0.999281      985/1000        24      0       GCF_000974215.1_SALF-297-3.id2_v1.0_genomic.fna.gz      [90 seqs] NZ_LAPO01000001.1 Salmonella enterica subsp. enterica serovar Typhimurium strain SALF-297-3 NODE_1, whole genome shotgun sequence [...]

但请注意,肠道沙门氏菌的多个菌株具有好的相似性。这是因为当独立考虑时,它们各自都有良好的包含性。由于这个原因,mash筛选不是一个真正的分类器。然而,我们可以使用赢家通吃策略(-w)来消除解释结果的大部分冗余。当我们在做这件事的时候,让我们在任务中多扔一些核心来加快它的速度(-p 4)。

mash screen -w -p 4 refseq.genomes.k21s1000.msh ERR024951.fastq > screen.tab
sort -gr screen.tab | head

现在输出的结果要干净得多,只有两个全基因组,再加上噬菌体(再往下就会出现很多其他命中的病毒和组装序列)。

0.99957       991/1000        24      0       GCF_002054545.1_ASM205454v1_genomic.fna.gz      [57 seqs] NZ_MYON01000010.1 Salmonella enterica strain BCW_4905 NODE_10_length_152932_cov_1.77994, whole genome shotgun sequence [...]
0.99899       979/1000        26      0       GCF_000841985.1_ViralProj14228_genomic.fna.gz   NC_004313.1 Salmonella phage ST64B, complete genome
0.998844      976/1000        101     0       GCF_900086185.1_12082_4_85_genomic.fna.gz       [51 seqs] NZ_FLIP01000001.1 Klebsiella pneumoniae strain k1037, whole genome shotgun sequence [...]
0.923964      190/1000        40      0       GCF_000900935.1_ViralProj181984_genomic.fna.gz  NC_019545.1 Salmonella phage SPN3UB, complete genome
0.900615      111/1000        100     0       GCF_001876675.1_ASM187667v1_genomic.fna.gz      [137 seqs] NZ_MOXK01000132.1 Klebsiella pneumoniae strain AWD5 Contig_(1-18003), whole genome shotgun sequence [...]
0.887722      82/1000 31      3.16322e-233    GCF_001470135.1_ViralProj306294_genomic.fna.gz  NC_028699.1 Salmonella phage SEN34, complete genome
0.873204      58/1000 22      1.8212e-156     GCF_000913735.1_ViralProj227000_genomic.fna.gz  NC_022749.1 Shigella phage SfIV, complete genome
0.868675      52/1000 57      6.26251e-138    GCF_001744215.1_ViralProj344312_genomic.fna.gz  NC_031129.1 Salmonella phage SJ46, complete genome
0.862715      45/1000 1       1.05185e-116    GCF_001882095.1_ViralProj353688_genomic.fna.gz  NC_031940.1 Salmonella phage 118970_sal3, complete genome
0.856856      39/1000 21      6.70643e-99     GCF_000841165.1_ViralProj14230_genomic.fna.gz   NC_004348.1 Enterobacteria phage ST64T, complete genome

Sketches须知

要将序列使用mash进行比较,首先必须勾画出它们的草图,这也大大减少了它们的比较的时间。如果给mash dist提供原始序列,这一步将自动生成。但是,如果要进行多次比较,那么先用mash sketch创建草图,然后将它们提供给mash dist以代替原始序列,这样会更有效。草图参数可以通过命令行选项提供给任一工具。

使用MinHash表减少representations

MinHash算法使用草图来实现快速的距离估计,且对存储和内存要求较低。为了制作草图,序列中的每一个k-mer都要进行哈希处理,从而创建一个伪随机标识符。通过对这些标识符(哈希值)进行排序,从排序列表的顶部的一个小子集可以代表整个序列(这些是最小哈希值)。另一个序列越相似,它可能共享的最小哈希值就越多。

k-mer size

与任何基于k-mer的方法一样,较大的k-mer将提供更多的特异性,而较小的k-mer将提供更多的敏感性。较大的基因组也需要较大的k-mer,以避免偶然共享的k-mer。K-mer大小用-k指定,草图文件必须具有相同的k-mer大小才能与mash dist进行比较。当mash sketch运行时,它会自动根据输入基因组的大小评估指定的k-mer大小,估计随机匹配的概率为。

…其中g是基因组大小,Σ是字母表(默认为ACGT)。如果这个概率超过任何输入基因组的阈值(由-w指定;默认为0.01),将给出警告,并给出在阈值内所需的最小k-mer大小。
对于大型草图集,在选择k-mer大小时,内存和存储也是一个考虑因素。Mash将使用32位的哈希值,而不是64位的,如果它们能够包含使用中的字母的全部k-mer空间。这将使磁盘上的草图文件大小和它在为Mash dist加载时使用的内存大小减少一半(大约)。使用32位哈希的标准是:


…变成核苷酸的k≤16(默认),氨基酸的k≤7。

sketch size

草图大小对应于保留的(非冗余)最小哈希数。较大的草图可以更好地表示序列,但代价是草图文件较大,比较时间较长。对于给定的草图大小s,距离估计的误差边界被表述为:

草图大小用-s指定。不同尺寸的草图可以用mash dist进行比较,不过比较仅限于两种尺寸中较小的那一个。

编码链和字母

默认情况下,mash 使用核苷酸字母表 (ACGT),不区分大小写,并且会像在 Jellyfish 中一样,通过使用规范的 k-mer 忽略链性。如果一个k-mer按字母顺序排在原来的k-mer之前,那么就会使用它的反补码。搁浅性可以用-n(非规范的)保留,大小写可以用-Z保留。请注意,默认的核苷酸字母表不包括小写,因此如果指定了-Z,将过滤掉带有小写核苷酸的k-mer。氨基酸字母表可以用-a指定,这也改变了默认的k-mer大小,以反映更密集的信息。也可以用-z指定一个完全自定义的字母表。请注意,字母表的大小会影响p值计算和哈希大小(请参见用p值和k-mer大小评估显著性)。

Sketching reads

当绘制reads而不是完整的基因组或组装时,应指定-r,这将从k-mer含量而不是总序列长度来估计基因组大小,从而使p-vlaues更加准确。基因组大小也可以用-g直接指定。此外,由于MinHash是一种基于k-mer的方法,去除唯一的或低拷贝的k-mer通常会改善读集的结果,因为这些k-mer很可能代表测序错误。每个k-mer所需的最小拷贝数可以用-m指定(例如-m 2来过滤唯一的)。然而,如果基因组大小很高,覆盖率很低,例如在元基因组读集中,这可能会导致高内存使用率。在这些情况下,可以使用Bloom过滤器(-b)以恒定的内存过滤掉大多数独特的k-mers。如果覆盖率很高(如>100倍),它可以帮助限制它,以节省时间,避免重复错误出现合法的k-mers。这可以用-c来实现,一旦估计的平均覆盖率(基于k-mer的多重性)达到目标,就会停止草图读取。

Working with sketch files

可以通过mash info检查存储在草图文件中的草图或草图及其参数。如果草图文件有匹配的k-mer大小,它们的草图可以用mash paste合并成一个文件。这样就可以用mash dist进行简单的配对比较,并允许多个文件的草图并行化。

Distance Estimation

MinHash Jaccard estimation

给定k-mer集A和B,MinHash算法提供了Jaccard指数的估计。

其中As和Bs是子集,使得|As∪Bs|等于草图大小s,允许Broder[1]建议的已知误差边界。这是通过使用合并-排序算法来寻找两个排序草图之间的共同值,并在所见的哈希总数达到草图大小(或两个草图中的所有哈希都已被看到)时终止。
从公式可以看初Jaccard距离最大值是1,表示两个集合一样。

Mash最终输出的评估距离


For mutating a sequence with t total k-mers and a conserved k-mer count w, an approximate mutation rate d can be estimated using a Poisson model of mutations occurring in k-mers, as suggested by Fan et al. [2]:
D(k, j) 表示任意两条序列的最终mash评估距离,j表示Jaccard指数,k表示kmer大小
j=0, 表示Jaccard指数为0,即二者没有相同的kmer,此时mash距离最大为1
当Jaccard指数在大于0< j ≤1时,j 越大也即二者相近kmer越多,最终得到的mash距离越小,两个基因组越相近
Mash distance(D),取值0-1,越小两个基因组序列越相近,越大则二者越远

mash dist full help

(drep) [u@h@~]$ mash distVersion: 1.1Usage:mash dist [options] <reference> <query> [<query>] ...Description:Estimate the distance of each query sequence to the reference. Both thereference and queries can be fasta or fastq, gzipped or not, or Mash sketchfiles (.msh) with matching k-mer sizes. Query files can also be files of filenames (see -l). Whole files are compared by default (see -i). The outputfields are [reference-ID, query-ID, distance, p-value, shared-hashes].Options:Option     Description (range) [default]-h         Help-p <int>   Parallelism. This many threads will be spawned for processing. [1]...Input...-l         List input. Each query file contains a list of sequence files, oneper line. The reference file is not affected....Output...-t         Table output (will not report p-values, but fields will be blank ifthey do not meet the p-value threshold).-v <num>   Maximum p-value to report. (0-1) [1.0]-d <num>   Maximum distance to report. (0-1) [1.0]...Sketching...-k <int>   K-mer size. Hashes will be based on strings of this manynucleotides. Canonical nucleotides are used by default (seeAlphabet options below). (1-32) [21]-s <int>   Sketch size. Each sketch will have at most this many non-redundantmin-hashes. [1000]-i         Sketch individual sequences, rather than whole files.-w <num>   Probability threshold for warning about low k-mer size. (0-1)[0.01]-r         Input is a read set. See Reads options below. Incompatible with -i....Sketching (reads)...-b <size>  Use a Bloom filter of this size (raw bytes or with K/M/G/T) tofilter out unique k-mers. This is useful if exact filtering with -muses too much memory. However, some unique k-mers may passerroneously, and copies cannot be counted beyond 2. Implies -r.-m <int>   Minimum copies of each k-mer required to pass noise filter forreads. Implies -r. [1]-c <num>   Target coverage. Sketching will conclude if this coverage isreached before the end of the input file (estimated by averagek-mer multiplicity). Implies -r.-g <size>  Genome size. If specified, will be used for p-value calculationinstead of an estimated size from k-mer content. Implies -r....Sketching (alphabet)...-n         Preserve strand (by default, strand is ignored by using canonicalDNA k-mers, which are alphabetical minima of forward-reversepairs). Implied if an alphabet is specified with -a or -z.-a         Use amino acid alphabet (A-Z, except BJOUXZ). Implies -n, -k 9.-z <text>  Alphabet to base hashes on (case ignored by default; see -Z).K-mers with other characters will be ignored. Implies -n.-Z         Preserve case in k-mers and alphabet (case is ignored by default).Sequence letters whose case is not in the current alphabet will beskipped when sketching.

mash sketch full help

(drep) [u@h@ISOs_and_MAGs]$ mash sketch -hVersion: 1.1Usage:mash sketch [options] fast(a|q)[.gz] ...Description:Create a sketch file, which is a reduced representation of a sequence or setof sequences (based on min-hashes) that can be used for fast distanceestimations. Input can be fasta or fastq files (gzipped or not), and "-" canbe given to read from standard input. Input files can also be files of filenames (see -l). For output, one sketch file will be generated, but it can havemultiple sketches within it, divided by sequences or files (see -i). Bydefault, the output file name will be the first input file with a '.msh'extension, or 'stdin.msh' if standard input is used (see -o).Options:Option     Description (range) [default]-h         Help-p <int>   Parallelism. This many threads will be spawned for processing. [1]...Input...-l         List input. Each file contains a list of sequence files, one perline....Output...-o <path>  Output prefix (first input file used if unspecified). The suffix'.msh' will be appended....Sketching...-k <int>   K-mer size. Hashes will be based on strings of this manynucleotides. Canonical nucleotides are used by default (seeAlphabet options below). (1-32) [21]-s <int>   Sketch size. Each sketch will have at most this many non-redundantmin-hashes. [1000]-i         Sketch individual sequences, rather than whole files.-w <num>   Probability threshold for warning about low k-mer size. (0-1)[0.01]-r         Input is a read set. See Reads options below. Incompatible with -i....Sketching (reads)...-b <size>  Use a Bloom filter of this size (raw bytes or with K/M/G/T) tofilter out unique k-mers. This is useful if exact filtering with -muses too much memory. However, some unique k-mers may passerroneously, and copies cannot be counted beyond 2. Implies -r.-m <int>   Minimum copies of each k-mer required to pass noise filter forreads. Implies -r. [1]-c <num>   Target coverage. Sketching will conclude if this coverage isreached before the end of the input file (estimated by averagek-mer multiplicity). Implies -r.-g <size>  Genome size. If specified, will be used for p-value calculationinstead of an estimated size from k-mer content. Implies -r....Sketching (alphabet)...-n         Preserve strand (by default, strand is ignored by using canonicalDNA k-mers, which are alphabetical minima of forward-reversepairs). Implied if an alphabet is specified with -a or -z.-a         Use amino acid alphabet (A-Z, except BJOUXZ). Implies -n, -k 9.-z <text>  Alphabet to base hashes on (case ignored by default; see -Z).K-mers with other characters will be ignored. Implies -n.-Z         Preserve case in k-mers and alphabet (case is ignored by default).Sequence letters whose case is not in the current alphabet will beskipped when sketching.

Reference

Mash Doc

MASH--超快速估计基因组距离相关推荐

  1. Kraken:使用精确比对的超快速宏基因组序列分类软件

    文章目录 Kraken:使用精确比对的超快速宏基因组序列分类 热心肠日报 摘要 主要结果 图1. Kraken序列分类算法 图2. 基于三个模拟宏基因组的分类程序准确性和速度比较 图3. 基于三个模拟 ...

  2. Nature子刊:Salmon不比对快速宏基因组基因定量

    文章目录 Salmon:使用双阶段推理对转录本表达进行快速且有偏差意识的量化 导读 摘要 主要结果 图1. Salmon与同类软件对比的表现 扩展阅读 猜你喜欢 写在后面 [外链图片转存失败,源站可能 ...

  3. 使用Python和OpenCV在图像之间执行超快速的颜色转换

    使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...

  4. 使用Python,OpenCV实现图像之间超快速的颜色转移

    图像之间超快速的颜色转移 1. 效果图 2. 步骤 3. 改进算法的方法 4. 源码 参考 目标:源图像与目标图像,转移源图像的色彩空间到目标图像,生成一张新的图像: 有关如何在两个图像之间转移颜色, ...

  5. NanoDet:轻量级(1.8MB)、超快速(移动端97fps)目标检测项目

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:RangiLyu  编译:CV君 来自:OpenCV大本营 以下内容为作者介绍: 特点: 超轻量 ...

  6. WebMGA:超快的基因组序列聚类注释在线工具

    文章目录 超快的基因组序列聚类注释在线工具WebMGA 序列聚类cd-hit 基因预测ORF prediction 蛋白COG注释 作者简介 参考文献 猜你喜欢 写在后面 超快的基因组序列聚类注释在线 ...

  7. 索尼PS5将配备超快速的存储设备:最快2020年2月亮相

    距离索尼PS4游戏主机发售已经过去了5年多的时间,自该机上市以来,至今已经卖出了超过9400万台,创造了难以追赶的销量成绩.而根据此前爆料,全新的Play Station 5最早将于2020年2月亮相 ...

  8. 超快速结构感知深度巷道检测(Ultra Fast Structure-aware Deep Lane Detection )

    超快速结构感知深度巷道检测 ? 秦泽群.王焕宇.李曦??[0000−0003−3023−1662] 计算机科学与技术学院, 浙江大学,中国杭州 zequnqin@gmail.com, {huanyuh ...

  9. [个人向]超快速了解微信小程序:看这篇就够了!(注册、语言、框架、配额等简要说明)

    [个人向]超快速了解微信小程序看这篇就够了+相关简要说明 本文精炼微信小程序开发文档相关内容,旨在对初次接触并准备开发小程序的童鞋(比如自己)提供一个快速了解攻略.其中包括注册相关.语言.框架模式.相 ...

最新文章

  1. 编程珠玑第12章习题
  2. 基于JSP/SERVLET学生管理系统
  3. Linux系统编程——基于文件描述符的文件操作(1)
  4. Redis入门基础详解
  5. python css selector_Python爬虫之Selector的用法
  6. C#连接MySQL数据库 制作股票交易模拟程序
  7. 都江堰很美-佩服古人_Crmhf的一天
  8. LeetCode算法入门- Longest Valid Parentheses -day12
  9. 从入门到精通,给Java学习者的几点建议
  10. 国内车载信息安全产业联盟成立
  11. EPUB阅读工具-读者推荐
  12. pe服务器注册表,在WIN PE环境下修改或导入系统注册表项
  13. c语言中根号绝对值,根号的绝对值怎么算?
  14. Error: ‘list‘ object cannot be coerced to type ‘double‘
  15. element组件的表单验证手机号
  16. 2023啦 最新无人直播小白教程!
  17. java打印数组的连续非空子集_求一个字符串数组所有非空子集
  18. 猿创征文|OneOS 万耦启物TB6612驱动电机
  19. Ubuntu通过samba winbind集成AD账号
  20. 微信公众号留言评论功能最新开通信息讲解(内附留言功能开通视频信息讲解链接)...

热门文章

  1. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第五章:继承与派生(新标准C++程序设计)
  2. 深度ip转换器手机版app_开言英语先锋版app下载_开言英语2021手机版下载
  3. excel表格内文字分段显示
  4. 「镁客·请讲」后洪电子汪东:反无人机玩家正逐鹿中原,一些市场弊端也开始凸显...
  5. 华为数字芯片实习面试经过
  6. uni-app实现地图车辆移动轨迹回放
  7. 《人工智能导论》第二章 概念表示
  8. 万能工具箱万能工具箱_角度工作箱简单指南
  9. 多目标优化算法:多目标原子轨道搜索算法MOAOS(提供Matlab代码)
  10. Transfer Learning for NLP with TensorFlow Hub