SqlSugar的GroupBy和Sum用法 hello,大家好。我是闲齁齁,一枚用发量写代码的程序员。今天我做的功能模块里面涉及到了分组和求和这两个功能,于是我就翻阅了SqlSugar的文档来学习分组查询和使用。但是还是写出来了好多问题,接下来我就把问题和解决方法写出来,来帮小伙伴们避个雷。SqlSugar的官方文档我已经在下面打了出来。
http://www.donet5.com/Home/Doc?typeId=2243
首先按我以往的规矩来,先写接口,接口的代码还是和以前一样,不知道怎么写的小伙伴可以详细看一下我的第一篇文章。
写完接口就让我们写服务吧,我会先把我的代码写在下面并告诉大家哪里错了。
//异步要加入await var dbResult = await Db.Queryable<实体表1, 实体表2, 实体表3, 实体表4>((f, u, a, b) => new JoinQueryInfos( JoinType.Left, f.1Id == u.Id, JoinType.Left, f.2Id == a.Id, JoinType.Left, f.3Id == b.Id )) //.Where((f, u, a, b) => u.IsDelete == false) .GroupBy((f, u, a, b)=> new {f.TypeName,f.TypeEncode,f.UnitId,f.WareHId,f.WareHModelId }) .Select((f, u, a, b)=>SqlFunc.AggregateSum(f.RealNumber)) .Select((f, u, a, b) => new InventoryMaterialDto { Id = f.Id, …… }) // .MergeTable()//将查询结果转换成一个表在进行sum // .GroupBy(it => new { it.
本文将讨论人声的自动调音。因此,不知道啥是Auto-Tune的同学请先去脑补;会使用Auto-Tune的同学请备好板砖 !对于你们中的许多人来说,这将是一篇讨论自动调音在现代音乐中的创造性与实用性的伟大文章。不过从人性的阴暗面来讲,这也可能制造出一些笑柄,给人一千个开喷的理由,比如“自动调音的最佳技巧就是找一个唱歌不跑调的偶像!”
言归正传,对于Auto-Tune这项技术,无论你爱也好,恨也罢!它都已经在那了。因此,有关事宜你还是了解下为好。
两种用途
人声自动调音技术在现代音乐中的应用在我看来主要有两种模式:一是用于锁住一些离调音符,及时修正歌唱时的人声音准;二是把它当作一种创作人声音色的特殊效果,非常类似于移相器、镶边器、混响或者失真的作用。
第一种模式非常简单 - 如果歌手的一个音唱跑了,我们得赶快把它拽回调上来。比较常用的工具如Auto-Tune、Waves Tune、Melodyne等。用过的都知道,在图形模式下使用是最好的,或者你也可以简单地使用自动修音模式并自动化(Bypass)旁路。
第二种模式更有趣 - 它有两种应用场景。一是可以用作后期效果 - 即在录完音后用Auto-Tune去调音;二是在歌手演唱时实时插入并用唱法去操纵Auto-Tune,我是后者的支持者!一个非常优秀的歌手可以控制他们的音高和唱法,使之与Auto-Tune珠联璧合、相得益彰,而且还能从中获得许多有趣的效果,让这种调谐失真变成一个创意工具。
自动增强音色
在当下的音乐环境中,我经常把Auto-Tune当作是一种音色调整工具。多数情况下,我都试图获得一些(或很多)有光泽度的相位失真,这种合成谐波的产生使声音听起来带点合成味儿,或者像个机器人,当然这取决于你用什么方法来调教。 通常人们只是倾向于使用更自动化地调音方式,找到自己觉得合适的retune speeds,然后把他们像煎饼果子一样卷一起。我有点神经质,喜欢更精致的方法。我非常清楚我何时该用Melodyne虐一下;何时又该用当下最潮的Auto-Tune效果来一把;或者再玩回经典教科书式的Auto-Tune音色,正是因为它们有着各自不同的声音特点,所以也各有各的用法。
Melodyne的音色最通透。但它会使人声的中低频部分变薄一点点,这有时反而是件好事。若你虐着点用,它会带来一种特殊的音染,会产生那种分布非常均匀的谐波 - 你知道这种听感很难用语言来表达,或许可以形容为非常“稳定”。
Auto-Tune的最新版本也相当通透,但还是可以做出以前那种标志性的Auto-Tune声音。最典型的就是用Auto-Tune 5.1版本调教出的声音,当我们想起T-Pain(美国另一位Auto-Tune大神)时,我们就会想到那种声音特质- 因为共振峰位移还不够准确。接下来便是我要如何虐、虐多少的问题 – 到底是只为人声增加一点淡淡的光泽,还是干脆搞成机器人的声音。如果我要蜻蜓点水般的感觉,那非常简单 -- 技术上来讲就是把两个Auto-Tune串联,两者都设置为非常慢的retune speeds,等于在被处理的谐波之上再产生一次谐波,从而获得那种轻微且持续的调制味道。 因为我使用慢速调音,这也意味着调音效果相当均匀。
将Melodyne和 Auto-Tune 结合使用
然而,有时我想要让那种更精美的效果始终贯穿于人声, 我发现通过将Melodyne与Auto-Tune结合使用可以获得非常均匀、有质感的声音。不妨听听Ozuna和Akon(阿肯)合作的单曲“Comentale”,这首歌中的人声效果就是我讲的这种感觉,是一个很棒的范例。
这两个人声链是首先在Melodyne插件的图形模式下只让音符尽量靠近中心,然后再挂一个Auto-Tune插件,把retune speeds设置得相当快,用这种方法去创造一种效果音色,当Akon唱出较快的音符时才会作出音调调整,当他这么唱时我喜欢让Auto-Tune带点“小故障”,因为我喜欢这样所产生的那种人声纹理。Kon非常巧妙地把这些“小故障”放在了他的唱法中,这个我过会儿再讲。另外,在录音过程中,Ozuna和Akon都用贴合Auto-Tune Pro的方式去唱歌,以使声音更加融合。Ozuna设置为常规模式;Akon设置为经典模式,整个过程都经过精心设计,其效果比简单地只挂一个Auto-Tune要好很多。
自动化 Auto-Tune
有时候,我不想让Auto-Tune效果在人声中一直保持得太均匀。正如我之前提到的,Akon非常注重怎么将他的声音与Auto-Tune结合着唱。有时为了创造出更迷人的瞬间,他会故意把某处唱跑,而我自然也心领神会,使用自动化Auto-Tune设置来突出他想要的那种效果。
基本上来讲,我只是在他的演唱基础上进行发挥。 很多人将Akon与重型Auto-Tune联系起来,但当我想起他的演唱风格时,我认为他确实是高手中的高手。 他非常仔细地塑造了自己的声音个性,对于有这样能力的艺术家,我实际上并不会把Auto-Tune用的过重。 我心中的默认值是“经典的Auto-Tune”(指5.1版本中的算法所得到的声音),retune speeds设为12ms(对于严肃点的歌曲可能会更少,对于带有俱乐部取向的歌曲可能会更多)。 我不否认这个速度很快,因为我想要得到那种独特的人声音色。 这可跟T-Pain的标志性声音不同。 在某些实际操作的过程或瞬间,我会把自动化retune speeds设置得非常快,以呈现那种声音质感;或者放慢速度让声音变得更敏感。
手动控制共振峰位移
共振峰位移是一种未被充分利用的效果。 当我们说话时,我们发出的元音是由嘴巴的形状决定的。 由嘴形决定的这些谐振特征被称为共振峰。 为了在调音期间保持声音特点,必须相应地调整共振峰。
音调修正软件通常会自动执行此操作 - 但有时它也不是百分百准确。 因此,大多数调音软件允许我们在需要补偿时手动调整共振峰。 较高的共振峰指的是诸如“a”、“ah”和“e”;较低的共振峰指的是诸如“oo”、“oh”和“uh”之类。 有时候我们其实可以虐一下共振峰,用这种手动控制的方法来创建各种人声纹理也很有趣。 比如我们可以在背景人声中调整一下共振峰,使它区别于主唱音色。 或者我们可以再狠一点,让它听起来像一只会唱歌的花栗鼠或是科学怪人养的小蛮兽。
来一点创意
如果我们没有一点创意,那跟咸鱼又有什么区别?那我写这篇文章又有什么意思?来吧!让我们试着打开脑洞:首先,我想到的是音高修正和混响效果之间的关系。值得注意的是,同一首歌通过后期制作实施Auto-Tune与现场实时Auto-Tune在技术上会有不同。
你可能会问那又怎样?
好吧!两者之间的差异归结为相位旋转 -- 谐波轨迹的微时序变化改变了信号的相位,相位是确定空间性的一个极为重要的方面。因为我经常使用外置混响,我发现如果我把混响返送回来,然后在混响发送后挂上我的Auto-Tune再去设置,人声竟然会感觉更靠前,待断开混响后则会产生一个强烈的从前到后的立体声成像,这听起来有点不可思议。
一、Graphql 一种为你的API而生的查询语言,可以理解为动态api。一般来说我们都是在后端写好sql查询语句查询数据库数据,前端请求这个api返回的数据是固定的,而Graphql可以让前端去决定请求什么字段回来。
二、strapi安装Graphql插件 或者用yarn或npm安装
yarn strapi install graphql 三、使用GraphQL查询来浏览数据 1、打开浏览器http://localhost:1337/graphql,可以测试一下请求。更多语法内容https://strapi.io/documentation/developer-docs/latest/plugins/graphql.html#query-api
2、也可以用postman发送请求测试
3、前端用axios请求
git部署出现的问题 error: remote origin already exists. ! [remote rejected] master -> master (hook declined) 一、出错信息:fatal: remote origin already exists.
解决方法:
1、先删除远程 Git 仓库
$ git remote rm origin
2、再添加远程 Git 仓库
git remote add origin git@gitee.com:ferry18829517728/vue_shop.git
二、git push -u origin master
报错提示:
remote: error: GE007: Your push would publish a private email address.
! [remote rejected] master -> master (hook declined)
解决方法:在git官网的邮箱管理里,将邮箱设置为公开,这样就解决了。
这个问题真的是个小问题,一定要注意看报错信息,不然就像我一直没解决到点上。
软件共享管家博客网站:www.rjgxgj.com
软件共享管家交流群:
软件共享管家交流QQ群①:772179063
软件共享管家交流QQ群②:427229940
温馨提示:我们提供用户下载的所有内容均来自网络,版权归作者本人所有,仅限技术交流,不得用做商业用途。如有侵权可以与我们联系,谢谢您的理解。
在日常聊天当中,我们是不是经常要用到许许多多的GIF动图表情包,或者有时候我们看到一些有趣的视频想发到聊天群里,但由于视频时间过长也不方便,这时候只能把视频转GIF做成表情包。
今天管家君就给大家分享一款GIF制作工具,全称叫ScreenToGif,可以录制屏幕上任意位置,将其保存为GIF动画文件。
ScreenToGif是一款免费的开源软件,体积非常小巧,只有几百KB。用户可以使用它,录制电脑屏幕的各种画面,然后将其保存为gif、视频、png、psd等文件。值得一提的是,所有的录制内容,我们都可以使用软件自带的编辑器进行编辑,做删除帧、增加帧、重复播放、裁剪等操作。另外,我们还可以给不同帧增加字幕文本、添加水印、绘制图形等。
可以说是,自定义性非常强。小白特别喜欢ScreenToGif的编辑器功能。除了录制的视频编辑,它还能直接导入视频进行编辑,然后另存为成gif格式。如此一来,我们以后不管需要什么gif图片,都能自己制作了。最重要的是,它不管是录制,还是编辑,最终的成品清晰度都不错。
使用方式也很简单,点击录像机,进入到录屏功能拖动选取一个合适的大小范围,点击录制就开始录屏了,录制完成后,点击停止结束录制
当然我们也可以自己导入已有的视频和图片文件,如果是视频,建议先截取需要的片段,不然导入过程会非常缓慢!点击编辑,然后将需要编辑的视频直接拖进编辑器,如图所示:
然后点击功能区→“图像”→“字幕”,输入需要添加的文字,调整字号、字体、位置等数据之后,点击“应用”即可保存添加的字幕。
设计完之后呢,我们点击文件-另存为,这里我们可以保存多种格式GIF,png,视频格式,psd根式,这里管家君选择GIF格式,选择好保存路劲就可以保存了。
该软件自带了一个小画板,用其进行绘制,会自动将绘制内容录制为GIF。这个小画板的优势在于其中间书写暂停时录制也会自动暂停。
下载地址
http://www.rjgxgj.com/6575.html
请拷贝链接到浏览器里打开! 软件共享管家博客网站:www.rjgxgj.com
软件共享管家交流群:
软件共享管家交流QQ群①:772179063
软件共享管家交流QQ群②:427229940
温馨提示:我们提供用户下载的所有内容均来自网络,版权归作者本人所有,仅限技术交流,不得用做商业用途。如有侵权可以与我们联系,谢谢您的理解。
今天是一系列的小问题的集合哦 1、类继承+__class__方法
问题:有如下的一段代码,问如何使用对象obj调用A的show方法
答:obj是类B的一个实例对象,直接调用肯定调用的是类B的show方法。可以使用__class__方法来修改obj的类型,改为A类型,此时obj就变成了类A的一个实例对象,就可以调用A的show方法了,代码及结果如下 class A(object): def show(self): print('this is the A show!') class B(object): def show(self): print('this is the B show!') obj = B() obj.show() obj.__class__ = A obj.show() this is the B show! this is the A show! 2、call(对象像函数一样调用)
问题:为了让下面这段代码运行,需要增加哪些代码?
答:看题目中的三个调用,首先a1=A(10,20)为定义一个类A的实例,a1.myprint()为类实例对象调用类内的方法,这两个都是没有问题的,而第三个是直接将实例当成一个函数在用,那需要实现一个__call__方法,该方法的功能类似于在类中重载 () 运算符,使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用。代码如下 class A(object): def __init__(self, a, b): self.__a = a self.__b = b def myprint(self): print('this is print!') def __call__(self, n): print(n + self.__a + self.
import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # 确定设备配置 # 返回一个bool值,指示CUDA当前是否可用 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # 设置超参数 input_size = 784 hidden_size = 500 num_classes = 10 num_epochs = 5 batch_size = 100 learning_rate = 0.001 # MNIST dataset train_dataset = torchvision.datasets.MNIST(root='../../data', train=True, transform=transforms.ToTensor(), download=True) test_dataset = torchvision.datasets.MNIST(root='../../data', train=False, transform=transforms.ToTensor()) # Data loader train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) # 包含一个隐藏层的全连接神经网络 class NeuralNet(nn.
HTTP状态码出现499错误有多种情况,499错误是什么?下面我们来学习Nginx 499错误的原因及解决方法。
日志记录中HTTP状态码出现499错误有多种情况,比如nginx反代到一个永远打不开的后端,日志状态记录就会是499、发送字节数是0。
经常有用户反馈网站系统时好时坏,因为线上的产品很长时间没有修改,所以前端程序的问题基本上可以排除,于是就想着是Get方式调用的接口不稳定,问了相关人员,说没有问题,为了拿到确切证据,于是我问相关人员要了nginx服务器的日志文件(awstats日志),分析后发现日志中很多错误码为499的错误,约占整个日志文件的1%,而它只占全部报错的70%左右),那么所有报错加起来就要超过1%了,这个量还是特别大的。
499错误是什么?让我们看看NGINX的源码中的定义:
可以看到,499对应的是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了。
Nginx 499错误的原因及解决方法
打开Nginx的access.log发现在最后一次的提交是出现了HTTP1.1 499 0 -这样的错误,在百度搜索nginx 499错误,结果都是说客户端主动断开了连接。
但经过我的测试这显然不是客户端的问题,因为使用端口+IP直接访问后端服务器不存在此问题,后来测试nginx发现如果两次提交post过快就会出现499的情况,看来是nginx认为是不安全的连接,主动拒绝了客户端的连接.
但搜索相关问题一直找不到解决方法,最后终于在google上搜索到一英文论坛上有关于此错误的解决方法:
就是说要配置参数 proxy_ignore_client_abort on;
表示代理服务端不要主要主动关闭客户端连接。
以此配置重启nginx,问题果然得到解决。只是安全方面稍有欠缺,但比总是出现找不到服务器好多了。
还有一种原因是我后来测试发现确实是客户端关闭了连接,或者说连接超时,无论你设置多少超时时间多没用,原来是php进程不够用了改善一下php进程数问题解决默认测试环境才开5个子进程。
前言 缓冲区溢出通常指的是向缓冲区写入了超过缓冲区所能保存的最大数据量的数据。如果说之前所提到的一些问题可能只是影响部分功能的实现,那么缓冲区溢出将可能会造成程序运行终止,被不安全代码攻击等严重问题,因此我们不得不特别重视。
一个缓冲区溢出的例子 对于下面的程序:
#include <stdio.h> #include <string.h> int main(void) { char buff[8] = {0}; char *p = "0123456789"; strcpy(buff,p); printf("%s\n",buff); return 0; } 定义一个字符数组buff,数组长度为8,使用strcpy函数将p所指向的字符串常量拷贝到buff中。
运行程序,结果如下:
0123456789 *** stack smashing detected ***: ./buff terminated 已放弃 (核心已转储) 可以看到,由于p所指向的字符串长度大于buff的长度,拷贝时由于缓冲区溢出而破坏了栈中的内容而导致程序异常终止。
实际上,有时候缓冲区溢出导致程序马上运行出错是幸运的,因为我们至少能够知道这里出错了。而不幸的情况是,如果超出buff的部分存储在了栈帧不属于它自己的位置,即覆盖了栈帧上存储的其他信息,就有可能导致程序在其他位置出错,造成问题难以定位。
当然也有很幸运的时候,那就是超出buff的部分存储在了未被使用的栈空间上。但是我们绝对不可以对此抱有侥幸心理。
如何避免 对于前面所示的例子中,我们可以很明显地看到要拷贝的字符串长度大于buff的长度,我们可以选择将buff的长度增大。但是实际编程中,我们经常难以察觉是否会超过缓冲区大小。
比如,对于gets函数:
char buff[255]; gets(buff); 我们不会知道用户在控制台会输入多少字符,但是可以肯定的是,输入字符很有可能会超过255,甚至字符中包含了可以执行代码的字节编码(当然,编译器和操作系统有很多机制,例如栈随机化,栈破坏检测,限制可执行代码区域等来对抗缓冲区溢出攻击),这个时候,灾难就会发生了。
因此我们不应该使用像gets这样不安全的函数,而选择fgets这样的可替代函数。查看gets函数的手册发现,手册中甚至直言不讳地说道:Never use gets()。
同样的,库函数中还有一些函数也可能造成缓冲区溢出,我们应该尽量避免使用它们,而选择使用更加安全的版本。
作用不推荐使用函数推荐使用函数拷贝字符串strcpystrncpy字符串比较strcmpstrncmp字符串连接strcatstrncat格式化字符串并存入缓冲区sprintfsnprintf读取字符串getsfgets复制字符串strdupstrndup字符串比较忽略大小写strcasecmpstrncasecmp 其中推荐使用的函数特点是,限定了操作内容的大小,从而避免了缓冲区溢出。当然,可能也会带来另外一个问题,就是截断。
我们修改一下前面的程序:
#include <stdio.h> #include <string.h> int main(void) { char buff[8] = {0}; char *p = "01234567890123"; strncpy(buff,p,sizeof(buff)); printf("
一般而言,我们想要在Windows系统上实现格式化操作是非常容易的。然而在苹果电脑上,我们则需要通过launchpad下的磁盘工具来进行,相对而言比较麻烦。关于“苹果电脑怎么格式化”的问题也困扰着无数Mac用户。今天,笔者总结了“苹果电脑怎么格式化”的相关教程,感兴趣的朋友,不妨可以借鉴着学习一下。
第一步,我们在苹果电脑上插入想要格式化的磁盘。如果在屏幕上显示了u盘图标即可说明已连接成功,如图1所示。
苹果电脑插入u盘 第二步,我们在桌面上找到launchpad下的磁盘工具,并点击进入。
寻找“磁盘工具” 第三步,在磁盘工具的界面左侧,我们能够看到需要苹果格式化的u盘。
磁盘工具操作界面 第四步,也同样是非常关键的一步。我们选中u盘,并且点击界面上方工具栏中的“抹掉”,即可完成苹果格式化操作。
利用磁盘工具进行苹果格式化 除了上述方法之外,我们还有没有其他解决“苹果电脑怎么格式化”的办法?
在这边,我们还可以利用第三方磁盘管理工具Paragon NTFS for Mac进行格式化操作。具体的操作过程如下:Paragon NTFS
第一步,在Paragon NTFS for Mac成功下载并安装运行这款软件。在连接完u盘的情况下,打开Paragon NTFS for Mac初始界面。
Paragon NTFS for Mac初始界面 第二步,我们点击界面右侧工具栏中的“擦除”。在弹出的对话框内选择自己需要的分卷文件系统格式。
点击“擦除” 选择分卷文件系统格式 Paragon NTFS for Mac一共为我们提供了7种文件格式。其中,NTFS格式较为常用,也是时下非常热门的文件格式之一。它的特点是拥有更高的安全属性,比起FAT32而言,NTFS格式支持文件上最大可以拓展为256TB。并且我们在使用的过程中也会发现存储和读写更加方便、快捷。
第三步,我们只需要确认擦除的步骤就能完成苹果电脑格式化的任务。
以上就是关于“苹果电脑怎么格式化”的两种方法。
通过对比我们不难发现使用Paragon NTFS for Mac去解决“苹果电脑怎么格式化”的问题,操作起来更简单,并且Paragon NTFS for Mac还是一款专门为Mac用户提供快速读写NTFS文件格式的电脑工具。能够有效地解决了硬盘格式与Mac OS系统不兼容的问题。强大的功能保障了我们读写、修改、访问Windows NTFS硬盘、U盘等外接设备的文件。是很多Mac用户装机时会选择的一款软件。
感兴趣的话,不妨登陆Paragon NTFS for Mac可以在MacDown下载试用。在“服务”页面,更多类似“苹果电脑怎么格式化”的教程会展示在网站上,对于新手小白而言,这也是个不错的学习机会!
在本篇文章中,给大家介绍一下如何在PDPS中创建项目以及其项目路径的设置。
1、创建文件夹(如下图lianxi),并创建子文件夹(sysroot)
不管是做数字化工厂还是只完成一个工位的项目,都要创建一个总文件夹,存放管理各类数据文件。
2、在sysroot文件夹下,创建libraryroot文件夹(用来存放、设备、产品、资料等数据)
3、将安装盘里temp文件夹下的文件复制到项目文件sysroot下
4、打开软件创建项目:打开PD,点file,选择New Project,创建新项目,编辑项目名字,如:EXM,点OK。
5、右击项目名,选NEW新建。
6、选图示图标。
7、按照图示更改文件名字(两次单击,要间隔一点时间,不是双击)。
库:主要存放标准工艺和设备资源
工作组:主要构件项目组成员,方便多人协作
产品:存放产品文件和焊点等
工艺方案:存放相关工位资源及操作流程
临时存放:起临时存储作用
仿真文件夹:存放工位仿真过程数据
8、点击保存。
9、设置项目路径
项目路径的设置很关键,每次打开项目前,最好检查路径是否正确。
展开全部
工具2113:DS CATIA V5 R17H1
1、启动软件,进入软件任何一5261个模块4102中1653,如这里进入其回中的零件设计模块,在软答件的每一个模块中,都有一些不同的工具栏,如果关闭了,恢复初始布局的方法完全相同。
2、进入零件设计模块后,可以根据需要拖动各工具栏,同时对于不需要的工具栏,可以点击关闭按钮,将其关闭。
3、如果不小心误关闭了某一个工具,或者找不到某一个常用工具,最简单也是最有效的方法是,重置界面布局。首先在软件右侧界面空白处,如下图箭头所指处,右击鼠标,会弹出菜单。
4、在弹出菜单中最下方,可以看到“自定义”选项,点击该选项,即可打开软件设置菜单,从中可以进行恢复初始界面设置。
5、如果是开启电脑,并第一次运行该软件,打开自定义菜单需要较长一段时间。打开自定义菜单后,点击“工具栏”选项卡,可以打开工具设置界面。
6、在工具选项卡中,选择“标准”选项,接着点击“恢复所有内容”,弹出对话框中,点击确定,这样就可以显示所有工具栏,但此时工具栏并不会复位,还在原位置。
7、如果想将其位置也初始化,点击“恢复位置”,弹出菜单中确定即可,这样工具栏即可复位。最后关闭自定义选项卡即可。
在平常工作中,有不少用户反映在使用投影仪时,投影仪与电脑连接后不能全屏显示画面,其实这个问题主要还是与分辨率设置有关。那么应该如何解决投影仪不能全屏显示的问题呢?下面小编为大家分享一份详细教程! 想要让投影仪全屏显示,则需要更改电脑或笔记本屏幕分辩率使其与投影仪默认分辨率一致。 准备工作:笔记本一台、投影仪一台 步骤一:根据投影仪种类的不同,一般主要连接投影仪的有两种接口,一种是VGA,另外一种是HDMI。首先要看看是哪种直接接到电脑的对应接口上,这里我们以 投影仪F1为例。 步骤二:一般此时会自动适配到投影仪上,如果没有,请进行手动操作。在桌面上右击鼠标,选择屏幕分辨率(投影仪的分辨率有很多种,如1024X 768 如果是高清的 那么分辨率是1920X1080)。 步骤三:在打开的窗口中,选择连接到投影仪。 步骤四:连接投影仪后,模式一般自选默认为复制,即电脑端和投影仪上显示内容一样。如果不是可手动选择复制。 步骤五:此时如果投影上的大小不符合投影屏幕的大小,可以通过设置电脑端的分辨率来调整投影大小。点击分辨率,进行选择调整。 步骤六:一般经过步骤五的调整,基本能调节电脑在投影仪上的投放大小,以充满整个投影屏幕。如果还有一点偏差的话,可通过设置投影仪段屏幕的缩放和位移,进行调节。 步骤七:一般投影结束,直接断开连接线即可,经过设置的电脑,下次再次在同一个投影仪上使用时,一般能直接自动调整好。小编所使用的投影仪如此,其他由于型号不同,可能有所偏差。
参考博客 https://www.cnblogs.com/alan666/p/8311804.html
https://blog.csdn.net/weixin_39059031/article/details/103723843
https://blog.csdn.net/weixin_40679412/article/details/80571854
https://blog.csdn.net/daaikuaichuan/article/details/81382794
https://blog.csdn.net/luotuo44/article/details/33690179
https://www.cnblogs.com/esCharacter/p/9564660.html
https://blog.csdn.net/weixin_39059031/article/details/103723843
一、原理 1. 鸟群捕食行为 一个鸟群在某区域寻找食物,且这一区域仅有一份食物。鸟群不知道这份食物在哪里,但知道食物距离他们多远以及同伴的位置。鸟群怎样尽快找到食物?搜索目前离食物最近的鸟所在区域,并向这片区域靠拢。
把食物所在位置当做最优点,鸟离食物的距离作为函数适应度,则可以把鸟群寻找食物的过程看做函数寻优的过程。由此受到启发,提出了粒子群算法。
2. 粒子群算法 粒子群算法,又称粒子群优化算法(Partical Swarm Optimization),是近年发展起来的一种新的进化算法(Evolutionary Algorithm - EA),由Eberhart 博士和kennedy 博士于1995年提出,其源于对鸟群捕食的行为研究。 这种算法模拟了人类的社会行为。个体在学习自身经验的同时相互交换信息,由此,种群成员可以逐渐移到问题空间中较好的区域。
2.1 抽象 粒子:把每只鸟抽象成一个无质量无体积的微粒,优化寻找最优解的过程相当于鸟群寻找食物的过程。速度:粒子在问题的搜索空间中以一定的速度飞行,这个速度决定它的飞行方向和距离,速度根据粒子本身的飞行经验和同伴的飞行经验来动态调整。适应值:粒子需要一个由目标函数所确定的适应值,来评价粒子的“好坏”程度。 PSO算法先将一群粒子初始化(位置随机),然后通过迭代寻找最优解。每次迭代中,粒子通过跟踪两个“极值”来更新自身位置。这两个极值一个是粒子本身找到的最优解,称为个体极值pBest,另一个是整个种群目前找到的最优解,称为全局极值gBest。 2.2 算法流程 初始化每个粒子群:群体规模N,每个粒子的位置xi 和速度Vi 。计算每个粒子的适应度值F[i]。对每个粒子,用它的适应度值F[i] 和个体极值Pbest(i) 比较,如果F[i] > Pbest(i),则用F[i]替换Pbest(i)。对每个粒子,用它的适应度值F[i] 和全局极值gbest(i) 比较,如果F[i] > gbest(i),则用F[i]替换gbest(i)。根据公式 2.3 中公式更新粒子位置x与速度Vi 。如果满足结束条件(误差达到要求或达到最大循环次数)则退出,否则返回步骤 2。
2.3 相关公式 将粒子延伸到N维空间,则N维空间中粒子的位置、飞行速度为矢量,粒子根据如下公式更新速度与位置:
其中w是惯性权重(加权系数),代表粒子上一轮速度对本轮的影响程度;
c1和c2是学习因子(加速度系数),代表粒子向自身最优(自我总结)和群体最优学习的能力。
rand()为0~1的随机数。
2.4 参数设置 粒子数量:一般取1~40. 其实对于大部分的问题10个粒子已经足够可以取得好的结果;粒子的维度:由优化问题决定,如本次实验为二元函数的优化问题,所以维度为2;粒子的范围::即粒子的移动区间范围,由优化问题决定,每一维可以设定不同的范围;W:一般取值在0.1~0.9之间,对优化影响较大,w取值较大时,有利于跳出局部最优点,w取值较小时有利于算法收敛;学习因子:通常设c1 = c2 = 2,范围为0~4;粒子的速度:表示粒子在一次迭代中可移动的最大距离,通常根据函数自变量取值范围来设定,例如x 属于 [-10, 10], 那么 Vmax 的大小就是 20; 二、例子 1. 题目 2.
在使用的macOS系统的用户发生不少异常情况,先是出现重开机后应用程式就出错,最后再重启macOS后,在全新干净系统下,要复制应用程式到应用程式内时,却出现Finder无法完成此项作业,因为无法读取与写入某些资料」(错误码-36),造成没办法安装任何应用程式,最后也找出一些原因,macz小编分享后续有遇到此问题的用户排除问题。
检测SSD硬碟
这项Finder无法完成此项作业的错误问题,主要并非是由macOS 系统所引起,出自于原因是在于硬碟或排线上,表示其中有一个有点问题,有可能就是硬碟坏轨?,可先透过检测工具查询看看,如有问题就建议赶紧先备份资料。
当前大多数SSD 硬碟官方也都有提供检测工具,可自行下载:
Intel® Memory and Storage Tool (固态硬碟管理软体)美光Crucial Storage Executive三星Samsung SSD Magician金士顿Kingston SSD Manager威刚ADATA SSD Toolbox创见Transcend SSD ScopeSanDisk SSD Dashboard仪表盘OCZ SSD Utility海盗船CORSAIR SSD Toolbox浦科特PLEXTOR Plextool 在macOS 系统内,可以利用SSDReporter 工具来检测SSD 硬碟状态
检测SSD硬碟SATA排线
排除SSD 问题后,最后就能确定目前并非是硬碟问题,就是排线可能出问题,解决办法是,在关机状态下,先换另一条SATA 排线,如果没有多余的SATA 排线,就先将其他硬碟排线互调,再开机进入macOS 内再次复制看看,如果正常可以复制,没有出现任何问题,那就代表SATA 线有问题,建议就直接更换。
我想这问题也可能会出现在白苹果iMac等设备上,如有发生这类问题,可朝这两个方向解决,如果重要档案没办法复制出来,这时候就要打开终端机,透过指令来解决:
cd /(要复制的料位置,可将资料夹拉入按下Enter 执行)
cp -r * /(要复制的目的地资料夹,直接档案夹拉入按下Enter 执行)。
以上就是Macz小编给您带来的苹果macOS显示Finder无法完成此项作业(错误码-36)解决方法,希望对您有所帮助。想了解更多苹果/mac产品使用技巧,关注我们获取更多有mac信息。
需求是想要在浏览器端可以实现代码修改后显示出来
使用了 vue-codemirror 做代码的编写和修改
可以获取到修改的代码内容
类似jsrun或者codepen的效果
大概效果如图
才疏学浅,不太清楚如何用这三部分在右侧渲染出来,或者说是把三个部分写到一起渲染出来,类似于写一个vue的组件
求大佬指点
主要代码
运行
id="codemirror-html"
v-model="htmlCode"
:options="cmOptions"
@cursorActivity="onCmCursorActivityHtml"
@ready="onCmReadyHtml"
@focus="onCmFocusHtml"
@blur="onCmBlurHtml"
/>
id="codemirror-css"
v-model="cssCode"
:options="cmOptions"
@cursorActivity="onCmCursorActivityCss"
@ready="onCmReadyCss"
@focus="onCmFocusCss"
@blur="onCmBlurCss"
/>
id="codemirror-js"
v-model="jsCode"
:options="cmOptions"
@cursorActivity="onCmCursorActivityJs"
@ready="onCmReadyJs"
@focus="onCmFocusJs"
@blur="onCmBlurJs"
/>
import dedent from "dedent";
import { codemirror } from "vue-codemirror";
// base style
import "codemirror/lib/codemirror.css";
// theme css
import "codemirror/theme/base16-dark.css";
// language
import "codemirror/mode/vue/vue.js";
// active-line.js
import "codemirror/addon/selection/active-line.js";
// styleSelectedText
import "codemirror/addon/selection/mark-selection.js";
import "codemirror/addon/search/searchcursor.js";
由于云雨等影响,使得遥感数据无法有效地观测地面,这种影响在NDVI上表现为低值噪声,为了降低这种影响,通常使用最大值合成的方法,得到相邻时间内最佳观测值作为填充值,从而消除低值噪声。这种方法简单实用,但是无法恢复地表真实情况,且会造成最大值对应的日期发生偏移,通常还要结合各种滤波算法对时间序列数据进行平滑,比如S-G滤波、谐波分析等。
为了实现最大值合成,需要将时间序列数据(ee.Image)转为更易处理的数组(ee.Array)。实现的过程比较简单,使用滑动窗口,在时间序列上取窗口内的最大值作为返回值,具体实现代码:
function MVC(inputNDVIcl , slideWindows) { var halfSize = (slideWindows-1)/2; var imageSize =inputNDVIcl.size(); var list = ee.List.sequence(halfSize, imageSize.subtract(halfSize+1)); //将影像集转为arrayimage var imagesArray = inputNDVIcl.toArray().arrayProject([0]); var date_start =ee.Date(inputNDVIcl.first().get('system:time_start')); var slide =ee.ImageCollection( list.map(function(index){ var date = ee.Number(index).add(1).multiply(8); var time = date_start.advance(date, 'day'); var slicedarray = imagesArray.arraySlice(0,ee.Number(index).subtract(halfSize).int(),ee.Number(index).add(halfSize+1).int()); return slicedarray.arrayReduce(ee.Reducer.max(),[0]).arrayProject([0]).arrayGet([0][0]).rename("NDVI").set("system:time_start",time.millis()); }) ); return slide; } 返回值的这段代码我本身有点疑惑
return slicedarray.arrayReduce(ee.Reducer.max(),[0]).arrayGet([0][0]).rename("NDVI").set("system:time_start",time.millis()); 使用上面这段作为返回值时,在数据量小一点的时候可以正常运行(100景左右),在数据量比较大的时候就会报数组越界的错误。而加上arrayProject([0])之后,又可以正常运行了,不知道是为什么?
我做了几组对比实验,对比了原始数据(全年MODIS NDVI,364景)、八天最大值合成数据,还有这两组数据的sg滤波、谐波分析之后的效果。
原始NDVI时间序列 八天滑动最大值合成NDVI时间序列 原始数据SG滤波 合成数据SG滤波 原始数据谐波分析 合成数据谐波分析 可以看到,由于原始数据较多由云雨造成的低值噪声,未做合成的数据直接做滤波会拉低整体的值,而使用合成之后的时候再进行滤波会与真实情况更接近。即便做了最大值合成,也无法完全消除密集云雨的影响。使用SG滤波对数据的细节有较好的保留,而使用谐波分析则消除了大部分细节,但使数据变得更平滑。
经常有老书虫和我抱怨:“猫啊,我又书荒了,给我介绍点不出名却好看的小说呗。今天我想看点异兽流小说呢。”所谓异兽流小说,就是主角不是人类的小说,可以是老虎,可以是鲨鱼,也可以妖族,总之不是人……
我是真游泳的猫,一个看书16年的老书虫,记得关注我,一起来看看5本异兽流网络小说,脑洞大开有趣味,书虫熬夜看个饱。书荒的朋友们可以看看这些小说哦。
第5名,山过《青猿传》。
目前44万字的仙侠小说,主角来到仙侠世界,却意外变成了一只长耳水猿,也就是书名说的青猿。虽然生而为妖,但是主角不卑不亢,在这个无情而又有情的仙侠世界中掌握自己的命运。
小说文笔老道,文风古朴,同时有许多谐趣的味道。设定方面,首先主角这种水猴子的形象就是一个创新的突破,让书虫们感觉到满满的新鲜感。然后其他族群的设定,等级和框架的设定,都相对合理,体现了一个宏大的世界观,足以让老书虫们赞赏不已。
第4名,我家的小鲤鱼《鼠行诸天万界》。
目前63万字的诸天万界流小说,主角前世是一个程序员,重生后变成了一只老鼠,一只噬神老鼠,还拥有一个神奇的系统。于是在金手指的关照下,主角来到了仙剑奇侠传、古剑奇谭、天下第一、斗破、遮天、盘龙、花千骨等等小说和影视剧的位面,开启了一段段神奇旅程。
这书最大的亮点就是老鼠这个主角形象,让人觉得很机灵,很好玩,真是脑洞大开。然后文笔也是幽默风趣,智商也是合格在线,虽然有些无敌文的老套路,但读起来十分轻松,不亦乐乎。另外小说的诸天副本,很多都是90后的童年回忆,读起来很容易让读者产生共鸣,回忆起当年的青春时光。
第3名,千里送一血《星界蟑螂》。
说起蟑螂来,大家肯定是讨厌不已。当然,在小说里面,如果主角是一只蟑螂的话,也不是不能够接受。毕竟主角是蟑螂,恶心的是反派啊。这本131万字的小说,脑洞大开,属于一本蟑螂种田流小说,有点类似《放开那个女巫》,只不过背景并不是那种西幻风,而是走的星界风。
这本书的风格比较温馨,日常生活都是什么种树种田摘果子,比较田园。而主角的升级主要靠吃果子里面的原力,没有什么打家劫舍,属于正能量比较多的一部小说。总之这本小说没有什么大的槽点,大家如果看腻味了打打杀杀的小说,可以看这本书换下口味。
第2名,炸弹姐姐来了《憎恶与传奇龙之王》。
120万字的dnd背景异兽流小说,主角前期是红龙,后期会变成有着钚龙和虹彩龙特征的神龙。脑洞最大的是,主角居然是一条母龙!在男频小说中,一般异兽流主角的性别都是男的,像这种母龙的设定,还真是比较少见。
而本书另一个脑洞大开的地方在于,主角几乎把五色龙都给囊括了。其他的龙类小说,红龙就是红龙,黑龙就是红龙,而这本小说的主角一龙在手,那就是各种颜色都拥有啊。总体而言,本书前中期比较好看,后期则因为心理描写过关,让剧情略显拖沓。
第1名,我正增肥中《超级巨鲲分身》。
鲲这种异兽,估计是读者们最熟悉的幻想动物了。凭借着无限进化的属性,鲲也成为大量小说的主角。这本85万字的小说,主要讲的就是主角大吃特吃的故事。废话,鲲不就是靠吞吃来进化的吗?
虽然这本小说的实力划分不太严谨,有不少漏洞。但是作为这种畅快流小说,能给读者带来新奇和畅快的感觉,那么这本书就已经值得一看,值得一品了。
朋友们有没有看过这些小说呢?大家还知道哪些好看的异兽流小说呢?欢迎留言哦。如果你喜欢看小说,也记得关注我哦。
网络小说已经成为了网友的日常陪伴,很多人靠着网络小说打发无聊的时间。异兽流小说作为网文的一个有趣题材,得到了不少书虫的喜爱。
所谓异兽流小说,只是一个笼统的说法,主角原本是人,在穿越重生之后变成了其他物种,并不一定是兽类,也可以是植物,也可以是细胞,总之主角“不是人类”的小说都可以算是异兽流。
套用一句“生而为人,我很抱歉”的网络梗,对于异兽流小说的主角来说,他们的心声大概就是:“生而为异兽,我很快乐。”
我是真游泳的猫,一个看小说20年的老书虫。今天我给大家献上5本脑洞大开的异兽流网络小说,老书虫们如果书荒了,不妨看看这些书吧。
第5名,小胖喵爱吃肉《银龙进化》。
目前102万字的奇幻小说,主角穿越到异界,变成一头龙,但出生的时候居然没有翅膀,于是主角转手就就被卖到了斗兽场。听起来主角开局有点悲凉,其实好日子才刚刚来。主角拥有一副好牙口,吃啥补啥,逐渐建立自己的势力,逍遥快乐无忧。
其实写龙的异兽流小说有太多了,金龙、红龙、绿龙、白龙、黑龙等五色龙都被很多人写过,也出现了诸如《霜寒之翼》、《黑龙法典》等精彩的小说。而本书主要选择金属龙题材,脑洞大开,让人眼前一亮。总体来说,本书没有太大的毒点,读起来也比较有趣,就是女主感觉有点不讨喜。
第4名,政泓《虫族是怎样炼成的》。
172万字的幻想小说,主角穿越之后从细胞开始,然后成为虫族,然后逐步扩大实力。这本书给我的感觉有点模仿那本1000多万字的异兽流代表作《进化的四十六亿重奏》,但本书还是有许多自己的创意,脑洞大开,为读者呈现了虫群的探索宇宙之路。
本书中的虫族,不是那种无脑的物种,而是有冷静的头脑,高效利用资源,关键还能够运用高科技的力量,技术发展带动虫族大幅度发展。整个故事设定很有趣味,读起来不枯燥不套路,令人刮目相看。
第3名,水道不孤《野猪传》。
目前50万字的仙侠小说,主角穿越到仙侠世界,变成了一头小野猪。随着修炼进度的提升,主角可以化为人。而本书的亮点在于,主角以妖族的身份混入修真者社会,与修真者师兄弟相称,得到大量修炼资源。自然,主角的野猪妖身份成为本书的一个亮点,产生了不少笑料。
本书文风幽默,行文轻松,读起来非常欢快。读者常常能够感受作者的脑定和创意,时不时笑出猪叫声。对于一本异兽流小说而言,能够让读者感觉新意,就已经很不错啦。
第2名,星辰旅者《熊猫大佬》。
目前135万字的异兽流小说,主角重生成为熊猫,前期种田修仙,后期写日常爱情,总体风格轻松快乐。整本书看下来,文笔和节奏都属于中上水平,剧情进度不快,但不存在没意义的水字数情节。但是这本书比较冷门,算是被埋没了的一本异兽流小说。
作者脑洞大开,融入了原始文、科技文、种田文等多个要素,在我看来属于很有创意。不过,也有一些读者认为小说不伦不类,感觉有些混乱,这可能是这本书评价不高的原因吧。
第1名,香蕉气吁吁《万界之从巨蟒开始》。
158万字的诸天万界流小说,主角重生为一条蟒蛇,还得到了一个系统。从此,主角一边努力赚取声望,一边快乐享受生活,小日子美滋滋。
很多异兽流小说,主角最终都会化形为人。但是本书没有化形的情节,既没有变龙也没有变人,这种写法对于老书虫来说,反而是一个优势。另外本书也没有女主,没错,既然写不好感情戏,还不如不写女主呢。
整体而言,这本书前中期精彩,后期剧情仓促,甚至有一些情节莫名其妙,有点可惜了。不管如何,这本异兽流小说还是让我打发了无聊的时间,感觉很不错。
朋友们有没有看过这些小说呢?大家还知道哪些好看的小说呢?欢迎留言哦。如果你喜欢看小说,也记得关注我哦。
欢迎大家关注晋圈
手表后盖一般都不会自己掉出来的,但是有的表友手表摔到了,后盖有就可能就摔出来,也有可能会翘边。或者有的表友要更电池,后盖自然也要拆了出来的。不过有的表友在掉出来后,却安装不进去。那么手表后盖要怎么盖上呢? 手表后盖怎么盖上也是要分后盖类型的,比较常见的有螺旋式和压盖式。螺旋式的后盖不是按进去的,后盖上有螺纹,就像螺丝拧进螺母里一样,螺旋的时候要注意与表平行。 手表后盖还有另一种就是压盖式的,这种后盖就是使用放外按进去的。最主要的是,后盖上一般会有个小开口,安装的时候需要对上手表的表冠。然后用巧劲,在表盖的不同地方用力,要按后盖的边缘,就能上去了。
不过手表的后盖都是很精密的,特别是防水手表,后盖更加精确,所以没有那么好按进去,需要一定的技巧,把四周平放,然后再同时用力,注意要受力均匀。
有的手表后盖确实不太好安装,如果自己实在搞不定的,可以送到维修店处理,一般都是不会收多少钱的,如果一定要自己处理,建议购买一个压表器。
图文来源于网络,如有侵权请联系删除!
往期回顾:
2019野外探险|请看豪利时最新Aquis Relief日历腕表!
怎么样的陀飞轮腕表才能让你成为夜店中的DANCING KING?
刚劲不凡 实拍香奈儿MONSIEUR DE CHANEL ÉDITION NOIRE腕表
随着科技的进步,现在家家户户大街小巷都是Wifi信号,所以无线基地已经成为生活中不可缺少的一环,但也因为这样无线干扰的情况,常常听到有人抱怨怎么无线又突然断线啦?我的wifi又连不上了?为什么无线上网速度越来越慢了?有时候明明信号超强,但就是无法连接?等等诸如此类的问题发生。那么,到底要怎么解决这类问题呢?今天我们来分享4个如何解决这些问题的小技巧。
1.手机重新启动Wifi
首先进入【设置】选项-找到Wifi设置页面,在设置里面把Wifi连线关闭,重新启Wifi连接,让手机自动搜索记忆的网络连接。
2.手机重设Wifi连线
在安卓手机里,在主画面找到【设置】选项,在Wifi选项里先检查是否已经开启,若是已经开启状态下能自动检测及连接记忆的无线网络名称。在这里先选择中断连接,接着长按这个无线网络名称,而且出现的窗口里选择清除网络(一定要记得网络名称)。然后再重新开启Wifi,并且重新搜索无线网络,找到上步骤移除的无线网络名称,再重新输入无线分享器的连接密码后连接。
3.检查手机是否启用DHCP设置
因为每个装置要上网,都必须具备一组IP,多数电信大都会提供无线Wifi分享功能的数据机并以DHCP(动态获取IP),自动虚拟出多组IP,也是常听到的虚拟IP。让无线网络的装置能够同时上网,也因为通常在数据机端,DHCP默认是开启的,所以遇到手机连不上Wifi或连上也无法上网时,可进一步检查手机端是否设为HDCP分配方式。
首先进入Wifi连接设置的页面,长按想要连接的无线网络名称。在出现的窗口里输入连接密码外,点击高级-勾选【DHCP】。找到IP设置,检查是否为【DHCP】,完成后按下连接。因为每个手机机型不一样,设置但也是大同小异的。
4.关闭Procy(代理服务器)连接设置
首先进入Wifi连接线设置的页面,长按想要连接的无线网络名称。在出现的窗口里找到【Procy】设置,如果出现【手动】则下拉选择【无】,然后回到设置页面。确定Procy为【无】之后,再按下【连接】。
好了,以上就是四种连接网络的方法,在连不上网的情况下,大家可以从第一种方法开始试。如果以上内容对你有帮助的话,记得点个赞哦,关注我,每天与你分享更多手机小技巧。
注:欢迎关注datawhale:https://datawhale.club/
系列:
知识图谱入门一:知识图谱介绍知识图谱入门2-1:实践——基于医疗知识图谱的问答系统知识图谱入门2-2:用户输入->知识库的查询语句知识图谱入门2-3:Neo4j 图数据库查询 一、知识图谱简介 1.1 引言 从一开始的Google搜索,到现在的聊天机器人、大数据风控、证券投资、智能医疗、自适应教育、推荐系统,无一不跟知识图谱相关。它在技术领域的热度也在逐年上升。
早在 2010 年微软就开始构建知识图谱,包括 Satori 和 Probase;2012 年,Google 正式发布了 Google Knowledge Graph,现在规模已超 700 亿。目前微软和 Google 拥有全世界最大的通用知识图谱,Facebook 拥有全世界最大的社交知识图谱,而阿里巴巴和亚马逊则分别构建了商品知识图谱。
图 1 业内布局
图 2 业内应用
本章以通俗易懂的方式来讲解知识图谱相关的知识、介绍从零开始搭建知识图谱过程当中需要经历的步骤以及每个阶段。本次组队学习还将动手实践一个关于kg在智能问答中的应用。
1.2 什么是知识图谱呢? 知识图谱是由 Google 公司在 2012 年提出来的一个新的概念。从学术的角度,我们可以对知识图谱给一个这样的定义:“知识图谱本质上是语义网络(Semantic Network)的知识库”。但这有点抽象,所以换个角度,从实际应用的角度出发其实可以简单地把知识图谱理解成多关系图(Multi-relational Graph)。
1.2.1 什么是图(Graph)呢? 图(Graph)是由节点(Vertex)和边(Edge)来构成,多关系图一般包含多种类型的节点和多种类型的边。实体(节点)指的是现实世界中的事物比如人、地名、概念、药物、公司等,关系(边)则用来表达不同实体之间的某种联系,比如人-“居住在”-北京、张三和李四是“朋友”、逻辑回归是深度学习的“先导知识”等等。
图 3 图(Graph)介绍
1.2.2 什么是 Schema 呢? 知识图谱另外一个很重要的概念是 Schema: 介绍:限定待加入知识图谱数据的格式;相当于某个领域内的数据模型,包含了该领域内有意义的概念类型以及这些类型的属性作用:规范结构化数据的表达,一条数据必须满足Schema预先定义好的实体对象及其类型,才被允许更新到知识图谱中, 一图胜千言 图中的DataType限定了知识图谱节点值的类型为文本、日期、数字(浮点型与整型)图中的Thing限定了节点的类型及其属性(即图1-1中的边) 举例说明:基于下图Schema构建的知识图谱中仅可含作品、地方组织、人物;其中作品的属性为电影与音乐、地方组织的属性为当地的商业(eg:饭店、俱乐部等)、人物的属性为歌手tips:本次组队学习不涉及schema的构建 图 4 Schema定义
1.3 知识图谱的价值在哪呢? 从图5中可以看出,知识图谱是人工智能很重要的一个分支, 人工智能的目标为了让机器具备像人一样理性思考及做事的能力 ->
在符号主义的引领下,知识工程(核心内容即建设专家系统)取得了突破性的进展 ->
在整个知识工程的分支下,知识表示是一个非常重要的任务 ->
而知识图谱又恰恰是知识表示的重要一环
一、pyecharts简介 pyecharts主要基于Web浏览器进行显示,绘制的图形比较多,包括折线图、柱状图、饼图、漏斗图
地图和极坐标图等。使用pyecharts绘图代码量很少,但绘制的图形比较美观。
pyecharts 分为 v0.5.X 和 v1 两个大版本,v0.5.X 和 v1 间不兼容,v1 是一个全新的版本
v0.5.X支持 Python2.7,3.4+,经开发团队决定,0.5.x 版本将不再进行维护,0.5.x 版本代码位于 05x 分支
v1仅支持 Python3.6+,新版本系列将从 v1.0.0 开始。
本文所讲主要基于 pyecharts 1.7.1 版本进行展示
安装命令为:
pip install pyecharts==1.7.1
二、pyecharts柱状图/条形图全解 1.基本柱状图/条形图 from pyecharts import options as opts from pyecharts.charts import Bar l1=['星期一','星期二','星期三','星期四','星期五','星期七','星期日'] l2=[100,200,300,400,500,400,300] bar = ( Bar() .add_xaxis(l1) .add_yaxis("基本柱状图", l2) .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")) ) bar.render_notebook() 参数介绍:
add_xaxis:添加横坐标,需传入列表
add_yaxis:添加纵坐标,需传入列表,切列表元素为数值
2.添加坐标轴名称 from pyecharts import options as opts from pyecharts.charts import Bar l1=['星期一','星期二','星期三','星期四','星期五','星期七','星期日'] l2=[100,200,300,400,500,400,300] bar = ( Bar() .
什么是后端渲染?什么又是前端渲染呢?后端渲染和前端渲染又有什么区别呢? 最近在学习Vue的时候接触到了这个话题,我觉得还挺有意思的,所以写下来,记下来。
一、什么是后端渲染? 我们都知道现在的网页都由html+css+js组成,但是在比较早的时候是没有js(JavaScript)的。所以那时候网页开发一般都是用html+css+jsp(java server page)/php来开发。我自学前端写的第一个算是有网络交互功能的东西(留言板)用的就是html+css+php来完成的(php代码的作用是从数据库中读取数据,并且把它动态的放在要渲染的页面上)。以我写的留言板为例,当我们从浏览器输入一个url的时候,浏览器会将我们输入的url发送到服务器上。当服务器拿到这个url的时候,服务器会进行解析然后在后台生成一个包含html+css+js+php的网页。这时候服务器端就已经生成一个最终的网页了,网页渲染好之后,就会把渲染好的网页直接传给浏览器(html+css+数据),这就是最终的网页了,这就是后端渲染。所以后端渲染简单的说就是,网页在服务器渲染完成,再返回给浏览器,网页是在服务器端进行渲染,而不是在浏览器端进行渲染。
我写的留言板用的是前后端分离,当然,我们也可以只用html+css+php来完成,也就是我们的后端渲染
早期的网页整个html都是服务器来渲染,服务器直接生产渲染好对应的html页面,返回给客户端进行展示
二、那么什么又是前端渲染呢? 在明白我们所说的后端渲染之后,其实大家很容易就能想到前端渲染是什么样的。在经历过比较早的阶段之后,随着Ajax的出现,就有了我们的前后端分离的阶段。这时候后端只提供API来返回数据,前端通过Ajax获取数据,并且可以通过JavaScript将数据渲染到页面中。举个例子,当我们从浏览器输入一个url的时候,浏览器会将我们输入的url发送到服务器上,然后再从服务器返回html+css+js(js代码由浏览器执行)。然后我们的客户端,也就是我们的浏览器再通过Ajax请求(API),然后服务器接收请求返回数据,浏览器接收到数据后再进行动态渲染,局部刷新页面,这就是我们的前端渲染。
我写的留言板用的是前后端分离,通过Ajax来动态获取数据进行渲染
三、后端渲染和前端渲染又有什么区别呢? 看到这里,想必大家都能明白了后端渲染和前端渲染的区别。在比较早的时候,后端程序员好像是比较辛苦的,又要写数据处理,又得写网页,而那时候的前端被戏称为“切图仔”,在当时开发分工是比较混乱的,维护起来也麻烦。来到了前后端分离阶段后,前后端责任分工开始清晰了起来,后端专注于数据上,前端专注于页面交互和页面的可视化。并且当移动端(ios系统,android系统)出现后,后端不需要进行任何处理,依然使用之前定的一套API就可以。
总结 随着技术的发展,网页开发也朝着越来越好,越来越精的方向走去。后端渲染和前端渲染的区别主要就是渲染的方式不同。(以上仅代表个人意见,新人一枚,如有错误,多多指正!如果觉得我写的还可以请大家多多点赞哦)
使用Turtle不只可以画线条,也可以将画出的封闭线条进行填充。
-设定填充色:fillecolor(r, g, b)
-开始填充:begin_fill()
-结束填充:end_fill()
画一组随机分布,随机大小和不同色调的心形。先初始化一个填充颜色。然后,在画每个图形绘制之前使用begin_fill()以及绘制之后使用end_fill()。这样就能得到一个填充效果。
相关推荐:《Python视频教程》import turtle as t
import random as r
def pink():
color = (1, r.random(), 1)
return color
def randomrange(min, max):
return min + (max- min)*r.random()
def moveto(x, y):
t.penup()
t.goto(x, y)
t.pendown()
def heart(r, a):
factor = 180
t.seth(a)
t.circle(-r, factor)
t.fd(2 * r)
t.right(90)
t.fd(2 * r)
t.circle(-r, factor)
t.setup(800, 800, 200, 200)
t.speed(9)
t.pensize(1)
t.penup()
for i in range(20):
t.goto(randomrange(-300, 300), randomrange(-300, 300))
根据之前的文章–VMware16安装Win10系统
执行到这里的步骤之后,
(1)找到win10 iso的安装文件"Windows 10 x64.vmx"
删除行: fireware=“efi”
修改行:vmci0.present = “FALSE”
(2)执行上述操作后,先不开启虚拟机,在虚拟机设置中CD/DVD的高级设置中选择IDE,再开启虚拟机。
需要在开启虚拟机,按住ESC键,才能进入到安装程序的界面,不然是进不到这个界面的哦。
傻瓜式安装各种win10 系统详细步骤如下(其他语言版本的操作系统的镜像安装亦是如此的):
开启后,看到这个界面,按ESC就可以进入安装了。
先不激活,安装完成后再用激活工具激活即可。
然后就静静地等待就好了
然后就点击下一步下一步就好了
附上之前我在网上下载的ISO镜像中发现,如果你下载的语言版本的ISO有问题也是不能进入到这个安装界面的呢!!!如下图所示:
不然就会出现 ttempting to start up from :
EFI UMware Uirtual NUIE Namespace (NSID 1) … No Media.
EFI UMware Uirtual IDE CDROM Driue (IDE 0:0) . … No Media .
EFT Network. . .
**下载的镜像有问题会出现如下错误:**需去正规或者https://msdn.itellyou.cn/ 下载镜像
Network bootf ronIntelE166Ee
opyr ight©2663-2618UMare,Inc.
Copyr ight©1997-20BBIntel Corporat ion
CLIENT MAC ADDR: 8 8cC 29 7C E8 B8GUID:564DFBD1-C411-6F49-21B3-9EFB2C7CE8B8PXE一E53: No bootf i lenamereceiued
代码
@Service public class SysNewsServiceImpl implements SysNewsService { private Logger logger = LoggerFactory.getLogger(SysNewsServiceImpl.class); @Autowired private SysNewsMapper sysNewsMapper; @Override @Transactional(rollbackFor=Exception.class) public void addSysNews(SysNews sysNews) { SysNews sysNews1 = new SysNews( "2", "2", 2, 2, new Date()); SysNews sysNews2 = new SysNews( "东风然后涂华军软件园ada法师法师发大事发生", "1", 1, 1, new Date()); SysNews sysNews3 = new SysNews( "3", "3", 3, 3, new Date()); SysNews sysNews4 = new SysNews( "4", "4", 4, 4, new Date()); SysNews sysNews5 = new SysNews( "
你可能遇到这样的需求,要详细记录用户的操作日志,像下面这样:
用户张三将年龄从“20”改为“21” 用户张三将爱好从“篮球”改为“足球” 通常,用户可以一次改多个字段,然后一次性保存,这些字段的数据修改记录要分别保存。
这样的日志需要知道以下数据:
用户修改了数据库中什么字段这个字段对应的中文名是什么这个字段原来的值是什么这个字段新值是什么 这几个问题里,1和4是闭着眼都能搞明白的。
问题2,字段的中文名可以用一个枚举类把英文和中文对应起来,但是如果字段很多的话,很繁琐,然后想起了注解,对字段添加注解,是否可以获取字段的中文意思呢?
问题3,这个字段原来的值我们也是知道的,但如何保存呢?我首先想到的是:用户修改时将修改前的旧值和新值从前端一起传过来,但是这样有安全问题,因为用户可以按F12在浏览器修改页面上的旧值,所以需要在修改前从数据库先查询出所有字段的旧值,然后与新值依次对比,从中找到用户修改了哪些字段。
网上搜索一番,看到这篇文章,得到启示,下面按文章思路实现,并加以改进。
自定义一个注解类来标注字段对应的中文。
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 字段中文别名 * @author test */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface FieldAlias { String value() default ""; } 然后,类需要记录日志的字段上加注解:
public class User { private int userId; @FieldAlias("姓名") private String name; @FieldAlias("年龄") private int age; @FieldAlias("爱好") private String hobby; public User(){ } public User(int userId, String name, int age) { this.userId = userId; this.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TqS8lfBK-1610349254003)(https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-exchange-hive-import-best-practice.png)]
摘要:本文由社区用户 xrfinbj 贡献,主要介绍 Exchange 工具从 Hive 数仓导入数据到 Nebula Graph 的流程及相关的注意事项。
1 背景 公司内部有使用图数据库的场景,内部通过技术选型确定了 Nebula Graph 图数据库,还需要验证 Nebula Graph 数据库在实际业务场景下的查询性能。所以急迫的需要导入数据到 Nebula Graph 并验证。在这个过程中发现通过 Exchange 工具从 hive 数仓导入数据到 Nebula Graph 文档不是很全,所以把这个流程中踩到的坑记录下来,回馈社区,避免后人走弯路。
本文主要基于我之前发在论坛的 2 篇帖子:
exchange 如何导入 hive 数据问题exchange 执行从 hive 导入数据报错 2 环境信息 Nebula Graph 版本:nebula:nightly部署方式(分布式 / 单机 / Docker / DBaaS):Mac 电脑 Docker 部署硬件信息 磁盘(SSD / HDD):Mac 电脑 SSDCPU、内存信息:16 G 数仓环境(Mac 电脑搭建的本地数仓): Hive 3.1.2Hadoop 3.2.1 Exchange 工具:https://github.com/vesoft-inc/nebula-java/tree/v1.0/tools/exchange 编译后生成 jar 包
参考博客
https://blog.csdn.net/Oudasheng/article/details/84994336
https://blog.csdn.net/wayjj/article/details/72809344#commentsedit
https://blog.csdn.net/Oudasheng/article/details/84994336
https://www.cnblogs.com/mahaitao/p/5572095.html
https://www.cnblogs.com/Horizon-asd/p/12723886.html
https://blog.csdn.net/chen10217/article/details/100762552
一、原理 1. 蚂蚁觅食行为 蚁群在寻找食物时,总能找到一条蚁穴到食物的最短路径,并且能随着环境的变化而更新最优路径。究其原因,是因为蚂蚁在运动过程中,会在所经过路径上留下一种称为信息素(pheromone)的物质,其他蚂蚁在运动中可以感知到这种物质,并以此来指导自己的运动方向。
蚁群的这种行为表现出一种信息正反馈现象:某一路径上走过的蚂蚁越多,则后来者选择该路径的概率越大。
2.蚁群算法 又称蚂蚁算法,是一种基于群体智能的算法,用来在图中寻找优化路径的概率型。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。在解决实际问题时,人工蚁群相较于自然蚁群有一定的记忆能力,可记住已访问过的节点,其次人工蚁群在选择路径时依照一定规律,并不是盲目的。蚁群算法常用来解决路径规划等离散优化问题,如旅行商问题(TSP)、指派问题、调度问题。
2,1 特点 正反馈:可较快发现较优解。分布式:基于种群的进化算法,本质具有并行性,易于并行实现。启发式搜索:反映搜索中的的先验性和确定性因素(如距离)强度。鲁棒性强:不易受某个个体影响。 2.2 算法流程(以TSP问题为例) TSP问题:一商人去n个城市销货,所有城市走一遍再回到起点,使所走路程最短。
初始化相关参数:蚁群规模、信息素因子、启发函数因子、信息素挥发因子、信息素常数和最大迭代次数等。将城市信息读入程序并进行预处理,即将城市间信息转化为矩阵。随机将蚂蚁放入不同出发点,计算每个蚂蚁的下一步要访问的城市,直到有蚂蚁访问完所有城市。计算每个蚂蚁经过的路径长度Lk,记录当前迭代次数下的最优解(访问完所有城市且路径长度最短),更新各条路径上的信息素浓度。断是否达到最大迭代次数,若否则返回步骤2,若是则顺序执行。输出最优路径和相关指标,如运行时间和迭代次数。 2.3 相关公式 2.4 流程图 三、例子 试设计一个并行算法,求下图中一个源点到其他定点的最短路径。(VS2019+Eigen)
3.1 关键代码 数据结构: 将蚂蚁设置为一个结构体,包含所在位置、禁忌表、所走路径和是否到达终点标志四项内容。为了便于计算,将信息素、启发信息与距离信息分别在8*8的矩阵中存放,这样可以调用Eigen库直接进行矩阵计算,达到更新信息素的目的。
城市也设为一个结构体,包含城市编号和选择概率两项内容。这里将城市设置为结构体,主要是考虑到在选择下一步行进城市时,要先计算选择概率再通过轮盘赌来确定下一步城市,轮盘赌时需要将城市编号与其选择概率一一对应。
具体代码部分如下:
struct ant //蚂蚁结构体 { int loc; //位置 int tabu[cityNum]; //禁忌表 int antPath[pathNum]; //走过的路 bool flag; //是否到达终点7 }; struct ant ants[antNum]; //蚁群 typedef Matrix<double, 8, 8> Matrix8d; Matrix8d dist; //距离矩阵 Matrix8d pher; //信息素矩阵 Matrix8d nextPher; //下一代信息素矩阵 Matrix8d insp; //启发信息矩阵 struct city //城市结构体 { int num; //编号 double prob; //选择概率 }; struct city cityProb[cityNum]; //可到达城市组 double lineCityProb[cityNum]; //线性化 可到达城市的选择概率 城市选择方式 当蚂蚁k选择下一步要去的城市时,有以下几个步骤:
使用.Net Core开发WPF App系列教程( 一、.Net Core和WPF介绍) 使用.Net Core开发WPF App系列教程 一、.Net Core和WPF介绍
二、在Visual Studio 2019中创建.Net Core WPF工程
三、与.Net Framework的区别
四、WPF中的XAML
五、WPF中的布局
六、WPF中的常用控件(上)
.Net Core介绍
.NET Core 是一个通用的开放源代码开发平台。 可以使用多种编程语言针对 x64、x86、ARM32 和 ARM64 处理器创建适用于 Windows、macOS 和 Linux 的 .NET Core 应用。 .Net Core为云、IoT、客户端 UI 和机器学习提供了框架和 API。
相比于.Net Framework,它有以下区别
1、开源,这也就意味着.Net Core的更新周期会比.Net Framework要短。
2、采用包化 (Packages) 的管理方式,根据应用程序决定需要什么包。应用程序只需使用Nuget获取需要的包即可。
3、跨平台(但这一点对WPF来说不适用,目前WPF还不支持跨平台)。
4、更加的现代化以及性能更高。
可访问以下链接获取详细的.Net Core介绍
https://docs.microsoft.com/en-us/dotnet/core/introduction
.Net Core支持使用C#、Visual Basic 和 F#语言来编写库和应用程序
在后面的文章中,会使用C#语言进行演示。如果你还不了解C#语言,可以访问以下链接进行学习
https://docs.microsoft.com/en-us/dotnet/csharp/
从.Net Core 3.0起,.Net Core支持开发桌面应用程序。包括WPF和Winform。
使用.Net Core开发WPF应用程序,需要Visual Studio 2019 16.
RedissonClient中提供了好多种锁,还有其它很多实用的方法。Redisson是Redis官方推荐的Java版的Redis客户端。实现了对数据的增删改查等操作。Redisson实现了RedissonClient的接口。这里只介绍其中的锁。
依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.10.7</version> </dependency> 重入锁 RedissonLock 重入锁可以通过Redisson的getLock方法获取
@Override public RLock getLock(String name) { return new RedissonLock(connectionManager.getCommandExecutor(), name); } /** * 获取锁-同一个线程可重入 * @param lockKey 锁的名称 * @param waitTime 获取锁的等待时间 * @param leaseTime 锁的持续时间 * @param unit 时间的单位 * @return 获取锁的结果 */ public Boolean tryLock(String lockKey, long waitTime, long leaseTime, TimeUnit unit) { RLock lock = redissonClient.getLock(lockKey); try { // 1. 最常见的使用方法 //lock.lock(); // 2. 支持过期解锁功能,10秒钟以后自动解锁, 无需调用unlock方法手动解锁 //lock.
使用 iCloud 的过程中,难免遇到有些文件夹你不希望同步。比如游戏制作,视频剪辑等的工程文件,iCloud 的持续同步机制会使得这些文件夹中的部分文件持续处于被上传且不可用状态。今天小编就给大家带来了阻止 iCloud 同步某个文件夹的方法,一起来看看吧!
解决方法
这时你只需要重命名你不希望同步的文件夹,给他的文件名加上一个「.nosync」即可。如下图,我们把这个东西叫做旗标,用来告知 iCloud 不要碰这个文件夹及其子文件。
如下图所示,标注后的文件夹会显示 iCloud 不可用,正是我们想要的。若你希望其再次同步,删除「.nosync」即可。右键快捷菜单
若你不想每次手动添加,我制作了一个工作流插件,自动重命名它。下载此工作流文件,将其拖动至「~/Library/Services」文件夹即可。
这时你会看到右键菜单中多出来一个「禁止同步」的选项,点击即可自动为该文件夹添加「.nosync」旗标以禁止同步。若要恢复其同步,同理重命名并删除旗标即可。写在文后
有些工程文件对文件名比较敏感,直接重命名根文件夹可能会导致一些文件查找错误,建议先在 iCloud 中创建一个禁止同步的文件夹,以后把你不希望同步的文件夹放在这里,更稳妥。
核心提示:使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。
使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。本文主要讲述如果使用这个PHP库。
启用 cURL 设置
首先,我们得先要确定我们的PHP是否开启了这个库,你可以通过使用php_info()函数来得到这一信息。
<?php
phpinfo();
?>
如果你可以在网页上看到下面的输出,那么表示cURL库已被开启。
如果你看到的话,那么你需要设置你的PHP并开启这个库。如果你是在Windows平台下,那么非常简单,你需要改一改你的php.ini文件的设置,找到php_curl.dll,并取消前面的分号注释就行了。如下所示:
//取消下在的注释
extension=php_curl.dll
如果你是在Linux下面,那么,你需要重新编译你的PHP了,编辑时,你需要打开编译参数——在configure命令上加上“–with-curl” 参数。
一个小示例
如果一切就绪,下面是一个小例程:
<?php
// 初始化一个 cURL 对象
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://cocre.com');
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 1);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 运行cURL,请求网页
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);
// 显示获得的数据
var_dump($data);
?>
如何POST数据
上面是抓取网页的代码,下面则是向某个网页POST数据。假设我们有一个处理表单的网址http://www.example.com/sendSMS.php,其可以接受两个表单域,一个是电话号码,一个是短信内容。
<?php
$phoneNumber = '13912345678';
$message = 'This message was generated by curl and php';
php教程
核心提示:php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。
php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。个人感觉最有用的就是ini_set和ini_get。
* ini_get():获取配置文件的选项值
这个函数相信很多人都使过,就是获取配置文件中某一个选项的值,如果是true值就返回1,如果是false值就返回0,字符串就返回字符串。
比如手册中的例子:
<?php
/*
Our php.ini contains the following settings:
display_errors = On
register_globals = Off
post_max_size = 8M
*/
echo 'display_errors = ' . ini_get('display_errors') . " "; //显示错误是否打开
echo 'register_globals = ' . ini_get('register_globals') . " ";//全局变量是否打开
echo 'post_max_size = ' . ini_get('post_max_size') . " ";//最多能提交的文件大小
echo 'post_max_size+1 = ' . (ini_get('post_max_size')+1) . " ";
?>
输出:
display_errors = 1
register_globals = 0
核心提示:PHP确实十分容易编写。但是PHP也有一些十分严重的缺陷。
我在过去的四年里一直致力于PHP应用的开发。PHP确实十分容易编写。但是PHP也有一些十分严重的缺陷。
下面我会给出我的理由,为什么PHP不适合于比小型业余网站更大的网站。
1. 对递归的不良支持
递归是一种函数调用自身的机制。这是一种强大的特性可以把某些复杂的东西变得很简单。有一个使用递归的例子是快速排序(quicksort)。不幸的是,PHP并不擅长递归。Zeev,一个PHP开发人员,说道:“PHP 4.0(Zend)对密集数据使用了栈方式,而不是使用堆方式。也就是说它能容忍的递归函数的数量限制和其他语言比起来明显少。”见bug 1901。这是一个很不好的借口。每一个编程语言都应该提供良好的递归支持。
2. 许多PHP模块都不是线程安全的
在几年前,Apache发布了Web服务器的2.0版。这个版本支持多线程模式,在这个模式下,软件一个一部分可以同时运行多个。PHP的发明者说PHP的核心是线程安全的,但是非核心模块不一定是。但是十次有九次,你想要在PHP脚本中使用这种模块,但这又使你的脚本不能合适Apache的多线程模式。这也是为什么PHP小组不推荐在Apache 2 的多线程模式下运行PHP。不良的多线程模式支持使PHP常被认为是Apache 2依然不流行的原因之一。
请阅读这篇讨论: Slashdot: Sites Rejecting Apache 2?.
3. PHP 由于商业原因而不健全
通过使用缓存,PHP的性能可以陡增500%[见基准测试]。那么为什么缓存没有被构建在PHP中呢?因为Zend——PHP的制造者,它在销售自己的Zend Accelerator,所以当然,他们不想抛弃自己的商业产品这块肥肉。
但是有另一个可选择的: APC. (Zend后来推出Zend Optimizer,免费的加速器——译者)
4. 没有命名空间
设想某个人制作了一个PHP模块用来阅读文件。模块中一个函数叫做read。然后另一个人的模块可以读取网页的,同样包含一个函数read。然后我们就无法同时使用这两个模块了,因为PHP不知道你要用哪个函数。但是有一个很简单的解决方法,那就是命名空间。曾经有人建议PHP5加入这个特性,但不幸得是他没有这么做。现在,没有命名空间,每个函数都必须加上模块名作为前缀,来避免名称冲突。这导致了函数名恐怖得长,例如xsl_xsltprocessor_transform_to_XML让代码难于书写和理解。
5. 不标准的日期格式字符
很多程序员对 日期格式字符都很熟悉,它是从UNIX和C语言中来的。其他一些编程语言采用了这个标准,但是很奇怪的,PHP有它自己的一套完全不兼容的日期格式字符。在C中,“% j”表示一年中的当天,在PHP中他表示一个月中的当天。然而使事情更混乱的是:Smarty (一个很流行的PHP模版引擎)的 strftime 函数和 date_format 函数,却使用了C/UNIX的格式化字符。
6. 混乱的许可证
你也许认为PHP是免费的,所有的在手册中提到的PHP模块也是免费的。错了!例如,如果你想在PHP中生成PDF文件,你会在手册中发现两个模块:PDF 和 ClibPDF。但是这两个都是有商业许可证的。所以,你所使用的每个模块,你都要确保你同意他的许可证。
转载请说明来源于"厦门SEO"
本文地址:http://www.96096.cc/Article/5837.html
本文来源中兴文档,小枣君略做改编。
众所周知,移动通信网络是一个非常庞大和复杂的系统。
在这个复杂的系统中,核心网又是其中最复杂的。
移动通信网络,包括无线接入网、核心网、承载网。
从入门到放弃,从删库到跑路,是无数核心网人心中的痛。
核心网工程师的演进
除了复杂之外,核心网还非常神秘。它通常藏在运营商的机房大楼中,戒备森严。
今天,为了揭开核心网的神秘面纱,小编翻出了全部家底,给大家带来了史上最全的核心网全家福!
2G核心网 2G时候的核心网,还只有打电话(CS域)的功能。
这是中兴2G核心网设备MSC(Mobile Switching Center,移动交换中心)
机房里通常是这样:
小枣君刚入行的时候,就捣鼓这些设备。
从图片能看出来,那时候的机框很大很宽,单板也没什么质感,但它撑起了我们移动通话的一片天。
3G核心网 3G最大的特点,是手机可以上网了。
通过这张网络,能够传递声音、数据、图像等多媒体业务。移动互联网的应用,开始出现。
其实,在2.5G的时候,我们手机就可以实现一些简单的数据业务,比如彩信、邮件收发。这些得益于核心网增加了PS域的功能。
硬件上也是发生了翻天覆地的变化——ZTE核心网的第三代平台出现了。
机框正面和背板:
一些细节图:
更有质感有木有?!
小枣君还有一张当年修单板的照片:
3G是小枣君捣鼓最多的设备。可以说,我见证了3G的发展壮大,而3G也同样见证了我的成长。
4G核心网 4G时代,网速更快,资费更便宜了。
其实在迈入4G之前,硬件平台已经提前升级到了第四代,其下有两种类型:
ATCA(Advanced Telecom Computing Architecture,先进电信计算架构)
T8000,SGW和PGW用的就是这个平台。
ATCA机框:
实物图:
V4机柜:
T8000机框:
实物图:
以下是T8000作为PGW的细节图:
说起来是增强型的硬件平台,但面对人民日益增长的需求,整体式网元结构显得力不从心。
业务一旦改动就很复杂,想增加什么新的大功能,要么增加单板要么增加模块,而且部署和运维的难度也很大。
有痛点就有改变!
在2016年,通信汪们开始琢磨起了虚拟化技术NFV(Network Function Virtualization,网元功能虚拟化)
这玩意最大的特点就是,可以让网元功能和运行硬件资源分离。
软硬件分离后也意味着,再也不用盯着一家的硬件用啦~只要是标准的x86服务器都可以用。
一代新人换旧人,新平台设备上线之后,老平台只能退位让贤。
被淘汰的旧设备
最终,难逃被拖走报废的命运。
报废的V4设备
5G核心网 5G了,3GPP宣称NFV合法了,喜大普奔,继续lu起袖子加油干,功能再多也不怕~
这时候的核心网网元逐渐向纯软件靠拢,演变成了一个个NF(Network Function,网络功能),可以运行在标准的IT服务器上。
而硬件平台则渐渐向云化数据中心演进,各家厂商专心做好硬件,努力提升硬件的性能,为5G网络提供了巨大的计算能力。
ZXCLOUD E9000
ZXCLOUD R5300 G3
ZXCLOUD R5300 G4
熬夜黑、血丝红、股票绿,都都都太有质感了吧!好看到无法呼吸~
这些,才是真正的高科技,真正的网络核心。
结语 回首2G到5G,翻看这些珍贵的照片,让我不免有些失落。设备是越来越先进了,可是,核心网人,也老了。
ABB机器人视觉IP地址设置方法参考
ABB机器人设备IP地址常规默认连接是192.168.125.1,与主机IP在同一网关即可连接,比如你的电脑或者其他设备可以写成192.168.125.2。连接需要机器人具有选项协议PC Interface功能。一般在选型时要进行考虑,后续也可以单独增加此选项。查看是否有这个选项在系统属性的控制模块点击选项即可。
关于视觉IP地址设置路径
在不同系统5版本和6版本中分别对应X启动和启动引导应用程序
备注:虚拟机不支持X启动,启动类型大体如下
重置系统
系统恢复到出厂设置,对应5.X版本中的I启动
重置RAPID
清除RAPID程序代码,对应5.X版本中的P启动
启动引导应用程序
进行系统IP设置及系统管理界面,对应5.X版本中的X启动
恢复到上次自动保存的状态
恢复到上次正常关机时的状态,对应5.X版本中的B启动
关闭主计算机
关闭主计算机,然后再关闭主电源,较为安全的关机方式
实际操作中选择启动引导应用程序或者X启动后进入系统设置界面
然后选择Setting进入IP设置界面,分为自动识别和自定义类型,类似电脑IP设置。
设置完成后进行验证。
更多信息
YAMAHA机器人故障视频案例(系统备份方法)
YAMAHA机器人E17故障排除案例参考
FANUC伺服焊枪压力标定参考
FANUC伺服焊枪零点标定参考
工业机器人伺服焊枪设置(FANUC详细完整)
工业机器人故障管理与预防性工作
ABB机器人码垛包位置调整参考
关于安川机器人平衡气缸故障现象
关于安川机器人平衡气缸维护要点参考
FANUC机器人故障 SRVO-062解除方法
FANUC机器人电机编码器分析(图解)
FANUC机器人负载手动设置方法参考
安川机器人并行IO分配 (查询)
工业机器人电气设计元件选取规则参考
安川电机与伺服放大器电路接线图
ABB机器人减速机漏油检漏测试
ABB机器人紧凑型控制柜内部结构(图)
KUKA机器人CCU板信号指示灯(从颜色判断状态)
工业机器人伺服电机故障分析
题目描述 输入一个仅包含+和-的数组,输出一个所有+在左边-在右边排序之后的数组,注意要在数组内进行排序
示例 输入:[‘+‘,’-‘,’-‘,’-‘,’+‘,‘+’]
输出:[‘+‘,‘+‘,‘+‘,’-‘,’-‘,’-‘]
思路一——遍历+交换位置 先把数组中所有的+的数量count(+)数出来,那就意味着数组前count(+)个元素都是+,所以遍历 前count(+)个元素,把里面-的与count(+)之后的+交换一次位置,代码如下
def sorted_string(string): for i in range(0,string.count('+')): if string[i] == '-': for j in range(string.count('+'), len(string)): if string[j] == '+': tmp = string[i] string[i] = string[j] string[j] = tmp break return string 思路二——结合桶排序思想 但是这个方法其实就不是在数组原本基础上进行修改了,这种方法需要新空间,只能确保最后输出排好序的顺序,放在这只是扩展下思路。
利用一个有序字典,里面按题目要求的顺序±来依次初始化两个元素,其中key为+、-,value为该字符在数组中出现的次数,最后遍历该字典进行打印,每个字符打印value个
from collections import OrderedDict def sorted_string(string): dic_tong = OrderedDict({ '+': 0, '-': 0, }) for s in string: dic_tong[s] += 1 for sub_string, num in dic_tong.items(): for i in range(num): print(sub_string, end=' ') 因为需要有序字典,所以引入了OrderedDict
1. MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
1.1 MVC 编程模式
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式
Model(模型)表示应用程序核心(如数据库)。View(视图)显示效果(HTML页面)。Controller(控制器)处理输入(业务逻辑)。 MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
2.MVP模式 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
优点
1、模型与视图完全分离,我们可以修改视图而不影响模型
2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部
3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)
缺点
由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。还有一点需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。比如说,原本用来呈现Html的Presenter现在也需要用于呈现Pdf了,那么视图很有可能也需要变更。
3.MVVM框架 MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
3.1 MVVM模式的组成部分 模型
模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。
视图
就像在MVC和MVP模式中一样,视图是用户在屏幕上看到的结构、布局和外观(UI)。
视图模型
视图模型是暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。
绑定器
声明性数据和命令绑定隐含在MVVM模式中。在Microsoft解决方案堆中,绑定器是一种名为XAML的标记语言。绑定器使开发人员免于被迫编写样板式逻辑来同步视图模型和视图。在微软的堆之外实现时,声明性数据绑定技术的出现是实现该模式的一个关键因素。
3.2 MVVM优点
MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点
计算机网络定义
计算机网络是一组自治计算机互连的集合
计算机网络基本功能
资源共享分布式处理与负载均衡综合信息服务 mac 地址 48位
数据链路层 局域网广域网
局域网 主要完成工作站、终端、服务器等在 较小物理 范围内的互联,只能解决局部资源的共享广域网 可以使相距遥远的局域网互相连接起来,远距离传输数据、语音、视频等,实现大范围的资源共享 局域网 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sUwtzop9-1610278582307)(C:\Users\21547\AppData\Roaming\Typora\typora-user-images\image-20210105011339366.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lr1mkRII-1610278582311)(C:\Users\21547\AppData\Roaming\Typora\typora-user-images\image-20210105011730740.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mn8DdkxQ-1610278582312)(C:\Users\21547\AppData\Roaming\Typora\typora-user-images\image-20210105011834959.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZDX9g8XE-1610278582315)(C:\Users\21547\AppData\Roaming\Typora\typora-user-images\image-20210105012024755.png)]
WLAN
802.11协议
无线覆盖原则:蜂窝式覆盖
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DvGs8sTw-1610278582317)(C:\Users\21547\AppData\Roaming\Typora\typora-user-images\image-20210105012345077.png)]
VLAN虚拟局域网 单臂路由 二层交换机+路由器 从而实现不通vlan间的相互通信
三层交换机 本质 带有路由功能的二层交换机
数据链路层&物理层 广域网 对应OSI 数据链路层、物理层
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-235LbAJL-1610278582319)(C:\Users\21547\AppData\Roaming\Typora\typora-user-images\image-20210109134409820.png)]
作用
基于电信运营商的通信网络设置建立 远程连接
远程局域网之间连接性
连接方式
运营商传输设备
专线方式 点对点
简单、范围广、延迟小
资源利用率低、价格昂贵
点到点永久性独占线路、固定带宽技术:异步模拟专线、同步数字专线链路层使用:SDLC、HDLC、PPP 电路交换方式 点对点
广域网交换机
拨号建立连接、独占线路、固定带宽技术:PSTN、ISDN链路层使用:PPP 分组交换方式 点对多
分组交换机
一个端系统设备通过 虚电路 连接到多个通信对端技术:X.25、帧中继、ATM 接口类型
设备: 调制解调器、同步CSU/DSU
接口线缆:
双绞线、RJ-xx、RS-xx、X.21、V.xx
HDLC **只支持同步 只支持点到点 无验证不安全 不支持IP地址协商 **
面向比特、透明传输、标准HDLC不支持多协议
HDLC设备以 轮询时间间隔 为周期,向链路发送Keepalive信息,检测对端设备是否存在 (同一链路两端设备 轮询时间 应相同
常用命名 系统界面 设备名称 sysname 欢迎提示信息 header 用户界面 IPV6 配置接口 自动生成链路本地地址 [] int g 0/0 [g0/0] ipv6 address anto link-local 配置全球单播地址 [] int g0/0sd [g0/0] ipv5 add 3001::1/64 查看ipv6 端口 [] dis ipv6 int g 0/0 brief 查看路由器邻居信息 [] dis ipv5 neighbors all Telnet 开启telnet [] telnet server enable 用户界面 设置验证方式 vty界面一共支持5个用户同时 [] line vty 0[开始num] 4[结束num] 第一种 登录不验证 [line-vty-0-4] authentication-mode none 第二种 远程登录 密码验证 [line-vty-0-4] authentication-mode password [line-vty-0-4] set authentication password simple 123 第三种 用户名+密码验证 [line-vty-0-4] authentication-mode scheme [line-vty-0-4] user-role network-oprator [line-vty-0-4] quit [] local-user xxx [luser-xxx] password simple 123 [luser-xxx] service-type telnet [luser-xxx] authorization-attribute user-role network-operator ssh [] ssh server enable [] line-vty 0 4 [line-vty-0-4] authentication-mode scheme [line-vty-0-4] protocal inbound ssh [line-vty-0-4] quit [] local-user aaa [luser-aaa] password simple 123 [luser-aaa] service-type ssh [luser-aaa] authorization-attribute user-role network-opterator 创建公钥 [] public-key local create rsa FTP 配置路由器为 FTP服务端
一、汉化 1、首先打开软件,软件默认是英文配置状态,如图所示:
2、使用快捷键:【Ctrl+Shift+P】,进入如下界面。
3、然后在弹出的界面中,输入【configure language】,然后选择【install additional languages】,选择需要安装的语言包。
4、如需安装中文,点击install即可:
5、安装完毕,再按照前面步骤2跟3一样,进入到搜索栏,输入【configure language】,然后选择【zh-cn】即可(安装完毕后重启生效):
二、设置跳转到函数定义 1、可以先安装一下对应代码的相关插件,我不确定是否这些扩展插件会有影响。输入【C/C++】,然后点击install。
2、安装完毕插件后,按照以下点击,然后选择【Extension Settings】。
3、然后清空搜索栏,并在搜索栏输入【go to definition】,并找到下边两个选项,将他改成goto即可。
cmake自己写库的modules文件 cmake自己写库的modules文件 cmake自己写库的modules文件 最近在做海思的平台,用到了一些第三方库,比如glog、gflag等。我们都知道cmake可以自己去通过find_package来查找相应的库,我也是被逼自己写modules-config.cmake文件。
find_package的原理和使用方法,网上有一大堆,我就不再废话了,我还是以glog为例,来进行说明。
我们在做嵌入式的时候,经常要自己编译一些库文件,然后指定一个安装路径,我现在编译了glog然后,安装到了install目录中,目录结构如下图所示。这里面是没有可供find_package来使用的<Module>-config.cmake文件的,
测试用的main.cpp很简单,如下
int main(int argc, char* argv[]) { // Initialize Google’s logging library. google::InitGoogleLogging(argv[0]); while(1){ LOG(ERROR) << "Found " << "1111" << " cookies"; } } 只是简单的打印一条log信息。
顶层的CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.15) project(glog_test C CXX) add_executable(${PROJECT_NAME} main.cpp) set(glog_DIR ${CMAKE_CURRENT_LIST_DIR}/third_party) find_package(glog REQUIRED) target_link_libraries(${PROJECT_NAME} PRIVATE glog::glog) 这里面重要的是glog_DIR的设置,这个路径是glog-config.cmake文件存在的路径。find_package函数会到这个路径下寻找<Module>-config.cmake或<Module>Config.cmake文件。找到后,就进行加载。看到target_link_llibraries这个里面写的是glog::glog,这个是库的别名,叫符合 现代CMake的写法,下面的代码会说道。
再来看glog-config.cmake文件,
add_library(glog::glog STATIC IMPORTED) set_target_properties(glog::glog PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/lib/libglog.a INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/include ) 这里面也很简单,目前的写法,是适应最新的target方式的写法,使用add_library添加一个target,这个target是引用一个库,库的类型是静态的类型,使用IMPORTED创建的target,cmake不会给他添加编译功能,再接下来,就是设置target的相关属性,对于链接一个库来说,最重要的两个方面,其实就是对应的头文件在什么地方,和库文件在什么地方,所以set_target_property里面,就只是设置了这两个内容。代码都在压缩包里面 https://download.csdn.net/download/aifei7320/14093750
传统计算机 对于传统的计算机来说,1 个 bit 是信息的最小单位。它要么是 0,要么是 1,对应于电路的开或关。假如一台计算机读入了 10 个 bits 的信息,那相当于说它读入了一个 10 位的2进制数(比方1010101010),这个数的每一位都是一个确定的 0 或者 1。
量子计算机 假如我们的信息由一个个电子来传输,我们规定,当一个电子是“左旋”的时候,它代表了 0,当它是“右旋”的时候,则代表 1(通常我们会以“上”和“下”来表示自旋方向)当我们的电子到达时,它是处于量子叠加态的。也就是说,它同时代表了 0 和 1。
在我们的量子计算机里,一个 bit 不仅只有 0 或者 1 的可能性,它更可以表示一个0和1的叠加!一个“比特”可以同时记录0和1,我们把它称作一个“量子比特” (qubit)。
假如我们的量子计算机读入了一个 10bits 的信息,所得到的就不仅仅是一个 10 位的二进制数了,事实上,因为每个 bit 都处在 0 和 1 的叠加态,我们的计算机所处理的是 2 10 2^{10} 210 个10位数的叠加!
换句话说——同样是读入10bits 的信息,传统的计算机只能处理1个10位的二进制数,而如果是量子计算机,则可以同时处理 2 10 2^{10} 210个这样的数!
传统计算机如何转为量子计算机? 那就是我们理论上可以建造一种机器,它可以模拟任何特殊量子计算机的过程,从而使得一切形式的量子计算成为可能。传统的电脑处理信息流的时候用到的是所谓的“布尔逻辑门”(Boolean Logic Gate),比如 AND,OR,NOT,XOR 等等。在量子计算机中只需把它们换成相应的量子逻辑门即可。
一台量子计算机有什么好处呢? 量子计算机无法实现超越算法的任务,也就是说,它无法比普通的图灵机做得更多。
从某种确定的意义上来说,量子计算机也是一种图灵机。但和传统的机器不同,它的内态是不确定的,它同时可以执行多个指向下一阶段的操作。
如果把传统的计算机称为决定性的图灵机(Deterministic Turing Machine, DTM),量子计算机则是非决定性的图灵机(NDTM)。
它将具有比传统的计算机大得多的效率。
用术语来讲,执行同一任务时它所要求的复杂性(complexity)要低得多。理由是显而易见的,量子计算机执行的是一种并行计算,正如我们前面举的例子,当一个 10bits 的信息被处理时,量子计算机实际上操作了 2 10 2^{10} 210个态!
知识图谱介绍 目录 知识图谱介绍一、知识图谱简介1.1 引言1.2 什么是知识图谱呢?1.2.1 什么是图(Graph)呢?1.2.2 什么是 Schema 呢? 1.3 知识图谱的价值在哪呢? 二、怎么构建知识图谱呢?2.1 知识图谱的数据来源于哪里?2.2 信息抽取的难点在哪里?2.3 构建知识图谱所涉及的技术?2.4、知识图谱的具体构建技术是什么?2.4.1 实体命名识别(Named Entity Recognition)2.4.2 关系抽取(Relation Extraction)2.4.3 实体统一(Entity Resolution)2.4.4 指代消解(Disambiguation) 三、知识图谱的存储四、Neo4J 介绍与安装4.1 引言4.2 Neo4J 下载4.3 Neo4J 安装4.4 Neo4J Web 界面 介绍4.5 Cypher查询语言 五、Neo4J 实战5.1 引言5.2 创建节点5.3 创建关系5.4 创建 出生地关系5.5 图数据库查询5.6 删除和修改 六、通过 Python 操作 Neo4j6.1 neo4j模块:执行CQL ( cypher ) 语句6.2 py2neo模块:通过操作python变量,达到操作neo4j的目的 七、通过csv文件批量导入图数据参考资料 一、知识图谱简介 1.1 引言 从一开始的Google搜索,到现在的聊天机器人、大数据风控、证券投资、智能医疗、自适应教育、推荐系统,无一不跟知识图谱相关。它在技术领域的热度也在逐年上升。
早在 2010 年微软就开始构建知识图谱,包括 Satori 和 Probase;2012 年,Google 正式发布了 Google Knowledge Graph,现在规模已超 700 亿。目前微软和 Google 拥有全世界最大的通用知识图谱,Facebook 拥有全世界最大的社交知识图谱,而阿里巴巴和亚马逊则分别构建了商品知识图谱。
点击上方“计算机视觉工坊”,选择“星标”
干货第一时间送达
[GiantPandaCV导语] 本文介绍了一种使用c++实现的,使用OpenVINO部署yolov5的方法。此方法在2020年9月结束的极市开发者榜单中取得后厨老鼠识别赛题第四名。2020年12月,注意到yolov5有了许多变化,对部署流程重新进行了测试,并进行了整理。希望能给需要的朋友一些参考,节省一些踩坑的时间。
模型训练 1. 首先获取yolov5工程 git clone https://github.com/ultralytics/yolov5.git 本文编辑的时间是2020年12月3日,官方最新的releases是v3.1,在v3.0的版本中,官网有如下的声明
August 13, 2020**: v3.0 release(https://github.com/ultralytics/yolov5/releases/tag/v3.0): nn.Hardswish() activations, data autodownload, native AMP.
yolov5训练获得的原始的模型以.pt文件方式存储,要转换为OpenVINO的.xml和.bin的模型存储方式,需要经历两次转换.
两次转换所用到的工具无法同时支持nn.Hardswish()函数的转换,v3.0版本时需要切换到v2.0版本替换掉nn.Hardswish()函数才能够完成两次模型转换,当时要完成模型转换非常的麻烦.
在v3.1版本的yolov5中用于进行pt模型转onnx模型的程序对nn.Hardswish()进行了兼容,模型转换过程大为化简.
2. 训练准备 yolov5官方的指南: https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data
描述信息准备 在yolov5的文件夹下/yolov5/models/目录下可以找到以下文件
yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
这三个文件分别对应s(小尺寸模型),m(中尺寸模型)和l(大尺寸模型)的结构描述信息
其中为了实现自己的训练常常需要更改以下两个参数
nc
需要识别的类别数量,yolov5原始的默认类别数量为80
anchors
通过kmeans等算法根据自己的数据集得出合适的锚框. 这里需要注意:yolov5内部实现了锚框的自动计算训练过程默认使用自适应锚框计算.
经过实际测试,自己通过kmeans算法得到的锚框在特定数据集上能取得更好的性能
在3.执行训练中将提到禁止自动锚框计算的方法.
数据准备 参考官方指南的
Create Labels
Organize Directories
部分的数据要求
注意标注格式是class x_center y_center width height,其中x_center y_center width height均是根据图像尺寸归一化的0到1之间的数值.
3. 执行训练 python ~/src_repo/yolov5/train.py --batch 16 --epochs 10 --data ~/src_repo/rat.yaml --cfg ~/src_repo/yolov5/models/yolov5s.
有时候有的项目要求很苛刻,有的需要CUDA>9.0,有的又要CUDA>10.0…无可奈何只能安装多个CUDA
文章目录 环境配置CUDA下载安装(已存在一个)cuDNN下载安装环境变量配置测试 环境配置 CUDA9.2,cuDNN7.1.4
想了解如何配置正确的环境,避免包版本的冲突,可以到这里了解一下conda下载各种包时如何避免版本不匹配问题
CUDA下载安装(已存在一个) gpu版pytorch安装教程,这里讲解了如何安装CUDA,如果我们想再装一个不同版本,继续看下去…
CUDA下载直达链接找到自己想要装的版本,之前我装了个CUDA 10.1,现在要装CUDA9.2
默认大家已经会装CUDA了,细节我不复述了,如果还有不明白的可以去看上面那个GPU版本的pytorch安装教程,里面详细讲述如何装CUDA。
下载完双击安装…还是选择自定义安装啊,到这里只勾选CUDA就行了。否则你下的CUDA如果比你已有的版本低,这些就会给你降级了。
同样记住下目录,我猜这些目录你不会陌生…
cuDNN下载安装 cuDNN下载直达链接
cuDNN步骤一模一样,还是把解压缩出来的文件复制到CUDA安装目录下对应的地方。你会发现cuDNN7.1.4的东西比8.0.4的少很多…不用担心,正常~~~
环境变量配置 因为我们之前只装了一个CUDA,所以每条路径只设置一个就行了,现在多了一个CUDA,要加以区分
相当于一式两份,细心就好…
在Path里面同样一式两份…
测试 重启电脑!!!
重启电脑!!!
重启电脑!!!
然后你能看到这么多环境变量…
最后分别对v10.1(原来的版本)和v9.2分别测试,看到4个Result = PASS(一个版本测两次),恭喜你!!!
不同版本的CUDA使用时不需要手动切换,只要环境变量PATH中有相应的CUDA路径即可。在运行项目,需要用到CUDA时会自动在环境变量中寻找合适的CUDA版本,直到找到为止,如果没有,则会报错。
收藏加点个赞呗~~~
参考https://blog.csdn.net/qq_27825451/article/details/89135592
Windows下使用Mysql Installer 安装和配置mysql环境 用这个方法的原因是,电脑之前配置的mysq时隔几个月再运行报错了,启动不了mysql服务器,所以选择用另一种更简单的方式重装mysql。
一、进入官网的下载页面,点击下图里的选项进行下载,时间较长,耐心等待
https://dev.mysql.com/downloads/
二、检查系统中是否已经安装mysql
注:如果系统中已经安装过MySQL,建议完全卸载之后重新安装。
1、关闭MySQL服务
右击【计算机】,选择【管理】,打开“计算机管理”界面,选择【服务和应用程序】中的【服务】,在右侧找到【mysql】,右键,选择【停止】
2:卸载mysql软件,在控制面板中卸载
步骤3:删除MySQL在电脑硬盘上物理位置上的所有文件
1、卸载该目录下的所有文件夹C:\Program Files\MySQL\MySQL Server 8.0
2、删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL文件夹,如果没有可以不用删除了。
3、删除C盘下的C:\ProgramData\MySQL 所有文件,该programData文件是隐藏的默认,设置显示后即可见
注意!删除C:\Documents and Settings\All Users\Application Data\MySQL下的文件夹,一定要删干净 4:MySQL的注册表信息
注:这步是最繁琐的也是最为关键的,很多人就是因为在这步骤中没有清理干净注册表信息,从而不能重新安装成功。CTRL+R 右击以管理员身份运行删除注册表:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹
这样就全部删除了!!
三、开始安装
1.执行安装包
执行安装包之后,会有一些安全通知提醒,同意即可,接下来同意授权许可,继续下一步。
https://blog.csdn.net/weixin_40094622/article/details/88596384
后面参考这篇博客,按步骤来细心一点就不会出错啦~
https://blog.csdn.net/weixin_40094622/article/details/88596384
------来源网络,侵删
数学看上去枯燥无味,其实不然,掌握正确的学习方法,我们就能做到快乐学数学。学好数学大致能分为三个步骤:第一,梳理好知识点;第二,学好各种题型;第三:针对所学知识训练巩固。
现在我们来看今天要学的内容,先看下边对数函数的图象及性质的思维导图:
接着我们针对着对数函数的图象及性质展开来讲,首先是知识梳理:
知识点一 对数函数的概念
知识点二 对数函数的图象与性质
知识点三 反函数
接着是题型分类:
题型一 对数函数的概念
题型二 对数函数的图象
反思与感悟 对数函数图象特点:
(1)底数大于1,图象呈上升趋势;底数大于0小于1,图象呈下降趋势.
(2)在第一象限,各图象对应的对数函数底数顺时针增大.底数越小,在第一象限图象越靠近y轴;底数越大,在第一象限图象越靠近x轴.
反思与感悟 求解对数型函数过定点问题,一般先令真数等于1,求出横坐标x,再求出纵坐标值y,即可得定点坐标.
题型三 对数函数的定义域
反思与感悟 求与对数函数有关的函数定义域时,除遵循前面已学习过的求函数定义域的方法外,还要对这种函数自身有如下要求:一是要特别注意真数大于零;二是要注意对数的底数;三是按底数的取值应用单调性,有针对性地解不等式.
题型四 对数函数与指数函数的反函数
反思与感悟 1.同底的对数函数与指数函数互为反函数.
2.互为反函数的两个函数图象关于直线y=x对称.
最后是试题训练,并附上答案及解析:
希望大家都有所收获,也请大家关注我,之后还有精彩内容哦!
文章目录 DependenciesDevDependenciesPeerDependencies参考 Dependencies 首先dependencies是大家最常用的,比如项目依赖了vue,那么vue就是dependencies,这里的依赖是会被最终构建到部署环境的
// 将会保存到dependencies中 npm install vue --save // 或者不写--save也可以,默认就会到dependencies中 npm install vue // 再简单一些 npm i DevDependencies 与之相对的是devDependencies,他是开发过程中的依赖,比如eslint,不可能线上压缩的代码包含eslint,所以显然他应该放入devDependencies。
npm install eslint --save-dev // 或者 npm install eslint -D 其实如果是node.js开发,这一点就更明显,因为项目发布的时候并不会编译代码,构建的过程就是安装依赖的过程,而安装依赖会指明--production参数
npm install --production 使用这个参数意味着只安装dependencies,因为显然生产环境(dependencies)不需要开发环境(devDependencies)的依赖。
所以如果一不小心把某个生产环境的依赖写到devDependencies中,那么显然发布之后会引用不到这个依赖。
PeerDependencies 最后,peerDependencies相对难理解一些,但明确了使用的场景也同样很简单。
假设我们的项目使用了vuex作为状态管理器。不知道大家有没有注意,vuex并没有dependencies。虽然我们都知道vuex一定会依赖vue。可以直接点开这里看下vuex的依赖。
之所以vuex这样做,因为vuex知道你如果要使用他,就一定也会使用vue,所以他也就不会在dependencies中写入。事实上,这种情况是非常多的,尤其是对于插件而言,比如webpack,babel,eslint等等他们的插件都知道使用者一定会提供宿主自身(host)。
当然,插件仍旧是需要指明他所依赖宿主的版本号,而且他们往往对宿主环境依赖的版本号有更准确的要求。因为他们一般更可能会使用底层的api,而这些api可能在某一次minor或者patch的版本的升级中改变了。
为此,peerDependencies就派上用场了。
下面是vuex的package.json中的peerDependencies,显然他指明了自己希望的宿主vue版本号。
"repository": { "type": "git", "url": "git+https://github.com/vuejs/vuex.git" }, "homepage": "https://github.com/vuejs/vuex#readme", "peerDependencies": { "vue": "^2.0.0" }, 如果我安装了上述版本vuex之后,再安装vue3.0,就会报出一个警告:
yarn add vue@next yarn add v1.22.5 [1/4] Resolving packages... [2/4] Fetching packages.
郝老师 好园长 一所幼儿园如何才能发展起来?
幼儿园最重要的是什么?
当然是办园特色!
如今特色办园已成为幼儿园的核心竞争力之一!
在和园长和幼儿园管理者的沟通中,如何建设特色幼儿园是他们提的最多的问题,那么幼儿园该如何创建属于自己的园所特色呢?
创建特色幼儿园,要求幼儿园领导班子着眼于幼儿园的全局工作,面向市场、面向社会、面向未来确定自己的整体优势或特色,集中全体教职员工的智慧,就幼儿园的发展方向、办学目标、发展战略、具体措施等问题进行全面、系统的谋划,并通过制定科学、合理、高效的创建特色行动方案,建立动态控制创建特色的全过程,才能取得教育的最佳境界和效益,办出幼儿园的特色来。具体包括:
1.把握方向,构建自己的特色理论
幼儿园教育是基础教育的基础,应以全面提高幼儿的身心素质为根本目的,幼儿园特色建设自然不能偏离这一指导思想。机械训练、过早定向培养,以及缺乏科学支撑的所谓实验都是与这一思想相悖的。因此,幼儿园在创建特色的过程中,应以《幼儿园教育指导纲要(试行)》精神为指导,这是构建特色幼儿园的方向。
有理论指导的实践才不会是盲目的实践。一所幼儿园要办出自己的特色,必须用理论来牢固幼儿园创建特色的根基,以新的视野和新的理念去解决创建特色的过程中可能出现的问题。这就要求园领导和全体教职工吸收先进的教育思想和教育理念,并能根据教育改革与发展的趋势,不断丰富和完善自己的“特色理论”,保证幼儿园创建的特色具有旺盛的生命力。
2.认清自己,准确定位
在创建特色的过程中同样必须从幼儿园的环境、师资队伍、设施设备、幼儿园历史、信誉度等方面人手,分析自己方方面面的情况,如分析师资队伍就可以分折本同领导班子和教师有哪些优势不足。一般来说,幼儿园所期望的特色,若与同领导班子和大部分教师的专业能力、专长取向一致或相近,那么创建特色的工作就容易见到成效。再如,分析幼儿园的环境可以从本园条件、所处的地域特点、社会经济文化背景出发,充分挖掘、合理利用这些资源。
另外,许多幼儿园建园几十年,具有不少优秀的传统,这些都是优质的资源。如果我们能用今天的眼光处理好继承与创新的关系,重新挖掘历史中有生命力的、积极的东西,取其精华,使之自然地、有机地融入现在,并不断加以丰富完善,就有可能形成自己鲜明的特色。
3.努力创新,力求形成自己的文化
一所特色幼儿园真正有别于其他幼儿园的特点,说到底是其个性文化一办园特色从根本上不是花样。而是长时间形成的具有文化特性的幼儿园的“性格”。因此,积淀幼儿园的文化底蕴,是形成特色的关键。
加强幼儿园的文化建设应做好以下几方面的工作:
明确幼儿园文化建设的方向。园长首先要成为“教育思想的领导者”,正确认识和把握教育改革中的热点和难点问题,在先进理论的指导下,亲历幼儿教育改革的实践,通过实践逐渐形成鲜明的办园思想。在现代教育发展共性与幼儿园个性之间寻找结合点,找到幼儿园特色的文化立足点。
形成幼儿园共同的价值观,共同价值观主要体现在两个方面:一是园长的先进办园理念能得到全体教职工的广泛认同,二是先进的理念能够转化为全体教职员工的自觉行动。开展幼儿园全方位的教育改革,加强实践研究是促进这一组织目标实现的有效手段。特别是立足于幼儿园自身实践的园本研究,其目的不仅在于改进教学,提高教师专业化水平,还在于形成一种积极研习的教研文化,形成幼儿园共同的价值观。
4.升华自我,注重自身形象
幼儿园特色不是由口号、标语、广告堆砌起来的。它融化在幼儿园上下的一举一动、一言一行之中,体现在教育教学每个环节中。幼儿园一方面必须注重向内挖潜,提高办园质量,另一方面要注重市场营销,不断升华自我。现代社会是一个竞争的社会,这种竞争已经渗透到了社会的方方面面,教育领域同样如此。
为此,幼儿园要善于从社会的角度设身处地地思考,倾听家长的心声,及时了解教育“市场”和社会的需要,通过新闻媒体宣传、召开推介会(如家长会)等多种形式,加大宣传力度,以树立良好的社会公众形象。在此基础上,幼儿园要从专业、科学的角度去引导家长的需求,将幼儿同特色所蕴含的价值、文化、理念在实施、传播的过程中与其消费者——家长沟通,与家长一起,共同促进儿童富有个性的发展。
幼儿园的特色建设不是一朝一夕就可以完成的,需要幼儿园去进行长时间的积淀。近几年,受政策的影响,幼儿园正面临一场大的变局,那么在变局中如何守住本心,形成自己的幼儿园特色呢?
下载好园长社区APP
为幼教人赋能,让办园更轻松!
昨天在linux系统中训练数据时,训练到最后一步了,发现总是卡在那里,最后出现 killed 的信息,本来以为是代码有问题,后面发现是程序被系统给 kill 了,原因是内存不足。这是因为Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。
为了解决这个问题,我选择将占用内存较大的且不需要的进程给kill掉,将内存释放。
查看系统日志,可以看到被kill掉的进程的信息
# egrep -i -r 'killed process' /var/log 首先查看内存使用情况,从下图中可以看到最后一项可使用的内存还有2.9G
# free -h 接下来可以查看一下所有进程的信息,使用ps命令——查看静态的进程统计信息,下图中的PID代表的是进程的ID,PPID则是父进程的ID,SZ则是该进程所使用内存大小
# ps -elf 最后就是杀死进程了
# kill -9 PID
Charles下设置SSL代理 【软件名称及版本】:Charles 4.6.1
1、Proxy Settings
工具栏–Proxy–Proxy Settings
设置监听的端口,端口号可随意设置,尽量选择可自由使用的端口号,本次测试我用的是8080端口
2、SSL Proxying Settings
工具栏–Proxy–SSL Proxying Settings
启用SSL代理,添加监听规则,其中【*: *】代表监听所有IP地址的所有端口
3、安装证书
工具栏–Help–SSL Proxying–Install…不是手机那个(原谅我的懒惰,但我相信您看的懂的)
4、手机端安装证书
工具栏–Help–SSL Proxying–Install…这次是手机那个(原谅我的懒惰,但我相信您看的懂的)
这里会有提示,首先将手机的网络设置,添加手工代理,IP和端口号分别指向下图箭头所示。值得一提的是,现在的安卓系统,由于版本过高,做了相关的代理限制,不再信任外部导入的证书,所以基本搞不了,除非把安全策略给注释掉,相当的麻烦。
1.首先 设置好手机的charles代理 172.16.xxx.xxx 8888
2.要使用 打开非自带浏览器(夸克/QQ/UC手机浏览器都行) 访问 http://charlesproxy.com/getssl 或者弹窗提示的那个网址(下载到一个你能找到的目录,此时下载的是个.pem 格式的,需要手动更改为.crt 格式)
3.系统设置→更多设置→系统安全→加密与凭据→从存储设备安装
在这我要吹下大法的手机,安装证书不用像其他教程那样繁琐,舒服了
参考文章01
SHGetSpecialFolderPath函数检索由其CSIDL标识的特殊文件夹的路径。
所在头文件#include <shlobj.h>
#pragma comment(lib, "shell32.lib") 函数原型:
BOOL SHGetSpecialFolderPath( HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate ); 参数:
hwndOwner:如果显示对话框或消息框,窗口的句柄,可用GetDesktopWindow API取一个窗口句柄或直接传NULL。
lpszPath:存放路径信息的缓冲区。这个缓冲区的大小必须至少为MAX_PATH字符。
nFolder:标识要查询的文件夹的CSIDL。
fCreate:指示如果文件夹不存在,是否应该创建它。如果该值为非零,则创建文件夹。如果该值为零,则不创建文件夹。
返回值:
对于Windows Mobile 2003及以后版本,如果成功则返回TRUE,否则返回FALSE。对于Windows Mobile 2002和更早的版本,即使成功也返回FALSE。如果nFolder参数表示的文件夹不存在且未创建,则返回一个空字符串,表示该目录不存在。
注:许多文件夹经常被应用程序使用,但在任何给定的系统上可能没有相同的名称或位置。CSIDL值提供了一种独立于系统的方式来标识这些特殊的文件夹。这些值取代了为此目的而使用的环境变量。
示例:
char Path[MAX_PATH] = { 0 }; SHGetSpecialFolderPath(0, LQ_logPath, CSIDL_DESKTOPDIRECTORY, 0); //获取当前用户桌面路径 常用的路径标识CSIDL:
CSIDL_DESKTOPDIRECTORY($10) 表示当前用户的“桌面”文件夹,例如:C:\Documents and Settings\username\Desktop
CSIDL_DRIVES($11) 表示“我的电脑”虚拟文件夹,包含了计算机中所有的驱动器
CSIDL_FAVORITES($6) 表示当前用户的“收藏夹”文件夹,例如:C:\Documents and Settings\username\Favorites
CSIDL_FONTS($14) 表示“系统字体”文件夹,例如:C:\WINNT\Fonts
CSIDL_HISTORY($22) 表示Inernet Explorer的“历史记录”文件夹
CSIDL_INTERNET($1) 表示Internet的这个虚拟文件夹
CSIDL_INTERNET_CACHE($20) 表示当前用户的Internet Explorer的"Cache"文件夹,例如:C:\Documents and Settings\username\Temporary Internet Files
CSIDL_LOCAL_APPDATA($1C) 表示当前用户的应用程序数据文件夹,例如:C:\Documents and Settings\username\Local Settings\Application Data
点击蓝字关注我们
精品主题
01
主题信息
主题名称 : 【某年某月某日晴】
主题大小:46mb
主题制作:2020年11月23日
主题格式:hwt&apk主题
发布时间:2020年11月23日
测试机型:MATE40 PRO 11.0.0.130
华为机型:EMUI11--9.1
荣耀机型:Magic4 --2.1
特别声明:本作品仅供学习交流使用,禁止二改!禁止用于任何商业用途!转载请注明出处!
02
主题预览
03
主题介绍
★强大的mate40系列
★前端时尚的设计
★领导行业的5纳米麒麟9000 5g soc
★66w有线50w无线超级快充
★徕卡5000万主摄 防畸变广角镜头
★ip68级防水 防尘 无惧严寒
★全新EMUI11的隔空手势
★★★★★★★★★★
有一种操作叫-混搭壁纸-混搭图标-混搭字体,记得get这技能哦!
打开系统自带主题商店-我的-混搭-即可
04
使用技巧
下载后安装~桌面打开jesoncat主题安装~界面下方按钮~一键安装主题~立即应用主题~自动跳转到系统主题~我的~主题~应用即可!
如果没有打开系统主题反复清理后台3次
点击链接或复制到浏览器打开,点击下载
1-文件管理器打开网盘下载为位置,找到主题文件格式为.hwt的文件 2-长按文件,点下方移动菜单,移到内部储存huawei目录下的Themes里面
3-关闭主题app后台等20秒重新打开主题app应用即可
4- 应用后建议重启一次,以达到最佳效果!
05
主题下载
下拉到底部点击阅读原文下载 提取码:4o9n
著小白
小编微信号 :zhb990721 ▇ 扫码关注我们
点小花花,让他们知道你“在看”我
bilibili网页图片动态效果实现 前一段时间在b站刷视频的时候看到了一个关于如何实现bilibili顶部导航的动画效果的视频。在看到这个视频之前,我也挺喜欢bilibili导航的动画效果,心里默默赞叹(b站nb)。由于刚自学不久,学习时间也较忙所以一直没有尝试去实现这个效果。所以当我看到这个视频的时候,我就决定要跟着视频里的思路搞明白这效果是怎么实现。
提示:代码里有ES6的语法,刚开始看代码时我也很懵,去补了一下ES6语法的相关内容才知道那些箭头函数等相关的知识。
要实现的内容 实现一个多图层组合的静态界面实现不同图层不同清晰度的配置实现鼠标左右移动导致的清晰度变化实现鼠标左右移动导致的跟随位移实现小女孩的眨眼效果实现鼠标离开时整个效果的还原 。
提示:以下是完整的代码,有比较详细的备注说明,实现的原理也比较简单。设置图片初始位置,添加鼠标移动事件,事件处理等。搜索输入框用的是bootstrap
代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="bilibili.css"> <link rel="stylesheet" href="bootstrap.min.css"> <style> </style> </head> <body> <div id="math"> <div class="image"><img width="3000" height="250" src="images/bg.png"></div> <div class="image"><img width="1800" height="160" src="images/girl1.png"></div> <div class="image"><img width="3000" height="250" src="images/grassland.png"></div> <div class="image"><img width="1800" height="160" src="images/leaf.png"></div> <div class="image"><img width="1800" height="165" src="images/mushroom.png"></div> <div class="image"><img width="1950" height="178" src="images/spirit.png"></div> <div class="daohan"> <div class="head" style="width: 450px;"> <span class="
做好仓库货物的规划与摆放,可以确保仓储安全,同时便入货物的收发,提高仓库人员的作业效率,下面总结仓库货物堆放“五距”标准与示意图。 仓库“五距”要求: 1、顶距:指堆货的顶面与仓库屋顶面之间的距离。一般的平顶楼房,顶距为50厘米以上;人字形屋顶,堆货顶面以不超过横梁为准。 2、灯距:指仓库内固定的照明灯与商品之间的距离。灯距不应小于50厘米,以防止照明灯过于接近商品,灯光产生热量导致火灾。 3、墙距:指墙壁与堆货之间的距离。墙距又分外墙距与内墙距。一般外墙距在50厘米以上,内墙距在30厘米以上。以便通风散潮和防火,一旦发生火灾,可供消防人员出入。 4、柱距:指货堆与屋柱的距离一般为30~50厘米。柱距的作用是防止柱散发的潮气使商品受潮,并保护柱脚,以免损坏建筑物。 5、垛距:指货堆与货堆之间的距离,通常为100厘米,垛距的作用是使货堆与货堆之间,间隔清楚,防止混淆,也便于通风检查,一旦发生火灾,还便于抢救,疏散物资。 货物入库摆放规范: 为使公司的仓库管理规范化,保证财产物资的完好无损,消除安全隐患,结合公司具体情况,特制订本规定。 1、入库规划 (1)货物的摆放应清楚明确,分类放置,摆放位置应遵守易存易取原则。 (2)实行区域定制,将货物放置在规划区域,如果规定区域货物无法摆放应由库管员另行指定区域入库。 (3)入库过程发现破袋、打码不清楚、包装袋污染等问题时,应及时更换、处理。 (4)入库过程在库房内产生垃圾或漏料的,应及时清理,保持库房干净整洁。 2、货物摆放 (1)货物堆垛高度最高限制在3层,靠近门、窗及过道处堆垛高度最高限制在2层。 (2)货物摆放应成直角,水平、平行应保持整齐度,摆放的堆垛横、竖眼看要保持直线性,横、竖托盘之间距离差不得大于2cm。 (3)为防止货物倾倒,摆放堆垛用眼看必须是垂直的,上下托盘整齐度距离差不得大于2cm。 (4)货物批次之间应保持一定距离,间隙距离不得小于10cm。 3、检查与整改 (1)库管员每班定时检查,如在入库过程中库管员发现有以上违规事项,库管员有权让入库人员整改,如不整改库管员有权拒绝入库。 (2)工段每天必须对库房货物堆垛情况进行检查,发现问题当天必须予以解决处理。 (3)物资部对库房货物堆垛情况每周进行检查。
核心指令:git checkout xx
下面讲解怎么创建
可以看到,我们当前的处于master分支
输入 git branch dev (创建一个dev分支)
这样已经是创建成功了 可以输入git branch查看当前所有拥有的分支
当前我们有 dev、master 两条分支
之后我们可以输入**git checkout dev **来进入这个dev分支
后面蓝色的括号中的master变成dev的时候,就说明我们已经成功切换成 dev 分支了
之后我们还可以用 git checkout master来切换回master分支
前言 SSH是安全的加密协议,用于远程连接Linux服务器,默认端口是22,安全协议版本是SSH2 。
SSH原理 SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。
ssh服务端由2部分组成: openssh(提供ssh服务)、openssl(提供加密的程序),主要功能是提供SSH连接和作为SFTP服务器。
ssh的客户端:包含ssh连接命令和远程拷贝scp命令等,可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接。
SSH的工作机制 服务器启动的时候,自己产生一个密钥(768bit公钥),本地的ssh客户端,发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后,发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit),和服务器的公钥(768bit),结合成密钥对key(1024bit),发回给服务器端,建立连接,通过key-pair数据传输。 SSH的加密技术 加密技术:传输过程,数据加密。 SSH1没有对客户端的秘钥进行校验,很容易被植入恶意代码SSH2增加了一个确认联机正确性的Diffe_Hellman机制,每次数据的传输,Server都会检查数据来源的正确性,避免黑客入侵。 SSH2支持RSA和DSA密钥 DSA:digital signature Algorithm 数字签名RSA:既可以数字签名又可以加密 ssh-keygen产生公钥与私钥对 ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利。
第一步:在本地机器上使用ssh-keygen产生公钥私钥对 azdebug_it@azdebug_it:~/$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/azdebug_it/.ssh/id_rsa): Enter passphrase (empty for no passphrase): [Press enter key same passphrase again: [Pess enter key] Your identification has been saved in /home/azdebug_it/.ssh/id_rsa. Your public key has been saved in /home/azdebug_it/.
最近涉猎编曲,硬盘空间飞速缩水,想加装硬盘在知乎遍搜不得拆机攻略于是自己写一篇
首先是D面,D面一共有七颗螺丝,四长三短,长的都一样短的都一样,记得别弄丢。
然后用工具插入缝隙一点一点把后盖撬起来。光影精灵5的卡扣特别特别多,基本上每1.5cm就是一个卡扣,一定要小心再小心,轻手轻脚!卡扣断掉的声音就是你心碎的声音!
D面的背面 下面就是整面的一览图啦。
拆完之后如果只是清理就没关系,如果要动别的东西,最好是把电池的线拔掉,然后翻过来长按电源键30s放掉静电!
拆后盖后 这个是固态硬盘。
原装512G固态硬盘 这里是内存条的位置,光影精灵5原装内存条是三星8G的,如果想组双通道的话,需要购买频率为2666的内存条哦,高频会降频的。我自己是加装了三星的8G内存条。
原装8G内存条以及预留位置 这里就是预留的固态硬盘位置和Sata接口啦,_(:з)∠)_惠普真的良心,都不用买线买架子。直接买硬盘就可以开干了!
预留的硬盘位置以及Sata接口 电池
电池 _(:з)∠)_硬盘装完了忘记拍照了哈哈哈!装硬盘我觉得稍微有点复杂,硬盘架的螺丝有点多大家一定要小心再小心,至于型号推荐,我装的是西数的1T蓝盘,实际容量在914G左右,已经比较够用了,毕竟2T要贵一倍呢。
内存条为了保持一致就买了三星的✓希望我下次记得拍照
一、软件测试的定义
软件测试的经典定义是在规定条件下对程序进行操作,以发现错误,对软件质量进行评估。因为软件是由文档、数据以及程序组成的,所以软件测试的对象也就不仅仅是程序本身,而是包括软件形成过程的文档、数据以及程序。
随着软件工程化越来越被重视以及软件规模的不断扩大,软件分析、设计的作用越来越突出,而在实践中,越来越多的错误是在刚开始的分析与设计阶段就已经存在,所以对于软件需求和设计阶段的测试就显得非常重要,这就是测试概念的扩大化以及软件全生命周期测试的理念。
二、软件质量
软件质量有下面几个定义:
1991年,ISO 9126中定义
软件质量是软件满足规定的或潜在用户需求特性的总和
1999年,ISO 14598定义
软件质量是软件特性的总和,软件满足规定或潜在用户需求的能力。
一般对质量的理解是一个实体的“属性”,“属性”好就是质量好,但是这不够全面,因为“属性”是内部特性,而内部特性好不代表一定能够完成好用户的任务,所以软件质量也是关于软件特性具备“能力”的体现。
软件质量包括“内部质量”、“外部质量”、“使用质量”三个部分,也就是说,软件满足规定的或潜在的用户需求的能力要这三个方面去衡量。
三、软件测试与质量保证的区别
质量保证: 质量保证的工作是通过预防、检查和改进来保证软件质量。QA使用“全面质量管理”和“过程改进”的原理开展质量保证工作。所关注的是软件质量的管理与测量。虽然QA活动也有些测试活动,但所关注的主要是软件质量的检查与测量。
软件测试: 测试和质量保证同样都是与软件的开发过程紧密相关,但不同的是其并不关心软件开发过程的活动,而是对过程的产物以及开发出的软件进行剖析。测试活动必须假设软件中存在潜在问题,测试中所有的操作都是为了找出更多的问题,而不仅仅是为了验证每一件事是正确的。对测试中发现的问题的分析、追踪与回归测试也是软件测试中的重要工作,所以说软件测试是保证其质量的重要一环。
四、软件测试的目的
在早期,软件定义指出软件测试的目的是寻找错误,并且尽可能找出更多的错误。后面,有人提出了以下几个目的:
1.测试是程序的执行过程,目的在于发现错误
2.一个好的测试用例在于能够发现至今为止未发现的错误
3.一个成功的测试是发现了至今未发现的错误的测试
4.也有人提出软件测试不仅仅是为了发现缺陷,更重要的是要通过对软件质量的度量以提高软件的质量。
综上所述,软件测试的目的可以概括如下:软件测试是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。 同时,测试是以评价一个程序或者系统属性为目标的活动,测试是对软件质量的度量与评估,以验证软件的质量满足用户的需求的程度,为用户选择和接收软件提供有力依据。
备注: 测试是为了证明软件是否可以使用,即是符合用户的需求的。
五、软件测试的原则
原则1: 所有的测试都应追溯到用户需求
由于软件设计和开发的目的就是使用户完成预定的任务,并满足用户的需求,而软件测试所揭示的缺陷和错误使软件达不到用户的目标,满足不了用户的需求。
原则2: 应该尽早地和不断地进行软件测试
因为软件生命周期的各个阶段都有可能产生错误,所以不能把软件测试仅仅看作为软件开发活动中的一个独立阶段的工作,而应该将其贯穿于开发的各个阶段中。同时还应尽可能早的开始测试,只要测试在生命周期中进行得足够早,就能够提高被测软件的质量,这就是预防性测试的基本原则。
原则3: 完全测试是不可能的,测试需要终止
在有限的时间和资源条件下,找出所有的软件缺陷是不可能的,主要有三个方面的原因:
1.输入量太大
2.输出结果太多
3.路径组合太多
原则4: 测试不能显示软件潜在的缺陷
也就是说测试只能证明软件中存在缺陷而不能证明软件中没有缺陷。
原则5: 充分注意测试中的集群现象
经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目或检错率成正比。根据这个规律,应对错误集群的程序段进行重点测试,以提高测试效益。
原则6: 程序员应避免检查自己写的程序
这有两个原因,一个是心理原因,一个是思维定式原因,一个使人不大愿意承认自己的错误以及思维定式导致难以发现自己的错误,因此为达到测试目的,应该避免这种情况出现。
原则7: 尽量避免测试的随意性
应该从工程的角度去理解软件测试,他是有组织、有计划、有步骤的活动
附: 内容来自《软件评测师教程》
写在前面,本教程亲测适用于win7、10系统。 找不到原文链接了,小伙伴们找到原文链接可以提醒一下我更改一下。 1、首先,我们在Cortana中搜索控制面板并进入。
2、在控制面板-程序中,点击启用或关闭Windows功能。
3、在FTP服务器、Web管理工具和Internet Information Services可承载的Web核心前打上勾,点击确定,等待安装。
4、安装完成后,在Cortana中搜索计算机管理并进入。在左侧找到服务和应用程序-Internet Information Services(IIS)管理器,点击进入,你可以在连接一栏看到你的计算机名称(小编这里是DESKTOP-LEU8V22),点击该计算机名左侧的展开按钮,右键单击网站,选择添加FTP站点;
5、此时,你将进入FTP站点添加向导。首先,向导将要求你填写FTP站点名称和设置FTP内容目录,FTP站点名称可以挑你喜欢的填,小编这里填写的是ftp Server,ftp内容目录也可选择自己喜欢的任意文件夹,小编选择的是C:\inetpub\ftproot;
6、填写好FTP站点名称,设置完FTP内容目录后,点击确定按钮,再点击下一步;点击下一步后,先不要急着继续,我们来查一下电脑的IP地址,在Cortana中搜索命令提示符并进入;键入 cmd 然后输入命令ipconfig,回车,你将看到你电脑的IP地址,小编这里的IP地址是192.168.1.251,记住这一串数字,接下来用得到
7、我们回到FTP站点添加向导,设置绑定和SSL。IP地址栏输入刚刚查到的IP地址,端口保持为21不变,启用虚拟主机名项可以不必勾选,自动启动FTP站点可以勾选,SSL可以选择无SSL,操作完成后点击下一步;
8、接下来FTP站点添加向导将要求你填写身份验证和授权信息,勾选身份验证下的匿名和基本两项前的复选框,允许访问项设置为所有用户,勾选读取和写入权限前的复选框,点击完成
9、这时我们可以看到,FTP站点已经创建成功并正常运行。
10、不过这还没完,我们要允许FTP服务器通过防火墙。在小娜中搜索防火墙,点击进入允许应用通过Windows防火墙;
11、勾选列表中FTP服务器前的复选框,勾选后点击确定以完成设置;
12、这时,你就可以测试你的FTP服务器了。在开始-Windows附件中找到Internet Explorer,点击进入;
13、在地址栏输入ftp://[你电脑的IP地址](小编这里是ftp://192.168.234.136),回车以访问。如果你在浏览器中看到文件和文件夹列表,那么恭喜你,你的FTP服务器搭建成功了。
14、当然,你也可以在文件资源管理器中输入你FTP服务器的地址,效果是这样的。
最近看到很多人都说参考文献标注了以后,也做了引用,但是引用的地方查重居然标红了,但是没查重的居然是绿的,很费解。原因就是引用做的不对,引用格式都不对,原文又没改,那就是直接复制的句子肯定就标红了啊。
那今天就给大家说一下如何正确做引用吧!
首先引用之前要保证几点要求:
参考文献出自知网、万方、维普这类网站,就是你的参考文献出处和你的查重是一个最好,不然可能库里没有,那就查不到。
引用的话必须是出自这篇文章的,不然就不算是引用。
引用必须是一段完整的话,是句号之前做引用,不是逗号,最近还有很多同学在问我在逗号前作引用行不行,你不能引用半句学者的话 ,自己又在后边加一半吧,那成何体统啊。
上面这三个约束点保证没问题以后,就是具体的参考文献引用方法了。
01
首先,将论文导入word或者wps中,做好准备工作。
02
找到论文最后的参考文献,确保参考文献编号的格式正确(编号需要自动生成,不能手动添加)。
03
可通过菜单栏中【开始】>【编号】进行修改(修改时需要选中要修改的文字)。如没有所需要的编号类型,可通过下方【定义新编号格式】来增加我们需要的格式。
04
编号格式修改完后,接下来准备引用参考文献。
05
接下来,在菜单栏中点击【引用】>【交叉引用】,弹出交叉引用操作框。
引用类型:编号项。
06
点击插入后,交叉引用操作框不会消失,但参考文献编号已经正确引用了,但还要做最后的调整。
07
选中已引用的参考文献编号,在菜单栏中点击【开始】>【上标】,快捷键:【ctrl】+【shift】+【+】。
08
至此,引用参考文献的所有工作都已经完成。如图是最后的效果。
补充:按住【ctrl】用鼠标点击参考文献编号,可直接跳转到参考文献所在位置。
惠普HP笔记本和台式机目前都预装的Win10系统,当然Win7旗舰版才是很多用户喜欢的,不过换装Win7有很多方面比较麻烦,如BIOS设置、U盘启动及方分方面都是很多用户不熟悉的,这里小编就详细分享下惠普笔记本Win10改Win7系统教程(BIOS设置+U盘启动+换Win7),希望对大家有帮助。
你所需要的准备工作:
1、U盘启动盘(u盘启动盘制作方法)
2、Win7 64位旗舰版ISO镜像:推荐:惠普Win7 64位旗舰版
3、将下载的win7镜像放到U盘中。
一、惠普笔记本win10改win7系统BIOS设置
1、重启笔记本按F10进入BIOS,如果没反应则启动时按ESC,在以下界面,再按F10进入BIOS界面;
2、在System Configuration下,选择Boot Options,按回车键进入设置;
3、把Secure Boot设置成Disabled,再把Legacy Support设置成Enabled,按F10选择Yes回车保存修改;
二、惠普笔记本win10换Win7 U盘启动
1、插入U盘启动盘,重启按ESC再按F9调出启动管理对话框,选择USB HDD识别到U盘启动项,回车;
2、启动到U盘启动盘菜单界面,我们选择比较高级版本的WinPE进入,www.winwin7.com 如Win8PE或Win10PE;
3、进入到WinPE后,我们就要开始新着手分区和重装Win7系统了。
三、惠普笔记本win10换Win7 分区:
1、打开上图的Diskgenius分区工具;打开Diskgenius后,选择笔记本硬盘,然后点击“硬盘”——“删除所有分区“,删除前确保资料已经转移,删除后,点击保存更改;
2、删除分区后,装换硬盘分区表类型 为 MBR 格式,同样还是从“硬盘”——“转换分区表类型为MBR格式”,然后保存更改(以下为图示,此时该项为可点,如不可点说明已经转换好了。)
3、转换完成后,执行快速分区,分区大小几磁盘个数自己选择,确保分区表类型为MbR ,及勾选了重建主引导记录MBR,按下确定后开始分区(对了,如果是固态硬盘可要4K对齐一下哦);
www.winwin7.com
四、惠普笔记本win10换Win7系统:
1、分区完成后,我们就可以打开一键装机工具进行Win7系统的安装了,这里很简单,只要选择要安装的Win7.GHO 然后选中C盘,确定即可。
2、如果怕系统中没有USB3.0驱动,可以勾选注入;
3、GHOST Win7恢复系统到C盘中。
五、Win7系统部署过程
到最后,安装完成!
怎么样,是不是惠普Win10换成Win7系统也是很简单的呢?如果你也是HP笔记本想换成win7 不妨搜藏下这个教程吧。
题目描述
《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a
的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除 2,向下取整)。第几天的时候木棍会变为 1?
输入格式
无
输出格式
无
输入输出样例
输入
100 输出
7 #include <stdio.h> #include <stdlib.h> int main() { int a; scanf("%d",&a); int i; for(i=1;; i++) { if(a==1) break; a=a/2; } printf("%d",i); return 0; } 客官记得一键三连啊!
ip地址查询
安装工具 yum install net-tools.x86_64彩色的编辑器
yum install vim传文件 检查 ssh yum list installed | grep openssh-server没有的话 安装 yum list | grep openssh-server 安装对应版本 yum -y install **找到/etc/ssh/ vim ssh_config 把 #Port #ListenAddress 0.0.0.0 挨着的两个 #PermitRootLogin yes #PasswordAuthentication yes 注释去除systemctl start sshd 状态查询 systemctl status sshd查看端口监听 netstat -an | grep 22
下载资源 jenkins官网下载资源太慢,我使用的是清华大学开源软件镜像站的资源,版本很多,进去之后,自己选。
推荐下载最新的版本。因为有一些插件,jenkins版本低了你安装不了,后期会很麻烦。
# 这个只是个示例,具体版本还是到上面列出的清华大学的网站里找 wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.274-1.1.noarch.rpm 安装 rpm -ivh jenkins-2.241-1.1.noarch.rpm 目录释义 $ rpm -ql jenkins(查看所有jenkins目录) /etc/init.d/jenkins() /etc/logrotate.d/jenkins() /etc/sysconfig/jenkins(jenkins配置文件,如“端口”,“JENKINS_HOME” 等都可以在这里配置) /usr/lib/jenkins(默认的JENKINS_HOME。jenkins安装目录,war包会放在这里) /usr/lib/jenkins/jenkins.war(war包位置) /usr/sbin/rcjenkins() /var/cache/jenkins(jenkins war解压路径) /var/lib/jenkins() /var/log/jenkins(jenkins日志目录) 修改基本配置 修改用户名和端口 vim /etc/sysconfig/jenkins JENKINS_PORT:默认8080JENKINS_HOME:默认/var/lib/jenkinsJENKINS_USER:默认jenkins,linux下jenkins默认使用jenkins用户进行脚本和文件的操作,遇到权限不足问题,可以改此配置(如直接设置超级用户root),或者手动chown对应目录为该配置所属用户。直接在/etc/sysconfig/jenkins => JENKINS_JAVA_OPTIONS加上启动参数-Dhudson.model.DownloadService.noSignatureCheck=true
注意
这个用户名不是登录jenkins的用户名,登录jenkins的默认用户名为admin,密码是jenkins根目录下:secrets/initialAdminPassword里的值。不过这个密码无规则,不太好记,还是改了吧。
配置jdk路径 vim /etc/init.d/jenkins 在 candidates 后追加jdk 安装路径
由于我是通过rpm方式安装的,安装的路径不像用压缩包那样方便看,需要自己查一下
# 先查找当前系统用rpm方式安装的jdk包名有那些 $ rpm -qa | grep jdk copy-jdk-configs-3.3-10.el7_5.noarch jdk1.8-1.8.0_271-fcs.x86_64 # 复制刚安装的jdk包名 $ rpm -ql jdk1.8-1.8.0_271-fcs.x86_64 | grep bin /usr/java/jdk1.8.0_271-amd64/bin /usr/java/jdk1.8.0_271-amd64/bin/ControlPanel /usr/java/jdk1.8.0_271-amd64/bin/appletviewer /usr/java/jdk1.8.0_271-amd64/bin/extcheck /usr/java/jdk1.8.0_271-amd64/bin/idlj /usr/java/jdk1.8.0_271-amd64/bin/jar /usr/java/jdk1.
问题描述 WARNING: Unable to determine the path to install the libglvnd EGL vendor library config files. Check that you have pkg-config and the libglvnd development libraries installed, or specify a path with --glvnd-egl-config-path. 原因 上一步没安装 libglvnd 解决方法 不影响正常安装,回车继续即可 参考 https://blog.csdn.net/choimroc/article/details/104630491
研讨题目 什么是关系型数据库?什么是非关系型数据库?它们有什么区别?各举1个典型产品简单介绍他们特点?
研讨内容 关系型数据库 关系型数据库是建立在关系模型基础上的资料库。
What is a Relational Database? Relational databases maintain data in tables, providing an efficient, intuitive, and flexible way to store and access structured information. Tables, also known as relations, consist of columns containing one or more data categories, and rows, also known as table records, containing a set of data defined by the category. Applications access data by specifying queries, which use operations such as project to identify attributes, select to identify tuples, and join to combine relations.
本文为预训练语言模型专题的第18篇。
快速传送门
1-4:[萌芽时代]、[风起云涌]、[文本分类通用技巧] 、 [GPT家族]
5-8:[BERT来临]、[浅析BERT代码]、[ERNIE合集]、[MT-DNN(KD)]
9-12:[Transformer]、[Transformer-XL]、[UniLM]、[Mass-Bart]
13-16:[跨语种模型]、[XLNet],[RoBERTa]、[SpanBERT]
17:[跨模态语言模型]
感谢清华大学自然语言处理实验室对预训练语言模型架构的梳理,我们将沿此脉络前行,探索预训练语言模型的前沿技术,红框中为已介绍的文章,绿框中为本期介绍的模型,欢迎大家留言讨论交流。
ERNIE: Enhanced Language Representation with Informative Entities(2019) 在之前的一期推送中,我们给大家介绍过百度的ERNIE。其实清华大学NLP实验室,比百度更早一点,也发表了名为ERNIE的模型,即Enhanced Language Representation with Informative Entities。
他们认为现存的预训练语言模型很少会考虑与知识图谱(Knowledge Graph: KG)相结合,但其实知识图谱可以提供非常丰富的结构化知识和常识以供更好的语言理解。他们觉得这其实是很有意义的,可以通过外部的知识来强化语言模型的表示能力。在这篇文章中,他们使用大规模语料的语言模型预训练与知识图谱相结合,更好地利用语义,句法,知识等各方面的信息,推出了Enhanced language representation model(ERNIE),在许多知识驱动的任务上获得了巨大提升,而且更适用于广泛通用的NLP任务。
作者提出,要将知识嵌入到自然语言模型表达中去,有两个关键的挑战:
知识的结构化编码
对于一个给定的文本,如何从知识图谱中,高效地将和文本相关的常识或知识抽取出来并编码是一个重要问题。异构信息融合
语言模型表示的形式和知识图谱的表达形式是大不相同的,是两个独立的向量空间。怎么样去设计一个独特的训练任务来将,语义,句法,知识等信息融合起来是另一个挑战。 针对这些挑战, 清华NLP实验室提出方案是 Enhanced Language RepresentatioN with Informative Entities (ERNIE)
首先,通过识别文本中的命名实体,然后将其链指到知识图谱中的相应实体上,进行知识的抽取和编码。相比于直接使用知识图谱中基于图结构的信息,作者通过TranE这样的知识嵌入算法,对知识图谱的图结构实体进行编码,然后将这富有信息的实体表示作为ERNIE的输入,这样就可以把知识模块中的实体的信息表示,引入到模型下层的语义表示中去。其次,和BERT类似,采用了MLM和NSP的预训练目标。除此以外,为了更好地融合文本信息和知识信息,设计了一个新的预训练目标,通过随机地mask一些命名实体,同时要求模型去知识图谱中寻找合适的实体,来填充被mask掉的部分。这个训练目标这样做就可以要求语言模型,同时利用文本信息和知识图谱来对token-entity进行预测,从而成为一个富有知识的语言表达模型。 本文在两个知识驱动的NLP任务entity typing 和 relation classification进行了实验,ENRIE在这两个任务上的效果大幅超越BERT,因为其充分利用了语义,句法和知识信息。在其他的NLP任务上,ENRIE的效果也很不错。
定义
首先,定义我们的文本token序列为{w1, . . . , wn},n为token序列的长度。同时,输入的token可以在KG中对应entity。所对应entity的序列为{e1, . . . , em}, m是序列中entity的数量。因为不一定每一个token都对应得到KG中的一个entity,所以在大多数情况下m不等于n。所有token的集合也就是字典为V,在KG中所有entity的列表为E。如果,某个在V中的token w ∈ V 在KG中有对应的entity e ∈ E。那么这个对应关系定义为f(w) = e
Region.Op.XOR被Region.Op.DIFFERENCE代替
所以在大于28的高版本 canvas.clipPath(mPath0, Region.Op.XOR)被 canvas.clipOutPath(mPath0)取代, canvas.clipPath(mPath1, Region.Op.INTERSECT)被canvas.clipPath(mPath1)取代
可以看源码 canvas.clipOutPath正是调用了clipPath(path, Region.Op.DIFFERENCE),而canvas.clipPath调用了canvas.clipPath(path, Region.Op.INTERSECT)
类似于这样
if(Build.VERSION.SDK_INT >= 28){
canvas.clipOutPath(mPath0);
canvas.clipPath(mPath1);
else {
canvas.clipPath(mPath0, Region.Op.XOR);
canvas.clipPath(mPath1, Region.Op.INTERSECT);
}
参考:
https://github.com/newbiechen1024/NovelReader/issues/82
https://github.com/newbiechen1024/NovelReader/issues/66
为了防止链接都是,故而把内容转载了过来,感谢原创。
原创地址:
https://blog.csdn.net/sunbibei/article/details/52958724
https://blog.csdn.net/jinking01/article/details/79414486
1. 写在最前面
由于在一个源码中, 关于在ROS平台上的具体实现, 用到了Plugin. 为了更加深入的理解到底是一个什么鬼, 所以对pluginlib进行了一些学习, 下面的内容, 大部分在网站上是能够找到的, 是综合Wiki上的介绍, 以及从源码中看到的内容和自己的尝试. 希望对大家都一点点帮助.
pluginlib是一个使用C++实现的库, 用于在ROS包里面动态的加载或卸载plugin. plugin满足一些条件的, 可以从运行库(例如共享对象, 动态链接库)中动态加载的类. Plugin在扩展或修改应用的行为上很有优势, 并不需要知道原始类的源码, 也许你在编写代码时, 也并不知道你将会用到哪个plugin, 而是在运行时通过参数载入才确定具体的plugin, 在后面有一点相关的示例, 可以体会一下使用plugin的feeling(感觉很一般, 哈哈哈…).
2. 示例
想象一个场景, 假设现在有一个ROS包polygon_interface_package, 里面包含一个polygon基类, 同时, 另外还有两个不同的polygon, 一个是rectangle, 存在于rectangle_plugin包, 另外一个是triangle, 存在于triangle_plugin包. 我们希望rectangle和triangle都被系统支持.
2.1 registering/Exporting a Plugin
为了能够动态加载一个类, 那么, 这个类必须是一个被标注的, 并且导入到系统的一个类. 这个过程, 需要使用宏PLUGINLIB_EXPORT_CLASS来完成. 一般情况下, 这个宏放在实现文件(.cpp)的末尾. 类似如下:
#include <pluginlib/class_list_macros.h> #include <polygon_interface_package/polygon.h> #include <rectangle_package/rectangle.h> // 具体参数意义, 见下文 PLUGINLIB_EXPORT_CLASS(rectangle_namespace::Rectangle, polygon_namespace::Polygon) 2.2 The Plugin Description File
org.apache.shiro.authz.AuthorizationException: Not authorized to invoke method: public java.lang.String
原因分析:
集成thymeleaf后使用@Controller注解一个方法返回的是一个页面,且用了 @RequiresPermissions("app:article")注解。 但是在进行授权配置的时候针对这个登陆的用户没有配置这个权限,即该用户是没有权限访问这个页面, 此时shiro根据没有权限本应该抛出Subject does not have permission [userInfo:del]错误,做为返回的内容。 但是@Controller代表返回的是页面,所以应该是Subject does not have permission [userInfo:del]被误以为是页面, 抛出这个异常(public java.lang.String), 解决办法:
`方法一:` 将@RestController(@Controller和@ResponseBody的组合注解)替换@Controller注解 此时返回的结果是字符chuan,没有权限的返回错误结果信息是直接返回 `方法二:` 从业务逻辑设计角度出发 将不同用户的角色权限所能够请求获取到的路由地址也是不同的, 在用户登录成功时候根据用户角色权限获取该用户所拥有的全部路由地址, 如果路径太多也可进行分级获取。 `方法三:` 全局异常针对AuthorizationException异常处理 如果集成thymeleaf情况下可修改全局异常处理方式,具体根据情况
@ControllerAdvice @Slf4j public class GlobalException { @ExceptionHandler(value = Exception.class) @ResponseBody public Result exception(Exception e) { log.error("系统全局发生错误:[出错原因:{},出错信息:{}]",e.getCause(),e.getMessage()); if (e instanceof AuthorizationException){ return ResultUtil.ERROR(ResultCode.UN_PERMISSION); } return ResultUtil.ERROR(ResultCode.FAILED); } } 最后返回结果
80、443端口被占用,Pid=4,进程无法杀死,拒绝访问 解决方案 操作系统的两个重要的端口,一个是80端口,一个是443端口,这两个端口在网络通信的时候,起着至关重要的作用,在这里,先简单地介绍一下80端口和443端口所起的作用; 80端口是为HTTP即超文本传输协议开放的,此为上网冲浪使用次数最多的协议,主要用于WWW即万维网传输信息的协议。可以通过HTTP地址(即常说的“网址”)加“:80”来访问网站,因为浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“:80”了,而其他端口则必须加上。 443端口即网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP。在一些对安全性要求较高的网站,比如银行、证券、购物等,都采用HTTPS服务,这样在这些网站上的交换信息其他人都无法看到,保证了交易的安全性。网页的地址以https://开始,而不是常见的http://。 解决方案: 如何查看端口的状态以及被哪个程序占用着: 查看端口的工作状态,其实很简单,Windows+R调出【运行】窗口,输入cmd回车,进入到命令提示符,接着输入netstat –ano | find ”0.0.0.0:80”回车,便看到80端口的状态,果然,80端口被一个PID为4的进程占用着; 接下来按下Ctrl+Alt+esc打开任务管理器,在任务管理器【详细信息】里面,鼠标单击PID这个字段名,按pid给进程排序,然后发现PID=4的是一个叫System的系统进程;
右键system,打开文件位置,发现是一个位于\Windows\system32\下面文件名叫ntoskrnl.exe的系统程序,
如何解决问题:
然而我们知道\Windows\system32\下面的程序都是和系统运行相关的一些东西,并且通过这个文件名ntoskrnl.exe我们可以大概知道它是处理系统内核级别的,system这个进程在任务管理器里面结束不了,而且就算把它杀死了,系统也可能会出现不稳定的情况,所以得想想办法,仔细想想,80端口既然是给http用的,那么它很有可能是被某个与http相关的服务占据掉了,通过百度搜出来的结果,虽然搜出来很多的说法,但是都屡试不爽,
不过,搜出来的这些结果还是给了不少的提示,既然是http服务,那就到服务里面找一下有木有咯,打开服务控制台,h开头的服务就这几个,没找到http,
通过注册表,最后还是解决了;哎,说了这么多,那到底如何解决呢?下面就说具体的做法了;首先,Windows+R调出【运行】,输入regedit回车,
展开注册表,找到HKEY_LOCAL_MACHINE目录
然后按顺序展开到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services;
到这里,这个Services键就是系统服务的藏身之处,所有的服务都可以通过注册表来管理,接下来展开Services键,往下拉找到HTTP(小提示:将光标定位到下一级目录按H键可快速定位到H开头的目录);
看到右边有个Start,值为3,然后双击start,弹出一个编辑框,把3改成4,确定;
好,确定后关闭注册表,检查一下你的系统有没有安装IIS服务,如果安装了IIS服务,那还有接下来的操作,如果没有,那就已经OK了;
如何检查系统是否有IIS?开始菜单搜索“iis”;如果有搜索结果,说明安装有IIS,如果没有搜索结果,就自己看着办吧;我想的话,80端口被占用,你电脑里面多半是装有IIS的;
有的话,那就打开IIS咯,然后依次展开到这里
在窗口的最右边菜单里,有个编辑网站->绑定;
打开绑定设置,有个端口是80的http记录,看到没,选中它,点右边的编辑;
把端口改成8888或者其它数字,确定,关闭IIS;
然后重启电脑,再用netstat –ano命令查看端口状态,发现列表里已经没有80和443了,说明80和443端口已经被释放掉了;
重启之后再用xampp开启Apache服务器就能成功了,看看,是不是很靠谱;
好,靠谱之后,再把刚才那个注册表的值改回3即可。
注意:如果你不会用到用VS和IIS的话,你可以不改回来,但是,你以后需要用到IIS或者Visual Studio的话,出现问题,不要忘了,回来把这个注册表的值改回来,我个人建议,为了不会忘记,还是在完事之后先把它改回来再说吧;
小结:
其实80和443端口如果System没占用,有时候也可能被其他的程序给占用掉,比如迅雷等下载工具也有可能会占用,如果发现是其他的程序在占用的话,直接用任务管理器干掉即可;如果你安装了SQL Server,有时候SQL Server ReportingServices (SQLEXPRESS) 服务也可能会占80端口,这个问题直接禁用并停止掉SQL Server ReportingServices就可以了,不过SQL Server一般不会占用http的端口。
随着时代的不断变化和发展,许多以科技为背景的行业纷纷崛起,这不仅颠覆了人们传统的生活方式,也对社会的发展起到了积极的推动作用。其中,将人类从繁重的劳动中解放出来的机器人是最典型的例子。
还记得公开宣称“我要毁掉人类”的女性机器人苏索菲亚吗?我相信很多人都很熟悉机器人索菲亚。她是历史上第一个获得公民身份的机器人。索菲娅机器人看起来像人类女性,有着橡胶皮肤,可以模仿62种面部表情。它让许多网民感到害怕,因为它太人性化了,而且她大脑中的计算机算法可以识别人脸并与人进行眼神交流。
这个机器人制作于香港,它的设计师是一个美国人。许多表情和想法被植入机器人的大脑,后来,许多国家甚至邀请她参加各种项目。在一个节目中,她甚至说她会毁灭全人类,如今这个机器人变成了什么样呢?
因为这些人中的大多数认为,一旦机器人有了自己的意识,它就和人类没有什么不同,它很有可能拥有那些追求自由的人的愿望。从长远来看,一旦机器人发展得非常糟糕,它们的能力远远超过人类,它们将是对人类最大的威胁。
多年过去了,这个机器人现在怎么样了?她真的有可能实现“毁灭人类”的预言吗?
索菲亚现在不仅有了自己的身份,还创建了自己的微博。有人解释说,索菲亚一开始就说了这样的话,这是由系统失调引起的。一些科学家还认为机器人的概念是人类给的,如果将来被一些不法分子盯上,它可能会成为一个不好的机器人。
2017年,索菲亚成为沙特阿拉伯的合法公民。然而,索菲亚立即表示,它将给予人类最仁慈的回报,让人类不必担心机器人的过度发展。
2018年,索菲亚参加了联合国创新大会,提高了索菲亚的声誉。现在索菲亚已经加入了综艺节目,并在中国开了一个社交平台账户,加入娱乐行业的势头很大。她的未来发展会是什么?让我们翘首以待。
虽然索菲亚威胁人类,但她并没有因此而毁灭,而是受到了很多关注。现在索菲亚会经常上电视参加一个节目,她的发明者经常在网上分享她的照片。未来,机器人将会涉足更多的领域。这是社会发展的必然之路,但机器人不可能完全取代人类的工作,需要人类的合作。你想在生活中拥有这样一个机器人吗?
Arcgis Server发布的服务显示…[null]表示连接不了数据库,原因是ecp授权文件可能过期,用notepad++或记事本打开你的ecp文件:
这里红框中显示的就是到期的日期
解决方法:我是卸载了Arcgis Server重装然后在输入ecp文件时重新选择未到期的ecp文件,如果有其他方法欢迎留言交流。
文章目录 Implicit SurfaceExplicit SurfaceAlgebraic Surfaces (Implicit)Constructive Solid Geometry (Implicit)Distance Functions (Implicit)Distance Functions (Implicit) 贝塞尔曲线贝塞尔曲面 引用 表达几何有非常多的方式,每种方法都有其特定的应用场合,没有最优的,只有合适的。
Implicit Surface 采样会变得困难但是Inside和Outside测试将会变得非常容易 Explicit Surface 采样会变得容易Inside/Outside测试会变得很困难 Algebraic Surfaces (Implicit) Constructive Solid Geometry (Implicit) Distance Functions (Implicit) 注意距离场的定义:
从任意位置到对象的最短距离(可以是带符号的距离)
Distance Functions (Implicit) 距离场的融合
可以参考这篇文章的SDF混合思路,可以做出Organic的效果 https://www.jcohen.name/papers/Ferreira_Levelsets_2007.pdf
关于SDF的简单效果可以看我实现的ShaderToy https://www.shadertoy.com/view/ttcyWB
//******************************Soft Blend***************************** // https://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm float opSmoothUnion( float d1, float d2, float k ) { float h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 ); return mix( d2, d1, h ) - k*h*(1.
由英特尔带头发起的雷电3接口标准,在历经数次版本升级后,无论是传输稳定性、带宽速率,还是设备供电能力都能把传统 USB 3.0 给打的落花流水,可惜当下能随便买到的雷电3周边,多以外置硬盘这类无法充分利用接口带宽的低速设备为主,而且类别也根本谈不上丰富,导致现在虽然有大批大批的主板都带雷电3接口,可实际利用率实在是不高,为了提高雷电3接口的利用率,乐扩公司发布了一款雷电3万兆网卡适配器。
该款万兆网卡采用最新Thunderbolt™ 3 的技术,传输速率高达40Gbps,相当于Thunderbolt 二代技术的二倍传输速率,并为八倍USB3.0 的传输效能。用户可通过Thunderbolt™ 3 技术USB Type-C接口数据线连接扩展出标准的万兆RJ45 LAN端口,对于部分拥有超强带宽,同时希望追求急速网络的用户来讲,这款万兆网卡是个不错的选择。
Intel芯片方案
采用Intel芯片,性能稳定可靠,给您的网络带来急速体验。
全金属材质
采用全金属外壳一体成型设计,除了保证散热性之外,又具备了抗震,抗压,防尘,防摔等特点。配一条Type-C接口的数据线,标有雷电3的标志,支持雷电3协议传输数据,说明了它具有不凡的传输速度。
细节1.万兆RJ45 LAN端口、2.Thunderbolt™ 3 USB-C 接口
适用于带有Thunderbolt™ 3 USB-C 接口的台式机,笔记本设备
该款万兆网卡专为Thunderbolt™笔记本、台式电脑提供10Gbps的网络,可以应对各种各样的网络应用,包括局域网内无损4K影像传输,或者提供远程3D实时游戏画面。性能同时可以满足商务、家用等各类日常使用场景。
系统需求
Windows Server 2008R2,2012R2,2016 、Windows 7,8,8.1,10 32 和 64-位系统 、Linux Linux 4.x (带Thunderbolt™ 3 支持内核) 、Apple mac OS 10.12 或更高版本。
包装清单
1 x 多速10GBase-T / NBASE-T(™)转Thunderbolt™ 3 适配器、1 x 说明书、1 x 驱动光盘、1 x 线缆
总结
作为老牌网卡厂家乐扩,一直都是致力于给用户玩家带来高速稳定的网络。这款雷电3也是保持着它一贯的风格。可能这网卡颜值不是最高的,但他一定是性能更稳定可靠的。
C++通讯录管理系统 下午有点小无聊,就随手写了个通讯录管理系统,来巩固一下最近几天自学的c++知识。
顺便发个博客水一篇(滑稽
目录 C++通讯录管理系统效果上代码总结 效果 效果如下图
初始界面 添加联系人 显示联系人 查找联系人
修改联系人
删除联系人
清空联系人
上代码 一共200多行,算是我目前c++写过最长的代码了,但是逻辑还是比较简单清晰的。
最近我的vscode最近莫名其妙崩了,貌似只能运行python了,原因未知,转手用了下vs,发现用着感觉还行,比dev c++好用不少,自己写头文件什么的非常方便,就是打开软件新建项目什么的有点小慢。
#include<iostream> #define MAX 1000 using namespace std; //菜单 void showMenu() { cout << "┏━━━━━━━━━━━━━┓" << endl; cout << "┃ 1.添加联系人┃" << endl; cout << "┣━━━━━━━━━━━━━┫" << endl; cout << "┃ 2.显示联系人┃" << endl; cout << "┣━━━━━━━━━━━━━┫" << endl; cout << "┃ 3.删除联系人┃" << endl; cout << "┣━━━━━━━━━━━━━┫" << endl; cout << "
在终端输入:vim /etc/ettercap/etter.dns来编辑dns文件,可以删除里面所有的内容,因为都是演示,
可以新增你需要劫持的域名和目标IP,格式和host文件一致
www.baidu.com A 192.168.1.101 上面的www.baidu.com是目标域名,A是解析的方式,后面的IP就是我们的IP。
在终端输入:ettercap -G启动ettercap客户端
选择网卡后点击右上角启动,启动后,左上角点击放大镜进行扫描
然后点击放大镜右边的服务器列表可以看见所有在线的机器,选择路由器,点击下面的Add to Target1加到目标1,同理,选择目标主机加入到目标2
然后点击右上角的第一个地球的图标,在下拉菜单中选择ARP攻击
在弹出的窗口中选中第一个选项,进行远程嗅探
点击确认后程序将开始欺诈路由,然后点击菜单,选择插件
然后选择Manage Plugins来管理插件
在列表中选择dns_spoof来启动dns劫持插件即可
SSL的网站无法劫持,或者说是因为证书的问题会在客户端报错。其他就是涉及到SSL伪造的问题
CSS简介CSS语法CSS三种样式CSS颜色CSS背景CSS边框CSS外边距CSS内边距CSS尺寸CSS盒子模型CSS轮廓CSS文本CSS字体CSS图标CSS链接CSS列表CSS表格CSS显示CSS最大宽度CSS定位CSS OverflowCSS浮动CSS行内块CSS对齐CSS组合选择器CSS伪类CSS伪元素CSS透明图片CSS导航栏CSS下拉列表CSS提示CSS图片廊CSS图片精灵CSS属性选择器CSS3简介CSS3圆角CSS3图片边框CSS3背景CSS3颜色CSS3渐变CSS3阴影CSS3文本效果CSS3字体CSS3 2D转换CSS3 3D转换CSS3过渡CSS3动画CSS3图片CSS3按钮CSS3分页CSS3多列CSS3用户界面CSS3盒子尺寸CSS3 flexboxCSS3 媒体查询CSS实例演示
路由器其实可以通过升级来提高其性能,升级固件不仅能够获得新的功能,还能减少一些不必要的bug,比如我们这次升级能够解决这些问题:1、修复某些使用环境下DHCP响应慢问题。2、修复某些使用环境下WAN口PPPOE掉线问题。3、丰富ISP数据库,增加“国内其他”和“其他”选项。那么tp-link无线路由器如何进行升级呢?
首先进入tp-link无线路由器官方网站,然后搜索自己型号路由器所需的升级包,以TL-WVR300为例,在网站最上方的搜索框中输入TL-WVR300然后回车即可
然后会显示产品的信息,我们需要点击下方的【下载】然后就会得到所有关于TL-WVR300的资料,此时我们需要在路由器管理后台查看当前的硬件版本,可以参考本文最后一幅图,最后得知我们的硬件版本是v1.0,所以要点击:TL-WVR300 V1.0_140612标准版
然后点击【立即下载】右侧的图标下载升级包,下载后解压会发现有两个文件:一个是升级说明,另一个是TL-WVR300 v1v3.bin,这个就是我们升级需要的文件。
最后进入路由器设置界面,点击【系统工具】找到软件升级,在升级文件路径中浏览选择刚刚下载的升级包文件TL-WVR300 v1v3.bin,然后开始升级,升级过程中需要注意的是:
1. 在路由器升级过程中,请不要将路由器断电!
2. 进行软件升级后,当前的配置信息可能会丢失。请您在升级前备份产品配置信息。
升级后需重新启动路由器,此时再次查看当前的软件版本,我的是从1.0升级到了1.1.4
1. Vue的响应式原理
数据驱动视图,UI =render(state),state状态发生变化,vue经过模板编译,虚拟DOM,patch过程更新视图。vue2.x会使用object.defineProperty重新当以data中的所有属性,当页面使用对应属性,首先进行数据收集,如果是属性变化会通知相关依赖进行更新操作。vue3.x改用proxy替换object.defineproperty,因为Proxy可以直接监听对象和数组的变化。
1. Vue的双向绑定
双向绑定是通过数据劫持结合发布者-订阅者模式来实现的,get是收集依赖,set进行数据变化更新操作,实现一个监听器observer,用来劫持并监听所有属性,如果有变动,通知订阅者,实现一个订阅器watcher,可以收到属性的变化并执行响应的函数,从而更新视图,实现一个解析器compile,可以扫描解析每个节点的相关指令,并根据初始化模板数据一起初始化响应的订阅器
1. Vue的neextTick原理
在下次DOM更新循环之后执行延迟回调,nextTick主要使用了宏任务和微任务,根据执行环境分别尝试采用promise,mutationObserver,setImmediate定义一个异步方法,多次调用nextTick会将方法存入任务队列中,通过异步方法清空当前队列
4.Vue组件的生命周期
一个组件从创建,数据初始化,挂载,更新,渲染,更新,销毁的过程称为生命周期。
1. 创建前后:
beforeCreate:Vue实例的data和挂载元素el都未定义,还未初始化。created阶段:Vue实例的数据对象data有了,el为undefined,实例创建完成,挂载未完成 2. 载入前后:
beforeMount:Vue实例的el和data都初始化了,还没有挂载,此时DOM为虚拟DOM。把需内中渲染好的模板结构替换到页面上。mounted:Vue实例挂载完成,成功渲染视图,页面渲染完成。 3. 销毁前后:
beforeDestory:组件即将销毁,还没销毁,destoryed:Vue实例销毁后调用,组件无法使用,已经解除了事件监听以及DOM的绑定 4. 更新前后:
beforeUpdate:当data变化后,数据更新的时候调用,把重新渲染好的模板结构放到页面上,updated:页面更新完成,数据更新新数据 Vue父子组件的生命周期调用顺序
组件的调用顺序都是先父后子,渲染完成时先子后父
组件的销毁时先父后子,销毁完成是先子后父
加载渲染完成:父createCreate–父created–父breateMount–子beforeCreate–子created–子breateMount–子mounted—父mounted子组件更新过程:父breateUpdate—子beforeUpdate----子updated----父updated父组件更新过程: 父beforeUpdate—父updated销毁过程: 父beforeDestory—子beforeDestory—子destoryed—父destoryed computed和watch的区别
computed具有缓存功能,只有依赖的数据发生了变化才触发computed
watcher没有缓存功能,可以监听数据执行回调,深度监听的话对象中的属性时,可以打开deep-true选项,watcher支持异步,有两个参数,newData,和oldData,=,两个属性,deep:深入观察没一层层遍历对象,immediate:组件加载立即执行回调函数
组件data为什么是函数
一个组件被复用多次的话,也就会创建多个实例,本质上这些实例用的都是同一个构造函数,如果data是对象的话,对象属于引用类型,会影响到所有的实例
组件间如何通信
1. 父子组件通信
- 父组件通过props向子组件传值
- 子组件通过emit,on向父组件传值
父子组件获取父子组件实例 p a r e n t , parent, parent,childrenref获取实例的方式调用组件的属性和方法 2. 兄弟组件通信
event bus实例跨组件通信-Vue.prototype.$bus = new Vue()vuex 3. 跨组件通信
vuex a t t r s , attrs, attrs,listeners diff算法事件复杂度
1、引言 之前做过一个前后端分离的项目,也是我第一次做前后端分离的项目。作为一个新手,踩过很多坑,想在这里分享给大家,让大家少走弯路。
2、开发环境 前端:HBuilderX
后端:IDEA
JDK版本:1.8
3、配置文件 项目目录
pom依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.jx</groupId> <artifactId>medical</artifactId> <version>0.0.1-SNAPSHOT</version> <name>medical</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.
在复制论文时,会遇到[ ],如何批量删除
使用word的替换功能,按ctrl+h打开替换窗口,点击“更多”,勾上“使用通配符”,然后在查找内容里输入
\[*\]
@VIORBSLAM2
运行的版本王京的LearnVIORB 链接: [https://github.com/jingpang/LearnVIORB]
运行结果安装
]
[自己的运行版本得到结果]
主要参考:运行结果:
[2]:https://blog.csdn.net/qq_38589460/article/details/82559816
出现的错误更改:
[3]:https://blog.csdn.net/wys422/article/details/78416654
[4]:https://blog.csdn.net/weixin_44401286/article/details/102522880/
RadioButton 是所属 JavaFX 单选框组件,JFXRadioButton 是所属 JFoenix单选框组件。
在使用这些组件时,建议配合 ToggleGroup 标签使用,以下以 JFXRadioButton 为示例:
<JFXRadioButton selected="true" text="选项一" userData="1" styleClass="custom-jfx-radio-button"> <toggleGroup> <ToggleGroup fx:id="toggleGroup"/> </toggleGroup> </JFXRadioButton> <JFXRadioButton selected="false" text="选项二" userData="2" toggleGroup="$toggleGroup"/> <JFXRadioButton selected="false" text="选项三" userData="3" toggleGroup="$toggleGroup"/> 获取 JFXRadioButton 选中的值,可以使用以下方式:
@FXML private ToggleGroup toggleGroup; public void getRadioSelectedValue() { Toggle selectedToggle = toggleGroup.getSelectedToggle(); Object userData = selectedToggle.getUserData(); System.out.println(userData); }
先说下结论,
WIFI 单播与组播的对比
802.11 只有 unicast 和 broadcast。UDP 广播以及组播在实际传输上,根据设置的不同,可以被操作系统自动转换成 unicast 和 broadcast。转成 unicast 的好处很明显:
1. 可以使用 multi stream。即多个空间流传输,能够达到无线的标称速率比如:433Mbps/866Mbps
2. 可靠性比 broadcast 高,因为每一个包对会有物理层的 ACK。
3. 可以使用 802.11n 之后的高级特性,比如 A-MPDU,A-MSDU 等。
缺点也很明显,有多个 client 的时候,每个都要这样传输一遍,很占空域时间。实际上 OpenWrt 等路由器的默认广播 /组播就是用 unicast 发送的,要想修改可以参考如下: https://wiki.openwrt.org/doc/howto/udp_multicast。
使用 multcast 发送的好处如下:
最近再做一个项目,要求WIFI AP实时的向客户端发送UDP数据,有时候可能会存在很多这样的客户端,而发送的数据一样, 这不就是要发送广播包吗?毫不犹豫的使用了UDP广播包发送,但是测试过程中发现个问题,会不定时丢包,每500ms发1包,1分钟120包,总会丢那么三五包, 如果距离离的远的话,会丢的更多,即使客户端就放在AP旁边也会丢几包。
于是就开始了漫长的查问题。
1,模拟测试环境,直接使用电脑与路由器来测试,发现如果用UDP广播 发送的话,一样会丢包, 看来是UDP广播的特性,不保证成功率, 如果使用UDP点到点传输的话,会好很多。 看来使用广播发送更加剧了不确定性。
2. 虽然UDP广播包会丢包,但是ping非常稳定,不会超时,不会丢包,如下图,连续ping了半个小时,1包没有丢。
3. 上面2者对比,我就很困惑, UDP广播为什么会丢呢? 而同样发送的ping包却1包不丢, 就是wifi底层协议的问题? 一时也解决不了了问题,好在不耽误应用, ping是没问题的
下面可以看出丢了4E这包数据, 但此时网络是通的。
下面是周期性发送UDP广播包的的程序,在我的嵌入式linux上已经正常运行。
这个程序调试过程花费了我很多时间,也是没有想到的,主要有2点
1. 新建socket绑定在INADDR_ANY也就是0.0.0.0时, 是不能发送到255.255.255.255的广播包的,只能发送到网段的广播包,如192.168.111.255
2. 要想发送255.255.255.255的广播包,必须绑定一个IP地址,我猜其实是绑定一个本地网卡,
在windows操作系统下面用bat实现,遍历空目录然后给空目录添加空的index.html 代码如下新建一个.bat文件保存双击打开即可: @echo off&echo 查找空文件夹
set dd=%~1
if "%~1"=="" set/p dd=输入或拖入要查找的总文件夹:
cd/d "%dd%"
for /f "delims=" %%a in ('dir/b/s/ad')do (
dir/a/s/b "%%a"|find/v "">nul||(set/a "fn+=1"&echo.路径 %%a 文件夹名 %%~nxa&type nul>>%%a\index.html))
if defined fn (echo 共找到 %fn% 个空文件夹,已创建index.html空文件)else echo 没找到空文件夹
pause 使用方法:双击bat,拖入文件夹,回车
清除当前用户的shiro认证缓存(已验证) //修改成功后清除缓存 DefaultWebSecurityManager securityManager = (DefaultWebSecurityManager)SecurityUtils.getSecurityManager(); ShiroRealm shiroRealm = (ShiroRealm) securityManager.getRealms().iterator().next(); // shiroRealm.clearAllCache(); shiroRealm.getAuthenticationCache().remove(username); 对比网上其他方法根本不行,清除缓存不成功。
Subject subject=SecurityUtils.getSubject(); // 调用子类去清理缓存 super.clearCache(subject.getPrincipals()); 或者
/** * 重写方法,清除当前用户的的 授权缓存 * @param principals */ @Override public void clearCachedAuthorizationInfo(PrincipalCollection principals) { super.clearCachedAuthorizationInfo(principals); } /** * 重写方法,清除当前用户的 认证缓存 * @param principals */ @Override public void clearCachedAuthenticationInfo(PrincipalCollection principals) { super.clearCachedAuthenticationInfo(principals); } @Override public void clearCache(PrincipalCollection principals) { super.clearCache(principals); } shiroRealm.clearCachedAuthenticationInfo(SecurityUtils.getSubject().getPrincipals()); 清除所有缓存(已验证) 在ShiroRealm中定义清除缓存的方法
/** * 自定义方法:清除所有 授权缓存 */ public void clearAllCachedAuthorizationInfo() { getAuthorizationCache().
RBM 是基于能量函数的无向图模型。将图节点分为可见层节点v和隐藏层节点h,其联合概率分布p(h,v)可表示为
其中,能量函数。
利用RBM计算p(h|v)的概率,即在可见层已知时,计算隐藏层h的概率。要根据v推断h,可求argmax p(h|v)。先得通过训练样本来估计模型参数。
采用极大似然估计,由于训练数据只有可见节点,对数似然函数为:
N是样本数。
求p(v)可以由p(h,v)的边缘概率来计算:
对数似然梯度:
,其中,根据能量函数模型有:
故梯度的偏导数:
对求偏导:
前一项的v是样本的点,后一项的v是所有v的值。
前一项可以直接计算,后一项对所有v求均值(期望),是np问题,通过mcmc对p(v)采样近似计算。
今天做APP安装调试,发现始终无法安装成功,一直报错如下:
Installation did not succeed. The application could not be installed: INSTALL_FAILED_USER_RESTRICTED
原因分析1:
上面显示安装程序失败,原因在于用户权限不够。单词restricted : 受限制的
此时,我的开发者选项已经开启,并且windows系统和android studio已经能够识别我的设备了,但还是报了这样的错误。
解决办法1:
发现手机不仅仅要打开USB调试按钮,还要打开USB安装按钮。(小米、红米手机是这样的情况)
原因分析2:
如果以上内容全都调试正确了,还是存在这个无法安装的问题,多半是一开始用的别的手机进行调试安装,然后抽掉线重新换上另一个手机安装调试才会报错。
解决方法2:
只需要重新插拔USB线,重新识别一下即可。
功率计在骑行圈内逐渐被很多骑友认可,无论是职业车手,亦或者假日车手,基本上每台车上都装有一个功率计,因此功率计成为了必不可少的工具。
剖析功率计流行的原因,主要是因为功率计不仅能评估目前车手的状态,可以使车手跟进自己的训练进度,并且将进度转化为数据,通过软件分析后,再次帮助车手了解自身训练情况,做到可以时刻改变训练强度,还可为用户提供有关其性能水平的即时反馈,并通过码表显示出来相关的数据。
目前市面上功率计主要有盘爪功率计,曲柄功率计,花鼓功率计,气门功率计,轴心功率计,锁踏功率计以及少有的风阻功率计。本篇文章将带你详细地认识功率计的结构与工作原理。
功率计的精准度主要影响因素有三个,精度,温度变化以及成本。一个精度较高的功率计,应该只考虑主轴z轴实际功率输出的扭矩,但在实际的情况中,当骑手在骑车时,对踏板施加力的作用,不仅z轴会有扭矩产生,x轴和y轴也会产生扭矩。因此,消除这些额外产生的力矩和扭矩也就成为了一项挑战。
应变片结构
在工业上,有一种专门测量扭矩的工具,它叫应变片。应变计是一种非常灵敏的传感器,应变片尺寸非常小,为了精确测量扭矩,需要严格按照公差要求定位,并且焊接小型电池也是一项艰巨的任务,在焊点处需要非常小心,因为不正确的焊接都会损坏应变片。
应变片的结构如上图所示,由上到下为覆膜,应变片金属敏感栅,应变片绝缘基底,覆膜,金属弹性体。由此可以得出,应变片中包含了多种不同的材料,因此其膨胀系数也各不相同,当温度发生改变时,附在金属弹性体上的应变片,会被拉伸或者压缩,产生额外的应力,导致敏感栅阻值发生变化。并且,每片应变片贴在金属弹性体的胶水厚度也会存在着差异,因此每片应变片都存在一定的差异。
热膨胀系数
如果温度变化, 惠斯通 1/4 桥电路单独连接的应变片将显示输出信号。这个信号被称为“表观应变”或“热输出”,并且独立于测试对象上的机械负载。但是,可以将应变片调整为特定材料的热膨胀系数,使得在温度变化的情况下输出信号非常小。这种应变计被称为“温度响应匹配”或“自补偿”应变片。为了匹配温度响应,必须根据测试材料的热膨胀系数α来选择应变片。
应变片的几何规格
为了提供更准确可靠的扭矩测量,应变片可以采用不同的几何规格,因此应用的范围和方向也不同。
1/4惠斯通电桥电路
惠斯通电桥可以用两种方式测量电阻,一种是通过与已知电阻比较来确定电阻绝对值测量,另一种是测定电阻的相对变化。一般来说,后一种方法用于适用于功率计。它可以测定应变片电阻的相对变化,通常精度可达到 10-4 - 10-2 Ω。惠斯通电桥有助于消除弯曲载荷,但是,它们可能不足以消除来自不同方向的不必要的全部力和弯矩。
从左到右:应变片的分布及接线,及平均电压读数,用于在校准前装载和卸载测试砝码。
校准后通过计算机得出的平均扭矩输出。
为了准确地知道功率输出,第一步便是精确测量Z轴施加的扭矩,而车手踩下踏板所施加的实际扭矩可被分成x,y,z轴方向上的扭矩和转矩,并不能直接转换成功率数值,显示在码表上。而当应变片贴在曲柄与盘片连接的爪盘上时,然后选择使用全桥模式,这样的排布只输出踩踏时的扭矩,因此转换成的数值可被认为实际功率输出。
此外,应变片具有十个指状物,五指连接到盘片,其余五个手指连接到曲柄,这也是因为应变片考虑了牙盘系统中的作用力与反作用力,然后从两侧进行测量,并取平均值,从而提高精度,全桥模式下的应变片还可用于温差补偿,降低了功率计的成本。
JAVA中的DATA日期类 获取当前时间 public class Test { public static void main(String[] args) { // 获取当前时间 Date date1 = new Date(); System.out.println("当前时间:" + date1); // 获取当前操作系统时间的毫秒值 long time = date1.getTime(); System.out.println("当前时间毫秒值:" + time); // Tue Jan 05 10:11:25 CST 2021 ->1609812685322 // 创建指定时间 Date date2=new Date(1609812685322l); System.out.println("date2:"+date2);//指定的不会变化 } } 运行结果:
日期格式化 日期和时间模式(注意大小写,代表的含义是不同的)
yyyy:年
MM:月
dd:日
hh:1~12小时制(1-12)
HH:24小时制(0-23)
mm:分
ss:秒
S:毫秒
E:星期几
D:一年中的第几天
F:一月中的第几个星期(会把这个月总共过的天数除以7)
w:一年中的第几个星期
W:一月中的第几星期(会根据实际情况来算)
a:上下午标识
k:和HH差不多,表示一天24小时制(1-24)。
K:和hh差不多,表示一天12小时制(0-11)。
z:表示时区
DateFormat类
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期→文本)、解析(文本→日期)和标准化日期。
其中,各注解的作用为:
@PathVaribale 获取url中的数据
url的格式为:localhost:8080/eduservice/id@RequestParam 获取请求参数的值
url的格式为:localhost:8080/eduservice?id=100 @PathVaribale 获取url中的数据 看一个例子,如果我们需要获取Url=localhost:8001/eduservice/id中的id值,实现代码如下:
//逻辑删除讲师的方法 //id值需要通过路径来传递 @ApiOperation(value = "根据ID删除讲师") //swagger测试更加清晰 @DeleteMapping("{id}") public R removeTeacher( //swagger测试更加清晰 @ApiParam(name = "id", value = "讲师ID", required = true) //@PathVaribale 获取url中的数据 @PathVariable("id") String id){ boolean flag = teacherService.removeById(id); if(flag) return R.ok(); else return R.error(); } 以上,通过@PathVariable注解来获取URL中的参数时的前提条件是我们知道url的格式时怎么样的。
只有知道url的格式,我们才能在指定的方法上通过相同的格式获取相应位置的参数值。
@RequestParam 获取请求参数的值 当我们在浏览器中输入地址:localhost:8080/hello?id ,即不输入id的具体值,此时返回的结果为null。
但是,当我们在浏览器中输入地址:localhost:8080/hello ,即不输入id参数,则会报错。
@RequestParam注解给我们提供了这种解决方案,即允许用户不输入id时,使用默认值,具体代码如下:
@RestController public class EduController { @GetMapping("{id}") //required=false 表示url中可以不传入id参数,此时就使用默认参数 public String sayHello(@RequestParam(value="id",required = false,defaultValue = "1") Integer id){ return "
上图是一些放大镜,不是打酱油的…
我们在初始化一个html页面的时候,往往会首先在页面头部加上这样一个标签:
<meta name="viewport" content="width=device-width, initial-scale=1"> 那么这个标签中viewport,width=device-width, initial-scale=1分别都是什么意思,为什么需要这样设置呢?
首先说一下viewport,中文翻译过来可以称为视窗。
我举个简单的例子:
比如你使用放大镜去看清明上河图
原谅我的渣渣绘图,虚线是放大镜,也就是可视视口visual viewport,也就是你只能看到这么多。
而清明上河图这幅画本身就是布局视口layout viewport,是原原本本图的大小。
当我们想看到清明上河图更多内容(缩小)或更多细节(放大)的时候,就会去配置上述的标签。
但值得注意的是,当你在页面放大或缩小的时候,仅仅是改变放大镜的倍率,言下之意,变的是可视视口,布局视口是不变的,也就是清明上河图这张纸是不可能变的,变的只是放大镜。
结合到浏览器中,当你用你的小手放大页面时,其实页面并没有变化,只是你的可视窗口通过放大的形式变小了。
以下特意引用MDN原话。
在电脑图形学里面,视口代表了一个可看见的多边形区域(通常来说是矩形)。在浏览器范畴里,它代表的是浏览器中网站可见内容的部分。视口外的内容在被滚动进来前都是不可见的。
视口当前可见的部分叫做可视视口(visual viewport)。可视视口可能会比布局视口(layout viewport )更小,因为当用户缩小浏览器缩放比例时,布局视口不变,而可视视口变小了。
有了viewport的基础,再说device-width和initial-scale就相当容易了
所谓width=device-width,这是在定义你放大镜的尺寸,scale是指你放大镜的倍率。看下面的例子:
简单说明下:left是蓝色的160px,right的黄色的160px,body是红色的。这是放大镜一倍率,放大镜大小等同于页面大小时候的展示,为了不打断连贯性,css样式参考备注1,此外调试设备是iPhone5,默认宽度是320px。
接着我们来尝试把放大镜尺寸加大一倍。即:
<meta name="viewport" content="width=640, initial-scale=1"> 以上,可视视口增大了一倍,当然我的手机屏幕并不可能真的变大了,但效果仍旧实现出来了,现在可以看到右侧更多的东西。
接着,换个方式,重置下width,但将initial-scale设置为2,也就是放大一倍
<meta name="viewport" content="width=320, initial-scale=2"> 以上,放大镜倍率为2倍,所以一屏只能看到屏幕的一半。
最后,这样尝试一下:将上面二者组合起来,首先放大镜只有屏幕的一半(160),然后将倍率调整了2倍。猜猜结果是什么样子?
首先,蓝黄色块肯定会有放大的效果,但由于可视视口仅有160px,屏幕宽度根本放不下两个色块,所以,他们两个不再平行了,而是堆叠在了一起。
讲到这里,有必要总结一下:
viewport的width和scale是两个维度的放大或缩小。(用多大尺寸的放大镜或多高倍率的放大镜)放大缩小仅仅针对可视视口,布局视口不会发生改变。(清明上河图那张纸不可能被拉伸或压缩) 简单的说,viewport,也就是放大镜,他得配置与要看的东西无关,width和scale是他自己属性
最后,回到开始的问题,我们为什么要设置成这样呢?
<meta name="viewport" content="width=device-width, initial-scale=1"> 其实以前,在移动端没这么流行,也就是网页大多是web端的时候,我们的确不加这一句,这样当使用移动端浏览器访问的时候,可视视口会被自动缩放到合适的大小,比如我们看以下的网站没有设置上述标签的时候。
展示效果很不错的…顺带说一句,疫情期间大家戴口罩啊…
但后来移动端成了主流,我们做的很多页面都实现了移动端的兼容,我们不希望缩放,因为可以看到字体显然变小了…所以就必须加上viewport的标签声明,告诉浏览器:“我已经适配了,你不要自行缩放了”。
顺带多说一句,当你告诉浏览器我是一个适配了移动端的网页,此时就不会发生“点透”现象,因为浏览器已经可以确定当前就是在移动端,页面没有缩放,不用等待确认双击缩放事件。更多细节此处就不展开了。
至此想必你对viewport的属性了然于胸,其实就是个放大镜。那么对于viewport标签另外几个属性想必你也知道了:
maximum-scale: 你家最大放大镜的倍率minimum-scale:你家最小放大镜的倍率user-scalable: 你家只有一个不能放大的放大镜…(这货也能防止点透,你能想明白么) 看一下全家福
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=no" /> 备注1
body { background: red; margin: 0; padding: 0; overflow: hidden; } .
目前家庭KTV卡拉Ok系统越来越多的应用到家庭影院环境中,由之前的简单的OK一体机到现在的准专业的OK效果器和功放分体搭配,从简单的音乐和话筒及效果的大小调整到独立效果器上各频段和各效果的细分调整,也明示着家庭影院环境的OK效果越来越受到重视。相应产品也越来越专业化!如何让卡拉OK现场好听,好唱,除了需要卡拉OK各设备的匹配,还需要针对现场情况做调整,而这些调整大部分是在效果器上来完成。今天小编就收集了在唱卡拉OK时遇到的一些问题及调整方式,供朋友们参考
首先是唱歌中麦克上遇到一些问题:
1、原 因:低音能量太强;
解决方法:衰减110-160Hz;
2、声音单薄、声音干:
原 因:中低频能量不足;
解决方法:提升250Hz;
3、唱歌累:
原 因:话筒中频能量不够;
解决方法:提升800Hz频段;
4、声音发虚、打耳:
原 因:中频过强;
解决方法:衰减IK-1.25KHz;
5、声音炸:
原 因:中高频能量过强;
解决方法:衰减2K-4KHz;
6、声音刺耳、金属感强:
原 因:高频能量过强;
解决方法:衰减5KHz;
7、声音有烦躁感:
原 因:高频不柔顺;
解决方法:衰减8K-1OKHz;
8、声音发毛:
原 因:超高频能量过强;
解决方法:衰减12K-16KHz;
音乐回放时的问题:
1、超低频声压不大,但共振声强:
原 因:超低频下限能量过强;
解决方法:大幅度衰减50Hz
以下的频段;
2、感觉超低音缺乏弹性:
原 因:超低音不协调;
解决方法:衰减接近下限的频率
40Hz或50Hz, 提升基准频段80Hz;
3、超低音太软、无力:
原 因:分频点设置过低;
解决方法:提高分频点到120Hz
左右,并提升100-125Hz频段;
4、人声不够清晰:
原 因:中低频太肥;
解决方法:衰减300-500Hz;
5、声音层次感不好:
原 因:中频过强;
解决方法:宽范围衰减800-1.6KHz;
6、人声不透:
原 因:中高频不足;
解决方法:调音台中频扫频到3K;
7、全频音箱感觉不通透:
原 因:中高频缺少;
解决方法:提升3-5KHz;
8、高频空间感不足:
原 因:高频单元超高频不好;
首先打开注册表编辑器
Win+R输入regedit回车
找到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System这个节点,添加如下信息
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP] [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters] "AllowEncryptionOracle"=dword:00000002