最近需要用到jenkins进行自动化测试。但是在添加项目时,进行“源码管理”时,提示指定Git源代码时提示无权限,错误提示如下:
环境:win10
仓库:Gitlab
报错:
Failed to connect to repository : Command "git -c core.askpass=true ls-remote -h git@XXXXX:XXXX/XXXX.git HEAD" returned status code 128: stdout: stderr: Permission denied, please try again. Permission denied, please try again. Permission denied (publickey,password). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 最初我将Gitlab生成的Access Token复制进去,Add Jenkins,发现依旧是错误。于是参考了两篇文章,问题解决。
解决方法: mac解决方法,如果是win,使用 Git 软件可运行
id_rsa。这个是私钥文件。id_rsa.pub。这个是公钥文件,需要配置到GitHub上面。 1)先查看是否有id_rsa 和id_rsa.pub文件
ls ~/.ssh
废话少说
Vue如何实现双向绑定, Vue如何实现{{...}}模板渲染,为何用过Vue的人都说说它好用,今晚八点前端扫盲带你一起解剖Vue。
new Vue
故事要从new Vue开始讲起,如下:
于是我们直接从源码中找到Vue构造函数位置
这里先判断是否通过new 来创建Vue实例,如果我们直接调用Vue(),则会报warn里面错误。然后this._init(options)初始化相关事务。在构造函数下面还有几个mixin(混入)初始化代码,应该是定义了Vue原型对象上的一些方法,我们下一个个点进去看下具体有哪些实现,方便后面讲解。
在这个initMixin(Vue)里面:
Vue.prototype对象上定义了_init字段
在stateMixin(Vue)里面:
Vue.prototype对象上定义了$data、$props、$set、$delete、$watch字段,具体作用后面再一一突破
在eventsMixin(Vue)里面:
Vue.prototype对象上定义了$on、$once、$off、$emit字段
在lifecycleMixin(Vue)里面:
Vue.prototype对象上定义了_update、$forceUpdate、$destroy字段
在renderMixin(Vue)里面:
Vue.prototype对象上定义了$nextTick、_render字段
综上整理下Vue.prototype的所有字段有:
Vue.prototype = { _init: Function, // 初始化工作 $data: Object, // 传入实例的data对象,经过代理后的 $props: Object, // 父组件传入数据对象 $set: Function, // 实现为响应式对象新增 property 同样是响应式的 $delete: Function,// 删除响应式对象的 property,确保删除能触发更新视图 $watch: Function, // 监听响应式对象的 property 变更 $on: Function, // 为实例添加一个订阅,相同订阅名不会覆盖会叠加 $once: Function, // 为实例添加一个订阅,只会被触发一次 $off: Function, // 为实例解除订阅 $emit: Function, // 为实例触发指定订阅 _update: Function, // 更新实例视图 $forceUpdate: Function, // 强制更新实例视图 $destroy: Function, // 销毁实例 $nextTick: Function, // 将回调函数放到微队列中执行,确保获取到的dom是最新的,没有回调则返回一个Promise _render: Function, // 触发render(new Funtion生成的)函数,生成虚拟dom} 其中"
自《一梦江湖》(原《楚留香》)于去年对江湖进行了一次全面的翻新后,《一梦江湖》新生版就出现在了我们的眼前。美术重置后的江湖焕然一新,3.0版捏脸系统使得江湖人的脸蛋更为细腻,更有个性!
单论3.0版捏脸,从肤质,到眼妆、唇妆、妆容等方面的效果都得到了显著提升,人物角色很真实细腻,可谓是精益求精,下足了功夫。为此,《一梦江湖》凭借着过硬的捏脸品质,笼络了不少玩家的心,尤其是拥有一身捏脸绝技的大佬们。
于是,这些大佬们利用捏脸系统打造了不少具有个性化,有特色的脸蛋,比如阿凡达,黑皮美人!当然这种在时下已经属于司空见惯了。而且由于我们中国传统的审美观念,还是忠于东方美,但是也有玩家捏出了中西合璧的脸蛋,于东方韵味中透出露出了欧美的厌世,请看下图↓↓↓
标配的白皮,脸部轮廓鲜明,两眼深邃,鼻梁高挺,标准的欧洲人外貌特征,还有楼下这一张,黑发面纱下的她更具有一种神秘气息,还有一丝丝高冷,难以靠近!
当然,除了五官立体,脸部轮廓鲜明的欧美脸蛋,还有不少玩家捏出了我们中国独有韵味的东方脸,还有一点点清冷,俗称清冷美人!
比起欧美的金发,玩家更喜欢中国武侠剧里的红衣白发美人,尤其是之前看的林青霞饰演的东方不败,。不过,这里,捏脸大佬没有利用红衣的张扬,而是用了高贵金,不过白发依旧是白发,发饰一贯中国古风,五官没有欧美那么立体,但是柳叶眉,细长眼,樱桃小嘴都有了,这不就是东方美人的特征么?瞅瞅下图,满屏忧郁气质!
还有这一张,拥有着我们亚洲的黑发,黄皮肤,细长眼,樱桃小嘴,惊鸿一瞥下,自带的忧郁气息徐徐散开来,就只有这一眼,便不敢再多相看一眼。
很多小伙伴们在后台表示自己的捏脸技术远不及这些大佬,在这里,小编可以建议可以选择官方给出的预设脸。我们可以在游戏中选择自己喜爱的预设脸进行发色、发型、瞳孔颜色、唇色等细节处的调整,将其打造成自己的专属脸型也不是不可以!
另外,你也可以直接通过AI系统,选择自己喜欢的照片一键导入,都可以在游戏中完美展现,无论是爱豆还是动漫角色,都可!话说,你的女鹅都长什么样呢?
本文主要分析景点语音导览的目标人群是谁,解决了用户的什么问题。如果我是产品,下一次迭代我会怎么做?
景点语音导览的目标人群是谁,解决了用户的什么问题 痛点:
景区内请导游花费太大;自己查攻略需要花费很多精力;景区景点多、路线复杂不知道怎么走好。 目标用户:
自助游;期望一定程度了解景点相关知识(历史背景等);不用花费太多时间和精力去查询搜索相关知识(比如总统府里面的景点有十几个,不需要走到哪里百度去搜相应的景点名称获取相关);期望花费较低(比请导游、买手册书等便宜)。 总结一下,目标用户是希望以很低的价格、较少的精力获取游玩景点的相关知识且不知道如何规划游览路径的游客。
高德景点语音 假设用户就是冲着语音导览去的,咱先画一个很极其简单的流程图模拟用户使用的过程:
这个流程很简单,就不用流程图了。
搜索–> 有导览 -> 导览列表选一个 -> 购买或者分享获赠搜索–> 没有导览 -> 缺省上报 没导览理论上是缺省提示,可以通过让用户上报,收集有需求做导览倒是目前还没有的地方,不过这个貌似牵扯到上层商业合作(?),就先不说啦~咱就说有导览的情况下,用户会依次遇到的问题。
问题1:
用户是否能很容易地知道某个景区有导览?也就是说导览是否在非常明显的表层,用户非常好获知,而不是藏很深?不然花了大价钱主推的东西就失去意义了。
咱们来看看搜索后的页面:
搜索之后页面(左)下半部分的景区介绍就有导览推荐(介绍),点击后详情页面(右)tab页的第一个也是语音,非常吸引注意力。
问题2:
同一个景点会提供多个语音包供用户选择的情况下,页面是否给出了足够的有效信息,能让用户知道自己想选哪个?
我们先来看看高德语音导览列表页和详情页提供了哪些信息(这里没有一个完整的导览详情页,我只能把和导览相关的页面都截进来)。
列表 -> 选中某个语音导览
亮点:
(上图1)列表页有直接的试听入口,减少用户体验语音导览的步骤。(上图2)跟随播能根据用户定位自动播放最近景点导览,无需用户点击。(上图2)推广初期,通过邀请好友点赞免费听做推广(不过这个算运营?) 槽点:给出信息不足以帮助用户做出挑选导览的选择(后面详细分析)。
期望的点:
(上图2)能够根据导览(或者写死的)给用户一条合适的路线,不然景点一盘散沙,并不知道怎么走怎么玩。导览就是一个给了游客极高自由度且价格极友好的“导游”,导游的任务有三:带路;讲解;答疑。其实导游是起主导和带领作用的,而跟随播虽好,依然是让用户主导,用户还要想我怎么玩。Don’t make me think!
(上图2)重点景点和非重点景点能标识出来,让用户能取舍。
(上图3)每个音频都能有点赞或者评论,因为有时候可能并不是传统意义的“必游”景点,但是可能讲解人的内容是被大家所喜欢的(比如野史)。但是貌似感觉这样做就太细了?先不搞了吧。
(上图4)倍速播放。有调查(没调查)表明:各大视频网站用倍速功能的人和愿意用导览的用户高度重读重合,所以倍速可做。
槽点分析:有没有觉得听导览有种上课的感觉,想起了焦虑地在网上选产品课程的我们(哭)。那产品课程这么多,别人提供了主要哪些信息,让用户给选择的呢?
老师背景(通常会说BAT背景,n年经验的背景;扎实的北京是不是很加分很踏实)课表内容覆盖面(比如从竞品分析到项目管理甚至教你怎么跟研发沟通)价格合适或者有优惠活动(常发优惠券,但是最终价格只能是同行衬托了,都挺贵o(╥﹏╥)o)试听机会(能够对老师风格有一定的了解,看是否适合自己)课后指导(有互动和反馈帮助提高)内推机会(毕竟现在简历容易石沉大海,内推至少有个面试机会)毕业证书(多少算个证书(*^▽^*))往期学员评价(用过的说好才是真的好)数字表现(**人听过这个课,**人觉得课很赞,**人拿到Offer) 再回到导览上来,是不是能够一一对应呢?
*讲解人背景介绍(比如知名学者马未都,没名气也可以用“**”旅行社10年导游等作为标签)*语音覆盖面(内容丰富程度只能靠讲解人了,产品上能给的就是讲解的景点数)*价格便宜,前期推广可以通过邀请返现或者邀请免费听的形式促进拉客*试听机会(有啦)课后指导(唔?以后可以在完成导览后出一道题目,回答对抽奖,能抽到打车券,餐饮券等,毕竟在外面旅游是需要这些的)毕业证书(比如通过用户行为(比如定位离开该景区)完成一个景点的游览后,弹出用户听了**分钟讲解,了解了**个历史人物,知道了**段故事等的一张图,可以分享一波?这里先不搞了)*用户评价(侧面了解讲解人风格和内容的受大众欢迎的程度) (*优先级较高的)
低保真结果 基于上面的各个点,延续现在基本的逻辑和页面,加上一点点改动,就可以画个粗略版的低保真啦~
从列表页进来
点击详情后三个tab页
点击“礼品”图标可参与答题
提取一下关键信息展示到列表页面
本文由 @韩大妹子 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
文章目录
json和字典的区别?
你做接口自动化测试时,测试数据放哪里?
什么是数据驱动?
excel中如何设计你的用例?
excel中的数据怎么拿出来?
如果有些接口做了鉴权(需要鉴定权限),怎么实现这些接口的自动化测试?
首先需要明确接口是通过什么机制来实现的鉴权
1) 如果是通过会话id(JSESSIONID)来实现鉴权的,那么先调用完登录接口--》拿到它返回的这个数据--》存储起来--》后面再调用其他接口的时候直接带上这个数据过去就可以了。
2) 如果是通过token来实现鉴权的,那么同样只需要在调用完登录接口--》拿到它返回的这个数据--》存储起来,后面操作同上。先回答上面的一个基本实现步骤,然后再补充以下一些实现细节:
a. 怎么取到这个JSESSIONID或者token这个信息怎么取首先得明白它是怎么返回来的,可能为以下两种方式:
b. 怎么存储这个JSESSIONID或者token
c. 请求其他需要鉴权的接口时,怎么带过去这个数据先找开发人员确认,再调用需要鉴权的这些接口怎么携带这个鉴权的信息(票)。一般不外乎这么几种:
什么是会话?
什么是token?
某个接口请求,参数依赖上个接口的返回数据,怎么处理(接口关联)?
接口调用依赖第三方的接口b,而b接口还未提供给你,如何处理?
接口测试的垃圾数据如何清理?
你做接口自动化,项目用的是什么数据库,用什么来操作的这个数据库
你做接口自动化时怎么做的数据验证
如何提升测试套件的执行效率
你用过单元测试框架吗,是什么框架,有哪些常用操作?
说说你对接口的理解
做过接口测试吗,有哪些熟悉的工具。
接口常见的请求方法有哪些?
请简单说一说get、post这两种请求方法的区别?
在浏览器中输入URL,回车之后发生了什么?
将列表a = ["h","e","l","l","o"]拼接成字符串,请用多种方法实现
存在一个名称为data.log的文件,data.log中的内容是以逗号作为分隔符的,
json和字典的区别?
Json是轻量级的数据交互格式,以key-value的键值对形式来保存数据,结构清晰,可以说是目前互联网项目开发中最常用的一种数据交互格式。
字典,同样是以key-value的键值对来保存数据,是python中的一种数据类型。
你做接口自动化测试时,测试数据放哪里?
对于一些基础配置比如数据库配置可以放到properties文件(yaml文件,没用过就别拓展了)
接口测试需要用到的数据可以放数据库表,也可以放到excel中。
什么是数据驱动?
数据驱动就是通过excel,或者xml,数据库等数据结构来维护测试数据,通过相应的技术去处理,拿到测试数据用于测试,从而实现测试数据与代码的解耦,数据驱动测试的本质是高级的参数化。
excel中如何设计你的用例?
所有的接口信息维护在一个表单
关于接口的用例数据维护在一个表单
接口传参一列来传,通过构造json格式的字符串即可解决传多个参数的问题,同时提升了用例的可维护性
excel中的数据怎么拿出来?
通过第三方库openpyxl来完成,项目只需要引入openpyxl库,通过它提供的api即可完成对于excel的操作,甚至于我们自己也可以做一些二次封装,使得操作更方便。一行数据就是一个用例。
如果有些接口做了鉴权(需要鉴定权限),怎么实现这些接口的自动化测试?
首先需要明确接口是通过什么机制来实现的鉴权
1) 如果是通过会话id(JSESSIONID)来实现鉴权的,那么先调用完登录接口–》拿到它返回的这个数据–》存储起来–》后面再调用其他接口的时候直接带上这个数据过去就可以了。
2) 如果是通过token来实现鉴权的,那么同样只需要在调用完登录接口–》拿到它返回的这个数据–》存储起来,后面操作同上。先回答上面的一个基本实现步骤,然后再补充以下一些实现细节:
a. 怎么取到这个JSESSIONID或者token这个信息怎么取首先得明白它是怎么返回来的,可能为以下两种方式:
登录接口的响应头
登录接口的响应报文需要找开发确认,不同方式不同取法。
b. 怎么存储这个JSESSIONID或者token
文件中(excel、properties文件都可以)
数据库
代码里面自己定义的公共静态变量,作为一个共享的数据
c. 请求其他需要鉴权的接口时,怎么带过去这个数据先找开发人员确认,再调用需要鉴权的这些接口怎么携带这个鉴权的信息(票)。一般不外乎这么几种:
拼接在url上传过去用于服务器验证
设置到请求体中
做了一个Python的小项目。利用了一点python的可视化技巧,做出烟花绽放的效果,文章的灵感来自网络上一位大神。
一.编译环境
Pycharm
二.模块
1.tkinter:这个小项目的主角,是一个python图形模块。且Python3已经自带了该模块,不用另外安装。它有点像java中的swing图形模块(由众多组件集成,组件通过创建实例添加,组件通过坐标定位在窗口上)。
2.PIL:Python Imaging Library,是Python平台的图像处理标准模块。在Python3也是自带的,在这个项目中用于背景图片的导入。
3.time:相信这个模块大家都不会陌生,导入它用来控制烟花的绽放,坠落及消失时间。
4.random:随机数模块,用于生成烟花随机坐标点,随机绽放速度,随机消失时间。
5.math:这个模块大家应该也很熟悉了,导入它的目的是使烟花绽放的粒子以一定角度散开。
三.效果
项目最终实现的效果就跟上面一样了。
四.代码
以下是我学习(copy)了那位大神的代码,再添加了一些浅显的注解。
import tkinter as tk
from PIL import Image,ImageTk
from time import time,sleep
from random import choice,uniform,randint
from math import sin,cos,radians
#重力变量
GRAVITY=0.5
#listof colors,can choose randomly or use as queue(FIFO
colors=['red','blue','yellow','white','green','orange','purple','seagreen','indigo','cornflowerblue']
'''
create a class for particles粒子
particles are emitted almost randomly on the sky,
forming around(组成一个圈) of circle(a star)before falling and getting removed from canvas
Unity Arduino完美协作工具之Uduino 前言环境搭建Unity插件导入部分Arduino代码上传部分Unity场景搭建部分硬件场景部分 控制代码使用效果注意事项 前言 盆友搞了个Uduino插件,正好手边有Unity和Arduino,用按钮和灯泡实现Unity控制Arduino与Arduino控制Unity。
感谢Arduino跟Unity通讯,我的按钮的标准写法
环境搭建 对如何导入插件有疑问的话,建议查看官方视频教程
视频教程: Connect Arduino to Unity in less than 1 minute - Uduino
Unity插件导入部分 将插件导入Unity
Arduino代码上传部分 将Uduino代码上传至Arduino
Unity场景搭建部分 一个Cube(添加刚体组件)与一个Plane
硬件场景部分 灯泡链接GND和11管脚
按键连接GND和2管脚
控制代码 using System; using System.Collections; using System.Collections.Generic; using Uduino; using UnityEngine; public class UduinoTest : MonoBehaviour { /// <summary> /// 小灯管脚 /// </summary> int pin11; /// <summary> /// 按钮管脚 /// </summary> int pin2; /// <summary> /// Arduino设备 /// </summary> UduinoDevice arduinoDevice; public GameObject myCube; // Start is called before the first frame update void Start() { //当连接板子时触发 UduinoManager.
# 在对集合做运算时,不会影响原来的集合,而是返回一个运算结果
# 创建两个集合
s = {1,2,3,4,5}
s2 = {3,4,5,6,7}
# & 交集运算
result = s & s2 # {3, 4, 5}
# | 并集运算
result = s | s2 # {1,2,3,4,5,6,7}
# - 差集
result = s - s2 # {1, 2}
# ^ 异或集 获取只在一个集合中出现的元素
result = s ^ s2 # {1, 2, 6, 7}
# <= 检查一个集合是否是另一个集合的子集
# 如果a集合中的元素全部都在b集合中出现,那么a集合就是b集合的子集,b集合是a集合超集
a = {1,2,3}
b = {1,2,3,4,5}
result = a <= b # True
之前在通过Filezilla往虚拟机或者服务器上传送文件的时候都是十分顺利的,不过最近老是遇到“错误:Network error: Connection refused”,如下图所示。
此外还有“错误: 认证失败。”的错误,如下图所示,从而导致“错误:严重错误:无法连接到服务器”现象的发生。
其实这两个错误并不是同一个原因,所以需要对症下药,否则用药是不会起到效果的。
针对“错误: Network error: Connection refused”的问题,一般是因为Ubuntu刚刚安装好系统,系统中缺乏openssh-server这个包,只需要在Ubuntu中输入安装命令:sudoapt-get install openssh-server,便可以安装了,如下图所示。
待远程连接安装包安装好之后,再次尝试远程连接,确保用户名和密码是正确的,之后便可以连接上了,如下图所示。
针对“错误: 认证失败。”的错误通常是你的用户名或者密码不正确,远程连接是没有问题的,此时如果确认登录密码没有错误的话,很可能是你自己的用户名出错了。
一般的,我们在安装Ubuntu系统的时候,通常会设置用户名为root,但是也有的时候我们会自定义的去设置用户名,如小编的虚拟机名字就是dcpeng,如果选择root用户登录的话,肯定就会出现“错误:认证失败。”的问题,如下图所示。
解决方法也很简单,将用户名改为自己设定的用户名即可,本例中是dcpeng,设置好之后,再次尝试连接,便可以顺利的连接上了,如下图所示。
本文主要是给Linux系统初学者容易遇到的远程登录问题做个简单的总结,希望后来者遇到相对应的问题可以顺利解决,对症下药,而不是选择重新卸载虚拟机,再重新安装系统,这样就事倍功半啦~~
日后小伙伴们可能会通过Filezilla、Putty、Xftp、SecureCRT等远程连接工具遇到类似的问题时,都可以借鉴该方法,举一反三。
想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/ 想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/
importurllib.requestimporturllib.parse
url="http://www.shuquge.com/txt/152/index.html"headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko',
}
with open('perfect_world.html','w',encoding='utf-8') as fp:
fp.write(res.read().decode())
在执行上面的代码过程中,遇到问题:'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte.
分析原因:
分析过程如下:
①:在上面代码中,headers请求头中,并不包括:Accept-encoding请求头,请求的响应内容理应是未经压缩的原生数据。通过fiddler抓包查看request头部信息。
抓包信息如下
GET http://www.shuquge.com/txt/152/index.html HTTP/1.1Accept-Encoding: identity
Host: www.shuquge.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko
Connection: close
从上面的请求头中我们看出Accept-Encoding:identify。在http协议中,Accept-Encoding:identify表示请求的响应数据是未压缩的。【如果请求头中没有"Accept-encoding"的头部信息,那么默认值为:Accept-Encoding:identify】排除request请求有误的原因。
②:分析response的响应内容。在fiddler抓包工具中,获取到了该request的响应。
由此找到了原因:响应数据是经过压缩之后的,由此造成了编码错误。压缩格式是Gzip格式,我们可以通过相应的算法进行解压。
然后问题又来了,为什么客户端请求的数据明明是未压缩的内容,而响应的数据是压缩过后的呢???
有些服务器在实现http协议时可能存在bug,不支持identify或者请求头中并没有发送Accept-Encoding,那么服务器倾向于使用http1.0中的"gzip"and"compress",
服务器可能会按照客户端类型发送更合适的encoding类型。
在我们的爬虫程序中,请求中并没有Accept-Encoding,但是在请求头中我们表明了自身是:Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko类型的客户端浏览器,所以服务器给我们发送的是gzip格式的数据,在上面的python程序中,并没有涉及到相关的解压操作,导致数据编码操作出错。
前端之路-用vscode写第一个html页面 下载软件:https://code.visualstudio.com/ 进入该网站,下载即可 安装插件
点击拓展按钮,搜索html,下载相关插件
搜索open in browser,安装一下,这样你的网页就可以在浏览器中显示了
自己在电脑里创建一个文件夹,这就是你的项目了,在vscode中打开。比较麻烦,但是vscode中没办法直接创建项目。
我的文件夹起名为FirstProject,在你的文件夹下新建文件
给你的文件起名,注意,要加后缀.html
右侧下方有一个语言模式,点一下。
在弹出来的框里写html,就配置好语言了
在页面里输入一个感叹号,然后按回车,会自动帮你补全
自己输入你想输入的内容,然后 Ctrl +S保存,这步操作一定要做,不然就是一片空白,保存完之后,按ALT+B,你的网页就出现了在浏览器中了
今天介绍的呢,是大名鼎鼎的哨兵数据,赶紧拿出你的小本本记好哦~
我们今天的话题,先从这位说起。
看了图片你不一定熟悉,但是如果提到他的名字-尼古拉·哥白尼,相信你一定有所耳闻。这位文艺复兴时期波兰伟大的天文学家,提出了日心说,更正了人们的宇宙观,他用毕生的精力去研究天文学,他的伟大著作《天体运行论》,为后世打开了开启探索宇宙世界的大门。
时间的车轮缓缓前行,来到了2012年。
哥白尼计划
2012年12月11日,欧委会副主席兼企业与工业委员塔亚尼在欧盟竞争理事会会议上宣布:“欧洲的全球环境与安全监测”计划更名为“哥白尼”计划。
下面是官方对于该计划的介绍:
该计划主要目标是通过对欧洲及非欧洲国家(第三方)现有和未来发射的卫星数据及现场观测数据进行协调管理和集成,实现环境与安全的实时动态监测,为决策者提供数据,以帮助他们制定环境法案,或是对诸如自然灾害和人道主义危机等紧急状况作出反应,保证欧洲的可持续发展和提升国际竞争力。
通俗一点解释就是:发射很多很多对地观测卫星组,通过他们来时刻监视地球的环境状态,提供全球范围的卫星遥感数据,用于监测海洋、陆地、污染、水质、森林、空气、全球变化、土地利用与土地覆盖状况及其变化等,应对污染和石油泄漏、洪水和森林火灾危机、地陷和山崩危机等突发事件。
那么这些卫星组的名字叫做什么呢?
当当当当~就是我们今天要介绍的主角--哨兵。他们不同的组以序数区别,而对于双星则以A、B等区分。
哨兵 自2014年发射第一颗哨兵-1A以来,该计划预计在2030年将有20余颗卫星在轨运行提供数据服务。哨兵家族目前已发射或在研的卫星包括有哨兵-1、哨兵-2、哨兵-3、哨兵-5p和哨兵-6卫星。哨兵-4和哨兵-5将载荷设备搭载在EUMTETSAT气象卫星上。
哨兵系列是目前最强大的免费遥感数据,强大在哪里?空间分辨率高,光谱质量好,种类全。
下面我们来挨个认识一下他们:
哨兵1 由哨兵-1A和哨兵-1B两颗处于同一轨道平面的极轨卫星组成,分别于2014年4月3日和2016年4月25日成功发射。卫星搭载C波段合成孔径雷达,具有4种成像模式,可为陆地和海洋服务提供全天时、全天候的雷达图像,提供一系列运营服务,包括北极海冰,日常海冰测绘,海洋环境监视监测科研,监测地面运动风险,森林制图,水和土壤管理和测绘,以支持人道主义援助和危机情况。
2015-17的Sentinel-1数据
哨兵2 包括两颗卫星极地轨道相位成180°的多光谱高分辨率光学卫星组成,即哨兵-2A、哨兵-2B,两颗卫星分别于2015年6月22日和2017年3月7日成功发射,用于陆地监测以提供例如植被、土壤和水覆盖、内陆航道和海岸区域的图像,以及发布应急服务信息。
2015.12-2016.12 Sentinel-2A影像 土地覆盖类型
哨兵3 卫星搭载多个有效载荷,包括海洋和陆地色彩仪器,海洋和陆地表面温度辐射计、SAR雷达高度计、微波辐射计和精确定轨仪器等,主要目标是高精度和高可靠性地测量海面地形,海洋和陆地表面温度以及海洋和陆地表面颜色,以支持海洋预报系统,环境监测和气候监测。哨兵-3A卫星已于2016年2月16日成功发射,哨兵-3B计划于2018年4月发射。
Sentinel-3A 监测地表温度
哨兵4 主要致力于对空气质量痕量气体和气溶胶等监测。其有效载荷紫外-可见光-近红外光谱仪和热红外探测器将搭载于第三代静止轨道气象卫星(MTG-S)上,通过红外探测仪将与紫外探测仪协同工作,提供对臭氧,一氧化碳,二氧化硫和其他痕量气体综合观测能力,以支持空气质量、污染和气候监测等。
哨兵5P(先导) 该卫星于2017年10月13日成功发射,其使用有效载荷对流层臭氧监测仪主要用于监测大气污染情况,以跟踪二氧化氮、臭氧、甲醛、二氧化硫、甲烷、一氧化碳等气体的浓度。每次通过,卫星可以进行长达2600公里的扫描。这些信息将用于制定空气质量预报,并帮助指导其他相关决定。
欧洲NO2浓度 (Sentinel-5P)
哨兵5 主要任务致力于大气成分监测,其有效载荷紫外-可见光-近红外-短波红外光谱仪具有7个不同的光谱波段,将装载在第二代气象卫星(Metop-SG)上。卫星计划2021年发射,它将提供大气关键成分如臭氧、二氧化氮、二氧化硫、一氧化碳、甲烷、甲醛和气溶胶性质的准确测量数据。
哨兵6 卫星为大倾角的非太阳同步卫星,携带雷达高度计等有效载荷,用于业务化海洋学研究。任务目标是使用两个连续的相同卫星在2020-2030年进行高精度的全球海平面高度测量。
海洋测高卫星-平均海平面上升 (Sentinel-6 2020年)
是不是又有点记不住的感觉?别急,课代表马上就来!
发射时间表:
▼
留个彩蛋,既然前文提到了哨兵系列是目前最强大的免费遥感数据,那么,从哪里下载?怎样下载?预知后事如何,请看下集~
之前的数据介绍请戳:
MODIS的介绍来啦!
Landsat介绍来啦
高分系列的介绍来啦!
点个赞,证明你还爱我
WPS Excel 模板设置与生成 背景 根据给定的Excel生成其他excel。比如sheet1是个总表,sheet2 sheet3…是根据sheet1每行数据填充的同模板的分表。
想做完sheet2的数据关联后,快捷的制作sheet3…
核心知识点 LOOKUP()函数的应用:LOOKUP(lookup_value,lookup_vector,result_vector)
lookup_value:为函数 LOOKUP 在第一个向量中所要查找的数值。lookup_value 可以为数字、文本、逻辑值或包含数值的名称或引用。eg:1或A2等等lookup_vector:为只包含一行或一列的区域。lookup_vector 的数值可以为文本、数字或逻辑值。eg:B2:B10,B列的第2行至第10行为查找值(lookup_value)检索范围result_vector: 只包含一行或一列的区域,其大小必须与 lookup_vector 相同。eg:C2:C10,C列的第2行至第10行为返回值检索范围 Lookup函数基本使用 将示例复制到空白工作表中,可能会更易于理解该示例。照着Lookup函数的内容敲一遍,WPS会高亮显示Lookup()函数中每个参数的实际效果:
Excel 模板设置与生成 sheet1是源数据表,里面存储个人的基础信息,sheet2、sheet3…都是其他各种版式的表(如sheet2是工资单表,sheet3是简历表…)
为了便于识别,我对每个sheet都进行了命名,先看源数据表,命名为总表:
设置模板 简要模板表中数据信息全来自总表,都是通过一个关键字段值进行关联(如图中绿色背景的工号,保证唯一性即可),不用复制总表得到,可以参考以下图表及公式:
公式解析:
E2: 表示要查找的值总表!:总表对应sheet1的名字,这个可以自定义;! 这个感叹号是不能少的,表示要从总表读取数据A2:A7: 表示查找值的 行检索范围,从A列的第2行至第7行B2:B2: 表示返回值的 行检索范围,从B列的第2行至第7行 根据模板快速生成sheet 鼠标浮动到 简要模板 字样上右键->选移动或复制工作表在弹出框的下列选定工作表之前:中,选择(移至最后),这一步主要是选择生成的sheet表位置,一般默认放最后即可勾选建立副本,点确定生成模板后,修改工号,其他字段的内容就会自动修改,图示如下:
先说总结:
CPU :i9 9900ks处理器
内存:64GB
硬盘:1TB固态
显卡:1660ti
局域网:至少千兆
======================================
公司当时买过天梯榜单第一名的AMD,然而在跑图的过程中,有相当一部分时间是单核运行,所以CPU主频率高,也是个非常关键的点。
还有买过比1660ti更贵的显卡,网上也有人试过2080ti,然而不知道是CC和Pix4d的问题还是怎么滴,反正用时差不多,而且跑图的过程中,显卡并不是全程都在使用的,所以死命买贵的,也不会增加太多的收益。
也堆了超过100GB的内存,然而这100GB的内存没有一次是用完了的,因为如果图太大了,我们就会切块来跑,将运算压力分出去,从而加快时间。
当然啦还有一种情况就是使用Pix4d跑正射的时候,这100GB也用不上,因为Pix4D的程序设计有问题,点云太多,会超过Int数据类型的限制,从而死机。
所以会降低点数来跑,所以再多的内存都是鸡肋。
这个1TB的固态,是很有必要的,当然是在CC群集的主服务上。
如果你想加快运算进度,办法只有增加主机,或者在晚上将同事的电脑利用上才可以,单单一台高价主机,不会带来太大的收益。
主要内容
视频内容B站:
DEA模型与相关软件培训全套视频教程 这篇讲成本效率 cost
收入效率 revenue
利润效率 profit
当然软件还有更进一步的 new cost ,new-revenue,new-profit 应该是某种程度上对原来模型的改进。这里先不管,了解一下大概的原理。模型的构建。
以及应用的场合。
成本效率
配置效率 * 技术效率 = 成本效率 配置效率 = 成本效率 / 技术效率
技术效率 = 纯技术效率 * 规模效率
OE = AE * TE = AE *PTE * SE
成本效率 = 配置效率 * 纯技术效率 * 规模效率
举例 :数据集是一个投入后面跟上一个成本,主要是括号里要写对,同时得是英文状态下的() 。
成本效率模型,想一想最优当然是成本最低。。。
收入效率
P是price 每个产出对应的
利润效率
讲点多余的话:
某人,你都研究生了还指望老师教你啊,你自己去学,不懂的去问。
ok,现在很清醒。
DEAsolver 这里的模型,还是有很多可以改进的地方。
或者说,比如SBM和非自由处置变量结合起来,啥啥啥结合起来。
那你首先要了解基本的经典模型,需要运筹学基础。什么是对偶模型,怎么解释系数,什么是影子价格,如何解释的?
有时候,就需要自己会编程。
lingo里如果不行,就用MATLAB ,畏难就永远学不会。
想想当初重新学高数,学现代,其实也挺难的。
所以,一步步的去学,也是能够学会的吧。
当然,还是得有一个目标(方向),沿着这个目标,我去套用哪些复杂的模型,模型优化好了之后,还要能够跑数据,能够做对比,去解释结果。
目录结构
src/main/java:主程序入口 Application,可以通过直接运行该类来 启动 Spring Boot应用
src/main/resources:配置目录,该目录用来存放应用的一些配置信息,比如应用名、服务端口、数据库配置等。由于我们应用了Web模块,因此产生了 static目录与templates目录,前者用于存放静态资源,如图片、CSS、JavaScript等;后者用于存放Web页面的模板文件。
src/test:单元测试目录,生成的 ApplicationTests 通过 JUnit4实现,可以直接用运行 Spring Boot应用的测试。
application.properties/application.yml 用于存放程序的各种依赖模块的配置信息,比如 服务端口,数据库连接配置等。。。
--------------------- 1)代码层的结构
根目录:com.springboot
1.工程启动类(ApplicationServer.java)置于com.springboot.build包下
2.实体类(domain)置于com.springboot.domain
3.数据访问层(Dao)置于com.springboot.repository
4.数据服务层(Service)置于com,springboot.service,数据服务的实现接口(serviceImpl)至于com.springboot.service.impl
5.前端控制器(Controller)置于com.springboot.controller
6.工具类(utils)置于com.springboot.utils
7.常量接口类(constant)置于com.springboot.constant
8.配置信息类(config)置于com.springboot.config
9.数据传输类(vo)置于com.springboot.vo
(2)资源文件的结构
根目录:src/main/resources
1.配置文件(.properties/.json等)置于config文件夹下
2.国际化(i18n))置于i18n文件夹下
3.spring.xml置于META-INF/spring文件夹下
4.页面以及js/css/image等置于static文件夹下的各自文件下
https://blog.csdn.net/yunyishang123/article/details/80632644
根目录:src.main.java
1.工程启动类(Application.java):置于com.cy.project包下或者com.cy.project.app包下
2.实体类(domain):置于com.cy.project.domain
3.数据访问层(Dao):置于com.cy.project.repository(dao)
4.数据服务层(Service):置于com.cy.project.service 5.数据服务接口的实现(serviceImpl):同样置于com.cy.project.service或者置于com.cy.project.service.impl
6.前端控制器(Controller):置于com.cy.project.controller
7.工具类(utils):置于com.cy.project.utils
8.常量接口类(constant):置于com.cy.project.constant
9.配置信息类(config):置于com.cy.project.config
资源文件:src.main.resources
1.页面以及js/css/image等置于static文件夹下的各自文件下
2.使用模版相关页面等置于templates文件夹下的各自文件下
--------------------- 命名包名目录的方式 :com.公司名的简写.项目的名字.业务模块名
springboot 提供了一个解决方案吧,可以先不关心如何配置,可以快速的启动开发,进行业务逻辑编写,各种需要的技术,加入 starter 就配置好了,直接使用,可以说追求开箱即用的效果吧
AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。
Node.js http://www.runoob.com/nodejs/node-js-get-post.html
参考 https://blog.csdn.net/linabc123000/article/details/68954236 eclipse下创建第一个spring boot项目
参考 https://mp.weixin.qq.com/s/HTUNwizViOqNc1YInO7otQ Spring Boot 配置文件中的花样,看这一篇足矣!
{"optioninfo":{"dynamic":"true","static":"true"},"simplifiedDisplay":"detailCard","newCard":[{"ifIcon":"icon","icon":"censor","iconImg":"","contentLink":"https://ai.aliyun.com/vi/censor","title":"视频审核","des":"视频智能审核服务(Video Censor)基于海量标注数据和深度学习算法实现","btn1":"立即开通","link1":"https://ai.aliyun.com/vi/censor","btn2":"购买资源包","link2":"https://common-buy.aliyun.com/?spm=5176.12156423.1243038.2.1c4e21472LF901&commodityCode=vod_censor_bag#/buy","btn3":"产品价格","link3":"https://www.aliyun.com/price/product?spm=5176.12156423.1243038.3.1c4e21472LF901#/vod/detail","infoGroup":[{"infoName":"主要功能","infoContent":{"firstContentName":"色情识别","firstContentLink":"https://ai.aliyun.com/vi/censor?spm=5176.10695662.h2v3icoap.94.1edb7d71Chv8fN","lastContentName":"暴恐涉政识别","lastContentLink":"https://ai.aliyun.com/vi/censor?spm=5176.10695662.h2v3icoap.94.1edb7d71Chv8fN"}},{"infoName":"产品优势","infoContent":{"firstContentName":"大幅降低运营成本","firstContentLink":"https://ai.aliyun.com/vi/censor?spm=5176.10695662.h2v3icoap.94.1edb7d71Chv8fN","lastContentName":"风险覆盖全","lastContentLink":"https://ai.aliyun.com/vi/censor?spm=5176.10695662.h2v3icoap.94.1edb7d71Chv8fN"}}]}],"card":[{"link":"#","icon":"https://img.alicdn.com/tfs/TB1afahQpXXXXaAapXXXXXXXXXX-114-114.png","title":"云服务器ECS","des":"云服务器(Elastic Compute Service,简称 ECS)是一种简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本,使您更专注于核心业务。","btn1":"FPGA云服务器","link1":"#","btn2":"GPU云服务器","link2":"#","tip":"新一代云服务器N5 (Xeon® (Skylake)处理器)上线!立即申请"}],"search":[{"txt":"云数据库","link":"#"}],"infoCard":[{"bannerTitle":"容器服务 ACK","bannerUrl":"https://sucai-material-online.oss-cn-hangzhou.aliyuncs.com/image/hytxyyzq.jpg?Expires=1601273745&OSSAccessKeyId=ZWQG8meWkF3hYIf0&Signature=4DqSTctVr1IizPxE5pyjvd94cGc%3D&x-oss-process=image%2Fresize%2Cw_1072%2Fquality%2CQ_80","bannerContent":"容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的 全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。","liveButtonName":"立即购买","liveButtonLink":"https://www.aliyun.com/product/kubernetes","homePageName":"管理控制台","homePageLink":"https://cs.console.aliyun.com/index2#/k8s/cluster/list","contentTitle":"相关推荐","linkGroup":[{"linkContent":"企业版低至85折","linkTo":"立即抢购","link":"https://common-buy.aliyun.com/?spm=5176.181001.1396228.1.334760dfEMZUnP&commodityCode=acr_ee_public_cn®ionId=cn-beijing#/buy"},{"link":"https://help.aliyun.com/learn/learningpath/cs.html","linkContent":"学习更多容器服务内容","linkTo":"马上进入"},{"link":"https://cloud.video.taobao.com/play/u/2554819776/p/1/e/6/t/1/50197975.mp4","linkContent":"查看关于容器服务视频","linkTo":"立即观看"}]}],"title":{"mainTitle":"资源管理","subtitle":"阿里云资源管理服务包含一系列支持企业IT治理的资源管理产品集合。其中主要产品为资源组和资源目录。资源管理服务支持您按照业务需要搭建适合的资源组织关系,使用目录、资源夹、账号、资源组分层次组织与管理您的全部资源。","linkUrl":"https://www.aliyun.com/product/entconsole","btnText":"查看详情"},"visual":{"topbg":"https://img.alicdn.com/tfs/TB13OJKfkL0gK0jSZFAXXcA9pXa-2880-1080.jpg","icon":"aliyun-icon-play","textColor":"light"},"dataList":[{"summary":"搭建企业资源树","author":"使用资源夹可快速构建5层结构,适配企业资源关系灵活定义","linksUrl":"https://www.aliyun.com/product/entconsole"},{"summary":"邀请外部账号加入","author":"将游离在企业资源目录外的账号邀请进来","linksUrl":"https://www.aliyun.com/product/entconsole"},{"summary":"创建资源容器账号","author":"快速创建资源账号和云账号,作为目录内的资源容器","linksUrl":"https://www.aliyun.com/product/entconsole"},{"author":"为企业设置统一财资管理账号,实现集中付款、查账、开票","summary":"实现企业统一财资","linksUrl":"https://www.aliyun.com/product/entconsole"}],"sceneCard":[{"title":"云计算试飞员老蒋开课啦!第一期:电商网站搭建","des":"这是一段副标介绍,这是一段副标介绍。这是一段副标介绍,这是一段副标介绍。这是一段副标介绍,这是一段副标介绍。这是一段副标介绍,这是一段副标介绍。","btn":"立即观看","link":"#","image":"https://"}],"txt":[{"title":"适用场景","scenariosone":[{"txtone":"小型电商:支持访问50万PV,一段场景方案的介绍。","txttwo":"产品推荐","product":[{"name":"ECS 2核4G 40G数据盘 5M带宽","link":"#"}]}]}]}
{"$env":{"JSON":{}},"$page":{"env":"production"},"$context":{"optioninfo":{"dynamic":"true","static":"true"},"simplifiedDisplay":"detailCard","newCard":[{"ifIcon":"icon","icon":"censor","iconImg":"","contentLink":"https://ai.aliyun.com/vi/censor","title":"视频审核","des":"视频智能审核服务(Video Censor)基于海量标注数据和深度学习算法实现","btn1":"立即开通","link1":"https://ai.aliyun.com/vi/censor","btn2":"购买资源包","link2":"https://common-buy.aliyun.com/?spm=5176.12156423.1243038.2.1c4e21472LF901&commodityCode=vod_censor_bag#/buy","btn3":"产品价格","link3":"https://www.aliyun.com/price/product?spm=5176.12156423.1243038.3.1c4e21472LF901#/vod/detail","infoGroup":[{"infoName":"主要功能","infoContent":{"firstContentName":"色情识别","firstContentLink":"https://ai.aliyun.com/vi/censor?spm=5176.10695662.h2v3icoap.94.1edb7d71Chv8fN","lastContentName":"暴恐涉政识别","lastContentLink":"https://ai.aliyun.com/vi/censor?spm=5176.10695662.h2v3icoap.94.1edb7d71Chv8fN"}},{"infoName":"产品优势","infoContent":{"firstContentName":"大幅降低运营成本","firstContentLink":"https://ai.aliyun.com/vi/censor?spm=5176.10695662.h2v3icoap.94.1edb7d71Chv8fN","lastContentName":"风险覆盖全","lastContentLink":"https://ai.aliyun.com/vi/censor?spm=5176.10695662.h2v3icoap.94.1edb7d71Chv8fN"}}]}],"card":[{"link":"#","icon":"https://img.alicdn.com/tfs/TB1afahQpXXXXaAapXXXXXXXXXX-114-114.png","title":"云服务器ECS","des":"云服务器(Elastic Compute Service,简称 ECS)是一种简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本,使您更专注于核心业务。","btn1":"FPGA云服务器","link1":"#","btn2":"GPU云服务器","link2":"#","tip":"新一代云服务器N5 (Xeon® (Skylake)处理器)上线!立即申请"}],"search":[{"txt":"云数据库","link":"#"}],"infoCard":[{"bannerTitle":"容器服务 ACK","bannerUrl":"https://sucai-material-online.oss-cn-hangzhou.aliyuncs.com/image/hytxyyzq.jpg?Expires=1601273745&OSSAccessKeyId=ZWQG8meWkF3hYIf0&Signature=4DqSTctVr1IizPxE5pyjvd94cGc%3D&x-oss-process=image%2Fresize%2Cw_1072%2Fquality%2CQ_80","bannerContent":"容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的 全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。","liveButtonName":"立即购买","liveButtonLink":"https://www.aliyun.com/product/kubernetes","homePageName":"管理控制台","homePageLink":"https://cs.console.aliyun.com/index2#/k8s/cluster/list","contentTitle":"相关推荐","linkGroup":[{"linkContent":"企业版低至85折","linkTo":"立即抢购","link":"https://common-buy.aliyun.com/?spm=5176.181001.1396228.1.334760dfEMZUnP&commodityCode=acr_ee_public_cn®ionId=cn-beijing#/buy"},{"link":"https://help.aliyun.com/learn/learningpath/cs.html","linkContent":"学习更多容器服务内容","linkTo":"马上进入"},{"link":"https://cloud.video.taobao.com/play/u/2554819776/p/1/e/6/t/1/50197975.mp4","linkContent":"查看关于容器服务视频","linkTo":"立即观看"}]}],"title":{"mainTitle":"资源管理","subtitle":"阿里云资源管理服务包含一系列支持企业IT治理的资源管理产品集合。其中主要产品为资源组和资源目录。资源管理服务支持您按照业务需要搭建适合的资源组织关系,使用目录、资源夹、账号、资源组分层次组织与管理您的全部资源。","linkUrl":"https://www.aliyun.com/product/entconsole","btnText":"查看详情"},"visual":{"topbg":"https://img.alicdn.com/tfs/TB13OJKfkL0gK0jSZFAXXcA9pXa-2880-1080.jpg","icon":"aliyun-icon-play","textColor":"light"},"dataList":[{"summary":"搭建企业资源树","author":"使用资源夹可快速构建5层结构,适配企业资源关系灵活定义","linksUrl":"https://www.aliyun.com/product/entconsole"},{"summary":"邀请外部账号加入","author":"将游离在企业资源目录外的账号邀请进来","linksUrl":"https://www.aliyun.com/product/entconsole"},{"summary":"创建资源容器账号","author":"快速创建资源账号和云账号,作为目录内的资源容器","linksUrl":"https://www.aliyun.com/product/entconsole"},{"author":"为企业设置统一财资管理账号,实现集中付款、查账、开票","summary":"实现企业统一财资","linksUrl":"https://www.aliyun.com/product/entconsole"}],"sceneCard":[{"title":"云计算试飞员老蒋开课啦!第一期:电商网站搭建","des":"这是一段副标介绍,这是一段副标介绍。这是一段副标介绍,这是一段副标介绍。这是一段副标介绍,这是一段副标介绍。这是一段副标介绍,这是一段副标介绍。","btn":"立即观看","link":"#","image":"https://"}],"txt":[{"title":"适用场景","scenariosone":[{"txtone":"小型电商:支持访问50万PV,一段场景方案的介绍。","txttwo":"产品推荐","product":[{"name":"ECS 2核4G 40G数据盘 5M带宽","link":"#"}]}]}]}}
您应该destroy()用来关闭tkinter窗口。
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
说明:
root.quit()
上面的行只是绕过了root.mainloop()ie root.mainloop(),如果quit()执行了命令,ie 仍将在后台运行。
root.destroy()
当destroy()命令消失时,root.mainloop()即root.mainloop()停止。
因此,您只想退出该程序,就应该使用root.destroy()它,因为它会停止mainloop()。
但是如果你想运行无限循环并且你不想破坏你的Tk窗口并且想root.mainloop()在行之后执行一些代码,那么你应该使用root.quit()。例如:
from Tkinter import *
def quit():
global root
root.quit()
root = Tk()
while True:
Button(root, text="Quit", command=quit).pack()
root.mainloop()
#do something
目录: 1.分类问题(input二维)2.图像分割问题(input多维) 1.分类问题(input二维) 分类问题输入是每一个batch的各个类别预测概率。input, target, output形状如下:
input:(batch_size, class_num)
target:(batch_size)
output:(batch_size)
示例:
>>> loss = nn.CrossEntropyLoss() >>> input = torch.randn(3, 5, requires_grad=True) >>> target = torch.empty(3, dtype=torch.long).random_(5) >>> output = loss(input, target) >>> output.backward() 2.图像分割问题(input多维) 图像分割等问题输入是一张图像。input, target, output形状如下:
input:(batch_size, C, W, H)
target:(batch_size, W, H)
output:(batch_size, W, H)
示例:
>>> loss = nn.CrossEntropyLoss() >>> input = torch.randn(3, 5, 6, 6, requires_grad=True) >>> target = torch.empty(3, 6, 6, dtype=torch.long).random_(2) >>> output = loss(input, target) >>> output.
上一篇文章写用brew来安装MacTeX:[Latex] 在Mac上使用Brew安装LaTeX(MacTex),但经过一顿操作发现,如果需要GUI界面的话,还是直接用pkg安装吧。 MacTeX官网地址:https://tug.org/mactex/(强烈建议用Safari下载)
安装包大概是4G,安装在磁盘还会花掉6G的空间。这个按照正常的流程安装就可以了。
安装完之后可以在Application看到TeX文件夹 我现在用的应用搭配是Sublime + MacTeX + Skim,所以如果你是刚开始的话,你还需要下Sublime(文本编辑器) 和 Skim(PDF阅读器),然后修改一些设置使得在Sublime上编辑LaTeX可以马上编译并在Skim上看到效果,具体可以看以下这篇文章:
如何用 macOS 优雅的敲 LaTeXwww.jianshu.com 我这边配置好之后的使用情况是:
左边是Sublime,右边是Skim 中文的设置
其实如果写纯英文的话,也不用太麻烦自己配置这么多,直接用sharelatex就可以了,不过在线的问题是貌似不太可能解决一下中文的问题。
先提一下Mac OS的字体库:
应用程序Font,或者繁体叫字体簿 上面就是Mac有哪些字体了,而以前每个字体都有个postscript的名字,现在的话就只有你看到的那个名称,例如:「行楷-繁」,这个字体我们会在写LaTeX时候用到。
写LaTeX
终于到了写LaTeX的时候,我先放一段测试的文本:
documentclass{ctexart} usepackage{xeCJK} setCJKmainfont{行楷-繁} begin{document} 您好,LaTeX! ctex 宏包提供了三个字体选项: nofonts、adobefonts 和 winfonts,默认使用的是 winfonts。如果在 tex 源文件中没有使用其他选项修改字体配置, 则需要操作系统中安装有中文 Windows 操作系统自带的四种 TrueType 字体: 宋体(SimSun)、黑体(SimHei)、仿宋体(FangSong)、楷体(KaiTi)。 其余字体比如隶书(LiShu)、新宋体(NSimSun)、幼圆(YouYuan)、行楷(STXingkai)可以自行安装。 如果使用 adobefonts 选项,则需要操作系统中安装有 Adobe 公司的四款 OpenType 字体:Adobe 宋体、Adobe 黑体、Adobe 仿宋、Adobe 楷体。 此处我们打算使用 nofonts 选项,然后通过 CJK 中文方案将 繁體字走一波 $$ mbox{難度係數} = sqrt{mbox{累積海拔上升} times 2 times mbox{距離}} $$ end{document} 编译以上这段需要留意的是编译器的选择,这里在Sublime界面按command + shift + P可以调出选择的框(这个在前面的教程链接中有明确的介绍):
在《深入理解Kafka:核心设计与实践原理》一书中,介绍了Kafka的整体架构:
Kafka将broker、topic、config等元数据信息存放在zookeeper中(但是随着Kafka的更新,可以看到Kafka想慢慢地“脱离”Zookeeper),详细的结构如下:(基于Kafka2.1.1)
在Kafka源码的core模块下,kafka.zk.ZkData中定义了Kafka在zk中元数据存储的目录及内容:
下面将一一解释。
admin 存放两个Kafka的管理信息:
delete_topics:在低版本的kafka中,用于保存已经标记为删除的topic名称(只有名称,没有其他数据)reassign_partitions:管理工具发出重新分配Partition请求后,会将相应信息写到/admin/reassign_partitions上 在Kafka1.0之前的版本中,delete.topic.enable属性值默认为false,因此若想删除topic,需要在server.properties配置文件中显式增加delete.topic.enable=true这一项配置。然而,在Kafka1.0中,该配置项默认就是true。另外,在Kafka1.0之前的版本中,如果删除了topic,那么被删除的topic名字会保存到ZooKeeper的/kafka名称/admin/delete_topics节点中。虽然topic被删除了,但与topic相关的消息数据依然还会保留,需要用户手动到相关的数据目录下自行删除,然后这一切在Kafka1.0中都发生了变化。在Kafka1.0中,当topic被删除后,与topic相关的数据也会一并删除,并且不可逆。开发者估计也是考虑到了删除topic没必要这么麻烦,要么不允许删除,要么就一步到位。
[root@XXGL-T-TJSYZ-app-025 bin]# [root@XXGL-T-TJSYZ-app-025 bin]# ./kafka-topics.sh --zookeeper localhost:2181/kafka211 --delete --topic testkafak1 Topic testkafak1 is marked for deletion. Note: This will have no impact if delete.topic.enable is not set to true. [root@XXGL-T-TJSYZ-app-025 bin]# [zk: localhost:2181(CONNECTED) 6] get /kafka211/admin/delete_topics null [zk: localhost:2181(CONNECTED) 7] 可以看到,高版本的kafka,对已经删除的topic,不会再保存到delete_topics目录下。
brokers /kafka211/brokers目录下存放Kafka broker相关的信息:ids、seqid、topics
(kafka211为演示使用的Kafka集群名,也是该集群在zk中的根目录)
/kafka211/brokers/ids
该目录下存放的是Kafka集群所有的broker id
[zk: localhost:2181(CONNECTED) 0] [zk: localhost:2181(CONNECTED) 0] ls /kafka211/brokers [ids, seqid, topics] [zk: localhost:2181(CONNECTED) 1] [zk: localhost:2181(CONNECTED) 1] ls /kafka211/brokers/ids [1, 2, 3] [zk: localhost:2181(CONNECTED) 2] get /kafka211/brokers/ids/1 {"
I'm trying to parse the result of a HEAD request done using the Python Requests library, but can't seem to access the response content.
According to the docs, I should be able to access the content from requests.Response.text. This works fine for me on GET requests, but returns None on HEAD requests.
GET request (works)
import requests
response = requests.get(url)
content = response.text
content = ...
HEAD request (no content)
7805与78l05区别: 1.管脚不同:管脚相反
2. 78L05是一种固定电压(5V)三端集成稳压器,可适用于很多应用场合。其卓越的内部电流限制和热关断特性使之特别适用于过载的情况,当用于替代传统的齐纳二极管-电阻组的时候,其输出阻抗得到有效的改善,但偏置电流大大减少。
7805三端稳压集成电路,电子产品中,常见的三端稳压集成电路有正电压输出的78 ×× 系列和负电压输出的79××系列。顾名思义,三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。它的样子像是普通的三极管,TO- 220 的标准封装,也有9013样子的TO-92封装。
实验报告书:定正电压输出的78系列、固定负电压输出的79系列、可调三端稳压器X17系列。78系列中输出电压有5伏、6伏、9伏等等,由输出最大电流分类有1.5A型号的78XX(XX为其输出电压)、0.5A型号的78MXX、0.1A型号的78LXX三档。79系列中输出电压有-5伏、-6伏、-9伏等等,同样由输出最大电流分为三档,标识方法一样。可调式三端稳压器由工作环境温度要求不同分为三种型号,能工作在-55到150摄氏度的为117,能工作在-25到150摄氏度的为217,能工作在0到150摄氏度的为317,同样根据输出最大电流不同分为X17、X17M、X17L三档。其输入输出电压差要求在3伏以上
值得注意的是:7805为稳定输出为+5v电压
7905为稳定输出为-5v电压
7808为稳定输出为+8v电压
7908为稳定输出为-8v电压
cap、cap-pol、cap-elec区别 1.cap是普通的电容
2.cap-pol是有极性电容,直线为正极,弧线为负极
3.cap-elec是电解电容,空心为正极,填充为负极
ArrayList和Linkedlist的区别是什么? ●数据结构实现:Araylist是动态数组的数据结构实现而Linkedist是
双向链表的数据结构实现。
●随机访问效率: ArrayList比LinkedList 在随机访问的时候效率要高,
因为Linkedlist 是线性的数据存储方式,所以需要移动指针从前往后依
次查找。
●增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比
ArrayLlist效率要高,因为ArrayList 增删操作要影响数组内的其他数据
的下标。
综合来说,在需要频繁读取集合中的元素时,更推荐使用ArrayList ,而在插入
和删除操作较多时,更推荐使用LinkedList。
仓内拣货优化问题 问题一 下面是计算 3000 × 3000 3000\times 3000 3000×3000矩阵(货格与货格距离)的 P y t h o n Python Python代码
输出为3000个 1 × 3000 1\times3000 1×3000列表,需自己存入 E x c e l 表 格 Excel表格 Excel表格
import pandas as pd # 导入数据分析库Pandas import xlsxwriter workbook = xlsxwriter.Workbook('sheet.xlsx') worksheet = workbook.add_worksheet(u'sheet1') inputfile = '附件1:仓库数据.xlsx' # 销量数据路径 data = pd.read_excel(inputfile, sheet_name='货格') # 读入数据 a = data[u'坐标 x,毫米'] b = data[u'坐标 y,毫米'] x_store = [] # 货格横坐标 y_store = [] # 货格纵坐标 # 将横坐标导入x(1:3000)数组中 将纵坐标导入y(1:3000)数组中 for i in range(len(a)): x_store.
点击此处添加图片说明文字
喷墨打印机使用时间长了,很多人会发现打印的文字或图像出现颜色失真、字迹模糊等情况,甚至打印不了的情况,这往往是因为打印机喷头被堵住了,因此需要对它进行检修。下面是检修的几种方法。
01
用驱动工具清洗喷头
如果打印机喷头堵塞不是很严重,能够进行正常打印,只是打印出来的文档比以前的要逊色一些(比如部分文字的字迹不清或照片局部颜色偏色等),如果不想太麻烦,可以使用打印机驱动程序自带的应用工具来清洗打印机喷头,一般而言,大部分喷墨打印机都会附带墨盒清洗工具。
使用打印机驱动程序的应用工具清洗喷头,其优点是操作简便、快捷,缺点是清洗效果不太理想。最后如果你觉得还是不满意,可以在“打印工具箱”中点“校准打印墨盒”按钮,再在出现的窗口中点“校准”按钮,然后开始对打印墨盒进行校准,校准完毕后,你会发现打印质量会进一步提升。
点击此处添加图片说明文字
还有就是可以按下面方法进行检查:
第一步:查看墨水,判断墨水是否有用完的可能。
第二步:用打印机的喷嘴检查程序,看打印结果是否严重断线,如断,用机内打印清洗,多打几遍,如无效果再进行以下步骤。
第三步:拔下打印机电源插头,翻开EPSON480打印机的盖板(图II)。
第四步:接上电源,同时眼睛注视移出的墨盒,当墨盒移出最大极限时拔下电源,你会发现墨盒停在中间,还没完,再接上电源,墨盒又向前移动了,当到极限时断电(这是为了有足够的空间向里面注酒精)。向打印机内部看去,在打印机墨盒出来的原位置有一块小海绵(用于擦去喷嘴上的墨迹)。用注射器吸一点酒精把海棉完全浸湿。注意不要让酒精溢
出。
第五步:通电,墨盒会自动的复位。等上一天之后,再次开机一切OK。
02
手动清洗打印喷头
打印输出时会有断线、白道、偏色等问题,但是墨盒中仍有墨水,这种喷头堵塞的情况需要手动来进行清洗。首先将打印机中的墨盒拆下来,会发现墨盒底部有类似集成电路的部分,这就是喷头所在的位置,准备一些在 50℃~60℃的温水,将温水倒入一个洁净透明的杯子中,然后将墨盒底部的喷嘴浸入水中浸泡10~30分钟。 点击此处添加图片说明文字
需要注意的是,只要将喷嘴的部分浸入水中即可,不要将整个墨盒放入水中。浸泡 10~30分钟后将墨盒从水中取出,适度用力甩干,喷嘴部分会甩出一些墨水,用餐巾纸将墨盒喷嘴处甩出的墨水吸干,将清洗后的墨盒安装回去,墨盒清洁过程就完成了,最后使用打印机打印一张脱机测试页,对比一下清洁后的效果。
有时打印机长期不使用,一些用户将墨盒直接外置,这样很容易导致喷头堵塞,而且内部的墨水也干了,此时无法进行打印,那么需要进行“特殊”处理,准备浓度95%的酒精、一个干净的杯子、一支一次性注射器。将一次性输液器的塑料管与打印头供墨口连接,将打印头头部置于浓度95%的酒精中,通过打印头将酒精吸入注射器针管中,吸入数次后可以清洗堵塞较严重的打印头。
注意事项:
喷嘴内和洗车槽事先用清水洗干净,只是为下一步使用清通液时,节约清通液,并使清液浸泡喷嘴发挥最佳效果,另外预先用灌了清水的针筒在进墨柱上向上抽,预先感知各个喷嘴内堵塞的情况。
完成预先清水清洗后,用针筒将进墨柱抽空(不含清水),为下一步加清通液做好准备
用针筒抽取2ML左右清通液,(6色打印机相应使用量为3ML),在黑色墨柱里慢慢加入0.3至0.4毫升,彩色每个进墨柱里加入0.2至0.3毫升,针筒内余下的0.5至1.0ML全注入在洗车槽内,然后装回墨盒,马上将墨车移到停车位(即洗车槽上,打印机关机时墨车的那个位置)
清洗完后千万不要着急开打印机电源,耐心等8小时以上。8小时以后,或第二天,再开打印机电源。
8小时后开机后,在电脑的打印机属性里-“打印机首选项”-“维护”-“打印头清洗”,用软件清洗一次,仅一次,检查打印头喷嘴,对比在清洗前打印的,仔细对比检查分析喷嘴线条,如果还不理想,再重复一遍清洗,再检查。
1.不是 rpm 软件包 (或者没有manifest) 问题描述: 通过wget下载的rpm安装包。使用rpm命令进行安装时显示如上报错
解决方法: 首先确认wget下载的安装包是否正确。可通过文件大小比较,请勿通过文件名比较。问题原因为wget下载的文件虽然名称正确,但这个文件是有问题的。通过两次下载比较大小发现相差甚远。下载正确的文件之后即可安装
2.cpio: read 失败 - 没有那个文件或目录 错误描述: 解决方法: 确保下载文件正确,且安装包完整(请勿通过名称确认)。或者手动进行安装包上传
State Management in React Apps 背景 React 是一个十分优秀的UI库, 最初的时候, React 只专注于UI层, 对全局状态管理并没有很好的解决方案, 也因此催生出类似Redux 这样优秀的状态管理工库。
随着时间的演变, 又催化了一批新的状态管理工具。
我简单整理了一些目前主流的:
Redux
React Context & useReducer
Mobx
Recoil
react-sweet-state
hox
这几个都是我接触过的,Npm 上的现状和趋势对比:
毫无疑问,React 和 Redux 的组合是目前的主流。
今天5月份, 一个名叫 Recoil.js 的新成员进入了我的视野,带来了一些有趣的模型和概念,今天我们就把它和 Redux 做一个简单的对比, 希望能对大家有所启发。
正文 先看 Redux:
Redux React-Redux 架构图:
这个模型还是比较简单的, 大家也都很熟悉。
先用一个简单的例子,回顾一下整个模型:
actions.js export const UPDATE_LIST_NAME = 'UPDATE_NAME'; reducers.js export const reducer = (state = initialState, action) => { const { listName, tasks } = state; switch (action.
一、Dubbo的动态编译
上一篇提到过@Adaptive注解的作用:被@Adaptive修饰的类实际上是一个装饰类。被@Adaptive修饰的方法则会生成一个动态代理类,而根据模板生成的类则需要通过动态编译由字节流被编译成动态代理类。本文主要讲的就是dubbo的动态编译。 dubbo-spi的扩展装饰类是通过ExtensionLoader.getAdaptiveExtension来获取,内部则进行了动态编译。核心代码如下:
private Class> createAdaptiveExtensionClass() {
//创建动态代理模板 - 即需要编译代理类的内容 String code = createAdaptiveExtensionClassCode(); ClassLoader classLoader = findClassLoader();
//加载SPI中的compiler编译对象 Compiler compiler=
ExtensionLoader.getExtensionLoader(Compiler.class).getAdaptiveExtension();
//进行动态编译 return compiler.compile(code, classLoader);
} 二、compiler
首先compiler是一个装饰类,不会生成动态代理类。因为compiler的实现为:AbstractCompiler和AdaptiveCompiler,而在AdaptiveCompiler中,@Adaptive注解没有修饰在方法中,所以不会生成动态代理对象,不需要进行动态编译。
另外,下图可以看到Compiler默认使用javassist字节码编译方式。
· AdaptiveCompiler.compile
public Class> compile(String code, ClassLoader classLoader) {
Compiler compiler; ExtensionLoader loader = ExtensionLoader.getExtensionLoader(Compiler.class); String name = DEFAULT_COMPILER;
//name如果存在则取compiler
if (name != null && name.length() > 0) {
compiler = loader.getExtension(name); } else {
//name如果不存在则取默认配置compiler,即JavassistCompiler
compiler = loader.getDefaultExtension(); }return compiler.
最近市面上很火的一个行业——数据分析师,作为数据分析师,感觉像是一个很高大上的工作岗位,之前的时候有同学毅然决然的投身其中,这不,这几天闲聊,我就问他你们都干嘛啊,他说:没想到换了工作,SQL还是常用的工具,我就问他为什么?他说常规的数据分析,有什么比数据库好用,大数据量的数据分析,像hive、sparkSQL又都支持sql操作,所以sql还是占用了很大一部分空间
快挂电话的时候这老小子跟我说:我知道你小子SQL好,快点给我整理一下SQL 的相关知识,我正好最近接了一个“私教”的活,也需要一套系统的“授课”体系,也就顺手一起整理一下吧
适应人群 1、刚开始学习的小白:这是5天的“私教”课程,我教自家的小外甥的,他也是计算机系的学生
2、工作有一段时间想要巩固一下基础的,建议也能回忆一下,我当时整理的时候发现很多都开始遗忘了,除了常用的
注:篇幅太长,我分两篇文章进行整理,需要更完整的文档的,敬请期待
1 sql基础讲解 着重介绍数据库的定义语言,操纵语言,数据控制语言和事物控制语言。
数据库定义语言(DDL,Data Definition Language)是负责数据的模式定义与数据的物理存取构建,说白了CREATE建表语句,ALTER 更新表结构语句,DROP 删除语句
CREATE建表语句
//创建表的基本语句:create table 表名(字段名 类型,字段名 类型,字段名 类型....)#创建学生表:学号,姓名,性别,年龄,qq号,邮箱。create table student( snum number(10),//指定学号的数字长度为10 sname varchar2(100),//指定姓名的存储上限为100个字节 sex char(4), age number, qq number, sal number(6,2),//指定工资的整数位为6和小数位为2 mail varchar2(50)) Drop删除表
#删除表:DROP TABLE 表名;drop table dept ALTER更新表结构
#添加新字段 alter table 表名 add 字段名 类型 alter table student add phone number(11)#修改字段类型 alter table 表名 modify 字段名 类型 alter table student modify sname varchar2(200)#删除字段 alter table 表名 drop column 字段名 alter table student drop column phone 数据操纵语言
把数据从移动硬盘复制粘贴到电脑上,就好了。。。无语了
支持三种分词模式:
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
精确模式,试图将句子最精确地切开,适合文本分析;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
jar包(pom.xml文件):
# 当前稳定版本 <dependency> <groupId>com.huaban</groupId> <artifactId>jieba-analysis</artifactId> <version>1.0.2</version> </dependency> # 当前快照版本 <dependency> <groupId>com.huaban</groupId> <artifactId>jieba-analysis</artifactId> <version>1.0.3a</version> </dependency> java简单实现:
public static void main(String[] args) throws IOException { String text = "前任拉甘送苏宁首败落后恒大6分争冠难了"; JiebaSegmenter segmenter = new JiebaSegmenter(); System.out.println(segmenter.sentenceProcess(text)); } 运行结果:
[前任, 拉甘送, 苏宁, 首败, 落后, 恒大, 6, 分, 争冠, 难, 了]
1、在每台服务器上安装并行运行包,进入cd /opt/matlab/toolbox/distcomp/bin/
执行:sudo ./mdce install ,新版建议执行:mjs install
2、并启动集群运行包
3、启动集群配置界面
4、先进行ip映射,在每个节点的/etc/hosts文件中添加如下代码:
10.12.29.164 server1
10.12.26.194 server2
10.12.26.174 server3
5、输入节点的ip
6、输入节点的root密码
7、默认即可
8、配置成功
10.12.29.164 server1
10.12.26.194 server2
10.12.26.174 server3
9、点击discover cluster查找集群,将配置的集群设置为默认
10、代码测试
点击home的parallel
点击create and manage cluster
点击discover clusters
11、自动搜索找到mcluster,点击validation
12
clear;
tic;
parfor i =1:100
pause(1)
end
toc;
clear;
tic;
for i =1:100
pause(1)
end
toc;
可以看出集群运行的快速度
https://blog.csdn.net/qq_31285709/article/details/87913533
参考这里
session技术 由于cookie下发到客户端本地进行保存和使用,存在比较大的风险,所以有了session技术对cookie进行弥补,session技术本身原理和cookie类似,并且依赖cookie,但是session不会将校验内容下发给用户,而是保存在服务器上,只是用cookie技术下发一个加密的sessionid。
Flask当中,默认session是以加密方法下发给用的。
由于session保存在服务器上,通常是服务器的数据库当中,所以,对session的增删改查会照成一定程度上的服务器压力。所以使用session要考虑数据库压力问题。
session对象在Flask当中是一个类字典对象,所以,对session的操作可以按照字典的形式来。
from flask import Flask from flask import session app = Flask(__name__) app.config["SECRET_KEY"] = "SD1A3S1C3ZX1C3A1D3" # 盐值 @app.route("/") def index(): session["name"] = "laobian" #设置session session.get("name") # 获取session del session["name"] # 删除session return "hello world" if __name__ == "__main__": app.run( host = "127.0.0.1", port = 80, debug = True ) Flask配置文件 配置文件
import os class BaseConfig: base_dir = os.path.join( os.path.dirname( os.path.abspath(__file__) ),"OA.sqlite" ) SECRET_KEY = "123ad" SQLALCHEMY_DATABASE_URI = "
查看显卡列信息
[admin@server1 ~]$ lspci | grep -i vga 04:00.0 VGA compatible controller: NVIDIA Corporation GP107GL [Quadro P600] (rev a1) [admin@server1 ~]$ sudo lshw -numeric -C display [sudo] password for admin: *-display description: VGA compatible controller product: GP107GL [Quadro P600] [10DE:1CB2] vendor: NVIDIA Corporation [10DE] physical id: 0 bus info: pci@0000:04:00.0 version: a1 width: 64 bits clock: 33MHz capabilities: pm msi pciexpress vga_controller bus_master cap_list rom configuration: driver=nouveau latency=0 resources: irq:74 memory:a3000000-a3ffffff memory:90000000-9fffffff memory:a0000000-a1ffffff ioport:2000(size=128) memory:c0000-dffff [admin@server1 ~]$ 显卡驱动查询下载
问题描述 unable to access ‘https://*****.git/’: SSL certificate problem: unable to get local issuer certificate
原因以及如何解决 这是由于当你通过HTTPS访问Git远程仓库的时候,如果服务器上的SSL证书未经过第三方机构认证,git就会报错。原因是因为未知的没有签署过的证书意味着可能存在很大的风险。解决办法就是通过下面的命令将git中的sslverify关掉:
git config --system http.sslverify false 上面这行命令的影响范围是系统当前用户,如果要设置为全局所有用户,可以改成这样:
git config --global http.sslverify false 如果只是想针对当前仓库进行设置,可以在需要修改的仓库目录下执行:
git config http.sslverify false 如果你的仓库中存在嵌套的git子模块(就是子模块中又引用了子模块),在进行初始化时,仍然有可能遇到self signed certificate in certificate chain的错误,此时可以通过执行下面的命令来解决:
npm config set strict-ssl false 对于npm而言,除了可以在package.json的scripts属性中自定义脚本外,npm-scripts也内置了一些脚本,用来在特定的时机执行某些特定的任务,具体可以参照 npm的官方文档
系列文章 Git专栏 Git使用(一):安装与配置
Git使用(二):创建项目并提交到远程仓库
Git使用(三):分支管理,创建分支、合并分支、合并分支的某一次提交等
Git使用(四):提交管理,修改提交信息、合并多次提交、版本回退、撤销本地文件修改等
Git使用(五):解决冲突以及如何避免冲突
SmartGit 安装及使用(一):安装及配置
SmartGit 安装及使用(二):工作界面介绍、提交代码以及防止代码冲突等操作
SmartGit 安装及使用(三):修改提交记录、合并多次提交、撤销本地文件修改、版本回退等操作
SmartGit 安装及使用(四):创建、合并分支、合并某一次提交以及解决冲突等操作
SmartGit 安装及使用(附录):注册非商业许可证
【Git】如何生成SSH key
【Git】.gitignore文件语法以及修改后无效的解决办法
【Git】Authentication failed for 错误解决
A. 最小生成树(要求用kruskal算法写) Description 在一张图上有N个点,点与点之间的连接的花费都已经告诉你了,请你设计一下,如果解决这个“最小生成树”的问题。
Input 首先输入一个数字N(0〈=N〈=100)
然后输入一个N*N的矩阵 其中第i行第j列的数字k表示从点i到点j需要的花费。
Output 一个数字,最少需要多少花费才能使得整张图任意两点都直接或者间接连通(也就是最小生成树的权)
Sample Input 5 0 41 67 34 0 41 0 69 24 78 67 69 0 58 62 34 24 58 0 64 0 78 62 64 0 0 2 0 1 1 0 Sample Output 116 0 1 Answer #include<iostream> #include<algorithm> using namespace std; #define MAX 101 struct TEdge { int nFrom; int nTo; int nCost; }; void vInit(int nArr[],int nN); int nInput(TEdge tArr[],int nN); void vSort(TEdge tArr[],int nE); bool bCmp(const TEdge &tA,const TEdge &tB); int nKruskal(TEdge tArr[],int nArr[],int nN); void vOut(int nOut); void vMergeOwn(int nArr[],int nF,int nT,int nN); int main() { int nNodes; int nEdges; TEdge tEdges[MAX*(MAX-1)/2+1]; int nOwner[MAX]; int nAns; while(cin >> nNodes) { vInit(nOwner,nNodes); nEdges=nInput(tEdges,nNodes); vSort(tEdges,nEdges); nAns=nKruskal(tEdges,nOwner,nNodes); vOut(nAns); } return 0; } void vInit(int nArr[],int nN) { int i; for(i=1; i<=nN; i++) { nArr[i]=i; } } int nInput(TEdge tArr[],int nN) { int nRet; int i,j; int nTemp; nRet=0; for(i=1; i<=nN; i++) { for(j=1; j<=nN; j++) { cin >> nTemp; if(i<j) { nRet++; tArr[nRet].
20.11.26 cpufreq driver数据结构 //路径linux5.4/include/linux/cpufreq.h struct cpufreq_driver { char name[CPUFREQ_NAME_LEN]; u8 flags; void *driver_data; /* needed by all drivers */ int (*init)(struct cpufreq_policy *policy); int (*verify)(struct cpufreq_policy *policy); /* define one out of two */ int (*setpolicy)(struct cpufreq_policy *policy); /* * On failure, should always restore frequency to policy->restore_freq * (i.e. old freq). */ int (*target)(struct cpufreq_policy *policy, unsigned int target_freq, unsigned int relation); /* Deprecated */ int (*target_index)(struct cpufreq_policy *policy, unsigned int index); unsigned int (*fast_switch)(struct cpufreq_policy *policy, unsigned int target_freq); unsigned int (*resolve_freq)(struct cpufreq_policy *policy, unsigned int target_freq); unsigned int (*get_intermediate)(struct cpufreq_policy *policy, unsigned int index); int (*target_intermediate)(struct cpufreq_policy *policy, unsigned int index); /* should be defined, if possible */ unsigned int (*get)(unsigned int cpu); /* Called to update policy limits on firmware notifications.
rabbitmq vhost 每一个rabbitmq服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host)。简称vhost
特性:
每一个vhost本质上是一个小型的独立的rabbitmq服务器,拥有自己独立的完整的一套队列、绑定关系、交换器等。同一个服务器上的多个vhost是完全隔离的。队列及交换器等不互通。 创建vhost 1.通过前台创建 2.通过命令行创建 rabbitmqctl add_vhost {vhost} {vhost}为新的vhost的名字。
实现效果如下:
删除vhost 删除vhost的同时,也会删除其下所有的队列、交换器、绑定关系、用户权限、参数和策略信息等。
1.前台删除 注意:需要点击进入对应vhost中
2.命令行删除 rabbitmqctl delete_vhost {vhost_name}
1.Cannal的工作原理
①cannal模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议
②MySQL mater收到dump请求,开始推送binary log给slave(即canal)
③canal解析binary log对象
2、Canal搭建环境
1、准备好MySQL运行环境;
2、开启 MySQL的binlog写入功能,配置 binlog-format 为 ROW 模式,my.cnf中配置如下:
[mysqld]
log-bin=mysql-bin #开启 binlog
binlog-format=ROW #选择 ROW 模式
server_id=1 #配置MySQL replaction需要定义,不要和canal的 slaveId重复
3、授权canal连接MySQL账号具有作为MySQL slave的权限, 如果已有账户可直接 grant授权:
启动MySQL服务器;
登录mysql:./mysql -uroot -p -h127.0.0.1 -P3306
CREATE USER canal IDENTIFIED BY ‘canal’;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘canal’@’%’;
FLUSH PRIVILEGES;
4、下载 canal部署程序
Wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
tar -zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canal.deployer-1.1.4
5、配置修改
vim conf/example/instance.
前几天《天涯明月刀》手游资料放出来,让很多期待已久的玩家欣喜了好一会儿(比如我)。
其中捏脸玩法再次进入玩家的眼帘,再看去年大火的《楚留香》,一度被玩家称之为脸玩年。
玩家自己动手,就能捏出专属于自己的游戏人物。
光头强??
期间也爆出很多长得奇形怪状的捏脸,虽然吓坏了在下,不过说真的,美的千篇一律,丑的反而百里挑一。
那么捏脸这种玩法,究竟哪款游戏的系统做得最好呢?下面推荐几款玩家们力荐的捏脸游戏,看看大家都玩过哪些呢?
不是,放错图了~~
一、《模拟人生》 这个游戏从2000年发行,至今已经推出到第四款。
可以建房子、布置家居,或者指引模拟市民的生活起居,吃喝拉撒,外出聚会,上班交友等等。
是款深受玩家喜欢的游戏,免费版和移动版在taptap网站上都是8分以上的评分。
而这款游戏的捏脸系统其实做得蛮精细的,人物面部、身体等细节,真实度还是挺好的,还有化妆的3D睫毛什么的,都挺给力。
不过也有玩家觉得,这游戏的捏脸太卡通了,甚至有点幼稚,那么大家觉得呢?
二、《骑马与砍杀》 这款经典就不过多介绍了,08年发行,至今已经11年了。
自由度和开源程度都很高、玩家可以制作出自己喜欢的人物形象和剧情。
捏脸系统很完善,与老滚五(上古卷轴5)的风格挺相似的,不过的确有很多人欣赏不来这种美,比如在下,哈哈~~
三、《黑色沙漠》 13年10月份开始测试,目前台服已经上线。
它的捏脸系统还是挺被玩家喜欢的,而且看很多玩家晒出的脸,那捏的叫一个美。
当然还有创建人物可以捏自定义动作,不过却没法在游戏里随便使用,但很多玩家还是沉迷捏脸捏动作的玩法中无法自拔(好羞涩呀)。
个人还蛮喜欢这种画风和风格的:
四、《上古卷轴》 原本打算让它和骑砍一起一带而过的,但发现推荐它的实在太多,不说怕被喷呢~~
玩家们晒出的作品逼格也很高呢,至少不是清一色的网红锥子脸,小鲜肉什么的
很多人说它原本的脸真的没法看,但还好它是能修改的,在玩家的加工后会好看很多,不过怎么捏都还是有原本脸的影子,改动不算大,自由度还是差“模拟”一些。
五、《EVA》 港真,被玩家们秀出的图片给震撼到了:
来自玩家分享,侵删
很多电影明星捏得还是挺像的,画质和皮肤看起来也很好。
可能是这玩家技术高超吧,哈哈~~
其实类似的捏脸游戏,还有《剑灵》、《剑网三》、《SB4》(男玩家的福利)、《完美世界》等等,都挺优秀的,各有各的特色,可能很大程度上还是看玩家的审美和操作了。
那么大家玩过的游戏中,哪款游戏的捏脸系统最优秀呢?欢迎分享哦~~
注:文章部分信息与图片来源于网络,侵删!
antd的anchor组件在点击锚点后会修改URL,而单页应用中如果使用哈希模式的路由,当URL被修改后,刷新页面会导致当前路由没有定义而出现404的情况。
<template> <header id="top"> </header> <article id="cont"> </article> <a-anchor :affix="false" @click="handleAnchorClick"> <a-anchor-link href="top" title="测试题信息" /> <a-anchor-link href="cont" title="测试题内容" /> </a-anchor> </template> <script> export default { methods: { handleAnchorClick(e,link){ // 阻止点击的默认事件修改路由 e.preventDefault(); var srcolls = document.getElementById(link.href); srcolls.scrollIntoView({block: 'start', behavior: 'smooth'}); }, } } </script>
目前fontawesome,iconfont等字体图标很流行,字体图标为我们提供了丰富的内容,统一的风格,使用也方便,尤其在网页和移动开发中,是必不可少的工具。
C#中,WPF可以很好的使用这类字体图标,只需要定义一个资源,就可以直接使用,设计时也可以使用,那么在Winform需要怎么使用呢?如何在设计时也可以直接使用呢?
准备好需要的字体文件,打包进资源文件或直接使用文件都可以。使用PrivateFontCollection的AddFontFile或AddMemoryFont加载字体。加载后,我们可以通过PrivateFontCollection的Families获得字体FontFamily,这样就可以在运行时指定字体并使用了。 但这样还是不支持在设计时使用,因为设计时字体列表中没有我们加载的字体,我们需要自定义一个控件,从Control继承或从Label或其它控件继承都可以,重写控件的OnPaint,使用字体时指定使用我们加载的字体就可以了。
为了更加方便的使用,我们可以设计一个图标选择框,设计时可以从图标中选择。
设计时选择图标
https://github.com/wuqinchao/JwControls/blob/master/Jw.Winform.Ctrls/Iconfont/JwIconfontManager.cs
https://github.com/wuqinchao/JwControls/blob/master/Jw.Winform.Ctrls/JwIcons/JwIcon.cs
debug呢,突然发现左边变量窗口怎么不显示变量了,
可能是用的时间太长了,变量窗口右上角有三个点(views and more actions)
将里面 Variables 前的对号点掉,再点上就可以
import threading
def setInterval(interval):
def decorator(function):
def wrapper(*args, **kwargs):
stopped = threading.Event()
def loop(): # executed in another thread
while not stopped.wait(interval): # until stopped
function(*args, **kwargs)
t = threading.Thread(target=loop)
t.daemon = True # stop if the program exits
t.start()
return stopped
return wrapper
return decorator
用法:@setInterval(.5)
def function():
"..."
stop = function() # start timer, the first call is in .5 seconds
stop.set() # stop the loop
stop = function() # start new timer
我有一个大的csv文件,其中大约有5000行。
第一列包含每行的标识名称,即LHGZZ01前9行的名称为LHGZZ01,下10行为其他名称,依此类推。
我没有这样的图案np.唯一查找名称更改的索引。在
我想写一个循环,将源csv的每一行写入一个循环中只包含相同名称的新csv文件。在datafile = open('source.csv','rb')
reader = csv.reader(datafile)
data = []
idx = []
dataidx = []
next(reader, None)#skip headers
for row in reader:
d = row[0]
idx.append(d)
data.append(row)
dataidx.append(row[0])
index =np.sort(np.unique(idx,return_index=True)[1])
nme = []#list of unique names
for row in index:
nm = data[row][0]
nme.append(nm)
for i in np.arange(0,9):
with open(str(out_dir)+str(nme[0])+'.csv','w') as f1:
row = data[i]
writer=csv.writer(f1, delimiter=',')#lineterminator='\n',
writer.writerow(row)
上面的代码写入新csv的第一行并停止。在
我的问题是如何循环源.csv文件在每次新名称更改后拆分数据,然后将具有相同行名的行写入唯一的csv?在
很抱歉这个冗长的问题,但不幸的是,这个问题超出了我的python技能,它让我抓狂。在
非常感谢您的帮助或建议
csv示例:
^{pr2}$
RGB全彩点阵模块程序 先显示一下效果 程序实现亮红,蓝,绿,紫,白,青,黄,七种颜色的爱心
一下是展示四种颜色
RGB全彩点阵模块原理图如下: RGB8x8点阵显示原理 每一个灯都相当于一个独立的点,通过行列进行控制灯的位置,从而让灯进行亮色,通过595移位寄存器进行控制要亮的灯(74HC595是串入并出带有锁存功能移位寄存器.)。
根据手册可知:
1.数据在 SCK 的上升沿输入,在 RCK 的上升沿
进入的存储寄存器中去。
2.SER是一个串行移位输入寄存器。
3.存储寄存器有一个并行 8 位的,具备三态的总线输出,
当使能时 G(为低电平),存储寄存器的数据输出到总线。
通俗的说就是:
1.在SRCK引脚出现上升沿时,从SER引脚输入一位数据,重复八次。(因为是8x8点阵所以要传输8位数据)
2.在RCK引脚出现上升沿时,将之前输入的8为数据分别从Q0-Q7引脚输出
3.要注意区分那个RCK引脚是控制行的,那个是控制列的
我的模块是RCK_A是控制行的,RCK_R,RCK_G,RCK_B是控制列的分别亮红,绿,蓝等颜色
SRCK是控制数据的存储的
SER是控制移位的
本模块使用SM74HC595D芯片进行驱动
有需要SM74HC595D使用手册的可留言邮箱发你们
接下来就是程序了
完整程序如下:
RGB全彩点阵引脚配置程序
led.c
#include "led.h" /*2020.11.17 * RGB全彩点阵模块 */ //RGB点阵引脚初始化 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE); //使能PA端口时钟 GPIO_InitStructure.GPIO_Pin = RCK_A_PIN|RCK_R_PIN|RCK_G_PIN|RCK_B_PIN|SRCK_Pin|SER_Pin; //引脚配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化端口 GPIO_ResetBits(GPIOA, RCK_A_PIN|RCK_R_PIN|RCK_G_PIN|RCK_B_PIN|SRCK_Pin|SER_Pin); //置0 } led.h
#include "
L1-1 嫑废话上代码 (5分) 题意 直接输出
题解 #include <iostream> using namespace std; int main(){ printf("Talk is cheap. Show me the code.\n"); } L1-2 猫是液体 (5分) 题意 给你长宽高计算长方体体积
题解 #include <iostream> using namespace std; int main(){ int h, l, w; cin >> l >> w >> h; cout << l * w * h << '\n'; } L1-3 洛希极限 (10分) 题意 大背景下的简单计算,考察阅读题目的能力
题解 注意看题目要求的输出内容
#include <iostream> #include <vector> #include <set> #include <algorithm> #include <cmath> #include <string> #include <string.
Python项目的pytest初始化
2018-01-19 00:08:25 +08
字数:2310
标签:
Python
Test
为什么要写测试 ¶
Python是一种必须要写测试的语言。
和C/C++、Java这种需要编译的语言相比,Python这种动态语言天生就有开发迅速的优势。
开发完成后的代码,跑一跑自然知道问题。
然而,如果项目稍大,就难以保证手动测试的可靠性。
因此,江湖传言,Python不适合做大型项目。
当然,江湖上的大多数人是不写测试的。
与Java之类相比,没有100%测试覆盖的Python代码,甚至都不能保证没有语法错误。
而静态语言在预编译时,就会做完整的语法检查,可靠性的差距可见一斑。
然而,正是因为这种差距,Python项目有更迫切的测试需求。
达成100%测试覆盖率的Python项目,可靠性却又比没有写测试的Java项目要强上许多。
为什么是pytest ¶
打开PyCharm,可以看到默认支持的单元测试框架有五类:
unittest是Python标准库之一。
与Java里著名的JUnit4非常类似,通过继承一个TestCase,然后增加test_*命名的method来测试。
(JUnit5中已经抛弃了这种做法,改为使用注解@Test的形式。)
它的问题就是,有些过于繁琐。
doctest是一种非常奇特的测试技术,在文档中写测试。
把代码和测试写在一起,这是Java这类语言中没有办法做到的。
虽然它也是Python标准库之一,但孤却第一时间放弃了。
对简单的数学函数,它是很便捷的;但对于复杂的、有副作用(side effect)的function或method来说,它功能不足。
而且,测试代码往往比功能代码更复杂些,不合适写在pydoc里。
Twisted是一个异步网络框架,而Trial则是其单元测试系统,是对unittest的一个封装。
如果不是使用Twisted框架,那么不会使用到它。
nose是一个曾经非常流行的测试,兼容unittest的同时却拥有更加简洁的语法,然而已经停止维护了。
nose本身支持Python 3,然而其很多插件却不支持。
新的项目,不推荐使用它,正如它的文档所说。
非常可惜,孤差点就选它了。
Nose has been in maintenance mode for the past several years and will likely cease without a new person/team to take over maintainership.
New projects should consider using Nose2, py.
刚开始只是为了实现某个功能,中间需要对表达式进行计算,想着写个四则运算计算器也很简单就顺手写了, 写到后面发现需要考虑的问题还挺多的,囧。
现在把代码贴出来记录一下这辛苦的过程吧,毕竟写得挺长的= =
不做解释了,单纯为了记录,毕竟写的也挺菜的,也就能基本实现功能2333
def calculate(in_formula: str) -> int:
"""
对字符串类型的数学表达式进行计算,返回计算结果
数学表达式可包含加减乘除、括号
:param in_formula: 数学表达式 如'2*(-5+3)/-1+20/(3+1)+2+(-9-2)*2'
:return: 计算结果
"""
if '(' in in_formula:
result_in_brackets = []
reg_formula_in_brackets = re.compile(r'\([^(]+\)')
formula_in_brackets = reg_formula_in_brackets.findall(in_formula)
else_formula = reg_formula_in_brackets.split(in_formula)
for i in formula_in_brackets:
result_in_brackets.append(simple_arithmetic(re.sub(r"[()]", '', i)))
for i in range(0, int(len(else_formula)) + 1, 2):
else_formula.insert(i + 1, str(result_in_brackets[int(i / 2)]))
result = simple_arithmetic(''.join(else_formula))
else:
result = simple_arithmetic(''.join(in_formula))
return result
def simple_arithmetic(in_formula: str) -> int: