@echo off echo Delete HKEY_CURRENT_USER\Software\PremiumSoft\Data for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\PremiumSoft\Data" /s | findstr /E Info"') do ( reg delete %%i /va /f ) echo. echo Delete Info folder under HKEY_CURRENT_USER\Software\Classes\CLSID for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\Classes\CLSID" /s | findstr /E Info"') do ( reg delete %%i /va /f ) echo. echo Finish pause
目录 什么是Typora?
现状况:
Typora使用:
什么是Typora? 在介绍Typora软件之前,需要先介绍一下MARKDOWN。MARKDOWN是一种轻量型标记语言,它具有“极简主义”、高效、清晰、易读、易写、易更改纯文本的特点。
Typora 是一款支持实时预览的 Markdown 文本编辑器。它有 OS X、Windows、Linux 三个平台的版本,并且由于仍在测试中,是完全免费的。
Typora 首先是一个 Markdown 文本编辑器,它支持且仅支持 Markdown 语法的文本编辑,但是他还有很多实用的扩展语法与自定义样式的功能,还可以把.md文件导出成多种文件,如.pdf,.html,.docx。
但是现在Typora已经发布正式版且不再免费,需要付费使用了,网站为Typora 官方中文站。
博主本人肯定还是支持正版的,奈何生活拮据不能做一个正版人士。所以现在用的还是低版本的Typora了。博主现在用的Typora版本号为0.9.78,下载安装后切记不再更新。如果有需要的可以私信找我领取安装包,或者评论留言,我看到的第一时间就会回复的。
现状况: Typora 目前采用买断制,价格为 14.99 美元/89 元人民币,支持 macOS、Windows、Windows(ARM)、Linux 系统,最多可在 3 台设备上使用, 还提供 15 天的免费试用。
Typora使用: Typora支持主题切换,不同风格的主题会有不一样的显示效果。具体使用哪种主题还是看个人喜好来定。
首先,我们写文本的时候大多写的是中文,可是输入法在输中文时使用的标点为全角标点如,。? ! ( ) [ ] : ; 这些标点是不被Markdown 所认可的,也是无法转义的。
我建议大家写 Markdown 的时候都用半角标点,即英文标点,如,] : ; " ” 且每个半角标点在文本使用时加上后置空格,符合英文标点的书写规范,也更加美观.
一、二分法的原理 二分法查找针对的是一个有序的数据集合,每次通过与区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0.
故时间复杂度就是O(logn)
二、非递归实现 1、二分查找非递归实现
第一种写法,我们定义 target 是在一个在左闭右闭的区间里,也就是[Left, Right] 1、循环退出的条件
注意这里要写成Left<= Right,而不是Left< Right,因为当Left==Right,区间[Left, Right]依然有效,比如区间[2, 2],这里还有一个值2。只有Left +1 > Right,比如[2,3],while循环才退出
2、Left与Right的赋值
if (nums[middle] > target) Right要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找下个位置就是 middle - 1,同理Left要赋值为 middle + 1
3、middle的取值
如果写成 middle= (Left+Right)/2是有问题的,数字较大就可能溢出,计算机位运算比除法快,故可改成low+((high-low)>>1)
class Solution { public: int search(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right] while (left <= right) { // 当left==right,区间[left, right]依然有效,所以用 <= int middle = left + ((right - left) >> 1 );// 防止溢出 等同于(left + right)/2 if (nums[middle] > target) { right = middle - 1; // target 在左区间,所以[left, middle - 1] } else if (nums[middle] < target) { left = middle + 1; // target 在右区间,所以[middle + 1, right] } else // (nums[middle] == target) return middle; // 数组中找到目标值,直接返回下标 } } // 未找到目标值 return -1; } }; 第二种写法:
因为数据库的数据信息建于12年,很多地区三级关系和名称都跟不上了,让我手动一个个添加又觉得麻烦,怎么说我也是一个码农而不是文员,上代码:
#! /usr/bin/env python
# coding=utf-8
import requests
from lxml import etree
import sys
import xlwt
import re
import copy
import json
from lxml.html import fromstring,tostring
import HTMLParser
import re
#初始化
reload(sys)
sys.setdefaultencoding('utf8')
#根据网页源码,匹配并返回源码内指定的整个a标签
def get_content(data,str,num=999):
content = []
data1 = etree.HTML(data).xpath(str)
i = 0
for x in data1:
i += 1
#如果大于指定的数,就跳出循环
if i>num:
continue;
content.append(HTMLParser.HTMLParser().unescape(tostring(x)))
#删除第一次获取数据时,多余的第一第二个数据
if num == 36:
del content[0],content[0]
return content
#根据网站首页的编码,获取各个省的链接,并且返回三级地区的所有a标签
def get_url(url):
文章目录 0 概述1 打开软件2 新建工程3 STM32CubeMX配置MCU4 LED闪烁代码编写,编译及烧录5 实验现象 0 概述 本文主要通过新建LED控制工程来简要介绍STM32CubeIDE的简单使用方法
1 打开软件 双击桌面快捷方式或者通过Start目录打开软件
在弹出的界面中选择Workspace地址
本人理解此workspace是软件的工作空间,存放软件配置的一些文件
2 新建工程 点击新建工程图标或者在菜单栏中选择新建工程
弹出加载界面等待完成即可
按下图方式选择MCU型号
输入工程名,并按下图配置
在弹出的窗口中点击yes跳转到STM32CubeMX可视化芯片配置界面
3 STM32CubeMX配置MCU 配置界面1
界面1配置调试接口(根据需求配置即可,可不配)
界面1配置时钟(根据需求配置即可)
界面1配置LED对应的芯片管脚模式
界面1配置LED对应的芯片管脚属性
(我这里配置了3个LED,配置完效果如下)
界面2配置时钟(根据需求进行配置即可)
界面3配置默认文件放置类型(根据需求进行配置即可,可不配)
配置完成,在菜单栏中选择生成代码,如下图
在弹出的窗口中点击yes,开始生成代码
成功生成代码后界面如下
4 LED闪烁代码编写,编译及烧录 按下图方式编写LED控制对应代码
按照下面3种方式之一编译代码
编译成功显示如下
按照下面方式下载(第一次要进行下载器配置)
第一次下载需要配置下载器,在配置界面配置下载方式(按照实际下载方式配置即可)
出现如下界面信息即下载成功
5 实验现象 下载完程序后即完成操作,附我实现的结果如下:
结果视频
Git分支 Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 master 分支会在每次提交时自动向前移动。
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支操作 创建分支(git branch) 创建分支即创建了一个可以移动的新的指针。 比如,创建一个 testing 分支, 你需要使用 git branch 命令:
git branch [分支名] git branch testing 查看分支(git branch -v) git branch -v 切换分支(git checkout) git checkout [分支名] $ git checkout testing 这样 HEAD 就指向 testing 分支了 通常我们会在创建一个新分支后立即切换过去,这可以用一条命令搞定。 $ git checkout -b <newbranchname> 相当下面两条: $ git branch testing $ git checkout testing 合并分支(git merge) 第一步:切换到接受修改的分支(被合并,增加新内容)上
从零开始的图像语义分割:FCN复现教程(Pytorch+CityScapes数据集) 前言一、图像分割开山之作FCN二、代码及数据集获取1.源项目代码2.CityScapes数据集 三、代码复现1.数据预处理2.代码修改3.运行结果 总结参考网站 前言 摆了两周,突然觉得不能一直再颓废下去了,应该利用好时间,并且上个月就读了一些经典的图像分割论文比如FCN、UNet和Mask R-CNN,但仅仅只是读了论文并且大概了解了图像分割是在做什么任务的,于是今天就拉动手复现一下,因为只有代码运行起来了,才能进行接下来的代码阅读以及其他改进迁移等后续工作。
本文着重在于代码的复现,其他相关知识会涉及得较少,需要读者自行了解。
看完这篇文章,您将收获一个完整的图像分割项目(一个通用的图像分割数据集及一份可正常执行的代码)。
一、图像分割开山之作FCN 图来自FCN,Jonathan Long,Evan Shelhamer,Trevor Darrell CVPR2015
图像分割可以大致为实例分割、语义分割,其中语义分割(Semantic Segmentation)是对图像中每一个像素点进行分类,确定每个点的类别(如属于背景、人或车等),从而进行区域划分。目前,语义分割已经被广泛应用于自动驾驶、无人机落点判定等场景中。
FCN全程Fully Convolutional Networks,最早发表于CVPR2015,原论文链接如下:
FCN论文链接:https://arxiv.org/abs/1411.4038
正如其名称全卷积网络,实则是将早年的网络比如VGG的全连接层代替为卷积层,这样做的目的是让模型可以输入不同尺寸的图像,因为全连接层一旦被创建输入输出维度都是固定的,追根溯源就是输入图片的尺寸固定,并且语义分割是像素级别操作,替换为卷积层也更加合理(卷积操作就是像素级别,这些都是后话了)。
更具体的学习视频可以跳转到b站FCN网络结构详解(语义分割)
二、代码及数据集获取 1.源项目代码 进入FCN论文链接,点击Code&Data再进入Community Code跳转到paperwithcode网站。
很神奇地是会发现有两个FCN的检索链接,本文所需要的pytorch项目代码在红框这个链接中
Star最高的就是本文所需项目,这个大佬还有自己的个人网页,而且号称是FCN最简单的实现,我可以作证此言不虚,的确是众多代码中最简洁明朗的。
2.CityScapes数据集 CityScapes数据集官方下载链接:CityScapes Download
然而下载这个数据集需要注册账号,而且需要的是教育邮箱,可能是按照是否带edu.cn域名判断的吧,本人使用学校邮箱成功注册下载了数据集。读者若有不便可以上网其他途径获取或淘宝买个账号。
只需下载前3个数据集即可,gtFine_trainvaltest是精确标注(最主要最关键部分),gtCoarse是粗略标注,leftimg8bit_trainvaltest是原图。虽然模型训练的时候只需要用到gtFine但是因为接下来还需要预处理数据集,因此要将三个数据集下载好,才能执行官方给的预处理代码。
重构数据集
将三个zip解压然后新建一个文件夹命名为CityScapes,然后将三个解压文件里的内容按上图目录放置好,为数据集预处理做准备。
三、代码复现 1.数据预处理 这里需要先下载官方的脚本:cityscapesScripts
接下来对其中的一些地方进行修改,最重要的两个文件为项目下cityscapesscripts\helpers\labels.py和cityscapesscripts\preparation\createTrainIdLabelImgs.py。
蓝色框为原本的代码,直接注释掉添加红框处代码,即指定自己本地的数据集目录,比如我就将CityScapes放到了E盘的dataset目录下。
然后是在label.py文件里按照训练的需要更改trainid,255为不被模型所需要的id,因为FCN中为19类+背景板,所以为20类,刚好符合所以不需要更改label文件中任何内容。
最后运行createTrainIdLabelImgs.py,如果报错的话大概率是因为缺少上图蓝框所示的库,将其直接注释掉就可以了。
2.代码修改 之所以需要修改是因为原本的代码里面数据预处理那块太慢了,Cityscapes_utils.py要将trainId写入npy文件,运行速度极慢,这也是先前用官方预处理脚本cityscapesScripts来预处理的原因,预处理的目的其实也只是生成TrainIds的mask图片,和labelIds的png图片是同理的,只是每个像素所对应类别按照label.py里面的label表进行改变。
其实pytorch官方有给出加载CityScapes的数据集代码,但其直接拿来用并不能满足我们要求,所以需要修改一下,就原项目代码的Cityscapes_loader.py和torchvision.datasets.Cityscapes的代码结合,得到如下可执行代码。读者只需用其替换train.py文件即可。
# -*- coding: utf-8 -*- # Author: Reganzhx from __future__ import print_function import random from tqdm import tqdm # 由于训练缓慢,添加进度条方便观察 import imageio import torch import torch.
function getViewportSize() { //可视区域的宽度和高度 return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }; } class LayerMove { /** * 弹层移动 * @param $setCanMoveAreaName 鼠标点击哪个区域可以移动容器 * @param $moveContainerName 要移动的容器 */ static execute($setCanMoveAreaName, $moveContainerName, $iframe) { let viewport = getViewportSize(); $setCanMoveAreaName.mousedown(function (e) { e.stopPropagation(); e.preventDefault(); let x = e.clientX - $moveContainerName.offset().left; let y = e.clientY - $moveContainerName.offset().top; $(`#${$iframe}`).find('iframe')[0].contentWindow.init(x, y); $(document).mousemove(function (e) { let left = e.clientX - x; let top = e.clientY - y; let currentLeft = viewport.
如果按照文档从git上拉下代码后安装依赖一定会报错的,因为package.json中的"tui-editor": "1.3.3"依赖改名字了
目前有两种解决方案,一种是直接把相关的页面和依赖删除,参考:vue-element-admin安装依赖报错--解决 - Private! - 博客园
这个依赖主要是解决富文本的问题,还有一种方法是安装更改名字后的版本
参考:npm或cnpm install 安装tui-editor报错解决方案,亲测有效 _ 潘子夜个人博客
这样依赖就安装好了,运行npm run dev可能还会有一个问题就是core.js模块报错,这个手动
npm install core-js -s就可以解决
还不能运行的话应该是python没装
文章目录 1 前言1 课题背景2 实现效果3 项目实现3.1 概述3.2 数据采集3.3 数据清洗与预处理 4 数据分析与可视化Flask框架介绍 5 最后 1 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章!
🔥 对毕设有任何疑问都可以问学长哦!
这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是
🚩 大数据招聘岗位数据分析与可视化 - 爬虫 python 大屏可视化
🥇学长这里给一个题目综合评分(每项满分5分)
难度系数:4分工作量:4分创新点:3分 🧿 选题指导, 项目分享:
https://gitee.com/yaa-dc/BJH/blob/master/gg/cc/README.md
1 课题背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大。因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于在校生,还是对于求职者来说,都显得很有必要。
本文基于这个问题,针对 boss 直聘网站,使用 Scrapy 框架爬取了全国热门城市大数据、数据分析、数据挖掘、机器学习、人工智能等相关岗位的招聘信息。分析比较了不同岗位的薪资、学历要求;分析比较了不同区域、行业对相关人才的需求情况;分析比较了不同岗位的知识、技能要求等。
2 实现效果 岗位情况分析可视化
3 项目实现 3.1 概述 该项目一共分为三个子任务完成,数据采集—数据预处理—数据分析/可视化。
项目流程图
项目架构图
3.2 数据采集 Scrapy 爬虫介绍
Scrapy是基于Twisted的爬虫框架,它可以从各种数据源中抓取数据。其架构清晰,模块之间的耦合度低,扩展性极强,爬取效率高,可以灵活完成各种需求。能够方便地用来处理绝大多数反爬网站,是目前Python中应用最广泛的爬虫框架。Scrapy框架主要由五大组件组成,它们分别是调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。各个组件的作用如下:
调度器(Scheduler):说白了把它假设成为一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是 什么,同时去除重复的网址(不做无用功)。用户可以自己的需求定制调度器。
下载器(Downloader):是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。
爬虫(Spider):是用户最关心的部份。用户定制自己的爬虫(通过定制正则表达式等语法),用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。 用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。
实体管道(Item Pipeline):用于处理爬虫(spider)提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。
Scrapy引擎(Scrapy Engine):Scrapy引擎是整个框架的核心.它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。
Scrapy 官网架构图
文章目录 效果图关键代码源码地址 效果图 RecyclerView是谷歌推出的融合了ListView和GridView且功能更加强大组件,可以在有限的屏幕上显示更多内容,支持三种不同布局:线性LinearLayoutManager、网格GridLayoutManager、瀑布流StaggeredGridLayoutManager。此外,RecyclerView的复用机制是它的核心部分。线性布局的示例如下:
关键代码 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val recyclerView = findViewById<RecyclerView>(R.id.recyclerView) val layoutManager: RecyclerView.LayoutManager = LinearLayoutManager(this) recyclerView.layoutManager = layoutManager val dataSet = arrayOf("one", "two", "three", "four", "five") val recyclerViewAdapter: RecyclerView.Adapter<*> = RecyclerViewAdapter(dataSet) recyclerView.adapter = recyclerViewAdapter // 设置分割线 val dividerItemDecoration = DividerItemDecoration(this, DividerItemDecoration.VERTICAL) recyclerView.addItemDecoration(dividerItemDecoration) } } RecyclerView的适配器代码:
class RecyclerViewAdapter(private val data: Array<String>) : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val itemView = LayoutInflater.
记录一下,这是2020年第一篇帖子,今年立了一个flag–经常写帖子。因为疫情的原因,只能每天在家养肚皮,躺床上为社会做贡献。实在是坐不住了,就开始写这篇文章吧。希望新的一年自己越来越厉害,也希望疫情早点过去
(一)什么是插件化 插件化技术最初源于免安装运行apk的想法,这个免安装的apk就可以理解为插件,而支持插件的app我们一般称之为宿主
(二)为什么要插件化 1.app功能模块越来越多,体积越来越大,维护变得困难;
2.模块之间的耦合度高,协同开发沟通成本越来越高;
3.方法数目可能超过65535,APP占用的内存越来越大;
4.增加功能只敢做加法。
(三)插件化和模块(模块)化的爱恨纠葛 组件化开发主要是通过gradle配置,将一个app分成多个模块,每个模块都是一个组件,开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件同意合并成一个apk,这就是组件化开发。插件化和组件化略有不同,插件化开发是将整个apk拆分成多个模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk,最终打包的时候宿主apk和插件apk分开打包。插件化其实是建立在模块化基础上的,插件化在实施之前需要先进性模块化。 (四)核心-插件化原理(方案之一) 各大平台方案对比
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
不再一一介绍原理,本次主题是基于 360的DroidPlugin
接下来是插件化的核心:
如何加载插件的类?如何加载插件的资源?如何调用插件的类(四大组件)? 一. 如何加载插件的类 1. 类加载器 毫无疑问,类是通过类加载器classLoader加载的,我们先看几种类加载器.
1.1 PathClassLoader和DexClassLoader区别 首先我们来看DexClassLoader:
DexClassLoader 用于加载.jar .apk .dex中的类,也可以用来加载不是应用程序中的代码
api-25-7.1 -->
api-26-8.0 -->
api-28-9.0 -->
可以发现,DexClassLoader里什么也没有做,只是重写了BaseDexClassLoader的构造函数,注意api28里面的这段标红注释:该参数在api 26之后就废弃了,后面会讲到。
再看BaseDexClassLoader:
api-25-7.1 -->
api-26-8.0 & api-28-9.0 -->
我们把焦点放在optimizedDirectory上:应该被写入的dex所在的目录。通过构造三个版本的函数可以看出:8.0之前使用了optimizedDirectory参数,8.0及8.0之后不再使用该参数。
我们再移步看一下PathClassLoader:PathClassLoader是系统类和系统应用的类加载器:
PathClassLoader8.0前后并没有什么区别,同样重写了四个参数的构造函数,optimizedDirectory为null。
总结:
8.0之前,DexClassLoader供系统(谷歌工程师)使用,PathClassLoader提供给开发者使用;8.0及之后并无区别。后来谷歌工程师越来越觉得写两个加载器简直是闲得蛋疼,干脆就不再区分了。 区别: 在8.0之后并无区别,
1.2 BootClassLoader 和PathClassLoader /** *注意这个类派生自AppCompatActivity,而非Activity */ public class MainActivity extends AppCompatActivity { private static final String TAG = "
windowsy官网地址:https://code.visualstudio.com/docs/cpp/config-mingw
vscode用wsl:https://code.visualstudio.com/docs/cpp/config-wsl(本文不涉及,用于后续研究)
以win10 64位为例
1.安装vscode 此处省略
2.在vscode中安装c/c++插件 在vscode中安装如下 插件
3.windows系统下,安装编译器(MinGW-x64) MinGW-x64是windows下的编译开发环境,提供一个terminal窗口供用户编译、调试。
安装(参考网址https://www.jianshu.com/p/e79cdf4c32ef)
网址:https://www.msys2.org/。
安装需要的工具链
需要在 MinGW-x64中执行以下语句(坑1: 一定要执行,否则没有gdb):
pacman -S --needed base-devel mingw-w64-x86_64-toolchain 将MinGW 编译器的路径添加到环境变量“path”中** C:\msys64\ # add gdb env to path C:\msys64\mingw64\bin 在MinGW-x64中执行,一下命令,查看是否可以正常调用g++,gdb。 gcc --version g++ --version gdb --version Administrator@I6HCU75VXKC3B6C MINGW64 ~ # gcc --version gcc.exe (Rev4, Built by MSYS2 project) 12.2.0 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
良好的代码规范无论是对个人还是团队都是十分重要的。遵循一致的代码规范能够显著增强代码可读性、可维护性,使得代码结构简洁清晰,还能减少bug的出现。对于团队开发来说,还能减少部分沟通成本,让大家都专注于功能开发上。
Prettier 简介
Prettier 是一款代码格式美化工具,用于统一代码风格,提高代码可维护性。
ESLint
内置规则和自定义规则共用一套规则 API内置的格式化方法和自定义的格式化方法共用一套格式化 API额外的规则和格式化方法能够在运行时指定规则和对应的格式化方法并不强制捆绑使用 ESLint 结合 Prettier 使用
美化代码结构的Prettier,检查代码质量的ESLint,强强结合会碰撞出什么样的火花呢?
1. 安装
要使用ESLint和Prettier当然先得安装他们啦,然后还需要安装 eslint-plugin-prettier。
为了防止Prettier和ESLint格式化功能冲突,还需要安装 eslint-config-prettier 来关闭ESLint中的代码格式化功能
npm install --save-dev --save-exact prettier npm install eslint --save-dev npm install --save-dev eslint-plugin-prettier npm install --save-dev eslint-config-prettier 在 .prettierignore 和 .eslintignore 文件中可以添加那些不需要格式化的文件或文件夹,在美化代码挑bug时忽略这些文件。
// .prettierignore /dist/* .local .output.js /node_modules/** **/*.svg **/*.sh /public/* // .eslintignore *.sh node_modules *.md *.woff *.ttf .vscode .idea dist /public /docs .husky .local /bin Dockerfile 2.
一、按年/月/周/日/小时分组查询(日期时间类型为date或者datetime) 在DATE_FORMAT(create_time,'%Y%m%d')中设置需要分组的类型和格式,如下:
'%Y%m%d'表示:20221122
'%Y-%m-%d'表示:2022-11-22
可根据自己的需要设置,年月日都是如此
如下图user表
user idnameagebirthdaygendercreate_time1张三202000-01-01男2022-11-22 11:11:112李四212001-02-02男2022-11-19 00:00:003王五231999-05-06女2022-11-20 23:59:59 按日分组查询并排序 SELECT DATE_FORMAT(create_time,'%Y-%m-%d') days,COUNT(id) FROM user WHERE create_time > "2022-11-11 00:00:00" AND create_time < "2022-12-01 00:00:00" GROUP BY days ORDER BY days DESC; 按周分组查询 SELECT DATE_FORMAT(create_time,'%Y-%u') weeks,COUNT(id) FROM user GROUP BY weeks; 按月分组查询 SELECT DATE_FORMAT(create_time,'%Y-%m') months,COUNT(id) FROM user GROUP BY months 按年分组查询 SELECT DATE_FORMAT(create_time,'%Y') months,COUNT(id) FROM user GROUP BY years 按小时分组查询 SELECT DATE_FORMAT(create_time,'%Y-%m-%d %H') hours,COUNT(id) FROM user WHERE create_time > "
前言: 前些日志QQ群有朋友发了一个Toast的崩溃日志。Toast如此简单的用法怎么会崩溃呢?所以顺便就学习了一下Toast在源码中的实现,不算复杂,但内容挺多的,这里就来分享一下,方便读者。
一.基本使用方式 主要有两种实现方式:
1.最基本的使用方式: 使用方式很简单,直接沟通过静态方法构传入context,显示内容以及显示时长三个参数,构造Toast对象,然后通过show显示。
Toast toast = Toast.makeText(getBaseContext(), "显示内容", Toast.LENGTH_LONG); toast.show(); 2.自定义View的实现方式 这种使用使用方式也很简单,首先构造一个View,然后通过setView方法传入这个自定义View,最终也是通过show方法显示。
View selfToastView = View.inflate(getBaseContext(), R.layout.self_toast, null); Toast toast = Toast.makeText(getBaseContext(), "显示内容", Toast.LENGTH_LONG); toast.setView(selfToastView); toast.show(); 3.使用方式总结 两种使用方式都很简单,区别只是第二种方式多传入了一个自定义View而已。但是为什么要分开来讲呢?因为虽然使用时仅仅只差一步,但是其实现原理是完全不一样的。一个是通过NotificationManagerService去显示的,而另外一个则是APP自身处理的。接下来,我们就依次的讲一下两种使用方式的实现原理。
二.Toast的创建显示流程原理讲解 1.Toast.makeText 这个的实现方式还是比较简单的,最终的生成方式传入4个参数,分别为
Context:绑定的上下文对象
Looper:绑定线程的Looper,可以为空。为空时则默认使用当前线程的looper。PS:每个线程都只能绑定唯一的一个Looper,想了解这一块的可以看我的另外一篇文章:android源码学习-Handler机制及其六个核心点_失落夏天的博客-CSDN博客_安卓开发handler机制
text:显示内容
duration:持续时间。有两种参数:
Toast.LENGTH_LONG:显示时间较长,为3.5S。其3500ms的值定义在NotificationManagerService.LONG_DELAY。
Toast.LENGTH_SHORT:显示时间较短,为2S。其2000ms的值定义在NotificationManagerService.SHORT_DELAY。
但是真实显示的时间,却不是3.5和2S,实际显示时间会比这两个时间更长一些,这个后面会讲。
最终生成一个Toast对象返回,这里需要注意的是,原生Toast和自定义View的Toast的唯一区别就是原生Toast对象中mNextView对象为null。
public static Toast makeText(@NonNull Context context, @Nullable Looper looper, @NonNull CharSequence text, @Duration int duration) { //这里默认配置为true,走上面这个判断逻辑 if (Compatibility.isChangeEnabled(CHANGE_TEXT_TOASTS_IN_THE_SYSTEM)) { Toast result = new Toast(context, looper); result.mText = text; result.
import datetime def is_weekend(date_param: str): """ 是否是周末 @:param: date_param 日期。如 2020-01-01 """ # 标准日1 sd1 = '2022-11-19' # 标准日2 sd2 = '2022-11-20' # 日期格式 format = '%Y-%m-%d' # 时间间隔。七整天 interval = 7 sd1 = datetime.datetime.strptime(sd1, format) sd2 = datetime.datetime.strptime(sd2, format) the_date = datetime.datetime.strptime(date_param, format) compute_interval1 = abs((the_date-sd1).days / interval) compute_interval2 = abs((the_date-sd2).days / interval) return compute_interval1 == int(compute_interval1) or compute_interval2 == int(compute_interval2) if __name__ == '__main__': print(is_weekend('2022-03-27'))
文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核,池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集5.2 关键代码5.3 模型预测 6 效果展示6.1 主页面展示6.2 图片预测6.3 三维模型可视化 7 最后 0 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章!
🔥 对毕设有任何疑问都可以问学长哦!
这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是
🚩 基于深度学习的植物识别算法研究与实现
🥇学长这里给一个题目综合评分(每项满分5分)
难度系数:4分工作量:4分创新点:3分 🧿 选题指导, 项目分享:
https://gitee.com/yaa-dc/BJH/blob/master/gg/cc/README.md
2 相关技术 2.1 VGG-Net模型 Google DeepMind公司研究员与牛津大学计算机视觉组在2014年共同研发出了一种全新的卷积神经网络–VGG-Net。在同年举办的ILSVRC比赛中,该网络结构模型在分类项目中取得了十分出色的成绩,由于其简洁性和实用性,使得其在当时迅速,飞快地成为了最受欢迎的卷积神经网络模型。VGG-Net卷积神经网络在近年来衍生出了A-E七种不同的层次结构,本次研究使用其中的D结构,也就是VGG-16Net结构,该结构中包含了13个卷积层,5个池化层和3个全连接层。针对所有的卷积层,使用相同的5x5大小的卷积核,针对所有的池化层,使用相同的3x3大小的池化核。VGG-Net结构如图所示。
2.2 VGG-Net在植物识别的优势 在针对植物识别问题上,VGG-Net有着一些相较于其他神经网络的优势,主要包括以下几点:
(1) 卷积核,池化核大小固定 网络中所有的卷积核大小固定为3x3,所有的池化核大小固定为5x5。这样在进行卷积和池化操作的时候,从数据中提取到的特征更加明显,同时在层与层的连接时,信息的丢失会更少,更加方便后续对于重要特征的提取和处理。
(2) 特征提取更全面 VGG-Net网络模型中包含了13个卷积层。卷积层数目越多,对于特征的提取更加的全面。由于需要对于植物的姿态、颜色等进行判定,植物的特征较多,需要在提取时更加的全面,细致,才有可能得到一个更加准确的判定。VGG-Net符合条件。
(3) 网络训练误差收敛速度较快 VGG-Net网络在训练时收敛速度相对较快,能够较快地得到预期的结果。具有这一特点的原因有两个,一个是网络中每一个卷积层和池化层中的卷积核大小与池化核大小固定,另一个就是对于各个隐藏层的参数初始化方法使用专门针对ReLU激活函数的Kaiming正态初始化方法。
3 VGG-Net的搭建 本次研究基于Pytorch深度学习框架进行网络的搭建,利用模块化的设计思想,构建一个类,来对于整个的网络进行结构上的封装。这样搭建的好处是可以隐藏实现的内部细节,提高代码的安全性,增强代码的复用效率,并且对于一些方法,通过在内部集成,可以方便之后对于其中方法的调用,提升代码的简洁性。 在网络搭建完成后,将数据集传入网络中进行训练,经过一段时间后即可得到植物识别的分类识别结果。
nodejs-(一)win10安装配置nodejs(v12.20)环境
一、什么是Nodejs?
Node.js是一个基于Chrome V8擎JavaScript运行时环境。Node.js听名字好像是个JS库,其实Node.js是C++开发的JavaScript运行时环境。
使用Node.js可以访问读写txt文本、访问数据库,开发Web网站等等。
二、下载地址
官网:
https://nodejs.org/zh-cn/
其它版本:
https://nodejs.org/zh-cn/download/releases/
源码地址:
https://github.com/nodejs
三、node和npm两个重要的命令行工具介绍
node,是Nodejs的执行命令,输入node可以进入Nodejs环境,键入标准js可以在控制台查看输出内容。如果想独立运行hello.js文件,可以输入命令:node hello.js 查看执行结果。
npm,(Node Package Manager)是Nodejs包管理工具,可以安装我们需要的依赖包到本地。通过package.json文件来管理插件包的包管理工具,包都存在node_modules里面,安装node环境会自动集成npm工具,不需要额外安装。
四、搭建环境和修改配置
下面以v12.20.0为例在win10中配置一个Nodejs环境,我们使用zip包手动安装Nodejs。
1.下载文件
下载地址:https://nodejs.org/download/release/v12.20.0/
下载node-v12.20.0-win-x64.zip文件
2.将文件解压到D:\nodejs\node-v12.20.0-win-x64目录
node.exe 文件应在此路径下 D:\nodejs\node-v12.20.0-win-x64\node.exe;
在根目录新建 node_global 、node_cache 文件夹,用于存放全局包;
后续使用命令配置全局包和国内镜像地址:
3.配置环境变量
3.1 新建 NODE_HOME 变量,指向node命令目录:D:\nodejs\node-v12.20.0-win-x64
3.2 新建 NODE_PATH 变量,指向全局包所在目录:%NODE_HOME%\node_global\node_modules
3.3 在Path变量中添加三个路径
%NODE_HOME%
%NODE_HOME%\node_global
%NODE_PATH%
注:后续如果需要安装其它版本的Nodejs只需要修改NODE_HOME变量值即可。
4.验证Nodejs是否安装成功
分别键入node -v 和 npm -v 看到版本号就算成功了。
node -v
v12.20.0
npm -v
6.14.8
5.修改npm全局包的默认存放路径和国内镜像地址;
npm config set prefix “D:\nodejs\node-v12.20.0-win-x64\node_global”
npm config set cache “D:\nodejs\node-v12.
文章目录 效果图关键代码源码地址 效果图 NavigationView提供了侧边栏导航,一般在HeaderLayout使用背景图片,在menu部分使用分组的菜单,提高布局美感。
关键代码 class MainActivity : AppCompatActivity() { private var mDrawerToggle: ActionBarDrawerToggle? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val drawerLayout = findViewById<DrawerLayout>(R.id.drawer_layout) val toolbar = findViewById<Toolbar>(R.id.toolbar) setSupportActionBar(toolbar) supportActionBar!!.setHomeButtonEnabled(true) supportActionBar!!.setDisplayHomeAsUpEnabled(true) mDrawerToggle = ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) mDrawerToggle!!.syncState() drawerLayout.addDrawerListener(mDrawerToggle!!) val navigationView = findViewById<View>(R.id.navigation_view) as NavigationView navigationView.getHeaderView(0).setOnClickListener { drawerLayout.closeDrawer(navigationView) Toast.makeText(this@MainActivity, "Header View is clicked!", Toast.LENGTH_SHORT).show() } navigationView.setNavigationItemSelectedListener { item -> when (item.itemId) { R.id.menu_home -> Toast.
1、添加框架依赖
implementation 'org.apache.flink:flink-java:1.16.0' implementation 'org.apache.flink:flink-streaming-java:1.16.0' implementation 'org.apache.flink:flink-connector-kafka:1.16.0' implementation 'org.apache.flink:flink-clients:1.16.0' implementation 'org.apache.flink:flink-json:1.16.0' implementation 'org.apache.flink:flink-table-api-scala-bridge_2.12:1.16.0' implementation 'com.alibaba:fastjson:2.0.19.graal' implementation 'org.apache.hadoop:hadoop-client:3.2.2' implementation 'org.apache.flink:flink-connector-jdbc:1.16.0' implementation 'org.apache.phoenix:phoenix-client-hbase-2.4:5.1.2' 2、flink读取kafka数据
kafka数据源数据格式
{"common":{"ar":"110000","ba":"iPhone","ch":"Appstore","is_new":"1","md":"iPhone 8","mid":"mid_368770","os":"iOS 13.3.1","uid":"63","vc":"v2.1.132"},"displays":[{"display_type":"activity","item":"1","item_type":"activity_id","order":1,"pos_id":3}],"page":{"during_time":19393,"page_id":"home"},"ts":1605368266000} 编写flink读取kafka数据源
public class ReadKafkaToFlinkFunction { public static StreamExecutionEnvironment getEnv() { StreamExecutionEnvironment.createRemoteEnvironment(String host, int port, String... jarFiles); StreamExecutionEnvironment executionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment(); executionEnvironment.setParallelism(1); executionEnvironment.enableCheckpointing(5 * 60000L, CheckpointingMode.EXACTLY_ONCE); executionEnvironment.getCheckpointConfig().setCheckpointTimeout(10 * 60000L); executionEnvironment.getCheckpointConfig().setMaxConcurrentCheckpoints(2); executionEnvironment.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, 5000L)); executionEnvironment.setStateBackend(new HashMapStateBackend()); executionEnvironment.getCheckpointConfig().setCheckpointStorage("hdfs://server115:9000/flink/ck"); System.setProperty("HADOOP_USER_NAME", "wucf"); return executionEnvironment; } /** * ID | CH | MD | MID | OS | DURING_TIME | PAGE_ID | TS * 将kafka的数据读取到flink */ public static void kafkaNewFlinkStream() { try { StreamExecutionEnvironment env = getEnv(); // 将kafka数据作为source KafkaSource<String> kafkaConsumer = KafkaUtils.
技术关键词:mesa、OpenGL、dri、gpu、kmd、xsever
目录
一、mesa概述
二、mesa架构
1. 架构设计
2. 模块划分
三、mesa与linux图形系统中的其他模块的关系
四、mesa的编译
五、链接资源
总结
一、mesa概述 mesa是OpenGL、OpenGL ES、Vulkan、OpenCL的一个开源实现(Open source implementations of OpenGL, OpenGL ES, Vulkan, OpenCL, and more)。对于了解和研究图形渲染与并行计算实现的科研人员和从业者,mesa是一个较好的研究资料。
mesa是基于linux内核的OS上所使用的OpenGL的标准实现。计算机领域的国产化生态中,国产OS的内核都是基于linux,因此国产GPU的OpenGL的支持都是通过mesa。在计算机核心技术(cpu-os-gpu-safe)国产化的时代大浪潮下,与mesa相关的研究与应用呈现出一定的就业机会。
本专栏专注于mesa的OpenGL实现,其他方面不做细致分析。
二、mesa架构 1. 架构设计 随着mesa的版本的迭代,mesa的整个架构和模块设计已经相对完善,本专栏基于较新的22.*的版本,基于gallium架构的实现进行分析。
gallium架构实现了API、 OS、 HW的分层设计,每层通过稳定接口对接,能够更容易的适配不同的OS和HW,但对初接触者,更复杂了。virt gl 使用gallium架构的整体分层设计如下:
采用gallium架构的分层设计图(本图来自mesa架构演进)
2. 模块划分 从大的划分看,可以划分为前端和后端:前端包括libGL、libEGL、libgbm、libglapi等,后端为libgallium_dri。具体的模块关系概略图(每个模块的详略图请看后续的内容)如下:
mesa 模块及关系图
三、mesa与linux图形系统中的其他模块的关系 linux的图形显示系统的软件组成可以概括为:xserver、应用层app(如2D\3D应用软件)、mesa、kmd(kernel mode driver)。mesa与其他三部分的关系如下:
linux 系统软件模块关系图
四、mesa的编译 mesa库使用了meson和ninja来构建。使用ptyhon3.* 的pip3来安装meson,ninja下载源码构建即可。
五、链接资源 mesa官网
mesa架构演进
ninja官网
总结 本文从mesa是什么、gallium架构简述了mesa。后续会针对本文图片的内容进行分解,详细分析mesa实现渲染和送显的实现。
我们想要对一个字符串中的大小写和数字进行区分,那么我们就必须用到三个内置的函数对我们输入的字符串内容进行判断
1.str.isupper()#用来判断是否为大写字母
2.str.islower()#用来判断是否为小写字母
3.str.isdigit#用来判断是否为数字
if 'M'.isupper(): print('M') #输出结果为M #剩余两个函数同样的用法,用来判断一个字符串中的某一字符是否为其结果,如果对整体字符串进行判断则全真为真 if 'Mako'.isupper(): print('Mako') #输出结果为None 有了对于以上三个函数用法的初步认识,我们开始编写整体程序
list1=[] list2=[] list3=[]#首先创建三个空列表用来盛装不同类型的对象 a=input('输入')#要求输入一段字符串 for i in a:#对于我们输入的字符串从第0项进行单个循环并对每个单独的字符进行判断是否为我们所找的对象类型 if i.isupper():#如果字符为大写字母,则进入第一个分支 list1.append(i)#将满足条件的对象放入第一个列表中 if i.islower(): list2.append(i) if i.isdigit(): list3.append(i) print('大写字母数为',len(list1))#列表的长度即元素的个数,元素的个数即满足我们条件的对象的个数这样我们就解决了问题 print('小写字母数为',len(list2)) print('数字的个数为',len(list3))
Spark持久化 1 血缘,缓存,rdd机制 rdd算子本身记录的是元数据,比如某个数据在某个区。他自己不存储数据本身。
(只存储分区和计算方法的数据)
所以 血缘关系(运算流程)或者RDD可以重用 但是数据不可重用
这意味着每次调用都需要 重新运算。
这也是为什么 缓存或者持久化可以提升运行10倍运行速度的原因
因为之前数据虽然在内存里计算,但是并没有存储下来。持久化和缓存才是记录了数据。
rdd1=map(sss) rdd2=rdd1.reducebykey rdd1实际没有保存数据,只记录了血缘。所以当rdd2调用rdd1时。rdd1得重头计算一次。
2 RDD中cache,persist,checkpoint的区别 cache 数据会被缓存到内存来复用
血缘关系中添加新依赖
作业执行完毕时,数据会丢失
persist 保存在内存或磁盘
因为有磁盘IO,所以性能低,但是数据安全
作业执行完毕,数据会丢失
checkpoint 数据可以长时间保存到磁盘中
涉及磁盘IO,读取慢但安全。
独立作业
与cache配合使用,比如checkpoint后再cache一下,这样后续调用可以从cache里取
会切断血缘信息,重新建立新的血缘
checkpoint相当于改变数据源
3 Tips 触发方式:并不是立即缓存,当有action被触发时才调用。
object StorageLevel { //不缓存 val NONE = new StorageLevel(false, false, false, false) //只在硬盘缓存 val DISK_ONLY = new StorageLevel(true, false, false, false) //在硬盘缓存两份 val DISK_ONLY_2 = new StorageLevel(true, false, false, false, 2) //只在内存缓存 val MEMORY_ONLY = new StorageLevel(false, true, false, true) //在内存缓存两份 val MEMORY_ONLY_2 = new StorageLevel(false, true, false, true, 2) //在内存序列化缓存 val MEMORY_ONLY_SER = new StorageLevel(false, true, false, false) //在内存序列化缓存两份 val MEMORY_ONLY_SER_2 = new StorageLevel(false, true, false, false, 2) //同时在内存和硬盘缓存 val MEMORY_AND_DISK = new StorageLevel(true, true, false, true) //同时在内存和硬盘缓存两份(推荐) val MEMORY_AND_DISK_2 = new StorageLevel(true, true, false, true, 2) //同时在内存和硬盘序列化缓存 val MEMORY_AND_DISK_SER = new StorageLevel(true, true, false, false) //同时在内存和硬盘序列化缓存两份 val MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2) //对外内存 val OFF_HEAP = new StorageLevel(false, false, true, false) .
Mediapipe是Google的轻量ML框架,包括了人体姿态识别、手势识别、头发分割等多种功能。Mediapipe支持跨平台,目前提供了Python、Android、IOS、JS等多种解决方案,但暂不支持Unity。
Github有大牛做了Unity的实现,链接。
这个项目将MediaPipe API (c++)移植到c#,这样就可以从Unity调用它。当需要在循环中调用多个api时,这种方法可能会牺牲性能,但它提供了使用MediaPipe的可能性。
直接将代码Clone到本地,用Unity(2021.3.3f1)打开会缺失环境,DLL的配置等。
作者也提供了all-in-one的package。
其中最新的版本v0.10.1是首次预编译好的包。
下载第一个,打开后,得到
使用时,直接用Unity Hub对应的Unity版本打开这个文件夹新建一个文件夹,其中Samples~后面的~要删掉,不然在Unity Editor资源里看不到这个文件夹。
我直接打开是有错的,显示的错误是找不到某个目录下的txt等文件,但实际上这些文件存在的。测试后,运行时,Model Complexity不能选Lite,要选为Full;Running Mode选Sync才是实时的,但是Sync延迟比较明显,换NonBlockingSync(无阻塞同步),延迟会降低,但是会帧一闪一闪的,个人理解是降低了每帧里处理的图像的数量,所以延迟降低,但会闪帧。
延迟情况,用USB3.0而不是2.0,会好一点。
此外,运行时需关闭本机的其他相机应用,比如Windows自带的相机!
在2022年19月28日 用户信息进行了调整
导致获取不到用户的头像和昵称
可以登录小程序管理后台,进入「设置 - 基本设置 - 基础库最低版本设置」进行配置。
根据使用的接口来配置版本即可。
之前研究过通过mycat进行分库分表的配置,最近发现很多项目上用的都是sharding-proxy来实现,所以也来进行一个学习。下面来简单记录一下搭建的过程。
下载 首先自然是去官网下载软件,这里我下载的是最新版5.1.2,下载地址如下:
https://www.apache.org/dyn/closer.lua/shardingsphere/5.1.2/apache-shardingsphere-5.1.2-shardingsphere-proxy-bin.tar.gz
直接在centos虚拟机上用 wget命令进行下载即可,下载完成后,输入 tar -zxvf apache-shardingsphere-5.1.2-shardingsphere-proxy-bin.tar.gz进行解压,最终解压出来一个文件夹,进行下一步。
配置 进入文件夹,可以看到一个十分眼熟的文件结构,非常像tomcat。可能apache家的软件都是这个结构?(笑)
进入conf,首先我们修改 server.yaml这个配置文件,这个配置文件主要是用来设置一个虚拟的登录用户以及密码。
进去之后我们可以看到官方已经提供了样例配置,都被注释掉了。我们只需要放开需要修改的注释,并进行修改即可。这里我主要修改的内容如下:
rules: - !AUTHORITY users: - root@%:123456 - sharding@:sharding props: proxy-default-port: 3333 这里的配置,是开放了两个用户,root和sharding,作为连接我们sharding-proxy的用户。以及修改了应用启动的端口号,默认使用的是3307,但我还有其他的应用占用了3307,所以这里改成了3333。
接着我们修改config-sharding.yaml这个配置文件,这个文件就是我们分库分表的主要配置文件了。
这个文件也是官方提供了样例配置,我们同样只需要放开注释,进行修改:
###################################################################################################### # # If you want to connect to MySQL, you should manually copy MySQL driver to lib directory. # ###################################################################################################### databaseName: aki_sharding dataSources: ds_0: url: jdbc:mysql://127.0.0.1:3306/aki_ds_0?serverTimezone=UTC&useSSL=false username: root password: 123456 connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 minPoolSize: 1 # ds_1: # url: jdbc:mysql://127.
笔者在重新尝试用深度学习的各个模型对序列进行预测,就LSTM进行一些使用记录
一、一些优化 和keras一样的权重初始化 有时候我们torch训练的LSTM, 没有keras好,可以将权重按keras的方式进行初始化 增加attention 捕捉序列的周期与相似性尝试用self-attention 二、网络结构LSTM+Attention import torch from torch import nn import torch.nn.functional as F from torch.utils.data import DataLoader, TensorDataset import typing as typ import numpy as np from tqdm import tqdm from sklearn.model_selection import KFold from collections import OrderedDict class LSTMRegressor(nn.Module): def __init__(self, input_size, hidden_size=128): super(LSTMRegressor, self).__init__() self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True, bidirectional=False) self.header = nn.Sequential(OrderedDict([ ('fc1', nn.Linear(hidden_size, 32)), ('relu1', nn.ReLU(inplace=True)), ('dropout', nn.Dropout(0.01)), ('fc2', nn.Linear(32, 1)), ('relu2', nn.
ref() ref()接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的property.value。类型 使用泛型 推荐使用接口使用Ref // 使用泛型 推荐 import { ref } from 'vue' const initCode = ref<string | number>('200') // 使用interface import { ref } from 'vue' interface User { name: string age: string | number } const user = ref<User>({ name:'前端开发爱好者', age: 20 }) reactive() reactive() 返回一个对象的响应式代理。类型 直接添加 推荐使用泛型 // 直接给声明的变量添加类型 推荐 import { reactive } from 'vue' interface User { name: string age: string | number } const user:User = reactive({ name:"
目录
一、PHP 文件是什么?
二、由于PHP可以在不同平台上运行、与几乎所有浏览器兼容、提供广泛的数据库、免费并且易于学习,在服务器上运行高效的优点,因此要使用PHP。
三、PHP基本语法
四、PHP定界符EOF(定义字符串)
五、数据类型
应用:
六、字符串变量
七、类型比较
八、运算符
九、if...else语句与switch语句同c语言一样,循环语句中while语句,do...while语句,for语句均与c语言用法一样。下面介绍独特的foreach语句(用于遍历数组):
十、数组
遍历关联数组:遍历并打印关联数组中的所有值,您可以使用 foreach 循环,如下所示:
十一、数组排序
十二、超级全局变量(全部作用域均可作用)类型有:
$_REQUEST—用于收集HTML表单提交的数据
十三、函数(函数是通过调用函数来执行的)
十四、魔术常量
十五、PHP类定义
访问控制
十六、$_GET变量(预定义的 $_GET 变量用于收集来method="get" 的表单中的值)
$_POST 变量(预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值)
一、PHP 文件是什么? PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码PHP代码在服务器上执行 ,结果以纯 HTML 形式返回给浏览器PHP 文件的默认文件扩展名是 ".php" 通过 PHP:1.您不再限于输出 HTML。
2.您可以输出图像、PDF 文件,甚至 Flash 电影。您还可以输出任意的文本,比如 XHTML 和 XML。
3.收集表单数据,发送和接受cookies(cookie其实就是一些数据信息,类型为“小型文本文件”,存储于电脑上的文本文件中。)
4.可以添加、删除、修改您的数据库中的数据,可对自己的网站或数据进行限制或加密,即可以加安全盾。
二、由于PHP可以在不同平台上运行、与几乎所有浏览器兼容、提供广泛的数据库、免费并且易于学习,在服务器上运行高效的优点,因此要使用PHP。 三、PHP基本语法 1.PHP脚本可从文档的任意位置开始,以<?php开始,以?>为结束,在中间写代码。(脚本中通常包含HTML标签)。
2.同c语言一般用分号将每个代码行分隔开,但输出可用echo,print(前者可输入多个字符串且速度快,后者只能输入一条字符串,返回值总是1)。
3.PHP上手快在于对于每个变量只需为$x(x为你要输入的变量名),在给变量第一次赋值时 便被创建,并不要明确变量类型以及声明变量(但同时变量名必须以字母或下划线字符开始,只能包含字母、数字以及下划线如A-z、0-9 和 _,不能包含空格)变量对大小写敏感。 4.print_r
打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
总目录 文章目录 总目录前言一、问题现象二、解决问题三、修改环境变量最后:提醒总结 前言 写这篇博文的主要原因是因为自己遇到了这个问题,所以分享出来。
事情起因就是装系统的时候,使用了微软的账户信息,导致登录系统后,用户目录名称就是一串数字,个人忍不了,所以就对它动手了。
一、问题现象 系统用户目录名称为一串数字
cmd命令窗口的路径也是这一串数字以及各种软件安装时的路径都是这串数字 二、解决问题 1、新建一个管理员账户
新建一个管理员账户,具体操作可查我的另一篇文章:Win10 如何添加一个本地用户
2、修改用户目录名称
使用新建的管理员账户登录,然后找到系统用户目录,将那串数字的用户文件夹名称修改为自己想要的名称
系统用户目录:在C盘中,找【用户】文件夹,即可找到
3、修改注册表
仅仅是修改的用户目录名称还不行,还需要修改注册表中的信息win+r 打开运行框,输入regedit 打开注册表按照如下路径,找到ProfileList目录
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\然后ProfileList目录下,一般为第四个文件目录(如果第四个找不到逐个文件找下),找到需要修改的那串数字 用户名,然后双击修改即可。
下图是我已经将那串 13681那串数字修改为了lzk
最后重启电脑,选择使用已经修改用户名的用户登录即可。 三、修改环境变量 对于已经在原先的那串数字用户名下,已经安装过很多软件的同学,需要配置一下环境变量,
将环境变量中涉及到先前的那串数字均修改为 当前的用户名即可。
Win + X 选择【系统】进入【系统设置界面】,选择【高级系统设置】然后会进入到【系统属性】窗口,在该选择【环境变量】将涉及的环境变量均进行修改即可。环境变量详情可以查看:Windows环境变量 最后:提醒 由于该操作涉及到注册表的操作,因此对于电脑小白需谨慎操作。
总结 本文为本人实操,主要是因为之前碰到了这种情况,所以记录在博文中。一来个人有记录的习惯,二来分享给同样遇到该问题的同学,希望能对于问题的解决有一点帮助。
参考
官方资料 - 重命名用户帐户不会自动更改配置文件路径
获取 Git 仓库 通常有两种获取 Git 项目仓库的方式:
1. 将尚未进行版本控制的本地目录转换为 Git 仓库;
2. 从其它服务器 克隆 一个已存在的 Git 仓库。
两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。
(git init)在已存在目录中初始化仓库 如果你有一个尚未进行版本控制的项目目录,想要用 Git 来控制它,那么首先需要进入该项目目录中。
$ cd /c/user/my_project 之后执行:
$ git init 该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是Git仓库的骨干。
(git clone)克隆现有的仓库 克隆仓库的命令是 git clone <url> 。 比如,要克隆 Git 的链接库 libgit2,可以用下面的命令:
$ git clone https://github.com/libgit2/libgit2 这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹, 从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 如果你进入到这个新建的 libgit2 文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。
如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以通过额外的参数指定新的目录名:
这会执行与上一条命令相同的操作,但目标目录名变为了 mylibgit。
$ git clone https://github.com/libgit2/libgit2 mylibgit 记录每次更新到仓库 请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。
本篇文章讲究的是每一步操作都记录,争取每一位看该文章的朋友都能安装成功,并且会提供下载好的安装软件
1、下载RabbitMQ安装包 RabbitMQ官方地址:https://www.rabbitmq.com/download.html
不想去官网下载的小伙伴可以使用我提供的资料
百度网盘链接:RaabbitMQ安装资料
提取码:Eric
2、上传安装包到Linux中 将上面三个软件上传到/usr/local/software 目录下(如果没有 software 需要自己创建)
3、安装文件(分别按照以下顺序安装) 进入software文件夹,依次使用如下命令
rpm -ivh erlang-21.3-1.el7.x86_64.rpm yum install socat -y rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm 4、常用命令(按照以下顺序执行) 1)添加开机启动 RabbitMQ 服务
chkconfig rabbitmq-server on 2)启动服务
/sbin/service rabbitmq-server start // 或者使用 systemctl start rabbitmq-server 如果启动失败,可以看这篇文章:解决启动RabbitMQ报错
3)查看服务状态
/sbin/service rabbitmq-server status // 或者使用 systemctl status rabbitmq-server 看到这个绿色的active就说明启动成功了
5、进入RabbitMQ Web管理页面 RabbitMQ和Tomcat、Nacos一样,是自带web管理页面的
开启 web 管理插件,需要执行如下命令
rabbitmq-plugins enable rabbitmq_management 然后在window浏览器中访问即可,地址为:虚拟机ip地址:15672
例如:192.168.1.7:15672
我们用默认账号密码()guest)访问地址 http://192.168.1.7:15672/出现权限问题
此时我们需要添加一个新用户,步骤如下:
// 第一步:创建账号 rabbitmqctl add_user admin 123 // 第二步:设置用户角色 rabbitmqctl set_user_tags admin administrator // 第三步:设置用户权限 rabbitmqctl set_permissions -p "
向日葵、ToDesk,想控制手机。【收费】、【收费】、【收费】、【收费】
作为编程人员,这钱我有点不想花。手里有常开机电脑,于是我萌生想法,使用frp做代理,用adb命令将手机的屏幕截图后展示在网页上,按秒刷新。反正自己服务器的没有1.2T流量从来每用完过,然后通过网页上点击判断坐标位置通过adb命令让手机执行。完美,本着这个想法去实现,项目已经搭建,frp服务已经开启。突然发现了宝藏【RustDesk】,果断放弃曾认为完美的计划,开舔【RustDesk】。这就是我和它的故事!
废话不说,一次字:开始干!
1:访问RustDesk,下载对应文件。 RustDesk | 开源远程桌面软件
不想看图找,直接赋链接:Releases · rustdesk/rustdesk-server · GitHub
下载Linux的文件。
2:解压上传至服务器,方法很多,可以用宝塔、xftp等,哪个顺手用哪个吧。 3:开启守护进程,给到启动hbbs和hbbr。(宝塔软件商店安装:【进程守护管理器】免费) 安装成功后设置首页展示
然后进到首页开始添加守护进程,注意上传hbbs和hbbr路径填写正确
注意,进程数设置一个就行,不用设置多。设置完成会自动启动,没有成功就说明文件路径和命令不正确,按照截图对照你的路径排查吧。
4:开放防火墙端口号: TCP(21115, 21116, 21117, 21118, 21119)UDP(21116) 不管所以然,按照官方文档开整。
先开放服务器的防火墙:
firewall-cmd --zone=public --add-port=21115/tcp --permanent firewall-cmd --zone=public --add-port=21116/tcp --permanent firewall-cmd --zone=public --add-port=21117/tcp --permanent firewall-cmd --zone=public --add-port=21118/tcp --permanent firewall-cmd --zone=public --add-port=21119/tcp --permanent firewall-cmd --zone=public --add-port=21116/udp --permanent firewall-cmd --reload firewall-cmd --reload firewall-cmd --reload firewall-cmd --query-port=21115/tcp firewall-cmd --query-port=21116/tcp firewall-cmd --query-port=21117/tcp firewall-cmd --query-port=21118/tcp firewall-cmd --query-port=21119/tcp firewall-cmd --query-port=21116/udp 开启阿里云安全组:
mysql中如何将存在分隔符号的一列进行拆分,成为多行 -- ****************************** 写在前面的说明 ********************************** /* student 为 上面左图的表名,表内字段名称见上图; 1.一个中文符号或者文字长为3,一个英文字母或者一个英文状态下得符号长为1 ; 2.函数substring_index(string,sep,num),即substring_index(字符串,分隔符,序号),参数说明: string:用于截取目标字符串的字符串。可为字段,表达式等; sep:分隔符,string存在且用于分割的字符,比如“,”、“.”等; num:序号,为非0整数。若为整数则表示从左到右数,若为负数则从右到左数。 例子:比如“www.mysql.com”截取字符‘www’,分割符为“.”,从左到右序号为1,即substring_index("www.mysql.com",'.',1);若从右开始获取“com”则为序号为-1即substring_index("www.mysql.com",'.',-1)。 */ -- ****************************** 写在前面的说明 ********************************** -- -------------------------------------------------------------------------------- -- ****************************** 具体的sql及注释********************************** SELECT a.sage, -- /*先正着取出几部分*/,然后在此基础再倒着取出最后那一部分 substring_index( substring_index(a.sname,',',b.help_topic_id + 1),',' ,- 1 ) AS split_name from -- 将原数据先取出来 like中的符号与实际表里字段中的分割符对应 (select sname,sage from student where sname like '%,%') a -- 如果表内还存在没有分隔符,就单个值的则直接select sname,sage from student 就行,总之目的是取出要处理的数据 join mysql.help_topic b -- mysql帮助表 内含字符等 ,help_topic_id是从0开始的,其实使用的是它的计数功能 ON -- on的条件筛选结束后,如果改行此字段分割完后有三部分,则总共产生3条记录 b.help_topic_id < ( length(a.
这里我们以 JpaRepository.class 为例。
JpaRepository是Spring Data JPA中非常重要的类。它继承自Spring Data的统一数据访问接口——Repository
1.找到该类,然后右键打开菜单,选择show diagrams 2.如下图,打开的界面就是该类的关系层次 从上图可以看出:
JpaRepository继承自PagingAndSortingRepository接口,而PagingAndSortingRepository接口继承自CrudRepository接口。CrudRepository和Repository接口则是Spring Data底层通用的接口,定义了几乎所有的数据库接口方法,统一了数据访问的操作。
参考书籍《springboot从入门到实战-章为忠著》
文章目录 1.让选择的包的程序不运行2. 让已经取消不运行的包再次运行 1.让选择的包的程序不运行 选择不要运行的包,右键 -> 选择 Mark Directory as , 接着选择Excluded
就可以在运行时不自动运行你选的包的程序了
2. 让已经取消不运行的包再次运行 同样,要把选择不运行的包再次运行时,也是右键 -> 选择 Mark Directory as,接着选择 Cancel Excluded,就可以再次运行选择的包了
一、配置过程 1.打开控制面板win+r,输入cmd在出现的终端中输入ipconfig找到自己在以太网适配器下的域名,如下图所示
2. 在burpsuite中点击proxy,在options中点击edit,接下来在证书地址上输入自己的域名点击确定即可。
3.接下来为浏览器配置,以火狐为例
点击右上角三道横杠,点击设置。
点击手动配置代理,在HTTP代理中输入相同的域名,点击确定即可。
二、抓百度过程 点击proxy,让其处于开启拦截请求(Intercept is on 表示开启拦截请求,Intercept is off 表示关闭拦截请求),随后点击open browser。
点此页面输入www.baidu.com(可以是你要抓包的网址),回车,出现以下情况
看到左上角一直在转圈,右边出现抓到浏览器的数据。(forward表示放包,可让浏览器数据通过,即恢复正常。drop表示丢包,即让浏览器的数据丢失导致页面无法出现) 这是丢包后的页面。
点击action,再点击send to repeater,
可以看到自己要抓包的数据,随后点击repeater这一栏,再点击send,就会在response看到自己抓包得到的数据。即抓包完成。
作者 | 叶润源 编辑 | 极市平台
原文链接:https://www.yuque.com/yerunyuan/ar9831/tsm0id#Kfi4w
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【模型部署】技术交流群
后台回复【模型部署工程】获取基于TensorRT的分类、检测任务的部署源码!
导读
YOLOX将近两年来目标检测领域的各个角度的优秀进展与YOLO进行了巧妙地集成组合并且重回Anchor Free的怀抱。本文详细的介绍了作者将FCOS+ATSS模型换成YOLOX模型的全过程并附带相关代码。
YOLOX的Anchor Free(Anchor Based针对数据集聚类分析得到Anchor Box的方式,怕对泛化会有影响,尤其前期缺乏现场数据时)以及更有效的Label Assignment(SimOTA),使我下决心将目前所用的FCOS+ATSS模型换成YOLOX模型。
这次改动将YOLOX添加到了Yolov5上,在Yolov5的框架下,训练150个epoch的yolox-s模型的mAP也达到了39.7(且未使用mixup数据增强和random resize)。
一、实验环境: 实验机器:
1台PC:CPU: AMD Ryzen 7 1700X Eight-Core Processor, 内存: 32G, 显卡: 2张GeForce GTX 1080 Ti 11G
1台PC:CPU: AMD Ryzen 5 2600 Six-Core Processor, 内存: 32G, 显卡: 2张GeForce GTX 1080 Ti 11G
目标部署硬件:A311D开发板(带8位整型5TOPS算力的NPU)
软件版本:Python版本为3.7.7,Pytorch版本为1.7.1,Cuda版本为10.1
官方YoloX版本:https://github.com/Megvii-BaseDetection/YOLOX.git
Commits: 29df1fb9bc456fcd5c35653312d7c22c9f66b9f8 (Aug 2, 2021)
官方Yolov5版本:https://github.com/ultralytics/yolov5.git
Commits: f409d8e54f9391ce21436d33334beff3a2fd4042 (Aug 4, 2021)
二、选择适合NPU的架构试验: 1、速度实验: 注:a、 模型在NPU上的速度实验,并不需要把模型完整地训练一遍,那样太耗时,只需要将模型导出(初始化后导出或者少量图片train一个epoch),再量化转换为NPU的模型即可。
1
mac系统出了新版本 13.0.1 后,androidstudio push, pull 代码一直报错:
如下:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
经过几翻操作,重新生成id_rsa.pub 也是不行,
最后发现是rsa加密方式的问题,苹果mac升级系统后,默认不支持rsa方式加密git通讯,
所以如果要继续使用这个pub文件加密的方式,则要手动添加cofig配置文件来支持:
如下在 ~/.ssh/ 目录下新增config文件,
然后在 ~/.ssh/config 中新增:
Host *
PubkeyAcceptedKeyTypes +ssh-rsa
HostKeyAlgorithms +ssh-rsa
1.通过dropdownClassName添加class 1.通过dropdownClassName添加class <a-range-picker dropdownClassName="rangePickerIceGai" v-model:value="form.selectTime" show-time /> 2.显示框的样式 <style scoped> :deep(.ant-picker-range){ background: var(--color-background); border: 1px solid var(--color-border); border-radius: 2px; } :deep(.ant-picker-input > input){ color: var(--color-text); } :deep(.ant-picker-separator){ color: var(--color-text); } :deep(.ant-picker-suffix){ color: var(--color-text); } </style> 3.点击日期界面样式(注意:此处加入scoped无效),样式内的var()可以替换成例(#ffffff) <style lang="scss"> .rangePickerIceGai{ background: none !important; .ant-picker-panel-container{ background: var(--color-background); color: var(--color-text); } .ant-picker-panel{ border: 1px solid var(--color-border); } .ant-picker-header{ color: var(--color-text); } .ant-picker-content th,td{ color: var(--color-text); } .ant-picker-content td:hover>.ant-picker-cell-inner{ background: var(--color-background); } .ant-picker-cell:hover:not(.ant-picker-cell-in-view) .
二进制流的主要编码格式是base64码。可以在网上找一些在线转base64编码的网站进行尝试转换。
例如:http://imgbase64.duoshitong.com/然后通过前端展现和下载。
一、前端查看、下载功能实现 前端显示二进制流图片(src中放置base64码及二进制流)
<img src="http://dl.ppt123.net/pptbj/201603/2016030410235232.jpg" alt=""> /* * 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 * <img src="data:image/png;base64,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" alt=""> */ 前端下载二进制流文件(herf中放置base64码及二进制流,download后面放置下载后的文件名称,如果有需要可以拼接下载文件名)
<a href="data:text/plain;base64,xOPV5suno6zV4srHvNm7sA==" download="6.txt">下载txt</a> /* * 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 * <a href="data:image/png;base64,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" download="6.png">下载图片</a> */ 后端只要实现对数据库表字段的增加和修改接口api就可以正常使用了。然后在使用查的接口进行对相关字段遍历赋予src、herf、download中。就可以正常实现查看和下载了。 二、前端将文件转换成二进制流 主要代码是与input的file属性连用。将文件转为base64码。 <html> <head></head> <body> <input id="fujian" type="file"/> </body> <script> $("#fujian").change(function(){ var reader = new FileReader(); var AllowImgFileSize = 2100000; //上传图片最大值(单位字节)( 2 M = 2097152 B )超过2M上传失败 var file = $("#fujian")[0].files[0]; var imgUrlBase64; if (file) { //将文件以Data URL形式读入页面 imgUrlBase64 = reader.readAsDataURL(file); console.
git创建分支及合并
1、在远端创建自己的分支
2、在本地创建自己的分支,并切换到自己的分支
git branch newbranch
git checkout newbranch
3、将远端和本地分支关联起来
git branch --set-upstream-to=origin/newbranch newbranch
git pull
4、在本地分支修改代码,切到master后更新最新代码,并将自己的分支与master合并,修改冲突,修改完成后,更新到远端分支
git checkout master
git pull
git merge newbranch
修改冲突,并更新到远端自己的分支
git add .
git commit -m “”
git push -u origin newbranch
5、在远端请求合并,将自己的分支与主分支进行合并,并merge删除远端分支,并重复第1-3步
目录
1.React环境搭建
2.React项目结构
3.React优点和缺点
1.声明式设计
2.高效-React通过对DOM的模拟(创建虚拟DOM),最大限度地减少DOM操作(底层是Diff算法)
3.单向响应的数据流
4.组件化开发-复用和便于维护
5.缺点:React本身能做的事并不多,想做大的项目必须用React插件(全家桶)eg:网络请求库,UI库等这些没有
4.接受React的中二设定:JS中遇到了<> 会当作标签解析,标签中遇到了{},就会把这个{}中的表达式判定为JS语法
5.快速创建组件
1.React环境搭建 1.安装React脚手架(安装一次就好)
npm install -g create-react-app
2.验证脚手架是否安装完毕/查询版本
create-react-app -V
3.创建项目(如果丢包了,npm i 一下)
create-react-app 项目名称 (js版本)
create-react-app 项目名称 --template typescript (TS版本)
4.进入项目目录
cd 项目名称
5.启动项目
npm run start
2.React项目结构 (1)node_modules: 这里面包含了react项目中会用到的一些组件,install的时候下载下来的,你可以进去看看,有一些如base64之类的我们可能会用到的组件,或者一些第三方库;
(2)public:里面包含了我们项目中的启动页面,react比较适合单页面项目应用开发,所以暂时只包含一个index.html,并且这也是react工程的入口页面,入口页面怎么理解,就是你启动项目后,打开的首页,第一眼呈现的那个页面;
(3)src:里面包含了一些我们自己使用的js文件,css文件,img文件等等,但你打开src文件夹你会发现很混乱,不要管什么app.js,你就看到index.js即可,系统默认将index.html对准了index.js,index.js也就是我们项目的入口js,他和index.html所对应。
(4)修改:让目录结构更易懂:接下来,我们改动一下src里面的内容和结构,让首次接触react的小伙伴尽量能觉得他有点亲切的感觉,事实证明,越亲切的事物我们越希望去接近。src文件夹下原来的所有东西,除了index.js之外,都可以删掉,这样就可以轻装上阵了
3.React优点和缺点 1.声明式设计 2.高效-React通过对DOM的模拟(创建虚拟DOM),最大限度地减少DOM操作(底层是Diff算法) 3.单向响应的数据流 React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。
4.组件化开发-复用和便于维护(推荐使用函数组件) 5.缺点:React本身能做的事并不多,想做大的项目必须用React插件(全家桶)eg:网络请求库,UI库等这些没有 4.接受React的中二设定:JS中遇到了<></> 会当作标签解析,标签中遇到了{},就会把这个{}中的表达式判定为JS语法 JSX的理解:
JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。
JavaScript XML:JS中可以用标签,标签里面也可以用JS语言。
JS中遇到了<></> 会当作标签解析,标签中遇到了{},就会把这个{}中的表达式判定为JS语法
//js - string 变量中保存的是一个字符串 let a = '<div>hello react!
场景 因为特殊情况,开发中子组件又需要引入父组件,即子组件中再创建一个父组件的Vue实例。
比如一个展示组件Rack,内部有一个子组件RackDialog,然后RackDialog里又需要引入Rack组件
问题 使用常用的组件引入注册方式在RackDialog组件中引入Rack
import Rack from "Rack.vue" export default { components: { Rack } } 上面的方式运行时会报错组件未注册
解决方案 使用异步组件引入方式,即在RackDialog中使用如下方式引入Rack
export default { components: { Rack: () => import("@/components/Equipment/Rack/Rack.vue"), } } 组件注册机制 Vue底层在进行组件注册时采用的是递归注册的形式,会将一个顶级组件的所有后代组件进行递归注册。
但是如果出现上述我们的情况——子组件中又引入了父组件,框架在递归注册时就可能陷入死循环。
所以Vue框架底层注册机制为了避免这种情况会在这种地方停止向下递归注册。所以出现了上述的组建为注册错误。
使用了按需引入后就会在RackDialog组件激活时才引入Rack组件,就不会出现这种未注册报错了。
优化 按需引入的方式还可以使用Vue的内置组件,即动态组件更优雅的引入
---------------------
作者:兴趣使然的码仔
来源:CSDN
原文:https://blog.csdn.net/qq_41790461/article/details/121774086
版权声明:本文为作者原创文章,转载请附上博文链接!
C/C++通过shapelib开源库读取shapefile文件 shapelib下载shapelib编译C++使用二次封装 shapelib下载 链接: http://download.osgeo.org/shapelib/
shapelib编译 作者使用的是deepin操作系统(linux),下载的是shapelib-1.5.0.tar.gz压缩包,解压后会有一个源码目录shapelib-1.5.0。进入源码路径即CMakeList.txt所在路径。
命令行分别输入:
./configure mkdir build cd build cmake .. 然后在build路径下就会生成libshp.so,通过源码路径下的shapefil.h就可以调用libshp.so库
如果不想使用库,希望把源码和你的项目编译到一起可以直接将CMakeLists.txt中lib_SRC 所包含的源码文件添加到你的项目中进行编译即可
C++使用二次封装 作者在C++项目中使用到了这个库对其进行了二次封装,该项目读取的是.dbf文件和.shp文件
read_shapefile.h
#ifndef __READ_SHAPEFILE_H__ #define __READ_SHAPEFILE_H__ #include "shapefil.h" #include <unistd.h> #include <memory> #include <iostream> #include <vector> #include <assert.h> #include <bits/stdc++.h> using namespace std; class ReadShapeFile; #define SUCCESS (0) #define FAILURE (-1) using SpReadShapeFile = std::shared_ptr<ReadShapeFile>; typedef struct { double x; double y; double z; } Point3D; using Point3DS = vector<Point3D>; #define SHAPEFILE_DBF_TITLE_SIZE (50) // dbf文件标题长度 class ReadShapeFile { public: static SpReadShapeFile createSpReadShapeFile(const string &file_name) { // file_name中应为路径和文件前缀 if(access((file_name + "
1. 问题描述 scanf() 函数和 gets() 函数都可用于输入字符串,但在功能上有区别。
gets 可以接收空格,结束后自动加 '\0'
scanf 遇到 空格、回车 和 Tab 键都会认为输入结束,所以它不能接收空格,也是结束后自动加 '\0'
但是在 C++ 下,使用 gets 会报错:
2. 解决办法 后面经过查找资料,才知道 VS2015 之后就不支持 gets 了,变成了 gets_s,并且后面的括号中也不能单独写一个数组名,还需加上数组内的个数,用法如下:
gets_s(words, STLEN); 此时,编译就不会报错了:
作者 | 科技猛兽 编辑 | 极市平台
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【模型部署】技术交流群
后台回复【模型部署工程】获取基于TensorRT的分类、检测任务的部署源码!
导读
本文提出了一种对硬件友好的 DFC 注意力机制,并借助它和 GhostNet 模型提出了一种针对端侧设备的GhostNetV2 架构。
本文目录 1 GhostNetV2:长距离注意力机制增强廉价操作
(来自北京华为诺亚方舟实验室)
1.1 GhostNetV2 论文解读
1.1.1 GhostNet 回顾和本文动机
1.1.2 重新思考 Attention 对模型架构的影响
1.1.3 用于移动端架构的解耦全连接注意力机制 DFC Attention
1.1.4 借助 DFC 注意力机制增强 Ghost 模块
1.1.5 特征下采样
1.1.6 实验结果
1 GhostNetV2:长距离注意力机制增强廉价操作 论文名称:
GhostNetV2: Enhance Cheap Operation with Long-Range Attention (NeurIPS 2022 Spotlight)
论文地址 GhostNetV2:
https://openreview.net/pdf/6db544c65bbd0fa7d7349508454a433c112470e2.pdf
1.1.1 GhostNet 回顾和本文动机 GhostNet 是一种轻量级卷积神经网络,是专门为移动设备上的应用而设计的。其主要构件是 Ghost 模块,一种新颖的即插即用模块。Ghost 模块设计的初衷是使用更少的参数来生成更多特征图 (generate more features by using fewer parameters)。 我们知道,深度神经网络的每个卷积层都有一定数量的输出特征图。给定输入特征 分别是特征图的高度,宽度和通道数),Ghost 模块将输出通道分成了两个部分 (一般是对半分):
break、continue、return的使用与区别 结论先行:
break与continue:
break和continue都是用来控制循环结构的,主要作用是停止循环
它俩的区别:
1》break是跳出整个循环,continue是跳出当前循环,继续进行下一个循环
2》continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用, 用来加速循环;break还可以在switch分支语句中使用,遇到break,就会跳出switch语句
return
函数中使用,函数遇到return就会立即停止执行并退出;后面可以跟函数的返回值,如果不跟就返回undefined;
break语句 跳出整个循环;跳出的是它所在的最近一级的循环,如果外面还有循环,外面还是会继续的
eg1:
let num = 0; const arr = [1, 2, 3, 4, 5, 6]; for (let k = 1; k <= 10; k++) { if (k % 3 == 0) { break; } num++; } console.log(num); // 2 当 k=3 时,满足条件break,跳出真个for循环语句,打印2
eg2:
let num = 0; for (let i = 0; i < 2; i++) { for (let k = 1; k <= 10; k++) { if (k % 3 == 0) { break; } num++; } } console.